texlive[46290] Build/source/libs: icu-60.2

commits+karl at tug.org commits+karl at tug.org
Fri Jan 12 19:35:35 CET 2018


Revision: 46290
          http://tug.org/svn/texlive?view=revision&revision=46290
Author:   karl
Date:     2018-01-12 19:35:28 +0100 (Fri, 12 Jan 2018)
Log Message:
-----------
icu-60.2

Modified Paths:
--------------
    trunk/Build/source/libs/README
    trunk/Build/source/libs/icu/ChangeLog
    trunk/Build/source/libs/icu/TLpatches/TL-Changes
    trunk/Build/source/libs/icu/TLpatches/patch-14-xopen
    trunk/Build/source/libs/icu/TLpatches/patch-16-putil
    trunk/Build/source/libs/icu/TLpatches/patch-17-cygwin-no-w32api
    trunk/Build/source/libs/icu/TLpatches/patch-19-netbsd
    trunk/Build/source/libs/icu/configure
    trunk/Build/source/libs/icu/icu-src/APIChangeReport.html
    trunk/Build/source/libs/icu/icu-src/LICENSE
    trunk/Build/source/libs/icu/icu-src/license.html
    trunk/Build/source/libs/icu/icu-src/readme.html
    trunk/Build/source/libs/icu/icu-src/source/Doxyfile.in
    trunk/Build/source/libs/icu/icu-src/source/Makefile.in
    trunk/Build/source/libs/icu/icu-src/source/allinone/allinone.sln
    trunk/Build/source/libs/icu/icu-src/source/allinone/icucheck.bat
    trunk/Build/source/libs/icu/icu-src/source/common/Makefile.in
    trunk/Build/source/libs/icu/icu-src/source/common/appendable.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/bmpset.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/bmpset.h
    trunk/Build/source/libs/icu/icu-src/source/common/brkeng.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/brkeng.h
    trunk/Build/source/libs/icu/icu-src/source/common/brkiter.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/bytestream.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/bytestrie.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/bytestriebuilder.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/bytestrieiterator.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/caniter.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/chariter.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/charstr.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/charstr.h
    trunk/Build/source/libs/icu/icu-src/source/common/cmemory.h
    trunk/Build/source/libs/icu/icu-src/source/common/common.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/common/common.vcxproj.filters
    trunk/Build/source/libs/icu/icu-src/source/common/cpputils.h
    trunk/Build/source/libs/icu/icu-src/source/common/cstr.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/cstr.h
    trunk/Build/source/libs/icu/icu-src/source/common/cstring.h
    trunk/Build/source/libs/icu/icu-src/source/common/cwchar.h
    trunk/Build/source/libs/icu/icu-src/source/common/dictbe.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/dictbe.h
    trunk/Build/source/libs/icu/icu-src/source/common/dictionarydata.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/dictionarydata.h
    trunk/Build/source/libs/icu/icu-src/source/common/dtintrv.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/errorcode.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/filteredbrk.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/filterednormalizer2.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/hash.h
    trunk/Build/source/libs/icu/icu-src/source/common/icuplug.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/icuplugimp.h
    trunk/Build/source/libs/icu/icu-src/source/common/listformatter.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/loadednormalizer2impl.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/localsvc.h
    trunk/Build/source/libs/icu/icu-src/source/common/locavailable.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/locbased.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/locbased.h
    trunk/Build/source/libs/icu/icu-src/source/common/locdispnames.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/locdspnm.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/locid.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/loclikely.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/locmap.h
    trunk/Build/source/libs/icu/icu-src/source/common/locresdata.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/locutil.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/locutil.h
    trunk/Build/source/libs/icu/icu-src/source/common/messageimpl.h
    trunk/Build/source/libs/icu/icu-src/source/common/messagepattern.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/msvcres.h
    trunk/Build/source/libs/icu/icu-src/source/common/mutex.h
    trunk/Build/source/libs/icu/icu-src/source/common/norm2_nfc_data.h
    trunk/Build/source/libs/icu/icu-src/source/common/norm2allmodes.h
    trunk/Build/source/libs/icu/icu-src/source/common/normalizer2.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/normalizer2impl.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/normalizer2impl.h
    trunk/Build/source/libs/icu/icu-src/source/common/normlzr.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/parsepos.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/patternprops.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/patternprops.h
    trunk/Build/source/libs/icu/icu-src/source/common/pluralmap.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/pluralmap.h
    trunk/Build/source/libs/icu/icu-src/source/common/propname.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/propname.h
    trunk/Build/source/libs/icu/icu-src/source/common/propname_data.h
    trunk/Build/source/libs/icu/icu-src/source/common/propsvec.h
    trunk/Build/source/libs/icu/icu-src/source/common/punycode.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/punycode.h
    trunk/Build/source/libs/icu/icu-src/source/common/putil.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/putilimp.h
    trunk/Build/source/libs/icu/icu-src/source/common/rbbi.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/rbbidata.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/rbbidata.h
    trunk/Build/source/libs/icu/icu-src/source/common/rbbinode.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/rbbinode.h
    trunk/Build/source/libs/icu/icu-src/source/common/rbbirb.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/rbbirb.h
    trunk/Build/source/libs/icu/icu-src/source/common/rbbirpt.h
    trunk/Build/source/libs/icu/icu-src/source/common/rbbiscan.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/rbbiscan.h
    trunk/Build/source/libs/icu/icu-src/source/common/rbbisetb.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/rbbisetb.h
    trunk/Build/source/libs/icu/icu-src/source/common/rbbistbl.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/rbbitblb.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/rbbitblb.h
    trunk/Build/source/libs/icu/icu-src/source/common/resbund.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/resbund_cnv.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/resource.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/resource.h
    trunk/Build/source/libs/icu/icu-src/source/common/ruleiter.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ruleiter.h
    trunk/Build/source/libs/icu/icu-src/source/common/schriter.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/serv.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/serv.h
    trunk/Build/source/libs/icu/icu-src/source/common/servlk.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/servlkf.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/servloc.h
    trunk/Build/source/libs/icu/icu-src/source/common/servls.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/servnotf.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/servnotf.h
    trunk/Build/source/libs/icu/icu-src/source/common/servrbf.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/servslkf.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/sharedobject.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/sharedobject.h
    trunk/Build/source/libs/icu/icu-src/source/common/simpleformatter.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/sprpimpl.h
    trunk/Build/source/libs/icu/icu-src/source/common/stringpiece.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/stringtriebuilder.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uarrsort.h
    trunk/Build/source/libs/icu/icu-src/source/common/uassert.h
    trunk/Build/source/libs/icu/icu-src/source/common/ubidi_props.h
    trunk/Build/source/libs/icu/icu-src/source/common/ubidi_props_data.h
    trunk/Build/source/libs/icu/icu-src/source/common/ubidiimp.h
    trunk/Build/source/libs/icu/icu-src/source/common/ubrk.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ubrkimpl.h
    trunk/Build/source/libs/icu/icu-src/source/common/ucase.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucase.h
    trunk/Build/source/libs/icu/icu-src/source/common/ucase_props_data.h
    trunk/Build/source/libs/icu/icu-src/source/common/ucasemap.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucasemap_titlecase_brkiter.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uchar_props_data.h
    trunk/Build/source/libs/icu/icu-src/source/common/ucharstrie.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucharstriebuilder.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucharstrieiterator.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uchriter.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucln.h
    trunk/Build/source/libs/icu/icu-src/source/common/ucln_cmn.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucln_cmn.h
    trunk/Build/source/libs/icu/icu-src/source/common/ucln_imp.h
    trunk/Build/source/libs/icu/icu-src/source/common/ucmndata.h
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv2022.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_bld.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_bld.h
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_cnv.h
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_ext.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_ext.h
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_imp.h
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_io.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_io.h
    trunk/Build/source/libs/icu/icu-src/source/common/ucnvbocu.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnvmbcs.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnvmbcs.h
    trunk/Build/source/libs/icu/icu-src/source/common/ucnvsel.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucol_data.h
    trunk/Build/source/libs/icu/icu-src/source/common/ucol_swp.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucol_swp.h
    trunk/Build/source/libs/icu/icu-src/source/common/ucurr.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucurrimp.h
    trunk/Build/source/libs/icu/icu-src/source/common/udata.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/udatamem.h
    trunk/Build/source/libs/icu/icu-src/source/common/udataswp.h
    trunk/Build/source/libs/icu/icu-src/source/common/uelement.h
    trunk/Build/source/libs/icu/icu-src/source/common/uenumimp.h
    trunk/Build/source/libs/icu/icu-src/source/common/uhash.h
    trunk/Build/source/libs/icu/icu-src/source/common/uhash_us.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uidna.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uinit.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uinvchar.h
    trunk/Build/source/libs/icu/icu-src/source/common/uiter.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ulist.h
    trunk/Build/source/libs/icu/icu-src/source/common/ulistformatter.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uloc.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uloc_keytype.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ulocimp.h
    trunk/Build/source/libs/icu/icu-src/source/common/umapfile.h
    trunk/Build/source/libs/icu/icu-src/source/common/umutex.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/umutex.h
    trunk/Build/source/libs/icu/icu-src/source/common/unames.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/appendable.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/brkiter.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/bytestream.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/bytestrie.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/bytestriebuilder.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/caniter.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/chariter.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/dbbi.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/docmain.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/dtintrv.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/enumset.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/errorcode.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/filteredbrk.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/icudataver.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/icuplug.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/idna.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/listformatter.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/localpointer.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/locdspnm.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/locid.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/messagepattern.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/normalizer2.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/normlzr.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/parseerr.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/parsepos.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/platform.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/ptypes.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/putil.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/rbbi.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/rep.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/resbund.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/schriter.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/simpleformatter.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/std_string.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/strenum.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/stringpiece.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/stringtriebuilder.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/symtable.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/ubidi.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/ubiditransform.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/ubrk.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/ucasemap.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/ucat.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/uchar.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/ucharstrie.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/ucharstriebuilder.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/uchriter.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/uclean.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/ucnv.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/ucnv_cb.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/ucnv_err.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/ucnvsel.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/uconfig.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/ucurr.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/udata.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/udisplaycontext.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/uenum.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/uidna.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/uiter.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/uldnames.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/ulistformatter.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/uloc.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/umachine.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/umisc.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/unifilt.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/unifunct.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/unimatch.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/uniset.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/unistr.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/unorm.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/unorm2.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/uobject.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/urename.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/urep.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/ures.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/uscript.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/uset.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/usetiter.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/ushape.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/usprep.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/ustring.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/ustringtrie.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/utext.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/utf.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/utf16.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/utf32.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/utf8.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/utf_old.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/utrace.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/utypes.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/uvernum.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/uversion.h
    trunk/Build/source/libs/icu/icu-src/source/common/unifiedcache.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/unifiedcache.h
    trunk/Build/source/libs/icu/icu-src/source/common/unifilt.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/unifunct.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uniset.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uniset_closure.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uniset_props.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/unisetspan.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/unisetspan.h
    trunk/Build/source/libs/icu/icu-src/source/common/unistr.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/unistr_case.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/unistr_case_locale.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/unistr_cnv.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/unistr_props.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/unistr_titlecase_brkiter.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/unistrappender.h
    trunk/Build/source/libs/icu/icu-src/source/common/unorm.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/unormcmp.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/unormimp.h
    trunk/Build/source/libs/icu/icu-src/source/common/uobject.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uposixdefs.h
    trunk/Build/source/libs/icu/icu-src/source/common/uprops.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uprops.h
    trunk/Build/source/libs/icu/icu-src/source/common/uresbund.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uresdata.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uresdata.h
    trunk/Build/source/libs/icu/icu-src/source/common/uresimp.h
    trunk/Build/source/libs/icu/icu-src/source/common/ureslocs.h
    trunk/Build/source/libs/icu/icu-src/source/common/usc_impl.h
    trunk/Build/source/libs/icu/icu-src/source/common/uscript_props.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uset.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uset_imp.h
    trunk/Build/source/libs/icu/icu-src/source/common/uset_props.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/usetiter.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ushape.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/usprep.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ustack.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ustr_cnv.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ustr_cnv.h
    trunk/Build/source/libs/icu/icu-src/source/common/ustr_imp.h
    trunk/Build/source/libs/icu/icu-src/source/common/ustr_titlecase_brkiter.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ustr_wcs.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ustrcase.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ustrcase_locale.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ustrenum.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ustrenum.h
    trunk/Build/source/libs/icu/icu-src/source/common/ustrfmt.h
    trunk/Build/source/libs/icu/icu-src/source/common/ustring.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ustrtrns.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/utext.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/util.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/util.h
    trunk/Build/source/libs/icu/icu-src/source/common/util_props.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/utracimp.h
    trunk/Build/source/libs/icu/icu-src/source/common/utrie.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/utrie.h
    trunk/Build/source/libs/icu/icu-src/source/common/utrie2.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/utrie2.h
    trunk/Build/source/libs/icu/icu-src/source/common/utrie2_builder.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/utrie2_impl.h
    trunk/Build/source/libs/icu/icu-src/source/common/uts46.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/utypeinfo.h
    trunk/Build/source/libs/icu/icu-src/source/common/uvector.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uvector.h
    trunk/Build/source/libs/icu/icu-src/source/common/uvectr32.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uvectr32.h
    trunk/Build/source/libs/icu/icu-src/source/common/uvectr64.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uvectr64.h
    trunk/Build/source/libs/icu/icu-src/source/common/wintz.h
    trunk/Build/source/libs/icu/icu-src/source/config/dist.mk
    trunk/Build/source/libs/icu/icu-src/source/config/make2sh.sed
    trunk/Build/source/libs/icu/icu-src/source/config/mh-aix-va
    trunk/Build/source/libs/icu/icu-src/source/config/mh-cygwin
    trunk/Build/source/libs/icu/icu-src/source/config/mh-cygwin-msvc
    trunk/Build/source/libs/icu/icu-src/source/config/mh-cygwin64
    trunk/Build/source/libs/icu/icu-src/source/config/mh-mingw
    trunk/Build/source/libs/icu/icu-src/source/config/mh-mingw64
    trunk/Build/source/libs/icu/icu-src/source/config/mh-msys-msvc
    trunk/Build/source/libs/icu/icu-src/source/config/mh-os390
    trunk/Build/source/libs/icu/icu-src/source/config/mh-solaris
    trunk/Build/source/libs/icu/icu-src/source/configure
    trunk/Build/source/libs/icu/icu-src/source/configure.ac
    trunk/Build/source/libs/icu/icu-src/source/data/build.xml
    trunk/Build/source/libs/icu/icu-src/source/data/cldr-icu-readme.txt
    trunk/Build/source/libs/icu/icu-src/source/data/icu-coll-deprecates.xml
    trunk/Build/source/libs/icu/icu-src/source/data/icu-config.xml
    trunk/Build/source/libs/icu/icu-src/source/data/icu-locale-deprecates.xml
    trunk/Build/source/libs/icu/icu-src/source/data/icu-rbnf-deprecates.xml
    trunk/Build/source/libs/icu/icu-src/source/data/in/coll/ucadata-implicithan.icu
    trunk/Build/source/libs/icu/icu-src/source/data/in/coll/ucadata-unihan.icu
    trunk/Build/source/libs/icu/icu-src/source/data/in/nfc.nrm
    trunk/Build/source/libs/icu/icu-src/source/data/in/nfkc.nrm
    trunk/Build/source/libs/icu/icu-src/source/data/in/nfkc_cf.nrm
    trunk/Build/source/libs/icu/icu-src/source/data/in/pnames.icu
    trunk/Build/source/libs/icu/icu-src/source/data/in/ubidi.icu
    trunk/Build/source/libs/icu/icu-src/source/data/in/ucase.icu
    trunk/Build/source/libs/icu/icu-src/source/data/in/unames.icu
    trunk/Build/source/libs/icu/icu-src/source/data/in/uprops.icu
    trunk/Build/source/libs/icu/icu-src/source/data/in/uts46.nrm
    trunk/Build/source/libs/icu/icu-src/source/data/makedata.mak
    trunk/Build/source/libs/icu/icu-src/source/data/makedata.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/CaseFolding.txt
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/DerivedCoreProperties.txt
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/DerivedNormalizationProps.txt
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/FractionalUCA.txt
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/NormalizationCorrections.txt
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/NormalizationTest.txt
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/SpecialCasing.txt
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/UCARules.txt
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/UnicodeData.txt
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/changes.txt
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/confusables.txt
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfc.txt
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfkc.txt
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/norm2/nfkc_cf.txt
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/norm2/uts46.txt
    trunk/Build/source/libs/icu/icu-src/source/data/unidata/ppucd.txt
    trunk/Build/source/libs/icu/icu-src/source/extra/scrptrun/scrptrun.cpp
    trunk/Build/source/libs/icu/icu-src/source/extra/scrptrun/scrptrun.h
    trunk/Build/source/libs/icu/icu-src/source/extra/scrptrun/srtest.cpp
    trunk/Build/source/libs/icu/icu-src/source/extra/uconv/Makefile.in
    trunk/Build/source/libs/icu/icu-src/source/extra/uconv/uconv.1.in
    trunk/Build/source/libs/icu/icu-src/source/extra/uconv/uconv.cpp
    trunk/Build/source/libs/icu/icu-src/source/extra/uconv/uconv.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/extra/uconv/unicode/uwmsg.h
    trunk/Build/source/libs/icu/icu-src/source/extra/uconv/uwmsg.c
    trunk/Build/source/libs/icu/icu-src/source/i18n/Makefile.in
    trunk/Build/source/libs/icu/icu-src/source/i18n/affixpatternparser.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/affixpatternparser.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/alphaindex.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/anytrans.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/anytrans.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/astro.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/astro.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/basictz.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/bocsu.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/bocsu.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/brktrans.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/brktrans.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/buddhcal.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/buddhcal.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/calendar.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/casetrn.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/casetrn.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/cecal.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/cecal.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/chnsecal.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/chnsecal.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/choicfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/coleitr.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/coll.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/collation.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/collation.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationbuilder.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationbuilder.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationcompare.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationcompare.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationdata.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationdata.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationdatabuilder.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationdatabuilder.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationdatareader.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationdatareader.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationdatawriter.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationdatawriter.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationfastlatin.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationfastlatin.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationfastlatinbuilder.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationfastlatinbuilder.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationfcd.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationfcd.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationiterator.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationiterator.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationkeys.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationkeys.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationroot.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationroot.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationrootelements.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationrootelements.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationruleparser.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationruleparser.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationsets.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationsets.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationsettings.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationsettings.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationtailoring.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationtailoring.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationweights.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/collationweights.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/collunsafe.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/compactdecimalformat.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/coptccal.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/coptccal.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/cpdtrans.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/cpdtrans.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/csdetect.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/csdetect.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/csmatch.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/csmatch.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/csr2022.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/csr2022.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/csrecog.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/csrecog.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/csrmbcs.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/csrmbcs.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/csrsbcs.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/csrsbcs.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/csrucode.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/csrucode.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/csrutf8.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/csrutf8.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/curramt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/currfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/currfmt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/currpinf.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/currunit.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/dangical.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/dangical.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/datefmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/dayperiodrules.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/dayperiodrules.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/dcfmtimp.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/dcfmtsym.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/decContext.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/decNumber.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/decNumberLocal.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/decfmtst.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/decfmtst.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/decimalformatpattern.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/decimalformatpattern.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/decimalformatpatternimpl.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/decimfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/decimfmtimpl.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/decimfmtimpl.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/digitaffix.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/digitaffix.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/digitaffixesandpadding.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/digitaffixesandpadding.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/digitformatter.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/digitformatter.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/digitgrouping.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/digitgrouping.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/digitinterval.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/digitinterval.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/digitlst.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/digitlst.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/dt_impl.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/dtfmtsym.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/dtitv_impl.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/dtitvfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/dtitvinf.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/dtptngen.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/dtptngen_impl.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/dtrule.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/esctrn.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/esctrn.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/ethpccal.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/ethpccal.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/fmtable.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/fmtable_cnv.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/fmtableimp.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/format.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/fphdlimp.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/fphdlimp.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/fpositer.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/funcrepl.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/funcrepl.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/gender.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/gregocal.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/gregoimp.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/gregoimp.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/hebrwcal.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/hebrwcal.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/i18n.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/i18n/i18n.vcxproj.filters
    trunk/Build/source/libs/icu/icu-src/source/i18n/indiancal.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/indiancal.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/inputext.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/inputext.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/islamcal.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/islamcal.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/japancal.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/japancal.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/measfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/measunit.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/measure.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/msgfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/msgfmt_impl.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/name2uni.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/name2uni.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/nfrlist.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/nfrs.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/nfrs.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/nfrule.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/nfrule.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/nfsubs.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/nfsubs.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/nortrans.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/nortrans.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/nultrans.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/nultrans.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/numfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/numsys.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/numsys_impl.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/olsontz.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/olsontz.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/persncal.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/persncal.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/pluralaffix.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/pluralaffix.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/plurfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/plurrule.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/plurrule_impl.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/precision.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/precision.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/quant.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/quant.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/quantityformatter.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/quantityformatter.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/rbnf.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/rbt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/rbt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/rbt_data.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/rbt_data.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/rbt_pars.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/rbt_pars.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/rbt_rule.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/rbt_rule.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/rbt_set.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/rbt_set.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/rbtz.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/regexcmp.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/regexcmp.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/regexcst.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/regeximp.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/regeximp.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/regexst.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/regexst.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/regextxt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/regextxt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/region.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/region_impl.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/reldatefmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/reldtfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/reldtfmt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/rematch.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/remtrans.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/remtrans.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/repattrn.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/rulebasedcollator.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/scientificnumberformatter.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/scriptset.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/scriptset.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/search.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/selfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/selfmtimpl.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/sharedbreakiterator.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/sharedbreakiterator.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/sharedcalendar.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/shareddateformatsymbols.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/sharednumberformat.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/sharedpluralrules.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/significantdigitinterval.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/simpletz.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/smallintformatter.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/smallintformatter.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/smpdtfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/smpdtfst.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/smpdtfst.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/sortkey.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/standardplural.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/standardplural.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/strmatch.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/strmatch.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/strrepl.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/strrepl.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/stsearch.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/taiwncal.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/taiwncal.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/timezone.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/titletrn.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/titletrn.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/tmunit.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/tmutamt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/tmutfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/tolowtrn.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/tolowtrn.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/toupptrn.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/toupptrn.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/translit.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/transreg.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/transreg.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/tridpars.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/tridpars.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/tzfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/tzgnames.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/tzgnames.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/tznames.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/tznames_impl.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/tznames_impl.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/tzrule.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/tztrans.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/ucal.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/ucln_in.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/ucln_in.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/ucol.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/ucol_imp.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/ucol_res.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/ucol_sit.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/ucoleitr.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/ucsdet.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/udat.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/udateintervalformat.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/udatpg.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/ufieldpositer.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/uitercollationiterator.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/uitercollationiterator.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/umsg.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/umsg_imp.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unesctrn.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/unesctrn.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/uni2name.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/uni2name.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/alphaindex.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/basictz.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/calendar.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/choicfmt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/coleitr.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/coll.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/compactdecimalformat.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/curramt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/currpinf.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/currunit.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/datefmt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/dcfmtsym.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/decimfmt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/dtfmtsym.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/dtitvfmt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/dtitvinf.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/dtptngen.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/dtrule.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/fieldpos.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/fmtable.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/format.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/fpositer.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/gender.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/gregocal.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/measfmt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/measunit.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/measure.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/msgfmt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/numfmt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/numsys.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/plurfmt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/plurrule.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/rbnf.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/rbtz.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/regex.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/region.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/reldatefmt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/scientificnumberformatter.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/search.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/selfmt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/simpletz.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/smpdtfmt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/sortkey.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/stsearch.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/tblcoll.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/timezone.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/tmunit.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/tmutamt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/tmutfmt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/translit.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/tzfmt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/tznames.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/tzrule.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/tztrans.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/ucal.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/ucol.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/ucoleitr.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/ucsdet.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/udat.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/udateintervalformat.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/udatpg.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/ufieldpositer.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/uformattable.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/ugender.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/ulocdata.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/umsg.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/unirepl.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/unum.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/unumsys.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/upluralrules.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/uregex.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/uregion.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/ureldatefmt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/usearch.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/uspoof.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/utmscale.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/utrans.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/vtzone.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unum.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/unumsys.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/upluralrules.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/uregex.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/uregexc.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/uregion.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/usearch.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/uspoof.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/uspoof_build.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/uspoof_conf.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/uspoof_conf.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/uspoof_impl.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/uspoof_impl.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/usrchimp.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/utf16collationiterator.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/utf16collationiterator.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/utf8collationiterator.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/utf8collationiterator.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/utrans.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/valueformatter.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/valueformatter.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/visibledigits.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/visibledigits.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/vtzone.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/vzone.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/vzone.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/windtfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/windtfmt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/winnmfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/winnmfmt.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/wintzimpl.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/wintzimpl.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/zonemeta.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/zonemeta.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/zrule.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/zrule.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/ztrans.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/ztrans.h
    trunk/Build/source/libs/icu/icu-src/source/icudefs.mk.in
    trunk/Build/source/libs/icu/icu-src/source/io/Makefile.in
    trunk/Build/source/libs/icu/icu-src/source/io/io.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/io/io.vcxproj.filters
    trunk/Build/source/libs/icu/icu-src/source/io/locbund.cpp
    trunk/Build/source/libs/icu/icu-src/source/io/locbund.h
    trunk/Build/source/libs/icu/icu-src/source/io/ucln_io.cpp
    trunk/Build/source/libs/icu/icu-src/source/io/ucln_io.h
    trunk/Build/source/libs/icu/icu-src/source/io/ufile.h
    trunk/Build/source/libs/icu/icu-src/source/io/ufmt_cmn.h
    trunk/Build/source/libs/icu/icu-src/source/io/unicode/ustdio.h
    trunk/Build/source/libs/icu/icu-src/source/io/unicode/ustream.h
    trunk/Build/source/libs/icu/icu-src/source/io/uprintf.cpp
    trunk/Build/source/libs/icu/icu-src/source/io/uprintf.h
    trunk/Build/source/libs/icu/icu-src/source/io/uscanf.h
    trunk/Build/source/libs/icu/icu-src/source/io/ustream.cpp
    trunk/Build/source/libs/icu/icu-src/source/layoutex/LXUtilities.cpp
    trunk/Build/source/libs/icu/icu-src/source/layoutex/LXUtilities.h
    trunk/Build/source/libs/icu/icu-src/source/layoutex/ParagraphLayout.cpp
    trunk/Build/source/libs/icu/icu-src/source/layoutex/RunArrays.cpp
    trunk/Build/source/libs/icu/icu-src/source/layoutex/layout/ParagraphLayout.h
    trunk/Build/source/libs/icu/icu-src/source/layoutex/layout/RunArrays.h
    trunk/Build/source/libs/icu/icu-src/source/layoutex/layout/playout.h
    trunk/Build/source/libs/icu/icu-src/source/layoutex/layout/plruns.h
    trunk/Build/source/libs/icu/icu-src/source/layoutex/layoutex.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/layoutex/playout.cpp
    trunk/Build/source/libs/icu/icu-src/source/layoutex/plruns.cpp
    trunk/Build/source/libs/icu/icu-src/source/runConfigureICU
    trunk/Build/source/libs/icu/icu-src/source/samples/break/break.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/break/break.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/samples/break/ubreak.c
    trunk/Build/source/libs/icu/icu-src/source/samples/cal/cal.c
    trunk/Build/source/libs/icu/icu-src/source/samples/cal/cal.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/samples/cal/uprint.c
    trunk/Build/source/libs/icu/icu-src/source/samples/cal/uprint.h
    trunk/Build/source/libs/icu/icu-src/source/samples/case/case.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/case/case.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/samples/case/ucase.c
    trunk/Build/source/libs/icu/icu-src/source/samples/citer/citer.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/citer/citer.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/samples/coll/coll.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/coll/coll.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/samples/csdet/csdet.c
    trunk/Build/source/libs/icu/icu-src/source/samples/csdet/csdet.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/samples/date/date.c
    trunk/Build/source/libs/icu/icu-src/source/samples/date/date.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/samples/date/uprint.c
    trunk/Build/source/libs/icu/icu-src/source/samples/date/uprint.h
    trunk/Build/source/libs/icu/icu-src/source/samples/datecal/cal.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/datecal/ccal.c
    trunk/Build/source/libs/icu/icu-src/source/samples/datefmt/answers/main_0.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/datefmt/answers/main_1.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/datefmt/answers/main_2.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/datefmt/answers/main_3.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/datefmt/datefmt.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/samples/datefmt/main.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/datefmt/util.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/datefmt/util.h
    trunk/Build/source/libs/icu/icu-src/source/samples/dtitvfmtsample/dtitvfmtsample.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/dtitvfmtsample/dtitvfmtsample.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/samples/dtptngsample/dtptngsample.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/dtptngsample/dtptngsample.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/FontMap.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/FontMap.h
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/FontTableCache.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/FontTableCache.h
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/GDIFontInstance.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/GDIFontInstance.h
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/GDIFontMap.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/GDIFontMap.h
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/GDIGUISupport.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/GDIGUISupport.h
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/GUISupport.h
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/GnomeFontInstance.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/GnomeFontInstance.h
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/GnomeFontMap.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/GnomeFontMap.h
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/GnomeGUISupport.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/GnomeGUISupport.h
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/RenderingSurface.h
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/ScriptCompositeFontInstance.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/ScriptCompositeFontInstance.h
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/Surface.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/Surface.h
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/UnicodeReader.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/UnicodeReader.h
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/arraymem.h
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/cgnomelayout.c
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/clayout.c
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/cmaps.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/cmaps.h
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/gdiglue.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/gdiglue.h
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/gnomeglue.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/gnomeglue.h
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/gnomelayout.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/gsupport.h
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/layout.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/layout.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/paragraph.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/paragraph.h
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/pflow.c
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/pflow.h
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/resource.h
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/rsurface.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/rsurface.h
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/sfnt.h
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/ucreader.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/layout/ucreader.h
    trunk/Build/source/libs/icu/icu-src/source/samples/legacy/legacy.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/legacy/legacy.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/samples/legacy/newcol.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/legacy/oldcol.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/msgfmt/answers/main_0.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/msgfmt/answers/main_1.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/msgfmt/answers/main_2.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/msgfmt/answers/main_3.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/msgfmt/main.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/msgfmt/msgfmt.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/samples/msgfmt/util.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/msgfmt/util.h
    trunk/Build/source/libs/icu/icu-src/source/samples/numfmt/capi.c
    trunk/Build/source/libs/icu/icu-src/source/samples/numfmt/main.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/numfmt/numfmt.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/samples/numfmt/util.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/numfmt/util.h
    trunk/Build/source/libs/icu/icu-src/source/samples/plurfmtsample/plurfmtsample.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/plurfmtsample/plurfmtsample.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/samples/props/props.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/props/props.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/samples/strsrch/strsrch.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/strsrch/strsrch.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/samples/translit/answers/main_1.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/translit/answers/main_2.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/translit/answers/main_3.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/translit/answers/main_4.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/translit/answers/unaccent.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/translit/answers/unaccent.h
    trunk/Build/source/libs/icu/icu-src/source/samples/translit/main.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/translit/translit.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/samples/translit/unaccent.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/translit/unaccent.h
    trunk/Build/source/libs/icu/icu-src/source/samples/translit/util.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/translit/util.h
    trunk/Build/source/libs/icu/icu-src/source/samples/uciter8/uciter8.c
    trunk/Build/source/libs/icu/icu-src/source/samples/uciter8/uciter8.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/samples/uciter8/uit_len8.c
    trunk/Build/source/libs/icu/icu-src/source/samples/uciter8/uit_len8.h
    trunk/Build/source/libs/icu/icu-src/source/samples/ucnv/convsamp.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/ucnv/flagcb.c
    trunk/Build/source/libs/icu/icu-src/source/samples/ucnv/flagcb.h
    trunk/Build/source/libs/icu/icu-src/source/samples/ucnv/ucnv.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/samples/udata/reader.c
    trunk/Build/source/libs/icu/icu-src/source/samples/udata/reader.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/samples/udata/writer.c
    trunk/Build/source/libs/icu/icu-src/source/samples/udata/writer.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/samples/ufortune/ufortune.c
    trunk/Build/source/libs/icu/icu-src/source/samples/ufortune/ufortune.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/samples/ugrep/ugrep.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/ugrep/ugrep.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/samples/uresb/Makefile
    trunk/Build/source/libs/icu/icu-src/source/samples/uresb/uresb.c
    trunk/Build/source/libs/icu/icu-src/source/samples/uresb/uresb.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/samples/ustring/ustring.cpp
    trunk/Build/source/libs/icu/icu-src/source/samples/ustring/ustring.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/stubdata/stubdata.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/stubdata/stubdata.vcxproj.filters
    trunk/Build/source/libs/icu/icu-src/source/test/Makefile.in
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/bocu1tst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/callcoll.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/callcoll.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/calldata.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/calltest.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/capitst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/capitst.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cbiapts.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cbiapts.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cbididat.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cbiditransformtst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cbiditst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cbiditst.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cbkittst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ccaltst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ccaltst.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ccapitst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ccapitst.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ccolltst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ccolltst.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cconvtst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cctest.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ccurrtst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ccurrtst.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cdateintervalformattest.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cdattst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cdattst.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cdetst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cdetst.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cdtdptst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cdtdptst.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cdtrgtst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cdtrgtst.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cestst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cestst.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cfintst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cfintst.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cformtst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cformtst.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cfrtst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cfrtst.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cg7coll.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cg7coll.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cgendtst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/chashtst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cintltst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cintltst.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cintltst.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/citertst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/citertst.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cjaptst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cjaptst.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cldrtest.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cloctst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cloctst.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cmsccoll.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cmsgtst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cmsgtst.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cnmdptst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cnmdptst.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cnormtst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cnormtst.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cnumtst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cnumtst.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cpluralrulestest.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cposxtst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/crelativedateformattest.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/crestst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/crestst.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/creststn.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/creststn.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cstrcase.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cstrtest.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cturtst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cturtst.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cucdapi.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cucdapi.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cucdtst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/currtest.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/custrtrn.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/custrtst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/cutiltst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/encoll.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/encoll.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/eurocreg.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/hpmufn.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/idnatest.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/nccbtst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/nccbtst.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ncnvfbts.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ncnvfbts.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ncnvtst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/nfsprep.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/nfsprep.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/nucnvtst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/nucnvtst.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/putiltst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/reapits.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/sorttest.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/spooftest.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/spreptst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/sprpdata.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/stdnmtst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/tracetst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/trie2test.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/trietest.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ucnvseltst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ucnvseltst.h
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ucsdetst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/udatatst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/udatpg_test.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/uenumtst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/ulistfmttest.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/uregiontest.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/usettest.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/usrchdat.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/usrchtst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/utexttst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/utf16tst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/utf8tst.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/utmstest.c
    trunk/Build/source/libs/icu/icu-src/source/test/cintltst/utransts.c
    trunk/Build/source/libs/icu/icu-src/source/test/compat/tzdate.c
    trunk/Build/source/libs/icu/icu-src/source/test/depstest/dependencies.txt
    trunk/Build/source/libs/icu/icu-src/source/test/hdrtst/Makefile.in
    trunk/Build/source/libs/icu/icu-src/source/test/hdrtst/cxxfiles.txt
    trunk/Build/source/libs/icu/icu-src/source/test/hdrtst/testinternalheaders.sh
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/Makefile.in
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/aliastst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/aliastst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/allcoll.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/allcoll.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/alphaindextst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/alphaindextst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/apicoll.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/apicoll.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/astrotst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/astrotst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/bidiconf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/bytestrietest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/calcasts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/calcasts.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/callimts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/callimts.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/calregts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/calregts.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/caltest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/caltest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/caltestdata.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/caltztst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/caltztst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/canittst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/canittst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/citrtest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/citrtest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/collationtest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/colldata.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/colldata.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/compactdecimalformattest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/convtest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/convtest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/cpdtrtst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/cpdtrtst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/csdetest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/csdetest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/currcoll.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/currcoll.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dadrcal.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dadrcal.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dadrfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dadrfmt.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/datadrivennumberformattestsuite.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/datadrivennumberformattestsuite.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dcfmapts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dcfmapts.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dcfmtest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dcfmtest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/decoll.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/decoll.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dtfmapts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dtfmapts.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dtfmrgts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dtfmrgts.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dtfmtrtts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dtfmtrtts.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dtfmttst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dtfmttst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dtifmtts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dtifmtts.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dtptngts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/dtptngts.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/encoll.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/encoll.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/escoll.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/escoll.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/ficoll.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/ficoll.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/fldset.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/fldset.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/frcoll.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/frcoll.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/g7coll.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/g7coll.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/genderinfotest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/icusvtst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/icusvtst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/idnaconf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/idnaconf.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/idnaref.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/idnaref.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/incaltst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/incaltst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/intltest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/intltest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/intltest.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/intltest.vcxproj.filters
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/itercoll.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/itercoll.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/itformat.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/itformat.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/itmajor.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/itmajor.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/itrbbi.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/itrbbi.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/itrbnf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/itrbnf.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/itrbnfp.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/itrbnfp.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/itrbnfrt.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/itrbnfrt.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/itspoof.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/itspoof.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/ittrans.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/ittrans.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/itutil.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/itutil.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/jacoll.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/jacoll.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/jamotest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/jamotest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/lcukocol.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/lcukocol.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/listformattertest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/listformattertest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/locnmtst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/locnmtst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/loctest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/loctest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/measfmttest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/miscdtfm.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/miscdtfm.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/mnkytst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/mnkytst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/msfmrgts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/msfmrgts.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/nmfmapts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/nmfmapts.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/nmfmtrt.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/nmfmtrt.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/normconf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/normconf.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/nptrans.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/nptrans.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/numberformat2test.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/numberformattesttuple.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/numberformattesttuple.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/numfmtspectest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/numfmtst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/numfmtst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/numrgts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/numrgts.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/pluralmaptest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/plurfmts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/plurfmts.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/plurults.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/plurults.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/pptest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/pptest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/punyref.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/quantityformattertest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/rbbiapts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/rbbiapts.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/rbbimonkeytest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/rbbimonkeytest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/rbbitst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/rbbitst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/regcoll.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/regcoll.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/regextst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/regextst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/regiontst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/regiontst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/reldatefmttest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/reptest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/reptest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/restest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/restest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/restsnew.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/restsnew.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/scientificnumberformattertest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/sdtfmtts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/sdtfmtts.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/selfmts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/selfmts.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/sfwdchit.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/sfwdchit.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/simpleformattertest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/simplethread.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/simplethread.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/srchtest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/srchtest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/ssearch.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/ssearch.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/strcase.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/strtest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/strtest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/svccoll.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/svccoll.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tchcfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tchcfmt.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/testidn.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/testidna.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/testidna.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/testutil.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/testutil.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/textfile.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/textfile.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tfsmalls.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tfsmalls.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/thcoll.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/thcoll.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tmsgfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tmsgfmt.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tokiter.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tokiter.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/transapi.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/transapi.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/transrt.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/transrt.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/transtst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/transtst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/trcoll.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/trcoll.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/trnserr.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/trnserr.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tscoll.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tscoll.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tsdate.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tsdate.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tsdcfmsy.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tsdcfmsy.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tsdtfmsy.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tsdtfmsy.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tsmthred.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tsmthred.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tsnmfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tsnmfmt.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tsputil.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tsputil.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tstnorm.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tstnorm.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tstnrapi.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tufmtts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tzbdtest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tzbdtest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tzfmttst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tzfmttst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tzoffloc.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tzoffloc.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tzregts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tzregts.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tzrulets.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tzrulets.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tztest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/tztest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/ucaconf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/ucaconf.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/ucdtest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/ucdtest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/ucharstrietest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/unifiedcachetest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/uobjtest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/uobjtest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/usettest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/usettest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/ustrtest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/ustrtest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/uts46test.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/utxttest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/utxttest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/uvectest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/uvectest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/v32test.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/v32test.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/windttst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/windttst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/winnmtst.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/winnmtst.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/winutil.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/winutil.h
    trunk/Build/source/libs/icu/icu-src/source/test/iotest/Makefile.in
    trunk/Build/source/libs/icu/icu-src/source/test/iotest/filetst.c
    trunk/Build/source/libs/icu/icu-src/source/test/iotest/iotest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/iotest/iotest.h
    trunk/Build/source/libs/icu/icu-src/source/test/iotest/iotest.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/test/iotest/stream.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/iotest/strtst.c
    trunk/Build/source/libs/icu/icu-src/source/test/iotest/trnstst.c
    trunk/Build/source/libs/icu/icu-src/source/test/letest/FontObject.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/letest/FontObject.h
    trunk/Build/source/libs/icu/icu-src/source/test/letest/FontTableCache.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/letest/FontTableCache.h
    trunk/Build/source/libs/icu/icu-src/source/test/letest/PortableFontInstance.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/letest/PortableFontInstance.h
    trunk/Build/source/libs/icu/icu-src/source/test/letest/SimpleFontInstance.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/letest/SimpleFontInstance.h
    trunk/Build/source/libs/icu/icu-src/source/test/letest/cfonts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/letest/cfonts.h
    trunk/Build/source/libs/icu/icu-src/source/test/letest/cletest.c
    trunk/Build/source/libs/icu/icu-src/source/test/letest/cletest.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/test/letest/cmaps.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/letest/cmaps.h
    trunk/Build/source/libs/icu/icu-src/source/test/letest/gendata.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/letest/gendata.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/test/letest/letest.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/letest/letest.h
    trunk/Build/source/libs/icu/icu-src/source/test/letest/letest.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/test/letest/letsutil.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/letest/letsutil.h
    trunk/Build/source/libs/icu/icu-src/source/test/letest/sfnt.h
    trunk/Build/source/libs/icu/icu-src/source/test/letest/testdata.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/letest/xmlreader.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/letest/xmlreader.h
    trunk/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/DateFmtPerf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/DateFmtPerf.h
    trunk/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/DateFmtPerf.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/breakdata.h
    trunk/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/collationdata.h
    trunk/Build/source/libs/icu/icu-src/source/test/perf/DateFmtPerf/datedata.h
    trunk/Build/source/libs/icu/icu-src/source/test/perf/charperf/charperf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/charperf/charperf.h
    trunk/Build/source/libs/icu/icu-src/source/test/perf/charperf/charperf.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/test/perf/collationperf/collperf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/collperf/collperf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/collperf/collperf.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/test/perf/collperf2/collperf2.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/collperf2/collperf2.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/test/perf/convperf/convperf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/convperf/convperf.h
    trunk/Build/source/libs/icu/icu-src/source/test/perf/convperf/convperf.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/test/perf/convperf/data.h
    trunk/Build/source/libs/icu/icu-src/source/test/perf/dicttrieperf/dicttrieperf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/Makefile.in
    trunk/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/howExpensiveIs.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/sieve.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/howExpensiveIs/sieve.h
    trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/FontObject.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/FontObject.h
    trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/FontTableCache.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/FontTableCache.h
    trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/PortableFontInstance.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/PortableFontInstance.h
    trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/SimpleFontInstance.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/SimpleFontInstance.h
    trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/cfonts.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/cfonts.h
    trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/cmaps.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/cmaps.h
    trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/leperf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/letrperf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/sfnt.h
    trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/xmlreader.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/leperf/xmlreader.h
    trunk/Build/source/libs/icu/icu-src/source/test/perf/normperf/dtfmtrtperf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/normperf/dtfmtrtperf.h
    trunk/Build/source/libs/icu/icu-src/source/test/perf/normperf/dtfmtrtperf.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/test/perf/normperf/normperf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/normperf/normperf.h
    trunk/Build/source/libs/icu/icu-src/source/test/perf/normperf/normperf.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/test/perf/strsrchperf/strsrchperf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/strsrchperf/strsrchperf.h
    trunk/Build/source/libs/icu/icu-src/source/test/perf/strsrchperf/strsrchperf.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/ubrkperf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/ubrkperf.h
    trunk/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/ubrkperf.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/test/perf/ubrkperf/ubrkperfold.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/ucnvavailperf/ucnvavailperf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/ucnvavailperf/ucnvavailperf.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/bitset.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/trieset.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/draft/unicont.h
    trunk/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/unisetperf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/unisetperf/unisetperf.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/test/perf/usetperf/bitset.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/usetperf/bitset.h
    trunk/Build/source/libs/icu/icu-src/source/test/perf/usetperf/usetperf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/usetperf/usetperf.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/stringperf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/stringperf.h
    trunk/Build/source/libs/icu/icu-src/source/test/perf/ustrperf/stringperf.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/test/perf/utfperf/utfperf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/utfperf/utfperf.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/test/perf/utrie2perf/utrie2perf.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/perf/utrie2perf/utrie2perf.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/BidiTest.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/CollationTest_NON_IGNORABLE_SHORT.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/CollationTest_SHIFTED_SHORT.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/GraphemeBreakTest.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/LineBreakTest.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/SentenceBreakTest.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/WordBreakTest.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/grapheme.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_loose.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_loose_cj.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_normal.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/line_normal_cj.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/readme.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/word.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/break_rules/word_POSIX.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/conversion.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/numberformattestspecification.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/rbbitst.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/regextst.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/root.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/structLocale.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testmap/testmap.c
    trunk/Build/source/libs/icu/icu-src/source/test/thaitest/thaitest.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/Makefile.in
    trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/ctest.c
    trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/ctestfw.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/datamap.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/testdata.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/tstdtmod.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/ucln_ct.c
    trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/ctest.h
    trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/datamap.h
    trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/testdata.h
    trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/testlog.h
    trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/testtype.h
    trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/tstdtmod.h
    trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/uperf.h
    trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/unicode/utimer.h
    trunk/Build/source/libs/icu/icu-src/source/tools/ctestfw/uperf.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/genbrk/genbrk.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/genbrk/genbrk.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/tools/genccode/genccode.c
    trunk/Build/source/libs/icu/icu-src/source/tools/genccode/genccode.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/tools/gencfu/gencfu.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/gencfu/gencfu.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/tools/gencmn/gencmn.c
    trunk/Build/source/libs/icu/icu-src/source/tools/gencmn/gencmn.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/tools/gencnval/gencnval.c
    trunk/Build/source/libs/icu/icu-src/source/tools/gencnval/gencnval.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/tools/gencolusb/extract_unsafe_backwards.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/gencolusb/verify_uset.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/gendict/gendict.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/gendict/gendict.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/tools/gennorm2/Makefile.in
    trunk/Build/source/libs/icu/icu-src/source/tools/gennorm2/gennorm2.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/gennorm2/gennorm2.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/tools/gennorm2/n2builder.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/gennorm2/n2builder.h
    trunk/Build/source/libs/icu/icu-src/source/tools/genrb/Makefile.in
    trunk/Build/source/libs/icu/icu-src/source/tools/genrb/derb.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/genrb/derb.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/tools/genrb/errmsg.c
    trunk/Build/source/libs/icu/icu-src/source/tools/genrb/errmsg.h
    trunk/Build/source/libs/icu/icu-src/source/tools/genrb/genrb.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/genrb/genrb.h
    trunk/Build/source/libs/icu/icu-src/source/tools/genrb/genrb.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/tools/genrb/parse.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/genrb/parse.h
    trunk/Build/source/libs/icu/icu-src/source/tools/genrb/prscmnts.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/genrb/prscmnts.h
    trunk/Build/source/libs/icu/icu-src/source/tools/genrb/rbutil.c
    trunk/Build/source/libs/icu/icu-src/source/tools/genrb/rbutil.h
    trunk/Build/source/libs/icu/icu-src/source/tools/genrb/read.c
    trunk/Build/source/libs/icu/icu-src/source/tools/genrb/read.h
    trunk/Build/source/libs/icu/icu-src/source/tools/genrb/reslist.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/genrb/reslist.h
    trunk/Build/source/libs/icu/icu-src/source/tools/genrb/rle.c
    trunk/Build/source/libs/icu/icu-src/source/tools/genrb/rle.h
    trunk/Build/source/libs/icu/icu-src/source/tools/genrb/ustr.c
    trunk/Build/source/libs/icu/icu-src/source/tools/genrb/ustr.h
    trunk/Build/source/libs/icu/icu-src/source/tools/genrb/wrtjava.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/genrb/wrtxml.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/genren/Makefile
    trunk/Build/source/libs/icu/icu-src/source/tools/genren/README
    trunk/Build/source/libs/icu/icu-src/source/tools/genren/genren.pl
    trunk/Build/source/libs/icu/icu-src/source/tools/gensprep/gensprep.c
    trunk/Build/source/libs/icu/icu-src/source/tools/gensprep/gensprep.h
    trunk/Build/source/libs/icu/icu-src/source/tools/gensprep/gensprep.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/tools/gensprep/store.c
    trunk/Build/source/libs/icu/icu-src/source/tools/gentest/genres32.c
    trunk/Build/source/libs/icu/icu-src/source/tools/gentest/gentest.c
    trunk/Build/source/libs/icu/icu-src/source/tools/gentest/gentest.h
    trunk/Build/source/libs/icu/icu-src/source/tools/gentest/gentest.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/tools/icu-svnprops-check.py
    trunk/Build/source/libs/icu/icu-src/source/tools/icuinfo/icuinfo.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/icuinfo/icuinfo.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/tools/icuinfo/testplug.c
    trunk/Build/source/libs/icu/icu-src/source/tools/icuinfo/testplug.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/tools/icupkg/icupkg.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/icupkg/icupkg.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/tools/icuswap/icuswap.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/icuswap/icuswap.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/tools/makeconv/Makefile.in
    trunk/Build/source/libs/icu/icu-src/source/tools/makeconv/gencnvex.c
    trunk/Build/source/libs/icu/icu-src/source/tools/makeconv/genmbcs.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/makeconv/genmbcs.h
    trunk/Build/source/libs/icu/icu-src/source/tools/makeconv/makeconv.1.in
    trunk/Build/source/libs/icu/icu-src/source/tools/makeconv/makeconv.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/makeconv/makeconv.h
    trunk/Build/source/libs/icu/icu-src/source/tools/makeconv/makeconv.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/tools/makeconv/ucnvstat.c
    trunk/Build/source/libs/icu/icu-src/source/tools/pkgdata/Makefile.in
    trunk/Build/source/libs/icu/icu-src/source/tools/pkgdata/pkgdata.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/pkgdata/pkgdata.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/tools/pkgdata/pkgtypes.c
    trunk/Build/source/libs/icu/icu-src/source/tools/pkgdata/pkgtypes.h
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/Makefile.in
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/collationinfo.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/collationinfo.h
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/dbgutil.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/dbgutil.h
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/denseranges.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/denseranges.h
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/filestrm.h
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/filetools.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/filetools.h
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/flagparser.h
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/package.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/package.h
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/pkg_genc.h
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/pkg_gencmn.h
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/pkg_icu.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/pkg_icu.h
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/pkg_imp.h
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/pkgitems.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/ppucd.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/ppucd.h
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/swapimpl.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/swapimpl.h
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.h
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/toolutil.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/ucbuf.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/ucbuf.h
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/ucln_tu.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/ucm.h
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/udbgutil.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/udbgutil.h
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/unewdata.h
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/uoptions.h
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/uparse.h
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/writesrc.h
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/xmlparser.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/xmlparser.h
    trunk/Build/source/libs/icu/icu-src/source/tools/tzcode/Makefile.in
    trunk/Build/source/libs/icu/icu-src/source/tools/tzcode/icuregions
    trunk/Build/source/libs/icu/icu-src/source/tools/tzcode/icuzdump.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/tzcode/icuzdump.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/tools/tzcode/icuzones
    trunk/Build/source/libs/icu/icu-src/source/tools/tzcode/tz2icu.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/tzcode/tz2icu.h
    trunk/Build/source/libs/icu/icu-src/source/tools/tzcode/zdump.c
    trunk/Build/source/libs/icu/version.ac

Added Paths:
-----------
    trunk/Build/source/libs/icu/icu-src/source/common/bytesinkutil.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/bytesinkutil.h
    trunk/Build/source/libs/icu/icu-src/source/common/cmemory.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/common_uwp.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/common/cstring.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/cwchar.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/edits.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/icudataver.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/locmap.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/propsvec.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/rbbi_cache.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/rbbi_cache.h
    trunk/Build/source/libs/icu/icu-src/source/common/uarrsort.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ubidi.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ubidi_props.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ubidiln.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ubiditransform.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ubidiwrt.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucasemap_imp.h
    trunk/Build/source/libs/icu/icu-src/source/common/ucat.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uchar.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucmndata.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_cb.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_cnv.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_ct.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_err.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_lmb.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_set.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_u16.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_u32.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_u7.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_u8.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnvdisp.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnvhz.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnvisci.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnvlat1.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ucnvscsu.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/udatamem.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/udataswp.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uenum.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uhash.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uinvchar.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ulist.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uloc_tag.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/umapfile.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/umath.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/casemap.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/char16ptr.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/edits.h
    trunk/Build/source/libs/icu/icu-src/source/common/unicode/stringoptions.h
    trunk/Build/source/libs/icu/icu-src/source/common/ures_cnv.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/usc_impl.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/uscript.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/ustrfmt.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/utf_impl.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/utrace.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/utypes.cpp
    trunk/Build/source/libs/icu/icu-src/source/common/wintz.cpp
    trunk/Build/source/libs/icu/icu-src/source/data/in/icudt60l.dat
    trunk/Build/source/libs/icu/icu-src/source/data/makedata_uwp.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/i18n/decContext.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/decNumber.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/i18n_uwp.vcxproj
    trunk/Build/source/libs/icu/icu-src/source/i18n/nounit.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_affixutils.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_affixutils.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_compact.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_compact.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_decimalquantity.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_decimalquantity.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_decimfmtprops.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_decimfmtprops.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_fluent.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_formatimpl.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_formatimpl.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_grouping.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_integerwidth.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_longnames.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_longnames.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_modifiers.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_modifiers.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_notation.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_padding.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_patternmodifier.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_patternmodifier.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_patternstring.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_patternstring.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_rounding.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_roundingutils.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_scientific.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_scientific.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_stringbuilder.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_stringbuilder.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_types.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/number_utils.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/ulocdata.cpp
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/nounit.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/unicode/numberformatter.h
    trunk/Build/source/libs/icu/icu-src/source/i18n/utmscale.cpp
    trunk/Build/source/libs/icu/icu-src/source/io/sprintf.cpp
    trunk/Build/source/libs/icu/icu-src/source/io/sscanf.cpp
    trunk/Build/source/libs/icu/icu-src/source/io/ufile.cpp
    trunk/Build/source/libs/icu/icu-src/source/io/ufmt_cmn.cpp
    trunk/Build/source/libs/icu/icu-src/source/io/uprntf_p.cpp
    trunk/Build/source/libs/icu/icu-src/source/io/uscanf.cpp
    trunk/Build/source/libs/icu/icu-src/source/io/uscanf_p.cpp
    trunk/Build/source/libs/icu/icu-src/source/io/ustdio.cpp
    trunk/Build/source/libs/icu/icu-src/source/stubdata/stubdata.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/numbertest.h
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_affixutils.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_api.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_decimalquantity.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_modifiers.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_patternmodifier.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_patternstring.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/numbertest_stringbuilder.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/punyref.cpp
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/IdnaTest.txt
    trunk/Build/source/libs/icu/icu-src/source/test/testdata/emoji-test.txt
    trunk/Build/source/libs/icu/icu-src/source/tools/escapesrc/
    trunk/Build/source/libs/icu/icu-src/source/tools/escapesrc/Makefile.in
    trunk/Build/source/libs/icu/icu-src/source/tools/escapesrc/cptbl.h
    trunk/Build/source/libs/icu/icu-src/source/tools/escapesrc/escapesrc.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/escapesrc/expect-simple.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/escapesrc/tblgen.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/escapesrc/test-nochange.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/escapesrc/test-simple.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/gennorm2/extradata.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/gennorm2/extradata.h
    trunk/Build/source/libs/icu/icu-src/source/tools/gennorm2/norms.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/gennorm2/norms.h
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/filestrm.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/flagparser.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/pkg_genc.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/pkg_gencmn.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/ucm.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/ucmstate.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/unewdata.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/uoptions.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/uparse.cpp
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/writesrc.cpp

Removed Paths:
-------------
    trunk/Build/source/libs/icu/icu-src/source/common/cmemory.c
    trunk/Build/source/libs/icu/icu-src/source/common/cstring.c
    trunk/Build/source/libs/icu/icu-src/source/common/cwchar.c
    trunk/Build/source/libs/icu/icu-src/source/common/icudataver.c
    trunk/Build/source/libs/icu/icu-src/source/common/locmap.c
    trunk/Build/source/libs/icu/icu-src/source/common/propsvec.c
    trunk/Build/source/libs/icu/icu-src/source/common/uarrsort.c
    trunk/Build/source/libs/icu/icu-src/source/common/ubidi.c
    trunk/Build/source/libs/icu/icu-src/source/common/ubidi_props.c
    trunk/Build/source/libs/icu/icu-src/source/common/ubidiln.c
    trunk/Build/source/libs/icu/icu-src/source/common/ubiditransform.c
    trunk/Build/source/libs/icu/icu-src/source/common/ubidiwrt.c
    trunk/Build/source/libs/icu/icu-src/source/common/ucat.c
    trunk/Build/source/libs/icu/icu-src/source/common/uchar.c
    trunk/Build/source/libs/icu/icu-src/source/common/ucmndata.c
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv.c
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_cb.c
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_cnv.c
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_ct.c
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_err.c
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_lmb.c
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_set.c
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_u16.c
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_u32.c
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_u7.c
    trunk/Build/source/libs/icu/icu-src/source/common/ucnv_u8.c
    trunk/Build/source/libs/icu/icu-src/source/common/ucnvdisp.c
    trunk/Build/source/libs/icu/icu-src/source/common/ucnvhz.c
    trunk/Build/source/libs/icu/icu-src/source/common/ucnvisci.c
    trunk/Build/source/libs/icu/icu-src/source/common/ucnvlat1.c
    trunk/Build/source/libs/icu/icu-src/source/common/ucnvscsu.c
    trunk/Build/source/libs/icu/icu-src/source/common/udatamem.c
    trunk/Build/source/libs/icu/icu-src/source/common/udataswp.c
    trunk/Build/source/libs/icu/icu-src/source/common/uenum.c
    trunk/Build/source/libs/icu/icu-src/source/common/uhash.c
    trunk/Build/source/libs/icu/icu-src/source/common/uinvchar.c
    trunk/Build/source/libs/icu/icu-src/source/common/ulist.c
    trunk/Build/source/libs/icu/icu-src/source/common/uloc_tag.c
    trunk/Build/source/libs/icu/icu-src/source/common/umapfile.c
    trunk/Build/source/libs/icu/icu-src/source/common/umath.c
    trunk/Build/source/libs/icu/icu-src/source/common/ures_cnv.c
    trunk/Build/source/libs/icu/icu-src/source/common/usc_impl.c
    trunk/Build/source/libs/icu/icu-src/source/common/uscript.c
    trunk/Build/source/libs/icu/icu-src/source/common/ustrfmt.c
    trunk/Build/source/libs/icu/icu-src/source/common/utf_impl.c
    trunk/Build/source/libs/icu/icu-src/source/common/utrace.c
    trunk/Build/source/libs/icu/icu-src/source/common/utypes.c
    trunk/Build/source/libs/icu/icu-src/source/common/wintz.c
    trunk/Build/source/libs/icu/icu-src/source/data/in/icudt58l.dat
    trunk/Build/source/libs/icu/icu-src/source/data/misc/
    trunk/Build/source/libs/icu/icu-src/source/data/unit/
    trunk/Build/source/libs/icu/icu-src/source/i18n/decContext.c
    trunk/Build/source/libs/icu/icu-src/source/i18n/decNumber.c
    trunk/Build/source/libs/icu/icu-src/source/i18n/ulocdata.c
    trunk/Build/source/libs/icu/icu-src/source/i18n/utmscale.c
    trunk/Build/source/libs/icu/icu-src/source/io/sprintf.c
    trunk/Build/source/libs/icu/icu-src/source/io/sscanf.c
    trunk/Build/source/libs/icu/icu-src/source/io/ufile.c
    trunk/Build/source/libs/icu/icu-src/source/io/ufmt_cmn.c
    trunk/Build/source/libs/icu/icu-src/source/io/uprntf_p.c
    trunk/Build/source/libs/icu/icu-src/source/io/uscanf.c
    trunk/Build/source/libs/icu/icu-src/source/io/uscanf_p.c
    trunk/Build/source/libs/icu/icu-src/source/io/ustdio.c
    trunk/Build/source/libs/icu/icu-src/source/stubdata/stubdata.c
    trunk/Build/source/libs/icu/icu-src/source/test/intltest/punyref.c
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/filestrm.c
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/flagparser.c
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/pkg_genc.c
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/pkg_gencmn.c
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/ucm.c
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/ucmstate.c
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/unewdata.c
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/uoptions.c
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/uparse.c
    trunk/Build/source/libs/icu/icu-src/source/tools/toolutil/writesrc.c

Modified: trunk/Build/source/libs/README
===================================================================
--- trunk/Build/source/libs/README	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/README	2018-01-12 18:35:28 UTC (rev 46290)
@@ -27,7 +27,7 @@
 harfbuzz 1.7.4 - checked 20dec17
   http://www.freedesktop.org/software/harfbuzz/release/
 
-icu 58.2 - checked 13mar17
+icu 60.2 - checked 11jan18
   http://download.icu-project.org/files/icu4c/
 
 libpaper 1.1.24+nmu2 - checked 24oct13

Modified: trunk/Build/source/libs/icu/ChangeLog
===================================================================
--- trunk/Build/source/libs/icu/ChangeLog	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/ChangeLog	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,3 +1,7 @@
+2018-01-12  Karl Berry  <karl at freefriends.org>
+
+	* Import icu-60, now requiring C++11; reautoconf.
+
 2017-04-27  Karl Berry  <karl at tug.org>
 
 	* Makefile.am (LDADD): link icutest with ICU_LIBS_EXTRA.

Modified: trunk/Build/source/libs/icu/TLpatches/TL-Changes
===================================================================
--- trunk/Build/source/libs/icu/TLpatches/TL-Changes	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/TLpatches/TL-Changes	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,11 +1,11 @@
-Changes applied to the icu-58.2 tree as obtained from:
-	http://download.icu-project.org/files/icu4c/58.2/icu4c-58_2-src.tgz
-        and icu4c-58_2-data.zip
+Changes applied to the icu-60.2 tree as obtained from:
+	http://download.icu-project.org/files/icu4c/60.2/icu4c-60_2-src.tgz
+        and icu4c-60_2-data.zip
 
-cd /tmp # or wherever
-tar xf icu4c-*-src.tgz # should unpack into icu/*
-cd $Build/source/libs/icu/icu-src  # for whatever $Build directory
-\cp -arf /tmp/icu/* .
+cd $Build/source/libs/icu       # for whatever $Build directory
+tar xf /tmp/icu4c-*-src.tgz     # should unpack into icu/*
+mv icu icu-src
+cd icu-src
 rm -r as_is packaging		# don't bother including these in our tree
 #
 # files to add:
@@ -14,21 +14,22 @@
 svn status | sed -n 's/^\?//p'  # rerun, should be empty now
 #
 # files to remove:
-diff -qr . /tmp/icu/ | sed -n -e 's,^Only in \./\(.*\): ,\1/,p'
+svn status | sed -n 's/^\!//p'
 svn rm `!!`
-diff ...			# rerun, should be empty now
+svn status | sed -n 's/^\!//p'  # rerun, should be empty now
 
 # update generic files (still in icu-src):
 aux=$Build/source/build-aux
-cp -p $aux/config.guess $aux/config.sub $aux/install-sh source/
+cp -p $aux/config.guess $aux/config.sub $aux/install-sh source
 
 # patch -p0 for all ../TLpatches/patch-* files, as needed.
-# Run svn diff after each, update patch-* file.
+# Save original and diff after each, update patch-* file.
 # Don't lose our leading comments.
 
 # autoreconf in the TL directory; don't run autoreconf in the
 # icu-src/source/ directory, it fails due to missing pkg-config
-# prerequisites. (Thus we must patch configure, not just configure.ac.)
+# prerequisites. (Thus we must patch configure, not just configure.ac;
+# not worth more effort for our small change of preferring gcc.)
 # 
 # rebuild; must rerun configure (not just config.status),
 # so easiest is to just do a whole new build.

Modified: trunk/Build/source/libs/icu/TLpatches/patch-14-xopen
===================================================================
--- trunk/Build/source/libs/icu/TLpatches/patch-14-xopen	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/TLpatches/patch-14-xopen	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,10 +1,8 @@
 	Do not define _XOPEN_SOURCE_EXTENDED on Solaris,
 	notwithstanding comments in icu source.
 
-Index: source/common/uposixdefs.h
-===================================================================
---- source/common/uposixdefs.h	(revision 43491)
-+++ source/common/uposixdefs.h	(working copy)
+--- /tmp/up	2018-01-11 11:05:06.218484133 -0800
++++ source/common/uposixdefs.h	2018-01-11 11:07:11.006686446 -0800
 @@ -51,10 +51,13 @@
   * Make sure things like readlink and such functions work.
   * Poorly upgraded Solaris machines can't have this defined.
@@ -15,8 +13,8 @@
   *
   * z/OS needs this definition for timeval and to get usleep.
   */
--#if !defined(_XOPEN_SOURCE_EXTENDED)
-+#if !defined(_XOPEN_SOURCE_EXTENDED) && !defined(__sun)
+-#if !defined(_XOPEN_SOURCE_EXTENDED) && defined(__TOS_MVS__)
++#if !defined(_XOPEN_SOURCE_EXTENDED) && defined(__TOS_MVS__) && !defined(sun)
  #   define _XOPEN_SOURCE_EXTENDED 1
  #endif
  

Modified: trunk/Build/source/libs/icu/TLpatches/patch-16-putil
===================================================================
--- trunk/Build/source/libs/icu/TLpatches/patch-16-putil	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/TLpatches/patch-16-putil	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,49 +1,15 @@
 	tzset and mingw/cygwin.
 
-Index: source/common/putil.cpp
-===================================================================
---- source/common/putil.cpp	(revision 43491)
-+++ source/common/putil.cpp	(working copy)
-@@ -43,6 +43,20 @@
- // Must be before any other #includes.
- #include "uposixdefs.h"
+--- /tmp/putil.cpp	2017-10-31 12:04:49.000000000 -0700
++++ source/common/putil.cpp	2018-01-11 11:10:30.895806863 -0800
+@@ -46,8 +46,8 @@
+ // First, the platform type. Need this for U_PLATFORM.
+ #include "unicode/platform.h"
  
-+#if (U_PF_MINGW <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN) && defined(__STRICT_ANSI__)
+-#if U_PLATFORM == U_PF_MINGW && defined __STRICT_ANSI__
+-/* tzset isn't defined in strict ANSI on MinGW. */
++#if (U_PF_CYGWIN <= U_PLATFORM && defined(__STRICT_ANSI__)
 +/* tzset isn't defined in strict ANSI on Cygwin and MinGW. */
-+#undef __STRICT_ANSI__
-+#endif
-+
-+/*
-+ * Cygwin with GCC requires inclusion of time.h after the above disabling strict asci mode statement.
-+ */
-+#include <time.h>
-+
-+#if !U_PLATFORM_USES_ONLY_WIN32_API
-+#include <sys/time.h>
-+#endif
-+
- /* include ICU headers */
- #include "unicode/utypes.h"
- #include "unicode/putil.h"
-@@ -104,21 +118,7 @@
- #   include <sys/neutrino.h>
+ #undef __STRICT_ANSI__
  #endif
  
--#if (U_PF_MINGW <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN) && defined(__STRICT_ANSI__)
--/* tzset isn't defined in strict ANSI on Cygwin and MinGW. */
--#undef __STRICT_ANSI__
--#endif
--
- /*
-- * Cygwin with GCC requires inclusion of time.h after the above disabling strict asci mode statement.
-- */
--#include <time.h>
--
--#if !U_PLATFORM_USES_ONLY_WIN32_API
--#include <sys/time.h>
--#endif
--
--/*
-  * Only include langinfo.h if we have a way to get the codeset. If we later
-  * depend on more feature, we can test on U_HAVE_NL_LANGINFO.
-  *

Modified: trunk/Build/source/libs/icu/TLpatches/patch-17-cygwin-no-w32api
===================================================================
--- trunk/Build/source/libs/icu/TLpatches/patch-17-cygwin-no-w32api	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/TLpatches/patch-17-cygwin-no-w32api	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,5 +1,8 @@
 	_HAS_ -> _USES_ONLY_ for WIN32_API and Cygwin.
 
+Not applied for icu-60.2, since it seems some (but not all) of changes
+have been installed upstream.
+
 Index: source/common/umutex.h
 ===================================================================
 --- source/common/umutex.h	(revision 43491)

Modified: trunk/Build/source/libs/icu/TLpatches/patch-19-netbsd
===================================================================
--- trunk/Build/source/libs/icu/TLpatches/patch-19-netbsd	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/TLpatches/patch-19-netbsd	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,9 +1,9 @@
 	Per Marc Baudoin, tlbuild 17 Mar 2017 10:03:03.
 
-Index: digitlst.cpp
-===================================================================
---- digitlst.cpp	(revision 43522)
-+++ digitlst.cpp	(working copy)
+Not applied for icu-60.2, since they have a new U_HAVE_XLOCALE_H.
+
+--- source/i18n/digitlst.cpp	(revision 43522)
++++ source/i18n/digitlst.cpp	(working copy)
 @@ -61,7 +61,7 @@
  #endif
  

Modified: trunk/Build/source/libs/icu/configure
===================================================================
--- trunk/Build/source/libs/icu/configure	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/configure	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for icu (TeX Live) 58.2.
+# Generated by GNU Autoconf 2.69 for icu (TeX Live) 60.2.
 #
 # Report bugs to <tex-k at tug.org>.
 #
@@ -579,8 +579,8 @@
 # Identity of this package.
 PACKAGE_NAME='icu (TeX Live)'
 PACKAGE_TARNAME='icu--tex-live-'
-PACKAGE_VERSION='58.2'
-PACKAGE_STRING='icu (TeX Live) 58.2'
+PACKAGE_VERSION='60.2'
+PACKAGE_STRING='icu (TeX Live) 60.2'
 PACKAGE_BUGREPORT='tex-k at tug.org'
 PACKAGE_URL=''
 
@@ -1258,7 +1258,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures icu (TeX Live) 58.2 to adapt to many kinds of systems.
+\`configure' configures icu (TeX Live) 60.2 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1328,7 +1328,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of icu (TeX Live) 58.2:";;
+     short | recursive ) echo "Configuration of icu (TeX Live) 60.2:";;
    esac
   cat <<\_ACEOF
 
@@ -1426,7 +1426,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-icu (TeX Live) configure 58.2
+icu (TeX Live) configure 60.2
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1565,7 +1565,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by icu (TeX Live) $as_me 58.2, which was
+It was created by icu (TeX Live) $as_me 60.2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3488,7 +3488,7 @@
 
 # Define the identity of the package.
  PACKAGE='icu--tex-live-'
- VERSION='58.2'
+ VERSION='60.2'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -4866,7 +4866,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by icu (TeX Live) $as_me 58.2, which was
+This file was extended by icu (TeX Live) $as_me 60.2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -4923,7 +4923,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-icu (TeX Live) config.status 58.2
+icu (TeX Live) config.status 60.2
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 

Modified: trunk/Build/source/libs/icu/icu-src/APIChangeReport.html
===================================================================
--- trunk/Build/source/libs/icu/icu-src/APIChangeReport.html	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/APIChangeReport.html	2018-01-12 18:35:28 UTC (rev 46290)
@@ -5,31 +5,31 @@
 	-->
 <head>
 <META http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>ICU4C API Comparison: ICU 57 with ICU 58</title>
+<title>ICU4C API Comparison: ICU 59 with ICU 60</title>
 <link type="text/css" href="icu4c.css" rel="stylesheet">
 </head>
 <body>
 <a name="#_top"></a>
-<h1>ICU4C API Comparison: ICU 57 with ICU 58</h1>
+<h1>ICU4C API Comparison: ICU 59 with ICU 60</h1>
 <div id="toc">
 <ul>
 <li>
-<a href="#removed">Removed from ICU 57</a>
+<a href="#removed">Removed from ICU 59</a>
 </li>
 <li>
-<a href="#deprecated">Deprecated or Obsoleted in ICU 58</a>
+<a href="#deprecated">Deprecated or Obsoleted in ICU 60</a>
 </li>
 <li>
-<a href="#changed">Changed in  ICU 58</a>
+<a href="#changed">Changed in  ICU 60</a>
 </li>
 <li>
-<a href="#promoted">Promoted to stable in ICU 58</a>
+<a href="#promoted">Promoted to stable in ICU 60</a>
 </li>
 <li>
-<a href="#added">Added in ICU 58</a>
+<a href="#added">Added in ICU 60</a>
 </li>
 <li>
-<a href="#other">Other existing drafts in ICU 58</a>
+<a href="#other">Other existing drafts in ICU 60</a>
 </li>
 <li>
 <a href="#purevirtual">Signature Simplifications</a><sup style="background-color: yellow; font-size: smallest;">(new)</sup>
@@ -38,3149 +38,1293 @@
 <hr>
 </div>
 <a name="removed"></a>
-<h2>Removed from ICU 57</h2>
+<h2>Removed from ICU 59</h2>
 <table BORDER="1" class="genTable">
 <THEAD>
 <tr>
-<th>File</th><th>API</th><th>ICU 57</th><th>ICU 58</th>
+<th>File</th><th>API</th><th>ICU 59</th><th>ICU 60</th>
 </tr>
 </THEAD>
 <tr class="row1">
-<td class="file">bytestrie.h</td><td class="proto">const StringPiece& icu::BytesTrie::Iterator::getString()</td><td class="stabchange">Stable<br>ICU 4.8</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">decimfmt.h</td><td class="proto"><tt>enum</tt> 
+							icu::DecimalFormat::ERoundingMode {}</td><td class="stabchange">Stable<br>ICU 2.4</td><td>(moved to numfmt.h)<br></td>
 </tr>
 <tr class="row0">
-<td class="file">bytestriebuilder.h</td><td class="proto">BytesTrieBuilder& icu::BytesTrieBuilder::add(const StringPiece&, int32_t, UErrorCode&)</td><td class="stabchange">Stable<br>ICU 4.8</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">decimfmt.h</td><td class="proto"><tt>enum</tt> 
+							icu::DecimalFormat::ERoundingMode::kRoundCeiling</td><td class="stabchange">Stable<br>ICU 2.4</td><td>(moved to numfmt.h)<br></td>
 </tr>
 <tr class="row1">
-<td class="file">compactdecimalformat.h</td><td class="proto">UnicodeString& icu::CompactDecimalFormat::format(const StringPiece&, UnicodeString&, FieldPositionIterator*, UErrorCode&)</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">decimfmt.h</td><td class="proto"><tt>enum</tt> 
+							icu::DecimalFormat::ERoundingMode::kRoundDown</td><td class="stabchange">Stable<br>ICU 2.4</td><td>(moved to numfmt.h)<br></td>
 </tr>
 <tr class="row0">
-<td class="file">decimfmt.h</td><td class="proto">UnicodeString& icu::DecimalFormat::format(const StringPiece&, UnicodeString&, FieldPositionIterator*, UErrorCode&)</td><td class="stabchange">Stable</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">decimfmt.h</td><td class="proto"><tt>enum</tt> 
+							icu::DecimalFormat::ERoundingMode::kRoundFloor</td><td class="stabchange">Stable<br>ICU 2.4</td><td>(moved to numfmt.h)<br></td>
 </tr>
 <tr class="row1">
-<td class="file">fmtable.h</td><td class="proto">icu::Formattable::Formattable(const StringPiece&, UErrorCode&)</td><td class="stabchange">Stable<br>ICU 4.4</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">decimfmt.h</td><td class="proto"><tt>enum</tt> 
+							icu::DecimalFormat::ERoundingMode::kRoundHalfDown</td><td class="stabchange">Stable<br>ICU 2.4</td><td>(moved to numfmt.h)<br></td>
 </tr>
 <tr class="row0">
-<td class="file">fmtable.h</td><td class="proto">void icu::Formattable::setDecimalNumber(const StringPiece&, UErrorCode&)</td><td class="stabchange">Stable<br>ICU 4.4</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">decimfmt.h</td><td class="proto"><tt>enum</tt> 
+							icu::DecimalFormat::ERoundingMode::kRoundHalfEven</td><td class="stabchange">Stable<br>ICU 2.4</td><td>(moved to numfmt.h)<br></td>
 </tr>
 <tr class="row1">
-<td class="file">idna.h</td><td class="proto">void icu::IDNA::labelToASCII_UTF8(const StringPiece&, ByteSink&, IDNAInfo&, UErrorCode&)</td><td class="stabchange">Stable<br>ICU 4.6</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">decimfmt.h</td><td class="proto"><tt>enum</tt> 
+							icu::DecimalFormat::ERoundingMode::kRoundHalfUp</td><td class="stabchange">Stable<br>ICU 2.4</td><td>(moved to numfmt.h)<br></td>
 </tr>
 <tr class="row0">
-<td class="file">idna.h</td><td class="proto">void icu::IDNA::labelToUnicodeUTF8(const StringPiece&, ByteSink&, IDNAInfo&, UErrorCode&)</td><td class="stabchange">Stable<br>ICU 4.6</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">decimfmt.h</td><td class="proto"><tt>enum</tt> 
+							icu::DecimalFormat::ERoundingMode::kRoundUnnecessary</td><td class="stabchange">Stable<br>ICU 4.8</td><td>(moved to numfmt.h)<br></td>
 </tr>
 <tr class="row1">
-<td class="file">idna.h</td><td class="proto">void icu::IDNA::nameToASCII_UTF8(const StringPiece&, ByteSink&, IDNAInfo&, UErrorCode&)</td><td class="stabchange">Stable<br>ICU 4.6</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">decimfmt.h</td><td class="proto"><tt>enum</tt> 
+							icu::DecimalFormat::ERoundingMode::kRoundUp</td><td class="stabchange">Stable<br>ICU 2.4</td><td>(moved to numfmt.h)<br></td>
 </tr>
 <tr class="row0">
-<td class="file">idna.h</td><td class="proto">void icu::IDNA::nameToUnicodeUTF8(const StringPiece&, ByteSink&, IDNAInfo&, UErrorCode&)</td><td class="stabchange">Stable<br>ICU 4.6</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">platform.h</td><td class="proto"><tt>#define</tt> U_IOSTREAM_SOURCE</td><td class="">Internal</td><td>(missing)<br></td>
 </tr>
 <tr class="row1">
-<td class="file">LayoutEngine.h</td><td class="proto">UClassID icu::LayoutEngine::getDynamicClassID()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">plurrule.h</td><td class="proto">UnicodeString icu::PluralRules::select(const FixedDecimal&)</td><td class="">Internal</td><td>(missing)<br></td>
 </tr>
 <tr class="row0">
-<td class="file">LayoutEngine.h</td><td class="proto">icu::LayoutEngine::~LayoutEngine()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">ucasemap.h</td><td class="proto"><tt>#define</tt> U_TITLECASE_NO_BREAK_ADJUSTMENT</td><td class="stabchange">Stable<br>ICU 3.8</td><td>(moved to new stringoptions.h)<br></td>
 </tr>
 <tr class="row1">
-<td class="file">LayoutEngine.h</td><td class="proto">le_int32 icu::LayoutEngine::getGlyphCount()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">ucasemap.h</td><td class="proto"><tt>#define</tt> U_TITLECASE_NO_LOWERCASE</td><td class="stabchange">Stable<br>ICU 3.8</td><td>(moved to new stringoptions.h)<br></td>
 </tr>
 <tr class="row0">
-<td class="file">LayoutEngine.h</td><td class="proto">le_int32 icu::LayoutEngine::layoutChars(const LEUnicode chars[], le_int32, le_int32, le_int32, le_bool, float, float, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">ucasemap.h</td><td class="proto"><tt>#define</tt> UCASEMAP_OMIT_UNCHANGED_TEXT</td><td class="">Draft<br>ICU 59</td><td>(missing)<br></td>
 </tr>
 <tr class="row1">
-<td class="file">LayoutEngine.h</td><td class="proto"><tt>static</tt> LayoutEngine* icu::LayoutEngine::layoutEngineFactory(const LEFontInstance*, le_int32, le_int32, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>#define</tt> U_FOLD_CASE_DEFAULT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>(moved to new stringoptions.h)<br></td>
 </tr>
 <tr class="row0">
-<td class="file">LayoutEngine.h</td><td class="proto"><tt>static</tt> LayoutEngine* icu::LayoutEngine::layoutEngineFactory(const LEFontInstance*, le_int32, le_int32, le_int32, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>#define</tt> U_FOLD_CASE_EXCLUDE_SPECIAL_I</td><td class="stabchange">Stable<br>ICU 2.0</td><td>(moved to new stringoptions.h)<br></td>
 </tr>
 <tr class="row1">
-<td class="file">LayoutEngine.h</td><td class="proto"><tt>static</tt> UClassID icu::LayoutEngine::getStaticClassID()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">unorm2.h</td><td class="proto"><tt>#define</tt> U_COMPARE_CODE_POINT_ORDER</td><td class="stabchange">Stable<br>ICU 2.2</td><td>(moved to new stringoptions.h)<br></td>
 </tr>
 <tr class="row0">
-<td class="file">LayoutEngine.h</td><td class="proto"><tt>static</tt> const le_int32 icu::LayoutEngine::kTypoFlagKern</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">unorm2.h</td><td class="proto"><tt>#define</tt> U_COMPARE_IGNORE_CASE</td><td class="stabchange">Stable<br>ICU 2.2</td><td>(moved to new stringoptions.h)<br></td>
 </tr>
 <tr class="row1">
-<td class="file">LayoutEngine.h</td><td class="proto"><tt>static</tt> const le_int32 icu::LayoutEngine::kTypoFlagLiga</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">unorm2.h</td><td class="proto"><tt>#define</tt> UNORM_INPUT_IS_FCD</td><td class="stabchange">Stable<br>ICU 2.2</td><td>(moved to new stringoptions.h)<br></td>
 </tr>
 <tr class="row0">
-<td class="file">LayoutEngine.h</td><td class="proto">void icu::LayoutEngine::getCharIndices(le_int32 charIndices[], LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">ustring.h</td><td class="proto"><tt>#define</tt> U_COMPARE_CODE_POINT_ORDER</td><td class="stabchange">Stable<br>ICU 2.2</td><td>(moved to new stringoptions.h)<br></td>
 </tr>
-<tr class="row1">
-<td class="file">LayoutEngine.h</td><td class="proto">void icu::LayoutEngine::getCharIndices(le_int32 charIndices[], le_int32, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+</table>
+<P></P>
+<a href="#_top">(jump back to top)</a>
+<hr>
+<a name="deprecated"></a>
+<h2>Deprecated or Obsoleted in ICU 60</h2>
+<table BORDER="1" class="genTable">
+<THEAD>
+<tr>
+<th>File</th><th>API</th><th>ICU 59</th><th>ICU 60</th>
 </tr>
-<tr class="row0">
-<td class="file">LayoutEngine.h</td><td class="proto">void icu::LayoutEngine::getGlyphPosition(le_int32, float&, float&, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
+</THEAD>
 <tr class="row1">
-<td class="file">LayoutEngine.h</td><td class="proto">void icu::LayoutEngine::getGlyphPositions(float positions[], LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">filteredbrk.h</td><td class="proto">BreakIterator* icu::FilteredBreakIteratorBuilder::build(BreakIterator*, UErrorCode&)</td><td class="stabchange">Stable<br>ICU 56</td><td>Deprecated<br>
+<span class="verchange"><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">LayoutEngine.h</td><td class="proto">void icu::LayoutEngine::getGlyphs(LEGlyphID glyphs[], LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">filteredbrk.h</td><td class="proto"><tt>static</tt> FilteredBreakIteratorBuilder* icu::FilteredBreakIteratorBuilder::createInstance(UErrorCode&)</td><td class="stabchange">Stable<br>ICU 56</td><td>Deprecated<br>
+<span class="verchange"><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">LayoutEngine.h</td><td class="proto">void icu::LayoutEngine::getGlyphs(le_uint32 glyphs[], le_uint32, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">utf_old.h</td><td class="proto"><tt>#define</tt> U_HIDE_OBSOLETE_UTF_OLD_H</td><td class="">(missing)</td><td>Deprecated<br>
+<span class=""><span>ICU 2.4</span></span></td>
 </tr>
-<tr class="row0">
-<td class="file">LayoutEngine.h</td><td class="proto">void icu::LayoutEngine::reset()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+</table>
+<P></P>
+<a href="#_top">(jump back to top)</a>
+<hr>
+<a name="changed"></a>
+<h2>Changed in  ICU 60 (old, new)</h2>
+<table BORDER="1" class="genTable">
+<THEAD>
+<tr>
+<th>File</th><th>API</th><th>ICU 59</th><th>ICU 60</th>
 </tr>
+</THEAD>
 <tr class="row1">
-<td class="file">LEFontInstance.h</td><td class="proto">LEGlyphID icu::LEFontInstance::mapCharToGlyph(LEUnicode32)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">filteredbrk.h</td><td class="proto">BreakIterator* icu::FilteredBreakIteratorBuilder::build(BreakIterator*, UErrorCode&)</td><td class="stabchange">Stable<br>ICU 56</td><td>Deprecated<br>
+<span class="verchange"><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">LEFontInstance.h</td><td class="proto">LEGlyphID icu::LEFontInstance::mapCharToGlyph(LEUnicode32, const LECharMapper*)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">filteredbrk.h</td><td class="proto"><tt>static</tt> FilteredBreakIteratorBuilder* icu::FilteredBreakIteratorBuilder::createInstance(UErrorCode&)</td><td class="stabchange">Stable<br>ICU 56</td><td>Deprecated<br>
+<span class="verchange"><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">LEFontInstance.h</td><td class="proto">LEGlyphID icu::LEFontInstance::mapCharToGlyph(LEUnicode32, const LECharMapper*, le_bool)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">measfmt.h</td><td class="proto">UnicodeString icu::MeasureFormat::getUnitDisplayName(const MeasureUnit&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row0">
-<td class="file">LEFontInstance.h</td><td class="proto">LEUnicode32 icu::LECharMapper::mapChar(LEUnicode32)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">ubiditransform.h</td><td class="proto">UBiDiTransform* ubiditransform_open(UErrorCode*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row1">
-<td class="file">LEFontInstance.h</td><td class="proto">UClassID icu::LEFontInstance::getDynamicClassID()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">ubiditransform.h</td><td class="proto"><tt>enum</tt> UBiDiMirroring::UBIDI_MIRRORING_OFF</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row0">
-<td class="file">LEFontInstance.h</td><td class="proto">const LEFontInstance* icu::LEFontInstance::getSubFont(const LEUnicode chars[], le_int32*, le_int32, le_int32, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">ubiditransform.h</td><td class="proto"><tt>enum</tt> UBiDiMirroring::UBIDI_MIRRORING_ON</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row1">
-<td class="file">LEFontInstance.h</td><td class="proto">const void* icu::LEFontInstance::getFontTable(LETag, size_t&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">ubiditransform.h</td><td class="proto"><tt>enum</tt> UBiDiOrder::UBIDI_LOGICAL</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row0">
-<td class="file">LEFontInstance.h</td><td class="proto">float icu::LEFontInstance::getScaleFactorX()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">ubiditransform.h</td><td class="proto"><tt>enum</tt> UBiDiOrder::UBIDI_VISUAL</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row1">
-<td class="file">LEFontInstance.h</td><td class="proto">float icu::LEFontInstance::getScaleFactorY()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">ubiditransform.h</td><td class="proto">uint32_t ubiditransform_transform(UBiDiTransform*, const UChar*, int32_t, UChar*, int32_t, UBiDiLevel, UBiDiOrder, UBiDiLevel, UBiDiOrder, UBiDiMirroring, uint32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row0">
-<td class="file">LEFontInstance.h</td><td class="proto">float icu::LEFontInstance::getXPixelsPerEm()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">ubiditransform.h</td><td class="proto">void ubiditransform_close(UBiDiTransform*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row1">
-<td class="file">LEFontInstance.h</td><td class="proto">float icu::LEFontInstance::getYPixelsPerEm()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">udisplaycontext.h</td><td class="proto"><tt>enum</tt> UDisplayContext::UDISPCTX_NO_SUBSTITUTE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row0">
-<td class="file">LEFontInstance.h</td><td class="proto">float icu::LEFontInstance::xPixelsToUnits(float)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">udisplaycontext.h</td><td class="proto"><tt>enum</tt> UDisplayContext::UDISPCTX_SUBSTITUTE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row1">
-<td class="file">LEFontInstance.h</td><td class="proto">float icu::LEFontInstance::xUnitsToPoints(float)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">udisplaycontext.h</td><td class="proto"><tt>enum</tt> UDisplayContextType::UDISPCTX_TYPE_SUBSTITUTE_HANDLING</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row0">
-<td class="file">LEFontInstance.h</td><td class="proto">float icu::LEFontInstance::yPixelsToUnits(float)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">uspoof.h</td><td class="proto">URestrictionLevel uspoof_getCheckResultRestrictionLevel(const USpoofCheckResult*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row1">
-<td class="file">LEFontInstance.h</td><td class="proto">float icu::LEFontInstance::yUnitsToPoints(float)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">uspoof.h</td><td class="proto">USpoofCheckResult* uspoof_openCheckResult(UErrorCode*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row0">
-<td class="file">LEFontInstance.h</td><td class="proto">icu::LECharMapper::~LECharMapper()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">uspoof.h</td><td class="proto">U_NAMESPACE_END int32_t uspoof_getCheckResultChecks(const USpoofCheckResult*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row1">
-<td class="file">LEFontInstance.h</td><td class="proto">icu::LEFontInstance::~LEFontInstance()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">uspoof.h</td><td class="proto">const USet* uspoof_getCheckResultNumerics(const USpoofCheckResult*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row0">
-<td class="file">LEFontInstance.h</td><td class="proto">le_bool icu::LEFontInstance::canDisplay(LEUnicode32)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">uspoof.h</td><td class="proto"><tt>enum</tt> USpoofChecks::USPOOF_CONFUSABLE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row1">
-<td class="file">LEFontInstance.h</td><td class="proto">le_bool icu::LEFontInstance::getGlyphPoint(LEGlyphID, le_int32, LEPoint&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">uspoof.h</td><td class="proto">int32_t uspoof_check2(const USpoofChecker*, const UChar*, int32_t, USpoofCheckResult*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row0">
-<td class="file">LEFontInstance.h</td><td class="proto">le_int32 icu::LEFontInstance::getAscent()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">uspoof.h</td><td class="proto">int32_t uspoof_check2UTF8(const USpoofChecker*, const char*, int32_t, USpoofCheckResult*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row1">
-<td class="file">LEFontInstance.h</td><td class="proto">le_int32 icu::LEFontInstance::getDescent()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">uspoof.h</td><td class="proto">int32_t uspoof_check2UnicodeString(const USpoofChecker*, const icu::UnicodeString&, USpoofCheckResult*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row0">
-<td class="file">LEFontInstance.h</td><td class="proto">le_int32 icu::LEFontInstance::getLeading()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
+<td class="file">uspoof.h</td><td class="proto">void uspoof_closeCheckResult(USpoofCheckResult*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
-<tr class="row1">
-<td class="file">LEFontInstance.h</td><td class="proto">le_int32 icu::LEFontInstance::getLineHeight()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEFontInstance.h</td><td class="proto">le_int32 icu::LEFontInstance::getUnitsPerEM()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEFontInstance.h</td><td class="proto"><tt>static</tt> UClassID icu::LEFontInstance::getStaticClassID()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEFontInstance.h</td><td class="proto"><tt>static</tt> float icu::LEFontInstance::fixedToFloat(le_int32)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEFontInstance.h</td><td class="proto"><tt>static</tt> le_int32 icu::LEFontInstance::floatToFixed(float)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEFontInstance.h</td><td class="proto">void icu::LEFontInstance::getGlyphAdvance(LEGlyphID, LEPoint&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEFontInstance.h</td><td class="proto">void icu::LEFontInstance::mapCharsToGlyphs(const LEUnicode chars[], le_int32, le_int32, le_bool, const LECharMapper*, le_bool, LEGlyphStorage&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEFontInstance.h</td><td class="proto">void icu::LEFontInstance::pixelsToUnits(LEPoint&, LEPoint&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEFontInstance.h</td><td class="proto">void icu::LEFontInstance::transformFunits(float, float, LEPoint&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEFontInstance.h</td><td class="proto">void icu::LEFontInstance::unitsToPoints(LEPoint&, LEPoint&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEGlyphStorage.h</td><td class="proto">LEGlyphID icu::LEGlyphStorage::getGlyphID(le_int32, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEGlyphStorage.h</td><td class="proto">LEGlyphID& icu::LEGlyphStorage::operator[](le_int32)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEGlyphStorage.h</td><td class="proto">LEGlyphID* icu::LEGlyphStorage::insertGlyphs(le_int32, le_int32)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEGlyphStorage.h</td><td class="proto">LEGlyphID* icu::LEGlyphStorage::insertGlyphs(le_int32, le_int32, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEGlyphStorage.h</td><td class="proto">UClassID icu::LEGlyphStorage::getDynamicClassID()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEGlyphStorage.h</td><td class="proto">icu::LEGlyphStorage::LEGlyphStorage()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEGlyphStorage.h</td><td class="proto">icu::LEGlyphStorage::~LEGlyphStorage()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEGlyphStorage.h</td><td class="proto">le_int32 icu::LEGlyphStorage::allocateAuxData(LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEGlyphStorage.h</td><td class="proto">le_int32 icu::LEGlyphStorage::allocatePositions(LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEGlyphStorage.h</td><td class="proto">le_int32 icu::LEGlyphStorage::applyInsertions()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEGlyphStorage.h</td><td class="proto">le_int32 icu::LEGlyphStorage::getCharIndex(le_int32, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEGlyphStorage.h</td><td class="proto">le_int32 icu::LEGlyphStorage::getGlyphCount()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEGlyphStorage.h</td><td class="proto">le_uint32 icu::LEGlyphStorage::getAuxData(le_int32, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEGlyphStorage.h</td><td class="proto"><tt>static</tt> UClassID icu::LEGlyphStorage::getStaticClassID()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::adjustPosition(le_int32, float, float, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::adoptAuxDataArray(LEGlyphStorage&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::adoptCharIndicesArray(LEGlyphStorage&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::adoptGlyphArray(LEGlyphStorage&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::adoptGlyphCount(LEGlyphStorage&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::adoptGlyphCount(le_int32)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::adoptPositionArray(LEGlyphStorage&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::allocateGlyphArray(le_int32, le_bool, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::getAuxData(le_uint32 auxData[], LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::getCharIndices(le_int32 charIndices[], LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::getCharIndices(le_int32 charIndices[], le_int32, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::getGlyphPosition(le_int32, float&, float&, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::getGlyphPositions(float positions[], LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::getGlyphs(LEGlyphID glyphs[], LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::getGlyphs(le_uint32 glyphs[], le_uint32, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::moveGlyph(le_int32, le_int32, le_uint32)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::reset()</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::setAuxData(le_int32, le_uint32, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::setCharIndex(le_int32, le_int32, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::setGlyphID(le_int32, LEGlyphID, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LEGlyphStorage.h</td><td class="proto">void icu::LEGlyphStorage::setPosition(le_int32, float, float, LEErrorCode&)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LESwaps.h</td><td class="proto"><tt>#define</tt> SWAPL</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LESwaps.h</td><td class="proto"><tt>#define</tt> SWAPW</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LESwaps.h</td><td class="proto"><tt>static</tt> le_uint16 icu::LESwaps::swapWord(le_uint16)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LESwaps.h</td><td class="proto"><tt>static</tt> le_uint32 icu::LESwaps::swapLong(le_uint32)</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_AFRC_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_ARRAY_COPY</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_ARRAY_SIZE</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_ASSERT_BAD_FONT</td><td class=""><i>(untagged)</i></td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_CHAR_FILTER_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_CLIENT_MASK</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_CLIENT_SHIFT</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_CLIG_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_CSWH_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_DEBUG_BAD_FONT</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_DEFAULT_FEATURE_FLAG</td><td class=""><i>(untagged)</i></td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_DELETE_ARRAY</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_DLIG_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_FAILURE</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_FRAC_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_GET_CLIENT</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_GET_GLYPH</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_GET_SUB_FONT</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_GLYPH_MASK</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_GLYPH_SHIFT</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_GROW_ARRAY</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_HLIG_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_Kerning_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_LIGA_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_Ligatures_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_MAKE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_NALT_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_NEW_ARRAY</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_RANGE_CHECK</td><td class=""><i>(untagged)</i></td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_RLIG_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_RUBY_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_SALT_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_SET_CLIENT</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_SET_GLYPH</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_SET_SUB_FONT</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_SMCP_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_SS01_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_SS02_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_SS03_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_SS04_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_SS05_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_SS06_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_SS07_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_SUB_FONT_MASK</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_SUB_FONT_SHIFT</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_SUCCESS</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_SWSH_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_UINT32_MAX</td><td class=""><i>(untagged)</i></td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_UINTPTR_MAX</td><td class=""><i>(untagged)</i></td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>#define</tt> LE_ZERO_FEATURE_FLAG</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEErrorCode::LE_FONT_FILE_NOT_FOUND_ERROR</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEErrorCode::LE_ILLEGAL_ARGUMENT_ERROR</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEErrorCode::LE_INDEX_OUT_OF_BOUNDS_ERROR</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEErrorCode::LE_INTERNAL_ERROR</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEErrorCode::LE_MEMORY_ALLOCATION_ERROR</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEErrorCode::LE_MISSING_FONT_TABLE_ERROR</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEErrorCode::LE_NO_ERROR</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEErrorCode::LE_NO_LAYOUT_ERROR</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEErrorCode::LE_NO_SUBFONT_WARNING</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_AFRC_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_CHAR_FILTER_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_CLIG_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_CSWH_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_DLIG_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_FEATURE_ENUM_MAX</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_FRAC_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_HLIG_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_Kerning_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_LIGA_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_Ligatures_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_NALT_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_RLIG_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_RUBY_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_SALT_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_SMCP_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_SS01_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_SS02_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_SS03_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_SS04_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_SS05_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_SS06_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_SS07_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_SWSH_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureENUMs::LE_ZERO_FEATURE_ENUM</td><td class="">Internal</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_AALT_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_ABVF_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_ABVM_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_ABVS_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_AFRC_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_AKHN_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_BLWF_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_BLWM_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_BLWS_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_C2PC_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_C2SC_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_CALT_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_CASE_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_CCMP_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_CJCT_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_CLIG_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_CPSP_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_CSWH_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_CURS_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_DIST_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_DLIG_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_DNOM_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_EXPT_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_FALT_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_FIN2_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_FIN3_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_FINA_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_FRAC_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_FWID_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_HALF_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_HALN_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_HALT_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_HIST_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_HKNA_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_HLIG_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_HNGL_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_HWID_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_INIT_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_ISOL_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_ITAL_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_JALT_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_JP78_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_JP83_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_JP90_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_KERN_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_LFBD_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_LIGA_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_LJMO_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_LNUM_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_LOCL_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_MARK_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_MED2_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_MEDI_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_MGRK_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_MKMK_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_MSET_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_NALT_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_NLCK_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_NUKT_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_NUMR_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_ONUM_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_OPBD_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_ORDN_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_ORNM_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_PALT_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_PCAP_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_PNUM_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_PREF_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_PRES_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_PSTF_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_PSTS_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_PWID_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_QWID_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_RAND_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_RKRF_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_RLIG_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_RPHF_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_RTBD_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_RTLA_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_RUBY_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SALT_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SINF_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SIZE_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SMCP_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SMPL_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS01_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS02_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS03_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS04_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS05_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS06_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS07_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS08_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS09_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS10_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS11_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS12_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS13_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS14_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS15_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS16_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS17_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS18_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS19_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SS20_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SUBS_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SUPS_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_SWSH_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_TITL_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_TJMO_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_TNAM_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_TNUM_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_TRAD_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_TWID_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_UNIC_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_VALT_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_VATU_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_VERT_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_VHAL_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_VJMO_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_VKNA_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_VKRN_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_VPAL_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_VRT2_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LEFeatureTags::LE_ZERO_FEATURE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_ACNT_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_AVAR_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_BASE_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_BDAT_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_BHED_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_BLOC_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_BSLN_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_CFF__TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_CMAP_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_CVAR_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_CVT__TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_DSIG_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_EBDT_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_EBLC_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_EBSC_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_FDSC_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_FEAT_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_FMTX_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_FPGM_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_FVAR_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_GASP_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_GDEF_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_GLYF_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_GPOS_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_GSUB_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_GVAR_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_HDMX_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_HEAD_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_HHEA_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_HMTX_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_HSTY_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_JSTF_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_JUST_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_KERN_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_LCAR_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_LOCA_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_LTSH_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_MAXP_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_MORT_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_MORX_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_NAME_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_OPBD_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_OS_2_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_PCLT_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_POST_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_PREP_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_PROP_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_TRAK_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_VDMX_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_VHEA_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_VMTX_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_VORG_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">LETypes.h</td><td class="proto"><tt>enum</tt> LETableTags::LE_ZAPF_TABLE_TAG</td><td class="">Deprecated<br>ICU 54</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">numfmt.h</td><td class="proto">UnicodeString& icu::NumberFormat::format(const StringPiece&, UnicodeString&, FieldPositionIterator*, UErrorCode&)</td><td class="stabchange">Stable</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">unistr.h</td><td class="proto"><tt>static</tt> UnicodeString icu::UnicodeString::fromUTF8(const StringPiece&)</td><td class="stabchange">Stable<br>ICU 4.2</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">utypes.h</td><td class="proto"><tt>#define</tt> NULL</td><td class="stabchange">Stable<br>ICU 2.0</td><td>(missing)<br>
-<span class=""><span></span></span></td>
-</tr>
 </table>
 <P></P>
 <a href="#_top">(jump back to top)</a>
 <hr>
-<a name="deprecated"></a>
-<h2>Deprecated or Obsoleted in ICU 58</h2>
+<a name="promoted"></a>
+<h2>Promoted to stable in ICU 60</h2>
 <table BORDER="1" class="genTable">
 <THEAD>
 <tr>
-<th>File</th><th>API</th><th>ICU 57</th><th>ICU 58</th>
+<th>File</th><th>API</th><th>ICU 59</th><th>ICU 60</th>
 </tr>
 </THEAD>
 <tr class="row1">
-<td class="file">dtfmtsym.h</td><td class="proto"><tt>enum</tt> 
-							icu::DateFormatSymbols::DtContextType::DT_CONTEXT_COUNT</td><td class="stabchange">Stable<br>ICU 3.6</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">measfmt.h</td><td class="proto">UnicodeString icu::MeasureFormat::getUnitDisplayName(const MeasureUnit&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row0">
-<td class="file">dtfmtsym.h</td><td class="proto"><tt>enum</tt> 
-							icu::DateFormatSymbols::DtWidthType::DT_WIDTH_COUNT</td><td class="stabchange">Stable<br>ICU 3.6</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt> 
+							icu::NumberFormat::ERoundingMode {}</td><td class="">(moved from decimfmt.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.4</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">measfmt.h</td><td class="proto"><tt>enum</tt> UMeasureFormatWidth::UMEASFMT_WIDTH_COUNT</td><td class="stabchange">Stable<br>ICU 53</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt> 
+							icu::NumberFormat::ERoundingMode::kRoundCeiling</td><td class="">(moved from decimfmt.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.4</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">reldatefmt.h</td><td class="proto"><tt>enum</tt> UDateAbsoluteUnit::UDAT_ABSOLUTE_UNIT_COUNT</td><td class="stabchange">Stable<br>ICU 53</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt> 
+							icu::NumberFormat::ERoundingMode::kRoundDown</td><td class="">(moved from decimfmt.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.4</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">reldatefmt.h</td><td class="proto"><tt>enum</tt> UDateDirection::UDAT_DIRECTION_COUNT</td><td class="stabchange">Stable<br>ICU 53</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt> 
+							icu::NumberFormat::ERoundingMode::kRoundFloor</td><td class="">(moved from decimfmt.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.4</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">reldatefmt.h</td><td class="proto"><tt>enum</tt> UDateRelativeUnit::UDAT_RELATIVE_UNIT_COUNT</td><td class="stabchange">Stable<br>ICU 53</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt> 
+							icu::NumberFormat::ERoundingMode::kRoundHalfDown</td><td class="">(moved from decimfmt.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.4</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">tmunit.h</td><td class="proto"><tt>enum</tt> 
-							icu::TimeUnit::UTimeUnitFields::UTIMEUNIT_FIELD_COUNT</td><td class="stabchange">Stable<br>ICU 4.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt> 
+							icu::NumberFormat::ERoundingMode::kRoundHalfEven</td><td class="">(moved from decimfmt.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.4</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">ubidi.h</td><td class="proto"><tt>#define</tt> U_BIDI_CLASS_DEFAULT</td><td class="stabchange">Stable<br>ICU 3.6</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt> 
+							icu::NumberFormat::ERoundingMode::kRoundHalfUp</td><td class="">(moved from decimfmt.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.4</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">ubidi.h</td><td class="proto"><tt>enum</tt> UBiDiReorderingMode::UBIDI_REORDER_COUNT</td><td class="stabchange">Stable<br>ICU 3.6</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt> 
+							icu::NumberFormat::ERoundingMode::kRoundUnnecessary</td><td class="">(moved from decimfmt.h)</td><td>Stable<br>
+<span class=""><span>ICU 4.8</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">ubrk.h</td><td class="proto"><tt>enum</tt> UBreakIteratorType::UBRK_COUNT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt> 
+							icu::NumberFormat::ERoundingMode::kRoundUp</td><td class="">(moved from decimfmt.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.4</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">ucal.h</td><td class="proto"><tt>enum</tt> UCalendarDateFields::UCAL_FIELD_COUNT</td><td class="stabchange">Stable<br>ICU 2.6</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">ubiditransform.h</td><td class="proto">UBiDiTransform* ubiditransform_open(UErrorCode*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBidiPairedBracketType::U_BPT_COUNT</td><td class="stabchange">Stable<br>ICU 52</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">ubiditransform.h</td><td class="proto"><tt>enum</tt> UBiDiMirroring::UBIDI_MIRRORING_OFF</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_COUNT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">ubiditransform.h</td><td class="proto"><tt>enum</tt> UBiDiMirroring::UBIDI_MIRRORING_ON</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UCharDirection::U_CHAR_DIRECTION_COUNT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">ubiditransform.h</td><td class="proto"><tt>enum</tt> UBiDiOrder::UBIDI_LOGICAL</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UCharNameChoice::U_CHAR_NAME_CHOICE_COUNT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">ubiditransform.h</td><td class="proto"><tt>enum</tt> UBiDiOrder::UBIDI_VISUAL</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UDecompositionType::U_DT_COUNT</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">ubiditransform.h</td><td class="proto">uint32_t ubiditransform_transform(UBiDiTransform*, const UChar*, int32_t, UChar*, int32_t, UBiDiLevel, UBiDiOrder, UBiDiLevel, UBiDiOrder, UBiDiMirroring, uint32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UEastAsianWidth::U_EA_COUNT</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">ubiditransform.h</td><td class="proto">void ubiditransform_close(UBiDiTransform*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UGraphemeClusterBreak::U_GCB_COUNT</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UHangulSyllableType::U_HST_COUNT</td><td class="stabchange">Stable<br>ICU 2.6</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_KANA_EXTENDED_A</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_COUNT</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_MASARAM_GONDI</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningType::U_JT_COUNT</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_NUSHU</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_COUNT</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_SOYOMBO</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UNumericType::U_NT_COUNT</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_SYRIAC_SUPPLEMENT</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_BINARY_LIMIT</td><td class="stabchange">Stable<br>ICU 2.1</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_ZANABAZAR_SQUARE</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_DOUBLE_LIMIT</td><td class="stabchange">Stable<br>ICU 2.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_BHA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_INT_LIMIT</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_JA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_MASK_LIMIT</td><td class="stabchange">Stable<br>ICU 2.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_LLA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_OTHER_PROPERTY_LIMIT</td><td class="stabchange">Stable<br>ICU 4.6</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_LLLA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_STRING_LIMIT</td><td class="stabchange">Stable<br>ICU 2.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_NGA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UPropertyNameChoice::U_PROPERTY_NAME_CHOICE_COUNT</td><td class="stabchange">Stable<br>ICU 2.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_NNA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> USentenceBreak::U_SB_COUNT</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_NNNA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_COUNT</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_NYA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row1">
-<td class="file">ucnv.h</td><td class="proto"><tt>enum</tt> UConverterUnicodeSet::UCNV_SET_COUNT</td><td class="stabchange">Stable<br>ICU 2.6</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_RA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row0">
-<td class="file">ucol.h</td><td class="proto"><tt>enum</tt> UColAttribute::UCOL_ATTRIBUTE_COUNT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_SSA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row1">
-<td class="file">ucol.h</td><td class="proto"><tt>enum</tt> UColAttributeValue::UCOL_ATTRIBUTE_VALUE_COUNT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_TTA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row0">
-<td class="file">ucol.h</td><td class="proto"><tt>enum</tt> UColBoundMode::UCOL_BOUND_VALUE_COUNT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_EMOJI_COMPONENT</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row1">
-<td class="file">ucol.h</td><td class="proto"><tt>enum</tt> UColReorderCode::UCOL_REORDER_CODE_LIMIT</td><td class="stabchange">Stable<br>ICU 4.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_PREPENDED_CONCATENATION_MARK</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row0">
-<td class="file">ucurr.h</td><td class="proto"><tt>enum</tt> UCurrencyUsage::UCURR_USAGE_COUNT</td><td class="stabchange">Stable<br>ICU 54</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_REGIONAL_INDICATOR</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row1">
-<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatBooleanAttribute::UDAT_BOOLEAN_ATTRIBUTE_COUNT</td><td class="stabchange">Stable<br>ICU 53</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">udisplaycontext.h</td><td class="proto"><tt>enum</tt> UDisplayContext::UDISPCTX_NO_SUBSTITUTE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row0">
-<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatField::UDAT_FIELD_COUNT</td><td class="stabchange">Stable<br>ICU 3.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">udisplaycontext.h</td><td class="proto"><tt>enum</tt> UDisplayContext::UDISPCTX_SUBSTITUTE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row1">
-<td class="file">udata.h</td><td class="proto"><tt>enum</tt> UDataFileAccess::UDATA_FILE_ACCESS_COUNT</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">udisplaycontext.h</td><td class="proto"><tt>enum</tt> UDisplayContextType::UDISPCTX_TYPE_SUBSTITUTE_HANDLING</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row0">
-<td class="file">udatpg.h</td><td class="proto"><tt>enum</tt> UDateTimePatternConflict::UDATPG_CONFLICT_COUNT</td><td class="stabchange">Stable<br>ICU 3.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_MASARAM_GONDI</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row1">
-<td class="file">udatpg.h</td><td class="proto"><tt>enum</tt> UDateTimePatternField::UDATPG_FIELD_COUNT</td><td class="stabchange">Stable<br>ICU 3.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_SOYOMBO</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row0">
-<td class="file">uformattable.h</td><td class="proto"><tt>enum</tt> UFormattableType::UFMT_COUNT</td><td class="stabchange">Stable<br>ICU 52</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_ZANABAZAR_SQUARE</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row1">
-<td class="file">uloc.h</td><td class="proto"><tt>enum</tt> ULocDataLocaleType::ULOC_DATA_LOCALE_TYPE_LIMIT</td><td class="stabchange">Stable<br>ICU 2.1</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uspoof.h</td><td class="proto">URestrictionLevel uspoof_getCheckResultRestrictionLevel(const USpoofCheckResult*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row0">
-<td class="file">ulocdata.h</td><td class="proto"><tt>enum</tt> ULocaleDataDelimiterType::ULOCDATA_DELIMITER_COUNT</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uspoof.h</td><td class="proto">USpoofCheckResult* uspoof_openCheckResult(UErrorCode*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row1">
-<td class="file">ulocdata.h</td><td class="proto"><tt>enum</tt> ULocaleDataExemplarSetType::ULOCDATA_ES_COUNT</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uspoof.h</td><td class="proto">U_NAMESPACE_END int32_t uspoof_getCheckResultChecks(const USpoofCheckResult*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row0">
-<td class="file">ulocdata.h</td><td class="proto"><tt>enum</tt> UMeasurementSystem::UMS_LIMIT</td><td class="stabchange">Stable<br>ICU 2.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uspoof.h</td><td class="proto">const USet* uspoof_getCheckResultNumerics(const USpoofCheckResult*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row1">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UCurrencySpacing::UNUM_CURRENCY_SPACING_COUNT</td><td class="stabchange">Stable<br>ICU 4.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uspoof.h</td><td class="proto"><tt>enum</tt> USpoofChecks::USPOOF_CONFUSABLE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row0">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatFields::UNUM_FIELD_COUNT</td><td class="stabchange">Stable<br>ICU 49</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uspoof.h</td><td class="proto">int32_t uspoof_check2(const USpoofChecker*, const UChar*, int32_t, USpoofCheckResult*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row1">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatStyle::UNUM_FORMAT_STYLE_COUNT</td><td class="stabchange">Stable<br>ICU 4.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uspoof.h</td><td class="proto">int32_t uspoof_check2UTF8(const USpoofChecker*, const char*, int32_t, USpoofCheckResult*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row0">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatSymbol::UNUM_FORMAT_SYMBOL_COUNT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uspoof.h</td><td class="proto">int32_t uspoof_check2UnicodeString(const USpoofChecker*, const icu::UnicodeString&, USpoofCheckResult*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
 <tr class="row1">
-<td class="file">upluralrules.h</td><td class="proto"><tt>enum</tt> UPluralType::UPLURAL_TYPE_COUNT</td><td class="stabchange">Stable<br>ICU 50</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">uspoof.h</td><td class="proto">void uspoof_closeCheckResult(USpoofCheckResult*)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 58</td>
 </tr>
-<tr class="row0">
-<td class="file">uregion.h</td><td class="proto"><tt>enum</tt> URegionType::URGN_LIMIT</td><td class="stabchange">Stable<br>ICU 51</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> UDateRelativeDateTimeFormatterStyle::UDAT_STYLE_COUNT</td><td class="stabchange">Stable<br>ICU 54</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> URelativeDateTimeUnit::UDAT_REL_UNIT_COUNT</td><td class="">Draft<br>ICU 57</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">ures.h</td><td class="proto"><tt>enum</tt> UResType::URES_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_CODE_LIMIT</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">usearch.h</td><td class="proto"><tt>enum</tt> USearchAttribute::USEARCH_ATTRIBUTE_COUNT</td><td class="stabchange">Stable<br>ICU 2.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">usearch.h</td><td class="proto"><tt>enum</tt> USearchAttributeValue::USEARCH_ATTRIBUTE_VALUE_COUNT</td><td class="stabchange">Stable<br>ICU 2.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">uset.h</td><td class="proto"><tt>enum</tt> USetSpanCondition::USET_SPAN_CONDITION_COUNT</td><td class="stabchange">Stable<br>ICU 3.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">uspoof.h</td><td class="proto"><tt>enum</tt> USpoofChecks::USPOOF_ANY_CASE</td><td class="stabchange">Stable<br>ICU 4.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_COLLATION_LIMIT</td><td class="stabchange">Stable<br>ICU 2.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_CONVERSION_LIMIT</td><td class="stabchange">Stable<br>ICU 2.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_FUNCTION_LIMIT</td><td class="stabchange">Stable<br>ICU 2.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_BRK_ERROR_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_ERROR_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_ERROR_WARNING_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_FMT_PARSE_ERROR_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_IDNA_ERROR_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_PARSE_ERROR_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_PLUGIN_ERROR_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_REGEX_ERROR_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_STANDARD_ERROR_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
 </table>
 <P></P>
 <a href="#_top">(jump back to top)</a>
 <hr>
-<a name="changed"></a>
-<h2>Changed in  ICU 58 (old, new)</h2>
+<a name="added"></a>
+<h2>Added in ICU 60</h2>
 <table BORDER="1" class="genTable">
 <THEAD>
 <tr>
-<th>File</th><th>API</th><th>ICU 57</th><th>ICU 58</th>
+<th>File</th><th>API</th><th>ICU 59</th><th>ICU 60</th>
 </tr>
 </THEAD>
 <tr class="row1">
-<td class="file">compactdecimalformat.h</td><td class="proto">UnicodeString& icu::CompactDecimalFormat::format(int32_t, UnicodeString&, FieldPosition&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">bytestream.h</td><td class="proto">icu::StringByteSink< StringClass >::StringByteSink(StringClass*, int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">decimfmt.h</td><td class="proto">UnicodeString& icu::DecimalFormat::format(double, UnicodeString&, FieldPositionIterator*, UErrorCode&)</td><td class="stabchange">Stable</td><td>Stable<br>
-<span class=""><span>ICU 4.4</span></span></td>
+<td class="file">casemap.h</td><td class="proto"><tt>static</tt> void icu::CaseMap::utf8Fold(uint32_t, StringPiece, ByteSink&, Edits*, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">decimfmt.h</td><td class="proto">UnicodeString& icu::DecimalFormat::format(int32_t, UnicodeString&, FieldPositionIterator*, UErrorCode&)</td><td class="stabchange">Stable</td><td>Stable<br>
-<span class=""><span>ICU 4.4</span></span></td>
+<td class="file">casemap.h</td><td class="proto"><tt>static</tt> void icu::CaseMap::utf8ToLower(const char*, uint32_t, StringPiece, ByteSink&, Edits*, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">decimfmt.h</td><td class="proto">UnicodeString& icu::DecimalFormat::format(int64_t, UnicodeString&, FieldPositionIterator*, UErrorCode&)</td><td class="stabchange">Stable</td><td>Stable<br>
-<span class=""><span>ICU 4.4</span></span></td>
+<td class="file">casemap.h</td><td class="proto"><tt>static</tt> void icu::CaseMap::utf8ToTitle(const char*, uint32_t, BreakIterator*, StringPiece, ByteSink&, Edits*, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">dtfmtsym.h</td><td class="proto"><tt>enum</tt> 
-							icu::DateFormatSymbols::DtContextType::DT_CONTEXT_COUNT</td><td class="stabchange">Stable<br>ICU 3.6</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">casemap.h</td><td class="proto"><tt>static</tt> void icu::CaseMap::utf8ToUpper(const char*, uint32_t, StringPiece, ByteSink&, Edits*, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">dtfmtsym.h</td><td class="proto"><tt>enum</tt> 
-							icu::DateFormatSymbols::DtWidthType::DT_WIDTH_COUNT</td><td class="stabchange">Stable<br>ICU 3.6</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">currunit.h</td><td class="proto">icu::CurrencyUnit::CurrencyUnit()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">dtptngen.h</td><td class="proto"><tt>static</tt> UnicodeString icu::DateTimePatternGenerator::staticGetBaseSkeleton(const UnicodeString&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">currunit.h</td><td class="proto">icu::CurrencyUnit::CurrencyUnit(const MeasureUnit&, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">dtptngen.h</td><td class="proto"><tt>static</tt> UnicodeString icu::DateTimePatternGenerator::staticGetSkeleton(const UnicodeString&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">dcfmtsym.h</td><td class="proto">icu::DecimalFormatSymbols::DecimalFormatSymbols(const Locale&, const NumberingSystem&, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">fieldpos.h</td><td class="proto"><tt>enum</tt> icu::FieldPosition::(anonymous) {}</td><td class=""><i>(untagged)</i></td><td>Stable<br>
-<span class=""><span>ICU 2.0</span></span></td>
+<td class="file">edits.h</td><td class="proto">Edits& icu::Edits::mergeAndAppend(const Edits&, const Edits&, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">fieldpos.h</td><td class="proto"><tt>enum</tt> icu::FieldPosition::(anonymous)::DONT_CARE</td><td class=""><i>(untagged)</i></td><td>Stable<br>
-<span class=""><span>ICU 2.0</span></span></td>
+<td class="file">edits.h</td><td class="proto">Edits& icu::Edits::operator=(Edits&&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">filteredbrk.h</td><td class="proto">BreakIterator* icu::FilteredBreakIteratorBuilder::build(BreakIterator*, UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">edits.h</td><td class="proto">Edits& icu::Edits::operator=(const Edits&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">filteredbrk.h</td><td class="proto">UBool icu::FilteredBreakIteratorBuilder::suppressBreakAfter(const UnicodeString&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">edits.h</td><td class="proto">icu::Edits::Edits(Edits&&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">filteredbrk.h</td><td class="proto">UBool icu::FilteredBreakIteratorBuilder::unsuppressBreakAfter(const UnicodeString&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">edits.h</td><td class="proto">icu::Edits::Edits(const Edits&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">filteredbrk.h</td><td class="proto">icu::FilteredBreakIteratorBuilder::~FilteredBreakIteratorBuilder()</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">edits.h</td><td class="proto">int32_t icu::Edits::numberOfChanges()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">filteredbrk.h</td><td class="proto"><tt>static</tt> FilteredBreakIteratorBuilder* icu::FilteredBreakIteratorBuilder::createInstance(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">filteredbrk.h</td><td class="proto">BreakIterator* icu::FilteredBreakIteratorBuilder::wrapIteratorWithFilter(BreakIterator*, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">filteredbrk.h</td><td class="proto"><tt>static</tt> FilteredBreakIteratorBuilder* icu::FilteredBreakIteratorBuilder::createInstance(const Locale&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">filteredbrk.h</td><td class="proto"><tt>static</tt> FilteredBreakIteratorBuilder* icu::FilteredBreakIteratorBuilder::createEmptyInstance(UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">localpointer.h</td><td class="proto">icu::LocalArray< T >::LocalArray(T*, UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">normalizer2.h</td><td class="proto">UBool icu::FilteredNormalizer2::isNormalizedUTF8(StringPiece, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">localpointer.h</td><td class="proto">void icu::LocalArray< T >::adoptInsteadAndCheckErrorCode(T*, UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">normalizer2.h</td><td class="proto">UBool icu::Normalizer2::isNormalizedUTF8(StringPiece, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">localpointer.h</td><td class="proto">void icu::LocalArray< T >::swap(LocalArray< T >&) U_NOEXCEPT</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">normalizer2.h</td><td class="proto">void icu::FilteredNormalizer2::normalizeUTF8(uint32_t, StringPiece, ByteSink&, Edits*, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">localpointer.h</td><td class="proto">void icu::LocalPointer< T >::swap(LocalPointer< T >&) U_NOEXCEPT</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">normalizer2.h</td><td class="proto">void icu::Normalizer2::normalizeUTF8(uint32_t, StringPiece, ByteSink&, Edits*, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">measfmt.h</td><td class="proto"><tt>enum</tt> UMeasureFormatWidth::UMEASFMT_WIDTH_COUNT</td><td class="stabchange">Stable<br>ICU 53</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">nounit.h</td><td class="proto">UClassID icu::NoUnit::getDynamicClassID()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createCentury(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">nounit.h</td><td class="proto">UObject* icu::NoUnit::clone()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createCupMetric(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">nounit.h</td><td class="proto">icu::NoUnit::NoUnit(const NoUnit&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createGenericTemperature(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">nounit.h</td><td class="proto">icu::NoUnit::~NoUnit()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createKnot(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">nounit.h</td><td class="proto"><tt>static</tt> NoUnit icu::NoUnit::base()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createLiterPer100Kilometers(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">nounit.h</td><td class="proto"><tt>static</tt> NoUnit icu::NoUnit::percent()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createMileScandinavian(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">nounit.h</td><td class="proto"><tt>static</tt> NoUnit icu::NoUnit::permille()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPintMetric(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">nounit.h</td><td class="proto"><tt>static</tt> UClassID icu::NoUnit::getStaticClassID()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createRevolutionAngle(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">numberformatter.h</td><td class="proto">Appendable& icu::number::FormattedNumber::appendTo(Appendable&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">numfmt.h</td><td class="proto">UnicodeString& icu::NumberFormat::format(const Formattable&, UnicodeString&, FieldPositionIterator*, UErrorCode&)</td><td class="stabchange">Stable</td><td>Stable<br>
-<span class=""><span>ICU 4.4</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings< Derived >::adoptSymbols(const NumberingSystem*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">numfmt.h</td><td class="proto">UnicodeString& icu::NumberFormat::format(double, UnicodeString&, FieldPositionIterator*, UErrorCode&)</td><td class="stabchange">Stable</td><td>Stable<br>
-<span class=""><span>ICU 4.4</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings< Derived >::adoptUnit(const icu::MeasureUnit*)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">numfmt.h</td><td class="proto">UnicodeString& icu::NumberFormat::format(int32_t, UnicodeString&, FieldPositionIterator*, UErrorCode&)</td><td class="stabchange">Stable</td><td>Stable<br>
-<span class=""><span>ICU 4.4</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings< Derived >::decimal(const UNumberDecimalSeparatorDisplay&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">numfmt.h</td><td class="proto">UnicodeString& icu::NumberFormat::format(int64_t, UnicodeString&, FieldPositionIterator*, UErrorCode&)</td><td class="stabchange">Stable</td><td>Stable<br>
-<span class=""><span>ICU 4.4</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings< Derived >::grouping(const Grouper&)</td><td class="">(missing)</td><td>Internal<br>
+</td>
 </tr>
 <tr class="row0">
-<td class="file">reldatefmt.h</td><td class="proto"><tt>enum</tt> UDateAbsoluteUnit::UDAT_ABSOLUTE_UNIT_COUNT</td><td class="stabchange">Stable<br>ICU 53</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings< Derived >::integerWidth(const IntegerWidth&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">reldatefmt.h</td><td class="proto"><tt>enum</tt> UDateDirection::UDAT_DIRECTION_COUNT</td><td class="stabchange">Stable<br>ICU 53</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings< Derived >::notation(const Notation&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">reldatefmt.h</td><td class="proto"><tt>enum</tt> UDateRelativeUnit::UDAT_RELATIVE_UNIT_COUNT</td><td class="stabchange">Stable<br>ICU 53</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings< Derived >::padding(const impl::Padder&)</td><td class="">(missing)</td><td>Internal<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">tmunit.h</td><td class="proto"><tt>enum</tt> 
-							icu::TimeUnit::UTimeUnitFields::UTIMEUNIT_FIELD_COUNT</td><td class="stabchange">Stable<br>ICU 4.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings< Derived >::rounding(const Rounder&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">ubidi.h</td><td class="proto"><tt>#define</tt> U_BIDI_CLASS_DEFAULT</td><td class="stabchange">Stable<br>ICU 3.6</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings< Derived >::sign(const UNumberSignDisplay&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">ubidi.h</td><td class="proto"><tt>enum</tt> UBiDiReorderingMode::UBIDI_REORDER_COUNT</td><td class="stabchange">Stable<br>ICU 3.6</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings< Derived >::symbols(const DecimalFormatSymbols&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">ubrk.h</td><td class="proto"><tt>enum</tt> UBreakIteratorType::UBRK_COUNT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings< Derived >::threshold(int32_t)</td><td class="">(missing)</td><td>Internal<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">ucal.h</td><td class="proto"><tt>enum</tt> UCalendarDateFields::UCAL_FIELD_COUNT</td><td class="stabchange">Stable<br>ICU 2.6</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings< Derived >::unit(const icu::MeasureUnit&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBidiPairedBracketType::U_BPT_COUNT</td><td class="stabchange">Stable<br>ICU 52</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings< Derived >::unitWidth(const UNumberUnitWidth&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_COUNT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">FormattedNumber icu::number::LocalizedNumberFormatter::formatDecimal(StringPiece, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UCharDirection::U_CHAR_DIRECTION_COUNT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">FormattedNumber icu::number::LocalizedNumberFormatter::formatDouble(double, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UCharNameChoice::U_CHAR_NAME_CHOICE_COUNT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">FormattedNumber icu::number::LocalizedNumberFormatter::formatInt(int64_t, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UDecompositionType::U_DT_COUNT</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">IntegerWidth icu::number::IntegerWidth::truncateAt(int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UEastAsianWidth::U_EA_COUNT</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">LocalizedNumberFormatter icu::number::UnlocalizedNumberFormatter::locale(const icu::Locale&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UGraphemeClusterBreak::U_GCB_COUNT</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Rounder icu::number::CurrencyRounder::withCurrency(const CurrencyUnit&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UGraphemeClusterBreak::U_GCB_PREPEND</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Stable<br>
-<span class="verchange"><span>ICU 4.0</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Rounder icu::number::FractionRounder::withMaxDigits(int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UGraphemeClusterBreak::U_GCB_REGIONAL_INDICATOR</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Stable<br>
-<span class="verchange"><span>ICU 50</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Rounder icu::number::FractionRounder::withMinDigits(int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UGraphemeClusterBreak::U_GCB_SPACING_MARK</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Stable<br>
-<span class="verchange"><span>ICU 4.0</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Rounder icu::number::IncrementRounder::withMinFraction(int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UHangulSyllableType::U_HST_COUNT</td><td class="stabchange">Stable<br>ICU 2.6</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">Rounder icu::number::Rounder::withMode(UNumberFormatRoundingMode)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_COUNT</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">ScientificNotation icu::number::ScientificNotation::withExponentSignDisplay(UNumberSignDisplay)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningType::U_JT_COUNT</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">ScientificNotation icu::number::ScientificNotation::withMinExponentDigits(int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_CLOSE_PARENTHESIS</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Stable<br>
-<span class="verchange"><span>ICU 4.4</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto">SymbolsWrapper& icu::number::impl::SymbolsWrapper::operator=(const SymbolsWrapper&)</td><td class="">(missing)</td><td>Internal<br>
+</td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_CONDITIONAL_JAPANESE_STARTER</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Stable<br>
-<span class="verchange"><span>ICU 49</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto">UBool icu::number::NumberFormatterSettings< Derived >::copyErrorTo(UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_COUNT</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">UBool icu::number::impl::SymbolsWrapper::copyErrorTo(UErrorCode&)</td><td class="">(missing)</td><td>Internal<br>
+</td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_H2</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Stable<br>
-<span class="verchange"><span>ICU 3.4</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto">UnicodeString icu::number::FormattedNumber::toString()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_H3</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Stable<br>
-<span class="verchange"><span>ICU 3.4</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto">bool icu::number::impl::SymbolsWrapper::isDecimalFormatSymbols()</td><td class="">(missing)</td><td>Internal<br>
+</td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_HEBREW_LETTER</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Stable<br>
-<span class="verchange"><span>ICU 49</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto">bool icu::number::impl::SymbolsWrapper::isNumberingSystem()</td><td class="">(missing)</td><td>Internal<br>
+</td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_JL</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Stable<br>
-<span class="verchange"><span>ICU 3.4</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto">const DecimalFormatSymbols* icu::number::impl::SymbolsWrapper::getDecimalFormatSymbols()</td><td class="">(missing)</td><td>Internal<br>
+</td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_JT</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Stable<br>
-<span class="verchange"><span>ICU 3.4</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto">const NumberingSystem* icu::number::impl::SymbolsWrapper::getNumberingSystem()</td><td class="">(missing)</td><td>Internal<br>
+</td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_JV</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Stable<br>
-<span class="verchange"><span>ICU 3.4</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UNumberDecimalSeparatorDisplay::UNUM_DECIMAL_SEPARATOR_ALWAYS</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_NEXT_LINE</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Stable<br>
-<span class="verchange"><span>ICU 2.6</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UNumberDecimalSeparatorDisplay::UNUM_DECIMAL_SEPARATOR_AUTO</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_REGIONAL_INDICATOR</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Stable<br>
-<span class="verchange"><span>ICU 50</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UNumberDecimalSeparatorDisplay::UNUM_DECIMAL_SEPARATOR_COUNT</td><td class="">(missing)</td><td>Internal<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_WORD_JOINER</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Stable<br>
-<span class="verchange"><span>ICU 2.6</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_ACCOUNTING_ALWAYS</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UNumericType::U_NT_COUNT</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_ACCOUNTING</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_BINARY_LIMIT</td><td class="stabchange">Stable<br>ICU 2.1</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_ALWAYS</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_DOUBLE_LIMIT</td><td class="stabchange">Stable<br>ICU 2.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_AUTO</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_INT_LIMIT</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_COUNT</td><td class="">(missing)</td><td>Internal<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_MASK_LIMIT</td><td class="stabchange">Stable<br>ICU 2.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_NEVER</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_OTHER_PROPERTY_LIMIT</td><td class="stabchange">Stable<br>ICU 4.6</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_COUNT</td><td class="">(missing)</td><td>Internal<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_STRING_LIMIT</td><td class="stabchange">Stable<br>ICU 2.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_FULL_NAME</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UPropertyNameChoice::U_PROPERTY_NAME_CHOICE_COUNT</td><td class="stabchange">Stable<br>ICU 2.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_HIDDEN</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> USentenceBreak::U_SB_COUNT</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_ISO_CODE</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_COUNT</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_NARROW</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_CR</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Stable<br>
-<span class="verchange"><span>ICU 4.0</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UNumberUnitWidth::UNUM_UNIT_WIDTH_SHORT</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_DOUBLE_QUOTE</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Stable<br>
-<span class="verchange"><span>ICU 52</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto">icu::number::FormattedNumber::~FormattedNumber()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_EXTEND</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Stable<br>
-<span class="verchange"><span>ICU 4.0</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto">icu::number::LocalizedNumberFormatter::LocalizedNumberFormatter(const LocalizedNumberFormatter&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_HEBREW_LETTER</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Stable<br>
-<span class="verchange"><span>ICU 52</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto">icu::number::LocalizedNumberFormatter::~LocalizedNumberFormatter()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_LF</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Stable<br>
-<span class="verchange"><span>ICU 4.0</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto">icu::number::NumberFormatter::NumberFormatter()=delete</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_MIDNUMLET</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Stable<br>
-<span class="verchange"><span>ICU 4.0</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto">icu::number::UnlocalizedNumberFormatter::UnlocalizedNumberFormatter(const UnlocalizedNumberFormatter&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_NEWLINE</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Stable<br>
-<span class="verchange"><span>ICU 4.0</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto">icu::number::impl::SymbolsWrapper::SymbolsWrapper()</td><td class="">(missing)</td><td>Internal<br>
+</td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_REGIONAL_INDICATOR</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Stable<br>
-<span class="verchange"><span>ICU 50</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto">icu::number::impl::SymbolsWrapper::SymbolsWrapper(const SymbolsWrapper&)</td><td class="">(missing)</td><td>Internal<br>
+</td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_SINGLE_QUOTE</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Stable<br>
-<span class="verchange"><span>ICU 52</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numberformatter.h</td><td class="proto">icu::number::impl::SymbolsWrapper::~SymbolsWrapper()</td><td class="">(missing)</td><td>Internal<br>
+</td>
 </tr>
 <tr class="row0">
-<td class="file">ucnv.h</td><td class="proto"><tt>enum</tt> UConverterUnicodeSet::UCNV_SET_COUNT</td><td class="stabchange">Stable<br>ICU 2.6</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> CompactNotation icu::number::Notation::compactLong()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">ucol.h</td><td class="proto"><tt>enum</tt> UColAttribute::UCOL_ATTRIBUTE_COUNT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> CompactNotation icu::number::Notation::compactShort()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">ucol.h</td><td class="proto"><tt>enum</tt> UColAttributeValue::UCOL_ATTRIBUTE_VALUE_COUNT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> CurrencyRounder icu::number::Rounder::currency(UCurrencyUsage)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">ucol.h</td><td class="proto"><tt>enum</tt> UColBoundMode::UCOL_BOUND_VALUE_COUNT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> DigitRounder icu::number::Rounder::fixedDigits(int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">ucol.h</td><td class="proto"><tt>enum</tt> UColReorderCode::UCOL_REORDER_CODE_LIMIT</td><td class="stabchange">Stable<br>ICU 4.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> DigitRounder icu::number::Rounder::maxDigits(int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">ucurr.h</td><td class="proto"><tt>enum</tt> UCurrencyUsage::UCURR_USAGE_COUNT</td><td class="stabchange">Stable<br>ICU 54</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> DigitRounder icu::number::Rounder::minDigits(int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatBooleanAttribute::UDAT_BOOLEAN_ATTRIBUTE_COUNT</td><td class="stabchange">Stable<br>ICU 53</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> DigitRounder icu::number::Rounder::minMaxDigits(int32_t, int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatBooleanAttribute::UDAT_PARSE_MULTIPLE_PATTERNS_FOR_MATCH</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> FractionRounder icu::number::Rounder::fixedFraction(int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatBooleanAttribute::UDAT_PARSE_PARTIAL_LITERAL_MATCH</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> FractionRounder icu::number::Rounder::integer()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatField::UDAT_FIELD_COUNT</td><td class="stabchange">Stable<br>ICU 3.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> FractionRounder icu::number::Rounder::maxFraction(int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">udata.h</td><td class="proto"><tt>enum</tt> UDataFileAccess::UDATA_FILE_ACCESS_COUNT</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> FractionRounder icu::number::Rounder::minFraction(int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">udatpg.h</td><td class="proto"><tt>enum</tt> UDateTimePatternConflict::UDATPG_CONFLICT_COUNT</td><td class="stabchange">Stable<br>ICU 3.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> FractionRounder icu::number::Rounder::minMaxFraction(int32_t, int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">udatpg.h</td><td class="proto"><tt>enum</tt> UDateTimePatternField::UDATPG_FIELD_COUNT</td><td class="stabchange">Stable<br>ICU 3.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> Grouper icu::number::Grouper::defaults()</td><td class="">(missing)</td><td>Internal<br>
+</td>
 </tr>
 <tr class="row1">
-<td class="file">uformattable.h</td><td class="proto"><tt>enum</tt> UFormattableType::UFMT_COUNT</td><td class="stabchange">Stable<br>ICU 52</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> Grouper icu::number::Grouper::minTwoDigits()</td><td class="">(missing)</td><td>Internal<br>
+</td>
 </tr>
 <tr class="row0">
-<td class="file">uloc.h</td><td class="proto"><tt>enum</tt> ULocDataLocaleType::ULOC_DATA_LOCALE_TYPE_LIMIT</td><td class="stabchange">Stable<br>ICU 2.1</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> Grouper icu::number::Grouper::none()</td><td class="">(missing)</td><td>Internal<br>
+</td>
 </tr>
 <tr class="row1">
-<td class="file">ulocdata.h</td><td class="proto"><tt>enum</tt> ULocaleDataDelimiterType::ULOCDATA_DELIMITER_COUNT</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> IncrementRounder icu::number::Rounder::increment(double)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">ulocdata.h</td><td class="proto"><tt>enum</tt> ULocaleDataExemplarSetType::ULOCDATA_ES_COUNT</td><td class="stabchange">Stable<br>ICU 3.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> IntegerWidth icu::number::IntegerWidth::zeroFillTo(int32_t)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">ulocdata.h</td><td class="proto"><tt>enum</tt> UMeasurementSystem::UMS_LIMIT</td><td class="stabchange">Stable<br>ICU 2.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> LocalizedNumberFormatter icu::number::NumberFormatter::withLocale(const Locale&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">unistr.h</td><td class="proto"><tt>#define</tt> UNISTR_OBJECT_SIZE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> Padder icu::number::impl::Padder::codePoints(UChar32, int32_t, UNumberFormatPadPosition)</td><td class="">(missing)</td><td>Internal<br>
+</td>
 </tr>
 <tr class="row1">
-<td class="file">unistr.h</td><td class="proto">void icu::UnicodeString::swap(UnicodeString&) U_NOEXCEPT</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> Padder icu::number::impl::Padder::none()</td><td class="">(missing)</td><td>Internal<br>
+</td>
 </tr>
 <tr class="row0">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UCurrencySpacing::UNUM_CURRENCY_SPACING_COUNT</td><td class="stabchange">Stable<br>ICU 4.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> Rounder icu::number::Rounder::unlimited()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatFields::UNUM_FIELD_COUNT</td><td class="stabchange">Stable<br>ICU 49</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> ScientificNotation icu::number::Notation::engineering()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatStyle::UNUM_CURRENCY_STANDARD</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> ScientificNotation icu::number::Notation::scientific()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatStyle::UNUM_DECIMAL_COMPACT_LONG</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> SimpleNotation icu::number::Notation::simple()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatStyle::UNUM_DECIMAL_COMPACT_SHORT</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> UnlocalizedNumberFormatter icu::number::NumberFormatter::with()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatStyle::UNUM_FORMAT_STYLE_COUNT</td><td class="stabchange">Stable<br>ICU 4.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">void icu::number::FormattedNumber::populateFieldPosition(FieldPosition&, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatSymbol::UNUM_FORMAT_SYMBOL_COUNT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">void icu::number::FormattedNumber::populateFieldPositionIterator(FieldPositionIterator&, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">upluralrules.h</td><td class="proto"><tt>enum</tt> UPluralType::UPLURAL_TYPE_COUNT</td><td class="stabchange">Stable<br>ICU 50</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">void icu::number::impl::SymbolsWrapper::setTo(const DecimalFormatSymbols&)</td><td class="">(missing)</td><td>Internal<br>
+</td>
 </tr>
 <tr class="row0">
-<td class="file">uregion.h</td><td class="proto"><tt>enum</tt> URegionType::URGN_LIMIT</td><td class="stabchange">Stable<br>ICU 51</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numberformatter.h</td><td class="proto">void icu::number::impl::SymbolsWrapper::setTo(const NumberingSystem*)</td><td class="">(missing)</td><td>Internal<br>
+</td>
 </tr>
 <tr class="row1">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> UDateRelativeDateTimeFormatterStyle::UDAT_STYLE_COUNT</td><td class="stabchange">Stable<br>ICU 54</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numfmt.h</td><td class="proto">ERoundingMode icu::NumberFormat::getRoundingMode()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> URelativeDateTimeUnit::UDAT_REL_UNIT_COUNT</td><td class="">Draft<br>ICU 57</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt> 
+							icu::NumberFormat::ERoundingMode {}</td><td class="">(moved from decimfmt.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.4</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">ures.h</td><td class="proto"><tt>enum</tt> UResType::URES_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt> 
+							icu::NumberFormat::ERoundingMode::kRoundCeiling</td><td class="">(moved from decimfmt.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.4</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_CODE_LIMIT</td><td class="stabchange">Stable<br>ICU 2.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt> 
+							icu::NumberFormat::ERoundingMode::kRoundDown</td><td class="">(moved from decimfmt.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.4</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">usearch.h</td><td class="proto"><tt>enum</tt> USearchAttribute::USEARCH_ATTRIBUTE_COUNT</td><td class="stabchange">Stable<br>ICU 2.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt> 
+							icu::NumberFormat::ERoundingMode::kRoundFloor</td><td class="">(moved from decimfmt.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.4</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">usearch.h</td><td class="proto"><tt>enum</tt> USearchAttributeValue::USEARCH_ATTRIBUTE_VALUE_COUNT</td><td class="stabchange">Stable<br>ICU 2.4</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt> 
+							icu::NumberFormat::ERoundingMode::kRoundHalfDown</td><td class="">(moved from decimfmt.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.4</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">uset.h</td><td class="proto"><tt>enum</tt> USetSpanCondition::USET_SPAN_CONDITION_COUNT</td><td class="stabchange">Stable<br>ICU 3.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt> 
+							icu::NumberFormat::ERoundingMode::kRoundHalfEven</td><td class="">(moved from decimfmt.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.4</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">uspoof.h</td><td class="proto"><tt>enum</tt> USpoofChecks::USPOOF_ANY_CASE</td><td class="stabchange">Stable<br>ICU 4.2</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt> 
+							icu::NumberFormat::ERoundingMode::kRoundHalfUp</td><td class="">(moved from decimfmt.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.4</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">uspoof.h</td><td class="proto">int32_t uspoof_checkUTF8(const USpoofChecker*, const char*, int32_t, int32_t*, UErrorCode*)</td><td class="">Deprecated<br>ICU 51</td><td>Stable<br>
-<span class="verchange"><span>ICU 4.2</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt> 
+							icu::NumberFormat::ERoundingMode::kRoundUnnecessary</td><td class="">(moved from decimfmt.h)</td><td>Stable<br>
+<span class=""><span>ICU 4.8</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">uspoof.h</td><td class="proto">int32_t uspoof_checkUnicodeString(const USpoofChecker*, const icu::UnicodeString&, int32_t*, UErrorCode*)</td><td class="">Deprecated<br>ICU 51</td><td>Stable<br>
-<span class="verchange"><span>ICU 4.2</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">numfmt.h</td><td class="proto"><tt>enum</tt> 
+							icu::NumberFormat::ERoundingMode::kRoundUp</td><td class="">(moved from decimfmt.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.4</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_COLLATION_LIMIT</td><td class="stabchange">Stable<br>ICU 2.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">numfmt.h</td><td class="proto">void icu::NumberFormat::setRoundingMode(ERoundingMode)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_CONVERSION_LIMIT</td><td class="stabchange">Stable<br>ICU 2.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">platform.h</td><td class="proto"><tt>#define</tt> U_CALLCONV_FPTR</td><td class="">(missing)</td><td>Internal<br>
+</td>
 </tr>
 <tr class="row1">
-<td class="file">utrace.h</td><td class="proto"><tt>enum</tt> UTraceFunctionNumber::UTRACE_FUNCTION_LIMIT</td><td class="stabchange">Stable<br>ICU 2.8</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">platform.h</td><td class="proto"><tt>#define</tt> U_PF_FUCHSIA</td><td class="">(missing)</td><td>Internal<br>
+</td>
 </tr>
 <tr class="row0">
-<td class="file">utypes.h</td><td class="proto"><tt>#define</tt> NULL</td><td class="">Deprecated<br>ICU 54</td><td>Stable<br>
-<span class="verchange"><span>ICU 2.0</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
+<td class="file">plurrule.h</td><td class="proto">UnicodeString icu::PluralRules::select(const IFixedDecimal&)</td><td class="">(missing)</td><td>Internal<br>
+</td>
 </tr>
 <tr class="row1">
-<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_BRK_ERROR_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">rbbi.h</td><td class="proto">void icu::RuleBasedBreakIterator::dumpCache()</td><td class="">(missing)</td><td>Internal<br>
+</td>
 </tr>
 <tr class="row0">
-<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_ERROR_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">rbnf.h</td><td class="proto">ERoundingMode icu::RuleBasedNumberFormat::getRoundingMode()</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_ERROR_WARNING_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">rbnf.h</td><td class="proto">void icu::RuleBasedNumberFormat::setRoundingMode(ERoundingMode)</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_FMT_PARSE_ERROR_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">stringoptions.h</td><td class="proto"><tt>#define</tt> U_COMPARE_CODE_POINT_ORDER</td><td class="">(moved from unorm2.h, ustring.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.2</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_IDNA_ERROR_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">stringoptions.h</td><td class="proto"><tt>#define</tt> U_COMPARE_IGNORE_CASE</td><td class="">(moved from unorm2.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.2</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_PARSE_ERROR_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
+<td class="file">stringoptions.h</td><td class="proto"><tt>#define</tt> U_EDITS_NO_RESET</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_PLUGIN_ERROR_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_REGEX_ERROR_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_STANDARD_ERROR_LIMIT</td><td class="stabchange">Stable<br>ICU 2.0</td><td>Deprecated<br>
-<span class="verchange"><span>ICU 58</span></span></td>
-</tr>
-</table>
-<P></P>
-<a href="#_top">(jump back to top)</a>
-<hr>
-<a name="promoted"></a>
-<h2>Promoted to stable in ICU 58</h2>
-<table BORDER="1" class="genTable">
-<THEAD>
-<tr>
-<th>File</th><th>API</th><th>ICU 57</th><th>ICU 58</th>
-</tr>
-</THEAD>
-<tr class="row1">
-<td class="file">bytestrie.h</td><td class="proto">StringPiece icu::BytesTrie::Iterator::getString()</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.8</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">bytestriebuilder.h</td><td class="proto">BytesTrieBuilder& icu::BytesTrieBuilder::add(StringPiece, int32_t, UErrorCode&)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.8</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">compactdecimalformat.h</td><td class="proto">UnicodeString& icu::CompactDecimalFormat::format(int32_t, UnicodeString&, FieldPosition&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
-</tr>
-<tr class="row0">
-<td class="file">decimfmt.h</td><td class="proto">UnicodeString& icu::DecimalFormat::format(StringPiece, UnicodeString&, FieldPositionIterator*, UErrorCode&)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.4</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">dtptngen.h</td><td class="proto"><tt>static</tt> UnicodeString icu::DateTimePatternGenerator::staticGetBaseSkeleton(const UnicodeString&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
-</tr>
-<tr class="row0">
-<td class="file">dtptngen.h</td><td class="proto"><tt>static</tt> UnicodeString icu::DateTimePatternGenerator::staticGetSkeleton(const UnicodeString&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
-</tr>
-<tr class="row1">
-<td class="file">fieldpos.h</td><td class="proto"><tt>enum</tt> icu::FieldPosition::(anonymous) {}</td><td class=""><i>(untagged)</i></td><td>Stable<br>
+<td class="file">stringoptions.h</td><td class="proto"><tt>#define</tt> U_FOLD_CASE_DEFAULT</td><td class="">(moved from uchar.h)</td><td>Stable<br>
 <span class=""><span>ICU 2.0</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">fieldpos.h</td><td class="proto"><tt>enum</tt> icu::FieldPosition::(anonymous)::DONT_CARE</td><td class=""><i>(untagged)</i></td><td>Stable<br>
+<td class="file">stringoptions.h</td><td class="proto"><tt>#define</tt> U_FOLD_CASE_EXCLUDE_SPECIAL_I</td><td class="">(moved from moved from uchar.h)</td><td>Stable<br>
 <span class=""><span>ICU 2.0</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">filteredbrk.h</td><td class="proto">BreakIterator* icu::FilteredBreakIteratorBuilder::build(BreakIterator*, UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">stringoptions.h</td><td class="proto"><tt>#define</tt> U_OMIT_UNCHANGED_TEXT</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">filteredbrk.h</td><td class="proto">UBool icu::FilteredBreakIteratorBuilder::suppressBreakAfter(const UnicodeString&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">stringoptions.h</td><td class="proto"><tt>#define</tt> U_TITLECASE_ADJUST_TO_CASED</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">filteredbrk.h</td><td class="proto">UBool icu::FilteredBreakIteratorBuilder::unsuppressBreakAfter(const UnicodeString&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">stringoptions.h</td><td class="proto"><tt>#define</tt> U_TITLECASE_NO_BREAK_ADJUSTMENT</td><td class="">(moved from ucasemap.h)</td><td>Stable<br>
+<span class=""><span>ICU 3.8</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">filteredbrk.h</td><td class="proto">icu::FilteredBreakIteratorBuilder::~FilteredBreakIteratorBuilder()</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">stringoptions.h</td><td class="proto"><tt>#define</tt> U_TITLECASE_NO_LOWERCASE</td><td class="">(moved from ucasemap.h)</td><td>Stable<br>
+<span class=""><span>ICU 3.8</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">filteredbrk.h</td><td class="proto"><tt>static</tt> FilteredBreakIteratorBuilder* icu::FilteredBreakIteratorBuilder::createInstance(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">stringoptions.h</td><td class="proto"><tt>#define</tt> U_TITLECASE_SENTENCES</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">filteredbrk.h</td><td class="proto"><tt>static</tt> FilteredBreakIteratorBuilder* icu::FilteredBreakIteratorBuilder::createInstance(const Locale&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">stringoptions.h</td><td class="proto"><tt>#define</tt> U_TITLECASE_WHOLE_STRING</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">fmtable.h</td><td class="proto">icu::Formattable::Formattable(StringPiece, UErrorCode&)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.4</span></span></td>
+<td class="file">stringoptions.h</td><td class="proto"><tt>#define</tt> UNORM_INPUT_IS_FCD</td><td class="">(moved from unorm2.h)</td><td>Stable<br>
+<span class=""><span>ICU 2.2</span></span></td>
 </tr>
+
 <tr class="row0">
-<td class="file">fmtable.h</td><td class="proto">void icu::Formattable::setDecimalNumber(StringPiece, UErrorCode&)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.4</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_CJK_UNIFIED_IDEOGRAPHS_EXTENSION_F</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row1">
-<td class="file">idna.h</td><td class="proto">void icu::IDNA::labelToASCII_UTF8(StringPiece, ByteSink&, IDNAInfo&, UErrorCode&)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.6</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_KANA_EXTENDED_A</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row0">
-<td class="file">idna.h</td><td class="proto">void icu::IDNA::labelToUnicodeUTF8(StringPiece, ByteSink&, IDNAInfo&, UErrorCode&)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.6</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_MASARAM_GONDI</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row1">
-<td class="file">idna.h</td><td class="proto">void icu::IDNA::nameToASCII_UTF8(StringPiece, ByteSink&, IDNAInfo&, UErrorCode&)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.6</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_NUSHU</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row0">
-<td class="file">idna.h</td><td class="proto">void icu::IDNA::nameToUnicodeUTF8(StringPiece, ByteSink&, IDNAInfo&, UErrorCode&)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.6</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_SOYOMBO</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row1">
-<td class="file">localpointer.h</td><td class="proto">icu::LocalArray< T >::LocalArray(T*, UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_SYRIAC_SUPPLEMENT</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row0">
-<td class="file">localpointer.h</td><td class="proto">void icu::LocalArray< T >::adoptInsteadAndCheckErrorCode(T*, UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_ZANABAZAR_SQUARE</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row1">
-<td class="file">localpointer.h</td><td class="proto">void icu::LocalArray< T >::swap(LocalArray< T >&) U_NOEXCEPT</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_BHA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row0">
-<td class="file">localpointer.h</td><td class="proto">void icu::LocalPointer< T >::swap(LocalPointer< T >&) U_NOEXCEPT</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_JA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createCentury(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_LLA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createCupMetric(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_LLLA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createGenericTemperature(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_NGA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createKnot(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_NNA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createLiterPer100Kilometers(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_NNNA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createMileScandinavian(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_NYA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPintMetric(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_RA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createRevolutionAngle(UErrorCode&)</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_SSA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row1">
-<td class="file">numfmt.h</td><td class="proto">UnicodeString& icu::NumberFormat::format(StringPiece, UnicodeString&, FieldPositionIterator*, UErrorCode&)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.4</span></span></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_MALAYALAM_TTA</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_ADLAM</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_EMOJI_COMPONENT</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_BHAIKSUKI</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_PREPENDED_CONCATENATION_MARK</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_CYRILLIC_EXTENDED_C</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_REGIONAL_INDICATOR</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_GLAGOLITIC_SUPPLEMENT</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_MASARAM_GONDI</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_SOYOMBO</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_MARCHEN</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_ZANABAZAR_SQUARE</td><td class="">(missing)</td><td>Stable<br>
+<span class=""><span>ICU 60</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_MONGOLIAN_SUPPLEMENT</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">utf_old.h</td><td class="proto"><tt>#define</tt> U_HIDE_OBSOLETE_UTF_OLD_H</td><td class="">(missing)</td><td>Deprecated<br>
+<span class=""><span>ICU 2.4</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_NEWA</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">utf16.h</td><td class="proto"><tt>#define</tt> U16_GET_OR_FFFD</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_OSAGE</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">utf16.h</td><td class="proto"><tt>#define</tt> U16_NEXT_OR_FFFD</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_TANGUT_COMPONENTS</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">utf16.h</td><td class="proto"><tt>#define</tt> U16_PREV_OR_FFFD</td><td class="">(missing)</td><td>Draft<br>
+<span class=""><span>ICU 60</span></span></td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_TANGUT</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">utf8.h</td><td class="proto"><tt>#define</tt> U8_IS_VALID_LEAD3_AND_T1</td><td class="">(missing)</td><td>Internal<br>
+</td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UGraphemeClusterBreak::U_GCB_E_BASE_GAZ</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">utf8.h</td><td class="proto"><tt>#define</tt> U8_IS_VALID_LEAD4_AND_T1</td><td class="">(missing)</td><td>Internal<br>
+</td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UGraphemeClusterBreak::U_GCB_E_BASE</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">utf8.h</td><td class="proto"><tt>#define</tt> U8_LEAD3_T1_BITS</td><td class="">(missing)</td><td>Internal<br>
+</td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UGraphemeClusterBreak::U_GCB_E_MODIFIER</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">utf8.h</td><td class="proto"><tt>#define</tt> U8_LEAD4_T1_BITS</td><td class="">(missing)</td><td>Internal<br>
+</td>
 </tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UGraphemeClusterBreak::U_GCB_GLUE_AFTER_ZWJ</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UGraphemeClusterBreak::U_GCB_ZWJ</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_AFRICAN_FEH</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_AFRICAN_NOON</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_AFRICAN_QAF</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_E_BASE</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_E_MODIFIER</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_ZWJ</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_E_BASE_GAZ</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_E_BASE</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_E_MODIFIER</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_GLUE_AFTER_ZWJ</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_ZWJ</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatBooleanAttribute::UDAT_PARSE_MULTIPLE_PATTERNS_FOR_MATCH</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
-</tr>
-<tr class="row0">
-<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatBooleanAttribute::UDAT_PARSE_PARTIAL_LITERAL_MATCH</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
-</tr>
-<tr class="row1">
-<td class="file">unistr.h</td><td class="proto"><tt>#define</tt> UNISTR_OBJECT_SIZE</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
-</tr>
-<tr class="row0">
-<td class="file">unistr.h</td><td class="proto"><tt>static</tt> UnicodeString icu::UnicodeString::fromUTF8(StringPiece)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.2</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">unistr.h</td><td class="proto">void icu::UnicodeString::swap(UnicodeString&) U_NOEXCEPT</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
-</tr>
-<tr class="row0">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatStyle::UNUM_CURRENCY_STANDARD</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
-</tr>
-<tr class="row1">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatStyle::UNUM_DECIMAL_COMPACT_LONG</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
-</tr>
-<tr class="row0">
-<td class="file">unum.h</td><td class="proto"><tt>enum</tt> UNumberFormatStyle::UNUM_DECIMAL_COMPACT_SHORT</td><td class="" colspan="2" align="center">Draft→Stable<br>ICU 56</td>
-</tr>
-<tr class="row1">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_ADLAM</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_BHAIKSUKI</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_HAN_WITH_BOPOMOFO</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_JAMO</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_MARCHEN</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_NEWA</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_OSAGE</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_SYMBOLS_EMOJI</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uspoof.h</td><td class="proto">int32_t uspoof_checkUTF8(const USpoofChecker*, const char*, int32_t, int32_t*, UErrorCode*)</td><td class="">Deprecated<br>ICU 51</td><td>Stable<br>
-<span class="verchange"><span>ICU 4.2</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
-</tr>
-<tr class="row0">
-<td class="file">uspoof.h</td><td class="proto">int32_t uspoof_checkUnicodeString(const USpoofChecker*, const icu::UnicodeString&, int32_t*, UErrorCode*)</td><td class="">Deprecated<br>ICU 51</td><td>Stable<br>
-<span class="verchange"><span>ICU 4.2</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
-</tr>
-<tr class="row1">
-<td class="file">utypes.h</td><td class="proto"><tt>#define</tt> NULL</td><td class="">Deprecated<br>ICU 54</td><td>Stable<br>
-<span class="verchange"><span>ICU 2.0</span>
-<br>
-<b class="bigwarn" title="A stable API changed version.">(changed)</b></span></td>
-</tr>
 </table>
 <P></P>
 <a href="#_top">(jump back to top)</a>
 <hr>
-<a name="added"></a>
-<h2>Added in ICU 58</h2>
+<a name="other"></a>
+<h2>Other existing drafts in ICU 60</h2>
+<div class="other">
 <table BORDER="1" class="genTable">
 <THEAD>
 <tr>
-<th>File</th><th>API</th><th>ICU 57</th><th>ICU 58</th>
+<th>File</th><th>API</th><th>ICU 59</th><th>ICU 60</th>
 </tr>
 </THEAD>
 <tr class="row1">
-<td class="file">bytestrie.h</td><td class="proto">StringPiece icu::BytesTrie::Iterator::getString()</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.8</span></span></td>
+<td class="file">casemap.h</td><td class="proto"><tt>static</tt> int32_t icu::CaseMap::fold(uint32_t, const char16_t*, int32_t, char16_t*, int32_t, Edits*, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row0">
-<td class="file">bytestriebuilder.h</td><td class="proto">BytesTrieBuilder& icu::BytesTrieBuilder::add(StringPiece, int32_t, UErrorCode&)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.8</span></span></td>
+<td class="file">casemap.h</td><td class="proto"><tt>static</tt> int32_t icu::CaseMap::toLower(const char*, uint32_t, const char16_t*, int32_t, char16_t*, int32_t, Edits*, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row1">
-<td class="file">compactdecimalformat.h</td><td class="proto">UnicodeString& icu::CompactDecimalFormat::format(StringPiece, UnicodeString&, FieldPositionIterator*, UErrorCode&)</td><td class="">(missing)</td><td>Internal<br>
-<span class=""><span></span></span></td>
+<td class="file">casemap.h</td><td class="proto"><tt>static</tt> int32_t icu::CaseMap::toTitle(const char*, uint32_t, BreakIterator*, const char16_t*, int32_t, char16_t*, int32_t, Edits*, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row0">
-<td class="file">decimfmt.h</td><td class="proto">UnicodeString& icu::DecimalFormat::format(StringPiece, UnicodeString&, FieldPositionIterator*, UErrorCode&)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.4</span></span></td>
+<td class="file">casemap.h</td><td class="proto"><tt>static</tt> int32_t icu::CaseMap::toUpper(const char*, uint32_t, const char16_t*, int32_t, char16_t*, int32_t, Edits*, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row1">
-<td class="file">fmtable.h</td><td class="proto">icu::Formattable::Formattable(StringPiece, UErrorCode&)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.4</span></span></td>
+<td class="file">casemap.h</td><td class="proto"><tt>static</tt> int32_t icu::CaseMap::utf8Fold(uint32_t, const char*, int32_t, char*, int32_t, Edits*, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row0">
-<td class="file">fmtable.h</td><td class="proto">void icu::Formattable::setDecimalNumber(StringPiece, UErrorCode&)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.4</span></span></td>
+<td class="file">casemap.h</td><td class="proto"><tt>static</tt> int32_t icu::CaseMap::utf8ToLower(const char*, uint32_t, const char*, int32_t, char*, int32_t, Edits*, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row1">
-<td class="file">idna.h</td><td class="proto">void icu::IDNA::labelToASCII_UTF8(StringPiece, ByteSink&, IDNAInfo&, UErrorCode&)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.6</span></span></td>
+<td class="file">casemap.h</td><td class="proto"><tt>static</tt> int32_t icu::CaseMap::utf8ToTitle(const char*, uint32_t, BreakIterator*, const char*, int32_t, char*, int32_t, Edits*, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row0">
-<td class="file">idna.h</td><td class="proto">void icu::IDNA::labelToUnicodeUTF8(StringPiece, ByteSink&, IDNAInfo&, UErrorCode&)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.6</span></span></td>
+<td class="file">casemap.h</td><td class="proto"><tt>static</tt> int32_t icu::CaseMap::utf8ToUpper(const char*, uint32_t, const char*, int32_t, char*, int32_t, Edits*, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row1">
-<td class="file">idna.h</td><td class="proto">void icu::IDNA::nameToASCII_UTF8(StringPiece, ByteSink&, IDNAInfo&, UErrorCode&)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.6</span></span></td>
+<td class="file">char16ptr.h</td><td class="proto">char16_t* icu::Char16Ptr::get()</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row0">
-<td class="file">idna.h</td><td class="proto">void icu::IDNA::nameToUnicodeUTF8(StringPiece, ByteSink&, IDNAInfo&, UErrorCode&)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.6</span></span></td>
+<td class="file">char16ptr.h</td><td class="proto">const char16_t* icu::ConstChar16Ptr::get()</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row1">
-<td class="file">measfmt.h</td><td class="proto">UnicodeString icu::MeasureFormat::getUnitDisplayName(const MeasureUnit&, UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
+<td class="file">char16ptr.h</td><td class="proto">icu::Char16Ptr::Char16Ptr(char16_t*)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createEast(UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
+<td class="file">char16ptr.h</td><td class="proto">icu::Char16Ptr::Char16Ptr(std::nullptr_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createNorth(UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
+<td class="file">char16ptr.h</td><td class="proto">icu::Char16Ptr::Char16Ptr(uint16_t*)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createSouth(UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
+<td class="file">char16ptr.h</td><td class="proto">icu::Char16Ptr::Char16Ptr(wchar_t*)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createWest(UErrorCode&)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
+<td class="file">char16ptr.h</td><td class="proto">icu::Char16Ptr::operator char16_t* ()</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row0">
-<td class="file">numfmt.h</td><td class="proto">UnicodeString& icu::NumberFormat::format(StringPiece, UnicodeString&, FieldPositionIterator*, UErrorCode&)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.4</span></span></td>
+<td class="file">char16ptr.h</td><td class="proto">icu::Char16Ptr::~Char16Ptr()</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row1">
-<td class="file">tznames.h</td><td class="proto">void icu::TimeZoneNames::getDisplayNames(const UnicodeString&, const UTimeZoneNameType types[], int32_t, UDate, UnicodeString dest[], UErrorCode&)</td><td class="">(missing)</td><td>Internal<br>
-<span class=""><span></span></span></td>
+<td class="file">char16ptr.h</td><td class="proto">icu::ConstChar16Ptr::ConstChar16Ptr(const char16_t*)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row0">
-<td class="file">tznames.h</td><td class="proto">void icu::TimeZoneNames::loadAllDisplayNames(UErrorCode&)</td><td class="">(missing)</td><td>Internal<br>
-<span class=""><span></span></span></td>
+<td class="file">char16ptr.h</td><td class="proto">icu::ConstChar16Ptr::ConstChar16Ptr(const std::nullptr_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row1">
-<td class="file">ubiditransform.h</td><td class="proto">UBiDiTransform* ubiditransform_open(UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
+<td class="file">char16ptr.h</td><td class="proto">icu::ConstChar16Ptr::ConstChar16Ptr(const uint16_t*)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row0">
-<td class="file">ubiditransform.h</td><td class="proto"><tt>enum</tt> UBiDiMirroring::UBIDI_MIRRORING_OFF</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
+<td class="file">char16ptr.h</td><td class="proto">icu::ConstChar16Ptr::ConstChar16Ptr(const wchar_t*)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row1">
-<td class="file">ubiditransform.h</td><td class="proto"><tt>enum</tt> UBiDiMirroring::UBIDI_MIRRORING_ON</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
+<td class="file">char16ptr.h</td><td class="proto">icu::ConstChar16Ptr::operator const char16_t* ()</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row0">
-<td class="file">ubiditransform.h</td><td class="proto"><tt>enum</tt> UBiDiOrder::UBIDI_LOGICAL</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
+<td class="file">char16ptr.h</td><td class="proto">icu::ConstChar16Ptr::~ConstChar16Ptr()</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row1">
-<td class="file">ubiditransform.h</td><td class="proto"><tt>enum</tt> UBiDiOrder::UBIDI_VISUAL</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
+<td class="file">edits.h</td><td class="proto">Iterator icu::Edits::getCoarseChangesIterator()</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row0">
-<td class="file">ubiditransform.h</td><td class="proto">uint32_t ubiditransform_transform(UBiDiTransform*, const UChar*, int32_t, UChar*, int32_t, UBiDiLevel, UBiDiOrder, UBiDiLevel, UBiDiOrder, UBiDiMirroring, uint32_t, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
+<td class="file">edits.h</td><td class="proto">Iterator icu::Edits::getCoarseIterator()</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row1">
-<td class="file">ubiditransform.h</td><td class="proto">void ubiditransform_close(UBiDiTransform*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
+<td class="file">edits.h</td><td class="proto">Iterator icu::Edits::getFineChangesIterator()</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_ADLAM</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">edits.h</td><td class="proto">Iterator icu::Edits::getFineIterator()</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_BHAIKSUKI</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">edits.h</td><td class="proto">UBool icu::Edits::copyErrorTo(UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_CYRILLIC_EXTENDED_C</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">edits.h</td><td class="proto">UBool icu::Edits::hasChanges()</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_GLAGOLITIC_SUPPLEMENT</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">edits.h</td><td class="proto">icu::Edits::Edits()</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">edits.h</td><td class="proto">icu::Edits::~Edits()</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_MARCHEN</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">edits.h</td><td class="proto">int32_t icu::Edits::lengthDelta()</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_MONGOLIAN_SUPPLEMENT</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">edits.h</td><td class="proto">void icu::Edits::addReplace(int32_t, int32_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_NEWA</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">edits.h</td><td class="proto">void icu::Edits::addUnchanged(int32_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_OSAGE</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">edits.h</td><td class="proto">void icu::Edits::reset()</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_TANGUT_COMPONENTS</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">localpointer.h</td><td class="proto">LocalArray<T>& icu::LocalArray< T >::moveFrom(LocalArray< T >&)</td><td class="" colspan="2" align="center">Draft<br>ICU 56</td>
 </tr>
 <tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UBlockCode::UBLOCK_TANGUT</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
+<td class="file">localpointer.h</td><td class="proto">LocalPointer<T>& icu::LocalPointer< T >::moveFrom(LocalPointer< T >&)</td><td class="" colspan="2" align="center">Draft<br>ICU 56</td>
 </tr>
 <tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UGraphemeClusterBreak::U_GCB_E_BASE_GAZ</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UGraphemeClusterBreak::U_GCB_E_BASE</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UGraphemeClusterBreak::U_GCB_E_MODIFIER</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UGraphemeClusterBreak::U_GCB_GLUE_AFTER_ZWJ</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UGraphemeClusterBreak::U_GCB_ZWJ</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_AFRICAN_FEH</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_AFRICAN_NOON</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UJoiningGroup::U_JG_AFRICAN_QAF</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_E_BASE</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_E_MODIFIER</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> ULineBreak::U_LB_ZWJ</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_E_BASE_GAZ</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_E_BASE</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_E_MODIFIER</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_GLUE_AFTER_ZWJ</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UWordBreakValues::U_WB_ZWJ</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">udisplaycontext.h</td><td class="proto"><tt>enum</tt> UDisplayContext::UDISPCTX_NO_SUBSTITUTE</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">udisplaycontext.h</td><td class="proto"><tt>enum</tt> UDisplayContext::UDISPCTX_SUBSTITUTE</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">udisplaycontext.h</td><td class="proto"><tt>enum</tt> UDisplayContextType::UDISPCTX_TYPE_SUBSTITUTE_HANDLING</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">unistr.h</td><td class="proto"><tt>static</tt> UnicodeString icu::UnicodeString::fromUTF8(StringPiece)</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 4.2</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_ADLAM</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_BHAIKSUKI</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_HAN_WITH_BOPOMOFO</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_JAMO</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_MARCHEN</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_NEWA</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_OSAGE</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row0">
-<td class="file">uscript.h</td><td class="proto"><tt>enum</tt> UScriptCode::USCRIPT_SYMBOLS_EMOJI</td><td class="">(missing)</td><td>Stable<br>
-<span class=""><span>ICU 58</span></span></td><td class="bornstable"><b class="bigwarn" title="A new API was introduced as stable in $rightVer.">(Born Stable)</b></td>
-</tr>
-<tr class="row1">
-<td class="file">uspoof.h</td><td class="proto">URestrictionLevel uspoof_getCheckResultRestrictionLevel(const USpoofCheckResult*, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">uspoof.h</td><td class="proto">USpoofCheckResult* uspoof_openCheckResult(UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">uspoof.h</td><td class="proto">U_DEFINE_LOCAL_OPEN_POINTER(LocalUSpoofCheckResultPointer,,)</td><td class="">(missing)</td><td>
-<br>
-<span class=""><span></span>
-<br>
-<b class="bigwarn" title="A new API was introduced that was not tagged.">(untagged)</b></span></td>
-</tr>
-<tr class="row0">
-<td class="file">uspoof.h</td><td class="proto">U_NAMESPACE_END int32_t uspoof_getCheckResultChecks(const USpoofCheckResult*, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">uspoof.h</td><td class="proto">const USet* uspoof_getCheckResultNumerics(const USpoofCheckResult*, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">uspoof.h</td><td class="proto"><tt>enum</tt> URestrictionLevel::USPOOF_UNDEFINED_RESTRICTIVE</td><td class="">(missing)</td><td>Internal<br>
-<span class=""><span></span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">uspoof.h</td><td class="proto"><tt>enum</tt> USpoofChecks::USPOOF_CONFUSABLE</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">uspoof.h</td><td class="proto">int32_t uspoof_check2(const USpoofChecker*, const UChar*, int32_t, USpoofCheckResult*, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">uspoof.h</td><td class="proto">int32_t uspoof_check2UTF8(const USpoofChecker*, const char*, int32_t, USpoofCheckResult*, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
-</tr>
-<tr class="row0">
-<td class="file">uspoof.h</td><td class="proto">int32_t uspoof_check2UnicodeString(const USpoofChecker*, const icu::UnicodeString&, USpoofCheckResult*, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
-</tr>
-<tr class="row1">
-<td class="file">uspoof.h</td><td class="proto">void uspoof_closeCheckResult(USpoofCheckResult*)</td><td class="">(missing)</td><td>Draft<br>
-<span class=""><span>ICU 58</span></span></td>
-</tr>
-</table>
-<P></P>
-<a href="#_top">(jump back to top)</a>
-<hr>
-<a name="other"></a>
-<h2>Other existing drafts in ICU 58</h2>
-<div class="other">
-<table BORDER="1" class="genTable">
-<THEAD>
-<tr>
-<th>File</th><th>API</th><th>ICU 57</th><th>ICU 58</th>
-</tr>
-</THEAD>
-<tr class="row1">
-<td class="file">localpointer.h</td><td class="proto">LocalArray<T>& icu::LocalArray< T >::moveFrom(LocalArray< T >&) U_NOEXCEPT</td><td class="" colspan="2" align="center">Draft<br>ICU 56</td>
-</tr>
-<tr class="row0">
-<td class="file">localpointer.h</td><td class="proto">LocalPointer<T>& icu::LocalPointer< T >::moveFrom(LocalPointer< T >&) U_NOEXCEPT</td><td class="" colspan="2" align="center">Draft<br>ICU 56</td>
-</tr>
-<tr class="row1">
 <td class="file">measfmt.h</td><td class="proto">void icu::MeasureFormat::parseObject(const UnicodeString&, Formattable&, ParsePosition&)</td><td class="" colspan="2" align="center">Draft<br>ICU 53</td>
 </tr>
 <tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createGallonImperial(UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
+<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPoint(UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createMilePerGallonImperial(UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
+<td class="file">ubrk.h</td><td class="proto">UBreakIterator* ubrk_openBinaryRules(const uint8_t*, int32_t, const UChar*, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createMilligramPerDeciliter(UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
+<td class="file">ubrk.h</td><td class="proto">int32_t ubrk_getBinaryRules(UBreakIterator*, uint8_t*, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row1">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createMillimolePerLiter(UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
+<td class="file">unistr.h</td><td class="proto">UNISTR_FROM_STRING_EXPLICIT icu::UnicodeString::UnicodeString(const uint16_t*)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row0">
-<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPartPerMillion(UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
+<td class="file">unistr.h</td><td class="proto">UNISTR_FROM_STRING_EXPLICIT icu::UnicodeString::UnicodeString(const wchar_t*)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row1">
-<td class="file">reldatefmt.h</td><td class="proto">UnicodeString& icu::RelativeDateTimeFormatter::format(double, URelativeDateTimeUnit, UnicodeString&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
+<td class="file">unistr.h</td><td class="proto">UnicodeString& icu::UnicodeString::moveFrom(UnicodeString&)</td><td class="" colspan="2" align="center">Draft<br>ICU 56</td>
 </tr>
 <tr class="row0">
-<td class="file">reldatefmt.h</td><td class="proto">UnicodeString& icu::RelativeDateTimeFormatter::formatNumeric(double, URelativeDateTimeUnit, UnicodeString&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
+<td class="file">unistr.h</td><td class="proto">icu::UnicodeString::UnicodeString(const std::nullptr_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row1">
-<td class="file">simpleformatter.h</td><td class="proto">SimpleFormatter& icu::SimpleFormatter::operator=(const SimpleFormatter&)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
+<td class="file">unistr.h</td><td class="proto">icu::UnicodeString::UnicodeString(const std::nullptr_t, int32_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row0">
-<td class="file">simpleformatter.h</td><td class="proto">UBool icu::SimpleFormatter::applyPattern(const UnicodeString&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
+<td class="file">unistr.h</td><td class="proto">icu::UnicodeString::UnicodeString(const uint16_t*, int32_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row1">
-<td class="file">simpleformatter.h</td><td class="proto">UBool icu::SimpleFormatter::applyPatternMinMaxArguments(const UnicodeString&, int32_t, int32_t, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
+<td class="file">unistr.h</td><td class="proto">icu::UnicodeString::UnicodeString(const wchar_t*, int32_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row0">
-<td class="file">simpleformatter.h</td><td class="proto">UnicodeString icu::SimpleFormatter::getTextWithNoArguments()</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
+<td class="file">unistr.h</td><td class="proto">icu::UnicodeString::UnicodeString(std::nullptr_t, int32_t, int32_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row1">
-<td class="file">simpleformatter.h</td><td class="proto">UnicodeString& icu::SimpleFormatter::format(const UnicodeString&, UnicodeString&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
+<td class="file">unistr.h</td><td class="proto">icu::UnicodeString::UnicodeString(uint16_t*, int32_t, int32_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row0">
-<td class="file">simpleformatter.h</td><td class="proto">UnicodeString& icu::SimpleFormatter::format(const UnicodeString&, const UnicodeString&, UnicodeString&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
+<td class="file">unistr.h</td><td class="proto">icu::UnicodeString::UnicodeString(wchar_t*, int32_t, int32_t)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row1">
-<td class="file">simpleformatter.h</td><td class="proto">UnicodeString& icu::SimpleFormatter::format(const UnicodeString&, const UnicodeString&, const UnicodeString&, UnicodeString&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
+<td class="file">unum.h</td><td class="proto">int32_t unum_formatDoubleForFields(const UNumberFormat*, double, UChar*, int32_t, UFieldPositionIterator*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row0">
-<td class="file">simpleformatter.h</td><td class="proto">UnicodeString& icu::SimpleFormatter::formatAndAppend(const UnicodeString* const*, int32_t, UnicodeString&, int32_t*, int32_t, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
+<td class="file">upluralrules.h</td><td class="proto">UEnumeration* uplrules_getKeywords(const UPluralRules*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 59</td>
 </tr>
 <tr class="row1">
-<td class="file">simpleformatter.h</td><td class="proto">UnicodeString& icu::SimpleFormatter::formatAndReplace(const UnicodeString* const*, int32_t, UnicodeString&, int32_t*, int32_t, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row0">
-<td class="file">simpleformatter.h</td><td class="proto">icu::SimpleFormatter::SimpleFormatter()</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row1">
-<td class="file">simpleformatter.h</td><td class="proto">icu::SimpleFormatter::SimpleFormatter(const SimpleFormatter&)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row0">
-<td class="file">simpleformatter.h</td><td class="proto">icu::SimpleFormatter::SimpleFormatter(const UnicodeString&, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row1">
-<td class="file">simpleformatter.h</td><td class="proto">icu::SimpleFormatter::SimpleFormatter(const UnicodeString&, int32_t, int32_t, UErrorCode&)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row0">
-<td class="file">simpleformatter.h</td><td class="proto">icu::SimpleFormatter::~SimpleFormatter()</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row1">
-<td class="file">simpleformatter.h</td><td class="proto">int32_t icu::SimpleFormatter::getArgumentLimit()</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_EMOJI_MODIFIER_BASE</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_EMOJI_MODIFIER</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row0">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_EMOJI_PRESENTATION</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row1">
-<td class="file">uchar.h</td><td class="proto"><tt>enum</tt> UProperty::UCHAR_EMOJI</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row0">
-<td class="file">udat.h</td><td class="proto"><tt>enum</tt> UDateFormatField::UDAT_AM_PM_MIDNIGHT_NOON_FIELD</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row1">
-<td class="file">unistr.h</td><td class="proto">UnicodeString& icu::UnicodeString::moveFrom(UnicodeString&) U_NOEXCEPT</td><td class="" colspan="2" align="center">Draft<br>ICU 56</td>
-</tr>
-<tr class="row0">
 <td class="file">uregex.h</td><td class="proto"><tt>enum</tt> URegexpFlag::UREGEX_CANON_EQ</td><td class="" colspan="2" align="center">Draft<br>ICU 2.4</td>
 </tr>
-<tr class="row1">
-<td class="file">ureldatefmt.h</td><td class="proto">URelativeDateTimeFormatter* ureldatefmt_open(const char*, UNumberFormat*, UDateRelativeDateTimeFormatterStyle, UDisplayContext, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row0">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> URelativeDateTimeUnit::UDAT_REL_UNIT_DAY</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row1">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> URelativeDateTimeUnit::UDAT_REL_UNIT_FRIDAY</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row0">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> URelativeDateTimeUnit::UDAT_REL_UNIT_HOUR</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row1">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> URelativeDateTimeUnit::UDAT_REL_UNIT_MINUTE</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row0">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> URelativeDateTimeUnit::UDAT_REL_UNIT_MONDAY</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row1">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> URelativeDateTimeUnit::UDAT_REL_UNIT_MONTH</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row0">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> URelativeDateTimeUnit::UDAT_REL_UNIT_QUARTER</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row1">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> URelativeDateTimeUnit::UDAT_REL_UNIT_SATURDAY</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row0">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> URelativeDateTimeUnit::UDAT_REL_UNIT_SECOND</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row1">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> URelativeDateTimeUnit::UDAT_REL_UNIT_SUNDAY</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row0">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> URelativeDateTimeUnit::UDAT_REL_UNIT_THURSDAY</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row1">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> URelativeDateTimeUnit::UDAT_REL_UNIT_TUESDAY</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row0">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> URelativeDateTimeUnit::UDAT_REL_UNIT_WEDNESDAY</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row1">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> URelativeDateTimeUnit::UDAT_REL_UNIT_WEEK</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row0">
-<td class="file">ureldatefmt.h</td><td class="proto"><tt>enum</tt> URelativeDateTimeUnit::UDAT_REL_UNIT_YEAR</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row1">
-<td class="file">ureldatefmt.h</td><td class="proto">int32_t ureldatefmt_combineDateAndTime(const URelativeDateTimeFormatter*, const UChar*, int32_t, const UChar*, int32_t, UChar*, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row0">
-<td class="file">ureldatefmt.h</td><td class="proto">int32_t ureldatefmt_format(const URelativeDateTimeFormatter*, double, URelativeDateTimeUnit, UChar*, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row1">
-<td class="file">ureldatefmt.h</td><td class="proto">int32_t ureldatefmt_formatNumeric(const URelativeDateTimeFormatter*, double, URelativeDateTimeUnit, UChar*, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
-<tr class="row0">
-<td class="file">ureldatefmt.h</td><td class="proto">void ureldatefmt_close(URelativeDateTimeFormatter*)</td><td class="" colspan="2" align="center">Draft<br>ICU 57</td>
-</tr>
 </table>
 </div>
 <P></P>
@@ -3191,13 +1335,12 @@
 <i>This section shows cases where the signature was "simplified" for the sake of comparison. The simplified form is in bold, followed by
     	all possible variations in "original" form.</i>
 <div class="other">
-<ul></ul>
 </div>
 <P></P>
 <a href="#_top">(jump back to top)</a>
 <hr>
 <p>
-<i><font size="-1">Contents generated by StableAPI tool on Thu Sep 22 11:14:21 PDT 2016<br>Copyright (C) 2016, International Business Machines Corporation, All Rights Reserved.</font></i>
+<i><font size="-1">Contents generated by StableAPI tool on Wed Oct 04 23:55:39 UTC 2017<br>Copyright (C) 2017, International Business Machines Corporation, All Rights Reserved.</font></i>
 </p>
 </body>
 </html>

Modified: trunk/Build/source/libs/icu/icu-src/LICENSE
===================================================================
--- trunk/Build/source/libs/icu/icu-src/LICENSE	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/LICENSE	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,6 +1,6 @@
 COPYRIGHT AND PERMISSION NOTICE (ICU 58 and later)
 
-Copyright © 1991-2016 Unicode, Inc. All rights reserved.
+Copyright © 1991-2017 Unicode, Inc. All rights reserved.
 Distributed under the Terms of Use in http://www.unicode.org/copyright.html
 
 Permission is hereby granted, free of charge, to any person obtaining
@@ -131,7 +131,7 @@
  #  ---------COPYING.libtabe ---- BEGIN--------------------
  #
  #  /*
- #   * Copyrighy (c) 1999 TaBE Project.
+ #   * Copyright (c) 1999 TaBE Project.
  #   * Copyright (c) 1999 Pai-Hsiang Hsiao.
  #   * All rights reserved.
  #   *

Modified: trunk/Build/source/libs/icu/icu-src/license.html
===================================================================
--- trunk/Build/source/libs/icu/icu-src/license.html	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/license.html	2018-01-12 18:35:28 UTC (rev 46290)
@@ -11,8 +11,8 @@
     The ICU license is now in plain text format, see <a href="./LICENSE">LICENSE</a>.
 Update links and software appropriately.
   </p>
-  <i>Copyright (C) 2016 and later: Unicode, Inc. and others. License & terms of use: http://www.unicode.org/copyright.html</i> 
-  <i>Copyright (c) 1995-2016 International Business Machines Corporation and others</i>
+  <i>© 2016 and later: Unicode, Inc. and others. License & terms of use: http://www.unicode.org/copyright.html</i> 
+  <i>© 1995-2016 International Business Machines Corporation and others</i>
 
 </body>
 </html>

Modified: trunk/Build/source/libs/icu/icu-src/readme.html
===================================================================
--- trunk/Build/source/libs/icu/icu-src/readme.html	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/readme.html	2018-01-12 18:35:28 UTC (rev 46290)
@@ -3,7 +3,7 @@
 
 <html lang="en-US" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
   <head>
-    <title>ReadMe for ICU 58.2</title>
+    <title>ReadMe for ICU 60.2</title>
     <meta name="COPYRIGHT" content=
     "Copyright (C) 2016 and later: Unicode, Inc. and others. License & terms of use: http://www.unicode.org/copyright.html"/>
     <!-- meta name="COPYRIGHT" content=
@@ -32,7 +32,7 @@
       International Components for Unicode<br/>
       <span class="only-rc">Release Candidate</span>
       <span class="only-milestone">(Milestone Release)</span>
-      <abbr title="International Components for Unicode">ICU</abbr> 58.2 ReadMe
+      <abbr title="International Components for Unicode">ICU</abbr> 60.2 ReadMe
     </h1>
 
     <!-- Shouldn't need to comment/uncomment this paragraph, just change the body class -->
@@ -44,12 +44,15 @@
     <p class="note only-rc">This is a release candidate version of ICU4C.
       It is not recommended for production use.</p>
 
-    <p>Last updated: 2016-Dec-8<br/>
+    <p>Last updated: 2017-Dec-07<br/>
       Copyright © 2016 and later: Unicode, Inc. and others. License & terms of use:
       <a href="http://www.unicode.org/copyright.html">http://www.unicode.org/copyright.html</a><br/>
       Copyright © 1997-2016 International Business Machines Corporation and others.
       All Rights Reserved.</p>
     <!-- Remember that there is a copyright at the end too -->
+
+    <p class="note">This is a maintenance update of ICU 60,
+      with a small number of bug fixes but no API changes.</p>
     <hr/>
 
     <h2 class="TOC">Table of Contents</h2>
@@ -59,10 +62,8 @@
 
       <li><a href="#GettingStarted">Getting Started</a></li>
 
-      <li><a href="#News">What Is New In This release?</a></li>
+      <li><a href="#News">What Is New In This Release?</a></li>
 
-      <li><a href="#RecentPreviousChanges">Changes in recent previous releases</a></li>
-
       <li><a href="#Download">How To Download the Source Code</a></li>
 
       <li><a href="#SourceCode">ICU Source Code Organization</a></li>
@@ -230,149 +231,25 @@
     </table>
 
     <p><strong>Important:</strong> Please make sure you understand the <a href=
-    "http://source.icu-project.org/repos/icu/icu/trunk/LICENSE">Copyright and License Information</a>.</p>
+    "http://source.icu-project.org/repos/icu/trunk/icu4c/LICENSE">Copyright and License Information</a>.</p>
 
-    <h2><a name="News" href="#News" id="News">What is new in this
-    release?</a></h2>
 
-    <h3>New License</h3>
-    <p>This is the first release of ICU since the project
-    	<a href="http://blog.unicode.org/2016/05/icu-joins-unicode-consortium.html">joined
-    	the Unicode Consortium</a>. The license has changed to the
-    	<a href="http://www.unicode.org/copyright.html#License">Unicode license</a>
-    	(which is similar to the ICU 1.8.1-57 license).</p>
+    <h2><a name="News" href="#News" id="News">What Is New In This Release?</a></h2>
 
-    <h3>Layout Engine Removed</h3>
-    <p>The LayoutEngine was deprecated in ICU 54 and has now been removed.
-    see <a href='http://userguide.icu-project.org/layoutengine'>the
-    User's Guide</a> for more details and migration recommendations.
-    </p>
-    <p>
-      Note that the ParagraphLayout (layoutex) library is not deprecated.
-      There is a new option, <tt>--enable-layoutex</tt> which will build
-      the ParagraphLayout library using <a href="http://harfbuzz.org">HarfBuzz</a>
-      instead of ICU as the layout engine. See <a href="http://userguide.icu-project.org/layoutengine">
-        the users' guide</a> for more information about how to build.
-    </p>
-    <p>
-      The options <tt>--disable-layout</tt>
-      or <tt>--with-layout=false</tt> are being retained for
-      compatibility, but have no effect.
-    </p>
+    <p>See the <a href="http://site.icu-project.org/download/60">ICU 60 download page</a>
+    for an overview of this release, important changes, new features, bug fixes, known issues,
+    changes to supported platforms and build environments,
+    and migration issues for existing applications migrating from previous ICU releases.</p>
 
-    <h3>Changes in CLDR 30 data</h3>
-    <ul>
-    	<li>For some combinations of numbering system (arab, arabext, latn) and/or locale
-    		(ar, fa, he), there were changes to the bidirectional control characters used
-    		with certain symbols (percent, minus, plus), and changes to number patterns
-    		(currency and/or percent, including addition of bidirectional control
-    		characters in some cases).</li>
-    	<li>The bidirectional controls used for such purposes now include U+061C ARABIC
-    		LETTER MARK (ALM), which requires use of the bidirectional algorithm from
-    		Unicode 6.3 or later.</li>
-    	<li>The time separator for Norwegian locales (nb, nn) was changed to be ‘:’
-    		throughout.</li>
-    	<li>For more information on CLDR 30 changes, see
-    		<a href="http://cldr.unicode.org/index/downloads/cldr-30">CLDR 30 download
-    		page</a>.</li>
-    </ul>
+    <p>See the <a href="APIChangeReport.html">API Change Report</a> for a complete list of
+    APIs added, removed, or changed in this release.</p>
 
-    <h3>Windows build changes</h3>
-    <p>Windows builds using Visual Studio now require Visual Studio 2015; otherwise you can
-    	use cygwin or similar to build for Windows.</p>
+    <p><a name="RecentPreviousChanges" id="RecentPreviousChanges"></a>For
+    changes in previous releases, see the
+    main <a href="http://site.icu-project.org/download">ICU download page</a>
+    with its version-specific subpages.</p>
 
-    <h3>API Changes</h3>
-    <p>See the <a href="APIChangeReport.html">API Change Report</a> for a complete
-      list of APIs added, removed, or changed in this release.</p>
 
-    <!-- standing item -->
-    <h3>Full release notes and the latest updates</h3>
-    <p>The previous list concentrates on <em>changes that affect existing
-    applications migrating from previous ICU releases</em>.
-    For more news about this release, as well as late-breaking news, see the
-    <a href="http://site.icu-project.org/download/57">ICU download page</a>.</p>
-
-    <h3>Upcoming changes</h3>
-    <p>Please note the following changes planned for an upcoming ICU4C release (likely ICU 59):</p>
-    <ul>
-    	<li>Compiler support for C++11 will be required.</li>
-    	<li>Support for Windows XP will be removed.</li>
-    </ul>
-
-    <h2><a name="RecentPreviousChanges" href="#RecentPreviousChanges" id="RecentPreviousChanges">Changes in recent
-    previous releases</a></h2>
-
-    <!-- ICU 57 items -->
-    <h3>ICU 57: Changes related to new CLDR data and specifications</h3>
-    <ul>
-    	<li>Time formats may include the new day period characters b, B, and
-    	these may produced in response to the new skeleton character C used
-    	with DateTimePatternGenerator.</li>
-    	<li>In day period rules, the use of "after" has been deprecated.</li>
-    	<li>The measurement unit "proportion-karat" has been renamed to
-    	"concentr-karat".</li>
-    </ul>
-
-    <!-- ICU 56 items -->
-    <h3>ICU 56: COLON withdrawn as date/time pattern character</h3>
-    <p>In ICU 55, COLON was introduced as a date/time pattern character
-      to be replaced by the value of the timeSeparator for the number
-      system being used; a corresponding new UDateFormatField
-      UDAT_TIME_SEPARATOR_FIELD was added. Use of COLON caused some
-      backwards compatibility problems, so it is being withdrawn as a
-      pattern character. However, UDAT_TIME_SEPARATOR_FIELD remains
-      as does the mechanism for replacing a pattern character with the
-      value of the timeSeparator; a new pattern character may be
-      assigned in the future.</p>
-
-    <h3>ICU 56: ICU Plugins are disabled by default</h3>
-    <p>ICU Plugins are now disabled by default. They may be enabled
-      with the configure option
-      <tt>--enable-plugins</tt> or by means of
-      <tt>#define UCONFIG_ENABLE_PLUGINS</tt>.
-	</p>
-
-    <h3>ICU 55: Deprecations in PluralRules (plurrule.h)</h3>
-    <p>The following PluralRules methods never had an implementation
-      but were inadvertently marked @stable; they have now been
-      deprecated. [#<a href="http://bugs.icu-project.org/trac/ticket/10759">10759</a>]</p>
-    <ul>
-      <li><tt>double icu::PluralRules::getUniqueKeywordValue(const UnicodeString&)</tt></li>
-      <li><tt>int32_t icu::PluralRules::getAllKeywordValues(const UnicodeString&, double*, int32_t, UErrorCode&)</tt></li>
-    </ul>
-
-    <h3>ICU 55: Deprecate uidna.h functions for IDNA2003 support</h3>
-    <p>The IDNA2003 API has been deprecated; use the API for IDNA2008 / UTS #46 instead via
-      uidna_openUTS46() or class IDNA [#<a href="http://bugs.icu-project.org/trac/ticket/8477">8477</a>].
-      This applies to the following:</p>
-    <ul>
-      <li><tt>enum  value UIDNA_ALLOW_UNASSIGNED</tt></li>
-      <li><tt>uidna_IDNToASCII</tt></li>
-      <li><tt>uidna_IDNToUnicode</tt></li>
-      <li><tt>uidna_compare</tt></li>
-      <li><tt>uidna_toASCII</tt></li>
-      <li><tt>uidna_toUnicode</tt></li>
-    </ul>
-
-    <h3>ICU 54: Deprecation of Collation Short Strings</h3>
-    <p>The collation short naming scheme and its API functions are deprecated.
-    Use ucol_open() with language tag collation keywords instead (see <a href="http://userguide.icu-project.org/collation/api">Collation API Details</a>). For example, <code>ucol_open("de-u-co-phonebk-ka-shifted", &errorCode)</code>
-     for German Phonebook order with "ignore punctuation" mode.</p>
-
-    <h3>ICU 54: Deprecation of UCOL_TAILORINGS_VERSION</h3>
-    <p>This was originally intended to be the version of collation tailorings,
-    but that information is actually in the tailorings data and this
-    constant has always been (and now will continue to be) 1.</p>
-
-    <!-- ICU 53 items -->
-    <h3>ICU 53: Deprecation of TimeUnitFormat</h3>
-    <p>The TimeUnitFormat and its methods were actually deprecated in ICU 53 and the
-    class as a whole was tagged as deprecated in that release, but the status tags for
-    the individual methods did not correctly indicate the deprecated status; they
-    do as of ICU 54. Use the MeasureFormat class and its methods instead.</p>
-
-    <!-- end of What's New items -->
-
     <h2><a name="Download" href="#Download" id="Download">How To Download the
     Source Code</a></h2>
 
@@ -505,13 +382,32 @@
             <li><b>brkitr/</b> Data files for character, word, sentence, title
             casing and line boundary analysis.</li>
 
+            <li><b>coll/</b> Data for collation tailorings. The makefile
+            <b>colfiles.mk</b> contains the list of resource bundle files.</li>
+
             <li><b>locales/</b> These .txt files contain ICU language and
             culture-specific localization data. Two special bundles are
             <b>root</b>, which is the fallback data and parent of other bundles,
             and <b>index</b>, which contains a list of installed bundles. The
             makefile <b>resfiles.mk</b> contains the list of resource bundle
-            files.</li>
+            files. Some of the locale data is split out into the type-specific
+            directories curr, lang, region, unit, and zone, described below.</li>
 
+            <li><b>curr/</b> Locale data for currency symbols and names (including
+            plural forms), with its own makefile <b>resfiles.mk</b>.</li>
+
+            <li><b>lang/</b> Locale data for names of languages, scripts, and locale
+            key names and values, with its own makefile <b>resfiles.mk</b>.</li>
+
+            <li><b>region/</b> Locale data for names of regions, with its own
+            makefile <b>resfiles.mk</b>.</li>
+
+            <li><b>unit/</b> Locale data for measurement unit patterns and names, 
+            with its own makefile <b>resfiles.mk</b>.</li>
+
+            <li><b>zone/</b> Locale data for time zone names, with its own
+            makefile <b>resfiles.mk</b>.</li>
+
             <li><b>mappings/</b> Here are the code page converter tables. These
             .ucm files contain mappings to and from Unicode. These are compiled
             into .cnv files. <b>convrtrs.txt</b> is the alias mapping table from
@@ -532,9 +428,9 @@
             information.</li>
 
             <li><b>misc/</b> The misc directory contains other data files which
-            did not fit into the above categories. Currently it only contains
-            time zone information, and a name preperation file for <a href=
-            "http://www.ietf.org/rfc/rfc3490.txt">IDNA</a>.</li>
+            did not fit into the above categories, including time zone
+            information, region-specific data, and other data derived from CLDR
+            supplemental data.</li>
 
             <li><b>out/</b> This directory contains the assembled memory mapped
             files.</li>
@@ -690,7 +586,7 @@
         we recommend hardcoding ICU's default charset to UTF-8.
         This means that some implementation code becomes simpler and faster,
         and statically linked ICU libraries become smaller.
-        (See the <a href="http://icu-project.org/apiref/icu4c/utypes_8h.html#0a33e1edf3cd23d9e9c972b63c9f7943">U_CHARSET_IS_UTF8</a>
+        (See the <a href="http://icu-project.org/apiref/icu4c/platform_8h.html#a0a33e1edf3cd23d9e9c972b63c9f7943">U_CHARSET_IS_UTF8</a>
         API documentation for more details.)<br />
         You can <code>-DU_CHARSET_IS_UTF8=1</code> or
         modify unicode/utypes.h (in ICU 4.8 and below)
@@ -737,6 +633,14 @@
         (via -D or uconfig.h, as above)
         and include those header files explicitly that you actually need.<br />
         Note: The ICU test suites cannot be compiled with this setting.</li>
+      <li><b>utf_old.h:</b>
+        All of utf_old.h is deprecated or obsolete.<br />
+        Beginning with ICU 60,
+        you should define <code>U_HIDE_OBSOLETE_UTF_OLD_H</code> to 1
+        (via -D or uconfig.h, as above).
+        Use of any of these macros should be replaced as noted
+        in the comments for the obsolete macro.<br />
+        Note: The ICU test suites <i>can</i> be compiled with this setting.</li>
       <li><b>.dat file:</b> By default, the ICU data is built into
         a shared library (DLL). This is convenient because it requires no
         install-time or runtime configuration,
@@ -779,7 +683,7 @@
         source file tree clean and have build output files written to
         a different location. This is called an "out-of-source build".
         Simply invoke the configure script from the target location:
-<pre>~/icu$ svn export http://source.icu-project.org/repos/icu/icu/trunk
+<pre>~/icu$ svn export http://source.icu-project.org/repos/icu/trunk/icu4c
 ~/icu$ mkdir trunk-dev
 ~/icu$ cd trunk-dev
 ~/icu/trunk-dev$ ../trunk/source/runConfigureICU Linux
@@ -851,7 +755,9 @@
     <ul>
       <li>Microsoft Windows</li>
 
-      <li>Microsoft Visual C++ (see the ICU download page for the currently compatible version)</li>
+      <li>Microsoft Visual C++ (part of <a href="https://www.visualstudio.com/">Visual Studio</a>) (see the ICU download page for the currently compatible version)</li>
+      
+      <li><i><b>Optional:</b></i> A version of the <a href="https://developer.microsoft.com/windows/downloads">Windows 10 SDK</a> (if you want to build the UWP projects)</li>
     </ul>
         <p class="note"><a href="#HowToBuildCygwin">Cygwin</a> is required if using a version of MSVC other than the one
         compatible with the supplied project files or if other compilers are used to build ICU. (e.g. GCC)</p>
@@ -874,6 +780,11 @@
       "#HowToBuildWindowsCommandLine">command line note below</a> if you want to
       build from the command line instead.</li>
 
+      <li>You may need to re-target the UWP projects to the version of the SDK that you have installed. In Visual Studio you can
+      right-click on the UWP projects and select the option 'Retarget SDK Version'. Note: You do not need to have a copy of 
+      the Windows 10 SDK installed in order to build the non-UWP projects in Visual Studio. If the SDK is not installed then the
+      UWP projects will simply not be loaded.</li>
+
       <li>Set the active platform to "Win32" or "x64" (See <a href="#HowToBuildWindowsPlatform">Windows platform note</a> below)
       and configuration to "Debug" or "Release" (See <a href="#HowToBuildWindowsConfig">Windows configuration note</a> below).</li>
 
@@ -932,9 +843,11 @@
     "HowToBuildWindowsCommandLine"><strong>Using MSDEV At The Command Line
     Note:</strong></a> You can build ICU from the command line. Assuming that you
     have properly installed Microsoft Visual C++ to support command line
-    execution, you can run the following command, 'devenv.com
-    <i><ICU></i>\source\allinone\allinone.sln /build "Win32|Release"'. You can also
-    use Cygwin with this compiler to build ICU, and you can refer to the <a href=
+    execution, you can run the following command to build the 32-bit Release version:
+    <code>'devenv.com <i><ICU></i>\source\allinone\allinone.sln /build "Release|Win32"'</code>.
+    Or to build the 64-bit Release version from the command line: 
+    <code>'devenv.com <i><ICU></i>\source\allinone\allinone.sln /build "Release|x64"'</code>.
+    <br />You can also use Cygwin with this compiler to build ICU, and you can refer to the <a href=
     "#HowToBuildCygwin">How To Build And Install On Windows with Cygwin</a>
     section for more details.</p>
 
@@ -981,7 +894,7 @@
     <ul>
       <li>Microsoft Windows</li>
 
-      <li>Microsoft Visual C++ (when gcc isn't used).</li>
+      <li>Microsoft Visual C++ (from Visual Studio 2015 or newer, when gcc isn't used).</li>
 
       <li>
         Cygwin with the following installed:
@@ -1016,11 +929,11 @@
       Visual C++ compiler will not work with a bash command prompt.</li>
 
       <li>If the computer isn't set up to use Visual C++ from the command line,
-      you need to run vcvars32.bat.<br />For example:<br />"<tt>C:\Program Files\Microsoft
-      Visual Studio 8\VC\bin\vcvars32.bat</tt>" can be used for 32-bit builds
-      <strong>or</strong> <br />"<tt>C:\Program Files (x86)\Microsoft Visual Studio
-      8\VC\bin\amd64\vcvarsamd64.bat</tt>" can be used for 64-bit builds on
-      Windows x64.</li>
+      you need to run vcvars32.bat.<br />For example:<br />
+      "<tt>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\vcvars32.bat</tt>"
+      can be used for 32-bit builds <strong>or</strong> <br />
+      "<tt>C:\Program Files (x86)\Microsoft Visual Studio 14\VC\bin\x86_amd64\vcvarsx86_amd64.bat</tt>"
+      can be used for 64-bit builds on Windows x64.</li>
 
       <li>Unzip the icu-XXXX.zip file into any convenient location. Using command
       line zip, type "unzip -a icu-XXXX.zip -d drive:\directory", or just use
@@ -1229,9 +1142,9 @@
       configure option.</li>
 
       <li>The latest versions of z/OS use <a
-      href="http://www.ibm.com/support/docview.wss?uid=swg2120240">XPLINK
+      href="https://www.ibm.com/support/knowledgecenter/SSLTBW_2.2.0/com.ibm.zos.v2r2.cbcux01/oebind6.htm">XPLINK
       version (C128) of the C++ standard library</a> by default. You may see <a
-      href="http://www.ibm.com/support/docview.wss?uid=swg21376279">an
+      href="https://www.ibm.com/support/knowledgecenter/SSLTBW_2.2.0/com.ibm.zos.v2r2.cbcux01/oebind5.htm">an
       error</a> when running with XPLINK disabled. To avoid this error,
       set the following environment variable or similar:
 
@@ -1405,7 +1318,7 @@
       <li>Test ICU. <pre><samp>gmake check</samp></pre>
         (The <tt> QIBM_MULTI_THREADED=Y</tt> flag will be automatically applied to intltest -
           you can look at the <a href=
-      "http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=/apis/concept4.htm">
+      "https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/rzahw/rzahwceeco.htm">
       iSeries Information Center</a> for more details regarding the running of multiple threads
       on IBM i.)</li>
     </ol>
@@ -1657,7 +1570,7 @@
     <p>In order to avoid synchronization and threading issues, developers are
     <strong>suggested</strong> to strictly follow the compiling and linking
     guidelines for multithreaded applications, specified in the following
-    document from Sun Microsystems. Most notably, pay strict attention to the
+    SUn Solaris document available from Oracle. Most notably, pay strict attention to the
     following statements from Sun:</p>
 
     <blockquote>
@@ -1671,11 +1584,16 @@
     <p>Failure to do this may cause spurious lock conflicts, recursive mutex
     failure, and deadlock.</p>
 
-    <p>Source: "<i>Solaris Multithreaded Programming Guide, Compiling and
-    Debugging</i>", Sun Microsystems, Inc., Apr 2004<br />
+    <p>Source: "<i>Multithreaded Programming Guide, Compiling and
+    Debugging</i>", Sun Microsystems, 2002 <br />
      <a href=
-    "http://docs.sun.com/app/docs/doc/816-5137/6mba5vpke?a=view">http://docs.sun.com/app/docs/doc/816-5137/6mba5vpke?a=view</a></p>
+    "https://docs.oracle.com/cd/E19683-01/806-6867/compile-74765/index.html">https://docs.oracle.com/cd/E19683-01/806-6867/compile-74765/index.html</a></p>
 
+    <p>Note, a version of that chapter from a 2008 document update covering both Solaris 9
+    and Solaris 10 is available here:<br />
+     <a href=
+    "http://docs.oracle.com/cd/E19253-01/816-5137/compile-94179/index.html">http://docs.oracle.com/cd/E19253-01/816-5137/compile-94179/index.html</a></p>
+
     <h3><a name="ImportantNotesWindows" href="#ImportantNotesWindows" id=
     "ImportantNotesWindows">Windows Platform</a></h3>
 

Modified: trunk/Build/source/libs/icu/icu-src/source/Doxyfile.in
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/Doxyfile.in	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/Doxyfile.in	2018-01-12 18:35:28 UTC (rev 46290)
@@ -194,7 +194,7 @@
 SEARCH_INCLUDES        = YES
 INCLUDE_PATH           = 
 INCLUDE_FILE_PATTERNS  = 
-PREDEFINED             = U_EXPORT2= U_STABLE= U_DRAFT= U_INTERNAL= U_SYSTEM= U_DEPRECATED= U_OBSOLETE= U_CALLCONV= U_CDECL_BEGIN= U_CDECL_END=  U_NO_THROW=\ "U_NAMESPACE_BEGIN=namespace icu{" "U_NAMESPACE_END=}" U_HAVE_STD_STRING=1 U_SHOW_CPLUSPLUS_API=1 U_DEFINE_LOCAL_OPEN_POINTER()= U_IN_DOXYGEN=1 U_OVERRIDE= U_FINAL= UCONFIG_ENABLE_PLUGINS=1
+PREDEFINED             = U_EXPORT2= U_STABLE= U_DRAFT= U_INTERNAL= U_SYSTEM= U_DEPRECATED= U_OBSOLETE= U_CALLCONV_FPTR= U_CALLCONV= U_CDECL_BEGIN= U_CDECL_END=  U_NO_THROW=\  "U_NAMESPACE_BEGIN=namespace icu{" "U_NAMESPACE_END=}" U_SHOW_CPLUSPLUS_API=1 U_DEFINE_LOCAL_OPEN_POINTER()= U_IN_DOXYGEN=1 U_OVERRIDE= U_FINAL=final UCONFIG_ENABLE_PLUGINS=1 U_CHAR16_IS_TYPEDEF=0 U_CPLUSPLUS_VERSION=11 U_WCHAR_IS_UTF16 U_NOEXCEPT=
 EXPAND_AS_DEFINED      = 
 SKIP_FUNCTION_MACROS   = YES
 #---------------------------------------------------------------------------

Modified: trunk/Build/source/libs/icu/icu-src/source/Makefile.in
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/Makefile.in	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/Makefile.in	2018-01-12 18:35:28 UTC (rev 46290)
@@ -34,9 +34,11 @@
 @LAYOUTEX_TRUE at LAYOUTEX = layoutex
 @ICUIO_TRUE at ICUIO = io
 @EXTRAS_TRUE at EXTRA = extra
- at TESTS_TRUE@TEST = test
+# need tools for tests
+ at TOOLS_TRUE@@TESTS_TRUE at TEST = test
 @SAMPLES_TRUE at SAMPLE = samples
 @TOOLS_TRUE at TOOLS = tools
+ at TOOLS_TRUE@DATASUBDIR = data
 
 ## pkgconfig setup. Always have uc and i18n. Others are optional.
 ALL_PKGCONFIG_SUFFIX=uc i18n
@@ -58,7 +60,7 @@
 LOCAL_BUILT_FILES = icudefs.mk config/icucross.mk config/icucross.inc
 
 DOCDIRS = common i18n
-SUBDIRS =  stubdata common i18n $(LAYOUTEX) $(ICUIO) $(TOOLS) data $(EXTRA) $(SAMPLE) $(TEST)
+SUBDIRS =  stubdata common i18n $(LAYOUTEX) $(ICUIO) $(TOOLS) $(DATASUBDIR) $(EXTRA) $(SAMPLE) $(TEST)
 
 SECTION = 1
 
@@ -85,7 +87,7 @@
 install: install-recursive install-local
 clean: clean-recursive-with-twist clean-local
 distclean : distclean-recursive distclean-local
-dist: dist-recursive dist-local
+dist: dist-recursive
 check: all check-recursive
 check-recursive: all
 xcheck: all xcheck-recursive
@@ -140,6 +142,10 @@
 
 ## Recursive targets
 all-recursive install-recursive clean-recursive distclean-recursive dist-recursive check-recursive check-exhaustive-recursive: $(LIBDIR) $(BINDIR)
+ifneq ($(NEED_ESCAPING),)
+	@echo "building tools/escapesrc (Needed for this platform with NEED_ESCAPING)"
+	@(cd tools/escapesrc && $(MAKE) RECURSIVE=YES $$local_target) || exit
+endif
 	@dot_seen=no; \
 	target=`echo $@ | sed s/-recursive//`; \
 	list='$(LOCAL_SUBDIRS)'; for subdir in $$list; do \
@@ -323,9 +329,10 @@
 	-$(RMV) $@
 	$(INSTALL_SCRIPT) $(top_srcdir)/config/icu-config-top $@
 	chmod u+w $@
+	@echo "# Following from icu/icu4c/source/config/Makefile.inc" >> $@
+	LC_ALL=C $(SED) -f $(top_srcdir)/config/make2sh.sed < $(top_builddir)/config/Makefile.inc | grep -v '#M#' | uniq >> $@
 	@echo "# Following from @platform_make_fragment@" >> $@
-	LC_ALL=C sed -f $(top_srcdir)/config/make2sh.sed < $(top_builddir)/config/Makefile.inc | grep -v '#M#' | uniq >> $@
-	LC_ALL=C sed -f $(top_srcdir)/config/make2sh.sed < @platform_make_fragment@ | grep -v '#M#' | uniq >> $@
+	LC_ALL=C $(SED) -f $(top_srcdir)/config/make2sh.sed < @platform_make_fragment@ | grep -v '#M#' | uniq >> $@
 	cat $(top_srcdir)/config/icu-config-bottom >> $@
 	chmod u-w $@
 

Modified: trunk/Build/source/libs/icu/icu-src/source/allinone/allinone.sln
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/allinone/allinone.sln	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/allinone/allinone.sln	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,5 +1,7 @@
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.25420.1
+MinimumVisualStudioVersion = 10.0.40219.1
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cal", "..\samples\cal\cal.vcxproj", "{F7659D77-09CF-4FE9-ACEE-927287AA9509}"
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cintltst", "..\test\cintltst\cintltst.vcxproj", "{3D1246AE-1B32-479B-BECA-AEFA97BE2321}"
@@ -61,268 +63,354 @@
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testplug", "..\tools\icuinfo\testplug.vcxproj", "{659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}"
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "makedata_uwp", "..\data\makedata_uwp.vcxproj", "{B1D53358-37BD-48BC-B27C-68BAF1E78508}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "i18n_uwp", "..\i18n\i18n_uwp.vcxproj", "{6786C051-383B-47E0-9E82-B8B994E06A25}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "common_uwp", "..\common\common_uwp.vcxproj", "{C10CF34B-3F79-430E-AD38-5A32DC0589C2}"
+EndProject
 Global
-	GlobalSection(SubversionScc) = preSolution
-		Svn-Managed = True
-		Manager = AnkhSVN - Subversion Support for Visual Studio
-	EndGlobalSection
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|ARM = Debug|ARM
 		Debug|Win32 = Debug|Win32
 		Debug|x64 = Debug|x64
+		Release|ARM = Release|ARM
 		Release|Win32 = Release|Win32
 		Release|x64 = Release|x64
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{F7659D77-09CF-4FE9-ACEE-927287AA9509}.Debug|ARM.ActiveCfg = Debug|Win32
 		{F7659D77-09CF-4FE9-ACEE-927287AA9509}.Debug|Win32.ActiveCfg = Debug|Win32
 		{F7659D77-09CF-4FE9-ACEE-927287AA9509}.Debug|Win32.Build.0 = Debug|Win32
 		{F7659D77-09CF-4FE9-ACEE-927287AA9509}.Debug|x64.ActiveCfg = Debug|x64
 		{F7659D77-09CF-4FE9-ACEE-927287AA9509}.Debug|x64.Build.0 = Debug|x64
+		{F7659D77-09CF-4FE9-ACEE-927287AA9509}.Release|ARM.ActiveCfg = Release|Win32
 		{F7659D77-09CF-4FE9-ACEE-927287AA9509}.Release|Win32.ActiveCfg = Release|Win32
 		{F7659D77-09CF-4FE9-ACEE-927287AA9509}.Release|Win32.Build.0 = Release|Win32
 		{F7659D77-09CF-4FE9-ACEE-927287AA9509}.Release|x64.ActiveCfg = Release|x64
 		{F7659D77-09CF-4FE9-ACEE-927287AA9509}.Release|x64.Build.0 = Release|x64
+		{3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Debug|ARM.ActiveCfg = Debug|Win32
 		{3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Debug|Win32.ActiveCfg = Debug|Win32
 		{3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Debug|Win32.Build.0 = Debug|Win32
 		{3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Debug|x64.ActiveCfg = Debug|x64
 		{3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Debug|x64.Build.0 = Debug|x64
+		{3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Release|ARM.ActiveCfg = Release|Win32
 		{3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Release|Win32.ActiveCfg = Release|Win32
 		{3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Release|Win32.Build.0 = Release|Win32
 		{3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Release|x64.ActiveCfg = Release|x64
 		{3D1246AE-1B32-479B-BECA-AEFA97BE2321}.Release|x64.Build.0 = Release|x64
+		{73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Debug|ARM.ActiveCfg = Debug|Win32
 		{73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Debug|Win32.ActiveCfg = Debug|Win32
 		{73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Debug|Win32.Build.0 = Debug|Win32
 		{73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Debug|x64.ActiveCfg = Debug|x64
 		{73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Debug|x64.Build.0 = Debug|x64
+		{73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Release|ARM.ActiveCfg = Release|Win32
 		{73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Release|Win32.ActiveCfg = Release|Win32
 		{73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Release|Win32.Build.0 = Release|Win32
 		{73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Release|x64.ActiveCfg = Release|x64
 		{73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}.Release|x64.Build.0 = Release|x64
+		{ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Debug|ARM.ActiveCfg = Debug|Win32
 		{ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Debug|Win32.ActiveCfg = Debug|Win32
 		{ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Debug|Win32.Build.0 = Debug|Win32
 		{ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Debug|x64.ActiveCfg = Debug|x64
 		{ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Debug|x64.Build.0 = Debug|x64
+		{ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Release|ARM.ActiveCfg = Release|Win32
 		{ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Release|Win32.ActiveCfg = Release|Win32
 		{ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Release|Win32.Build.0 = Release|Win32
 		{ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Release|x64.ActiveCfg = Release|x64
 		{ECA6B435-B4FA-4F9F-BF95-F451D078FC47}.Release|x64.Build.0 = Release|x64
+		{38B5751A-C6F9-4409-950C-F4F9DA17275F}.Debug|ARM.ActiveCfg = Debug|Win32
 		{38B5751A-C6F9-4409-950C-F4F9DA17275F}.Debug|Win32.ActiveCfg = Debug|Win32
 		{38B5751A-C6F9-4409-950C-F4F9DA17275F}.Debug|Win32.Build.0 = Debug|Win32
 		{38B5751A-C6F9-4409-950C-F4F9DA17275F}.Debug|x64.ActiveCfg = Debug|x64
 		{38B5751A-C6F9-4409-950C-F4F9DA17275F}.Debug|x64.Build.0 = Debug|x64
+		{38B5751A-C6F9-4409-950C-F4F9DA17275F}.Release|ARM.ActiveCfg = Release|Win32
 		{38B5751A-C6F9-4409-950C-F4F9DA17275F}.Release|Win32.ActiveCfg = Release|Win32
 		{38B5751A-C6F9-4409-950C-F4F9DA17275F}.Release|Win32.Build.0 = Release|Win32
 		{38B5751A-C6F9-4409-950C-F4F9DA17275F}.Release|x64.ActiveCfg = Release|x64
 		{38B5751A-C6F9-4409-950C-F4F9DA17275F}.Release|x64.Build.0 = Release|x64
+		{D3065ADB-8820-4CC7-9B6C-9510833961A3}.Debug|ARM.ActiveCfg = Debug|Win32
 		{D3065ADB-8820-4CC7-9B6C-9510833961A3}.Debug|Win32.ActiveCfg = Debug|Win32
 		{D3065ADB-8820-4CC7-9B6C-9510833961A3}.Debug|Win32.Build.0 = Debug|Win32
 		{D3065ADB-8820-4CC7-9B6C-9510833961A3}.Debug|x64.ActiveCfg = Debug|x64
 		{D3065ADB-8820-4CC7-9B6C-9510833961A3}.Debug|x64.Build.0 = Debug|x64
+		{D3065ADB-8820-4CC7-9B6C-9510833961A3}.Release|ARM.ActiveCfg = Release|Win32
 		{D3065ADB-8820-4CC7-9B6C-9510833961A3}.Release|Win32.ActiveCfg = Release|Win32
 		{D3065ADB-8820-4CC7-9B6C-9510833961A3}.Release|Win32.Build.0 = Release|Win32
 		{D3065ADB-8820-4CC7-9B6C-9510833961A3}.Release|x64.ActiveCfg = Release|x64
 		{D3065ADB-8820-4CC7-9B6C-9510833961A3}.Release|x64.Build.0 = Release|x64
+		{C2BE5000-7501-4E87-9724-B8D82494FAE6}.Debug|ARM.ActiveCfg = Debug|Win32
 		{C2BE5000-7501-4E87-9724-B8D82494FAE6}.Debug|Win32.ActiveCfg = Debug|Win32
 		{C2BE5000-7501-4E87-9724-B8D82494FAE6}.Debug|Win32.Build.0 = Debug|Win32
 		{C2BE5000-7501-4E87-9724-B8D82494FAE6}.Debug|x64.ActiveCfg = Debug|x64
 		{C2BE5000-7501-4E87-9724-B8D82494FAE6}.Debug|x64.Build.0 = Debug|x64
+		{C2BE5000-7501-4E87-9724-B8D82494FAE6}.Release|ARM.ActiveCfg = Release|Win32
 		{C2BE5000-7501-4E87-9724-B8D82494FAE6}.Release|Win32.ActiveCfg = Release|Win32
 		{C2BE5000-7501-4E87-9724-B8D82494FAE6}.Release|Win32.Build.0 = Release|Win32
 		{C2BE5000-7501-4E87-9724-B8D82494FAE6}.Release|x64.ActiveCfg = Release|x64
 		{C2BE5000-7501-4E87-9724-B8D82494FAE6}.Release|x64.Build.0 = Release|x64
+		{FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Debug|ARM.ActiveCfg = Debug|Win32
 		{FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Debug|Win32.ActiveCfg = Debug|Win32
 		{FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Debug|Win32.Build.0 = Debug|Win32
 		{FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Debug|x64.ActiveCfg = Debug|x64
 		{FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Debug|x64.Build.0 = Debug|x64
+		{FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Release|ARM.ActiveCfg = Release|Win32
 		{FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Release|Win32.ActiveCfg = Release|Win32
 		{FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Release|Win32.Build.0 = Release|Win32
 		{FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Release|x64.ActiveCfg = Release|x64
 		{FDD3C4F2-9805-44EB-9A77-BC1C1C95B547}.Release|x64.Build.0 = Release|x64
+		{A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Debug|ARM.ActiveCfg = Debug|Win32
 		{A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Debug|Win32.ActiveCfg = Debug|Win32
 		{A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Debug|Win32.Build.0 = Debug|Win32
 		{A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Debug|x64.ActiveCfg = Debug|x64
 		{A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Debug|x64.Build.0 = Debug|x64
+		{A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Release|ARM.ActiveCfg = Release|Win32
 		{A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Release|Win32.ActiveCfg = Release|Win32
 		{A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Release|Win32.Build.0 = Release|Win32
 		{A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Release|x64.ActiveCfg = Release|x64
 		{A8D36F8D-09E6-4174-91C3-7BEAA9C3F04F}.Release|x64.Build.0 = Release|x64
+		{8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Debug|ARM.ActiveCfg = Debug|Win32
 		{8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Debug|Win32.ActiveCfg = Debug|Win32
 		{8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Debug|Win32.Build.0 = Debug|Win32
 		{8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Debug|x64.ActiveCfg = Debug|x64
 		{8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Debug|x64.Build.0 = Debug|x64
+		{8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Release|ARM.ActiveCfg = Release|Win32
 		{8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Release|Win32.ActiveCfg = Release|Win32
 		{8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Release|Win32.Build.0 = Release|Win32
 		{8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Release|x64.ActiveCfg = Release|x64
 		{8B41752B-5A52-41E4-B7E0-07921C0CC6BF}.Release|x64.Build.0 = Release|x64
+		{97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Debug|ARM.ActiveCfg = Debug|Win32
 		{97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Debug|Win32.ActiveCfg = Debug|Win32
 		{97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Debug|Win32.Build.0 = Debug|Win32
 		{97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Debug|x64.ActiveCfg = Debug|x64
 		{97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Debug|x64.Build.0 = Debug|x64
+		{97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Release|ARM.ActiveCfg = Release|Win32
 		{97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Release|Win32.ActiveCfg = Release|Win32
 		{97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Release|Win32.Build.0 = Release|Win32
 		{97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Release|x64.ActiveCfg = Release|x64
 		{97521D06-EC47-45D4-8BD0-9E16B3F93B2A}.Release|x64.Build.0 = Release|x64
+		{77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Debug|ARM.ActiveCfg = Debug|Win32
 		{77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Debug|Win32.ActiveCfg = Debug|Win32
 		{77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Debug|Win32.Build.0 = Debug|Win32
 		{77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Debug|x64.ActiveCfg = Debug|x64
 		{77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Debug|x64.Build.0 = Debug|x64
+		{77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Release|ARM.ActiveCfg = Release|Win32
 		{77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Release|Win32.ActiveCfg = Release|Win32
 		{77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Release|Win32.Build.0 = Release|Win32
 		{77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Release|x64.ActiveCfg = Release|x64
 		{77C78066-746F-4EA6-B3FE-B8C8A4A97891}.Release|x64.Build.0 = Release|x64
+		{0178B127-6269-407D-B112-93877BB62776}.Debug|ARM.ActiveCfg = Debug|Win32
 		{0178B127-6269-407D-B112-93877BB62776}.Debug|Win32.ActiveCfg = Debug|Win32
 		{0178B127-6269-407D-B112-93877BB62776}.Debug|Win32.Build.0 = Debug|Win32
 		{0178B127-6269-407D-B112-93877BB62776}.Debug|x64.ActiveCfg = Debug|x64
 		{0178B127-6269-407D-B112-93877BB62776}.Debug|x64.Build.0 = Debug|x64
+		{0178B127-6269-407D-B112-93877BB62776}.Release|ARM.ActiveCfg = Release|Win32
 		{0178B127-6269-407D-B112-93877BB62776}.Release|Win32.ActiveCfg = Release|Win32
 		{0178B127-6269-407D-B112-93877BB62776}.Release|Win32.Build.0 = Release|Win32
 		{0178B127-6269-407D-B112-93877BB62776}.Release|x64.ActiveCfg = Release|x64
 		{0178B127-6269-407D-B112-93877BB62776}.Release|x64.Build.0 = Release|x64
+		{73632960-B3A6-464D-83A3-4B43365F19B8}.Debug|ARM.ActiveCfg = Debug|Win32
 		{73632960-B3A6-464D-83A3-4B43365F19B8}.Debug|Win32.ActiveCfg = Debug|Win32
 		{73632960-B3A6-464D-83A3-4B43365F19B8}.Debug|Win32.Build.0 = Debug|Win32
 		{73632960-B3A6-464D-83A3-4B43365F19B8}.Debug|x64.ActiveCfg = Debug|x64
 		{73632960-B3A6-464D-83A3-4B43365F19B8}.Debug|x64.Build.0 = Debug|x64
+		{73632960-B3A6-464D-83A3-4B43365F19B8}.Release|ARM.ActiveCfg = Release|Win32
 		{73632960-B3A6-464D-83A3-4B43365F19B8}.Release|Win32.ActiveCfg = Release|Win32
 		{73632960-B3A6-464D-83A3-4B43365F19B8}.Release|Win32.Build.0 = Release|Win32
 		{73632960-B3A6-464D-83A3-4B43365F19B8}.Release|x64.ActiveCfg = Release|x64
 		{73632960-B3A6-464D-83A3-4B43365F19B8}.Release|x64.Build.0 = Release|x64
-		{C920062A-0647-4553-A3B2-37C58065664B}.Debug|Win32.ActiveCfg = Debug|Win32
-		{C920062A-0647-4553-A3B2-37C58065664B}.Debug|Win32.Build.0 = Debug|Win32
-		{C920062A-0647-4553-A3B2-37C58065664B}.Debug|x64.ActiveCfg = Debug|x64
-		{C920062A-0647-4553-A3B2-37C58065664B}.Debug|x64.Build.0 = Debug|x64
-		{C920062A-0647-4553-A3B2-37C58065664B}.Release|Win32.ActiveCfg = Release|Win32
-		{C920062A-0647-4553-A3B2-37C58065664B}.Release|Win32.Build.0 = Release|Win32
-		{C920062A-0647-4553-A3B2-37C58065664B}.Release|x64.ActiveCfg = Release|x64
-		{C920062A-0647-4553-A3B2-37C58065664B}.Release|x64.Build.0 = Release|x64
-		{37FC2C7F-1904-4811-8955-2F478830EAD1}.Debug|Win32.ActiveCfg = Debug|Win32
-		{37FC2C7F-1904-4811-8955-2F478830EAD1}.Debug|Win32.Build.0 = Debug|Win32
-		{37FC2C7F-1904-4811-8955-2F478830EAD1}.Debug|x64.ActiveCfg = Debug|x64
-		{37FC2C7F-1904-4811-8955-2F478830EAD1}.Debug|x64.Build.0 = Debug|x64
-		{37FC2C7F-1904-4811-8955-2F478830EAD1}.Release|Win32.ActiveCfg = Release|Win32
-		{37FC2C7F-1904-4811-8955-2F478830EAD1}.Release|Win32.Build.0 = Release|Win32
-		{37FC2C7F-1904-4811-8955-2F478830EAD1}.Release|x64.ActiveCfg = Release|x64
-		{37FC2C7F-1904-4811-8955-2F478830EAD1}.Release|x64.Build.0 = Release|x64
+		{F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Debug|ARM.ActiveCfg = Debug|Win32
 		{F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Debug|Win32.ActiveCfg = Debug|Win32
 		{F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Debug|Win32.Build.0 = Debug|Win32
 		{F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Debug|x64.ActiveCfg = Debug|x64
 		{F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Debug|x64.Build.0 = Debug|x64
+		{F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Release|ARM.ActiveCfg = Release|Win32
 		{F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Release|Win32.ActiveCfg = Release|Win32
 		{F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Release|Win32.Build.0 = Release|Win32
 		{F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Release|x64.ActiveCfg = Release|x64
 		{F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}.Release|x64.Build.0 = Release|x64
+		{D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Debug|ARM.ActiveCfg = Debug|Win32
 		{D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Debug|Win32.ActiveCfg = Debug|Win32
 		{D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Debug|Win32.Build.0 = Debug|Win32
 		{D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Debug|x64.ActiveCfg = Debug|x64
 		{D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Debug|x64.Build.0 = Debug|x64
+		{D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Release|ARM.ActiveCfg = Release|Win32
 		{D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Release|Win32.ActiveCfg = Release|Win32
 		{D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Release|Win32.Build.0 = Release|Win32
 		{D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Release|x64.ActiveCfg = Release|x64
 		{D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}.Release|x64.Build.0 = Release|x64
+		{4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Debug|ARM.ActiveCfg = Debug|Win32
 		{4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Debug|Win32.ActiveCfg = Debug|Win32
 		{4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Debug|Win32.Build.0 = Debug|Win32
 		{4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Debug|x64.ActiveCfg = Debug|x64
 		{4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Debug|x64.Build.0 = Debug|x64
+		{4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Release|ARM.ActiveCfg = Release|Win32
 		{4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Release|Win32.ActiveCfg = Release|Win32
 		{4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Release|Win32.Build.0 = Release|Win32
 		{4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Release|x64.ActiveCfg = Release|x64
 		{4C8454FE-81D3-4CA3-9927-29BA96F03DAC}.Release|x64.Build.0 = Release|x64
+		{203EC78A-0531-43F0-A636-285439BDE025}.Debug|ARM.ActiveCfg = Debug|Win32
 		{203EC78A-0531-43F0-A636-285439BDE025}.Debug|Win32.ActiveCfg = Debug|Win32
 		{203EC78A-0531-43F0-A636-285439BDE025}.Debug|Win32.Build.0 = Debug|Win32
 		{203EC78A-0531-43F0-A636-285439BDE025}.Debug|x64.ActiveCfg = Debug|x64
 		{203EC78A-0531-43F0-A636-285439BDE025}.Debug|x64.Build.0 = Debug|x64
+		{203EC78A-0531-43F0-A636-285439BDE025}.Release|ARM.ActiveCfg = Release|Win32
 		{203EC78A-0531-43F0-A636-285439BDE025}.Release|Win32.ActiveCfg = Release|Win32
 		{203EC78A-0531-43F0-A636-285439BDE025}.Release|Win32.Build.0 = Release|Win32
 		{203EC78A-0531-43F0-A636-285439BDE025}.Release|x64.ActiveCfg = Release|x64
 		{203EC78A-0531-43F0-A636-285439BDE025}.Release|x64.Build.0 = Release|x64
+		{6B231032-3CB5-4EED-9210-810D666A23A0}.Debug|ARM.ActiveCfg = Debug|Win32
 		{6B231032-3CB5-4EED-9210-810D666A23A0}.Debug|Win32.ActiveCfg = Debug|Win32
 		{6B231032-3CB5-4EED-9210-810D666A23A0}.Debug|Win32.Build.0 = Debug|Win32
 		{6B231032-3CB5-4EED-9210-810D666A23A0}.Debug|x64.ActiveCfg = Debug|x64
 		{6B231032-3CB5-4EED-9210-810D666A23A0}.Debug|x64.Build.0 = Debug|x64
+		{6B231032-3CB5-4EED-9210-810D666A23A0}.Release|ARM.ActiveCfg = Release|Win32
 		{6B231032-3CB5-4EED-9210-810D666A23A0}.Release|Win32.ActiveCfg = Release|Win32
 		{6B231032-3CB5-4EED-9210-810D666A23A0}.Release|Win32.Build.0 = Release|Win32
 		{6B231032-3CB5-4EED-9210-810D666A23A0}.Release|x64.ActiveCfg = Release|x64
 		{6B231032-3CB5-4EED-9210-810D666A23A0}.Release|x64.Build.0 = Release|x64
+		{DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Debug|ARM.ActiveCfg = Debug|Win32
 		{DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Debug|Win32.ActiveCfg = Debug|Win32
 		{DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Debug|Win32.Build.0 = Debug|Win32
 		{DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Debug|x64.ActiveCfg = Debug|x64
 		{DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Debug|x64.Build.0 = Debug|x64
+		{DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Release|ARM.ActiveCfg = Release|Win32
 		{DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Release|Win32.ActiveCfg = Release|Win32
 		{DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Release|Win32.Build.0 = Release|Win32
 		{DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Release|x64.ActiveCfg = Release|x64
 		{DBA4088D-F6F9-4F8F-8820-082A4765C16C}.Release|x64.Build.0 = Release|x64
+		{C2B04507-2521-4801-BF0D-5FD79D6D518C}.Debug|ARM.ActiveCfg = Debug|Win32
 		{C2B04507-2521-4801-BF0D-5FD79D6D518C}.Debug|Win32.ActiveCfg = Debug|Win32
 		{C2B04507-2521-4801-BF0D-5FD79D6D518C}.Debug|Win32.Build.0 = Debug|Win32
 		{C2B04507-2521-4801-BF0D-5FD79D6D518C}.Debug|x64.ActiveCfg = Debug|x64
 		{C2B04507-2521-4801-BF0D-5FD79D6D518C}.Debug|x64.Build.0 = Debug|x64
+		{C2B04507-2521-4801-BF0D-5FD79D6D518C}.Release|ARM.ActiveCfg = Release|Win32
 		{C2B04507-2521-4801-BF0D-5FD79D6D518C}.Release|Win32.ActiveCfg = Release|Win32
 		{C2B04507-2521-4801-BF0D-5FD79D6D518C}.Release|Win32.Build.0 = Release|Win32
 		{C2B04507-2521-4801-BF0D-5FD79D6D518C}.Release|x64.ActiveCfg = Release|x64
 		{C2B04507-2521-4801-BF0D-5FD79D6D518C}.Release|x64.Build.0 = Release|x64
+		{631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Debug|ARM.ActiveCfg = Debug|Win32
 		{631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Debug|Win32.ActiveCfg = Debug|Win32
 		{631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Debug|Win32.Build.0 = Debug|Win32
 		{631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Debug|x64.ActiveCfg = Debug|x64
 		{631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Debug|x64.Build.0 = Debug|x64
+		{631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Release|ARM.ActiveCfg = Release|Win32
 		{631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Release|Win32.ActiveCfg = Release|Win32
 		{631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Release|Win32.Build.0 = Release|Win32
 		{631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Release|x64.ActiveCfg = Release|x64
 		{631C23CE-6C1D-4875-88F0-85E0A42B36EA}.Release|x64.Build.0 = Release|x64
+		{E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Debug|ARM.ActiveCfg = Debug|Win32
 		{E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Debug|Win32.ActiveCfg = Debug|Win32
 		{E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Debug|Win32.Build.0 = Debug|Win32
 		{E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Debug|x64.ActiveCfg = Debug|x64
 		{E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Debug|x64.Build.0 = Debug|x64
+		{E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Release|ARM.ActiveCfg = Release|Win32
 		{E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Release|Win32.ActiveCfg = Release|Win32
 		{E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Release|Win32.Build.0 = Release|Win32
 		{E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Release|x64.ActiveCfg = Release|x64
 		{E4993E82-D68A-46CA-BAE0-9D35E172E46F}.Release|x64.Build.0 = Release|x64
+		{62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Debug|ARM.ActiveCfg = Debug|Win32
 		{62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Debug|Win32.ActiveCfg = Debug|Win32
 		{62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Debug|Win32.Build.0 = Debug|Win32
 		{62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Debug|x64.ActiveCfg = Debug|x64
 		{62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Debug|x64.Build.0 = Debug|x64
+		{62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Release|ARM.ActiveCfg = Release|Win32
 		{62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Release|Win32.ActiveCfg = Release|Win32
 		{62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Release|Win32.Build.0 = Release|Win32
 		{62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Release|x64.ActiveCfg = Release|x64
 		{62D4B15D-7A90-4ECB-BA19-5E021D6A21BC}.Release|x64.Build.0 = Release|x64
+		{9D4211F7-2C77-439C-82F0-30A4E43BA569}.Debug|ARM.ActiveCfg = Debug|Win32
 		{9D4211F7-2C77-439C-82F0-30A4E43BA569}.Debug|Win32.ActiveCfg = Debug|Win32
 		{9D4211F7-2C77-439C-82F0-30A4E43BA569}.Debug|Win32.Build.0 = Debug|Win32
 		{9D4211F7-2C77-439C-82F0-30A4E43BA569}.Debug|x64.ActiveCfg = Debug|x64
 		{9D4211F7-2C77-439C-82F0-30A4E43BA569}.Debug|x64.Build.0 = Debug|x64
+		{9D4211F7-2C77-439C-82F0-30A4E43BA569}.Release|ARM.ActiveCfg = Release|Win32
 		{9D4211F7-2C77-439C-82F0-30A4E43BA569}.Release|Win32.ActiveCfg = Release|Win32
 		{9D4211F7-2C77-439C-82F0-30A4E43BA569}.Release|Win32.Build.0 = Release|Win32
 		{9D4211F7-2C77-439C-82F0-30A4E43BA569}.Release|x64.ActiveCfg = Release|x64
 		{9D4211F7-2C77-439C-82F0-30A4E43BA569}.Release|x64.Build.0 = Release|x64
+		{691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Debug|ARM.ActiveCfg = Debug|Win32
 		{691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Debug|Win32.ActiveCfg = Debug|Win32
 		{691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Debug|Win32.Build.0 = Debug|Win32
 		{691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Debug|x64.ActiveCfg = Debug|x64
 		{691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Debug|x64.Build.0 = Debug|x64
+		{691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Release|ARM.ActiveCfg = Release|Win32
 		{691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Release|Win32.ActiveCfg = Release|Win32
 		{691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Release|Win32.Build.0 = Release|Win32
 		{691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Release|x64.ActiveCfg = Release|x64
 		{691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}.Release|x64.Build.0 = Release|x64
+		{C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Debug|ARM.ActiveCfg = Debug|Win32
 		{C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Debug|Win32.ActiveCfg = Debug|Win32
 		{C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Debug|Win32.Build.0 = Debug|Win32
 		{C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Debug|x64.ActiveCfg = Debug|x64
 		{C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Debug|x64.Build.0 = Debug|x64
+		{C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Release|ARM.ActiveCfg = Release|Win32
 		{C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Release|Win32.ActiveCfg = Release|Win32
 		{C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Release|Win32.Build.0 = Release|Win32
 		{C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Release|x64.ActiveCfg = Release|x64
 		{C7891A65-80AB-4245-912E-5F1E17B0E6C4}.Release|x64.Build.0 = Release|x64
+		{E7611F49-F088-4175-9446-6111444E72C8}.Debug|ARM.ActiveCfg = Debug|Win32
 		{E7611F49-F088-4175-9446-6111444E72C8}.Debug|Win32.ActiveCfg = Debug|Win32
 		{E7611F49-F088-4175-9446-6111444E72C8}.Debug|Win32.Build.0 = Debug|Win32
 		{E7611F49-F088-4175-9446-6111444E72C8}.Debug|x64.ActiveCfg = Debug|x64
 		{E7611F49-F088-4175-9446-6111444E72C8}.Debug|x64.Build.0 = Debug|x64
+		{E7611F49-F088-4175-9446-6111444E72C8}.Release|ARM.ActiveCfg = Release|Win32
 		{E7611F49-F088-4175-9446-6111444E72C8}.Release|Win32.ActiveCfg = Release|Win32
 		{E7611F49-F088-4175-9446-6111444E72C8}.Release|Win32.Build.0 = Release|Win32
 		{E7611F49-F088-4175-9446-6111444E72C8}.Release|x64.ActiveCfg = Release|x64
 		{E7611F49-F088-4175-9446-6111444E72C8}.Release|x64.Build.0 = Release|x64
+		{659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Debug|ARM.ActiveCfg = Debug|Win32
 		{659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Debug|Win32.ActiveCfg = Debug|Win32
 		{659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Debug|Win32.Build.0 = Debug|Win32
 		{659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Debug|x64.ActiveCfg = Debug|x64
 		{659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Debug|x64.Build.0 = Debug|x64
+		{659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Release|ARM.ActiveCfg = Release|Win32
 		{659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Release|Win32.ActiveCfg = Release|Win32
 		{659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Release|Win32.Build.0 = Release|Win32
 		{659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Release|x64.ActiveCfg = Release|x64
 		{659D0C08-D4ED-4BF3-B02B-2D8D4B5A7A7A}.Release|x64.Build.0 = Release|x64
+		{B1D53358-37BD-48BC-B27C-68BAF1E78508}.Debug|ARM.ActiveCfg = Debug|ARM
+		{B1D53358-37BD-48BC-B27C-68BAF1E78508}.Debug|ARM.Build.0 = Debug|ARM
+		{B1D53358-37BD-48BC-B27C-68BAF1E78508}.Debug|Win32.ActiveCfg = Debug|Win32
+		{B1D53358-37BD-48BC-B27C-68BAF1E78508}.Debug|Win32.Build.0 = Debug|Win32
+		{B1D53358-37BD-48BC-B27C-68BAF1E78508}.Debug|x64.ActiveCfg = Debug|x64
+		{B1D53358-37BD-48BC-B27C-68BAF1E78508}.Debug|x64.Build.0 = Debug|x64
+		{B1D53358-37BD-48BC-B27C-68BAF1E78508}.Release|ARM.ActiveCfg = Release|ARM
+		{B1D53358-37BD-48BC-B27C-68BAF1E78508}.Release|ARM.Build.0 = Release|ARM
+		{B1D53358-37BD-48BC-B27C-68BAF1E78508}.Release|Win32.ActiveCfg = Release|Win32
+		{B1D53358-37BD-48BC-B27C-68BAF1E78508}.Release|Win32.Build.0 = Release|Win32
+		{B1D53358-37BD-48BC-B27C-68BAF1E78508}.Release|x64.ActiveCfg = Release|x64
+		{B1D53358-37BD-48BC-B27C-68BAF1E78508}.Release|x64.Build.0 = Release|x64
+		{6786C051-383B-47E0-9E82-B8B994E06A25}.Debug|ARM.ActiveCfg = Debug|ARM
+		{6786C051-383B-47E0-9E82-B8B994E06A25}.Debug|ARM.Build.0 = Debug|ARM
+		{6786C051-383B-47E0-9E82-B8B994E06A25}.Debug|Win32.ActiveCfg = Debug|Win32
+		{6786C051-383B-47E0-9E82-B8B994E06A25}.Debug|Win32.Build.0 = Debug|Win32
+		{6786C051-383B-47E0-9E82-B8B994E06A25}.Debug|x64.ActiveCfg = Debug|x64
+		{6786C051-383B-47E0-9E82-B8B994E06A25}.Debug|x64.Build.0 = Debug|x64
+		{6786C051-383B-47E0-9E82-B8B994E06A25}.Release|ARM.ActiveCfg = Release|ARM
+		{6786C051-383B-47E0-9E82-B8B994E06A25}.Release|ARM.Build.0 = Release|ARM
+		{6786C051-383B-47E0-9E82-B8B994E06A25}.Release|Win32.ActiveCfg = Release|Win32
+		{6786C051-383B-47E0-9E82-B8B994E06A25}.Release|Win32.Build.0 = Release|Win32
+		{6786C051-383B-47E0-9E82-B8B994E06A25}.Release|x64.ActiveCfg = Release|x64
+		{6786C051-383B-47E0-9E82-B8B994E06A25}.Release|x64.Build.0 = Release|x64
+		{C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Debug|ARM.ActiveCfg = Debug|ARM
+		{C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Debug|ARM.Build.0 = Debug|ARM
+		{C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Debug|Win32.ActiveCfg = Debug|Win32
+		{C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Debug|Win32.Build.0 = Debug|Win32
+		{C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Debug|x64.ActiveCfg = Debug|x64
+		{C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Debug|x64.Build.0 = Debug|x64
+		{C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Release|ARM.ActiveCfg = Release|ARM
+		{C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Release|ARM.Build.0 = Release|ARM
+		{C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Release|Win32.ActiveCfg = Release|Win32
+		{C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Release|Win32.Build.0 = Release|Win32
+		{C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Release|x64.ActiveCfg = Release|x64
+		{C10CF34B-3F79-430E-AD38-5A32DC0589C2}.Release|x64.Build.0 = Release|x64
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
 	EndGlobalSection
+	GlobalSection(SubversionScc) = preSolution
+		Svn-Managed = True
+		Manager = AnkhSVN - Subversion Support for Visual Studio
+	EndGlobalSection
 EndGlobal

Modified: trunk/Build/source/libs/icu/icu-src/source/allinone/icucheck.bat
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/allinone/icucheck.bat	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/allinone/icucheck.bat	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,131 +1,131 @@
- at echo off
-REM Copyright (C) 2016 and later: Unicode, Inc. and others.
-REM License & terms of use: http://www.unicode.org/copyright.html
-REM  ********************************************************************
-REM  * COPYRIGHT:
-REM  * Copyright (c) 2010-2014, International Business Machines Corporation
-REM  * and others. All Rights Reserved.
-REM  ********************************************************************
-
-set ICU_ARCH=%1
-set ICU_DBRL=%2
-
-if "%1" == "" (
-echo Usage: %0 "x86 or x64"  "Debug or Release"
-exit /b 1
-)
-
-if "%2" == "" (
-echo Usage: %0 %1 "Debug or Release"
-exit /b 1
-)
-
-set ICU_OPATH=%PATH%
-
-set ICU_ICUDIR="%~dp0"\..\..
-
-if "%ICU_ARCH%" == "x64" (
-set ICU_BINDIR=%~dp0\..\..\bin64
-) else (
-set ICU_BINDIR=%~dp0\..\..\bin
-)
-
-set PATH=%ICU_BINDIR%;%PATH%
-
-echo testing ICU in %ICU_ICUDIR%  arch=%ICU_ARCH% type=%ICU_DBRL%
-pushd %ICU_ICUDIR%
-
- at rem factor these out
-set ICUINFO_CMD=%ICU_ICUDIR%\source\tools\icuinfo\%ICU_ARCH%\%ICU_DBRL%\icuinfo.exe
-set INTLTEST_CMD=%ICU_ICUDIR%\source\test\intltest\%ICU_ARCH%\%ICU_DBRL%\intltest.exe
-set IOTEST_CMD=%ICU_ICUDIR%\source\test\iotest\%ICU_ARCH%\%ICU_DBRL%\iotest.exe
-set CINTLTST_CMD=%ICU_ICUDIR%\source\test\cintltst\%ICU_ARCH%\%ICU_DBRL%\cintltst.exe
-set LETEST_CMD=%ICU_ICUDIR%\source\test\letest\%ICU_ARCH%\%ICU_DBRL%\letest.exe
-
-set ICUFAILED=
-set ICURUN=
-set ICUFAILCNT=0
-
- at echo on
-
- at set THT=icuinfo
- at echo ==== %THT% =========================================================================
-%ICUINFO_CMD% %ICUINFO_OPTS%
-
- at IF NOT ERRORLEVEL 1 GOTO OK_%THT%
- at set ICUFAILED=%ICUFAILED% %THT%
- at set ICUFAILCNT=1
-:OK_icuinfo
- at set ICURUN=%ICURUN% %THT%
-
- at set THT=intltest
- at echo ==== %THT% =========================================================================
- at cd %ICU_ICUDIR%\source\test\intltest
-%INTLTEST_CMD% %INTLTEST_OPTS%
-
- at IF NOT ERRORLEVEL 1 GOTO OK_%THT%
- at set ICUFAILED=%ICUFAILED% %THT%
- at set ICUFAILCNT=1
-:OK_intltest
- at set ICURUN=%ICURUN% %THT%
-
- at set THT=iotest
- at echo ==== %THT% =========================================================================
- at cd %ICU_ICUDIR%\source\test\iotest
-%IOTEST_CMD% %IOTEST_OPTS%
-
- at IF NOT ERRORLEVEL 1 GOTO OK_%THT%
- at set ICUFAILED=%ICUFAILED% %THT%
- at set ICUFAILCNT=1
-:OK_IOTEST
- at set ICURUN=%ICURUN% %THT%
-
- at set THT=cintltst
- at echo ==== %THT% =========================================================================
- at cd %ICU_ICUDIR%\source\test\cintltst
-%CINTLTST_CMD% %CINTLTST_OPTS%
-
- at IF NOT ERRORLEVEL 1 GOTO OK_%THT%
- at set ICUFAILED=%ICUFAILED% %THT%
- at set ICUFAILCNT=1
-:OK_cintltst
- at set ICURUN=%ICURUN% %THT%
-
- at REM  (Layout is deprecated - this would require HarfBuzz)
- at REM  @set THT=letest
- at REM  @echo ==== %THT% =========================================================================
- at REM  @cd %ICU_ICUDIR%\source\test\letest
- at REM  %LETST_CMD% %LETEST_OPTS%
-
- at REM  @IF NOT ERRORLEVEL 1 GOTO OK_%THT%
- at REM  @set ICUFAILED=%ICUFAILED% %THT%
- at REM  @set ICUFAILCNT=1
- at REM  :OK_letest
- at REM  @set ICURUN=%ICURUN% %THT%
-
- at echo off
-
-REM clean up
-set PATH=%ICU_OPATH%
-REM unset ICU_OPATH
-popd
-
- at REM done
-
-echo -
-echo -
-echo -
-echo ============================================================
-echo Summary: ICU in %ICU_ICUDIR%  arch=%ICU_ARCH% type=%ICU_DBRL%
-echo -
-echo Tests Run    : %ICURUN%
-
-if %ICUFAILCNT% == 0 (
-	echo " - All Passed!"
-	exit /b 0
-)
-echo Failing Tests: %ICUFAILED%
-echo -
-echo FAILED!
-
-exit /b 1
+ at echo off
+REM Copyright (C) 2016 and later: Unicode, Inc. and others.
+REM License & terms of use: http://www.unicode.org/copyright.html
+REM  ********************************************************************
+REM  * COPYRIGHT:
+REM  * Copyright (c) 2010-2014, International Business Machines Corporation
+REM  * and others. All Rights Reserved.
+REM  ********************************************************************
+
+set ICU_ARCH=%1
+set ICU_DBRL=%2
+
+if "%1" == "" (
+echo Usage: %0 "x86 or x64"  "Debug or Release"
+exit /b 1
+)
+
+if "%2" == "" (
+echo Usage: %0 %1 "Debug or Release"
+exit /b 1
+)
+
+set ICU_OPATH=%PATH%
+
+set ICU_ICUDIR="%~dp0"\..\..
+
+if "%ICU_ARCH%" == "x64" (
+set ICU_BINDIR=%~dp0\..\..\bin64
+) else (
+set ICU_BINDIR=%~dp0\..\..\bin
+)
+
+set PATH=%ICU_BINDIR%;%PATH%
+
+echo testing ICU in %ICU_ICUDIR%  arch=%ICU_ARCH% type=%ICU_DBRL%
+pushd %ICU_ICUDIR%
+
+ at rem factor these out
+set ICUINFO_CMD=%ICU_ICUDIR%\source\tools\icuinfo\%ICU_ARCH%\%ICU_DBRL%\icuinfo.exe
+set INTLTEST_CMD=%ICU_ICUDIR%\source\test\intltest\%ICU_ARCH%\%ICU_DBRL%\intltest.exe
+set IOTEST_CMD=%ICU_ICUDIR%\source\test\iotest\%ICU_ARCH%\%ICU_DBRL%\iotest.exe
+set CINTLTST_CMD=%ICU_ICUDIR%\source\test\cintltst\%ICU_ARCH%\%ICU_DBRL%\cintltst.exe
+set LETEST_CMD=%ICU_ICUDIR%\source\test\letest\%ICU_ARCH%\%ICU_DBRL%\letest.exe
+
+set ICUFAILED=
+set ICURUN=
+set ICUFAILCNT=0
+
+ at echo on
+
+ at set THT=icuinfo
+ at echo ==== %THT% =========================================================================
+%ICUINFO_CMD% %ICUINFO_OPTS%
+
+ at IF NOT ERRORLEVEL 1 GOTO OK_%THT%
+ at set ICUFAILED=%ICUFAILED% %THT%
+ at set ICUFAILCNT=1
+:OK_icuinfo
+ at set ICURUN=%ICURUN% %THT%
+
+ at set THT=intltest
+ at echo ==== %THT% =========================================================================
+ at cd %ICU_ICUDIR%\source\test\intltest
+%INTLTEST_CMD% %INTLTEST_OPTS%
+
+ at IF NOT ERRORLEVEL 1 GOTO OK_%THT%
+ at set ICUFAILED=%ICUFAILED% %THT%
+ at set ICUFAILCNT=1
+:OK_intltest
+ at set ICURUN=%ICURUN% %THT%
+
+ at set THT=iotest
+ at echo ==== %THT% =========================================================================
+ at cd %ICU_ICUDIR%\source\test\iotest
+%IOTEST_CMD% %IOTEST_OPTS%
+
+ at IF NOT ERRORLEVEL 1 GOTO OK_%THT%
+ at set ICUFAILED=%ICUFAILED% %THT%
+ at set ICUFAILCNT=1
+:OK_IOTEST
+ at set ICURUN=%ICURUN% %THT%
+
+ at set THT=cintltst
+ at echo ==== %THT% =========================================================================
+ at cd %ICU_ICUDIR%\source\test\cintltst
+%CINTLTST_CMD% %CINTLTST_OPTS%
+
+ at IF NOT ERRORLEVEL 1 GOTO OK_%THT%
+ at set ICUFAILED=%ICUFAILED% %THT%
+ at set ICUFAILCNT=1
+:OK_cintltst
+ at set ICURUN=%ICURUN% %THT%
+
+ at REM  (Layout is deprecated - this would require HarfBuzz)
+ at REM  @set THT=letest
+ at REM  @echo ==== %THT% =========================================================================
+ at REM  @cd %ICU_ICUDIR%\source\test\letest
+ at REM  %LETST_CMD% %LETEST_OPTS%
+
+ at REM  @IF NOT ERRORLEVEL 1 GOTO OK_%THT%
+ at REM  @set ICUFAILED=%ICUFAILED% %THT%
+ at REM  @set ICUFAILCNT=1
+ at REM  :OK_letest
+ at REM  @set ICURUN=%ICURUN% %THT%
+
+ at echo off
+
+REM clean up
+set PATH=%ICU_OPATH%
+REM unset ICU_OPATH
+popd
+
+ at REM done
+
+echo -
+echo -
+echo -
+echo ============================================================
+echo Summary: ICU in %ICU_ICUDIR%  arch=%ICU_ARCH% type=%ICU_DBRL%
+echo -
+echo Tests Run    : %ICURUN%
+
+if %ICUFAILCNT% == 0 (
+	echo " - All Passed!"
+	exit /b 0
+)
+echo Failing Tests: %ICUFAILED%
+echo -
+echo FAILED!
+
+exit /b 1

Modified: trunk/Build/source/libs/icu/icu-src/source/common/Makefile.in
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/Makefile.in	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/Makefile.in	2018-01-12 18:35:28 UTC (rev 46290)
@@ -89,11 +89,12 @@
 resource.o uresbund.o ures_cnv.o uresdata.o resbund.o resbund_cnv.o \
 ucurr.o \
 messagepattern.o ucat.o locmap.o uloc.o locid.o locutil.o locavailable.o locdispnames.o locdspnm.o loclikely.o locresdata.o \
-bytestream.o stringpiece.o \
+bytestream.o stringpiece.o bytesinkutil.o \
 stringtriebuilder.o bytestriebuilder.o \
 bytestrie.o bytestrieiterator.o \
 ucharstrie.o ucharstriebuilder.o ucharstrieiterator.o \
 dictionarydata.o \
+edits.o \
 appendable.o ustr_cnv.o unistr_cnv.o unistr.o unistr_case.o unistr_props.o \
 utf_impl.o ustring.o ustrcase.o ucasemap.o ucasemap_titlecase_brkiter.o cstring.o ustrfmt.o ustrtrns.o ustr_wcs.o utext.o \
 unistr_case_locale.o ustrcase_locale.o unistr_titlecase_brkiter.o ustr_titlecase_brkiter.o \
@@ -103,7 +104,7 @@
 uscript.o uscript_props.o usc_impl.o unames.o \
 utrie.o utrie2.o utrie2_builder.o bmpset.o unisetspan.o uset_props.o uniset_props.o uniset_closure.o uset.o uniset.o usetiter.o ruleiter.o caniter.o unifilt.o unifunct.o \
 uarrsort.o brkiter.o ubrk.o brkeng.o dictbe.o filteredbrk.o \
-rbbi.o rbbidata.o rbbinode.o rbbirb.o rbbiscan.o rbbisetb.o rbbistbl.o rbbitblb.o \
+rbbi.o rbbidata.o rbbinode.o rbbirb.o rbbiscan.o rbbisetb.o rbbistbl.o rbbitblb.o rbbi_cache.o \
 serv.o servnotf.o servls.o servlk.o servlkf.o servrbf.o servslkf.o \
 uidna.o usprep.o uts46.o punycode.o \
 util.o util_props.o parsepos.o locbased.o cwchar.o wintz.o dtintrv.o ucnvsel.o propsvec.o \

Modified: trunk/Build/source/libs/icu/icu-src/source/common/appendable.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/appendable.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/appendable.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 *******************************************************************************
@@ -6,7 +6,7 @@
 *   Corporation and others.  All Rights Reserved.
 *******************************************************************************
 *   file name:  appendable.cpp
-*   encoding:   US-ASCII
+*   encoding:   UTF-8
 *   tab size:   8 (not used)
 *   indentation:4
 *

Modified: trunk/Build/source/libs/icu/icu-src/source/common/bmpset.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/bmpset.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/bmpset.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 ******************************************************************************
@@ -8,7 +8,7 @@
 *
 ******************************************************************************
 *   file name:  bmpset.cpp
-*   encoding:   US-ASCII
+*   encoding:   UTF-8
 *   tab size:   8 (not used)
 *   indentation:4
 *
@@ -28,7 +28,7 @@
 
 BMPSet::BMPSet(const int32_t *parentList, int32_t parentListLength) :
         list(parentList), listLength(parentListLength) {
-    uprv_memset(asciiBytes, 0, sizeof(asciiBytes));
+    uprv_memset(latin1Contains, 0, sizeof(latin1Contains));
     uprv_memset(table7FF, 0, sizeof(table7FF));
     uprv_memset(bmpBlockBits, 0, sizeof(bmpBlockBits));
 
@@ -45,6 +45,7 @@
         list4kStarts[i]=findCodePoint(i<<12, list4kStarts[i-1], listLength-1);
     }
     list4kStarts[0x11]=listLength-1;
+    containsFFFD=containsSlow(0xfffd, list4kStarts[0xf], list4kStarts[0x10]);
 
     initBits();
     overrideIllegal();
@@ -51,8 +52,9 @@
 }
 
 BMPSet::BMPSet(const BMPSet &otherBMPSet, const int32_t *newParentList, int32_t newParentListLength) :
+        containsFFFD(otherBMPSet.containsFFFD),
         list(newParentList), listLength(newParentListLength) {
-    uprv_memcpy(asciiBytes, otherBMPSet.asciiBytes, sizeof(asciiBytes));
+    uprv_memcpy(latin1Contains, otherBMPSet.latin1Contains, sizeof(latin1Contains));
     uprv_memcpy(table7FF, otherBMPSet.table7FF, sizeof(table7FF));
     uprv_memcpy(bmpBlockBits, otherBMPSet.bmpBlockBits, sizeof(bmpBlockBits));
     uprv_memcpy(list4kStarts, otherBMPSet.list4kStarts, sizeof(list4kStarts));
@@ -120,7 +122,7 @@
     UChar32 start, limit;
     int32_t listIndex=0;
 
-    // Set asciiBytes[].
+    // Set latin1Contains[].
     do {
         start=list[listIndex++];
         if(listIndex<listLength) {
@@ -128,14 +130,31 @@
         } else {
             limit=0x110000;
         }
-        if(start>=0x80) {
+        if(start>=0x100) {
             break;
         }
         do {
-            asciiBytes[start++]=1;
-        } while(start<limit && start<0x80);
-    } while(limit<=0x80);
+            latin1Contains[start++]=1;
+        } while(start<limit && start<0x100);
+    } while(limit<=0x100);
 
+    // Find the first range overlapping with (or after) 80..FF again,
+    // to include them in table7FF as well.
+    for(listIndex=0;;) {
+        start=list[listIndex++];
+        if(listIndex<listLength) {
+            limit=list[listIndex++];
+        } else {
+            limit=0x110000;
+        }
+        if(limit>0x80) {
+            if(start<0x80) {
+                start=0x80;
+            }
+            break;
+        }
+    }
+
     // Set table7FF[].
     while(start<0x800) {
         set32x64Bits(table7FF, start, limit<=0x800 ? limit : 0x800);
@@ -204,7 +223,7 @@
  * for faster validity checking at runtime.
  * No need to set 0 values where they were reset to 0 in the constructor
  * and not modified by initBits().
- * (asciiBytes[] trail bytes, table7FF[] 0..7F, bmpBlockBits[] 0..7FF)
+ * (table7FF[] 0..7F, bmpBlockBits[] 0..7FF)
  * Need to set 0 values for surrogates D800..DFFF.
  */
 void BMPSet::overrideIllegal() {
@@ -211,12 +230,7 @@
     uint32_t bits, mask;
     int32_t i;
 
-    if(containsSlow(0xfffd, list4kStarts[0xf], list4kStarts[0x10])) {
-        // contains(FFFD)==TRUE
-        for(i=0x80; i<0xc0; ++i) {
-            asciiBytes[i]=1;
-        }
-
+    if(containsFFFD) {
         bits=3;                 // Lead bytes 0xC0 and 0xC1.
         for(i=0; i<64; ++i) {
             table7FF[i]|=bits;
@@ -233,7 +247,6 @@
             bmpBlockBits[i]=(bmpBlockBits[i]&mask)|bits;
         }
     } else {
-        // contains(FFFD)==FALSE
         mask=~(0x10001<<0xd);   // Lead byte 0xED.
         for(i=32; i<64; ++i) {  // Second half of 4k block.
             bmpBlockBits[i]&=mask;
@@ -277,8 +290,8 @@
 
 UBool
 BMPSet::contains(UChar32 c) const {
-    if((uint32_t)c<=0x7f) {
-        return (UBool)asciiBytes[c];
+    if((uint32_t)c<=0xff) {
+        return (UBool)latin1Contains[c];
     } else if((uint32_t)c<=0x7ff) {
         return (UBool)((table7FF[c&0x3f]&((uint32_t)1<<(c>>6)))!=0);
     } else if((uint32_t)c<0xd800 || (c>=0xe000 && c<=0xffff)) {
@@ -314,8 +327,8 @@
         // span
         do {
             c=*s;
-            if(c<=0x7f) {
-                if(!asciiBytes[c]) {
+            if(c<=0xff) {
+                if(!latin1Contains[c]) {
                     break;
                 }
             } else if(c<=0x7ff) {
@@ -354,8 +367,8 @@
         // span not
         do {
             c=*s;
-            if(c<=0x7f) {
-                if(asciiBytes[c]) {
+            if(c<=0xff) {
+                if(latin1Contains[c]) {
                     break;
                 }
             } else if(c<=0x7ff) {
@@ -403,8 +416,8 @@
         // span
         for(;;) {
             c=*(--limit);
-            if(c<=0x7f) {
-                if(!asciiBytes[c]) {
+            if(c<=0xff) {
+                if(!latin1Contains[c]) {
                     break;
                 }
             } else if(c<=0x7ff) {
@@ -446,8 +459,8 @@
         // span not
         for(;;) {
             c=*(--limit);
-            if(c<=0x7f) {
-                if(asciiBytes[c]) {
+            if(c<=0xff) {
+                if(latin1Contains[c]) {
                     break;
                 }
             } else if(c<=0x7ff) {
@@ -497,22 +510,22 @@
 BMPSet::spanUTF8(const uint8_t *s, int32_t length, USetSpanCondition spanCondition) const {
     const uint8_t *limit=s+length;
     uint8_t b=*s;
-    if((int8_t)b>=0) {
+    if(U8_IS_SINGLE(b)) {
         // Initial all-ASCII span.
         if(spanCondition) {
             do {
-                if(!asciiBytes[b] || ++s==limit) {
+                if(!latin1Contains[b] || ++s==limit) {
                     return s;
                 }
                 b=*s;
-            } while((int8_t)b>=0);
+            } while(U8_IS_SINGLE(b));
         } else {
             do {
-                if(asciiBytes[b] || ++s==limit) {
+                if(latin1Contains[b] || ++s==limit) {
                     return s;
                 }
                 b=*s;
-            } while((int8_t)b>=0);
+            } while(U8_IS_SINGLE(b));
         }
         length=(int32_t)(limit-s);
     }
@@ -540,13 +553,13 @@
             // single trail byte, check for preceding 3- or 4-byte lead byte
             if(length>=2 && (b=*(limit-2))>=0xe0) {
                 limit-=2;
-                if(asciiBytes[0x80]!=spanCondition) {
+                if(containsFFFD!=spanCondition) {
                     limit0=limit;
                 }
             } else if(b<0xc0 && b>=0x80 && length>=3 && (b=*(limit-3))>=0xf0) {
                 // 4-byte lead byte with only two trail bytes
                 limit-=3;
-                if(asciiBytes[0x80]!=spanCondition) {
+                if(containsFFFD!=spanCondition) {
                     limit0=limit;
                 }
             }
@@ -553,7 +566,7 @@
         } else {
             // lead byte with no trail bytes
             --limit;
-            if(asciiBytes[0x80]!=spanCondition) {
+            if(containsFFFD!=spanCondition) {
                 limit0=limit;
             }
         }
@@ -563,26 +576,26 @@
 
     while(s<limit) {
         b=*s;
-        if(b<0xc0) {
-            // ASCII; or trail bytes with the result of contains(FFFD).
+        if(U8_IS_SINGLE(b)) {
+            // ASCII
             if(spanCondition) {
                 do {
-                    if(!asciiBytes[b]) {
+                    if(!latin1Contains[b]) {
                         return s;
                     } else if(++s==limit) {
                         return limit0;
                     }
                     b=*s;
-                } while(b<0xc0);
+                } while(U8_IS_SINGLE(b));
             } else {
                 do {
-                    if(asciiBytes[b]) {
+                    if(latin1Contains[b]) {
                         return s;
                     } else if(++s==limit) {
                         return limit0;
                     }
                     b=*s;
-                } while(b<0xc0);
+                } while(U8_IS_SINGLE(b));
             }
         }
         ++s;  // Advance past the lead byte.
@@ -619,7 +632,7 @@
                 UChar32 c=((UChar32)(b-0xf0)<<18)|((UChar32)t1<<12)|(t2<<6)|t3;
                 if( (   (0x10000<=c && c<=0x10ffff) ?
                             containsSlow(c, list4kStarts[0x10], list4kStarts[0x11]) :
-                            asciiBytes[0x80]
+                            containsFFFD
                     ) != spanCondition
                 ) {
                     return s-1;
@@ -627,8 +640,9 @@
                 s+=3;
                 continue;
             }
-        } else /* 0xc0<=b<0xe0 */ {
+        } else {
             if( /* handle U+0000..U+07FF inline */
+                b>=0xc0 &&
                 (t1=(uint8_t)(*s-0x80)) <= 0x3f
             ) {
                 if((USetSpanCondition)((table7FF[t1]&((uint32_t)1<<(b&0x1f)))!=0) != spanCondition) {
@@ -642,7 +656,7 @@
         // Give an illegal sequence the same value as the result of contains(FFFD).
         // Handle each byte of an illegal sequence separately to simplify the code;
         // no need to optimize error handling.
-        if(asciiBytes[0x80]!=spanCondition) {
+        if(containsFFFD!=spanCondition) {
             return s-1;
         }
     }
@@ -667,26 +681,26 @@
 
     do {
         b=s[--length];
-        if((int8_t)b>=0) {
+        if(U8_IS_SINGLE(b)) {
             // ASCII sub-span
             if(spanCondition) {
                 do {
-                    if(!asciiBytes[b]) {
+                    if(!latin1Contains[b]) {
                         return length+1;
                     } else if(length==0) {
                         return 0;
                     }
                     b=s[--length];
-                } while((int8_t)b>=0);
+                } while(U8_IS_SINGLE(b));
             } else {
                 do {
-                    if(asciiBytes[b]) {
+                    if(latin1Contains[b]) {
                         return length+1;
                     } else if(length==0) {
                         return 0;
                     }
                     b=s[--length];
-                } while((int8_t)b>=0);
+                } while(U8_IS_SINGLE(b));
             }
         }
 

Modified: trunk/Build/source/libs/icu/icu-src/source/common/bmpset.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/bmpset.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/bmpset.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 ******************************************************************************
@@ -8,7 +8,7 @@
 *
 ******************************************************************************
 *   file name:  bmpset.h
-*   encoding:   US-ASCII
+*   encoding:   UTF-8
 *   tab size:   8 (not used)
 *   indentation:4
 *
@@ -28,11 +28,12 @@
  * Helper class for frozen UnicodeSets, implements contains() and span()
  * optimized for BMP code points. Structured to be UTF-8-friendly.
  *
- * ASCII: Look up bytes.
+ * Latin-1: Look up bytes.
  * 2-byte characters: Bits organized vertically.
  * 3-byte characters: Use zero/one/mixed data per 64-block in U+0000..U+FFFF,
  *                    with mixed for illegal ranges.
- * Supplementary characters: Call contains() on the parent set.
+ * Supplementary characters: Binary search over
+ * the supplementary part of the parent set's inversion list.
  */
 class BMPSet : public UMemory {
 public:
@@ -96,13 +97,13 @@
     inline UBool containsSlow(UChar32 c, int32_t lo, int32_t hi) const;
 
     /*
-     * One byte per ASCII character, or trail byte in lead position.
-     * 0 or 1 for ASCII characters.
-     * The value for trail bytes is the result of contains(FFFD)
-     * for faster validity checking at runtime.
+     * One byte 0 or 1 per Latin-1 character.
      */
-    UBool asciiBytes[0xc0];
+    UBool latin1Contains[0x100];
 
+    /* TRUE if contains(U+FFFD). */
+    UBool containsFFFD;
+
     /*
      * One bit per code point from U+0000..U+07FF.
      * The bits are organized vertically; consecutive code points

Modified: trunk/Build/source/libs/icu/icu-src/source/common/brkeng.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/brkeng.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/brkeng.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
  ************************************************************************************
@@ -11,9 +11,6 @@
 
 #if !UCONFIG_NO_BREAK_ITERATION
 
-#include "brkeng.h"
-#include "cmemory.h"
-#include "dictbe.h"
 #include "unicode/uchar.h"
 #include "unicode/uniset.h"
 #include "unicode/chariter.h"
@@ -24,6 +21,10 @@
 #include "unicode/uscript.h"
 #include "unicode/ucharstrie.h"
 #include "unicode/bytestrie.h"
+
+#include "brkeng.h"
+#include "cmemory.h"
+#include "dictbe.h"
 #include "charstr.h"
 #include "dictionarydata.h"
 #include "mutex.h"
@@ -80,24 +81,16 @@
 
 int32_t
 UnhandledEngine::findBreaks( UText *text,
-                                 int32_t startPos,
-                                 int32_t endPos,
-                                 UBool reverse,
-                                 int32_t breakType,
-                                 UStack &/*foundBreaks*/ ) const {
+                             int32_t /* startPos */,
+                             int32_t endPos,
+                             int32_t breakType,
+                             UVector32 &/*foundBreaks*/ ) const {
     if (breakType >= 0 && breakType < UPRV_LENGTHOF(fHandled)) {
         UChar32 c = utext_current32(text); 
-        if (reverse) {
-            while((int32_t)utext_getNativeIndex(text) > startPos && fHandled[breakType]->contains(c)) {
-                c = utext_previous32(text);
-            }
+        while((int32_t)utext_getNativeIndex(text) < endPos && fHandled[breakType]->contains(c)) {
+            utext_next32(text);            // TODO:  recast loop to work with post-increment operations.
+            c = utext_current32(text);
         }
-        else {
-            while((int32_t)utext_getNativeIndex(text) < endPos && fHandled[breakType]->contains(c)) {
-                utext_next32(text);            // TODO:  recast loop to work with post-increment operations.
-                c = utext_current32(text);
-            }
-        }
     }
     return 0;
 }

Modified: trunk/Build/source/libs/icu/icu-src/source/common/brkeng.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/brkeng.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/brkeng.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /**
  ************************************************************************************
@@ -19,6 +19,7 @@
 
 class UnicodeSet;
 class UStack;
+class UVector32;
 class DictionaryMatcher;
 
 /*******************************************************************
@@ -67,18 +68,15 @@
   * is capable of handling.
   * @param startPos The start of the run within the supplied text.
   * @param endPos The end of the run within the supplied text.
-  * @param reverse Whether the caller is looking for breaks in a reverse
-  * direction.
   * @param breakType The type of break desired, or -1.
-  * @param foundBreaks An allocated C array of the breaks found, if any
+  * @param foundBreaks A Vector of int32_t to receive the breaks.
   * @return The number of breaks found.
   */
   virtual int32_t findBreaks( UText *text,
                               int32_t startPos,
                               int32_t endPos,
-                              UBool reverse,
                               int32_t breakType,
-                              UStack &foundBreaks ) const = 0;
+                              UVector32 &foundBreaks ) const = 0;
 
 };
 
@@ -192,8 +190,6 @@
   * is capable of handling.
   * @param startPos The start of the run within the supplied text.
   * @param endPos The end of the run within the supplied text.
-  * @param reverse Whether the caller is looking for breaks in a reverse
-  * direction.
   * @param breakType The type of break desired, or -1.
   * @param foundBreaks An allocated C array of the breaks found, if any
   * @return The number of breaks found.
@@ -201,9 +197,8 @@
   virtual int32_t findBreaks( UText *text,
                               int32_t startPos,
                               int32_t endPos,
-                              UBool reverse,
                               int32_t breakType,
-                              UStack &foundBreaks ) const;
+                              UVector32 &foundBreaks ) const;
 
  /**
   * <p>Tell the engine to handle a particular character and break type.</p>

Modified: trunk/Build/source/libs/icu/icu-src/source/common/brkiter.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/brkiter.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/brkiter.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 *******************************************************************************
@@ -195,7 +195,7 @@
 
 // ------------------------------------------
 //
-// Default constructor and destructor
+// Constructors, destructor and assignment operator
 //
 //-------------------------------------------
 
@@ -204,6 +204,19 @@
     *validLocale = *actualLocale = 0;
 }
 
+BreakIterator::BreakIterator(const BreakIterator &other) : UObject(other) {
+    uprv_strncpy(actualLocale, other.actualLocale, sizeof(actualLocale));
+    uprv_strncpy(validLocale, other.validLocale, sizeof(validLocale));
+}
+
+BreakIterator &BreakIterator::operator =(const BreakIterator &other) {
+    if (this != &other) {
+        uprv_strncpy(actualLocale, other.actualLocale, sizeof(actualLocale));
+        uprv_strncpy(validLocale, other.validLocale, sizeof(validLocale));
+    }
+    return *this;
+}
+
 BreakIterator::~BreakIterator()
 {
 }
@@ -265,7 +278,7 @@
 // defined in ucln_cmn.h
 U_NAMESPACE_END
 
-static icu::UInitOnce gInitOnce;
+static icu::UInitOnce gInitOnceBrkiter;
 static icu::ICULocaleService* gService = NULL;
 
 
@@ -280,7 +293,7 @@
         delete gService;
         gService = NULL;
     }
-    gInitOnce.reset();
+    gInitOnceBrkiter.reset();
 #endif
     return TRUE;
 }
@@ -296,7 +309,7 @@
 static ICULocaleService*
 getService(void)
 {
-    umtx_initOnce(gInitOnce, &initService);
+    umtx_initOnce(gInitOnceBrkiter, &initService);
     return gService;
 }
 
@@ -306,7 +319,7 @@
 static inline UBool
 hasService(void)
 {
-    return !gInitOnce.isReset() && getService() != NULL;
+    return !gInitOnceBrkiter.isReset() && getService() != NULL;
 }
 
 // -------------------------------------

Added: trunk/Build/source/libs/icu/icu-src/source/common/bytesinkutil.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/bytesinkutil.cpp	                        (rev 0)
+++ trunk/Build/source/libs/icu/icu-src/source/common/bytesinkutil.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -0,0 +1,123 @@
+// © 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+// bytesinkutil.cpp
+// created: 2017sep14 Markus W. Scherer
+
+#include "unicode/utypes.h"
+#include "unicode/bytestream.h"
+#include "unicode/edits.h"
+#include "unicode/stringoptions.h"
+#include "unicode/utf8.h"
+#include "unicode/utf16.h"
+#include "bytesinkutil.h"
+#include "cmemory.h"
+#include "uassert.h"
+
+U_NAMESPACE_BEGIN
+
+UBool
+ByteSinkUtil::appendChange(int32_t length, const char16_t *s16, int32_t s16Length,
+                           ByteSink &sink, Edits *edits, UErrorCode &errorCode) {
+    if (U_FAILURE(errorCode)) { return FALSE; }
+    char scratch[200];
+    int32_t s8Length = 0;
+    for (int32_t i = 0; i < s16Length;) {
+        int32_t capacity;
+        int32_t desiredCapacity = s16Length - i;
+        if (desiredCapacity < (INT32_MAX / 3)) {
+            desiredCapacity *= 3;  // max 3 UTF-8 bytes per UTF-16 code unit
+        } else if (desiredCapacity < (INT32_MAX / 2)) {
+            desiredCapacity *= 2;
+        } else {
+            desiredCapacity = INT32_MAX;
+        }
+        char *buffer = sink.GetAppendBuffer(U8_MAX_LENGTH, desiredCapacity,
+                                            scratch, UPRV_LENGTHOF(scratch), &capacity);
+        capacity -= U8_MAX_LENGTH - 1;
+        int32_t j = 0;
+        for (; i < s16Length && j < capacity;) {
+            UChar32 c;
+            U16_NEXT_UNSAFE(s16, i, c);
+            U8_APPEND_UNSAFE(buffer, j, c);
+        }
+        if (j > (INT32_MAX - s8Length)) {
+            errorCode = U_INDEX_OUTOFBOUNDS_ERROR;
+            return FALSE;
+        }
+        sink.Append(buffer, j);
+        s8Length += j;
+    }
+    if (edits != nullptr) {
+        edits->addReplace(length, s8Length);
+    }
+    return TRUE;
+}
+
+UBool
+ByteSinkUtil::appendChange(const uint8_t *s, const uint8_t *limit,
+                           const char16_t *s16, int32_t s16Length,
+                           ByteSink &sink, Edits *edits, UErrorCode &errorCode) {
+    if (U_FAILURE(errorCode)) { return FALSE; }
+    if ((limit - s) > INT32_MAX) {
+        errorCode = U_INDEX_OUTOFBOUNDS_ERROR;
+        return FALSE;
+    }
+    return appendChange((int32_t)(limit - s), s16, s16Length, sink, edits, errorCode);
+}
+
+void
+ByteSinkUtil::appendCodePoint(int32_t length, UChar32 c, ByteSink &sink, Edits *edits) {
+    char s8[U8_MAX_LENGTH];
+    int32_t s8Length = 0;
+    U8_APPEND_UNSAFE(s8, s8Length, c);
+    if (edits != nullptr) {
+        edits->addReplace(length, s8Length);
+    }
+    sink.Append(s8, s8Length);
+}
+
+namespace {
+
+// See unicode/utf8.h U8_APPEND_UNSAFE().
+inline uint8_t getTwoByteLead(UChar32 c) { return (uint8_t)((c >> 6) | 0xc0); }
+inline uint8_t getTwoByteTrail(UChar32 c) { return (uint8_t)((c & 0x3f) | 0x80); }
+
+}  // namespace
+
+void
+ByteSinkUtil::appendTwoBytes(UChar32 c, ByteSink &sink) {
+    U_ASSERT(0x80 <= c && c <= 0x7ff);  // 2-byte UTF-8
+    char s8[2] = { (char)getTwoByteLead(c), (char)getTwoByteTrail(c) };
+    sink.Append(s8, 2);
+}
+
+UBool
+ByteSinkUtil::appendUnchanged(const uint8_t *s, int32_t length,
+                              ByteSink &sink, uint32_t options, Edits *edits,
+                              UErrorCode &errorCode) {
+    if (U_FAILURE(errorCode)) { return FALSE; }
+    if (length > 0) {
+        if (edits != nullptr) {
+            edits->addUnchanged(length);
+        }
+        if ((options & U_OMIT_UNCHANGED_TEXT) == 0) {
+            sink.Append(reinterpret_cast<const char *>(s), length);
+        }
+    }
+    return TRUE;
+}
+
+UBool
+ByteSinkUtil::appendUnchanged(const uint8_t *s, const uint8_t *limit,
+                              ByteSink &sink, uint32_t options, Edits *edits,
+                              UErrorCode &errorCode) {
+    if (U_FAILURE(errorCode)) { return FALSE; }
+    if ((limit - s) > INT32_MAX) {
+        errorCode = U_INDEX_OUTOFBOUNDS_ERROR;
+        return FALSE;
+    }
+    return appendUnchanged(s, (int32_t)(limit - s), sink, options, edits, errorCode);
+}
+
+U_NAMESPACE_END


Property changes on: trunk/Build/source/libs/icu/icu-src/source/common/bytesinkutil.cpp
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Build/source/libs/icu/icu-src/source/common/bytesinkutil.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/bytesinkutil.h	                        (rev 0)
+++ trunk/Build/source/libs/icu/icu-src/source/common/bytesinkutil.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -0,0 +1,53 @@
+// © 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+// bytesinkutil.h
+// created: 2017sep14 Markus W. Scherer
+
+#include "unicode/utypes.h"
+#include "unicode/bytestream.h"
+#include "unicode/edits.h"
+#include "cmemory.h"
+#include "uassert.h"
+
+U_NAMESPACE_BEGIN
+
+class ByteSink;
+class Edits;
+
+class U_COMMON_API ByteSinkUtil {
+public:
+    ByteSinkUtil() = delete;  // all static
+
+    /** (length) bytes were mapped to valid (s16, s16Length). */
+    static UBool appendChange(int32_t length,
+                              const char16_t *s16, int32_t s16Length,
+                              ByteSink &sink, Edits *edits, UErrorCode &errorCode);
+
+    /** The bytes at [s, limit[ were mapped to valid (s16, s16Length). */
+    static UBool appendChange(const uint8_t *s, const uint8_t *limit,
+                              const char16_t *s16, int32_t s16Length,
+                              ByteSink &sink, Edits *edits, UErrorCode &errorCode);
+
+    /** (length) bytes were mapped/changed to valid code point c. */
+    static void appendCodePoint(int32_t length, UChar32 c, ByteSink &sink, Edits *edits = nullptr);
+
+    /** The few bytes at [src, nextSrc[ were mapped/changed to valid code point c. */
+    static inline void appendCodePoint(const uint8_t *src, const uint8_t *nextSrc, UChar32 c,
+                                       ByteSink &sink, Edits *edits = nullptr) {
+        appendCodePoint((int32_t)(nextSrc - src), c, sink, edits);
+    }
+
+    /** Append the two-byte character (U+0080..U+07FF). */
+    static void appendTwoBytes(UChar32 c, ByteSink &sink);
+
+    static UBool appendUnchanged(const uint8_t *s, int32_t length,
+                                 ByteSink &sink, uint32_t options, Edits *edits,
+                                 UErrorCode &errorCode);
+
+    static UBool appendUnchanged(const uint8_t *s, const uint8_t *limit,
+                                 ByteSink &sink, uint32_t options, Edits *edits,
+                                 UErrorCode &errorCode);
+};
+
+U_NAMESPACE_END


Property changes on: trunk/Build/source/libs/icu/icu-src/source/common/bytesinkutil.h
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Build/source/libs/icu/icu-src/source/common/bytestream.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/bytestream.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/bytestream.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 // Copyright (C) 2009-2011, International Business Machines
 // Corporation and others. All Rights Reserved.
@@ -45,6 +45,12 @@
   if (n <= 0) {
     return;
   }
+  if (n > (INT32_MAX - appended_)) {
+    // TODO: Report as integer overflow, not merely buffer overflow.
+    appended_ = INT32_MAX;
+    overflowed_ = TRUE;
+    return;
+  }
   appended_ += n;
   int32_t available = capacity_ - size_;
   if (n > available) {

Modified: trunk/Build/source/libs/icu/icu-src/source/common/bytestrie.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/bytestrie.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/bytestrie.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 *******************************************************************************
@@ -6,7 +6,7 @@
 *   Corporation and others.  All Rights Reserved.
 *******************************************************************************
 *   file name:  bytestrie.cpp
-*   encoding:   US-ASCII
+*   encoding:   UTF-8
 *   tab size:   8 (not used)
 *   indentation:4
 *

Modified: trunk/Build/source/libs/icu/icu-src/source/common/bytestriebuilder.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/bytestriebuilder.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/bytestriebuilder.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 *******************************************************************************
@@ -6,7 +6,7 @@
 *   Corporation and others.  All Rights Reserved.
 *******************************************************************************
 *   file name:  bytestriebuilder.cpp
-*   encoding:   US-ASCII
+*   encoding:   UTF-8
 *   tab size:   8 (not used)
 *   indentation:4
 *

Modified: trunk/Build/source/libs/icu/icu-src/source/common/bytestrieiterator.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/bytestrieiterator.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/bytestrieiterator.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 *******************************************************************************
@@ -6,7 +6,7 @@
 *   Corporation and others.  All Rights Reserved.
 *******************************************************************************
 *   file name:  bytestrieiterator.cpp
-*   encoding:   US-ASCII
+*   encoding:   UTF-8
 *   tab size:   8 (not used)
 *   indentation:4
 *

Modified: trunk/Build/source/libs/icu/icu-src/source/common/caniter.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/caniter.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/caniter.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
  *****************************************************************************
@@ -311,12 +311,12 @@
 
         // see what the permutations of the characters before and after this one are
         //Hashtable *subpermute = permute(source.substring(0,i) + source.substring(i + UTF16.getCharCount(cp)));
-        permute(subPermuteString.replace(i, U16_LENGTH(cp), NULL, 0), skipZeros, &subpermute, status);
+        permute(subPermuteString.remove(i, U16_LENGTH(cp)), skipZeros, &subpermute, status);
         /* Test for buffer overflows */
         if(U_FAILURE(status)) {
             return;
         }
-        // The upper replace is destructive. The question is do we have to make a copy, or we don't care about the contents 
+        // The upper remove is destructive. The question is do we have to make a copy, or we don't care about the contents 
         // of source at this point.
 
         // prefix this character to all of them
@@ -405,7 +405,7 @@
     //String[] finalResult = new String[result.size()];
     UnicodeString *finalResult = NULL;
     int32_t resultCount;
-    if((resultCount = result.count())) {
+    if((resultCount = result.count()) != 0) {
         finalResult = new UnicodeString[resultCount];
         if (finalResult == 0) {
             status = U_MEMORY_ALLOCATION_ERROR;

Modified: trunk/Build/source/libs/icu/icu-src/source/common/chariter.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/chariter.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/chariter.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 **********************************************************************

Modified: trunk/Build/source/libs/icu/icu-src/source/common/charstr.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/charstr.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/charstr.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 *******************************************************************************
@@ -6,7 +6,7 @@
 *   Corporation and others.  All Rights Reserved.
 *******************************************************************************
 *   file name:  charstr.cpp
-*   encoding:   US-ASCII
+*   encoding:   UTF-8
 *   tab size:   8 (not used)
 *   indentation:4
 *
@@ -15,6 +15,7 @@
 */
 
 #include "unicode/utypes.h"
+#include "unicode/putil.h"
 #include "charstr.h"
 #include "cmemory.h"
 #include "cstring.h"

Modified: trunk/Build/source/libs/icu/icu-src/source/common/charstr.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/charstr.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/charstr.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 **********************************************************************

Deleted: trunk/Build/source/libs/icu/icu-src/source/common/cmemory.c
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/cmemory.c	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/cmemory.c	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,162 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
-******************************************************************************
-*
-*   Copyright (C) 2002-2015, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*
-* File cmemory.c      ICU Heap allocation.
-*                     All ICU heap allocation, both for C and C++ new of ICU
-*                     class types, comes through these functions.
-*
-*                     If you have a need to replace ICU allocation, this is the
-*                     place to do it.
-*
-*                     Note that uprv_malloc(0) returns a non-NULL pointer, and
-*                     that a subsequent free of that pointer value is a NOP.
-*
-******************************************************************************
-*/
-#include "unicode/uclean.h"
-#include "cmemory.h"
-#include "putilimp.h"
-#include "uassert.h"
-#include <stdlib.h>
-
-/* uprv_malloc(0) returns a pointer to this read-only data. */
-static const int32_t zeroMem[] = {0, 0, 0, 0, 0, 0};
-
-/* Function Pointers for user-supplied heap functions  */
-static const void     *pContext;
-static UMemAllocFn    *pAlloc;
-static UMemReallocFn  *pRealloc;
-static UMemFreeFn     *pFree;
-
-#if U_DEBUG && defined(UPRV_MALLOC_COUNT)
-#include <stdio.h>
-static int n=0;
-static long b=0; 
-#endif
-
-#if U_DEBUG
-
-static char gValidMemorySink = 0;
-
-U_CAPI void uprv_checkValidMemory(const void *p, size_t n) {
-    /*
-     * Access the memory to ensure that it's all valid.
-     * Load and save a computed value to try to ensure that the compiler
-     * does not throw away the whole loop.
-     * A thread analyzer might complain about un-mutexed access to gValidMemorySink
-     * which is true but harmless because no one ever uses the value in gValidMemorySink.
-     */
-    const char *s = (const char *)p;
-    char c = gValidMemorySink;
-    size_t i;
-    U_ASSERT(p != NULL);
-    for(i = 0; i < n; ++i) {
-        c ^= s[i];
-    }
-    gValidMemorySink = c;
-}
-
-#endif  /* U_DEBUG */
-
-U_CAPI void * U_EXPORT2
-uprv_malloc(size_t s) {
-#if U_DEBUG && defined(UPRV_MALLOC_COUNT)
-#if 1
-  putchar('>');
-  fflush(stdout);
-#else
-  fprintf(stderr,"MALLOC\t#%d\t%ul bytes\t%ul total\n", ++n,s,(b+=s)); fflush(stderr);
-#endif
-#endif
-    if (s > 0) {
-        if (pAlloc) {
-            return (*pAlloc)(pContext, s);
-        } else {
-            return uprv_default_malloc(s);
-        }
-    } else {
-        return (void *)zeroMem;
-    }
-}
-
-U_CAPI void * U_EXPORT2
-uprv_realloc(void * buffer, size_t size) {
-#if U_DEBUG && defined(UPRV_MALLOC_COUNT)
-  putchar('~');
-  fflush(stdout);
-#endif
-    if (buffer == zeroMem) {
-        return uprv_malloc(size);
-    } else if (size == 0) {
-        if (pFree) {
-            (*pFree)(pContext, buffer);
-        } else {
-            uprv_default_free(buffer);
-        }
-        return (void *)zeroMem;
-    } else {
-        if (pRealloc) {
-            return (*pRealloc)(pContext, buffer, size);
-        } else {
-            return uprv_default_realloc(buffer, size);
-        }
-    }
-}
-
-U_CAPI void U_EXPORT2
-uprv_free(void *buffer) {
-#if U_DEBUG && defined(UPRV_MALLOC_COUNT)
-  putchar('<');
-  fflush(stdout);
-#endif
-    if (buffer != zeroMem) {
-        if (pFree) {
-            (*pFree)(pContext, buffer);
-        } else {
-            uprv_default_free(buffer);
-        }
-    }
-}
-
-U_CAPI void * U_EXPORT2
-uprv_calloc(size_t num, size_t size) {
-    void *mem = NULL;
-    size *= num;
-    mem = uprv_malloc(size);
-    if (mem) {
-        uprv_memset(mem, 0, size);
-    }
-    return mem;
-}
-
-U_CAPI void U_EXPORT2
-u_setMemoryFunctions(const void *context, UMemAllocFn *a, UMemReallocFn *r, UMemFreeFn *f,  UErrorCode *status)
-{
-    if (U_FAILURE(*status)) {
-        return;
-    }
-    if (a==NULL || r==NULL || f==NULL) {
-        *status = U_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-    pContext  = context;
-    pAlloc    = a;
-    pRealloc  = r;
-    pFree     = f;
-}
-
-
-U_CFUNC UBool cmemory_cleanup(void) {
-    pContext   = NULL;
-    pAlloc     = NULL;
-    pRealloc   = NULL;
-    pFree      = NULL;
-    return TRUE;
-}

Added: trunk/Build/source/libs/icu/icu-src/source/common/cmemory.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/cmemory.cpp	                        (rev 0)
+++ trunk/Build/source/libs/icu/icu-src/source/common/cmemory.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -0,0 +1,162 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+******************************************************************************
+*
+*   Copyright (C) 2002-2015, International Business Machines
+*   Corporation and others.  All Rights Reserved.
+*
+******************************************************************************
+*
+* File cmemory.c      ICU Heap allocation.
+*                     All ICU heap allocation, both for C and C++ new of ICU
+*                     class types, comes through these functions.
+*
+*                     If you have a need to replace ICU allocation, this is the
+*                     place to do it.
+*
+*                     Note that uprv_malloc(0) returns a non-NULL pointer, and
+*                     that a subsequent free of that pointer value is a NOP.
+*
+******************************************************************************
+*/
+#include "unicode/uclean.h"
+#include "cmemory.h"
+#include "putilimp.h"
+#include "uassert.h"
+#include <stdlib.h>
+
+/* uprv_malloc(0) returns a pointer to this read-only data. */
+static const int32_t zeroMem[] = {0, 0, 0, 0, 0, 0};
+
+/* Function Pointers for user-supplied heap functions  */
+static const void     *pContext;
+static UMemAllocFn    *pAlloc;
+static UMemReallocFn  *pRealloc;
+static UMemFreeFn     *pFree;
+
+#if U_DEBUG && defined(UPRV_MALLOC_COUNT)
+#include <stdio.h>
+static int n=0;
+static long b=0; 
+#endif
+
+#if U_DEBUG
+
+static char gValidMemorySink = 0;
+
+U_CAPI void uprv_checkValidMemory(const void *p, size_t n) {
+    /*
+     * Access the memory to ensure that it's all valid.
+     * Load and save a computed value to try to ensure that the compiler
+     * does not throw away the whole loop.
+     * A thread analyzer might complain about un-mutexed access to gValidMemorySink
+     * which is true but harmless because no one ever uses the value in gValidMemorySink.
+     */
+    const char *s = (const char *)p;
+    char c = gValidMemorySink;
+    size_t i;
+    U_ASSERT(p != NULL);
+    for(i = 0; i < n; ++i) {
+        c ^= s[i];
+    }
+    gValidMemorySink = c;
+}
+
+#endif  /* U_DEBUG */
+
+U_CAPI void * U_EXPORT2
+uprv_malloc(size_t s) {
+#if U_DEBUG && defined(UPRV_MALLOC_COUNT)
+#if 1
+  putchar('>');
+  fflush(stdout);
+#else
+  fprintf(stderr,"MALLOC\t#%d\t%ul bytes\t%ul total\n", ++n,s,(b+=s)); fflush(stderr);
+#endif
+#endif
+    if (s > 0) {
+        if (pAlloc) {
+            return (*pAlloc)(pContext, s);
+        } else {
+            return uprv_default_malloc(s);
+        }
+    } else {
+        return (void *)zeroMem;
+    }
+}
+
+U_CAPI void * U_EXPORT2
+uprv_realloc(void * buffer, size_t size) {
+#if U_DEBUG && defined(UPRV_MALLOC_COUNT)
+  putchar('~');
+  fflush(stdout);
+#endif
+    if (buffer == zeroMem) {
+        return uprv_malloc(size);
+    } else if (size == 0) {
+        if (pFree) {
+            (*pFree)(pContext, buffer);
+        } else {
+            uprv_default_free(buffer);
+        }
+        return (void *)zeroMem;
+    } else {
+        if (pRealloc) {
+            return (*pRealloc)(pContext, buffer, size);
+        } else {
+            return uprv_default_realloc(buffer, size);
+        }
+    }
+}
+
+U_CAPI void U_EXPORT2
+uprv_free(void *buffer) {
+#if U_DEBUG && defined(UPRV_MALLOC_COUNT)
+  putchar('<');
+  fflush(stdout);
+#endif
+    if (buffer != zeroMem) {
+        if (pFree) {
+            (*pFree)(pContext, buffer);
+        } else {
+            uprv_default_free(buffer);
+        }
+    }
+}
+
+U_CAPI void * U_EXPORT2
+uprv_calloc(size_t num, size_t size) {
+    void *mem = NULL;
+    size *= num;
+    mem = uprv_malloc(size);
+    if (mem) {
+        uprv_memset(mem, 0, size);
+    }
+    return mem;
+}
+
+U_CAPI void U_EXPORT2
+u_setMemoryFunctions(const void *context, UMemAllocFn *a, UMemReallocFn *r, UMemFreeFn *f,  UErrorCode *status)
+{
+    if (U_FAILURE(*status)) {
+        return;
+    }
+    if (a==NULL || r==NULL || f==NULL) {
+        *status = U_ILLEGAL_ARGUMENT_ERROR;
+        return;
+    }
+    pContext  = context;
+    pAlloc    = a;
+    pRealloc  = r;
+    pFree     = f;
+}
+
+
+U_CFUNC UBool cmemory_cleanup(void) {
+    pContext   = NULL;
+    pAlloc     = NULL;
+    pRealloc   = NULL;
+    pFree      = NULL;
+    return TRUE;
+}


Property changes on: trunk/Build/source/libs/icu/icu-src/source/common/cmemory.cpp
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Build/source/libs/icu/icu-src/source/common/cmemory.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/cmemory.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/cmemory.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 ******************************************************************************
@@ -162,7 +162,6 @@
      * @param p simple pointer to an array of T items that is adopted
      */
     explicit LocalMemory(T *p=NULL) : LocalPointerBase<T>(p) {}
-#if U_HAVE_RVALUE_REFERENCES
     /**
      * Move constructor, leaves src with isNull().
      * @param src source smart pointer
@@ -170,7 +169,6 @@
     LocalMemory(LocalMemory<T> &&src) U_NOEXCEPT : LocalPointerBase<T>(src.ptr) {
         src.ptr=NULL;
     }
-#endif
     /**
      * Destructor deletes the memory it owns.
      */
@@ -177,7 +175,6 @@
     ~LocalMemory() {
         uprv_free(LocalPointerBase<T>::ptr);
     }
-#if U_HAVE_RVALUE_REFERENCES
     /**
      * Move assignment operator, leaves src with isNull().
      * The behavior is undefined if *this and src are the same object.
@@ -187,7 +184,6 @@
     LocalMemory<T> &operator=(LocalMemory<T> &&src) U_NOEXCEPT {
         return moveFrom(src);
     }
-#endif
     /**
      * Move assignment, leaves src with isNull().
      * The behavior is undefined if *this and src are the same object.
@@ -313,6 +309,14 @@
      */
     MaybeStackArray() : ptr(stackArray), capacity(stackCapacity), needToRelease(FALSE) {}
     /**
+     * Automatically allocates the heap array if the argument is larger than the stack capacity.
+     * Intended for use when an approximate capacity is known at compile time but the true
+     * capacity is not known until runtime.
+     */
+    MaybeStackArray(int32_t newCapacity) : MaybeStackArray() {
+        if (capacity < newCapacity) { resize(newCapacity); }
+    };
+    /**
      * Destructor deletes the array (if owned).
      */
     ~MaybeStackArray() { releaseArray(); }

Modified: trunk/Build/source/libs/icu/icu-src/source/common/common.vcxproj
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/common.vcxproj	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/common.vcxproj	2018-01-12 18:35:28 UTC (rev 46290)
@@ -20,6 +20,7 @@
   </ItemGroup>
   <PropertyGroup Label="Globals">
     <ProjectGuid>{73C0A65B-D1F2-4DE1-B3A6-15DAD2C23F3D}</ProjectGuid>
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
@@ -102,6 +103,7 @@
       <ProgramDataBaseFileName>.\x86\Release/</ProgramDataBaseFileName>
       <WarningLevel>Level3</WarningLevel>
       <SuppressStartupBanner>true</SuppressStartupBanner>
+      <AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@@ -108,7 +110,7 @@
       <Culture>0x0409</Culture>
     </ResourceCompile>
     <Link>
-      <OutputFile>..\..\bin\icuuc58.dll</OutputFile>
+      <OutputFile>..\..\bin\icuuc60.dll</OutputFile>
       <SuppressStartupBanner>true</SuppressStartupBanner>
       <ProgramDatabaseFile>.\..\..\lib\icuuc.pdb</ProgramDatabaseFile>
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
@@ -143,6 +145,7 @@
       <WarningLevel>Level3</WarningLevel>
       <SuppressStartupBanner>true</SuppressStartupBanner>
       <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+      <AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@@ -149,7 +152,7 @@
       <Culture>0x0409</Culture>
     </ResourceCompile>
     <Link>
-      <OutputFile>..\..\bin\icuuc58d.dll</OutputFile>
+      <OutputFile>..\..\bin\icuuc60d.dll</OutputFile>
       <SuppressStartupBanner>true</SuppressStartupBanner>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <ProgramDatabaseFile>.\..\..\lib\icuucd.pdb</ProgramDatabaseFile>
@@ -181,6 +184,7 @@
       <ProgramDataBaseFileName>.\x64\Release/</ProgramDataBaseFileName>
       <WarningLevel>Level3</WarningLevel>
       <SuppressStartupBanner>true</SuppressStartupBanner>
+      <AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@@ -187,7 +191,7 @@
       <Culture>0x0409</Culture>
     </ResourceCompile>
     <Link>
-      <OutputFile>..\..\bin64\icuuc58.dll</OutputFile>
+      <OutputFile>..\..\bin64\icuuc60.dll</OutputFile>
       <SuppressStartupBanner>true</SuppressStartupBanner>
       <ProgramDatabaseFile>.\..\..\lib64\icuuc.pdb</ProgramDatabaseFile>
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
@@ -220,6 +224,7 @@
       <WarningLevel>Level3</WarningLevel>
       <SuppressStartupBanner>true</SuppressStartupBanner>
       <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions>
     </ClCompile>
     <ResourceCompile>
       <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@@ -226,7 +231,7 @@
       <Culture>0x0409</Culture>
     </ResourceCompile>
     <Link>
-      <OutputFile>..\..\bin64\icuuc58d.dll</OutputFile>
+      <OutputFile>..\..\bin64\icuuc60d.dll</OutputFile>
       <SuppressStartupBanner>true</SuppressStartupBanner>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <ProgramDatabaseFile>.\..\..\lib64\icuucd.pdb</ProgramDatabaseFile>
@@ -237,11 +242,11 @@
   </ItemDefinitionGroup>
   <ItemGroup>
     <ClCompile Include="filteredbrk.cpp" />
-    <ClCompile Include="ubidi.c" />
-    <ClCompile Include="ubiditransform.c" />
-    <ClCompile Include="ubidi_props.c" />
-    <ClCompile Include="ubidiln.c" />
-    <ClCompile Include="ubidiwrt.c" />
+    <ClCompile Include="ubidi.cpp" />
+    <ClCompile Include="ubiditransform.cpp" />
+    <ClCompile Include="ubidi_props.cpp" />
+    <ClCompile Include="ubidiln.cpp" />
+    <ClCompile Include="ubidiwrt.cpp" />
     <ClCompile Include="uloc_keytype.cpp" />
     <ClCompile Include="ushape.cpp" />
     <ClCompile Include="brkeng.cpp">
@@ -263,6 +268,8 @@
     </ClCompile>
     <ClCompile Include="rbbitblb.cpp">
     </ClCompile>
+    <ClCompile Include="rbbi_cache.cpp">
+    </ClCompile>
     <ClCompile Include="dictionarydata.cpp" />
     <ClCompile Include="ubrk.cpp" />
     <ClCompile Include="ucol_swp.cpp">
@@ -271,12 +278,12 @@
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\i18n;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\i18n;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
     </ClCompile>
-    <ClCompile Include="propsvec.c" />
-    <ClCompile Include="uarrsort.c" />
-    <ClCompile Include="uenum.c" />
-    <ClCompile Include="uhash.c" />
+    <ClCompile Include="propsvec.cpp" />
+    <ClCompile Include="uarrsort.cpp" />
+    <ClCompile Include="uenum.cpp" />
+    <ClCompile Include="uhash.cpp" />
     <ClCompile Include="uhash_us.cpp" />
-    <ClCompile Include="ulist.c" />
+    <ClCompile Include="ulist.cpp" />
     <ClCompile Include="ustack.cpp" />
     <ClCompile Include="ustrenum.cpp" />
     <ClCompile Include="utrie.cpp" />
@@ -286,8 +293,8 @@
     <ClCompile Include="uvectr32.cpp" />
     <ClCompile Include="uvectr64.cpp" />
     <ClCompile Include="errorcode.cpp" />
-    <ClCompile Include="icudataver.c" />
-    <ClCompile Include="locmap.c">
+    <ClCompile Include="icudataver.cpp" />
+    <ClCompile Include="locmap.cpp">
       <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</DisableLanguageExtensions>
       <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DisableLanguageExtensions>
       <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</DisableLanguageExtensions>
@@ -299,7 +306,7 @@
       <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</DisableLanguageExtensions>
       <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DisableLanguageExtensions>
     </ClCompile>
-    <ClCompile Include="umath.c" />
+    <ClCompile Include="umath.cpp" />
     <ClCompile Include="umutex.cpp">
       <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</DisableLanguageExtensions>
       <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DisableLanguageExtensions>
@@ -306,52 +313,52 @@
       <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</DisableLanguageExtensions>
       <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DisableLanguageExtensions>
     </ClCompile>
-    <ClCompile Include="utrace.c" />
-    <ClCompile Include="utypes.c" />
-    <ClCompile Include="wintz.c">
+    <ClCompile Include="utrace.cpp" />
+    <ClCompile Include="utypes.cpp" />
+    <ClCompile Include="wintz.cpp">
       <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</DisableLanguageExtensions>
       <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DisableLanguageExtensions>
       <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</DisableLanguageExtensions>
       <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</DisableLanguageExtensions>
     </ClCompile>
-    <ClCompile Include="ucnv.c" />
+    <ClCompile Include="ucnv.cpp" />
     <ClCompile Include="ucnv2022.cpp" />
     <ClCompile Include="ucnv_bld.cpp">
     </ClCompile>
-    <ClCompile Include="ucnv_cb.c" />
-    <ClCompile Include="ucnv_cnv.c" />
-    <ClCompile Include="ucnv_ct.c" />
-    <ClCompile Include="ucnv_err.c" />
+    <ClCompile Include="ucnv_cb.cpp" />
+    <ClCompile Include="ucnv_cnv.cpp" />
+    <ClCompile Include="ucnv_ct.cpp" />
+    <ClCompile Include="ucnv_err.cpp" />
     <ClCompile Include="ucnv_ext.cpp" />
     <ClCompile Include="ucnv_io.cpp">
     </ClCompile>
-    <ClCompile Include="ucnv_lmb.c" />
-    <ClCompile Include="ucnv_set.c" />
-    <ClCompile Include="ucnv_u16.c" />
-    <ClCompile Include="ucnv_u32.c" />
-    <ClCompile Include="ucnv_u7.c" />
-    <ClCompile Include="ucnv_u8.c" />
+    <ClCompile Include="ucnv_lmb.cpp" />
+    <ClCompile Include="ucnv_set.cpp" />
+    <ClCompile Include="ucnv_u16.cpp" />
+    <ClCompile Include="ucnv_u32.cpp" />
+    <ClCompile Include="ucnv_u7.cpp" />
+    <ClCompile Include="ucnv_u8.cpp" />
     <ClCompile Include="ucnvbocu.cpp" />
-    <ClCompile Include="ucnvdisp.c" />
-    <ClCompile Include="ucnvhz.c" />
-    <ClCompile Include="ucnvisci.c" />
-    <ClCompile Include="ucnvlat1.c" />
+    <ClCompile Include="ucnvdisp.cpp" />
+    <ClCompile Include="ucnvhz.cpp" />
+    <ClCompile Include="ucnvisci.cpp" />
+    <ClCompile Include="ucnvlat1.cpp" />
     <ClCompile Include="ucnvmbcs.cpp" />
-    <ClCompile Include="ucnvscsu.c" />
+    <ClCompile Include="ucnvscsu.cpp" />
     <ClCompile Include="ucnvsel.cpp">
     </ClCompile>
-    <ClCompile Include="cmemory.c" />
+    <ClCompile Include="cmemory.cpp" />
     <ClCompile Include="ucln_cmn.cpp">
       <DisableLanguageExtensions>false</DisableLanguageExtensions>
     </ClCompile>
-    <ClCompile Include="ucmndata.c" />
+    <ClCompile Include="ucmndata.cpp" />
     <ClCompile Include="udata.cpp" />
-    <ClCompile Include="udatamem.c" />
-    <ClCompile Include="udataswp.c" />
+    <ClCompile Include="udatamem.cpp" />
+    <ClCompile Include="udataswp.cpp" />
     <ClCompile Include="uinit.cpp">
       <DisableLanguageExtensions>false</DisableLanguageExtensions>
     </ClCompile>
-    <ClCompile Include="umapfile.c">
+    <ClCompile Include="umapfile.cpp">
       <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</DisableLanguageExtensions>
       <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</DisableLanguageExtensions>
       <DisableLanguageExtensions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</DisableLanguageExtensions>
@@ -360,7 +367,7 @@
     <ClCompile Include="uobject.cpp" />
     <ClCompile Include="dtintrv.cpp" />
     <ClCompile Include="parsepos.cpp" />
-    <ClCompile Include="ustrfmt.c" />
+    <ClCompile Include="ustrfmt.cpp" />
     <ClCompile Include="util.cpp" />
     <ClCompile Include="util_props.cpp" />
     <ClCompile Include="punycode.cpp" />
@@ -380,10 +387,10 @@
     <ClCompile Include="resbund.cpp">
     </ClCompile>
     <ClCompile Include="resbund_cnv.cpp" />
-    <ClCompile Include="ucat.c" />
+    <ClCompile Include="ucat.cpp" />
     <ClCompile Include="uloc.cpp" />
-    <ClCompile Include="uloc_tag.c" />
-    <ClCompile Include="ures_cnv.c" />
+    <ClCompile Include="uloc_tag.cpp" />
+    <ClCompile Include="ures_cnv.cpp" />
     <ClCompile Include="uresbund.cpp" />
     <ClCompile Include="uresdata.cpp" />
     <ClCompile Include="resource.cpp" />
@@ -405,7 +412,7 @@
     <ClCompile Include="ruleiter.cpp" />
     <ClCompile Include="ucase.cpp">
     </ClCompile>
-    <ClCompile Include="uchar.c" />
+    <ClCompile Include="uchar.cpp" />
     <ClCompile Include="unames.cpp" />
     <ClCompile Include="unifiedcache.cpp">
       <DisableLanguageExtensions>false</DisableLanguageExtensions>
@@ -417,8 +424,8 @@
     <ClCompile Include="uniset_props.cpp" />
     <ClCompile Include="unisetspan.cpp" />
     <ClCompile Include="uprops.cpp" />
-    <ClCompile Include="usc_impl.c" />
-    <ClCompile Include="uscript.c" />
+    <ClCompile Include="usc_impl.cpp" />
+    <ClCompile Include="uscript.cpp" />
     <ClCompile Include="uscript_props.cpp" />
     <ClCompile Include="uset.cpp" />
     <ClCompile Include="uset_props.cpp" />
@@ -440,6 +447,7 @@
     </ClCompile>
     <ClCompile Include="usprep.cpp" />
     <ClCompile Include="appendable.cpp" />
+    <ClCompile Include="bytesinkutil.cpp" />
     <ClCompile Include="bytestream.cpp" />
     <ClCompile Include="bytestrie.cpp" />
     <ClCompile Include="bytestriebuilder.cpp" />
@@ -446,9 +454,10 @@
     <ClCompile Include="bytestrieiterator.cpp" />
     <ClCompile Include="chariter.cpp" />
     <ClCompile Include="charstr.cpp" />
-    <ClCompile Include="cstring.c" />
+    <ClCompile Include="cstring.cpp" />
     <ClCompile Include="cstr.cpp" />
-    <ClCompile Include="cwchar.c" />
+    <ClCompile Include="cwchar.cpp" />
+    <ClCompile Include="edits.cpp" />
     <ClCompile Include="messagepattern.cpp" />
     <ClCompile Include="schriter.cpp" />
     <ClCompile Include="stringpiece.cpp" />
@@ -460,7 +469,7 @@
     <ClCompile Include="ucharstriebuilder.cpp" />
     <ClCompile Include="ucharstrieiterator.cpp" />
     <ClCompile Include="uchriter.cpp" />
-    <ClCompile Include="uinvchar.c" />
+    <ClCompile Include="uinvchar.cpp" />
     <ClCompile Include="uiter.cpp" />
     <ClCompile Include="unistr.cpp" />
     <ClCompile Include="unistr_case.cpp" />
@@ -476,7 +485,7 @@
     <ClCompile Include="ustring.cpp" />
     <ClCompile Include="ustrtrns.cpp" />
     <ClCompile Include="utext.cpp" />
-    <ClCompile Include="utf_impl.c" />
+    <ClCompile Include="utf_impl.cpp" />
     <ClCompile Include="listformatter.cpp" />
     <ClCompile Include="ulistformatter.cpp" />
   </ItemGroup>
@@ -566,6 +575,7 @@
     <ClInclude Include="rbbiscan.h" />
     <ClInclude Include="rbbisetb.h" />
     <ClInclude Include="rbbitblb.h" />
+    <ClInclude Include="rbbi_cache.h" />
     <ClInclude Include="dictionarydata.h" />
     <CustomBuild Include="unicode\ubrk.h">
       <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode
@@ -1472,6 +1482,7 @@
 </Command>
       <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
     </CustomBuild>
+    <ClInclude Include="bytesinkutil.h" />
     <CustomBuild Include="unicode\bytestream.h">
       <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode
 </Command>
@@ -1514,6 +1525,34 @@
 </Command>
       <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
     </CustomBuild>
+    <CustomBuild Include="unicode\casemap.h">
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
+    <CustomBuild Include="unicode\char16ptr.h">
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
     <CustomBuild Include="unicode\chariter.h">
       <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode
 </Command>
@@ -1532,6 +1571,20 @@
     <ClInclude Include="cstring.h" />
     <ClInclude Include="cstr.h" />
     <ClInclude Include="cwchar.h" />
+    <CustomBuild Include="unicode\edits.h">
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
     <CustomBuild Include="unicode\messagepattern.h">
       <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode
 </Command>
@@ -1616,6 +1669,7 @@
 </Command>
       <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
     </CustomBuild>
+    <ClInclude Include="ucasemap_imp.h" />
     <CustomBuild Include="unicode\ucharstrie.h">
       <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode
 </Command>
@@ -1843,6 +1897,20 @@
 </Command>
       <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
     </CustomBuild>
+    <CustomBuild Include="unicode\stringoptions.h">
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\unicode
+</Command>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\unicode\%(Filename)%(Extension);%(Outputs)</Outputs>
+    </CustomBuild>
   </ItemGroup>
   <ItemGroup>
     <ResourceCompile Include="common.rc" />
@@ -1856,4 +1924,4 @@
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
   </ImportGroup>
-</Project>
\ No newline at end of file
+</Project>

Modified: trunk/Build/source/libs/icu/icu-src/source/common/common.vcxproj.filters
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/common.vcxproj.filters	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/common.vcxproj.filters	2018-01-12 18:35:28 UTC (rev 46290)
@@ -49,16 +49,16 @@
     </Filter>
   </ItemGroup>
   <ItemGroup>
-    <ClCompile Include="ubidi.c">
+    <ClCompile Include="ubidi.cpp">
       <Filter>bidi</Filter>
     </ClCompile>
-    <ClCompile Include="ubidi_props.c">
+    <ClCompile Include="ubidi_props.cpp">
       <Filter>bidi</Filter>
     </ClCompile>
-    <ClCompile Include="ubidiln.c">
+    <ClCompile Include="ubidiln.cpp">
       <Filter>bidi</Filter>
     </ClCompile>
-    <ClCompile Include="ubidiwrt.c">
+    <ClCompile Include="ubidiwrt.cpp">
       <Filter>bidi</Filter>
     </ClCompile>
     <ClCompile Include="ushape.cpp">
@@ -97,6 +97,9 @@
     <ClCompile Include="rbbitblb.cpp">
       <Filter>break iteration</Filter>
     </ClCompile>
+    <ClCompile Include="rbbi_cache.cpp">
+      <Filter>break iteration</Filter>
+    </ClCompile>
     <ClCompile Include="ubrk.cpp">
       <Filter>break iteration</Filter>
     </ClCompile>
@@ -106,22 +109,22 @@
     <ClCompile Include="pluralmap.cpp">
       <Filter>collections</Filter>
     </ClCompile>
-    <ClCompile Include="propsvec.c">
+    <ClCompile Include="propsvec.cpp">
       <Filter>collections</Filter>
     </ClCompile>
-    <ClCompile Include="uarrsort.c">
+    <ClCompile Include="uarrsort.cpp">
       <Filter>collections</Filter>
     </ClCompile>
-    <ClCompile Include="uenum.c">
+    <ClCompile Include="uenum.cpp">
       <Filter>collections</Filter>
     </ClCompile>
-    <ClCompile Include="uhash.c">
+    <ClCompile Include="uhash.cpp">
       <Filter>collections</Filter>
     </ClCompile>
     <ClCompile Include="uhash_us.cpp">
       <Filter>collections</Filter>
     </ClCompile>
-    <ClCompile Include="ulist.c">
+    <ClCompile Include="ulist.cpp">
       <Filter>collections</Filter>
     </ClCompile>
     <ClCompile Include="unifiedcache.cpp">
@@ -154,31 +157,31 @@
     <ClCompile Include="errorcode.cpp">
       <Filter>configuration</Filter>
     </ClCompile>
-    <ClCompile Include="icudataver.c">
+    <ClCompile Include="icudataver.cpp">
       <Filter>configuration</Filter>
     </ClCompile>
-    <ClCompile Include="locmap.c">
+    <ClCompile Include="locmap.cpp">
       <Filter>configuration</Filter>
     </ClCompile>
     <ClCompile Include="putil.cpp">
       <Filter>configuration</Filter>
     </ClCompile>
-    <ClCompile Include="umath.c">
+    <ClCompile Include="umath.cpp">
       <Filter>configuration</Filter>
     </ClCompile>
     <ClCompile Include="umutex.cpp">
       <Filter>configuration</Filter>
     </ClCompile>
-    <ClCompile Include="utrace.c">
+    <ClCompile Include="utrace.cpp">
       <Filter>configuration</Filter>
     </ClCompile>
-    <ClCompile Include="utypes.c">
+    <ClCompile Include="utypes.cpp">
       <Filter>configuration</Filter>
     </ClCompile>
-    <ClCompile Include="wintz.c">
+    <ClCompile Include="wintz.cpp">
       <Filter>configuration</Filter>
     </ClCompile>
-    <ClCompile Include="ucnv.c">
+    <ClCompile Include="ucnv.cpp">
       <Filter>conversion</Filter>
     </ClCompile>
     <ClCompile Include="ucnv2022.cpp">
@@ -187,13 +190,13 @@
     <ClCompile Include="ucnv_bld.cpp">
       <Filter>conversion</Filter>
     </ClCompile>
-    <ClCompile Include="ucnv_cb.c">
+    <ClCompile Include="ucnv_cb.cpp">
       <Filter>conversion</Filter>
     </ClCompile>
-    <ClCompile Include="ucnv_cnv.c">
+    <ClCompile Include="ucnv_cnv.cpp">
       <Filter>conversion</Filter>
     </ClCompile>
-    <ClCompile Include="ucnv_err.c">
+    <ClCompile Include="ucnv_err.cpp">
       <Filter>conversion</Filter>
     </ClCompile>
     <ClCompile Include="ucnv_ext.cpp">
@@ -202,49 +205,49 @@
     <ClCompile Include="ucnv_io.cpp">
       <Filter>conversion</Filter>
     </ClCompile>
-    <ClCompile Include="ucnv_lmb.c">
+    <ClCompile Include="ucnv_lmb.cpp">
       <Filter>conversion</Filter>
     </ClCompile>
-    <ClCompile Include="ucnv_set.c">
+    <ClCompile Include="ucnv_set.cpp">
       <Filter>conversion</Filter>
     </ClCompile>
-    <ClCompile Include="ucnv_u16.c">
+    <ClCompile Include="ucnv_u16.cpp">
       <Filter>conversion</Filter>
     </ClCompile>
-    <ClCompile Include="ucnv_u32.c">
+    <ClCompile Include="ucnv_u32.cpp">
       <Filter>conversion</Filter>
     </ClCompile>
-    <ClCompile Include="ucnv_u7.c">
+    <ClCompile Include="ucnv_u7.cpp">
       <Filter>conversion</Filter>
     </ClCompile>
-    <ClCompile Include="ucnv_u8.c">
+    <ClCompile Include="ucnv_u8.cpp">
       <Filter>conversion</Filter>
     </ClCompile>
     <ClCompile Include="ucnvbocu.cpp">
       <Filter>conversion</Filter>
     </ClCompile>
-    <ClCompile Include="ucnvdisp.c">
+    <ClCompile Include="ucnvdisp.cpp">
       <Filter>conversion</Filter>
     </ClCompile>
-    <ClCompile Include="ucnvhz.c">
+    <ClCompile Include="ucnvhz.cpp">
       <Filter>conversion</Filter>
     </ClCompile>
-    <ClCompile Include="ucnvisci.c">
+    <ClCompile Include="ucnvisci.cpp">
       <Filter>conversion</Filter>
     </ClCompile>
-    <ClCompile Include="ucnvlat1.c">
+    <ClCompile Include="ucnvlat1.cpp">
       <Filter>conversion</Filter>
     </ClCompile>
     <ClCompile Include="ucnvmbcs.cpp">
       <Filter>conversion</Filter>
     </ClCompile>
-    <ClCompile Include="ucnvscsu.c">
+    <ClCompile Include="ucnvscsu.cpp">
       <Filter>conversion</Filter>
     </ClCompile>
     <ClCompile Include="ucnvsel.cpp">
       <Filter>conversion</Filter>
     </ClCompile>
-    <ClCompile Include="cmemory.c">
+    <ClCompile Include="cmemory.cpp">
       <Filter>data & memory</Filter>
     </ClCompile>
     <ClCompile Include="sharedobject.cpp">
@@ -253,22 +256,22 @@
     <ClCompile Include="ucln_cmn.cpp">
       <Filter>data & memory</Filter>
     </ClCompile>
-    <ClCompile Include="ucmndata.c">
+    <ClCompile Include="ucmndata.cpp">
       <Filter>data & memory</Filter>
     </ClCompile>
     <ClCompile Include="udata.cpp">
       <Filter>data & memory</Filter>
     </ClCompile>
-    <ClCompile Include="udatamem.c">
+    <ClCompile Include="udatamem.cpp">
       <Filter>data & memory</Filter>
     </ClCompile>
-    <ClCompile Include="udataswp.c">
+    <ClCompile Include="udataswp.cpp">
       <Filter>data & memory</Filter>
     </ClCompile>
     <ClCompile Include="uinit.cpp">
       <Filter>data & memory</Filter>
     </ClCompile>
-    <ClCompile Include="umapfile.c">
+    <ClCompile Include="umapfile.cpp">
       <Filter>data & memory</Filter>
     </ClCompile>
     <ClCompile Include="uobject.cpp">
@@ -289,7 +292,7 @@
     <ClCompile Include="ucurr.cpp">
       <Filter>formatting</Filter>
     </ClCompile>
-    <ClCompile Include="ustrfmt.c">
+    <ClCompile Include="ustrfmt.cpp">
       <Filter>formatting</Filter>
     </ClCompile>
     <ClCompile Include="util.cpp">
@@ -334,16 +337,16 @@
     <ClCompile Include="resbund_cnv.cpp">
       <Filter>locales & resources</Filter>
     </ClCompile>
-    <ClCompile Include="ucat.c">
+    <ClCompile Include="ucat.cpp">
       <Filter>locales & resources</Filter>
     </ClCompile>
     <ClCompile Include="uloc.cpp">
       <Filter>locales & resources</Filter>
     </ClCompile>
-    <ClCompile Include="uloc_tag.c">
+    <ClCompile Include="uloc_tag.cpp">
       <Filter>locales & resources</Filter>
     </ClCompile>
-    <ClCompile Include="ures_cnv.c">
+    <ClCompile Include="ures_cnv.cpp">
       <Filter>locales & resources</Filter>
     </ClCompile>
     <ClCompile Include="uresbund.cpp">
@@ -391,7 +394,7 @@
     <ClCompile Include="ucase.cpp">
       <Filter>properties & sets</Filter>
     </ClCompile>
-    <ClCompile Include="uchar.c">
+    <ClCompile Include="uchar.cpp">
       <Filter>properties & sets</Filter>
     </ClCompile>
     <ClCompile Include="unames.cpp">
@@ -418,10 +421,10 @@
     <ClCompile Include="uprops.cpp">
       <Filter>properties & sets</Filter>
     </ClCompile>
-    <ClCompile Include="usc_impl.c">
+    <ClCompile Include="usc_impl.cpp">
       <Filter>properties & sets</Filter>
     </ClCompile>
-    <ClCompile Include="uscript.c">
+    <ClCompile Include="uscript.cpp">
       <Filter>properties & sets</Filter>
     </ClCompile>
     <ClCompile Include="uscript_props.cpp">
@@ -460,6 +463,9 @@
     <ClCompile Include="usprep.cpp">
       <Filter>sprep</Filter>
     </ClCompile>
+    <ClCompile Include="bytesinkutil.cpp">
+      <Filter>strings</Filter>
+    </ClCompile>
     <ClCompile Include="bytestream.cpp">
       <Filter>strings</Filter>
     </ClCompile>
@@ -469,15 +475,18 @@
     <ClCompile Include="charstr.cpp">
       <Filter>strings</Filter>
     </ClCompile>
-    <ClCompile Include="cstring.c">
+    <ClCompile Include="cstring.cpp">
       <Filter>strings</Filter>
     </ClCompile>
     <ClCompile Include="cstr.cpp">
       <Filter>strings</Filter>
     </ClCompile>
-    <ClCompile Include="cwchar.c">
+    <ClCompile Include="cwchar.cpp">
       <Filter>strings</Filter>
     </ClCompile>
+    <ClCompile Include="edits.cpp">
+      <Filter>strings</Filter>
+    </ClCompile>
     <ClCompile Include="schriter.cpp">
       <Filter>strings</Filter>
     </ClCompile>
@@ -493,7 +502,7 @@
     <ClCompile Include="uchriter.cpp">
       <Filter>strings</Filter>
     </ClCompile>
-    <ClCompile Include="uinvchar.c">
+    <ClCompile Include="uinvchar.cpp">
       <Filter>strings</Filter>
     </ClCompile>
     <ClCompile Include="uiter.cpp">
@@ -541,7 +550,7 @@
     <ClCompile Include="utext.cpp">
       <Filter>strings</Filter>
     </ClCompile>
-    <ClCompile Include="utf_impl.c">
+    <ClCompile Include="utf_impl.cpp">
       <Filter>strings</Filter>
     </ClCompile>
     <ClCompile Include="bytestrie.cpp">
@@ -568,7 +577,7 @@
     <ClCompile Include="dictionarydata.cpp">
       <Filter>break iteration</Filter>
     </ClCompile>
-    <ClCompile Include="ucnv_ct.c">
+    <ClCompile Include="ucnv_ct.cpp">
       <Filter>conversion</Filter>
     </ClCompile>
     <ClCompile Include="ucharstrie.cpp">
@@ -595,7 +604,7 @@
     <ClCompile Include="icuplug.cpp">
       <Filter>registration</Filter>
     </ClCompile>
-    <ClCompile Include="ubiditransform.c">
+    <ClCompile Include="ubiditransform.cpp">
       <Filter>bidi</Filter>
     </ClCompile>
   </ItemGroup>
@@ -633,6 +642,9 @@
     <ClInclude Include="rbbitblb.h">
       <Filter>break iteration</Filter>
     </ClInclude>
+    <ClInclude Include="rbbi_cache.h">
+      <Filter>break iteration</Filter>
+    </ClInclude>
     <ClInclude Include="ubrkimpl.h">
       <Filter>break iteration</Filter>
     </ClInclude>
@@ -858,6 +870,9 @@
     <ClInclude Include="sprpimpl.h">
       <Filter>sprep</Filter>
     </ClInclude>
+    <ClInclude Include="bytesinkutil.h">
+      <Filter>strings</Filter>
+    </ClInclude>
     <ClInclude Include="charstr.h">
       <Filter>strings</Filter>
     </ClInclude>
@@ -870,6 +885,9 @@
     <ClInclude Include="cwchar.h">
       <Filter>strings</Filter>
     </ClInclude>
+    <ClInclude Include="ucasemap_imp.h">
+      <Filter>strings</Filter>
+    </ClInclude>
     <ClInclude Include="uinvchar.h">
       <Filter>strings</Filter>
     </ClInclude>
@@ -1096,9 +1114,18 @@
     <CustomBuild Include="unicode\bytestream.h">
       <Filter>strings</Filter>
     </CustomBuild>
+    <CustomBuild Include="unicode\casemap.h">
+      <Filter>strings</Filter>
+    </CustomBuild>
+    <CustomBuild Include="unicode\char16ptr.h">
+      <Filter>strings</Filter>
+    </CustomBuild>
     <CustomBuild Include="unicode\chariter.h">
       <Filter>strings</Filter>
     </CustomBuild>
+    <CustomBuild Include="unicode\edits.h">
+      <Filter>strings</Filter>
+    </CustomBuild>
     <CustomBuild Include="unicode\rep.h">
       <Filter>strings</Filter>
     </CustomBuild>
@@ -1180,5 +1207,8 @@
     <CustomBuild Include="unicode\stringtriebuilder.h">
       <Filter>collections</Filter>
     </CustomBuild>
+    <CustomBuild Include="unicode\stringoptions.h">
+      <Filter>strings</Filter>
+    </CustomBuild>
   </ItemGroup>
 </Project>
\ No newline at end of file

Added: trunk/Build/source/libs/icu/icu-src/source/common/common_uwp.vcxproj
===================================================================
(Binary files differ)

Index: trunk/Build/source/libs/icu/icu-src/source/common/common_uwp.vcxproj
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/common_uwp.vcxproj	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/common_uwp.vcxproj	2018-01-12 18:35:28 UTC (rev 46290)

Property changes on: trunk/Build/source/libs/icu/icu-src/source/common/common_uwp.vcxproj
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/xml
\ No newline at end of property
Modified: trunk/Build/source/libs/icu/icu-src/source/common/cpputils.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/cpputils.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/cpputils.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 ******************************************************************************
@@ -8,7 +8,7 @@
 *
 ******************************************************************************
 *   file name:  cpputils.h
-*   encoding:   US-ASCII
+*   encoding:   UTF-8
 *   tab size:   8 (not used)
 *   indentation:4
 */

Modified: trunk/Build/source/libs/icu/icu-src/source/common/cstr.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/cstr.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/cstr.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 *******************************************************************************

Modified: trunk/Build/source/libs/icu/icu-src/source/common/cstr.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/cstr.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/cstr.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 ******************************************************************************

Deleted: trunk/Build/source/libs/icu/icu-src/source/common/cstring.c
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/cstring.c	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/cstring.c	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,341 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
-******************************************************************************
-*
-*   Copyright (C) 1997-2011, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*
-* File CSTRING.C
-*
-* @author       Helena Shih
-*
-* Modification History:
-*
-*   Date        Name        Description
-*   6/18/98     hshih       Created
-*   09/08/98    stephen     Added include for ctype, for Mac Port
-*   11/15/99    helena      Integrated S/390 IEEE changes. 
-******************************************************************************
-*/
-
-
-
-#include <stdlib.h>
-#include <stdio.h>
-#include "unicode/utypes.h"
-#include "cmemory.h"
-#include "cstring.h"
-#include "uassert.h"
-
-/*
- * We hardcode case conversion for invariant characters to match our expectation
- * and the compiler execution charset.
- * This prevents problems on systems
- * - with non-default casing behavior, like Turkish system locales where
- *   tolower('I') maps to dotless i and toupper('i') maps to dotted I
- * - where there are no lowercase Latin characters at all, or using different
- *   codes (some old EBCDIC codepages)
- *
- * This works because the compiler usually runs on a platform where the execution
- * charset includes all of the invariant characters at their expected
- * code positions, so that the char * string literals in ICU code match
- * the char literals here.
- *
- * Note that the set of lowercase Latin letters is discontiguous in EBCDIC
- * and the set of uppercase Latin letters is discontiguous as well.
- */
-
-U_CAPI UBool U_EXPORT2
-uprv_isASCIILetter(char c) {
-#if U_CHARSET_FAMILY==U_EBCDIC_FAMILY
-    return
-        ('a'<=c && c<='i') || ('j'<=c && c<='r') || ('s'<=c && c<='z') ||
-        ('A'<=c && c<='I') || ('J'<=c && c<='R') || ('S'<=c && c<='Z');
-#else
-    return ('a'<=c && c<='z') || ('A'<=c && c<='Z');
-#endif
-}
-
-U_CAPI char U_EXPORT2
-uprv_toupper(char c) {
-#if U_CHARSET_FAMILY==U_EBCDIC_FAMILY
-    if(('a'<=c && c<='i') || ('j'<=c && c<='r') || ('s'<=c && c<='z')) {
-        c=(char)(c+('A'-'a'));
-    }
-#else
-    if('a'<=c && c<='z') {
-        c=(char)(c+('A'-'a'));
-    }
-#endif
-    return c;
-}
-
-
-#if 0
-/*
- * Commented out because cstring.h defines uprv_tolower() to be
- * the same as either uprv_asciitolower() or uprv_ebcdictolower()
- * to reduce the amount of code to cover with tests.
- *
- * Note that this uprv_tolower() definition is likely to work for most
- * charset families, not just ASCII and EBCDIC, because its #else branch
- * is written generically.
- */
-U_CAPI char U_EXPORT2
-uprv_tolower(char c) {
-#if U_CHARSET_FAMILY==U_EBCDIC_FAMILY
-    if(('A'<=c && c<='I') || ('J'<=c && c<='R') || ('S'<=c && c<='Z')) {
-        c=(char)(c+('a'-'A'));
-    }
-#else
-    if('A'<=c && c<='Z') {
-        c=(char)(c+('a'-'A'));
-    }
-#endif
-    return c;
-}
-#endif
-
-U_CAPI char U_EXPORT2
-uprv_asciitolower(char c) {
-    if(0x41<=c && c<=0x5a) {
-        c=(char)(c+0x20);
-    }
-    return c;
-}
-
-U_CAPI char U_EXPORT2
-uprv_ebcdictolower(char c) {
-    if( (0xc1<=(uint8_t)c && (uint8_t)c<=0xc9) ||
-        (0xd1<=(uint8_t)c && (uint8_t)c<=0xd9) ||
-        (0xe2<=(uint8_t)c && (uint8_t)c<=0xe9)
-    ) {
-        c=(char)(c-0x40);
-    }
-    return c;
-}
-
-
-U_CAPI char* U_EXPORT2
-T_CString_toLowerCase(char* str)
-{
-    char* origPtr = str;
-
-    if (str) {
-        do
-            *str = (char)uprv_tolower(*str);
-        while (*(str++));
-    }
-
-    return origPtr;
-}
-
-U_CAPI char* U_EXPORT2
-T_CString_toUpperCase(char* str)
-{
-    char* origPtr = str;
-
-    if (str) {
-        do
-            *str = (char)uprv_toupper(*str);
-        while (*(str++));
-    }
-
-    return origPtr;
-}
-
-/*
- * Takes a int32_t and fills in  a char* string with that number "radix"-based.
- * Does not handle negative values (makes an empty string for them).
- * Writes at most 12 chars ("-2147483647" plus NUL).
- * Returns the length of the string (not including the NUL).
- */
-U_CAPI int32_t U_EXPORT2
-T_CString_integerToString(char* buffer, int32_t v, int32_t radix)
-{
-    char      tbuf[30];
-    int32_t   tbx    = sizeof(tbuf);
-    uint8_t   digit;
-    int32_t   length = 0;
-    uint32_t  uval;
-    
-    U_ASSERT(radix>=2 && radix<=16);
-    uval = (uint32_t) v;
-    if(v<0 && radix == 10) {
-        /* Only in base 10 do we conside numbers to be signed. */
-        uval = (uint32_t)(-v); 
-        buffer[length++] = '-';
-    }
-    
-    tbx = sizeof(tbuf)-1;
-    tbuf[tbx] = 0;   /* We are generating the digits backwards.  Null term the end. */
-    do {
-        digit = (uint8_t)(uval % radix);
-        tbuf[--tbx] = (char)(T_CString_itosOffset(digit));
-        uval  = uval / radix;
-    } while (uval != 0);
-    
-    /* copy converted number into user buffer  */
-    uprv_strcpy(buffer+length, tbuf+tbx);
-    length += sizeof(tbuf) - tbx -1;
-    return length;
-}
-
-
-
-/*
- * Takes a int64_t and fills in  a char* string with that number "radix"-based.
- * Writes at most 21: chars ("-9223372036854775807" plus NUL).
- * Returns the length of the string, not including the terminating NULL.
- */
-U_CAPI int32_t U_EXPORT2
-T_CString_int64ToString(char* buffer, int64_t v, uint32_t radix)
-{
-    char      tbuf[30];
-    int32_t   tbx    = sizeof(tbuf);
-    uint8_t   digit;
-    int32_t   length = 0;
-    uint64_t  uval;
-    
-    U_ASSERT(radix>=2 && radix<=16);
-    uval = (uint64_t) v;
-    if(v<0 && radix == 10) {
-        /* Only in base 10 do we conside numbers to be signed. */
-        uval = (uint64_t)(-v); 
-        buffer[length++] = '-';
-    }
-    
-    tbx = sizeof(tbuf)-1;
-    tbuf[tbx] = 0;   /* We are generating the digits backwards.  Null term the end. */
-    do {
-        digit = (uint8_t)(uval % radix);
-        tbuf[--tbx] = (char)(T_CString_itosOffset(digit));
-        uval  = uval / radix;
-    } while (uval != 0);
-    
-    /* copy converted number into user buffer  */
-    uprv_strcpy(buffer+length, tbuf+tbx);
-    length += sizeof(tbuf) - tbx -1;
-    return length;
-}
-
-
-U_CAPI int32_t U_EXPORT2
-T_CString_stringToInteger(const char *integerString, int32_t radix)
-{
-    char *end;
-    return uprv_strtoul(integerString, &end, radix);
-
-}
-
-U_CAPI int U_EXPORT2
-uprv_stricmp(const char *str1, const char *str2) {
-    if(str1==NULL) {
-        if(str2==NULL) {
-            return 0;
-        } else {
-            return -1;
-        }
-    } else if(str2==NULL) {
-        return 1;
-    } else {
-        /* compare non-NULL strings lexically with lowercase */
-        int rc;
-        unsigned char c1, c2;
-
-        for(;;) {
-            c1=(unsigned char)*str1;
-            c2=(unsigned char)*str2;
-            if(c1==0) {
-                if(c2==0) {
-                    return 0;
-                } else {
-                    return -1;
-                }
-            } else if(c2==0) {
-                return 1;
-            } else {
-                /* compare non-zero characters with lowercase */
-                rc=(int)(unsigned char)uprv_tolower(c1)-(int)(unsigned char)uprv_tolower(c2);
-                if(rc!=0) {
-                    return rc;
-                }
-            }
-            ++str1;
-            ++str2;
-        }
-    }
-}
-
-U_CAPI int U_EXPORT2
-uprv_strnicmp(const char *str1, const char *str2, uint32_t n) {
-    if(str1==NULL) {
-        if(str2==NULL) {
-            return 0;
-        } else {
-            return -1;
-        }
-    } else if(str2==NULL) {
-        return 1;
-    } else {
-        /* compare non-NULL strings lexically with lowercase */
-        int rc;
-        unsigned char c1, c2;
-
-        for(; n--;) {
-            c1=(unsigned char)*str1;
-            c2=(unsigned char)*str2;
-            if(c1==0) {
-                if(c2==0) {
-                    return 0;
-                } else {
-                    return -1;
-                }
-            } else if(c2==0) {
-                return 1;
-            } else {
-                /* compare non-zero characters with lowercase */
-                rc=(int)(unsigned char)uprv_tolower(c1)-(int)(unsigned char)uprv_tolower(c2);
-                if(rc!=0) {
-                    return rc;
-                }
-            }
-            ++str1;
-            ++str2;
-        }
-    }
-
-    return 0;
-}
-
-U_CAPI char* U_EXPORT2
-uprv_strdup(const char *src) {
-    size_t len = uprv_strlen(src) + 1;
-    char *dup = (char *) uprv_malloc(len);
-
-    if (dup) {
-        uprv_memcpy(dup, src, len);
-    }
-
-    return dup;
-}
-
-U_CAPI char* U_EXPORT2
-uprv_strndup(const char *src, int32_t n) {
-    char *dup;
-
-    if(n < 0) {
-        dup = uprv_strdup(src);
-    } else {
-        dup = (char*)uprv_malloc(n+1);
-        if (dup) { 
-            uprv_memcpy(dup, src, n);
-            dup[n] = 0;
-        }
-    }
-
-    return dup;
-}

Added: trunk/Build/source/libs/icu/icu-src/source/common/cstring.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/cstring.cpp	                        (rev 0)
+++ trunk/Build/source/libs/icu/icu-src/source/common/cstring.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -0,0 +1,341 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+******************************************************************************
+*
+*   Copyright (C) 1997-2011, International Business Machines
+*   Corporation and others.  All Rights Reserved.
+*
+******************************************************************************
+*
+* File CSTRING.C
+*
+* @author       Helena Shih
+*
+* Modification History:
+*
+*   Date        Name        Description
+*   6/18/98     hshih       Created
+*   09/08/98    stephen     Added include for ctype, for Mac Port
+*   11/15/99    helena      Integrated S/390 IEEE changes. 
+******************************************************************************
+*/
+
+
+
+#include <stdlib.h>
+#include <stdio.h>
+#include "unicode/utypes.h"
+#include "cmemory.h"
+#include "cstring.h"
+#include "uassert.h"
+
+/*
+ * We hardcode case conversion for invariant characters to match our expectation
+ * and the compiler execution charset.
+ * This prevents problems on systems
+ * - with non-default casing behavior, like Turkish system locales where
+ *   tolower('I') maps to dotless i and toupper('i') maps to dotted I
+ * - where there are no lowercase Latin characters at all, or using different
+ *   codes (some old EBCDIC codepages)
+ *
+ * This works because the compiler usually runs on a platform where the execution
+ * charset includes all of the invariant characters at their expected
+ * code positions, so that the char * string literals in ICU code match
+ * the char literals here.
+ *
+ * Note that the set of lowercase Latin letters is discontiguous in EBCDIC
+ * and the set of uppercase Latin letters is discontiguous as well.
+ */
+
+U_CAPI UBool U_EXPORT2
+uprv_isASCIILetter(char c) {
+#if U_CHARSET_FAMILY==U_EBCDIC_FAMILY
+    return
+        ('a'<=c && c<='i') || ('j'<=c && c<='r') || ('s'<=c && c<='z') ||
+        ('A'<=c && c<='I') || ('J'<=c && c<='R') || ('S'<=c && c<='Z');
+#else
+    return ('a'<=c && c<='z') || ('A'<=c && c<='Z');
+#endif
+}
+
+U_CAPI char U_EXPORT2
+uprv_toupper(char c) {
+#if U_CHARSET_FAMILY==U_EBCDIC_FAMILY
+    if(('a'<=c && c<='i') || ('j'<=c && c<='r') || ('s'<=c && c<='z')) {
+        c=(char)(c+('A'-'a'));
+    }
+#else
+    if('a'<=c && c<='z') {
+        c=(char)(c+('A'-'a'));
+    }
+#endif
+    return c;
+}
+
+
+#if 0
+/*
+ * Commented out because cstring.h defines uprv_tolower() to be
+ * the same as either uprv_asciitolower() or uprv_ebcdictolower()
+ * to reduce the amount of code to cover with tests.
+ *
+ * Note that this uprv_tolower() definition is likely to work for most
+ * charset families, not just ASCII and EBCDIC, because its #else branch
+ * is written generically.
+ */
+U_CAPI char U_EXPORT2
+uprv_tolower(char c) {
+#if U_CHARSET_FAMILY==U_EBCDIC_FAMILY
+    if(('A'<=c && c<='I') || ('J'<=c && c<='R') || ('S'<=c && c<='Z')) {
+        c=(char)(c+('a'-'A'));
+    }
+#else
+    if('A'<=c && c<='Z') {
+        c=(char)(c+('a'-'A'));
+    }
+#endif
+    return c;
+}
+#endif
+
+U_CAPI char U_EXPORT2
+uprv_asciitolower(char c) {
+    if(0x41<=c && c<=0x5a) {
+        c=(char)(c+0x20);
+    }
+    return c;
+}
+
+U_CAPI char U_EXPORT2
+uprv_ebcdictolower(char c) {
+    if( (0xc1<=(uint8_t)c && (uint8_t)c<=0xc9) ||
+        (0xd1<=(uint8_t)c && (uint8_t)c<=0xd9) ||
+        (0xe2<=(uint8_t)c && (uint8_t)c<=0xe9)
+    ) {
+        c=(char)(c-0x40);
+    }
+    return c;
+}
+
+
+U_CAPI char* U_EXPORT2
+T_CString_toLowerCase(char* str)
+{
+    char* origPtr = str;
+
+    if (str) {
+        do
+            *str = (char)uprv_tolower(*str);
+        while (*(str++));
+    }
+
+    return origPtr;
+}
+
+U_CAPI char* U_EXPORT2
+T_CString_toUpperCase(char* str)
+{
+    char* origPtr = str;
+
+    if (str) {
+        do
+            *str = (char)uprv_toupper(*str);
+        while (*(str++));
+    }
+
+    return origPtr;
+}
+
+/*
+ * Takes a int32_t and fills in  a char* string with that number "radix"-based.
+ * Does not handle negative values (makes an empty string for them).
+ * Writes at most 12 chars ("-2147483647" plus NUL).
+ * Returns the length of the string (not including the NUL).
+ */
+U_CAPI int32_t U_EXPORT2
+T_CString_integerToString(char* buffer, int32_t v, int32_t radix)
+{
+    char      tbuf[30];
+    int32_t   tbx    = sizeof(tbuf);
+    uint8_t   digit;
+    int32_t   length = 0;
+    uint32_t  uval;
+    
+    U_ASSERT(radix>=2 && radix<=16);
+    uval = (uint32_t) v;
+    if(v<0 && radix == 10) {
+        /* Only in base 10 do we conside numbers to be signed. */
+        uval = (uint32_t)(-v); 
+        buffer[length++] = '-';
+    }
+    
+    tbx = sizeof(tbuf)-1;
+    tbuf[tbx] = 0;   /* We are generating the digits backwards.  Null term the end. */
+    do {
+        digit = (uint8_t)(uval % radix);
+        tbuf[--tbx] = (char)(T_CString_itosOffset(digit));
+        uval  = uval / radix;
+    } while (uval != 0);
+    
+    /* copy converted number into user buffer  */
+    uprv_strcpy(buffer+length, tbuf+tbx);
+    length += sizeof(tbuf) - tbx -1;
+    return length;
+}
+
+
+
+/*
+ * Takes a int64_t and fills in  a char* string with that number "radix"-based.
+ * Writes at most 21: chars ("-9223372036854775807" plus NUL).
+ * Returns the length of the string, not including the terminating NULL.
+ */
+U_CAPI int32_t U_EXPORT2
+T_CString_int64ToString(char* buffer, int64_t v, uint32_t radix)
+{
+    char      tbuf[30];
+    int32_t   tbx    = sizeof(tbuf);
+    uint8_t   digit;
+    int32_t   length = 0;
+    uint64_t  uval;
+    
+    U_ASSERT(radix>=2 && radix<=16);
+    uval = (uint64_t) v;
+    if(v<0 && radix == 10) {
+        /* Only in base 10 do we conside numbers to be signed. */
+        uval = (uint64_t)(-v); 
+        buffer[length++] = '-';
+    }
+    
+    tbx = sizeof(tbuf)-1;
+    tbuf[tbx] = 0;   /* We are generating the digits backwards.  Null term the end. */
+    do {
+        digit = (uint8_t)(uval % radix);
+        tbuf[--tbx] = (char)(T_CString_itosOffset(digit));
+        uval  = uval / radix;
+    } while (uval != 0);
+    
+    /* copy converted number into user buffer  */
+    uprv_strcpy(buffer+length, tbuf+tbx);
+    length += sizeof(tbuf) - tbx -1;
+    return length;
+}
+
+
+U_CAPI int32_t U_EXPORT2
+T_CString_stringToInteger(const char *integerString, int32_t radix)
+{
+    char *end;
+    return uprv_strtoul(integerString, &end, radix);
+
+}
+
+U_CAPI int U_EXPORT2
+uprv_stricmp(const char *str1, const char *str2) {
+    if(str1==NULL) {
+        if(str2==NULL) {
+            return 0;
+        } else {
+            return -1;
+        }
+    } else if(str2==NULL) {
+        return 1;
+    } else {
+        /* compare non-NULL strings lexically with lowercase */
+        int rc;
+        unsigned char c1, c2;
+
+        for(;;) {
+            c1=(unsigned char)*str1;
+            c2=(unsigned char)*str2;
+            if(c1==0) {
+                if(c2==0) {
+                    return 0;
+                } else {
+                    return -1;
+                }
+            } else if(c2==0) {
+                return 1;
+            } else {
+                /* compare non-zero characters with lowercase */
+                rc=(int)(unsigned char)uprv_tolower(c1)-(int)(unsigned char)uprv_tolower(c2);
+                if(rc!=0) {
+                    return rc;
+                }
+            }
+            ++str1;
+            ++str2;
+        }
+    }
+}
+
+U_CAPI int U_EXPORT2
+uprv_strnicmp(const char *str1, const char *str2, uint32_t n) {
+    if(str1==NULL) {
+        if(str2==NULL) {
+            return 0;
+        } else {
+            return -1;
+        }
+    } else if(str2==NULL) {
+        return 1;
+    } else {
+        /* compare non-NULL strings lexically with lowercase */
+        int rc;
+        unsigned char c1, c2;
+
+        for(; n--;) {
+            c1=(unsigned char)*str1;
+            c2=(unsigned char)*str2;
+            if(c1==0) {
+                if(c2==0) {
+                    return 0;
+                } else {
+                    return -1;
+                }
+            } else if(c2==0) {
+                return 1;
+            } else {
+                /* compare non-zero characters with lowercase */
+                rc=(int)(unsigned char)uprv_tolower(c1)-(int)(unsigned char)uprv_tolower(c2);
+                if(rc!=0) {
+                    return rc;
+                }
+            }
+            ++str1;
+            ++str2;
+        }
+    }
+
+    return 0;
+}
+
+U_CAPI char* U_EXPORT2
+uprv_strdup(const char *src) {
+    size_t len = uprv_strlen(src) + 1;
+    char *dup = (char *) uprv_malloc(len);
+
+    if (dup) {
+        uprv_memcpy(dup, src, len);
+    }
+
+    return dup;
+}
+
+U_CAPI char* U_EXPORT2
+uprv_strndup(const char *src, int32_t n) {
+    char *dup;
+
+    if(n < 0) {
+        dup = uprv_strdup(src);
+    } else {
+        dup = (char*)uprv_malloc(n+1);
+        if (dup) { 
+            uprv_memcpy(dup, src, n);
+            dup[n] = 0;
+        }
+    }
+
+    return dup;
+}


Property changes on: trunk/Build/source/libs/icu/icu-src/source/common/cstring.cpp
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Build/source/libs/icu/icu-src/source/common/cstring.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/cstring.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/cstring.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 ******************************************************************************

Deleted: trunk/Build/source/libs/icu/icu-src/source/common/cwchar.c
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/cwchar.c	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/cwchar.c	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,55 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*  
-******************************************************************************
-*
-*   Copyright (C) 2001, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*   file name:  cwchar.c
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2001may25
-*   created by: Markus W. Scherer
-*/
-
-#include "unicode/utypes.h"
-
-#if !U_HAVE_WCSCPY
-
-#include "cwchar.h"
-
-U_CAPI wchar_t *uprv_wcscat(wchar_t *dst, const wchar_t *src) {
-    wchar_t *start=dst;
-    while(*dst!=0) {
-        ++dst;
-    }
-    while((*dst=*src)!=0) {
-        ++dst;
-        ++src;
-    }
-    return start;
-}
-
-U_CAPI wchar_t *uprv_wcscpy(wchar_t *dst, const wchar_t *src) {
-    wchar_t *start=dst;
-    while((*dst=*src)!=0) {
-        ++dst;
-        ++src;
-    }
-    return start;
-}
-
-U_CAPI size_t uprv_wcslen(const wchar_t *src) {
-    const wchar_t *start=src;
-    while(*src!=0) {
-        ++src;
-    }
-    return src-start;
-}
-
-#endif
-

Added: trunk/Build/source/libs/icu/icu-src/source/common/cwchar.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/cwchar.cpp	                        (rev 0)
+++ trunk/Build/source/libs/icu/icu-src/source/common/cwchar.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -0,0 +1,55 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*  
+******************************************************************************
+*
+*   Copyright (C) 2001, International Business Machines
+*   Corporation and others.  All Rights Reserved.
+*
+******************************************************************************
+*   file name:  cwchar.c
+*   encoding:   UTF-8
+*   tab size:   8 (not used)
+*   indentation:4
+*
+*   created on: 2001may25
+*   created by: Markus W. Scherer
+*/
+
+#include "unicode/utypes.h"
+
+#if !U_HAVE_WCSCPY
+
+#include "cwchar.h"
+
+U_CAPI wchar_t *uprv_wcscat(wchar_t *dst, const wchar_t *src) {
+    wchar_t *start=dst;
+    while(*dst!=0) {
+        ++dst;
+    }
+    while((*dst=*src)!=0) {
+        ++dst;
+        ++src;
+    }
+    return start;
+}
+
+U_CAPI wchar_t *uprv_wcscpy(wchar_t *dst, const wchar_t *src) {
+    wchar_t *start=dst;
+    while((*dst=*src)!=0) {
+        ++dst;
+        ++src;
+    }
+    return start;
+}
+
+U_CAPI size_t uprv_wcslen(const wchar_t *src) {
+    const wchar_t *start=src;
+    while(*src!=0) {
+        ++src;
+    }
+    return src-start;
+}
+
+#endif
+


Property changes on: trunk/Build/source/libs/icu/icu-src/source/common/cwchar.cpp
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Build/source/libs/icu/icu-src/source/common/cwchar.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/cwchar.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/cwchar.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*  
 ******************************************************************************
@@ -8,7 +8,7 @@
 *
 ******************************************************************************
 *   file name:  cwchar.h
-*   encoding:   US-ASCII
+*   encoding:   UTF-8
 *   tab size:   8 (not used)
 *   indentation:4
 *

Modified: trunk/Build/source/libs/icu/icu-src/source/common/dictbe.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/dictbe.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/dictbe.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /**
  *******************************************************************************
@@ -46,9 +46,9 @@
 DictionaryBreakEngine::findBreaks( UText *text,
                                  int32_t startPos,
                                  int32_t endPos,
-                                 UBool reverse,
                                  int32_t breakType,
-                                 UStack &foundBreaks ) const {
+                                 UVector32 &foundBreaks ) const {
+    (void)startPos;            // TODO: remove this param?
     int32_t result = 0;
 
     // Find the span of characters included in the set.
@@ -60,34 +60,12 @@
     int32_t rangeStart;
     int32_t rangeEnd;
     UChar32 c = utext_current32(text);
-    if (reverse) {
-        UBool   isDict = fSet.contains(c);
-        while((current = (int32_t)utext_getNativeIndex(text)) > startPos && isDict) {
-            c = utext_previous32(text);
-            isDict = fSet.contains(c);
-        }
-        if (current < startPos) {
-            rangeStart = startPos;
-        } else {
-            rangeStart = current;
-            if (!isDict) {
-                utext_next32(text);
-                rangeStart = (int32_t)utext_getNativeIndex(text);
-            }
-        }
-        // rangeEnd = start + 1;
-        utext_setNativeIndex(text, start);
-        utext_next32(text);
-        rangeEnd = (int32_t)utext_getNativeIndex(text);
+    while((current = (int32_t)utext_getNativeIndex(text)) < endPos && fSet.contains(c)) {
+        utext_next32(text);         // TODO:  recast loop for postincrement
+        c = utext_current32(text);
     }
-    else {
-        while((current = (int32_t)utext_getNativeIndex(text)) < endPos && fSet.contains(c)) {
-            utext_next32(text);         // TODO:  recast loop for postincrement
-            c = utext_current32(text);
-        }
-        rangeStart = start;
-        rangeEnd = current;
-    }
+    rangeStart = start;
+    rangeEnd = current;
     if (breakType >= 0 && breakType < 32 && (((uint32_t)1 << breakType) & fTypes)) {
         result = divideUpDictionaryRange(text, rangeStart, rangeEnd, foundBreaks);
         utext_setNativeIndex(text, current);
@@ -248,7 +226,7 @@
 ThaiBreakEngine::divideUpDictionaryRange( UText *text,
                                                 int32_t rangeStart,
                                                 int32_t rangeEnd,
-                                                UStack &foundBreaks ) const {
+                                                UVector32 &foundBreaks ) const {
     utext_setNativeIndex(text, rangeStart);
     utext_moveIndex32(text, THAI_MIN_WORD_SPAN);
     if (utext_getNativeIndex(text) >= rangeEnd) {
@@ -487,7 +465,7 @@
 LaoBreakEngine::divideUpDictionaryRange( UText *text,
                                                 int32_t rangeStart,
                                                 int32_t rangeEnd,
-                                                UStack &foundBreaks ) const {
+                                                UVector32 &foundBreaks ) const {
     if ((rangeEnd - rangeStart) < LAO_MIN_WORD_SPAN) {
         return 0;       // Not enough characters for two words
     }
@@ -680,7 +658,7 @@
 BurmeseBreakEngine::divideUpDictionaryRange( UText *text,
                                                 int32_t rangeStart,
                                                 int32_t rangeEnd,
-                                                UStack &foundBreaks ) const {
+                                                UVector32 &foundBreaks ) const {
     if ((rangeEnd - rangeStart) < BURMESE_MIN_WORD_SPAN) {
         return 0;       // Not enough characters for two words
     }
@@ -885,7 +863,7 @@
 KhmerBreakEngine::divideUpDictionaryRange( UText *text,
                                                 int32_t rangeStart,
                                                 int32_t rangeEnd,
-                                                UStack &foundBreaks ) const {
+                                                UVector32 &foundBreaks ) const {
     if ((rangeEnd - rangeStart) < KHMER_MIN_WORD_SPAN) {
         return 0;       // Not enough characters for two words
     }
@@ -1110,9 +1088,9 @@
     return (wordLength > kMaxKatakanaLength) ? 8192 : katakanaCost[wordLength];
 }
 
-static inline bool isKatakana(uint16_t value) {
-    return (value >= 0x30A1u && value <= 0x30FEu && value != 0x30FBu) ||
-            (value >= 0xFF66u && value <= 0xFF9fu);
+static inline bool isKatakana(UChar32 value) {
+    return (value >= 0x30A1 && value <= 0x30FE && value != 0x30FB) ||
+            (value >= 0xFF66 && value <= 0xFF9f);
 }
 
 
@@ -1128,7 +1106,7 @@
  * @param text A UText representing the text
  * @param rangeStart The start of the range of dictionary characters
  * @param rangeEnd The end of the range of dictionary characters
- * @param foundBreaks Output of C array of int32_t break positions, or 0
+ * @param foundBreaks vector<int32> to receive the break positions
  * @return The number of breaks found
  */
 int32_t 
@@ -1135,7 +1113,7 @@
 CjkBreakEngine::divideUpDictionaryRange( UText *inText,
         int32_t rangeStart,
         int32_t rangeEnd,
-        UStack &foundBreaks ) const {
+        UVector32 &foundBreaks ) const {
     if (rangeStart >= rangeEnd) {
         return 0;
     }
@@ -1385,13 +1363,27 @@
     // Now that we're done, convert positions in t_boundary[] (indices in 
     // the normalized input string) back to indices in the original input UText
     // while reversing t_boundary and pushing values to foundBreaks.
+    int32_t prevCPPos = -1;
+    int32_t prevUTextPos = -1;
     for (int32_t i = numBreaks-1; i >= 0; i--) {
         int32_t cpPos = t_boundary.elementAti(i);
+        U_ASSERT(cpPos > prevCPPos);
         int32_t utextPos =  inputMap.isValid() ? inputMap->elementAti(cpPos) : cpPos + rangeStart;
-        // Boundaries are added to foundBreaks output in ascending order.
-        U_ASSERT(foundBreaks.size() == 0 ||foundBreaks.peeki() < utextPos);
-        foundBreaks.push(utextPos, status);
+        U_ASSERT(utextPos >= prevUTextPos);
+        if (utextPos > prevUTextPos) {
+            // Boundaries are added to foundBreaks output in ascending order.
+            U_ASSERT(foundBreaks.size() == 0 || foundBreaks.peeki() < utextPos);
+            foundBreaks.push(utextPos, status);
+        } else {
+            // Normalization expanded the input text, the dictionary found a boundary
+            // within the expansion, giving two boundaries with the same index in the
+            // original text. Ignore the second. See ticket #12918.
+            --numBreaks;
+        }
+        prevCPPos = cpPos;
+        prevUTextPos = utextPos;
     }
+    (void)prevCPPos; // suppress compiler warnings about unused variable
 
     // inString goes out of scope
     // inputMap goes out of scope

Modified: trunk/Build/source/libs/icu/icu-src/source/common/dictbe.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/dictbe.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/dictbe.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /**
  *******************************************************************************
@@ -15,6 +15,7 @@
 #include "unicode/utext.h"
 
 #include "brkeng.h"
+#include "uvectr32.h"
 
 U_NAMESPACE_BEGIN
 
@@ -84,21 +85,18 @@
    *
    * @param text A UText representing the text. The iterator is left at
    * the end of the run of characters which the engine is capable of handling 
-   * that starts from the first (or last) character in the range.
+   * that starts from the first character in the range.
    * @param startPos The start of the run within the supplied text.
    * @param endPos The end of the run within the supplied text.
-   * @param reverse Whether the caller is looking for breaks in a reverse
-   * direction.
    * @param breakType The type of break desired, or -1.
-   * @param foundBreaks An allocated C array of the breaks found, if any
+   * @param foundBreaks vector of int32_t to receive the break positions
    * @return The number of breaks found.
    */
   virtual int32_t findBreaks( UText *text,
                               int32_t startPos,
                               int32_t endPos,
-                              UBool reverse,
                               int32_t breakType,
-                              UStack &foundBreaks ) const;
+                              UVector32 &foundBreaks ) const;
 
  protected:
 
@@ -128,7 +126,7 @@
   virtual int32_t divideUpDictionaryRange( UText *text,
                                            int32_t rangeStart,
                                            int32_t rangeEnd,
-                                           UStack &foundBreaks ) const = 0;
+                                           UVector32 &foundBreaks ) const = 0;
 
 };
 
@@ -185,7 +183,7 @@
   virtual int32_t divideUpDictionaryRange( UText *text,
                                            int32_t rangeStart,
                                            int32_t rangeEnd,
-                                           UStack &foundBreaks ) const;
+                                           UVector32 &foundBreaks ) const;
 
 };
 
@@ -241,7 +239,7 @@
   virtual int32_t divideUpDictionaryRange( UText *text,
                                            int32_t rangeStart,
                                            int32_t rangeEnd,
-                                           UStack &foundBreaks ) const;
+                                           UVector32 &foundBreaks ) const;
 
 };
 
@@ -297,7 +295,7 @@
   virtual int32_t divideUpDictionaryRange( UText *text, 
                                            int32_t rangeStart, 
                                            int32_t rangeEnd, 
-                                           UStack &foundBreaks ) const; 
+                                           UVector32 &foundBreaks ) const; 
  
 }; 
  
@@ -353,7 +351,7 @@
   virtual int32_t divideUpDictionaryRange( UText *text, 
                                            int32_t rangeStart, 
                                            int32_t rangeEnd, 
-                                           UStack &foundBreaks ) const; 
+                                           UVector32 &foundBreaks ) const; 
  
 }; 
  
@@ -417,7 +415,7 @@
   virtual int32_t divideUpDictionaryRange( UText *text,
           int32_t rangeStart,
           int32_t rangeEnd,
-          UStack &foundBreaks ) const;
+          UVector32 &foundBreaks ) const;
 
 };
 

Modified: trunk/Build/source/libs/icu/icu-src/source/common/dictionarydata.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/dictionarydata.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/dictionarydata.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 *******************************************************************************

Modified: trunk/Build/source/libs/icu/icu-src/source/common/dictionarydata.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/dictionarydata.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/dictionarydata.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 *******************************************************************************

Modified: trunk/Build/source/libs/icu/icu-src/source/common/dtintrv.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/dtintrv.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/dtintrv.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*******************************************************************************
 * Copyright (C) 2008, International Business Machines Corporation and

Added: trunk/Build/source/libs/icu/icu-src/source/common/edits.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/edits.cpp	                        (rev 0)
+++ trunk/Build/source/libs/icu/icu-src/source/common/edits.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -0,0 +1,776 @@
+// © 2017 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+// edits.cpp
+// created: 2017feb08 Markus W. Scherer
+
+#include "unicode/utypes.h"
+#include "unicode/edits.h"
+#include "cmemory.h"
+#include "uassert.h"
+
+U_NAMESPACE_BEGIN
+
+namespace {
+
+// 0000uuuuuuuuuuuu records u+1 unchanged text units.
+const int32_t MAX_UNCHANGED_LENGTH = 0x1000;
+const int32_t MAX_UNCHANGED = MAX_UNCHANGED_LENGTH - 1;
+
+// 0mmmnnnccccccccc with m=1..6 records ccc+1 replacements of m:n text units.
+const int32_t MAX_SHORT_CHANGE_OLD_LENGTH = 6;
+const int32_t MAX_SHORT_CHANGE_NEW_LENGTH = 7;
+const int32_t SHORT_CHANGE_NUM_MASK = 0x1ff;
+const int32_t MAX_SHORT_CHANGE = 0x6fff;
+
+// 0111mmmmmmnnnnnn records a replacement of m text units with n.
+// m or n = 61: actual length follows in the next edits array unit.
+// m or n = 62..63: actual length follows in the next two edits array units.
+// Bit 30 of the actual length is in the head unit.
+// Trailing units have bit 15 set.
+const int32_t LENGTH_IN_1TRAIL = 61;
+const int32_t LENGTH_IN_2TRAIL = 62;
+
+}  // namespace
+
+void Edits::releaseArray() U_NOEXCEPT {
+    if (array != stackArray) {
+        uprv_free(array);
+    }
+}
+
+Edits &Edits::copyArray(const Edits &other) {
+    if (U_FAILURE(errorCode_)) {
+        length = delta = numChanges = 0;
+        return *this;
+    }
+    if (length > capacity) {
+        uint16_t *newArray = (uint16_t *)uprv_malloc((size_t)length * 2);
+        if (newArray == nullptr) {
+            length = delta = numChanges = 0;
+            errorCode_ = U_MEMORY_ALLOCATION_ERROR;
+            return *this;
+        }
+        releaseArray();
+        array = newArray;
+        capacity = length;
+    }
+    if (length > 0) {
+        uprv_memcpy(array, other.array, (size_t)length * 2);
+    }
+    return *this;
+}
+
+Edits &Edits::moveArray(Edits &src) U_NOEXCEPT {
+    if (U_FAILURE(errorCode_)) {
+        length = delta = numChanges = 0;
+        return *this;
+    }
+    releaseArray();
+    if (length > STACK_CAPACITY) {
+        array = src.array;
+        capacity = src.capacity;
+        src.array = src.stackArray;
+        src.capacity = STACK_CAPACITY;
+        src.reset();
+        return *this;
+    }
+    array = stackArray;
+    capacity = STACK_CAPACITY;
+    if (length > 0) {
+        uprv_memcpy(array, src.array, (size_t)length * 2);
+    }
+    return *this;
+}
+
+Edits &Edits::operator=(const Edits &other) {
+    length = other.length;
+    delta = other.delta;
+    numChanges = other.numChanges;
+    errorCode_ = other.errorCode_;
+    return copyArray(other);
+}
+
+Edits &Edits::operator=(Edits &&src) U_NOEXCEPT {
+    length = src.length;
+    delta = src.delta;
+    numChanges = src.numChanges;
+    errorCode_ = src.errorCode_;
+    return moveArray(src);
+}
+
+Edits::~Edits() {
+    releaseArray();
+}
+
+void Edits::reset() U_NOEXCEPT {
+    length = delta = numChanges = 0;
+    errorCode_ = U_ZERO_ERROR;
+}
+
+void Edits::addUnchanged(int32_t unchangedLength) {
+    if(U_FAILURE(errorCode_) || unchangedLength == 0) { return; }
+    if(unchangedLength < 0) {
+        errorCode_ = U_ILLEGAL_ARGUMENT_ERROR;
+        return;
+    }
+    // Merge into previous unchanged-text record, if any.
+    int32_t last = lastUnit();
+    if(last < MAX_UNCHANGED) {
+        int32_t remaining = MAX_UNCHANGED - last;
+        if (remaining >= unchangedLength) {
+            setLastUnit(last + unchangedLength);
+            return;
+        }
+        setLastUnit(MAX_UNCHANGED);
+        unchangedLength -= remaining;
+    }
+    // Split large lengths into multiple units.
+    while(unchangedLength >= MAX_UNCHANGED_LENGTH) {
+        append(MAX_UNCHANGED);
+        unchangedLength -= MAX_UNCHANGED_LENGTH;
+    }
+    // Write a small (remaining) length.
+    if(unchangedLength > 0) {
+        append(unchangedLength - 1);
+    }
+}
+
+void Edits::addReplace(int32_t oldLength, int32_t newLength) {
+    if(U_FAILURE(errorCode_)) { return; }
+    if(oldLength < 0 || newLength < 0) {
+        errorCode_ = U_ILLEGAL_ARGUMENT_ERROR;
+        return;
+    }
+    if (oldLength == 0 && newLength == 0) {
+        return;
+    }
+    ++numChanges;
+    int32_t newDelta = newLength - oldLength;
+    if (newDelta != 0) {
+        if ((newDelta > 0 && delta >= 0 && newDelta > (INT32_MAX - delta)) ||
+                (newDelta < 0 && delta < 0 && newDelta < (INT32_MIN - delta))) {
+            // Integer overflow or underflow.
+            errorCode_ = U_INDEX_OUTOFBOUNDS_ERROR;
+            return;
+        }
+        delta += newDelta;
+    }
+
+    if(0 < oldLength && oldLength <= MAX_SHORT_CHANGE_OLD_LENGTH &&
+            newLength <= MAX_SHORT_CHANGE_NEW_LENGTH) {
+        // Merge into previous same-lengths short-replacement record, if any.
+        int32_t u = (oldLength << 12) | (newLength << 9);
+        int32_t last = lastUnit();
+        if(MAX_UNCHANGED < last && last < MAX_SHORT_CHANGE &&
+                (last & ~SHORT_CHANGE_NUM_MASK) == u &&
+                (last & SHORT_CHANGE_NUM_MASK) < SHORT_CHANGE_NUM_MASK) {
+            setLastUnit(last + 1);
+            return;
+        }
+        append(u);
+        return;
+    }
+
+    int32_t head = 0x7000;
+    if (oldLength < LENGTH_IN_1TRAIL && newLength < LENGTH_IN_1TRAIL) {
+        head |= oldLength << 6;
+        head |= newLength;
+        append(head);
+    } else if ((capacity - length) >= 5 || growArray()) {
+        int32_t limit = length + 1;
+        if(oldLength < LENGTH_IN_1TRAIL) {
+            head |= oldLength << 6;
+        } else if(oldLength <= 0x7fff) {
+            head |= LENGTH_IN_1TRAIL << 6;
+            array[limit++] = (uint16_t)(0x8000 | oldLength);
+        } else {
+            head |= (LENGTH_IN_2TRAIL + (oldLength >> 30)) << 6;
+            array[limit++] = (uint16_t)(0x8000 | (oldLength >> 15));
+            array[limit++] = (uint16_t)(0x8000 | oldLength);
+        }
+        if(newLength < LENGTH_IN_1TRAIL) {
+            head |= newLength;
+        } else if(newLength <= 0x7fff) {
+            head |= LENGTH_IN_1TRAIL;
+            array[limit++] = (uint16_t)(0x8000 | newLength);
+        } else {
+            head |= LENGTH_IN_2TRAIL + (newLength >> 30);
+            array[limit++] = (uint16_t)(0x8000 | (newLength >> 15));
+            array[limit++] = (uint16_t)(0x8000 | newLength);
+        }
+        array[length] = (uint16_t)head;
+        length = limit;
+    }
+}
+
+void Edits::append(int32_t r) {
+    if(length < capacity || growArray()) {
+        array[length++] = (uint16_t)r;
+    }
+}
+
+UBool Edits::growArray() {
+    int32_t newCapacity;
+    if (array == stackArray) {
+        newCapacity = 2000;
+    } else if (capacity == INT32_MAX) {
+        // Not U_BUFFER_OVERFLOW_ERROR because that could be confused on a string transform API
+        // with a result-string-buffer overflow.
+        errorCode_ = U_INDEX_OUTOFBOUNDS_ERROR;
+        return FALSE;
+    } else if (capacity >= (INT32_MAX / 2)) {
+        newCapacity = INT32_MAX;
+    } else {
+        newCapacity = 2 * capacity;
+    }
+    // Grow by at least 5 units so that a maximal change record will fit.
+    if ((newCapacity - capacity) < 5) {
+        errorCode_ = U_INDEX_OUTOFBOUNDS_ERROR;
+        return FALSE;
+    }
+    uint16_t *newArray = (uint16_t *)uprv_malloc((size_t)newCapacity * 2);
+    if (newArray == NULL) {
+        errorCode_ = U_MEMORY_ALLOCATION_ERROR;
+        return FALSE;
+    }
+    uprv_memcpy(newArray, array, (size_t)length * 2);
+    releaseArray();
+    array = newArray;
+    capacity = newCapacity;
+    return TRUE;
+}
+
+UBool Edits::copyErrorTo(UErrorCode &outErrorCode) {
+    if (U_FAILURE(outErrorCode)) { return TRUE; }
+    if (U_SUCCESS(errorCode_)) { return FALSE; }
+    outErrorCode = errorCode_;
+    return TRUE;
+}
+
+Edits &Edits::mergeAndAppend(const Edits &ab, const Edits &bc, UErrorCode &errorCode) {
+    if (copyErrorTo(errorCode)) { return *this; }
+    // Picture string a --(Edits ab)--> string b --(Edits bc)--> string c.
+    // Parallel iteration over both Edits.
+    Iterator abIter = ab.getFineIterator();
+    Iterator bcIter = bc.getFineIterator();
+    UBool abHasNext = TRUE, bcHasNext = TRUE;
+    // Copy iterator state into local variables, so that we can modify and subdivide spans.
+    // ab old & new length, bc old & new length
+    int32_t aLength = 0, ab_bLength = 0, bc_bLength = 0, cLength = 0;
+    // When we have different-intermediate-length changes, we accumulate a larger change.
+    int32_t pending_aLength = 0, pending_cLength = 0;
+    for (;;) {
+        // At this point, for each of the two iterators:
+        // Either we are done with the locally cached current edit,
+        // and its intermediate-string length has been reset,
+        // or we will continue to work with a truncated remainder of this edit.
+        //
+        // If the current edit is done, and the iterator has not yet reached the end,
+        // then we fetch the next edit. This is true for at least one of the iterators.
+        //
+        // Normally it does not matter whether we fetch from ab and then bc or vice versa.
+        // However, the result is observably different when
+        // ab deletions meet bc insertions at the same intermediate-string index.
+        // Some users expect the bc insertions to come first, so we fetch from bc first.
+        if (bc_bLength == 0) {
+            if (bcHasNext && (bcHasNext = bcIter.next(errorCode))) {
+                bc_bLength = bcIter.oldLength();
+                cLength = bcIter.newLength();
+                if (bc_bLength == 0) {
+                    // insertion
+                    if (ab_bLength == 0 || !abIter.hasChange()) {
+                        addReplace(pending_aLength, pending_cLength + cLength);
+                        pending_aLength = pending_cLength = 0;
+                    } else {
+                        pending_cLength += cLength;
+                    }
+                    continue;
+                }
+            }
+            // else see if the other iterator is done, too.
+        }
+        if (ab_bLength == 0) {
+            if (abHasNext && (abHasNext = abIter.next(errorCode))) {
+                aLength = abIter.oldLength();
+                ab_bLength = abIter.newLength();
+                if (ab_bLength == 0) {
+                    // deletion
+                    if (bc_bLength == bcIter.oldLength() || !bcIter.hasChange()) {
+                        addReplace(pending_aLength + aLength, pending_cLength);
+                        pending_aLength = pending_cLength = 0;
+                    } else {
+                        pending_aLength += aLength;
+                    }
+                    continue;
+                }
+            } else if (bc_bLength == 0) {
+                // Both iterators are done at the same time:
+                // The intermediate-string lengths match.
+                break;
+            } else {
+                // The ab output string is shorter than the bc input string.
+                if (!copyErrorTo(errorCode)) {
+                    errorCode = U_ILLEGAL_ARGUMENT_ERROR;
+                }
+                return *this;
+            }
+        }
+        if (bc_bLength == 0) {
+            // The bc input string is shorter than the ab output string.
+            if (!copyErrorTo(errorCode)) {
+                errorCode = U_ILLEGAL_ARGUMENT_ERROR;
+            }
+            return *this;
+        }
+        //  Done fetching: ab_bLength > 0 && bc_bLength > 0
+
+        // The current state has two parts:
+        // - Past: We accumulate a longer ac edit in the "pending" variables.
+        // - Current: We have copies of the current ab/bc edits in local variables.
+        //   At least one side is newly fetched.
+        //   One side might be a truncated remainder of an edit we fetched earlier.
+
+        if (!abIter.hasChange() && !bcIter.hasChange()) {
+            // An unchanged span all the way from string a to string c.
+            if (pending_aLength != 0 || pending_cLength != 0) {
+                addReplace(pending_aLength, pending_cLength);
+                pending_aLength = pending_cLength = 0;
+            }
+            int32_t unchangedLength = aLength <= cLength ? aLength : cLength;
+            addUnchanged(unchangedLength);
+            ab_bLength = aLength -= unchangedLength;
+            bc_bLength = cLength -= unchangedLength;
+            // At least one of the unchanged spans is now empty.
+            continue;
+        }
+        if (!abIter.hasChange() && bcIter.hasChange()) {
+            // Unchanged a->b but changed b->c.
+            if (ab_bLength >= bc_bLength) {
+                // Split the longer unchanged span into change + remainder.
+                addReplace(pending_aLength + bc_bLength, pending_cLength + cLength);
+                pending_aLength = pending_cLength = 0;
+                aLength = ab_bLength -= bc_bLength;
+                bc_bLength = 0;
+                continue;
+            }
+            // Handle the shorter unchanged span below like a change.
+        } else if (abIter.hasChange() && !bcIter.hasChange()) {
+            // Changed a->b and then unchanged b->c.
+            if (ab_bLength <= bc_bLength) {
+                // Split the longer unchanged span into change + remainder.
+                addReplace(pending_aLength + aLength, pending_cLength + ab_bLength);
+                pending_aLength = pending_cLength = 0;
+                cLength = bc_bLength -= ab_bLength;
+                ab_bLength = 0;
+                continue;
+            }
+            // Handle the shorter unchanged span below like a change.
+        } else {  // both abIter.hasChange() && bcIter.hasChange()
+            if (ab_bLength == bc_bLength) {
+                // Changes on both sides up to the same position. Emit & reset.
+                addReplace(pending_aLength + aLength, pending_cLength + cLength);
+                pending_aLength = pending_cLength = 0;
+                ab_bLength = bc_bLength = 0;
+                continue;
+            }
+        }
+        // Accumulate the a->c change, reset the shorter side,
+        // keep a remainder of the longer one.
+        pending_aLength += aLength;
+        pending_cLength += cLength;
+        if (ab_bLength < bc_bLength) {
+            bc_bLength -= ab_bLength;
+            cLength = ab_bLength = 0;
+        } else {  // ab_bLength > bc_bLength
+            ab_bLength -= bc_bLength;
+            aLength = bc_bLength = 0;
+        }
+    }
+    if (pending_aLength != 0 || pending_cLength != 0) {
+        addReplace(pending_aLength, pending_cLength);
+    }
+    copyErrorTo(errorCode);
+    return *this;
+}
+
+Edits::Iterator::Iterator(const uint16_t *a, int32_t len, UBool oc, UBool crs) :
+        array(a), index(0), length(len), remaining(0),
+        onlyChanges_(oc), coarse(crs),
+        dir(0), changed(FALSE), oldLength_(0), newLength_(0),
+        srcIndex(0), replIndex(0), destIndex(0) {}
+
+int32_t Edits::Iterator::readLength(int32_t head) {
+    if (head < LENGTH_IN_1TRAIL) {
+        return head;
+    } else if (head < LENGTH_IN_2TRAIL) {
+        U_ASSERT(index < length);
+        U_ASSERT(array[index] >= 0x8000);
+        return array[index++] & 0x7fff;
+    } else {
+        U_ASSERT((index + 2) <= length);
+        U_ASSERT(array[index] >= 0x8000);
+        U_ASSERT(array[index + 1] >= 0x8000);
+        int32_t len = ((head & 1) << 30) |
+                ((int32_t)(array[index] & 0x7fff) << 15) |
+                (array[index + 1] & 0x7fff);
+        index += 2;
+        return len;
+    }
+}
+
+void Edits::Iterator::updateNextIndexes() {
+    srcIndex += oldLength_;
+    if (changed) {
+        replIndex += newLength_;
+    }
+    destIndex += newLength_;
+}
+
+void Edits::Iterator::updatePreviousIndexes() {
+    srcIndex -= oldLength_;
+    if (changed) {
+        replIndex -= newLength_;
+    }
+    destIndex -= newLength_;
+}
+
+UBool Edits::Iterator::noNext() {
+    // No change before or beyond the string.
+    dir = 0;
+    changed = FALSE;
+    oldLength_ = newLength_ = 0;
+    return FALSE;
+}
+
+UBool Edits::Iterator::next(UBool onlyChanges, UErrorCode &errorCode) {
+    // Forward iteration: Update the string indexes to the limit of the current span,
+    // and post-increment-read array units to assemble a new span.
+    // Leaves the array index one after the last unit of that span.
+    if (U_FAILURE(errorCode)) { return FALSE; }
+    // We have an errorCode in case we need to start guarding against integer overflows.
+    // It is also convenient for caller loops if we bail out when an error was set elsewhere.
+    if (dir > 0) {
+        updateNextIndexes();
+    } else {
+        if (dir < 0) {
+            // Turn around from previous() to next().
+            // Post-increment-read the same span again.
+            if (remaining > 0) {
+                // Fine-grained iterator:
+                // Stay on the current one of a sequence of compressed changes.
+                ++index;  // next() rests on the index after the sequence unit.
+                dir = 1;
+                return TRUE;
+            }
+        }
+        dir = 1;
+    }
+    if (remaining >= 1) {
+        // Fine-grained iterator: Continue a sequence of compressed changes.
+        if (remaining > 1) {
+            --remaining;
+            return TRUE;
+        }
+        remaining = 0;
+    }
+    if (index >= length) {
+        return noNext();
+    }
+    int32_t u = array[index++];
+    if (u <= MAX_UNCHANGED) {
+        // Combine adjacent unchanged ranges.
+        changed = FALSE;
+        oldLength_ = u + 1;
+        while (index < length && (u = array[index]) <= MAX_UNCHANGED) {
+            ++index;
+            oldLength_ += u + 1;
+        }
+        newLength_ = oldLength_;
+        if (onlyChanges) {
+            updateNextIndexes();
+            if (index >= length) {
+                return noNext();
+            }
+            // already fetched u > MAX_UNCHANGED at index
+            ++index;
+        } else {
+            return TRUE;
+        }
+    }
+    changed = TRUE;
+    if (u <= MAX_SHORT_CHANGE) {
+        int32_t oldLen = u >> 12;
+        int32_t newLen = (u >> 9) & MAX_SHORT_CHANGE_NEW_LENGTH;
+        int32_t num = (u & SHORT_CHANGE_NUM_MASK) + 1;
+        if (coarse) {
+            oldLength_ = num * oldLen;
+            newLength_ = num * newLen;
+        } else {
+            // Split a sequence of changes that was compressed into one unit.
+            oldLength_ = oldLen;
+            newLength_ = newLen;
+            if (num > 1) {
+                remaining = num;  // This is the first of two or more changes.
+            }
+            return TRUE;
+        }
+    } else {
+        U_ASSERT(u <= 0x7fff);
+        oldLength_ = readLength((u >> 6) & 0x3f);
+        newLength_ = readLength(u & 0x3f);
+        if (!coarse) {
+            return TRUE;
+        }
+    }
+    // Combine adjacent changes.
+    while (index < length && (u = array[index]) > MAX_UNCHANGED) {
+        ++index;
+        if (u <= MAX_SHORT_CHANGE) {
+            int32_t num = (u & SHORT_CHANGE_NUM_MASK) + 1;
+            oldLength_ += (u >> 12) * num;
+            newLength_ += ((u >> 9) & MAX_SHORT_CHANGE_NEW_LENGTH) * num;
+        } else {
+            U_ASSERT(u <= 0x7fff);
+            oldLength_ += readLength((u >> 6) & 0x3f);
+            newLength_ += readLength(u & 0x3f);
+        }
+    }
+    return TRUE;
+}
+
+UBool Edits::Iterator::previous(UErrorCode &errorCode) {
+    // Backward iteration: Pre-decrement-read array units to assemble a new span,
+    // then update the string indexes to the start of that span.
+    // Leaves the array index on the head unit of that span.
+    if (U_FAILURE(errorCode)) { return FALSE; }
+    // We have an errorCode in case we need to start guarding against integer overflows.
+    // It is also convenient for caller loops if we bail out when an error was set elsewhere.
+    if (dir >= 0) {
+        if (dir > 0) {
+            // Turn around from next() to previous().
+            // Set the string indexes to the span limit and
+            // pre-decrement-read the same span again.
+            if (remaining > 0) {
+                // Fine-grained iterator:
+                // Stay on the current one of a sequence of compressed changes.
+                --index;  // previous() rests on the sequence unit.
+                dir = -1;
+                return TRUE;
+            }
+            updateNextIndexes();
+        }
+        dir = -1;
+    }
+    if (remaining > 0) {
+        // Fine-grained iterator: Continue a sequence of compressed changes.
+        int32_t u = array[index];
+        U_ASSERT(MAX_UNCHANGED < u && u <= MAX_SHORT_CHANGE);
+        if (remaining <= (u & SHORT_CHANGE_NUM_MASK)) {
+            ++remaining;
+            updatePreviousIndexes();
+            return TRUE;
+        }
+        remaining = 0;
+    }
+    if (index <= 0) {
+        return noNext();
+    }
+    int32_t u = array[--index];
+    if (u <= MAX_UNCHANGED) {
+        // Combine adjacent unchanged ranges.
+        changed = FALSE;
+        oldLength_ = u + 1;
+        while (index > 0 && (u = array[index - 1]) <= MAX_UNCHANGED) {
+            --index;
+            oldLength_ += u + 1;
+        }
+        newLength_ = oldLength_;
+        // No need to handle onlyChanges as long as previous() is called only from findIndex().
+        updatePreviousIndexes();
+        return TRUE;
+    }
+    changed = TRUE;
+    if (u <= MAX_SHORT_CHANGE) {
+        int32_t oldLen = u >> 12;
+        int32_t newLen = (u >> 9) & MAX_SHORT_CHANGE_NEW_LENGTH;
+        int32_t num = (u & SHORT_CHANGE_NUM_MASK) + 1;
+        if (coarse) {
+            oldLength_ = num * oldLen;
+            newLength_ = num * newLen;
+        } else {
+            // Split a sequence of changes that was compressed into one unit.
+            oldLength_ = oldLen;
+            newLength_ = newLen;
+            if (num > 1) {
+                remaining = 1;  // This is the last of two or more changes.
+            }
+            updatePreviousIndexes();
+            return TRUE;
+        }
+    } else {
+        if (u <= 0x7fff) {
+            // The change is encoded in u alone.
+            oldLength_ = readLength((u >> 6) & 0x3f);
+            newLength_ = readLength(u & 0x3f);
+        } else {
+            // Back up to the head of the change, read the lengths,
+            // and reset the index to the head again.
+            U_ASSERT(index > 0);
+            while ((u = array[--index]) > 0x7fff) {}
+            U_ASSERT(u > MAX_SHORT_CHANGE);
+            int32_t headIndex = index++;
+            oldLength_ = readLength((u >> 6) & 0x3f);
+            newLength_ = readLength(u & 0x3f);
+            index = headIndex;
+        }
+        if (!coarse) {
+            updatePreviousIndexes();
+            return TRUE;
+        }
+    }
+    // Combine adjacent changes.
+    while (index > 0 && (u = array[index - 1]) > MAX_UNCHANGED) {
+        --index;
+        if (u <= MAX_SHORT_CHANGE) {
+            int32_t num = (u & SHORT_CHANGE_NUM_MASK) + 1;
+            oldLength_ += (u >> 12) * num;
+            newLength_ += ((u >> 9) & MAX_SHORT_CHANGE_NEW_LENGTH) * num;
+        } else if (u <= 0x7fff) {
+            // Read the lengths, and reset the index to the head again.
+            int32_t headIndex = index++;
+            oldLength_ += readLength((u >> 6) & 0x3f);
+            newLength_ += readLength(u & 0x3f);
+            index = headIndex;
+        }
+    }
+    updatePreviousIndexes();
+    return TRUE;
+}
+
+int32_t Edits::Iterator::findIndex(int32_t i, UBool findSource, UErrorCode &errorCode) {
+    if (U_FAILURE(errorCode) || i < 0) { return -1; }
+    int32_t spanStart, spanLength;
+    if (findSource) {  // find source index
+        spanStart = srcIndex;
+        spanLength = oldLength_;
+    } else {  // find destination index
+        spanStart = destIndex;
+        spanLength = newLength_;
+    }
+    if (i < spanStart) {
+        if (i >= (spanStart / 2)) {
+            // Search backwards.
+            for (;;) {
+                UBool hasPrevious = previous(errorCode);
+                U_ASSERT(hasPrevious);  // because i>=0 and the first span starts at 0
+                (void)hasPrevious;  // avoid unused-variable warning
+                spanStart = findSource ? srcIndex : destIndex;
+                if (i >= spanStart) {
+                    // The index is in the current span.
+                    return 0;
+                }
+                if (remaining > 0) {
+                    // Is the index in one of the remaining compressed edits?
+                    // spanStart is the start of the current span, first of the remaining ones.
+                    spanLength = findSource ? oldLength_ : newLength_;
+                    int32_t u = array[index];
+                    U_ASSERT(MAX_UNCHANGED < u && u <= MAX_SHORT_CHANGE);
+                    int32_t num = (u & SHORT_CHANGE_NUM_MASK) + 1 - remaining;
+                    int32_t len = num * spanLength;
+                    if (i >= (spanStart - len)) {
+                        int32_t n = ((spanStart - i - 1) / spanLength) + 1;
+                        // 1 <= n <= num
+                        srcIndex -= n * oldLength_;
+                        replIndex -= n * newLength_;
+                        destIndex -= n * newLength_;
+                        remaining += n;
+                        return 0;
+                    }
+                    // Skip all of these edits at once.
+                    srcIndex -= num * oldLength_;
+                    replIndex -= num * newLength_;
+                    destIndex -= num * newLength_;
+                    remaining = 0;
+                }
+            }
+        }
+        // Reset the iterator to the start.
+        dir = 0;
+        index = remaining = oldLength_ = newLength_ = srcIndex = replIndex = destIndex = 0;
+    } else if (i < (spanStart + spanLength)) {
+        // The index is in the current span.
+        return 0;
+    }
+    while (next(FALSE, errorCode)) {
+        if (findSource) {
+            spanStart = srcIndex;
+            spanLength = oldLength_;
+        } else {
+            spanStart = destIndex;
+            spanLength = newLength_;
+        }
+        if (i < (spanStart + spanLength)) {
+            // The index is in the current span.
+            return 0;
+        }
+        if (remaining > 1) {
+            // Is the index in one of the remaining compressed edits?
+            // spanStart is the start of the current span, first of the remaining ones.
+            int32_t len = remaining * spanLength;
+            if (i < (spanStart + len)) {
+                int32_t n = (i - spanStart) / spanLength;  // 1 <= n <= remaining - 1
+                srcIndex += n * oldLength_;
+                replIndex += n * newLength_;
+                destIndex += n * newLength_;
+                remaining -= n;
+                return 0;
+            }
+            // Make next() skip all of these edits at once.
+            oldLength_ *= remaining;
+            newLength_ *= remaining;
+            remaining = 0;
+        }
+    }
+    return 1;
+}
+
+int32_t Edits::Iterator::destinationIndexFromSourceIndex(int32_t i, UErrorCode &errorCode) {
+    int32_t where = findIndex(i, TRUE, errorCode);
+    if (where < 0) {
+        // Error or before the string.
+        return 0;
+    }
+    if (where > 0 || i == srcIndex) {
+        // At or after string length, or at start of the found span.
+        return destIndex;
+    }
+    if (changed) {
+        // In a change span, map to its end.
+        return destIndex + newLength_;
+    } else {
+        // In an unchanged span, offset 1:1 within it.
+        return destIndex + (i - srcIndex);
+    }
+}
+
+int32_t Edits::Iterator::sourceIndexFromDestinationIndex(int32_t i, UErrorCode &errorCode) {
+    int32_t where = findIndex(i, FALSE, errorCode);
+    if (where < 0) {
+        // Error or before the string.
+        return 0;
+    }
+    if (where > 0 || i == destIndex) {
+        // At or after string length, or at start of the found span.
+        return srcIndex;
+    }
+    if (changed) {
+        // In a change span, map to its end.
+        return srcIndex + oldLength_;
+    } else {
+        // In an unchanged span, offset within it.
+        return srcIndex + (i - destIndex);
+    }
+}
+
+U_NAMESPACE_END


Property changes on: trunk/Build/source/libs/icu/icu-src/source/common/edits.cpp
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Build/source/libs/icu/icu-src/source/common/errorcode.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/errorcode.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/errorcode.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 *******************************************************************************
@@ -8,7 +8,7 @@
 *
 *******************************************************************************
 *   file name:  errorcode.cpp
-*   encoding:   US-ASCII
+*   encoding:   UTF-8
 *   tab size:   8 (not used)
 *   indentation:4
 *

Modified: trunk/Build/source/libs/icu/icu-src/source/common/filteredbrk.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/filteredbrk.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/filteredbrk.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 *******************************************************************************
@@ -694,7 +694,7 @@
 }
 
 FilteredBreakIteratorBuilder *
-FilteredBreakIteratorBuilder::createInstance(UErrorCode& status) {
+FilteredBreakIteratorBuilder::createEmptyInstance(UErrorCode& status) {
   if(U_FAILURE(status)) return NULL;
   LocalPointer<FilteredBreakIteratorBuilder> ret(new SimpleFilteredBreakIteratorBuilder(status), status);
   return (U_SUCCESS(status))? ret.orphan(): NULL;
@@ -702,4 +702,4 @@
 
 U_NAMESPACE_END
 
-#endif //#if !UCONFIG_NO_BREAK_ITERATION && U_HAVE_STD_STRING && !UCONFIG_NO_FILTERED_BREAK_ITERATION
+#endif //#if !UCONFIG_NO_BREAK_ITERATION && !UCONFIG_NO_FILTERED_BREAK_ITERATION

Modified: trunk/Build/source/libs/icu/icu-src/source/common/filterednormalizer2.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/filterednormalizer2.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/filterednormalizer2.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 *******************************************************************************
@@ -8,7 +8,7 @@
 *
 *******************************************************************************
 *   file name:  filterednormalizer2.cpp
-*   encoding:   US-ASCII
+*   encoding:   UTF-8
 *   tab size:   8 (not used)
 *   indentation:4
 *
@@ -20,7 +20,9 @@
 
 #if !UCONFIG_NO_NORMALIZATION
 
+#include "unicode/edits.h"
 #include "unicode/normalizer2.h"
+#include "unicode/stringoptions.h"
 #include "unicode/uniset.h"
 #include "unicode/unistr.h"
 #include "unicode/unorm.h"
@@ -85,6 +87,52 @@
     return dest;
 }
 
+void
+FilteredNormalizer2::normalizeUTF8(uint32_t options, StringPiece src, ByteSink &sink,
+                                   Edits *edits, UErrorCode &errorCode) const {
+    if (U_FAILURE(errorCode)) {
+        return;
+    }
+    if (edits != nullptr && (options & U_EDITS_NO_RESET) == 0) {
+        edits->reset();
+    }
+    options |= U_EDITS_NO_RESET;  // Do not reset for each span.
+    normalizeUTF8(options, src.data(), src.length(), sink, edits, USET_SPAN_SIMPLE, errorCode);
+}
+
+void
+FilteredNormalizer2::normalizeUTF8(uint32_t options, const char *src, int32_t length,
+                                   ByteSink &sink, Edits *edits,
+                                   USetSpanCondition spanCondition,
+                                   UErrorCode &errorCode) const {
+    while (length > 0) {
+        int32_t spanLength = set.spanUTF8(src, length, spanCondition);
+        if (spanCondition == USET_SPAN_NOT_CONTAINED) {
+            if (spanLength != 0) {
+                if (edits != nullptr) {
+                    edits->addUnchanged(spanLength);
+                }
+                if ((options & U_OMIT_UNCHANGED_TEXT) == 0) {
+                    sink.Append(src, spanLength);
+                }
+            }
+            spanCondition = USET_SPAN_SIMPLE;
+        } else {
+            if (spanLength != 0) {
+                // Not norm2.normalizeSecondAndAppend() because we do not want
+                // to modify the non-filter part of dest.
+                norm2.normalizeUTF8(options, StringPiece(src, spanLength), sink, edits, errorCode);
+                if (U_FAILURE(errorCode)) {
+                    break;
+                }
+            }
+            spanCondition = USET_SPAN_NOT_CONTAINED;
+        }
+        src += spanLength;
+        length -= spanLength;
+    }
+}
+
 UnicodeString &
 FilteredNormalizer2::normalizeSecondAndAppend(UnicodeString &first,
                                               const UnicodeString &second,
@@ -196,6 +244,31 @@
     return TRUE;
 }
 
+UBool
+FilteredNormalizer2::isNormalizedUTF8(StringPiece sp, UErrorCode &errorCode) const {
+    if(U_FAILURE(errorCode)) {
+        return FALSE;
+    }
+    const char *s = sp.data();
+    int32_t length = sp.length();
+    USetSpanCondition spanCondition = USET_SPAN_SIMPLE;
+    while (length > 0) {
+        int32_t spanLength = set.spanUTF8(s, length, spanCondition);
+        if (spanCondition == USET_SPAN_NOT_CONTAINED) {
+            spanCondition = USET_SPAN_SIMPLE;
+        } else {
+            if (!norm2.isNormalizedUTF8(StringPiece(s, spanLength), errorCode) ||
+                    U_FAILURE(errorCode)) {
+                return FALSE;
+            }
+            spanCondition = USET_SPAN_NOT_CONTAINED;
+        }
+        s += spanLength;
+        length -= spanLength;
+    }
+    return TRUE;
+}
+
 UNormalizationCheckResult
 FilteredNormalizer2::quickCheck(const UnicodeString &s, UErrorCode &errorCode) const {
     uprv_checkCanGetBuffer(s, errorCode);

Modified: trunk/Build/source/libs/icu/icu-src/source/common/hash.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/hash.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/hash.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 ******************************************************************************
@@ -33,6 +33,8 @@
 
     inline void init(UHashFunction *keyHash, UKeyComparator *keyComp, UValueComparator *valueComp, UErrorCode& status);
 
+    inline void initSize(UHashFunction *keyHash, UKeyComparator *keyComp, UValueComparator *valueComp, int32_t size, UErrorCode& status);
+
 public:
     /**
      * Construct a hashtable
@@ -43,6 +45,14 @@
 
     /**
      * Construct a hashtable
+     * @param ignoreKeyCase If true, keys are case insensitive.
+     * @param size initial size allocation
+     * @param status Error code
+    */
+    Hashtable(UBool ignoreKeyCase, int32_t size, UErrorCode& status);
+
+    /**
+     * Construct a hashtable
      * @param keyComp Comparator for comparing the keys
      * @param valueComp Comparator for comparing the values
      * @param status Error code
@@ -76,9 +86,9 @@
     int32_t puti(const UnicodeString& key, int32_t value, UErrorCode& status);
 
     void* get(const UnicodeString& key) const;
-    
+
     int32_t geti(const UnicodeString& key) const;
-    
+
     void* remove(const UnicodeString& key);
 
     int32_t removei(const UnicodeString& key);
@@ -92,9 +102,9 @@
      * @see uhash_nextElement
      */
     const UHashElement* nextElement(int32_t& pos) const;
-    
+
     UKeyComparator* setKeyComparator(UKeyComparator*keyComp);
-    
+
     UValueComparator* setValueComparator(UValueComparator* valueComp);
 
     UBool equals(const Hashtable& that) const;
@@ -107,7 +117,7 @@
  * Implementation
  ********************************************************************/
 
-inline void Hashtable::init(UHashFunction *keyHash, UKeyComparator *keyComp, 
+inline void Hashtable::init(UHashFunction *keyHash, UKeyComparator *keyComp,
                             UValueComparator *valueComp, UErrorCode& status) {
     if (U_FAILURE(status)) {
         return;
@@ -119,10 +129,23 @@
     }
 }
 
-inline Hashtable::Hashtable(UKeyComparator *keyComp, UValueComparator *valueComp, 
+inline void Hashtable::initSize(UHashFunction *keyHash, UKeyComparator *keyComp,
+                                UValueComparator *valueComp, int32_t size, UErrorCode& status) {
+    if (U_FAILURE(status)) {
+        return;
+    }
+    uhash_initSize(&hashObj, keyHash, keyComp, valueComp, size, &status);
+    if (U_SUCCESS(status)) {
+        hash = &hashObj;
+        uhash_setKeyDeleter(hash, uprv_deleteUObject);
+    }
+}
+
+inline Hashtable::Hashtable(UKeyComparator *keyComp, UValueComparator *valueComp,
                  UErrorCode& status) : hash(0) {
     init( uhash_hashUnicodeString, keyComp, valueComp, status);
 }
+
 inline Hashtable::Hashtable(UBool ignoreKeyCase, UErrorCode& status)
  : hash(0)
 {
@@ -134,6 +157,17 @@
             status);
 }
 
+inline Hashtable::Hashtable(UBool ignoreKeyCase, int32_t size, UErrorCode& status)
+ : hash(0)
+{
+    initSize(ignoreKeyCase ? uhash_hashCaselessUnicodeString
+                        : uhash_hashUnicodeString,
+            ignoreKeyCase ? uhash_compareCaselessUnicodeString
+                        : uhash_compareUnicodeString,
+            NULL, size,
+            status);
+}
+
 inline Hashtable::Hashtable(UErrorCode& status)
  : hash(0)
 {
@@ -200,7 +234,7 @@
 inline UKeyComparator* Hashtable::setKeyComparator(UKeyComparator*keyComp){
     return uhash_setKeyComparator(hash, keyComp);
 }
-    
+
 inline UValueComparator* Hashtable::setValueComparator(UValueComparator* valueComp){
     return uhash_setValueComparator(hash, valueComp);
 }

Deleted: trunk/Build/source/libs/icu/icu-src/source/common/icudataver.c
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/icudataver.c	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/icudataver.c	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,31 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
-******************************************************************************
-*
-*   Copyright (C) 2009-2011, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-******************************************************************************
-*/
-
-#include "unicode/utypes.h"
-#include "unicode/icudataver.h"
-#include "unicode/ures.h"
-#include "uresimp.h" /* for ures_getVersionByKey */
-
-U_CAPI void U_EXPORT2 u_getDataVersion(UVersionInfo dataVersionFillin, UErrorCode *status) {
-    UResourceBundle *icudatares = NULL;
-    
-    if (U_FAILURE(*status)) {
-        return;
-    }
-    
-    if (dataVersionFillin != NULL) {
-        icudatares = ures_openDirect(NULL, U_ICU_VERSION_BUNDLE , status);
-        if (U_SUCCESS(*status)) {
-            ures_getVersionByKey(icudatares, U_ICU_DATA_KEY, dataVersionFillin, status);
-        }
-        ures_close(icudatares);
-    }
-}

Added: trunk/Build/source/libs/icu/icu-src/source/common/icudataver.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/icudataver.cpp	                        (rev 0)
+++ trunk/Build/source/libs/icu/icu-src/source/common/icudataver.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -0,0 +1,31 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+******************************************************************************
+*
+*   Copyright (C) 2009-2011, International Business Machines
+*   Corporation and others.  All Rights Reserved.
+*
+******************************************************************************
+*/
+
+#include "unicode/utypes.h"
+#include "unicode/icudataver.h"
+#include "unicode/ures.h"
+#include "uresimp.h" /* for ures_getVersionByKey */
+
+U_CAPI void U_EXPORT2 u_getDataVersion(UVersionInfo dataVersionFillin, UErrorCode *status) {
+    UResourceBundle *icudatares = NULL;
+    
+    if (U_FAILURE(*status)) {
+        return;
+    }
+    
+    if (dataVersionFillin != NULL) {
+        icudatares = ures_openDirect(NULL, U_ICU_VERSION_BUNDLE , status);
+        if (U_SUCCESS(*status)) {
+            ures_getVersionByKey(icudatares, U_ICU_DATA_KEY, dataVersionFillin, status);
+        }
+        ures_close(icudatares);
+    }
+}


Property changes on: trunk/Build/source/libs/icu/icu-src/source/common/icudataver.cpp
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Build/source/libs/icu/icu-src/source/common/icuplug.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/icuplug.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/icuplug.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 ******************************************************************************

Modified: trunk/Build/source/libs/icu/icu-src/source/common/icuplugimp.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/icuplugimp.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/icuplugimp.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 ******************************************************************************

Modified: trunk/Build/source/libs/icu/icu-src/source/common/listformatter.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/listformatter.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/listformatter.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 *******************************************************************************
@@ -8,7 +8,7 @@
 *
 *******************************************************************************
 *   file name:  listformatter.cpp
-*   encoding:   US-ASCII
+*   encoding:   UTF-8
 *   tab size:   8 (not used)
 *   indentation:4
 *
@@ -25,6 +25,7 @@
 #include "charstr.h"
 #include "ucln_cmn.h"
 #include "uresimp.h"
+#include "resource.h"
 
 U_NAMESPACE_BEGIN
 
@@ -62,7 +63,7 @@
 
 static Hashtable* listPatternHash = NULL;
 static UMutex listFormatterMutex = U_MUTEX_INITIALIZER;
-static const char *STANDARD_STYLE = "standard";
+static const char STANDARD_STYLE[] = "standard";
 
 U_CDECL_BEGIN
 static UBool U_CALLCONV uprv_listformatter_cleanup() {
@@ -78,17 +79,6 @@
 
 U_CDECL_END
 
-static ListFormatInternal* loadListFormatInternal(
-        const Locale& locale,
-        const char* style,
-        UErrorCode& errorCode);
-
-static void getStringByKey(
-        const UResourceBundle* rb,
-        const char* key,
-        UnicodeString& result,
-        UErrorCode& errorCode);
-
 ListFormatter::ListFormatter(const ListFormatter& other) :
         owned(other.owned), data(other.data) {
     if (other.owned != NULL) {
@@ -171,30 +161,107 @@
     return result;
 }
 
-static ListFormatInternal* loadListFormatInternal(
+static const UChar solidus = 0x2F;
+static const UChar aliasPrefix[] = { 0x6C,0x69,0x73,0x74,0x50,0x61,0x74,0x74,0x65,0x72,0x6E,0x2F }; // "listPattern/"
+enum {
+    kAliasPrefixLen = UPRV_LENGTHOF(aliasPrefix),
+    kStyleLenMax = 24 // longest currently is 14
+};
+
+struct ListFormatter::ListPatternsSink : public ResourceSink {
+    UnicodeString two, start, middle, end;
+#if ((U_PLATFORM == U_PF_AIX) || (U_PLATFORM == U_PF_OS390)) && (U_CPLUSPLUS_VERSION < 11)
+    char aliasedStyle[kStyleLenMax+1];
+    ListPatternsSink() {
+      uprv_memset(aliasedStyle, 0, kStyleLenMax+1);
+    }
+#else
+    char aliasedStyle[kStyleLenMax+1] = {0};
+
+    ListPatternsSink() {}
+#endif
+    virtual ~ListPatternsSink();
+
+    void setAliasedStyle(UnicodeString alias) {
+        int32_t startIndex = alias.indexOf(aliasPrefix, kAliasPrefixLen, 0);
+        if (startIndex < 0) {
+            return;
+        }
+        startIndex += kAliasPrefixLen;
+        int32_t endIndex = alias.indexOf(solidus, startIndex);
+        if (endIndex < 0) {
+            endIndex = alias.length();
+        }
+        alias.extract(startIndex, endIndex-startIndex, aliasedStyle, kStyleLenMax+1, US_INV);
+        aliasedStyle[kStyleLenMax] = 0;
+    }
+
+    void handleValueForPattern(ResourceValue &value, UnicodeString &pattern, UErrorCode &errorCode) {
+        if (pattern.isEmpty()) {
+            if (value.getType() == URES_ALIAS) {
+                if (aliasedStyle[0] == 0) {
+                    setAliasedStyle(value.getAliasUnicodeString(errorCode));
+                }
+            } else {
+                pattern = value.getUnicodeString(errorCode);
+            }
+        }
+    }
+
+    virtual void put(const char *key, ResourceValue &value, UBool /*noFallback*/,
+            UErrorCode &errorCode) {
+        aliasedStyle[0] = 0;
+        if (value.getType() == URES_ALIAS) {
+            setAliasedStyle(value.getAliasUnicodeString(errorCode));
+            return;
+        }
+        ResourceTable listPatterns = value.getTable(errorCode);
+        for (int i = 0; U_SUCCESS(errorCode) && listPatterns.getKeyAndValue(i, key, value); ++i) {
+            if (uprv_strcmp(key, "2") == 0) {
+                handleValueForPattern(value, two, errorCode);
+            } else if (uprv_strcmp(key, "end") == 0) {
+                handleValueForPattern(value, end, errorCode);
+            } else if (uprv_strcmp(key, "middle") == 0) {
+                handleValueForPattern(value, middle, errorCode);
+            } else if (uprv_strcmp(key, "start") == 0) {
+                handleValueForPattern(value, start, errorCode);
+            }
+        }
+    }
+};
+
+// Virtual destructors must be defined out of line.
+ListFormatter::ListPatternsSink::~ListPatternsSink() {}
+
+ListFormatInternal* ListFormatter::loadListFormatInternal(
         const Locale& locale, const char * style, UErrorCode& errorCode) {
     UResourceBundle* rb = ures_open(NULL, locale.getName(), &errorCode);
+    rb = ures_getByKeyWithFallback(rb, "listPattern", rb, &errorCode);
     if (U_FAILURE(errorCode)) {
         ures_close(rb);
         return NULL;
     }
-    rb = ures_getByKeyWithFallback(rb, "listPattern", rb, &errorCode);
-    rb = ures_getByKeyWithFallback(rb, style, rb, &errorCode);
+    ListFormatter::ListPatternsSink sink;
+    char currentStyle[kStyleLenMax+1];
+    uprv_strncpy(currentStyle, style, kStyleLenMax);
+    currentStyle[kStyleLenMax] = 0;
 
-    if (U_FAILURE(errorCode)) {
-        ures_close(rb);
-        return NULL;
+    for (;;) {
+        ures_getAllItemsWithFallback(rb, currentStyle, sink, errorCode);
+        if (U_FAILURE(errorCode) || sink.aliasedStyle[0] == 0 || uprv_strcmp(currentStyle, sink.aliasedStyle) == 0) {
+            break;
+        }
+        uprv_strcpy(currentStyle, sink.aliasedStyle);
     }
-    UnicodeString two, start, middle, end;
-    getStringByKey(rb, "2", two, errorCode);
-    getStringByKey(rb, "start", start, errorCode);
-    getStringByKey(rb, "middle", middle, errorCode);
-    getStringByKey(rb, "end", end, errorCode);
     ures_close(rb);
     if (U_FAILURE(errorCode)) {
         return NULL;
     }
-    ListFormatInternal* result = new ListFormatInternal(two, start, middle, end, errorCode);
+    if (sink.two.isEmpty() || sink.start.isEmpty() || sink.middle.isEmpty() || sink.end.isEmpty()) {
+        errorCode = U_MISSING_RESOURCE_ERROR;
+        return NULL;
+    }
+    ListFormatInternal* result = new ListFormatInternal(sink.two, sink.start, sink.middle, sink.end, errorCode);
     if (result == NULL) {
         errorCode = U_MEMORY_ALLOCATION_ERROR;
         return NULL;
@@ -206,15 +273,6 @@
     return result;
 }
 
-static void getStringByKey(const UResourceBundle* rb, const char* key, UnicodeString& result, UErrorCode& errorCode) {
-    int32_t len;
-    const UChar* ustr = ures_getStringByKeyWithFallback(rb, key, &len, &errorCode);
-    if (U_FAILURE(errorCode)) {
-      return;
-    }
-    result.setTo(ustr, len);
-}
-
 ListFormatter* ListFormatter::createInstance(UErrorCode& errorCode) {
     Locale locale;  // The default locale.
     return createInstance(locale, errorCode);

Modified: trunk/Build/source/libs/icu/icu-src/source/common/loadednormalizer2impl.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/loadednormalizer2impl.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/loadednormalizer2impl.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 *******************************************************************************
@@ -62,7 +62,7 @@
         pInfo->dataFormat[1]==0x72 &&
         pInfo->dataFormat[2]==0x6d &&
         pInfo->dataFormat[3]==0x32 &&
-        pInfo->formatVersion[0]==2
+        pInfo->formatVersion[0]==3
     ) {
         // Normalizer2Impl *me=(Normalizer2Impl *)context;
         // uprv_memcpy(me->dataVersion, pInfo->dataVersion, 4);
@@ -84,7 +84,7 @@
     const uint8_t *inBytes=(const uint8_t *)udata_getMemory(memory);
     const int32_t *inIndexes=(const int32_t *)inBytes;
     int32_t indexesLength=inIndexes[IX_NORM_TRIE_OFFSET]/4;
-    if(indexesLength<=IX_MIN_MAYBE_YES) {
+    if(indexesLength<=IX_MIN_LCCC_CP) {
         errorCode=U_INVALID_FORMAT_ERROR;  // Not enough indexes.
         return;
     }
@@ -232,6 +232,7 @@
             }
         }
         if(allModes==NULL) {
+            ucln_common_registerCleanup(UCLN_COMMON_LOADED_NORMALIZER2, uprv_loaded_normalizer2_cleanup);
             LocalPointer<Norm2AllModes> localAllModes(
                 Norm2AllModes::createInstance(packageName, name, errorCode));
             if(U_SUCCESS(errorCode)) {

Modified: trunk/Build/source/libs/icu/icu-src/source/common/localsvc.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/localsvc.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/localsvc.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 ***************************************************************************

Modified: trunk/Build/source/libs/icu/icu-src/source/common/locavailable.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/locavailable.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/locavailable.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 *******************************************************************************
@@ -8,7 +8,7 @@
 *
 *******************************************************************************
 *   file name:  locavailable.cpp
-*   encoding:   US-ASCII
+*   encoding:   UTF-8
 *   tab size:   8 (not used)
 *   indentation:4
 *
@@ -35,7 +35,7 @@
 
 static icu::Locale*  availableLocaleList = NULL;
 static int32_t  availableLocaleListCount;
-static icu::UInitOnce gInitOnce = U_INITONCE_INITIALIZER;
+static icu::UInitOnce gInitOnceLocale = U_INITONCE_INITIALIZER;
 
 U_NAMESPACE_END
 
@@ -50,7 +50,7 @@
         availableLocaleList = NULL;
     }
     availableLocaleListCount = 0;
-    gInitOnce.reset();
+    gInitOnceLocale.reset();
 
     return TRUE;
 }
@@ -81,7 +81,7 @@
 const Locale* U_EXPORT2
 Locale::getAvailableLocales(int32_t& count)
 {
-    umtx_initOnce(gInitOnce, &locale_available_init);
+    umtx_initOnce(gInitOnceLocale, &locale_available_init);
     count = availableLocaleListCount;
     return availableLocaleList;
 }

Modified: trunk/Build/source/libs/icu/icu-src/source/common/locbased.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/locbased.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/locbased.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 **********************************************************************

Modified: trunk/Build/source/libs/icu/icu-src/source/common/locbased.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/locbased.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/locbased.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 **********************************************************************

Modified: trunk/Build/source/libs/icu/icu-src/source/common/locdispnames.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/locdispnames.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/locdispnames.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 *******************************************************************************
@@ -8,7 +8,7 @@
 *
 *******************************************************************************
 *   file name:  locdispnames.cpp
-*   encoding:   US-ASCII
+*   encoding:   UTF-8
 *   tab size:   8 (not used)
 *   indentation:4
 *
@@ -542,7 +542,7 @@
             return 0;
         }
         separator = (const UChar *)p0 + subLen;
-        sepLen = p1 - separator;
+        sepLen = static_cast<int32_t>(p1 - separator);
     }
 
     if(patLen==0 || (patLen==defaultPatLen && !u_strncmp(pattern, defaultPattern, patLen))) {
@@ -558,8 +558,8 @@
             *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
             return 0;
         }
-        sub0Pos=p0-pattern;
-        sub1Pos=p1-pattern;
+        sub0Pos = static_cast<int32_t>(p0-pattern);
+        sub1Pos = static_cast<int32_t>(p1-pattern);
         if (sub1Pos < sub0Pos) { /* a very odd pattern */
             int32_t t=sub0Pos; sub0Pos=sub1Pos; sub1Pos=t;
             langi=1;
@@ -821,6 +821,8 @@
     /* get the keyword value */
     keywordValue[0]=0;
     keywordValueLen = uloc_getKeywordValue(locale, keyword, keywordValue, capacity, status);
+    if (*status == U_STRING_NOT_TERMINATED_WARNING)
+      *status = U_BUFFER_OVERFLOW_ERROR;
 
     /* 
      * if the keyword is equal to currency .. then to get the display name 

Modified: trunk/Build/source/libs/icu/icu-src/source/common/locdspnm.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/locdspnm.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/locdspnm.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 *******************************************************************************
@@ -13,6 +13,7 @@
 
 #include "unicode/locdspnm.h"
 #include "unicode/simpleformatter.h"
+#include "unicode/ucasemap.h"
 #include "unicode/ures.h"
 #include "unicode/udisplaycontext.h"
 #include "unicode/brkiter.h"
@@ -53,7 +54,7 @@
   *p = 0;
   va_end(args);
 
-  return p - buffer;
+  return static_cast<int32_t>(p - buffer);
 }
 
 U_NAMESPACE_BEGIN
@@ -635,8 +636,9 @@
     char value[ULOC_KEYWORD_AND_VALUES_CAPACITY]; // sigh, no ULOC_VALUE_CAPACITY
     const char* key;
     while ((key = e->next((int32_t *)0, status)) != NULL) {
+      value[0] = 0;
       locale.getKeywordValue(key, value, ULOC_KEYWORD_AND_VALUES_CAPACITY, status);
-      if (U_FAILURE(status)) {
+      if (U_FAILURE(status) || status == U_STRING_NOT_TERMINATED_WARNING) {
         return result;
       }
       keyDisplayName(key, temp, TRUE);

Modified: trunk/Build/source/libs/icu/icu-src/source/common/locid.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/locid.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/locid.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
  **********************************************************************
@@ -33,6 +33,7 @@
 
 
 #include "unicode/locid.h"
+#include "unicode/strenum.h"
 #include "unicode/uloc.h"
 #include "putilimp.h"
 #include "mutex.h"

Modified: trunk/Build/source/libs/icu/icu-src/source/common/loclikely.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/loclikely.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/loclikely.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 *******************************************************************************
@@ -8,7 +8,7 @@
 *
 *******************************************************************************
 *   file name:  loclikely.cpp
-*   encoding:   US-ASCII
+*   encoding:   UTF-8
 *   tab size:   8 (not used)
 *   indentation:4
 *
@@ -22,6 +22,7 @@
 #include "unicode/utypes.h"
 #include "unicode/locid.h"
 #include "unicode/putil.h"
+#include "unicode/uchar.h"
 #include "unicode/uloc.h"
 #include "unicode/ures.h"
 #include "unicode/uscript.h"
@@ -510,7 +511,7 @@
             unknownLanguage);
         *langLength = (int32_t)uprv_strlen(lang);
     }
-    else if (_isIDSeparator(*position)) {
+    if (_isIDSeparator(*position)) {
         ++position;
     }
 
@@ -1280,7 +1281,7 @@
 
 // Pairs of (language subtag, + or -) for finding out fast if common languages
 // are LTR (minus) or RTL (plus).
-static const char* LANG_DIR_STRING =
+static const char LANG_DIR_STRING[] =
         "root-en-es-pt-zh-ja-ko-de-fr-it-ar+he+fa+ru-nl-pl-th-tr-";
 
 // Implemented here because this calls uloc_addLikelySubtags().

Deleted: trunk/Build/source/libs/icu/icu-src/source/common/locmap.c
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/locmap.c	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/locmap.c	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,1175 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- **********************************************************************
- *   Copyright (C) 1996-2016, International Business Machines
- *   Corporation and others.  All Rights Reserved.
- **********************************************************************
- *
- * Provides functionality for mapping between
- * LCID and Posix IDs or ICU locale to codepage
- *
- * Note: All classes and code in this file are
- *       intended for internal use only.
- *
- * Methods of interest:
- *   unsigned long convertToLCID(const char*);
- *   const char* convertToPosix(unsigned long);
- *
- * Kathleen Wilson, 4/30/96
- *
- *  Date        Name        Description
- *  3/11/97     aliu        Fixed off-by-one bug in assignment operator. Added
- *                          setId() method and safety check against 
- *                          MAX_ID_LENGTH.
- * 04/23/99     stephen     Added C wrapper for convertToPosix.
- * 09/18/00     george      Removed the memory leaks.
- * 08/23/01     george      Convert to C
- */
-
-#include "locmap.h"
-#include "cstring.h"
-#include "cmemory.h"
-
-#if U_PLATFORM == U_PF_WINDOWS && defined(_MSC_VER) && (_MSC_VER >= 1500)
-/*
- * TODO: It seems like we should widen this to
- * either U_PLATFORM_USES_ONLY_WIN32_API (includes MinGW)
- * or U_PLATFORM_HAS_WIN32_API (includes MinGW and Cygwin)
- * but those use gcc and won't have defined(_MSC_VER).
- * We might need to #include some Windows header and test for some version macro from there.
- * Or call some Windows function and see what it returns.
- */
-#define USE_WINDOWS_LOCALE_API
-#endif
-
-#ifdef USE_WINDOWS_LOCALE_API
-#include <windows.h>
-#include <winnls.h>
-#endif
-
-/*
- * Note:
- * The mapping from Win32 locale ID numbers to POSIX locale strings should
- * be the faster one.
- *
- * Many LCID values come from winnt.h
- * Some also come from http://www.microsoft.com/globaldev/reference/lcid-all.mspx
- */
-
-/*
-////////////////////////////////////////////////
-//
-// Internal Classes for LCID <--> POSIX Mapping
-//
-/////////////////////////////////////////////////
-*/
-
-typedef struct ILcidPosixElement
-{
-    const uint32_t hostID;
-    const char * const posixID;
-} ILcidPosixElement;
-
-typedef struct ILcidPosixMap
-{
-    const uint32_t numRegions;
-    const struct ILcidPosixElement* const regionMaps;
-} ILcidPosixMap;
-
-
-/*
-/////////////////////////////////////////////////
-//
-// Easy macros to make the LCID <--> POSIX Mapping
-//
-/////////////////////////////////////////////////
-*/
-
-/**
- * The standard one language/one country mapping for LCID.
- * The first element must be the language, and the following
- * elements are the language with the country.
- * @param hostID LCID in host format such as 0x044d
- * @param languageID posix ID of just the language such as 'de'
- * @param posixID posix ID of the language_TERRITORY such as 'de_CH'
- */
-#define ILCID_POSIX_ELEMENT_ARRAY(hostID, languageID, posixID) \
-static const ILcidPosixElement locmap_ ## languageID [] = { \
-    {LANGUAGE_LCID(hostID), #languageID},     /* parent locale */ \
-    {hostID, #posixID}, \
-};
-
-/**
- * Define a subtable by ID
- * @param id the POSIX ID, either a language or language_TERRITORY
- */
-#define ILCID_POSIX_SUBTABLE(id) \
-static const ILcidPosixElement locmap_ ## id [] =
-
-
-/**
- * Create the map for the posixID. This macro supposes that the language string
- * name is the same as the global variable name, and that the first element
- * in the ILcidPosixElement is just the language.
- * @param _posixID the full POSIX ID for this entry.
- */
-#define ILCID_POSIX_MAP(_posixID) \
-    {UPRV_LENGTHOF(locmap_ ## _posixID), locmap_ ## _posixID}
-
-/*
-////////////////////////////////////////////
-//
-// Create the table of LCID to POSIX Mapping
-// None of it should be dynamically created.
-//
-// Keep static locale variables inside the function so that
-// it can be created properly during static init.
-//
-// Note: This table should be updated periodically. Check the National Lanaguage Support API Reference Website.
-//       Microsoft is moving away from LCID in favor of locale name as of Vista.  This table needs to be
-//       maintained for support of older Windows version.
-//       Update: Windows 7 (091130)
-//
-// Note: Microsoft assign a different LCID if a locale has a sorting variant. POSIX IDs below may contain
-//       @collation=XXX, but no other keywords are allowed (at least for now). When uprv_convertToLCID() is
-//       called from uloc_getLCID(), keywords other than collation are already removed. If we really need
-//       to support other keywords in this mapping data, we must update the implementation.
-////////////////////////////////////////////
-*/
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0436, af, af_ZA)
-
-ILCID_POSIX_SUBTABLE(ar) {
-    {0x01,   "ar"},
-    {0x3801, "ar_AE"},
-    {0x3c01, "ar_BH"},
-    {0x1401, "ar_DZ"},
-    {0x0c01, "ar_EG"},
-    {0x0801, "ar_IQ"},
-    {0x2c01, "ar_JO"},
-    {0x3401, "ar_KW"},
-    {0x3001, "ar_LB"},
-    {0x1001, "ar_LY"},
-    {0x1801, "ar_MA"},
-    {0x1801, "ar_MO"},
-    {0x2001, "ar_OM"},
-    {0x4001, "ar_QA"},
-    {0x0401, "ar_SA"},
-    {0x2801, "ar_SY"},
-    {0x1c01, "ar_TN"},
-    {0x2401, "ar_YE"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x044d, as, as_IN)
-ILCID_POSIX_ELEMENT_ARRAY(0x045e, am, am_ET)
-ILCID_POSIX_ELEMENT_ARRAY(0x047a, arn,arn_CL)
-
-ILCID_POSIX_SUBTABLE(az) {
-    {0x2c,   "az"},
-    {0x082c, "az_Cyrl_AZ"},  /* Cyrillic based */
-    {0x742c, "az_Cyrl"},  /* Cyrillic based */
-    {0x042c, "az_Latn_AZ"}, /* Latin based */
-    {0x782c, "az_Latn"}, /* Latin based */
-    {0x042c, "az_AZ"} /* Latin based */
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x046d, ba, ba_RU)
-ILCID_POSIX_ELEMENT_ARRAY(0x0423, be, be_BY)
-
-/*ILCID_POSIX_SUBTABLE(ber) {
-    {0x5f,   "ber"},
-    {0x045f, "ber_Arab_DZ"},
-    {0x045f, "ber_Arab"},
-    {0x085f, "ber_Latn_DZ"},
-    {0x085f, "ber_Latn"}
-};*/
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0402, bg, bg_BG)
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0466, bin, bin_NG)
-
-ILCID_POSIX_SUBTABLE(bn) {
-    {0x45,   "bn"},
-    {0x0845, "bn_BD"},
-    {0x0445, "bn_IN"}
-};
-
-ILCID_POSIX_SUBTABLE(bo) {
-    {0x51,   "bo"},
-    {0x0851, "bo_BT"},
-    {0x0451, "bo_CN"},
-    {0x0c51, "dz_BT"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x047e, br, br_FR)
-
-ILCID_POSIX_SUBTABLE(ca) {
-    {0x03,   "ca"},
-    {0x0403, "ca_ES"},
-    {0x0803, "ca_ES_VALENCIA"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0483, co, co_FR)
-ILCID_POSIX_ELEMENT_ARRAY(0x045c, chr,chr_US)
-
-ILCID_POSIX_SUBTABLE(ckb) {
-    {0x92,   "ckb"},
-    {0x7c92, "ckb_Arab"},
-    {0x0492, "ckb_Arab_IQ"}
-};
-
-/* Declared as cs_CZ to get around compiler errors on z/OS, which defines cs as a function */
-ILCID_POSIX_ELEMENT_ARRAY(0x0405, cs, cs_CZ)
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0452, cy, cy_GB)
-ILCID_POSIX_ELEMENT_ARRAY(0x0406, da, da_DK)
-
-ILCID_POSIX_SUBTABLE(de) {
-    {0x07,   "de"},
-    {0x0c07, "de_AT"},
-    {0x0807, "de_CH"},
-    {0x0407, "de_DE"},
-    {0x1407, "de_LI"},
-    {0x1007, "de_LU"},
-    {0x10407,"de_DE at collation=phonebook"},  /*This is really de_DE_PHONEBOOK on Windows*/
-    {0x10407,"de at collation=phonebook"}  /*This is really de_DE_PHONEBOOK on Windows*/
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0465, dv, dv_MV)
-ILCID_POSIX_ELEMENT_ARRAY(0x0408, el, el_GR)
-
-ILCID_POSIX_SUBTABLE(en) {
-    {0x09,   "en"},
-    {0x0c09, "en_AU"},
-    {0x2809, "en_BZ"},
-    {0x1009, "en_CA"},
-    {0x0809, "en_GB"},
-    {0x3c09, "en_HK"},
-    {0x3809, "en_ID"},
-    {0x1809, "en_IE"},
-    {0x4009, "en_IN"},
-    {0x2009, "en_JM"},
-    {0x4409, "en_MY"},
-    {0x1409, "en_NZ"},
-    {0x3409, "en_PH"},
-    {0x4809, "en_SG"},
-    {0x2C09, "en_TT"},
-    {0x0409, "en_US"},
-    {0x007f, "en_US_POSIX"}, /* duplicate for roundtripping */
-    {0x2409, "en_VI"},  /* Virgin Islands AKA Caribbean Islands (en_CB). */
-    {0x1c09, "en_ZA"},
-    {0x3009, "en_ZW"},
-    {0x2409, "en_029"},
-    {0x0409, "en_AS"},  /* Alias for en_US. Leave last. */
-    {0x0409, "en_GU"},  /* Alias for en_US. Leave last. */
-    {0x0409, "en_MH"},  /* Alias for en_US. Leave last. */
-    {0x0409, "en_MP"},  /* Alias for en_US. Leave last. */
-    {0x0409, "en_UM"}   /* Alias for en_US. Leave last. */
-};
-
-ILCID_POSIX_SUBTABLE(en_US_POSIX) {
-    {0x007f, "en_US_POSIX"} /* duplicate for roundtripping */
-};
-
-ILCID_POSIX_SUBTABLE(es) {
-    {0x0a,   "es"},
-    {0x2c0a, "es_AR"},
-    {0x400a, "es_BO"},
-    {0x340a, "es_CL"},
-    {0x240a, "es_CO"},
-    {0x140a, "es_CR"},
-    {0x5c0a, "es_CU"},
-    {0x1c0a, "es_DO"},
-    {0x300a, "es_EC"},
-    {0x0c0a, "es_ES"},      /*Modern sort.*/
-    {0x100a, "es_GT"},
-    {0x480a, "es_HN"},
-    {0x080a, "es_MX"},
-    {0x4c0a, "es_NI"},
-    {0x180a, "es_PA"},
-    {0x280a, "es_PE"},
-    {0x500a, "es_PR"},
-    {0x3c0a, "es_PY"},
-    {0x440a, "es_SV"},
-    {0x540a, "es_US"},
-    {0x380a, "es_UY"},
-    {0x200a, "es_VE"},
-    {0x580a, "es_419"},
-    {0x040a, "es_ES at collation=traditional"},
-    {0x040a, "es at collation=traditional"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0425, et, et_EE)
-ILCID_POSIX_ELEMENT_ARRAY(0x042d, eu, eu_ES)
-
-/* ISO-639 doesn't distinguish between Persian and Dari.*/
-ILCID_POSIX_SUBTABLE(fa) {
-    {0x29,   "fa"},
-    {0x0429, "fa_IR"},  /* Persian/Farsi (Iran) */
-    {0x048c, "fa_AF"}   /* Persian/Dari (Afghanistan) */
-};
-
-/* duplicate for roundtripping */
-ILCID_POSIX_SUBTABLE(fa_AF) {
-    {0x8c,   "fa_AF"},  /* Persian/Dari (Afghanistan) */
-    {0x048c, "fa_AF"}   /* Persian/Dari (Afghanistan) */
-};
-
-ILCID_POSIX_SUBTABLE(ff) {
-    {0x67,   "ff"},
-    {0x7c67, "ff_Latn"},
-    {0x0867, "ff_Latn_SN"},
-    {0x0467, "ff_NG"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x040b, fi, fi_FI)
-ILCID_POSIX_ELEMENT_ARRAY(0x0464, fil,fil_PH)
-ILCID_POSIX_ELEMENT_ARRAY(0x0438, fo, fo_FO)
-
-ILCID_POSIX_SUBTABLE(fr) {
-    {0x0c,   "fr"},
-    {0x080c, "fr_BE"},
-    {0x0c0c, "fr_CA"},
-    {0x240c, "fr_CD"},
-    {0x240c, "fr_CG"},
-    {0x100c, "fr_CH"},
-    {0x300c, "fr_CI"},
-    {0x2c0c, "fr_CM"},
-    {0x040c, "fr_FR"},
-    {0x3c0c, "fr_HT"},
-    {0x140c, "fr_LU"},
-    {0x380c, "fr_MA"},
-    {0x180c, "fr_MC"},
-    {0x340c, "fr_ML"},
-    {0x200c, "fr_RE"},
-    {0x280c, "fr_SN"},
-    {0xe40c, "fr_015"},
-    {0x1c0c, "fr_029"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0467, fuv, fuv_NG)
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0462, fy, fy_NL)
-
-ILCID_POSIX_SUBTABLE(ga) { /* Gaelic (Ireland) */
-    {0x3c,   "ga"},
-    {0x083c, "ga_IE"},
-    {0x043c, "gd_GB"}
-};
-
-ILCID_POSIX_SUBTABLE(gd) { /* Gaelic (Scotland) */
-    {0x91,   "gd"},
-    {0x0491, "gd_GB"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0456, gl, gl_ES)
-ILCID_POSIX_ELEMENT_ARRAY(0x0447, gu, gu_IN)
-ILCID_POSIX_ELEMENT_ARRAY(0x0474, gn, gn_PY)
-ILCID_POSIX_ELEMENT_ARRAY(0x0484, gsw,gsw_FR)
-
-ILCID_POSIX_SUBTABLE(ha) {
-    {0x68,   "ha"},
-    {0x7c68, "ha_Latn"},
-    {0x0468, "ha_Latn_NG"},
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0475, haw,haw_US)
-ILCID_POSIX_ELEMENT_ARRAY(0x040d, he, he_IL)
-ILCID_POSIX_ELEMENT_ARRAY(0x0439, hi, hi_IN)
-
-/* This LCID is really four different locales.*/
-ILCID_POSIX_SUBTABLE(hr) {
-    {0x1a,   "hr"},
-    {0x141a, "bs_Latn_BA"},  /* Bosnian, Bosnia and Herzegovina */
-    {0x681a, "bs_Latn"},  /* Bosnian, Bosnia and Herzegovina */
-    {0x141a, "bs_BA"},  /* Bosnian, Bosnia and Herzegovina */
-    {0x781a, "bs"},     /* Bosnian */
-    {0x201a, "bs_Cyrl_BA"},  /* Bosnian, Bosnia and Herzegovina */
-    {0x641a, "bs_Cyrl"},  /* Bosnian, Bosnia and Herzegovina */
-    {0x101a, "hr_BA"},  /* Croatian in Bosnia */
-    {0x041a, "hr_HR"},  /* Croatian*/
-    {0x2c1a, "sr_Latn_ME"},
-    {0x241a, "sr_Latn_RS"},
-    {0x181a, "sr_Latn_BA"}, /* Serbo-Croatian in Bosnia */
-    {0x081a, "sr_Latn_CS"}, /* Serbo-Croatian*/
-    {0x701a, "sr_Latn"},    /* It's 0x1a or 0x081a, pick one to make the test program happy. */
-    {0x1c1a, "sr_Cyrl_BA"}, /* Serbo-Croatian in Bosnia */
-    {0x0c1a, "sr_Cyrl_CS"}, /* Serbian*/
-    {0x301a, "sr_Cyrl_ME"},
-    {0x281a, "sr_Cyrl_RS"},
-    {0x6c1a, "sr_Cyrl"},    /* It's 0x1a or 0x0c1a, pick one to make the test program happy. */
-    {0x7c1a, "sr"}          /* In CLDR sr is sr_Cyrl. */
-};
-
-ILCID_POSIX_SUBTABLE(hsb) {
-    {0x2E,   "hsb"},
-    {0x042E, "hsb_DE"},
-    {0x082E, "dsb_DE"},
-    {0x7C2E, "dsb"},
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x040e, hu, hu_HU)
-ILCID_POSIX_ELEMENT_ARRAY(0x042b, hy, hy_AM)
-ILCID_POSIX_ELEMENT_ARRAY(0x0469, ibb, ibb_NG)
-ILCID_POSIX_ELEMENT_ARRAY(0x0421, id, id_ID)
-ILCID_POSIX_ELEMENT_ARRAY(0x0470, ig, ig_NG)
-ILCID_POSIX_ELEMENT_ARRAY(0x0478, ii, ii_CN)
-ILCID_POSIX_ELEMENT_ARRAY(0x040f, is, is_IS)
-
-ILCID_POSIX_SUBTABLE(it) {
-    {0x10,   "it"},
-    {0x0810, "it_CH"},
-    {0x0410, "it_IT"}
-};
-
-ILCID_POSIX_SUBTABLE(iu) {
-    {0x5d,   "iu"},
-    {0x045d, "iu_Cans_CA"},
-    {0x785d, "iu_Cans"},
-    {0x085d, "iu_Latn_CA"},
-    {0x7c5d, "iu_Latn"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x040d, iw, iw_IL)    /*Left in for compatibility*/
-ILCID_POSIX_ELEMENT_ARRAY(0x0411, ja, ja_JP)
-ILCID_POSIX_ELEMENT_ARRAY(0x0437, ka, ka_GE)
-ILCID_POSIX_ELEMENT_ARRAY(0x043f, kk, kk_KZ)
-ILCID_POSIX_ELEMENT_ARRAY(0x046f, kl, kl_GL)
-ILCID_POSIX_ELEMENT_ARRAY(0x0453, km, km_KH)
-ILCID_POSIX_ELEMENT_ARRAY(0x044b, kn, kn_IN)
-
-ILCID_POSIX_SUBTABLE(ko) {
-    {0x12,   "ko"},
-    {0x0812, "ko_KP"},
-    {0x0412, "ko_KR"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0457, kok, kok_IN)
-ILCID_POSIX_ELEMENT_ARRAY(0x0471, kr,  kr_NG)
-
-ILCID_POSIX_SUBTABLE(ks) {         /* We could add PK and CN too */
-    {0x60,   "ks"},
-    {0x0860, "ks_IN"},              /* Documentation doesn't mention script */
-    {0x0460, "ks_Arab_IN"},
-    {0x0860, "ks_Deva_IN"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0440, ky, ky_KG)   /* Kyrgyz is spoken in Kyrgyzstan */
-ILCID_POSIX_ELEMENT_ARRAY(0x0476, la, la_IT)   /* TODO: Verify the country */
-ILCID_POSIX_ELEMENT_ARRAY(0x046e, lb, lb_LU)
-ILCID_POSIX_ELEMENT_ARRAY(0x0454, lo, lo_LA)
-ILCID_POSIX_ELEMENT_ARRAY(0x0427, lt, lt_LT)
-ILCID_POSIX_ELEMENT_ARRAY(0x0426, lv, lv_LV)
-ILCID_POSIX_ELEMENT_ARRAY(0x0481, mi, mi_NZ)
-ILCID_POSIX_ELEMENT_ARRAY(0x042f, mk, mk_MK)
-ILCID_POSIX_ELEMENT_ARRAY(0x044c, ml, ml_IN)
-
-ILCID_POSIX_SUBTABLE(mn) {
-    {0x50,   "mn"},
-    {0x0450, "mn_MN"},
-    {0x7c50, "mn_Mong"},
-    {0x0850, "mn_Mong_CN"},
-    {0x0850, "mn_CN"},
-    {0x7850, "mn_Cyrl"},
-    {0x0c50, "mn_Mong_MN"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0458, mni,mni_IN)
-ILCID_POSIX_ELEMENT_ARRAY(0x047c, moh,moh_CA)
-ILCID_POSIX_ELEMENT_ARRAY(0x044e, mr, mr_IN)
-
-ILCID_POSIX_SUBTABLE(ms) {
-    {0x3e,   "ms"},
-    {0x083e, "ms_BN"},   /* Brunei Darussalam*/
-    {0x043e, "ms_MY"}    /* Malaysia*/
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x043a, mt, mt_MT)
-ILCID_POSIX_ELEMENT_ARRAY(0x0455, my, my_MM)
-
-ILCID_POSIX_SUBTABLE(ne) {
-    {0x61,   "ne"},
-    {0x0861, "ne_IN"},   /* India*/
-    {0x0461, "ne_NP"}    /* Nepal*/
-};
-
-ILCID_POSIX_SUBTABLE(nl) {
-    {0x13,   "nl"},
-    {0x0813, "nl_BE"},
-    {0x0413, "nl_NL"}
-};
-
-/* The "no" locale split into nb and nn.  By default in ICU, "no" is nb.*/
-ILCID_POSIX_SUBTABLE(no) {
-    {0x14,   "no"},     /* really nb_NO */
-    {0x7c14, "nb"},     /* really nb */
-    {0x0414, "nb_NO"},  /* really nb_NO. Keep first in the 414 list. */
-    {0x0414, "no_NO"},  /* really nb_NO */
-    {0x0814, "nn_NO"},  /* really nn_NO. Keep first in the 814 list.  */
-    {0x7814, "nn"},     /* It's 0x14 or 0x814, pick one to make the test program happy. */
-    {0x0814, "no_NO_NY"}/* really nn_NO */
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x046c, nso,nso_ZA)   /* TODO: Verify the ISO-639 code */
-ILCID_POSIX_ELEMENT_ARRAY(0x0482, oc, oc_FR)
-
-ILCID_POSIX_SUBTABLE(om) { /* TODO: Verify the country */
-    {0x72,   "om"},
-    {0x0472, "om_ET"},
-    {0x0472, "gaz_ET"}
-};
-
-/* Declared as or_IN to get around compiler errors*/
-ILCID_POSIX_SUBTABLE(or_IN) {
-    {0x48,   "or"},
-    {0x0448, "or_IN"},
-};
-
-
-ILCID_POSIX_SUBTABLE(pa) {
-    {0x46,   "pa"},
-    {0x0446, "pa_IN"},
-    {0x0846, "pa_PK"},
-    {0x0846, "pa_Arab_PK"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0479, pap, pap_AN)
-ILCID_POSIX_ELEMENT_ARRAY(0x0415, pl, pl_PL)
-ILCID_POSIX_ELEMENT_ARRAY(0x0463, ps, ps_AF)
-
-ILCID_POSIX_SUBTABLE(pt) {
-    {0x16,   "pt"},
-    {0x0416, "pt_BR"},
-    {0x0816, "pt_PT"}
-};
-
-ILCID_POSIX_SUBTABLE(qu) {
-    {0x6b,   "qu"},
-    {0x046b, "qu_BO"},
-    {0x086b, "qu_EC"},
-    {0x0C6b, "qu_PE"},
-    {0x046b, "quz_BO"},
-    {0x086b, "quz_EC"},
-    {0x0C6b, "quz_PE"}
-};
-
-ILCID_POSIX_SUBTABLE(quc) {
-    {0x93,   "quc"},
-    {0x0493, "quc_CO"},
-    /*
-        "quc_Latn_GT" is an exceptional case. Language ID of "quc"
-        is 0x93, but LCID of "quc_Latn_GT" is 0x486, which should be
-        under the group of "qut". "qut" is a retired ISO 639-3 language
-        code for West Central Quiche, and merged to "quc".
-        It looks Windows previously reserved "qut" for K'iche', but,
-        decided to use "quc" when adding a locale for K'iche' (Guatemala).
-
-        This data structure used here assumes language ID bits in
-        LCID is unique for alphabetic language code. But this is not true
-        for "quc_Latn_GT". If we don't have the data below, LCID look up
-        by alphabetic locale ID (POSIX) will fail. The same entry is found
-        under "qut" below, which is required for reverse look up.
-    */
-    {0x0486, "quc_Latn_GT"}
-};
-
-ILCID_POSIX_SUBTABLE(qut) {
-    {0x86,   "qut"},
-    {0x0486, "qut_GT"},
-    /*
-        See the note in "quc" above.
-    */
-    {0x0486, "quc_Latn_GT"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0417, rm, rm_CH)
-
-ILCID_POSIX_SUBTABLE(ro) {
-    {0x18,   "ro"},
-    {0x0418, "ro_RO"},
-    {0x0818, "ro_MD"}
-};
-
-ILCID_POSIX_SUBTABLE(root) {
-    {0x00,   "root"}
-};
-
-ILCID_POSIX_SUBTABLE(ru) {
-    {0x19,   "ru"},
-    {0x0419, "ru_RU"},
-    {0x0819, "ru_MD"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0487, rw, rw_RW)
-ILCID_POSIX_ELEMENT_ARRAY(0x044f, sa, sa_IN)
-ILCID_POSIX_ELEMENT_ARRAY(0x0485, sah,sah_RU)
-
-ILCID_POSIX_SUBTABLE(sd) {
-    {0x59,   "sd"},
-    {0x0459, "sd_IN"},
-    {0x0459, "sd_Deva_IN"},
-    {0x0859, "sd_PK"}
-};
-
-ILCID_POSIX_SUBTABLE(se) {
-    {0x3b,   "se"},
-    {0x0c3b, "se_FI"},
-    {0x043b, "se_NO"},
-    {0x083b, "se_SE"},
-    {0x783b, "sma"},
-    {0x183b, "sma_NO"},
-    {0x1c3b, "sma_SE"},
-    {0x7c3b, "smj"},
-    {0x703b, "smn"},
-    {0x743b, "sms"},
-    {0x103b, "smj_NO"},
-    {0x143b, "smj_SE"},
-    {0x243b, "smn_FI"},
-    {0x203b, "sms_FI"},
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x045b, si, si_LK)
-ILCID_POSIX_ELEMENT_ARRAY(0x041b, sk, sk_SK)
-ILCID_POSIX_ELEMENT_ARRAY(0x0424, sl, sl_SI)
-
-ILCID_POSIX_SUBTABLE(so) { /* TODO: Verify the country */
-    {0x77,   "so"},
-    {0x0477, "so_ET"},
-    {0x0477, "so_SO"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x041c, sq, sq_AL)
-ILCID_POSIX_ELEMENT_ARRAY(0x0430, st, st_ZA)
-
-ILCID_POSIX_SUBTABLE(sv) {
-    {0x1d,   "sv"},
-    {0x081d, "sv_FI"},
-    {0x041d, "sv_SE"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0441, sw, sw_KE)
-ILCID_POSIX_ELEMENT_ARRAY(0x045A, syr, syr_SY)
-
-ILCID_POSIX_SUBTABLE(ta) {
-    {0x49,   "ta"},
-    {0x0449, "ta_IN"},
-    {0x0849, "ta_LK"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x044a, te, te_IN)
-
-/* Cyrillic based by default */
-ILCID_POSIX_SUBTABLE(tg) {
-    {0x28,   "tg"},
-    {0x7c28, "tg_Cyrl"},
-    {0x0428, "tg_Cyrl_TJ"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x041e, th, th_TH)
-
-ILCID_POSIX_SUBTABLE(ti) {
-    {0x73,   "ti"},
-    {0x0873, "ti_ER"},
-    {0x0473, "ti_ET"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0442, tk, tk_TM)
-
-ILCID_POSIX_SUBTABLE(tn) {
-    {0x32,   "tn"},
-    {0x0832, "tn_BW"},
-    {0x0432, "tn_ZA"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x041f, tr, tr_TR)
-ILCID_POSIX_ELEMENT_ARRAY(0x0431, ts, ts_ZA)
-ILCID_POSIX_ELEMENT_ARRAY(0x0444, tt, tt_RU)
-
-ILCID_POSIX_SUBTABLE(tzm) {
-    {0x5f,   "tzm"},
-    {0x7c5f, "tzm_Latn"},
-    {0x085f, "tzm_Latn_DZ"},
-    {0x105f, "tzm_Tfng_MA"},
-    {0x045f, "tzm_Arab_MA"},
-    {0x045f, "tmz"}
-};
-
-ILCID_POSIX_SUBTABLE(ug) {
-    {0x80,   "ug"},
-    {0x0480, "ug_CN"},
-    {0x0480, "ug_Arab_CN"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0422, uk, uk_UA)
-
-ILCID_POSIX_SUBTABLE(ur) {
-    {0x20,   "ur"},
-    {0x0820, "ur_IN"},
-    {0x0420, "ur_PK"}
-};
-
-ILCID_POSIX_SUBTABLE(uz) {
-    {0x43,   "uz"},
-    {0x0843, "uz_Cyrl_UZ"},  /* Cyrillic based */
-    {0x7843, "uz_Cyrl"},  /* Cyrillic based */
-    {0x0843, "uz_UZ"},  /* Cyrillic based */
-    {0x0443, "uz_Latn_UZ"}, /* Latin based */
-    {0x7c43, "uz_Latn"} /* Latin based */
-};
-
-ILCID_POSIX_SUBTABLE(ve) { /* TODO: Verify the country */
-    {0x33,   "ve"},
-    {0x0433, "ve_ZA"},
-    {0x0433, "ven_ZA"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x042a, vi, vi_VN)
-ILCID_POSIX_ELEMENT_ARRAY(0x0488, wo, wo_SN)
-ILCID_POSIX_ELEMENT_ARRAY(0x0434, xh, xh_ZA)
-ILCID_POSIX_ELEMENT_ARRAY(0x043d, yi, yi)
-ILCID_POSIX_ELEMENT_ARRAY(0x046a, yo, yo_NG)
-
-ILCID_POSIX_SUBTABLE(zh) {
-    {0x0004, "zh_Hans"},
-    {0x7804, "zh"},
-    {0x0804, "zh_CN"},
-    {0x0804, "zh_Hans_CN"},
-    {0x0c04, "zh_Hant_HK"},
-    {0x0c04, "zh_HK"},
-    {0x1404, "zh_Hant_MO"},
-    {0x1404, "zh_MO"},
-    {0x1004, "zh_Hans_SG"},
-    {0x1004, "zh_SG"},
-    {0x0404, "zh_Hant_TW"},
-    {0x7c04, "zh_Hant"},
-    {0x0404, "zh_TW"},
-    {0x30404,"zh_Hant_TW"},     /* Bopomofo order */
-    {0x30404,"zh_TW"},          /* Bopomofo order */
-    {0x20004,"zh at collation=stroke"},
-    {0x20404,"zh_Hant at collation=stroke"},
-    {0x20404,"zh_Hant_TW at collation=stroke"},
-    {0x20404,"zh_TW at collation=stroke"},
-    {0x20804,"zh_Hans at collation=stroke"},
-    {0x20804,"zh_Hans_CN at collation=stroke"},
-    {0x20804,"zh_CN at collation=stroke"}
-};
-
-ILCID_POSIX_ELEMENT_ARRAY(0x0435, zu, zu_ZA)
-
-/* This must be static and grouped by LCID. */
-static const ILcidPosixMap gPosixIDmap[] = {
-    ILCID_POSIX_MAP(af),    /*  af  Afrikaans                 0x36 */
-    ILCID_POSIX_MAP(am),    /*  am  Amharic                   0x5e */
-    ILCID_POSIX_MAP(ar),    /*  ar  Arabic                    0x01 */
-    ILCID_POSIX_MAP(arn),   /*  arn Araucanian/Mapudungun     0x7a */
-    ILCID_POSIX_MAP(as),    /*  as  Assamese                  0x4d */
-    ILCID_POSIX_MAP(az),    /*  az  Azerbaijani               0x2c */
-    ILCID_POSIX_MAP(ba),    /*  ba  Bashkir                   0x6d */
-    ILCID_POSIX_MAP(be),    /*  be  Belarusian                0x23 */
-/*    ILCID_POSIX_MAP(ber),     ber Berber/Tamazight          0x5f */
-    ILCID_POSIX_MAP(bg),    /*  bg  Bulgarian                 0x02 */
-    ILCID_POSIX_MAP(bin),   /*  bin Edo                       0x66 */
-    ILCID_POSIX_MAP(bn),    /*  bn  Bengali; Bangla           0x45 */
-    ILCID_POSIX_MAP(bo),    /*  bo  Tibetan                   0x51 */
-    ILCID_POSIX_MAP(br),    /*  br  Breton                    0x7e */
-    ILCID_POSIX_MAP(ca),    /*  ca  Catalan                   0x03 */
-    ILCID_POSIX_MAP(chr),   /*  chr Cherokee                  0x5c */
-    ILCID_POSIX_MAP(ckb),   /*  ckb Sorani (Central Kurdish)  0x92 */
-    ILCID_POSIX_MAP(co),    /*  co  Corsican                  0x83 */
-    ILCID_POSIX_MAP(cs),    /*  cs  Czech                     0x05 */
-    ILCID_POSIX_MAP(cy),    /*  cy  Welsh                     0x52 */
-    ILCID_POSIX_MAP(da),    /*  da  Danish                    0x06 */
-    ILCID_POSIX_MAP(de),    /*  de  German                    0x07 */
-    ILCID_POSIX_MAP(dv),    /*  dv  Divehi                    0x65 */
-    ILCID_POSIX_MAP(el),    /*  el  Greek                     0x08 */
-    ILCID_POSIX_MAP(en),    /*  en  English                   0x09 */
-    ILCID_POSIX_MAP(en_US_POSIX), /*    invariant             0x7f */
-    ILCID_POSIX_MAP(es),    /*  es  Spanish                   0x0a */
-    ILCID_POSIX_MAP(et),    /*  et  Estonian                  0x25 */
-    ILCID_POSIX_MAP(eu),    /*  eu  Basque                    0x2d */
-    ILCID_POSIX_MAP(fa),    /*  fa  Persian/Farsi             0x29 */
-    ILCID_POSIX_MAP(fa_AF), /*  fa  Persian/Dari              0x8c */
-    ILCID_POSIX_MAP(ff),    /*  ff  Fula                      0x67 */
-    ILCID_POSIX_MAP(fi),    /*  fi  Finnish                   0x0b */
-    ILCID_POSIX_MAP(fil),   /*  fil Filipino                  0x64 */
-    ILCID_POSIX_MAP(fo),    /*  fo  Faroese                   0x38 */
-    ILCID_POSIX_MAP(fr),    /*  fr  French                    0x0c */
-    ILCID_POSIX_MAP(fuv),   /*  fuv Fulfulde - Nigeria        0x67 */
-    ILCID_POSIX_MAP(fy),    /*  fy  Frisian                   0x62 */
-    ILCID_POSIX_MAP(ga),    /*  *   Gaelic (Ireland,Scotland) 0x3c */
-    ILCID_POSIX_MAP(gd),    /*  gd  Gaelic (United Kingdom)   0x91 */
-    ILCID_POSIX_MAP(gl),    /*  gl  Galician                  0x56 */
-    ILCID_POSIX_MAP(gn),    /*  gn  Guarani                   0x74 */
-    ILCID_POSIX_MAP(gsw),   /*  gsw Alemanic/Alsatian/Swiss German 0x84 */
-    ILCID_POSIX_MAP(gu),    /*  gu  Gujarati                  0x47 */
-    ILCID_POSIX_MAP(ha),    /*  ha  Hausa                     0x68 */
-    ILCID_POSIX_MAP(haw),   /*  haw Hawaiian                  0x75 */
-    ILCID_POSIX_MAP(he),    /*  he  Hebrew (formerly iw)      0x0d */
-    ILCID_POSIX_MAP(hi),    /*  hi  Hindi                     0x39 */
-    ILCID_POSIX_MAP(hr),    /*  *   Croatian and others       0x1a */
-    ILCID_POSIX_MAP(hsb),   /*  hsb Upper Sorbian             0x2e */
-    ILCID_POSIX_MAP(hu),    /*  hu  Hungarian                 0x0e */
-    ILCID_POSIX_MAP(hy),    /*  hy  Armenian                  0x2b */
-    ILCID_POSIX_MAP(ibb),   /*  ibb Ibibio - Nigeria          0x69 */
-    ILCID_POSIX_MAP(id),    /*  id  Indonesian (formerly in)  0x21 */
-    ILCID_POSIX_MAP(ig),    /*  ig  Igbo                      0x70 */
-    ILCID_POSIX_MAP(ii),    /*  ii  Sichuan Yi                0x78 */
-    ILCID_POSIX_MAP(is),    /*  is  Icelandic                 0x0f */
-    ILCID_POSIX_MAP(it),    /*  it  Italian                   0x10 */
-    ILCID_POSIX_MAP(iu),    /*  iu  Inuktitut                 0x5d */
-    ILCID_POSIX_MAP(iw),    /*  iw  Hebrew                    0x0d */
-    ILCID_POSIX_MAP(ja),    /*  ja  Japanese                  0x11 */
-    ILCID_POSIX_MAP(ka),    /*  ka  Georgian                  0x37 */
-    ILCID_POSIX_MAP(kk),    /*  kk  Kazakh                    0x3f */
-    ILCID_POSIX_MAP(kl),    /*  kl  Kalaallisut               0x6f */
-    ILCID_POSIX_MAP(km),    /*  km  Khmer                     0x53 */
-    ILCID_POSIX_MAP(kn),    /*  kn  Kannada                   0x4b */
-    ILCID_POSIX_MAP(ko),    /*  ko  Korean                    0x12 */
-    ILCID_POSIX_MAP(kok),   /*  kok Konkani                   0x57 */
-    ILCID_POSIX_MAP(kr),    /*  kr  Kanuri                    0x71 */
-    ILCID_POSIX_MAP(ks),    /*  ks  Kashmiri                  0x60 */
-    ILCID_POSIX_MAP(ky),    /*  ky  Kyrgyz                    0x40 */
-    ILCID_POSIX_MAP(lb),    /*  lb  Luxembourgish             0x6e */
-    ILCID_POSIX_MAP(la),    /*  la  Latin                     0x76 */
-    ILCID_POSIX_MAP(lo),    /*  lo  Lao                       0x54 */
-    ILCID_POSIX_MAP(lt),    /*  lt  Lithuanian                0x27 */
-    ILCID_POSIX_MAP(lv),    /*  lv  Latvian, Lettish          0x26 */
-    ILCID_POSIX_MAP(mi),    /*  mi  Maori                     0x81 */
-    ILCID_POSIX_MAP(mk),    /*  mk  Macedonian                0x2f */
-    ILCID_POSIX_MAP(ml),    /*  ml  Malayalam                 0x4c */
-    ILCID_POSIX_MAP(mn),    /*  mn  Mongolian                 0x50 */
-    ILCID_POSIX_MAP(mni),   /*  mni Manipuri                  0x58 */
-    ILCID_POSIX_MAP(moh),   /*  moh Mohawk                    0x7c */
-    ILCID_POSIX_MAP(mr),    /*  mr  Marathi                   0x4e */
-    ILCID_POSIX_MAP(ms),    /*  ms  Malay                     0x3e */
-    ILCID_POSIX_MAP(mt),    /*  mt  Maltese                   0x3a */
-    ILCID_POSIX_MAP(my),    /*  my  Burmese                   0x55 */
-/*    ILCID_POSIX_MAP(nb),    //  no  Norwegian                 0x14 */
-    ILCID_POSIX_MAP(ne),    /*  ne  Nepali                    0x61 */
-    ILCID_POSIX_MAP(nl),    /*  nl  Dutch                     0x13 */
-/*    ILCID_POSIX_MAP(nn),    //  no  Norwegian                 0x14 */
-    ILCID_POSIX_MAP(no),    /*  *   Norwegian                 0x14 */
-    ILCID_POSIX_MAP(nso),   /*  nso Sotho, Northern (Sepedi dialect) 0x6c */
-    ILCID_POSIX_MAP(oc),    /*  oc  Occitan                   0x82 */
-    ILCID_POSIX_MAP(om),    /*  om  Oromo                     0x72 */
-    ILCID_POSIX_MAP(or_IN), /*  or  Oriya                     0x48 */
-    ILCID_POSIX_MAP(pa),    /*  pa  Punjabi                   0x46 */
-    ILCID_POSIX_MAP(pap),   /*  pap Papiamentu                0x79 */
-    ILCID_POSIX_MAP(pl),    /*  pl  Polish                    0x15 */
-    ILCID_POSIX_MAP(ps),    /*  ps  Pashto                    0x63 */
-    ILCID_POSIX_MAP(pt),    /*  pt  Portuguese                0x16 */
-    ILCID_POSIX_MAP(qu),    /*  qu  Quechua                   0x6B */
-    ILCID_POSIX_MAP(quc),   /*  quc K'iche                    0x93 */
-    ILCID_POSIX_MAP(qut),   /*  qut K'iche                    0x86 */
-    ILCID_POSIX_MAP(rm),    /*  rm  Raeto-Romance/Romansh     0x17 */
-    ILCID_POSIX_MAP(ro),    /*  ro  Romanian                  0x18 */
-    ILCID_POSIX_MAP(root),  /*  root                          0x00 */
-    ILCID_POSIX_MAP(ru),    /*  ru  Russian                   0x19 */
-    ILCID_POSIX_MAP(rw),    /*  rw  Kinyarwanda               0x87 */
-    ILCID_POSIX_MAP(sa),    /*  sa  Sanskrit                  0x4f */
-    ILCID_POSIX_MAP(sah),   /*  sah Yakut                     0x85 */
-    ILCID_POSIX_MAP(sd),    /*  sd  Sindhi                    0x59 */
-    ILCID_POSIX_MAP(se),    /*  se  Sami                      0x3b */
-/*    ILCID_POSIX_MAP(sh),    //  sh  Serbo-Croatian            0x1a */
-    ILCID_POSIX_MAP(si),    /*  si  Sinhalese                 0x5b */
-    ILCID_POSIX_MAP(sk),    /*  sk  Slovak                    0x1b */
-    ILCID_POSIX_MAP(sl),    /*  sl  Slovenian                 0x24 */
-    ILCID_POSIX_MAP(so),    /*  so  Somali                    0x77 */
-    ILCID_POSIX_MAP(sq),    /*  sq  Albanian                  0x1c */
-/*    ILCID_POSIX_MAP(sr),    //  sr  Serbian                   0x1a */
-    ILCID_POSIX_MAP(st),    /*  st  Sutu                      0x30 */
-    ILCID_POSIX_MAP(sv),    /*  sv  Swedish                   0x1d */
-    ILCID_POSIX_MAP(sw),    /*  sw  Swahili                   0x41 */
-    ILCID_POSIX_MAP(syr),   /*  syr Syriac                    0x5A */
-    ILCID_POSIX_MAP(ta),    /*  ta  Tamil                     0x49 */
-    ILCID_POSIX_MAP(te),    /*  te  Telugu                    0x4a */
-    ILCID_POSIX_MAP(tg),    /*  tg  Tajik                     0x28 */
-    ILCID_POSIX_MAP(th),    /*  th  Thai                      0x1e */
-    ILCID_POSIX_MAP(ti),    /*  ti  Tigrigna                  0x73 */
-    ILCID_POSIX_MAP(tk),    /*  tk  Turkmen                   0x42 */
-    ILCID_POSIX_MAP(tn),    /*  tn  Tswana                    0x32 */
-    ILCID_POSIX_MAP(tr),    /*  tr  Turkish                   0x1f */
-    ILCID_POSIX_MAP(ts),    /*  ts  Tsonga                    0x31 */
-    ILCID_POSIX_MAP(tt),    /*  tt  Tatar                     0x44 */
-    ILCID_POSIX_MAP(tzm),   /*  tzm Tamazight                 0x5f */
-    ILCID_POSIX_MAP(ug),    /*  ug  Uighur                    0x80 */
-    ILCID_POSIX_MAP(uk),    /*  uk  Ukrainian                 0x22 */
-    ILCID_POSIX_MAP(ur),    /*  ur  Urdu                      0x20 */
-    ILCID_POSIX_MAP(uz),    /*  uz  Uzbek                     0x43 */
-    ILCID_POSIX_MAP(ve),    /*  ve  Venda                     0x33 */
-    ILCID_POSIX_MAP(vi),    /*  vi  Vietnamese                0x2a */
-    ILCID_POSIX_MAP(wo),    /*  wo  Wolof                     0x88 */
-    ILCID_POSIX_MAP(xh),    /*  xh  Xhosa                     0x34 */
-    ILCID_POSIX_MAP(yi),    /*  yi  Yiddish                   0x3d */
-    ILCID_POSIX_MAP(yo),    /*  yo  Yoruba                    0x6a */
-    ILCID_POSIX_MAP(zh),    /*  zh  Chinese                   0x04 */
-    ILCID_POSIX_MAP(zu),    /*  zu  Zulu                      0x35 */
-};
-
-static const uint32_t gLocaleCount = UPRV_LENGTHOF(gPosixIDmap);
-
-/**
- * Do not call this function. It is called by hostID.
- * The function is not private because this struct must stay as a C struct,
- * and this is an internal class.
- */
-static int32_t
-idCmp(const char* id1, const char* id2)
-{
-    int32_t diffIdx = 0;
-    while (*id1 == *id2 && *id1 != 0) {
-        diffIdx++;
-        id1++;
-        id2++;
-    }
-    return diffIdx;
-}
-
-/**
- * Searches for a Windows LCID
- *
- * @param posixid the Posix style locale id.
- * @param status gets set to U_ILLEGAL_ARGUMENT_ERROR when the Posix ID has
- *               no equivalent Windows LCID.
- * @return the LCID
- */
-static uint32_t
-getHostID(const ILcidPosixMap *this_0, const char* posixID, UErrorCode* status)
-{
-    int32_t bestIdx = 0;
-    int32_t bestIdxDiff = 0;
-    int32_t posixIDlen = (int32_t)uprv_strlen(posixID);
-    uint32_t idx;
-
-    for (idx = 0; idx < this_0->numRegions; idx++ ) {
-        int32_t sameChars = idCmp(posixID, this_0->regionMaps[idx].posixID);
-        if (sameChars > bestIdxDiff && this_0->regionMaps[idx].posixID[sameChars] == 0) {
-            if (posixIDlen == sameChars) {
-                /* Exact match */
-                return this_0->regionMaps[idx].hostID;
-            }
-            bestIdxDiff = sameChars;
-            bestIdx = idx;
-        }
-    }
-    /* We asked for something unusual, like en_ZZ, and we try to return the number for the same language. */
-    /* We also have to make sure that sid and si and similar string subsets don't match. */
-    if ((posixID[bestIdxDiff] == '_' || posixID[bestIdxDiff] == '@')
-        && this_0->regionMaps[bestIdx].posixID[bestIdxDiff] == 0)
-    {
-        *status = U_USING_FALLBACK_WARNING;
-        return this_0->regionMaps[bestIdx].hostID;
-    }
-
-    /*no match found */
-    *status = U_ILLEGAL_ARGUMENT_ERROR;
-    return this_0->regionMaps->hostID;
-}
-
-static const char*
-getPosixID(const ILcidPosixMap *this_0, uint32_t hostID)
-{
-    uint32_t i;
-    for (i = 0; i <= this_0->numRegions; i++)
-    {
-        if (this_0->regionMaps[i].hostID == hostID)
-        {
-            return this_0->regionMaps[i].posixID;
-        }
-    }
-
-    /* If you get here, then no matching region was found,
-       so return the language id with the wild card region. */
-    return this_0->regionMaps[0].posixID;
-}
-
-/*
-//////////////////////////////////////
-//
-// LCID --> POSIX
-//
-/////////////////////////////////////
-*/
-#ifdef USE_WINDOWS_LOCALE_API
-/*
- * Various language tags needs to be changed:
- * quz -> qu
- * prs -> fa
- */
-#define FIX_LANGUAGE_ID_TAG(buffer, len) \
-    if (len >= 3) { \
-        if (buffer[0] == 'q' && buffer[1] == 'u' && buffer[2] == 'z') {\
-            buffer[2] = 0; \
-            uprv_strcat(buffer, buffer+3); \
-        } else if (buffer[0] == 'p' && buffer[1] == 'r' && buffer[2] == 's') {\
-            buffer[0] = 'f'; buffer[1] = 'a'; buffer[2] = 0; \
-            uprv_strcat(buffer, buffer+3); \
-        } \
-    }
-
-#endif
-U_CAPI int32_t
-uprv_convertToPosix(uint32_t hostid, char *posixID, int32_t posixIDCapacity, UErrorCode* status)
-{
-    uint16_t langID;
-    uint32_t localeIndex;
-    UBool bLookup = TRUE;
-    const char *pPosixID = NULL;
-
-#ifdef USE_WINDOWS_LOCALE_API
-    // Note: Windows primary lang ID 0x92 in LCID is used for Central Kurdish and
-    // GetLocaleInfo() maps such LCID to "ku". However, CLDR uses "ku" for
-    // Northern Kurdish and "ckb" for Central Kurdish. For this reason, we cannot
-    // use the Windows API to resolve locale ID for this specific case.
-    if ((hostid & 0x3FF) != 0x92) {
-        int32_t tmpLen = 0;
-        char locName[157];  /* ULOC_FULLNAME_CAPACITY */
-
-        tmpLen = GetLocaleInfoA(hostid, LOCALE_SNAME, (LPSTR)locName, UPRV_LENGTHOF(locName));
-        if (tmpLen > 1) {
-            /* Windows locale name may contain sorting variant, such as "es-ES_tradnl".
-            In such case, we need special mapping data found in the hardcoded table
-            in this source file. */
-            char *p = uprv_strchr(locName, '_');
-            if (p) {
-                /* Keep the base locale, without variant */
-                *p = 0;
-                tmpLen = uprv_strlen(locName);
-            }
-            else {
-                /* No hardcoded table lookup necessary */
-                bLookup = FALSE;
-            }
-            /* Change the tag separator from '-' to '_' */
-            p = locName;
-            while (*p) {
-                if (*p == '-') {
-                    *p = '_';
-                }
-                p++;
-            }
-            FIX_LANGUAGE_ID_TAG(locName, tmpLen);
-            pPosixID = locName;
-        }
-    }
-#endif
-    if (bLookup) {
-        const char *pCandidate = NULL;
-        langID = LANGUAGE_LCID(hostid);
-
-        for (localeIndex = 0; localeIndex < gLocaleCount; localeIndex++) {
-            if (langID == gPosixIDmap[localeIndex].regionMaps->hostID) {
-                pCandidate = getPosixID(&gPosixIDmap[localeIndex], hostid);
-                break;
-            }
-        }
-
-        /* On Windows, when locale name has a variant, we still look up the hardcoded table.
-           If a match in the hardcoded table is longer than the Windows locale name without
-           variant, we use the one as the result */
-        if (pCandidate && (pPosixID == NULL || uprv_strlen(pCandidate) > uprv_strlen(pPosixID))) {
-            pPosixID = pCandidate;
-        }
-    }
-
-    if (pPosixID) {
-        int32_t resLen = uprv_strlen(pPosixID);
-        int32_t copyLen = resLen <= posixIDCapacity ? resLen : posixIDCapacity;
-        uprv_memcpy(posixID, pPosixID, copyLen);
-        if (resLen < posixIDCapacity) {
-            posixID[resLen] = 0;
-            if (*status == U_STRING_NOT_TERMINATED_WARNING) {
-                *status = U_ZERO_ERROR;
-            }
-        } else if (resLen == posixIDCapacity) {
-            *status = U_STRING_NOT_TERMINATED_WARNING;
-        } else {
-            *status = U_BUFFER_OVERFLOW_ERROR;
-        }
-        return resLen;
-    }
-
-    /* no match found */
-    *status = U_ILLEGAL_ARGUMENT_ERROR;
-    return -1;
-}
-
-/*
-//////////////////////////////////////
-//
-// POSIX --> LCID
-// This should only be called from uloc_getLCID.
-// The locale ID must be in canonical form.
-// langID is separate so that this file doesn't depend on the uloc_* API.
-//
-/////////////////////////////////////
-*/
-
-U_CAPI uint32_t
-uprv_convertToLCID(const char *langID, const char* posixID, UErrorCode* status)
-{
-
-    uint32_t   low    = 0;
-    uint32_t   high   = gLocaleCount;
-    uint32_t   mid;
-    uint32_t   oldmid = 0;
-    int32_t    compVal;
-
-    uint32_t   value         = 0;
-    uint32_t   fallbackValue = (uint32_t)-1;
-    UErrorCode myStatus;
-    uint32_t   idx;
-
-    /* Check for incomplete id. */
-    if (!langID || !posixID || uprv_strlen(langID) < 2 || uprv_strlen(posixID) < 2) {
-        return 0;
-    }
-
-    /*Binary search for the map entry for normal cases */
-
-    while (high > low)  /*binary search*/{
-
-        mid = (high+low) >> 1; /*Finds median*/
-
-        if (mid == oldmid) 
-            break;
-
-        compVal = uprv_strcmp(langID, gPosixIDmap[mid].regionMaps->posixID);
-        if (compVal < 0){
-            high = mid;
-        }
-        else if (compVal > 0){
-            low = mid;
-        }
-        else /*we found it*/{
-            return getHostID(&gPosixIDmap[mid], posixID, status);
-        }
-        oldmid = mid;
-    }
-
-    /*
-     * Sometimes we can't do a binary search on posixID because some LCIDs
-     * go to different locales.  We hit one of those special cases.
-     */
-    for (idx = 0; idx < gLocaleCount; idx++ ) {
-        myStatus = U_ZERO_ERROR;
-        value = getHostID(&gPosixIDmap[idx], posixID, &myStatus);
-        if (myStatus == U_ZERO_ERROR) {
-            return value;
-        }
-        else if (myStatus == U_USING_FALLBACK_WARNING) {
-            fallbackValue = value;
-        }
-    }
-
-    if (fallbackValue != (uint32_t)-1) {
-        *status = U_USING_FALLBACK_WARNING;
-        return fallbackValue;
-    }
-
-    /* no match found */
-    *status = U_ILLEGAL_ARGUMENT_ERROR;
-    return 0;   /* return international (root) */
-}
-

Added: trunk/Build/source/libs/icu/icu-src/source/common/locmap.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/locmap.cpp	                        (rev 0)
+++ trunk/Build/source/libs/icu/icu-src/source/common/locmap.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -0,0 +1,1320 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+ **********************************************************************
+ *   Copyright (C) 1996-2016, International Business Machines
+ *   Corporation and others.  All Rights Reserved.
+ **********************************************************************
+ *
+ * Provides functionality for mapping between
+ * LCID and Posix IDs or ICU locale to codepage
+ *
+ * Note: All classes and code in this file are
+ *       intended for internal use only.
+ *
+ * Methods of interest:
+ *   unsigned long convertToLCID(const char*);
+ *   const char* convertToPosix(unsigned long);
+ *
+ * Kathleen Wilson, 4/30/96
+ *
+ *  Date        Name        Description
+ *  3/11/97     aliu        Fixed off-by-one bug in assignment operator. Added
+ *                          setId() method and safety check against 
+ *                          MAX_ID_LENGTH.
+ * 04/23/99     stephen     Added C wrapper for convertToPosix.
+ * 09/18/00     george      Removed the memory leaks.
+ * 08/23/01     george      Convert to C
+ */
+
+#include "locmap.h"
+#include "cstring.h"
+#include "cmemory.h"
+#include "unicode/uloc.h"
+
+#if U_PLATFORM == U_PF_WINDOWS && defined(_MSC_VER) && (_MSC_VER >= 1500)
+/*
+ * TODO: It seems like we should widen this to
+ * either U_PLATFORM_USES_ONLY_WIN32_API (includes MinGW)
+ * or U_PLATFORM_HAS_WIN32_API (includes MinGW and Cygwin)
+ * but those use gcc and won't have defined(_MSC_VER).
+ * We might need to #include some Windows header and test for some version macro from there.
+ * Or call some Windows function and see what it returns.
+ */
+#define USE_WINDOWS_LCID_MAPPING_API
+#include <windows.h>
+#include <winnls.h>
+#endif
+
+/*
+ * Note:
+ * The mapping from Win32 locale ID numbers to POSIX locale strings should
+ * be the faster one.
+ *
+ * Windows LCIDs are defined at https://msdn.microsoft.com/en-us/library/cc233965.aspx
+ * [MS-LCID] Windows Language Code Identifier (LCID) Reference
+ */
+
+/*
+////////////////////////////////////////////////
+//
+// Internal Classes for LCID <--> POSIX Mapping
+//
+/////////////////////////////////////////////////
+*/
+
+typedef struct ILcidPosixElement
+{
+    const uint32_t hostID;
+    const char * const posixID;
+} ILcidPosixElement;
+
+typedef struct ILcidPosixMap
+{
+    const uint32_t numRegions;
+    const struct ILcidPosixElement* const regionMaps;
+} ILcidPosixMap;
+
+
+/*
+/////////////////////////////////////////////////
+//
+// Easy macros to make the LCID <--> POSIX Mapping
+//
+/////////////////////////////////////////////////
+*/
+
+/**
+ * The standard one language/one country mapping for LCID.
+ * The first element must be the language, and the following
+ * elements are the language with the country.
+ * @param hostID LCID in host format such as 0x044d
+ * @param languageID posix ID of just the language such as 'de'
+ * @param posixID posix ID of the language_TERRITORY such as 'de_CH'
+ */
+#define ILCID_POSIX_ELEMENT_ARRAY(hostID, languageID, posixID) \
+static const ILcidPosixElement locmap_ ## languageID [] = { \
+    {LANGUAGE_LCID(hostID), #languageID},     /* parent locale */ \
+    {hostID, #posixID}, \
+};
+
+/**
+ * Define a subtable by ID
+ * @param id the POSIX ID, either a language or language_TERRITORY
+ */
+#define ILCID_POSIX_SUBTABLE(id) \
+static const ILcidPosixElement locmap_ ## id [] =
+
+
+/**
+ * Create the map for the posixID. This macro supposes that the language string
+ * name is the same as the global variable name, and that the first element
+ * in the ILcidPosixElement is just the language.
+ * @param _posixID the full POSIX ID for this entry.
+ */
+#define ILCID_POSIX_MAP(_posixID) \
+    {UPRV_LENGTHOF(locmap_ ## _posixID), locmap_ ## _posixID}
+
+/*
+////////////////////////////////////////////
+//
+// Create the table of LCID to POSIX Mapping
+// None of it should be dynamically created.
+//
+// Keep static locale variables inside the function so that
+// it can be created properly during static init.
+//
+// Note: This table should be updated periodically. Check the [MS-LCID] Windows Language Code Identifier 
+//       (LCID) Reference defined at https://msdn.microsoft.com/en-us/library/cc233965.aspx
+//
+//       Microsoft is moving away from LCID in favor of locale name as of Vista.  This table needs to be
+//       maintained for support of older Windows version.
+//       Update: Windows 7 (091130)
+//
+// Note: Microsoft assign a different LCID if a locale has a sorting variant. POSIX IDs below may contain
+//       @collation=XXX, but no other keywords are allowed (at least for now). When uprv_convertToLCID() is
+//       called from uloc_getLCID(), keywords other than collation are already removed. If we really need
+//       to support other keywords in this mapping data, we must update the implementation.
+////////////////////////////////////////////
+*/
+
+// TODO: For Windows ideally this table would be a list of exceptions rather than a complete list as 
+// LocaleNameToLCID and LCIDToLocaleName provide 90% of these.
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0436, af, af_ZA)
+
+ILCID_POSIX_SUBTABLE(ar) {
+    {0x01,   "ar"},
+    {0x3801, "ar_AE"},
+    {0x3c01, "ar_BH"},
+    {0x1401, "ar_DZ"},
+    {0x0c01, "ar_EG"},
+    {0x0801, "ar_IQ"},
+    {0x2c01, "ar_JO"},
+    {0x3401, "ar_KW"},
+    {0x3001, "ar_LB"},
+    {0x1001, "ar_LY"},
+    {0x1801, "ar_MA"},
+    {0x1801, "ar_MO"},
+    {0x2001, "ar_OM"},
+    {0x4001, "ar_QA"},
+    {0x0401, "ar_SA"},
+    {0x2801, "ar_SY"},
+    {0x1c01, "ar_TN"},
+    {0x2401, "ar_YE"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x044d, as, as_IN)
+ILCID_POSIX_ELEMENT_ARRAY(0x045e, am, am_ET)
+ILCID_POSIX_ELEMENT_ARRAY(0x047a, arn,arn_CL)
+
+ILCID_POSIX_SUBTABLE(az) {
+    {0x2c,   "az"},
+    {0x082c, "az_Cyrl_AZ"},  /* Cyrillic based */
+    {0x742c, "az_Cyrl"},  /* Cyrillic based */
+    {0x042c, "az_Latn_AZ"}, /* Latin based */
+    {0x782c, "az_Latn"}, /* Latin based */
+    {0x042c, "az_AZ"} /* Latin based */
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x046d, ba, ba_RU)
+ILCID_POSIX_ELEMENT_ARRAY(0x0423, be, be_BY)
+
+/*ILCID_POSIX_SUBTABLE(ber) {
+    {0x5f,   "ber"},
+    {0x045f, "ber_Arab_DZ"},
+    {0x045f, "ber_Arab"},
+    {0x085f, "ber_Latn_DZ"},
+    {0x085f, "ber_Latn"}
+};*/
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0402, bg, bg_BG)
+
+ILCID_POSIX_SUBTABLE(bin) {
+    {0x66, "bin"},
+    {0x0466, "bin_NG"}
+};
+
+ILCID_POSIX_SUBTABLE(bn) {
+    {0x45,   "bn"},
+    {0x0845, "bn_BD"},
+    {0x0445, "bn_IN"}
+};
+
+ILCID_POSIX_SUBTABLE(bo) {
+    {0x51,   "bo"},
+    {0x0851, "bo_BT"},
+    {0x0451, "bo_CN"},
+    {0x0c51, "dz_BT"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x047e, br, br_FR)
+
+ILCID_POSIX_SUBTABLE(ca) {
+    {0x03,   "ca"},
+    {0x0403, "ca_ES"},
+    {0x0803, "ca_ES_VALENCIA"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0483, co, co_FR)
+
+ILCID_POSIX_SUBTABLE(chr) {
+    {0x05c,  "chr"},
+    {0x7c5c, "chr_Cher"},
+    {0x045c, "chr_Cher_US"},
+    {0x045c, "chr_US"}
+};
+
+// ICU has chosen different names for these.
+ILCID_POSIX_SUBTABLE(ckb) {
+    {0x92,   "ckb"},
+    {0x7c92, "ckb_Arab"},
+    {0x0492, "ckb_Arab_IQ"}
+};
+
+/* Declared as cs_CZ to get around compiler errors on z/OS, which defines cs as a function */
+ILCID_POSIX_ELEMENT_ARRAY(0x0405, cs, cs_CZ)
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0452, cy, cy_GB)
+ILCID_POSIX_ELEMENT_ARRAY(0x0406, da, da_DK)
+
+// Windows doesn't know POSIX or BCP47 Unicode phonebook sort names
+ILCID_POSIX_SUBTABLE(de) {
+    {0x07,   "de"},
+    {0x0c07, "de_AT"},
+    {0x0807, "de_CH"},
+    {0x0407, "de_DE"},
+    {0x1407, "de_LI"},
+    {0x1007, "de_LU"},
+    {0x10407,"de_DE at collation=phonebook"},  /*This is really de_DE_PHONEBOOK on Windows*/
+    {0x10407,"de at collation=phonebook"}  /*This is really de_DE_PHONEBOOK on Windows*/
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0465, dv, dv_MV)
+ILCID_POSIX_ELEMENT_ARRAY(0x0408, el, el_GR)
+
+// Windows uses an empty string for 'invariant'
+ILCID_POSIX_SUBTABLE(en) {
+    {0x09,   "en"},
+    {0x0c09, "en_AU"},
+    {0x2809, "en_BZ"},
+    {0x1009, "en_CA"},
+    {0x0809, "en_GB"},
+    {0x3c09, "en_HK"},
+    {0x3809, "en_ID"},
+    {0x1809, "en_IE"},
+    {0x4009, "en_IN"},
+    {0x2009, "en_JM"},
+    {0x4409, "en_MY"},
+    {0x1409, "en_NZ"},
+    {0x3409, "en_PH"},
+    {0x4809, "en_SG"},
+    {0x2C09, "en_TT"},
+    {0x0409, "en_US"},
+    {0x007f, "en_US_POSIX"}, /* duplicate for round-tripping */
+    {0x2409, "en_029"},
+    {0x1c09, "en_ZA"},
+    {0x3009, "en_ZW"},
+    {0x2409, "en_VI"},  /* Virgin Islands AKA Caribbean Islands (en_CB). On Windows8+ This is 0x1000 or dynamically assigned */
+    {0x0409, "en_AS"},  /* Alias for en_US. Leave last.  On Windows8+ This is 0x1000 or dynamically assigned */
+    {0x0409, "en_GU"},  /* Alias for en_US. Leave last.  On Windows8+ This is 0x1000 or dynamically assigned */
+    {0x0409, "en_MH"},  /* Alias for en_US. Leave last.  On Windows8+ This is 0x1000 or dynamically assigned */
+    {0x0409, "en_MP"},  /* Alias for en_US. Leave last.  On Windows8+ This is 0x1000 or dynamically assigned */
+    {0x0409, "en_UM"}   /* Alias for en_US. Leave last.  On Windows8+ This is 0x1000 or dynamically assigned */
+};
+
+ILCID_POSIX_SUBTABLE(en_US_POSIX) {
+    {0x007f, "en_US_POSIX"} /* duplicate for roundtripping */
+};
+
+// Windows doesn't know POSIX or BCP47 Unicode traditional sort names
+ILCID_POSIX_SUBTABLE(es) {
+    {0x0a,   "es"},
+    {0x2c0a, "es_AR"},
+    {0x400a, "es_BO"},
+    {0x340a, "es_CL"},
+    {0x240a, "es_CO"},
+    {0x140a, "es_CR"},
+    {0x5c0a, "es_CU"},
+    {0x1c0a, "es_DO"},
+    {0x300a, "es_EC"},
+    {0x0c0a, "es_ES"},      /*Modern sort.*/
+    {0x100a, "es_GT"},
+    {0x480a, "es_HN"},
+    {0x080a, "es_MX"},
+    {0x4c0a, "es_NI"},
+    {0x180a, "es_PA"},
+    {0x280a, "es_PE"},
+    {0x500a, "es_PR"},
+    {0x3c0a, "es_PY"},
+    {0x440a, "es_SV"},
+    {0x540a, "es_US"},
+    {0x380a, "es_UY"},
+    {0x200a, "es_VE"},
+    {0x580a, "es_419"},
+    {0x040a, "es_ES at collation=traditional"},
+    {0x040a, "es at collation=traditional"}        // Windows will treat this as es-ES at collation=traditional
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0425, et, et_EE)
+ILCID_POSIX_ELEMENT_ARRAY(0x042d, eu, eu_ES)
+
+/* ISO-639 doesn't distinguish between Persian and Dari.*/
+ILCID_POSIX_SUBTABLE(fa) {
+    {0x29,   "fa"},
+    {0x0429, "fa_IR"},  /* Persian/Farsi (Iran) */
+    {0x048c, "fa_AF"}   /* Persian/Dari (Afghanistan) */
+};
+
+
+/* duplicate for roundtripping */
+ILCID_POSIX_SUBTABLE(fa_AF) {
+    {0x8c,   "fa_AF"},  /* Persian/Dari (Afghanistan) */
+    {0x048c, "fa_AF"}   /* Persian/Dari (Afghanistan) */
+};
+
+ILCID_POSIX_SUBTABLE(ff) {
+    {0x67,   "ff"},
+    {0x7c67, "ff_Latn"},
+    {0x0867, "ff_Latn_SN"},
+    {0x0467, "ff_NG"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x040b, fi, fi_FI)
+ILCID_POSIX_ELEMENT_ARRAY(0x0464, fil,fil_PH)
+ILCID_POSIX_ELEMENT_ARRAY(0x0438, fo, fo_FO)
+
+ILCID_POSIX_SUBTABLE(fr) {
+    {0x0c,   "fr"},
+    {0x080c, "fr_BE"},
+    {0x0c0c, "fr_CA"},
+    {0x240c, "fr_CD"},
+    {0x240c, "fr_CG"},
+    {0x100c, "fr_CH"},
+    {0x300c, "fr_CI"},
+    {0x2c0c, "fr_CM"},
+    {0x040c, "fr_FR"},
+    {0x3c0c, "fr_HT"},
+    {0x140c, "fr_LU"},
+    {0x380c, "fr_MA"},
+    {0x180c, "fr_MC"},
+    {0x340c, "fr_ML"},
+    {0x200c, "fr_RE"},
+    {0x280c, "fr_SN"},
+    {0xe40c, "fr_015"},
+    {0x1c0c, "fr_029"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0467, fuv, fuv_NG)
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0462, fy, fy_NL)
+
+ILCID_POSIX_SUBTABLE(ga) { /* Gaelic (Ireland) */
+    {0x3c,   "ga"},
+    {0x083c, "ga_IE"},
+    {0x043c, "gd_GB"}
+};
+
+ILCID_POSIX_SUBTABLE(gd) { /* Gaelic (Scotland) */
+    {0x91,   "gd"},
+    {0x0491, "gd_GB"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0456, gl, gl_ES)
+ILCID_POSIX_ELEMENT_ARRAY(0x0447, gu, gu_IN)
+ILCID_POSIX_ELEMENT_ARRAY(0x0474, gn, gn_PY)
+ILCID_POSIX_ELEMENT_ARRAY(0x0484, gsw,gsw_FR)
+
+ILCID_POSIX_SUBTABLE(ha) {
+    {0x68,   "ha"},
+    {0x7c68, "ha_Latn"},
+    {0x0468, "ha_Latn_NG"},
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0475, haw,haw_US)
+ILCID_POSIX_ELEMENT_ARRAY(0x040d, he, he_IL)
+ILCID_POSIX_ELEMENT_ARRAY(0x0439, hi, hi_IN)
+
+/* This LCID is really four different locales.*/
+ILCID_POSIX_SUBTABLE(hr) {
+    {0x1a,   "hr"},
+    {0x141a, "bs_Latn_BA"},  /* Bosnian, Bosnia and Herzegovina */
+    {0x681a, "bs_Latn"},  /* Bosnian, Bosnia and Herzegovina */
+    {0x141a, "bs_BA"},  /* Bosnian, Bosnia and Herzegovina */
+    {0x781a, "bs"},     /* Bosnian */
+    {0x201a, "bs_Cyrl_BA"},  /* Bosnian, Bosnia and Herzegovina */
+    {0x641a, "bs_Cyrl"},  /* Bosnian, Bosnia and Herzegovina */
+    {0x101a, "hr_BA"},  /* Croatian in Bosnia */
+    {0x041a, "hr_HR"},  /* Croatian*/
+    {0x2c1a, "sr_Latn_ME"},
+    {0x241a, "sr_Latn_RS"},
+    {0x181a, "sr_Latn_BA"}, /* Serbo-Croatian in Bosnia */
+    {0x081a, "sr_Latn_CS"}, /* Serbo-Croatian*/
+    {0x701a, "sr_Latn"},    /* It's 0x1a or 0x081a, pick one to make the test program happy. */
+    {0x1c1a, "sr_Cyrl_BA"}, /* Serbo-Croatian in Bosnia */
+    {0x0c1a, "sr_Cyrl_CS"}, /* Serbian*/
+    {0x301a, "sr_Cyrl_ME"},
+    {0x281a, "sr_Cyrl_RS"},
+    {0x6c1a, "sr_Cyrl"},    /* It's 0x1a or 0x0c1a, pick one to make the test program happy. */
+    {0x7c1a, "sr"}          /* In CLDR sr is sr_Cyrl. */
+};
+
+ILCID_POSIX_SUBTABLE(hsb) {
+    {0x2E,   "hsb"},
+    {0x042E, "hsb_DE"},
+    {0x082E, "dsb_DE"},
+    {0x7C2E, "dsb"},
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x040e, hu, hu_HU)
+ILCID_POSIX_ELEMENT_ARRAY(0x042b, hy, hy_AM)
+
+ILCID_POSIX_SUBTABLE(ibb) {
+    {0x69, "ibb"},
+    {0x0469, "ibb_NG"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0421, id, id_ID)
+ILCID_POSIX_ELEMENT_ARRAY(0x0470, ig, ig_NG)
+ILCID_POSIX_ELEMENT_ARRAY(0x0478, ii, ii_CN)
+ILCID_POSIX_ELEMENT_ARRAY(0x040f, is, is_IS)
+
+ILCID_POSIX_SUBTABLE(it) {
+    {0x10,   "it"},
+    {0x0810, "it_CH"},
+    {0x0410, "it_IT"}
+};
+
+ILCID_POSIX_SUBTABLE(iu) {
+    {0x5d,   "iu"},
+    {0x045d, "iu_Cans_CA"},
+    {0x785d, "iu_Cans"},
+    {0x085d, "iu_Latn_CA"},
+    {0x7c5d, "iu_Latn"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x040d, iw, iw_IL)    /*Left in for compatibility*/
+ILCID_POSIX_ELEMENT_ARRAY(0x0411, ja, ja_JP)
+ILCID_POSIX_ELEMENT_ARRAY(0x0437, ka, ka_GE)
+ILCID_POSIX_ELEMENT_ARRAY(0x043f, kk, kk_KZ)
+ILCID_POSIX_ELEMENT_ARRAY(0x046f, kl, kl_GL)
+ILCID_POSIX_ELEMENT_ARRAY(0x0453, km, km_KH)
+ILCID_POSIX_ELEMENT_ARRAY(0x044b, kn, kn_IN)
+
+ILCID_POSIX_SUBTABLE(ko) {
+    {0x12,   "ko"},
+    {0x0812, "ko_KP"},
+    {0x0412, "ko_KR"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0457, kok, kok_IN)
+ILCID_POSIX_ELEMENT_ARRAY(0x0471, kr,  kr_NG)
+
+ILCID_POSIX_SUBTABLE(ks) {         /* We could add PK and CN too */
+    {0x60,   "ks"},
+    {0x0460, "ks_Arab_IN"},
+    {0x0860, "ks_Deva_IN"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0440, ky, ky_KG)   /* Kyrgyz is spoken in Kyrgyzstan */
+
+ILCID_POSIX_SUBTABLE(la) {
+    {0x76,   "la"},
+    {0x0476, "la_001"},
+    {0x0476, "la_IT"}       /*Left in for compatibility*/
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x046e, lb, lb_LU)
+ILCID_POSIX_ELEMENT_ARRAY(0x0454, lo, lo_LA)
+ILCID_POSIX_ELEMENT_ARRAY(0x0427, lt, lt_LT)
+ILCID_POSIX_ELEMENT_ARRAY(0x0426, lv, lv_LV)
+ILCID_POSIX_ELEMENT_ARRAY(0x0481, mi, mi_NZ)
+ILCID_POSIX_ELEMENT_ARRAY(0x042f, mk, mk_MK)
+ILCID_POSIX_ELEMENT_ARRAY(0x044c, ml, ml_IN)
+
+ILCID_POSIX_SUBTABLE(mn) {
+    {0x50,   "mn"},
+    {0x0450, "mn_MN"},
+    {0x7c50, "mn_Mong"},
+    {0x0850, "mn_Mong_CN"},
+    {0x0850, "mn_CN"},
+    {0x7850, "mn_Cyrl"},
+    {0x0c50, "mn_Mong_MN"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0458, mni,mni_IN)
+ILCID_POSIX_ELEMENT_ARRAY(0x047c, moh,moh_CA)
+ILCID_POSIX_ELEMENT_ARRAY(0x044e, mr, mr_IN)
+
+ILCID_POSIX_SUBTABLE(ms) {
+    {0x3e,   "ms"},
+    {0x083e, "ms_BN"},   /* Brunei Darussalam*/
+    {0x043e, "ms_MY"}    /* Malaysia*/
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x043a, mt, mt_MT)
+ILCID_POSIX_ELEMENT_ARRAY(0x0455, my, my_MM)
+
+ILCID_POSIX_SUBTABLE(ne) {
+    {0x61,   "ne"},
+    {0x0861, "ne_IN"},   /* India*/
+    {0x0461, "ne_NP"}    /* Nepal*/
+};
+
+ILCID_POSIX_SUBTABLE(nl) {
+    {0x13,   "nl"},
+    {0x0813, "nl_BE"},
+    {0x0413, "nl_NL"}
+};
+
+/* The "no" locale split into nb and nn.  By default in ICU, "no" is nb.*/
+// TODO: Not all of these are needed on Windows, but I don't know how ICU treats preferred ones here.
+ILCID_POSIX_SUBTABLE(no) {
+    {0x14,   "no"},     /* really nb_NO - actually Windows differentiates between neutral (no region) and specific (with region) */ 
+    {0x7c14, "nb"},     /* really nb */
+    {0x0414, "nb_NO"},  /* really nb_NO. Keep first in the 414 list. */
+    {0x0414, "no_NO"},  /* really nb_NO */
+    {0x0814, "nn_NO"},  /* really nn_NO. Keep first in the 814 list.  */
+    {0x7814, "nn"},     /* It's 0x14 or 0x814, pick one to make the test program happy. */
+    {0x0814, "no_NO_NY"}/* really nn_NO */
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x046c, nso,nso_ZA)   /* TODO: Verify the ISO-639 code */
+ILCID_POSIX_ELEMENT_ARRAY(0x0482, oc, oc_FR)
+
+ILCID_POSIX_SUBTABLE(om) { /* TODO: Verify the country */
+    {0x72,   "om"},
+    {0x0472, "om_ET"},
+    {0x0472, "gaz_ET"}
+};
+
+/* Declared as or_IN to get around compiler errors*/
+ILCID_POSIX_SUBTABLE(or_IN) {
+    {0x48,   "or"},
+    {0x0448, "or_IN"},
+};
+
+ILCID_POSIX_SUBTABLE(pa) {
+    {0x46,   "pa"},
+    {0x0446, "pa_IN"},
+    {0x0846, "pa_Arab_PK"},
+    {0x0846, "pa_PK"}
+};
+
+ILCID_POSIX_SUBTABLE(pap) {
+    {0x79, "pap"},
+    {0x0479, "pap_029"},
+    {0x0479, "pap_AN"}     /*Left in for compatibility*/
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0415, pl, pl_PL)
+ILCID_POSIX_ELEMENT_ARRAY(0x0463, ps, ps_AF)
+
+ILCID_POSIX_SUBTABLE(pt) {
+    {0x16,   "pt"},
+    {0x0416, "pt_BR"},
+    {0x0816, "pt_PT"}
+};
+
+ILCID_POSIX_SUBTABLE(qu) {
+    {0x6b,   "qu"},
+    {0x046b, "qu_BO"},
+    {0x086b, "qu_EC"},
+    {0x0C6b, "qu_PE"},
+    {0x046b, "quz_BO"},
+    {0x086b, "quz_EC"},
+    {0x0C6b, "quz_PE"}
+};
+
+ILCID_POSIX_SUBTABLE(quc) {
+    {0x93,   "quc"},
+    {0x0493, "quc_CO"},
+    /*
+        "quc_Latn_GT" is an exceptional case. Language ID of "quc"
+        is 0x93, but LCID of "quc_Latn_GT" is 0x486, which should be
+        under the group of "qut". "qut" is a retired ISO 639-3 language
+        code for West Central Quiche, and merged to "quc".
+        It looks Windows previously reserved "qut" for K'iche', but,
+        decided to use "quc" when adding a locale for K'iche' (Guatemala).
+
+        This data structure used here assumes language ID bits in
+        LCID is unique for alphabetic language code. But this is not true
+        for "quc_Latn_GT". If we don't have the data below, LCID look up
+        by alphabetic locale ID (POSIX) will fail. The same entry is found
+        under "qut" below, which is required for reverse look up.
+    */
+    {0x0486, "quc_Latn_GT"}
+};
+
+ILCID_POSIX_SUBTABLE(qut) {
+    {0x86,   "qut"},
+    {0x0486, "qut_GT"},
+    /*
+        See the note in "quc" above.
+    */
+    {0x0486, "quc_Latn_GT"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0417, rm, rm_CH)
+
+ILCID_POSIX_SUBTABLE(ro) {
+    {0x18,   "ro"},
+    {0x0418, "ro_RO"},
+    {0x0818, "ro_MD"}
+};
+
+// TODO: This is almost certainly 'wrong'.  0 in Windows is a synonym for LOCALE_USER_DEFAULT.
+// More likely this is a similar concept to the Windows 0x7f Invariant locale ""
+// (Except that it's not invariant in ICU)
+ILCID_POSIX_SUBTABLE(root) {
+    {0x00,   "root"}
+};
+
+ILCID_POSIX_SUBTABLE(ru) {
+    {0x19,   "ru"},
+    {0x0419, "ru_RU"},
+    {0x0819, "ru_MD"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0487, rw, rw_RW)
+ILCID_POSIX_ELEMENT_ARRAY(0x044f, sa, sa_IN)
+ILCID_POSIX_ELEMENT_ARRAY(0x0485, sah,sah_RU)
+
+ILCID_POSIX_SUBTABLE(sd) {
+    {0x59,   "sd"},
+    {0x0459, "sd_Deva_IN"},
+    {0x0459, "sd_IN"},
+    {0x0859, "sd_Arab_PK"},
+    {0x0859, "sd_PK"},
+    {0x7c59, "sd_Arab"}
+};
+
+ILCID_POSIX_SUBTABLE(se) {
+    {0x3b,   "se"},
+    {0x0c3b, "se_FI"},
+    {0x043b, "se_NO"},
+    {0x083b, "se_SE"},
+    {0x783b, "sma"},
+    {0x183b, "sma_NO"},
+    {0x1c3b, "sma_SE"},
+    {0x7c3b, "smj"},
+    {0x703b, "smn"},
+    {0x743b, "sms"},
+    {0x103b, "smj_NO"},
+    {0x143b, "smj_SE"},
+    {0x243b, "smn_FI"},
+    {0x203b, "sms_FI"},
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x045b, si, si_LK)
+ILCID_POSIX_ELEMENT_ARRAY(0x041b, sk, sk_SK)
+ILCID_POSIX_ELEMENT_ARRAY(0x0424, sl, sl_SI)
+
+ILCID_POSIX_SUBTABLE(so) {
+    {0x77,   "so"},
+    {0x0477, "so_SO"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x041c, sq, sq_AL)
+ILCID_POSIX_ELEMENT_ARRAY(0x0430, st, st_ZA)
+
+ILCID_POSIX_SUBTABLE(sv) {
+    {0x1d,   "sv"},
+    {0x081d, "sv_FI"},
+    {0x041d, "sv_SE"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0441, sw, sw_KE)
+ILCID_POSIX_ELEMENT_ARRAY(0x045A, syr, syr_SY)
+
+ILCID_POSIX_SUBTABLE(ta) {
+    {0x49,   "ta"},
+    {0x0449, "ta_IN"},
+    {0x0849, "ta_LK"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x044a, te, te_IN)
+
+/* Cyrillic based by default */
+ILCID_POSIX_SUBTABLE(tg) {
+    {0x28,   "tg"},
+    {0x7c28, "tg_Cyrl"},
+    {0x0428, "tg_Cyrl_TJ"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x041e, th, th_TH)
+
+ILCID_POSIX_SUBTABLE(ti) {
+    {0x73,   "ti"},
+    {0x0873, "ti_ER"},
+    {0x0473, "ti_ET"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0442, tk, tk_TM)
+
+ILCID_POSIX_SUBTABLE(tn) {
+    {0x32,   "tn"},
+    {0x0832, "tn_BW"},
+    {0x0432, "tn_ZA"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x041f, tr, tr_TR)
+ILCID_POSIX_ELEMENT_ARRAY(0x0431, ts, ts_ZA)
+ILCID_POSIX_ELEMENT_ARRAY(0x0444, tt, tt_RU)
+
+ILCID_POSIX_SUBTABLE(tzm) {
+    {0x5f,   "tzm"},
+    {0x7c5f, "tzm_Latn"},
+    {0x085f, "tzm_Latn_DZ"},
+    {0x105f, "tzm_Tfng_MA"},
+    {0x045f, "tzm_Arab_MA"},
+    {0x045f, "tmz"}
+};
+
+ILCID_POSIX_SUBTABLE(ug) {
+    {0x80,   "ug"},
+    {0x0480, "ug_CN"},
+    {0x0480, "ug_Arab_CN"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0422, uk, uk_UA)
+
+ILCID_POSIX_SUBTABLE(ur) {
+    {0x20,   "ur"},
+    {0x0820, "ur_IN"},
+    {0x0420, "ur_PK"}
+};
+
+ILCID_POSIX_SUBTABLE(uz) {
+    {0x43,   "uz"},
+    {0x0843, "uz_Cyrl_UZ"},  /* Cyrillic based */
+    {0x7843, "uz_Cyrl"},  /* Cyrillic based */
+    {0x0843, "uz_UZ"},  /* Cyrillic based */
+    {0x0443, "uz_Latn_UZ"}, /* Latin based */
+    {0x7c43, "uz_Latn"} /* Latin based */
+};
+
+ILCID_POSIX_SUBTABLE(ve) { /* TODO: Verify the country */
+    {0x33,   "ve"},
+    {0x0433, "ve_ZA"},
+    {0x0433, "ven_ZA"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x042a, vi, vi_VN)
+ILCID_POSIX_ELEMENT_ARRAY(0x0488, wo, wo_SN)
+ILCID_POSIX_ELEMENT_ARRAY(0x0434, xh, xh_ZA)
+
+ILCID_POSIX_SUBTABLE(yi) {
+    {0x003d, "yi"},
+    {0x043d, "yi_001"}
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x046a, yo, yo_NG)
+
+// Windows & ICU tend to different names for some of these
+// TODO: Windows probably does not need all of these entries, but I don't know how the precedence works.
+ILCID_POSIX_SUBTABLE(zh) {
+    {0x0004, "zh_Hans"},
+    {0x7804, "zh"},
+    {0x0804, "zh_CN"},
+    {0x0804, "zh_Hans_CN"},
+    {0x0c04, "zh_Hant_HK"},
+    {0x0c04, "zh_HK"},
+    {0x1404, "zh_Hant_MO"},
+    {0x1404, "zh_MO"},
+    {0x1004, "zh_Hans_SG"},
+    {0x1004, "zh_SG"},
+    {0x0404, "zh_Hant_TW"},
+    {0x7c04, "zh_Hant"},
+    {0x0404, "zh_TW"},
+    {0x30404,"zh_Hant_TW"},     /* Bopomofo order */
+    {0x30404,"zh_TW"},          /* Bopomofo order */
+    {0x20004,"zh at collation=stroke"},
+    {0x20404,"zh_Hant at collation=stroke"},
+    {0x20404,"zh_Hant_TW at collation=stroke"},
+    {0x20404,"zh_TW at collation=stroke"},
+    {0x20804,"zh_Hans at collation=stroke"},
+    {0x20804,"zh_Hans_CN at collation=stroke"},
+    {0x20804,"zh_CN at collation=stroke"}
+    // TODO: Alternate collations for other LCIDs are missing, eg: 0x50804
+};
+
+ILCID_POSIX_ELEMENT_ARRAY(0x0435, zu, zu_ZA)
+
+/* This must be static and grouped by LCID. */
+static const ILcidPosixMap gPosixIDmap[] = {
+    ILCID_POSIX_MAP(af),    /*  af  Afrikaans                 0x36 */
+    ILCID_POSIX_MAP(am),    /*  am  Amharic                   0x5e */
+    ILCID_POSIX_MAP(ar),    /*  ar  Arabic                    0x01 */
+    ILCID_POSIX_MAP(arn),   /*  arn Araucanian/Mapudungun     0x7a */
+    ILCID_POSIX_MAP(as),    /*  as  Assamese                  0x4d */
+    ILCID_POSIX_MAP(az),    /*  az  Azerbaijani               0x2c */
+    ILCID_POSIX_MAP(ba),    /*  ba  Bashkir                   0x6d */
+    ILCID_POSIX_MAP(be),    /*  be  Belarusian                0x23 */
+/*    ILCID_POSIX_MAP(ber),     ber Berber/Tamazight          0x5f */
+    ILCID_POSIX_MAP(bg),    /*  bg  Bulgarian                 0x02 */
+    ILCID_POSIX_MAP(bin),   /*  bin Edo                       0x66 */
+    ILCID_POSIX_MAP(bn),    /*  bn  Bengali; Bangla           0x45 */
+    ILCID_POSIX_MAP(bo),    /*  bo  Tibetan                   0x51 */
+    ILCID_POSIX_MAP(br),    /*  br  Breton                    0x7e */
+    ILCID_POSIX_MAP(ca),    /*  ca  Catalan                   0x03 */
+    ILCID_POSIX_MAP(chr),   /*  chr Cherokee                  0x5c */
+    ILCID_POSIX_MAP(ckb),   /*  ckb Sorani (Central Kurdish)  0x92 */
+    ILCID_POSIX_MAP(co),    /*  co  Corsican                  0x83 */
+    ILCID_POSIX_MAP(cs),    /*  cs  Czech                     0x05 */
+    ILCID_POSIX_MAP(cy),    /*  cy  Welsh                     0x52 */
+    ILCID_POSIX_MAP(da),    /*  da  Danish                    0x06 */
+    ILCID_POSIX_MAP(de),    /*  de  German                    0x07 */
+    ILCID_POSIX_MAP(dv),    /*  dv  Divehi                    0x65 */
+    ILCID_POSIX_MAP(el),    /*  el  Greek                     0x08 */
+    ILCID_POSIX_MAP(en),    /*  en  English                   0x09 */
+    ILCID_POSIX_MAP(en_US_POSIX), /*    invariant             0x7f */
+    ILCID_POSIX_MAP(es),    /*  es  Spanish                   0x0a */
+    ILCID_POSIX_MAP(et),    /*  et  Estonian                  0x25 */
+    ILCID_POSIX_MAP(eu),    /*  eu  Basque                    0x2d */
+    ILCID_POSIX_MAP(fa),    /*  fa  Persian/Farsi             0x29 */
+    ILCID_POSIX_MAP(fa_AF), /*  fa  Persian/Dari              0x8c */
+    ILCID_POSIX_MAP(ff),    /*  ff  Fula                      0x67 */
+    ILCID_POSIX_MAP(fi),    /*  fi  Finnish                   0x0b */
+    ILCID_POSIX_MAP(fil),   /*  fil Filipino                  0x64 */
+    ILCID_POSIX_MAP(fo),    /*  fo  Faroese                   0x38 */
+    ILCID_POSIX_MAP(fr),    /*  fr  French                    0x0c */
+    ILCID_POSIX_MAP(fuv),   /*  fuv Fulfulde - Nigeria        0x67 */
+    ILCID_POSIX_MAP(fy),    /*  fy  Frisian                   0x62 */
+    ILCID_POSIX_MAP(ga),    /*  *   Gaelic (Ireland,Scotland) 0x3c */
+    ILCID_POSIX_MAP(gd),    /*  gd  Gaelic (United Kingdom)   0x91 */
+    ILCID_POSIX_MAP(gl),    /*  gl  Galician                  0x56 */
+    ILCID_POSIX_MAP(gn),    /*  gn  Guarani                   0x74 */
+    ILCID_POSIX_MAP(gsw),   /*  gsw Alemanic/Alsatian/Swiss German 0x84 */
+    ILCID_POSIX_MAP(gu),    /*  gu  Gujarati                  0x47 */
+    ILCID_POSIX_MAP(ha),    /*  ha  Hausa                     0x68 */
+    ILCID_POSIX_MAP(haw),   /*  haw Hawaiian                  0x75 */
+    ILCID_POSIX_MAP(he),    /*  he  Hebrew (formerly iw)      0x0d */
+    ILCID_POSIX_MAP(hi),    /*  hi  Hindi                     0x39 */
+    ILCID_POSIX_MAP(hr),    /*  *   Croatian and others       0x1a */
+    ILCID_POSIX_MAP(hsb),   /*  hsb Upper Sorbian             0x2e */
+    ILCID_POSIX_MAP(hu),    /*  hu  Hungarian                 0x0e */
+    ILCID_POSIX_MAP(hy),    /*  hy  Armenian                  0x2b */
+    ILCID_POSIX_MAP(ibb),   /*  ibb Ibibio - Nigeria          0x69 */
+    ILCID_POSIX_MAP(id),    /*  id  Indonesian (formerly in)  0x21 */
+    ILCID_POSIX_MAP(ig),    /*  ig  Igbo                      0x70 */
+    ILCID_POSIX_MAP(ii),    /*  ii  Sichuan Yi                0x78 */
+    ILCID_POSIX_MAP(is),    /*  is  Icelandic                 0x0f */
+    ILCID_POSIX_MAP(it),    /*  it  Italian                   0x10 */
+    ILCID_POSIX_MAP(iu),    /*  iu  Inuktitut                 0x5d */
+    ILCID_POSIX_MAP(iw),    /*  iw  Hebrew                    0x0d */
+    ILCID_POSIX_MAP(ja),    /*  ja  Japanese                  0x11 */
+    ILCID_POSIX_MAP(ka),    /*  ka  Georgian                  0x37 */
+    ILCID_POSIX_MAP(kk),    /*  kk  Kazakh                    0x3f */
+    ILCID_POSIX_MAP(kl),    /*  kl  Kalaallisut               0x6f */
+    ILCID_POSIX_MAP(km),    /*  km  Khmer                     0x53 */
+    ILCID_POSIX_MAP(kn),    /*  kn  Kannada                   0x4b */
+    ILCID_POSIX_MAP(ko),    /*  ko  Korean                    0x12 */
+    ILCID_POSIX_MAP(kok),   /*  kok Konkani                   0x57 */
+    ILCID_POSIX_MAP(kr),    /*  kr  Kanuri                    0x71 */
+    ILCID_POSIX_MAP(ks),    /*  ks  Kashmiri                  0x60 */
+    ILCID_POSIX_MAP(ky),    /*  ky  Kyrgyz                    0x40 */
+    ILCID_POSIX_MAP(lb),    /*  lb  Luxembourgish             0x6e */
+    ILCID_POSIX_MAP(la),    /*  la  Latin                     0x76 */
+    ILCID_POSIX_MAP(lo),    /*  lo  Lao                       0x54 */
+    ILCID_POSIX_MAP(lt),    /*  lt  Lithuanian                0x27 */
+    ILCID_POSIX_MAP(lv),    /*  lv  Latvian, Lettish          0x26 */
+    ILCID_POSIX_MAP(mi),    /*  mi  Maori                     0x81 */
+    ILCID_POSIX_MAP(mk),    /*  mk  Macedonian                0x2f */
+    ILCID_POSIX_MAP(ml),    /*  ml  Malayalam                 0x4c */
+    ILCID_POSIX_MAP(mn),    /*  mn  Mongolian                 0x50 */
+    ILCID_POSIX_MAP(mni),   /*  mni Manipuri                  0x58 */
+    ILCID_POSIX_MAP(moh),   /*  moh Mohawk                    0x7c */
+    ILCID_POSIX_MAP(mr),    /*  mr  Marathi                   0x4e */
+    ILCID_POSIX_MAP(ms),    /*  ms  Malay                     0x3e */
+    ILCID_POSIX_MAP(mt),    /*  mt  Maltese                   0x3a */
+    ILCID_POSIX_MAP(my),    /*  my  Burmese                   0x55 */
+/*    ILCID_POSIX_MAP(nb),    //  no  Norwegian                 0x14 */
+    ILCID_POSIX_MAP(ne),    /*  ne  Nepali                    0x61 */
+    ILCID_POSIX_MAP(nl),    /*  nl  Dutch                     0x13 */
+/*    ILCID_POSIX_MAP(nn),    //  no  Norwegian                 0x14 */
+    ILCID_POSIX_MAP(no),    /*  *   Norwegian                 0x14 */
+    ILCID_POSIX_MAP(nso),   /*  nso Sotho, Northern (Sepedi dialect) 0x6c */
+    ILCID_POSIX_MAP(oc),    /*  oc  Occitan                   0x82 */
+    ILCID_POSIX_MAP(om),    /*  om  Oromo                     0x72 */
+    ILCID_POSIX_MAP(or_IN), /*  or  Oriya                     0x48 */
+    ILCID_POSIX_MAP(pa),    /*  pa  Punjabi                   0x46 */
+    ILCID_POSIX_MAP(pap),   /*  pap Papiamentu                0x79 */
+    ILCID_POSIX_MAP(pl),    /*  pl  Polish                    0x15 */
+    ILCID_POSIX_MAP(ps),    /*  ps  Pashto                    0x63 */
+    ILCID_POSIX_MAP(pt),    /*  pt  Portuguese                0x16 */
+    ILCID_POSIX_MAP(qu),    /*  qu  Quechua                   0x6B */
+    ILCID_POSIX_MAP(quc),   /*  quc K'iche                    0x93 */
+    ILCID_POSIX_MAP(qut),   /*  qut K'iche                    0x86 */
+    ILCID_POSIX_MAP(rm),    /*  rm  Raeto-Romance/Romansh     0x17 */
+    ILCID_POSIX_MAP(ro),    /*  ro  Romanian                  0x18 */
+    ILCID_POSIX_MAP(root),  /*  root                          0x00 */
+    ILCID_POSIX_MAP(ru),    /*  ru  Russian                   0x19 */
+    ILCID_POSIX_MAP(rw),    /*  rw  Kinyarwanda               0x87 */
+    ILCID_POSIX_MAP(sa),    /*  sa  Sanskrit                  0x4f */
+    ILCID_POSIX_MAP(sah),   /*  sah Yakut                     0x85 */
+    ILCID_POSIX_MAP(sd),    /*  sd  Sindhi                    0x59 */
+    ILCID_POSIX_MAP(se),    /*  se  Sami                      0x3b */
+/*    ILCID_POSIX_MAP(sh),    //  sh  Serbo-Croatian            0x1a */
+    ILCID_POSIX_MAP(si),    /*  si  Sinhalese                 0x5b */
+    ILCID_POSIX_MAP(sk),    /*  sk  Slovak                    0x1b */
+    ILCID_POSIX_MAP(sl),    /*  sl  Slovenian                 0x24 */
+    ILCID_POSIX_MAP(so),    /*  so  Somali                    0x77 */
+    ILCID_POSIX_MAP(sq),    /*  sq  Albanian                  0x1c */
+/*    ILCID_POSIX_MAP(sr),    //  sr  Serbian                   0x1a */
+    ILCID_POSIX_MAP(st),    /*  st  Sutu                      0x30 */
+    ILCID_POSIX_MAP(sv),    /*  sv  Swedish                   0x1d */
+    ILCID_POSIX_MAP(sw),    /*  sw  Swahili                   0x41 */
+    ILCID_POSIX_MAP(syr),   /*  syr Syriac                    0x5A */
+    ILCID_POSIX_MAP(ta),    /*  ta  Tamil                     0x49 */
+    ILCID_POSIX_MAP(te),    /*  te  Telugu                    0x4a */
+    ILCID_POSIX_MAP(tg),    /*  tg  Tajik                     0x28 */
+    ILCID_POSIX_MAP(th),    /*  th  Thai                      0x1e */
+    ILCID_POSIX_MAP(ti),    /*  ti  Tigrigna                  0x73 */
+    ILCID_POSIX_MAP(tk),    /*  tk  Turkmen                   0x42 */
+    ILCID_POSIX_MAP(tn),    /*  tn  Tswana                    0x32 */
+    ILCID_POSIX_MAP(tr),    /*  tr  Turkish                   0x1f */
+    ILCID_POSIX_MAP(ts),    /*  ts  Tsonga                    0x31 */
+    ILCID_POSIX_MAP(tt),    /*  tt  Tatar                     0x44 */
+    ILCID_POSIX_MAP(tzm),   /*  tzm Tamazight                 0x5f */
+    ILCID_POSIX_MAP(ug),    /*  ug  Uighur                    0x80 */
+    ILCID_POSIX_MAP(uk),    /*  uk  Ukrainian                 0x22 */
+    ILCID_POSIX_MAP(ur),    /*  ur  Urdu                      0x20 */
+    ILCID_POSIX_MAP(uz),    /*  uz  Uzbek                     0x43 */
+    ILCID_POSIX_MAP(ve),    /*  ve  Venda                     0x33 */
+    ILCID_POSIX_MAP(vi),    /*  vi  Vietnamese                0x2a */
+    ILCID_POSIX_MAP(wo),    /*  wo  Wolof                     0x88 */
+    ILCID_POSIX_MAP(xh),    /*  xh  Xhosa                     0x34 */
+    ILCID_POSIX_MAP(yi),    /*  yi  Yiddish                   0x3d */
+    ILCID_POSIX_MAP(yo),    /*  yo  Yoruba                    0x6a */
+    ILCID_POSIX_MAP(zh),    /*  zh  Chinese                   0x04 */
+    ILCID_POSIX_MAP(zu),    /*  zu  Zulu                      0x35 */
+};
+
+static const uint32_t gLocaleCount = UPRV_LENGTHOF(gPosixIDmap);
+
+/**
+ * Do not call this function. It is called by hostID.
+ * The function is not private because this struct must stay as a C struct,
+ * and this is an internal class.
+ */
+static int32_t
+idCmp(const char* id1, const char* id2)
+{
+    int32_t diffIdx = 0;
+    while (*id1 == *id2 && *id1 != 0) {
+        diffIdx++;
+        id1++;
+        id2++;
+    }
+    return diffIdx;
+}
+
+/**
+ * Searches for a Windows LCID
+ *
+ * @param posixid the Posix style locale id.
+ * @param status gets set to U_ILLEGAL_ARGUMENT_ERROR when the Posix ID has
+ *               no equivalent Windows LCID.
+ * @return the LCID
+ */
+static uint32_t
+getHostID(const ILcidPosixMap *this_0, const char* posixID, UErrorCode* status)
+{
+    int32_t bestIdx = 0;
+    int32_t bestIdxDiff = 0;
+    int32_t posixIDlen = (int32_t)uprv_strlen(posixID);
+    uint32_t idx;
+
+    for (idx = 0; idx < this_0->numRegions; idx++ ) {
+        int32_t sameChars = idCmp(posixID, this_0->regionMaps[idx].posixID);
+        if (sameChars > bestIdxDiff && this_0->regionMaps[idx].posixID[sameChars] == 0) {
+            if (posixIDlen == sameChars) {
+                /* Exact match */
+                return this_0->regionMaps[idx].hostID;
+            }
+            bestIdxDiff = sameChars;
+            bestIdx = idx;
+        }
+    }
+    /* We asked for something unusual, like en_ZZ, and we try to return the number for the same language. */
+    /* We also have to make sure that sid and si and similar string subsets don't match. */
+    if ((posixID[bestIdxDiff] == '_' || posixID[bestIdxDiff] == '@')
+        && this_0->regionMaps[bestIdx].posixID[bestIdxDiff] == 0)
+    {
+        *status = U_USING_FALLBACK_WARNING;
+        return this_0->regionMaps[bestIdx].hostID;
+    }
+
+    /*no match found */
+    *status = U_ILLEGAL_ARGUMENT_ERROR;
+    return this_0->regionMaps->hostID;
+}
+
+static const char*
+getPosixID(const ILcidPosixMap *this_0, uint32_t hostID)
+{
+    uint32_t i;
+    for (i = 0; i <= this_0->numRegions; i++)
+    {
+        if (this_0->regionMaps[i].hostID == hostID)
+        {
+            return this_0->regionMaps[i].posixID;
+        }
+    }
+
+    /* If you get here, then no matching region was found,
+       so return the language id with the wild card region. */
+    return this_0->regionMaps[0].posixID;
+}
+
+/*
+//////////////////////////////////////
+//
+// LCID --> POSIX
+//
+/////////////////////////////////////
+*/
+#ifdef USE_WINDOWS_LCID_MAPPING_API
+/*
+ * Various language tags needs to be changed:
+ * quz -> qu
+ * prs -> fa
+ */
+#define FIX_LANGUAGE_ID_TAG(buffer, len) \
+    if (len >= 3) { \
+        if (buffer[0] == 'q' && buffer[1] == 'u' && buffer[2] == 'z') {\
+            buffer[2] = 0; \
+            uprv_strcat(buffer, buffer+3); \
+        } else if (buffer[0] == 'p' && buffer[1] == 'r' && buffer[2] == 's') {\
+            buffer[0] = 'f'; buffer[1] = 'a'; buffer[2] = 0; \
+            uprv_strcat(buffer, buffer+3); \
+        } \
+    }
+
+#endif
+U_CAPI int32_t
+uprv_convertToPosix(uint32_t hostid, char *posixID, int32_t posixIDCapacity, UErrorCode* status)
+{
+    uint16_t langID;
+    uint32_t localeIndex;
+    UBool bLookup = TRUE;
+    const char *pPosixID = NULL;
+
+#ifdef USE_WINDOWS_LCID_MAPPING_API
+    char locName[LOCALE_NAME_MAX_LENGTH] = {};      // ICU name can't be longer than Windows name
+
+    // Note: Windows primary lang ID 0x92 in LCID is used for Central Kurdish and
+    // GetLocaleInfo() maps such LCID to "ku". However, CLDR uses "ku" for
+    // Northern Kurdish and "ckb" for Central Kurdish. For this reason, we cannot
+    // use the Windows API to resolve locale ID for this specific case.
+    if ((hostid & 0x3FF) != 0x92) {
+        int32_t tmpLen = 0;
+        UChar windowsLocaleName[LOCALE_NAME_MAX_LENGTH];  // ULOC_FULLNAME_CAPACITY > LOCALE_NAME_MAX_LENGTH
+
+        // Note: LOCALE_ALLOW_NEUTRAL_NAMES was enabled in Windows7+, prior versions did not handle neutral (no-region) locale names.
+        tmpLen = LCIDToLocaleName(hostid, (PWSTR)windowsLocaleName, UPRV_LENGTHOF(windowsLocaleName), LOCALE_ALLOW_NEUTRAL_NAMES);
+        if (tmpLen > 1) {
+            int32_t i = 0;
+            // Only need to look up in table if have _, eg for de-de_phoneb type alternate sort.
+            bLookup = FALSE;
+            for (i = 0; i < UPRV_LENGTHOF(locName); i++)
+            {
+                locName[i] = (char)(windowsLocaleName[i]);
+
+                // Windows locale name may contain sorting variant, such as "es-ES_tradnl".
+                // In such cases, we need special mapping data found in the hardcoded table
+                // in this source file.
+                if (windowsLocaleName[i] == L'_')
+                {
+                    // Keep the base locale, without variant
+                    // TODO: Should these be mapped from _phoneb to @collation=phonebook, etc.?
+                    locName[i] = '\0';
+                    tmpLen = i;
+                    bLookup = TRUE;
+                    break;
+                }
+                else if (windowsLocaleName[i] == L'-')
+                {
+                    // Windows names use -, ICU uses _
+                    locName[i] = '_';
+                }
+                else if (windowsLocaleName[i] == L'\0')
+                {
+                    // No point in doing more work than necessary
+                    break;
+                }
+            }
+            // TODO: Need to understand this better, why isn't it an alias?
+            FIX_LANGUAGE_ID_TAG(locName, tmpLen);
+            pPosixID = locName;
+        }
+    }
+#endif // USE_WINDOWS_LCID_MAPPING_API
+
+    if (bLookup) {
+        const char *pCandidate = NULL;
+        langID = LANGUAGE_LCID(hostid);
+
+        for (localeIndex = 0; localeIndex < gLocaleCount; localeIndex++) {
+            if (langID == gPosixIDmap[localeIndex].regionMaps->hostID) {
+                pCandidate = getPosixID(&gPosixIDmap[localeIndex], hostid);
+                break;
+            }
+        }
+
+        /* On Windows, when locale name has a variant, we still look up the hardcoded table.
+           If a match in the hardcoded table is longer than the Windows locale name without
+           variant, we use the one as the result */
+        if (pCandidate && (pPosixID == NULL || uprv_strlen(pCandidate) > uprv_strlen(pPosixID))) {
+            pPosixID = pCandidate;
+        }
+    }
+
+    if (pPosixID) {
+        int32_t resLen = static_cast<int32_t>(uprv_strlen(pPosixID));
+        int32_t copyLen = resLen <= posixIDCapacity ? resLen : posixIDCapacity;
+        uprv_memcpy(posixID, pPosixID, copyLen);
+        if (resLen < posixIDCapacity) {
+            posixID[resLen] = 0;
+            if (*status == U_STRING_NOT_TERMINATED_WARNING) {
+                *status = U_ZERO_ERROR;
+            }
+        } else if (resLen == posixIDCapacity) {
+            *status = U_STRING_NOT_TERMINATED_WARNING;
+        } else {
+            *status = U_BUFFER_OVERFLOW_ERROR;
+        }
+        return resLen;
+    }
+
+    /* no match found */
+    *status = U_ILLEGAL_ARGUMENT_ERROR;
+    return -1;
+}
+
+/*
+//////////////////////////////////////
+//
+// POSIX --> LCID
+// This should only be called from uloc_getLCID.
+// The locale ID must be in canonical form.
+//
+/////////////////////////////////////
+*/
+U_CAPI uint32_t
+uprv_convertToLCIDPlatform(const char* localeID)
+{
+    // The purpose of this function is to leverage native platform name->lcid
+    // conversion functionality when available.
+#ifdef USE_WINDOWS_LCID_MAPPING_API
+    DWORD nameLCIDFlags = 0;
+    UErrorCode myStatus = U_ZERO_ERROR;
+
+    // First check for a Windows name->LCID match, fall through to catch
+    // ICU special cases, but Windows may know it already.
+#if LOCALE_ALLOW_NEUTRAL_NAMES
+    nameLCIDFlags = LOCALE_ALLOW_NEUTRAL_NAMES;
+#endif /* LOCALE_ALLOW_NEUTRAL_NAMES */
+
+    int32_t len;
+    char collVal[ULOC_KEYWORDS_CAPACITY] = {};
+    char baseName[ULOC_FULLNAME_CAPACITY] = {};
+    const char * mylocaleID = localeID;
+
+    // Check any for keywords.
+    if (uprv_strchr(localeID, '@'))
+    {
+        len = uloc_getKeywordValue(localeID, "collation", collVal, UPRV_LENGTHOF(collVal) - 1, &myStatus);
+        if (U_SUCCESS(myStatus) && len > 0)
+        {
+            // If it contains the keyword collation, return 0 so that the LCID lookup table will be used.
+            return 0;
+        }
+        else
+        {
+            // If the locale ID contains keywords other than collation, just use the base name.
+            len = uloc_getBaseName(localeID, baseName, UPRV_LENGTHOF(baseName) - 1, &myStatus);
+
+            if (U_SUCCESS(myStatus) && len > 0)
+            {
+                baseName[len] = 0;
+                mylocaleID = baseName;
+            }
+        }
+    }
+
+    char asciiBCP47Tag[LOCALE_NAME_MAX_LENGTH] = {};
+    // this will change it from de_DE at collation=phonebook to de-DE-u-co-phonebk form
+    (void)uloc_toLanguageTag(mylocaleID, asciiBCP47Tag, UPRV_LENGTHOF(asciiBCP47Tag), FALSE, &myStatus);
+
+    if (U_SUCCESS(myStatus))
+    {
+        // Need it to be UTF-16, not 8-bit
+        wchar_t bcp47Tag[LOCALE_NAME_MAX_LENGTH] = {};
+        int32_t i;
+        for (i = 0; i < UPRV_LENGTHOF(bcp47Tag); i++)
+        {
+            if (asciiBCP47Tag[i] == '\0')
+            {
+                break;
+            }
+            else
+            {
+                // Copy the character
+                bcp47Tag[i] = static_cast<wchar_t>(asciiBCP47Tag[i]);
+            }
+        }
+
+        if (i < (UPRV_LENGTHOF(bcp47Tag) - 1))
+        {
+            // Ensure it's null terminated
+            bcp47Tag[i] = L'\0';
+            LCID lcid = LocaleNameToLCID(bcp47Tag, nameLCIDFlags);
+            if (lcid > 0)
+            {
+                // Found LCID from windows, return that one, unless its completely ambiguous
+                // LOCALE_USER_DEFAULT and transients are OK because they will round trip
+                // for this process.
+                if (lcid != LOCALE_CUSTOM_UNSPECIFIED)
+                {
+                    return lcid;
+                }
+            }
+        }
+    }
+#else
+    (void)localeID; // Suppress unused variable warning.
+#endif /* USE_WINDOWS_LCID_MAPPING_API */
+
+    // No found, or not implemented on platforms without native name->lcid conversion
+    return 0;
+}
+
+U_CAPI uint32_t
+uprv_convertToLCID(const char *langID, const char* posixID, UErrorCode* status)
+{
+    // This function does the table lookup when native platform name->lcid conversion isn't available,
+    // or for locales that don't follow patterns the platform expects.
+    uint32_t   low    = 0;
+    uint32_t   high   = gLocaleCount;
+    uint32_t   mid;
+    uint32_t   oldmid = 0;
+    int32_t    compVal;
+
+    uint32_t   value         = 0;
+    uint32_t   fallbackValue = (uint32_t)-1;
+    UErrorCode myStatus;
+    uint32_t   idx;
+
+    /* Check for incomplete id. */
+    if (!langID || !posixID || uprv_strlen(langID) < 2 || uprv_strlen(posixID) < 2) {
+        return 0;
+    }
+
+    /*Binary search for the map entry for normal cases */
+
+    while (high > low)  /*binary search*/{
+
+        mid = (high+low) >> 1; /*Finds median*/
+
+        if (mid == oldmid) 
+            break;
+
+        compVal = uprv_strcmp(langID, gPosixIDmap[mid].regionMaps->posixID);
+        if (compVal < 0){
+            high = mid;
+        }
+        else if (compVal > 0){
+            low = mid;
+        }
+        else /*we found it*/{
+            return getHostID(&gPosixIDmap[mid], posixID, status);
+        }
+        oldmid = mid;
+    }
+
+    /*
+     * Sometimes we can't do a binary search on posixID because some LCIDs
+     * go to different locales.  We hit one of those special cases.
+     */
+    for (idx = 0; idx < gLocaleCount; idx++ ) {
+        myStatus = U_ZERO_ERROR;
+        value = getHostID(&gPosixIDmap[idx], posixID, &myStatus);
+        if (myStatus == U_ZERO_ERROR) {
+            return value;
+        }
+        else if (myStatus == U_USING_FALLBACK_WARNING) {
+            fallbackValue = value;
+        }
+    }
+
+    if (fallbackValue != (uint32_t)-1) {
+        *status = U_USING_FALLBACK_WARNING;
+        return fallbackValue;
+    }
+
+    /* no match found */
+    *status = U_ILLEGAL_ARGUMENT_ERROR;
+    return 0;   /* return international (root) */
+}


Property changes on: trunk/Build/source/libs/icu/icu-src/source/common/locmap.cpp
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Build/source/libs/icu/icu-src/source/common/locmap.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/locmap.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/locmap.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 ******************************************************************************
@@ -32,7 +32,8 @@
 
 U_CAPI int32_t uprv_convertToPosix(uint32_t hostid, char* posixID, int32_t posixIDCapacity, UErrorCode* status);
 
-/* Don't call this function directly. Use uloc_getLCID instead. */
+/* Don't call these functions directly. Use uloc_getLCID instead. */
+U_CAPI uint32_t uprv_convertToLCIDPlatform(const char *localeID);   // Leverage platform conversion if possible
 U_CAPI uint32_t uprv_convertToLCID(const char *langID, const char* posixID, UErrorCode* status);
 
 #endif /* LOCMAP_H */

Modified: trunk/Build/source/libs/icu/icu-src/source/common/locresdata.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/locresdata.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/locresdata.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 *******************************************************************************
@@ -8,7 +8,7 @@
 *
 *******************************************************************************
 *   file name:  loclikely.cpp
-*   encoding:   US-ASCII
+*   encoding:   UTF-8
 *   tab size:   8 (not used)
 *   indentation:4
 *

Modified: trunk/Build/source/libs/icu/icu-src/source/common/locutil.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/locutil.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/locutil.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
  *******************************************************************************

Modified: trunk/Build/source/libs/icu/icu-src/source/common/locutil.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/locutil.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/locutil.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /**
  *******************************************************************************

Modified: trunk/Build/source/libs/icu/icu-src/source/common/messageimpl.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/messageimpl.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/messageimpl.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 *******************************************************************************
@@ -6,7 +6,7 @@
 *   Corporation and others.  All Rights Reserved.
 *******************************************************************************
 *   file name:  messageimpl.h
-*   encoding:   US-ASCII
+*   encoding:   UTF-8
 *   tab size:   8 (not used)
 *   indentation:4
 *

Modified: trunk/Build/source/libs/icu/icu-src/source/common/messagepattern.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/messagepattern.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/messagepattern.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 *******************************************************************************
@@ -6,7 +6,7 @@
 *   Corporation and others.  All Rights Reserved.
 *******************************************************************************
 *   file name:  messagepattern.cpp
-*   encoding:   US-ASCII
+*   encoding:   UTF-8
 *   tab size:   8 (not used)
 *   indentation:4
 *

Modified: trunk/Build/source/libs/icu/icu-src/source/common/msvcres.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/msvcres.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/msvcres.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 //{{NO_DEPENDENCIES}}
 // Copyright (c) 2003-2010 International Business Machines

Modified: trunk/Build/source/libs/icu/icu-src/source/common/mutex.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/mutex.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/mutex.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 ******************************************************************************

Modified: trunk/Build/source/libs/icu/icu-src/source/common/norm2_nfc_data.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/norm2_nfc_data.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/norm2_nfc_data.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,24 +1,25 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
-/*
- * Copyright (C) 1999-2016, International Business Machines
- * Corporation and others.  All Rights Reserved.
- *
- * file name: norm2_nfc_data.h
- *
- * machine-generated by: icu/source/tools/gennorm2/n2builder.cpp
- */
+//
+// Copyright (C) 1999-2016, International Business Machines
+// Corporation and others.  All Rights Reserved.
+//
+// file name: norm2_nfc_data.h
+//
+// machine-generated by: icu/source/tools/gennorm2/n2builder.cpp
 
+
 #ifdef INCLUDED_FROM_NORMALIZER2_CPP
 
-static const UVersionInfo norm2_nfc_data_formatVersion={2,0,0,0};
-static const UVersionInfo norm2_nfc_data_dataVersion={9,0,0,0};
+static const UVersionInfo norm2_nfc_data_formatVersion={3,0,0,0};
+static const UVersionInfo norm2_nfc_data_dataVersion={0xa,0,0,0};
 
 static const int32_t norm2_nfc_data_indexes[Normalizer2Impl::IX_COUNT]={
-0x40,0x4bb8,0x880c,0x890c,0x890c,0x890c,0x890c,0x890c,0xc0,0x300,0x56e,0x14e7,0x1e2a,0xfe00,0x941,0
+0x50,0x4cc0,0x8918,0x8a18,0x8a18,0x8a18,0x8a18,0x8a18,0xc0,0x300,0xadc,0x29d0,0x3c56,0xfc00,0x1282,0x3b8c,
+0x3c24,0x3c56,0x300,0
 };
 
-static const uint16_t norm2_nfc_data_trieIndex[9652]={
+static const uint16_t norm2_nfc_data_trieIndex[9776]={
 0x2a8,0x2b0,0x2b8,0x2c0,0x2ce,0x2d6,0x2de,0x2e6,0x2ee,0x2f6,0x2fe,0x306,0x30e,0x316,0x31c,0x324,
 0x32c,0x334,0x2c7,0x2cf,0x339,0x341,0x2c7,0x2cf,0x349,0x351,0x359,0x361,0x369,0x371,0x379,0x381,
 0x389,0x391,0x399,0x3a1,0x3a9,0x3b1,0x3b9,0x3c1,0x2c7,0x2cf,0x2c7,0x2cf,0x3c8,0x3d0,0x3d8,0x3e0,
@@ -25,25 +26,25 @@
 0x3e4,0x3ec,0x3f2,0x3fa,0x2c7,0x2cf,0x402,0x40a,0x40e,0x416,0x41e,0x426,0x2c7,0x2cf,0x424,0x42c,
 0x431,0x438,0x43c,0x2c7,0x2c7,0x2c7,0x443,0x44b,0x2c7,0x453,0x45b,0x2c7,0x2c7,0x463,0x46b,0x2c7,
 0x2c7,0x473,0x47b,0x2c7,0x2c7,0x483,0x48b,0x2c7,0x2c7,0x463,0x492,0x2c7,0x49a,0x4a0,0x4a8,0x2c7,
-0x2c7,0x2c7,0x4af,0x2c7,0x2c7,0x4b5,0x4bd,0x2c7,0x2c7,0x4a0,0x4c4,0x2c7,0x2c7,0x2c7,0x4ca,0x2c7,
-0x2c7,0x4d2,0x4d9,0x2c7,0x2c7,0x4dc,0x4e3,0x2c7,0x4e6,0x4ed,0x4f5,0x4fd,0x505,0x50d,0x514,0x2c7,
-0x2c7,0x51b,0x2c7,0x2c7,0x522,0x2c7,0x2c7,0x2c7,0x929,0x2c7,0x2c7,0x931,0x2c7,0x937,0x93f,0x2c7,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x526,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x2c7,0x2c7,0x4af,0x2c7,0x2c7,0x4b5,0x4bd,0x2c7,0x2c7,0x4c3,0x4cb,0x2c7,0x2c7,0x2c7,0x4d1,0x2c7,
+0x2c7,0x4d9,0x4e0,0x2c7,0x2c7,0x4e3,0x4ea,0x2c7,0x4ed,0x4f4,0x4fc,0x504,0x50c,0x514,0x51b,0x2c7,
+0x2c7,0x522,0x2c7,0x2c7,0x529,0x2c7,0x2c7,0x2c7,0x93b,0x2c7,0x2c7,0x943,0x2c7,0x949,0x951,0x2c7,
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x52d,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
 0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x52e,0x52e,0x2c7,0x2c7,0x2c7,0x2c7,0x534,0x2c7,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x53c,0x2c7,0x2c7,0x2c7,0x53f,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x546,0x2c7,0x2c7,0x54e,0x2c7,0x556,0x2c7,0x2c7,0x55e,0x563,0x56b,0x571,0x2c7,0x577,0x2c7,0x57e,
-0x2c7,0x583,0x2c7,0x2c7,0x2c7,0x2c7,0x589,0x591,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x599,0x59e,
-0x5a6,0x5ae,0x5b6,0x5be,0x5c6,0x5ce,0x5d6,0x5de,0x5e6,0x5ee,0x5f6,0x5fe,0x606,0x60e,0x616,0x61e,
-0x626,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x62a,0x632,0x2c7,0x639,0x2c7,0x2c7,0x63d,0x644,0x649,0x2c7,
-0x651,0x659,0x661,0x669,0x671,0x679,0x2c7,0x681,0x2c7,0x687,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x535,0x535,0x2c7,0x2c7,0x2c7,0x2c7,0x53b,0x2c7,
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x543,0x2c7,0x2c7,0x2c7,0x546,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x54d,0x2c7,0x2c7,0x555,0x2c7,0x55d,0x2c7,0x2c7,0x565,0x56a,0x572,0x578,0x2c7,0x57e,0x2c7,0x585,
+0x2c7,0x58a,0x2c7,0x2c7,0x2c7,0x2c7,0x590,0x598,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x5a0,0x5a5,
+0x5ad,0x5b5,0x5bd,0x5c5,0x5cd,0x5d5,0x5dd,0x5e5,0x5ed,0x5f5,0x5fd,0x605,0x60d,0x615,0x61d,0x625,
+0x62d,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x631,0x639,0x2c7,0x640,0x2c7,0x2c7,0x644,0x64b,0x650,0x2c7,
+0x658,0x660,0x668,0x670,0x678,0x680,0x2c7,0x688,0x2c7,0x68e,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
 0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
 0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
 0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x68a,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x692,0x2c7,0x2c7,0x2c7,0x697,0x2c7,0x2c7,0x2c7,0x69f,
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x691,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x699,0x2c7,0x2c7,0x2c7,0x69e,0x2c7,0x2c7,0x2c7,0x6a6,
 0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x2c7,0x6a7,0x6ae,0x6b6,0x6be,0x6c6,0x6ce,0x6d6,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x2c7,0x6ae,0x6b5,0x6bd,0x6c5,0x6cd,0x6d5,0x6dd,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
 0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
 0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
 0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
@@ -102,32 +103,32 @@
 0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
 0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
 0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x2c7,0x2c7,0x2c7,0x6de,0x6e6,0x2c7,0x2c7,0x6ee,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x6f5,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x6fc,0x704,0x2c7,0x70a,0x70e,0x2c7,0x2c7,0x584,0x716,0x2c7,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x71a,0x722,0x725,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x48b,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,
-0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x94e,0x2c7,0x2c7,
-0x956,0x95d,0x2a8,0x964,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
+0x2c7,0x2c7,0x2c7,0x6e5,0x6ed,0x2c7,0x2c7,0x6f5,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x6fc,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x703,0x70b,0x2c7,0x711,0x715,0x2c7,0x2c7,0x58b,0x71d,0x2c7,
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x721,0x729,0x72c,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x48b,
+0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,
+0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,
+0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,
+0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,
+0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,
+0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,
+0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,
+0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,
+0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,
+0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,
+0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,
+0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,
+0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,
+0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,
+0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,
+0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,
+0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,
+0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,
+0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,
+0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,
+0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,
+0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x96d,0x959,0x95a,0x95b,0x95c,0x95d,0x95e,0x965,0x2c7,0x2c7,
+0x975,0x97c,0x2a8,0x983,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
 0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,
 0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
 0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
@@ -143,489 +144,496 @@
 0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
 0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
 0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x72d,0x735,0x73d,0x745,0x74d,0x755,0x75d,0x765,
-0x76d,0x775,0x77d,0x785,0x78d,0x795,0x79d,0x2c7,0x7a4,0x7ac,0x7b4,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x734,0x73c,0x744,0x74c,0x754,0x75c,0x764,0x76c,
+0x774,0x77c,0x784,0x78c,0x794,0x79c,0x7a4,0x2c7,0x7ab,0x7b3,0x7bb,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
 0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x2c7,0x7bc,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x2c7,0x7c3,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
 0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
 0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
 0xb20,0xb20,0xb38,0xb78,0xbb8,0xbf8,0xc38,0xc70,0xcb0,0xb1c,0xce4,0xb1c,0xd24,0xd64,0xda4,0xde4,
 0xe24,0xe64,0xea4,0xee4,0xb1c,0xb1c,0xf20,0xf60,0xf90,0xfc8,0xb1c,0x1008,0x1038,0x1078,0xb1c,0x1090,
-0x880,0x8b0,0x8ee,0x928,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x951,0x188,0x188,
-0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x96d,0x188,0x188,0x9a3,0x188,0x9e3,0xa1d,0x188,0x188,
+0x880,0x8b0,0x8ee,0x928,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x953,0x188,0x188,
+0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x96f,0x188,0x188,0x9a5,0x188,0x9e5,0xa1f,0x188,0x188,
 0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,
-0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0xa5d,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x7c0,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x7c8,0x2c7,0x2c7,0x2c7,0x7cb,0x2c7,0x2c7,0x2c7,0x2c7,
+0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0xa5f,
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x7c7,
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x7cf,0x2c7,0x2c7,0x2c7,0x7d2,0x2c7,0x2c7,0x2c7,0x2c7,
 0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
 0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x7d2,0x7d6,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x7de,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x7d9,0x7dd,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x7e5,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
 0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
 0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x6f5,0x697,0x7e0,0x7e8,0x2c7,0x2c7,0x7f0,0x7f7,0x2c7,0x584,0x2c7,0x2c7,0x7ff,0x2c7,0x2c7,0x802,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x808,0x2c7,0x463,0x80f,0x816,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x81e,0x2c7,0x2c7,0x822,0x82a,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x82f,0x837,0x2c7,0x2c7,0x697,
-0x2c7,0x2c7,0x2c7,0x83a,0x2c7,0x2c7,0x2c7,0x840,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x6fc,0x69e,0x7e7,0x7ef,0x2c7,0x2c7,0x7f7,0x7fe,0x2c7,0x58b,0x2c7,0x2c7,0x806,0x2c7,0x2c7,0x809,
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x80f,0x2c7,0x463,0x816,0x81d,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x825,0x2c7,0x2c7,0x829,0x831,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x836,0x83e,0x2c7,0x2c7,0x69e,
+0x2c7,0x2c7,0x2c7,0x841,0x2c7,0x2c7,0x2c7,0x847,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x535,0x848,0x2c7,0x84a,0x2c7,0x2c7,0x2c7,
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x69e,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x2c7,0x2c7,0x852,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x856,0x2c7,0x85c,0x2c7,0x2c7,0x2c7,
 0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x697,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
 0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x844,0x2c7,0x84a,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x2c7,0x2c7,0x2c7,0x862,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x86a,
+0x872,0x87a,0x880,0x888,0x2c7,0x2c7,0x2c7,0x890,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
 0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
 0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x2c7,0x850,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x858,0x860,0x868,
-0x86e,0x876,0x2c7,0x2c7,0x2c7,0x87e,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x898,0x8a0,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
 0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
 0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x2c7,0x2c7,0x2c7,0x886,0x88e,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
 0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x8a4,0x2c7,0x2c7,0x2c7,0x8ab,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
 0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
 0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x2c7,0x2c7,0x2c7,0x892,0x2c7,0x2c7,0x2c7,0x899,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x8b3,
+0x8bb,0x8c3,0x8cb,0x8d3,0x8db,0x8e3,0x8eb,0x8f3,0x8fb,0x903,0x90b,0x913,0x91b,0x923,0x92b,0x933,
 0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
 0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x8a1,0x8a9,0x8b1,
-0x8b9,0x8c1,0x8c9,0x8d1,0x8d9,0x8e1,0x8e9,0x8f1,0x8f9,0x901,0x909,0x911,0x919,0x921,0x2c7,0x2c7,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,
-0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2a7,0x2a7,0x2a7,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,2,4,6,0,
-0,8,0x28,0x2e,0x38,0x44,0x66,0x68,0x76,0x84,0xa2,0xa4,0xae,0xba,0xc0,0xd2,
-0xf2,0,0xf6,0x106,0x114,0x122,0x148,0x14c,0x158,0x15c,0x16e,0,0,0,0,0,
-0,0x17a,0x19a,0x1a0,0x1aa,0x1b6,0x1d8,0x1da,0x1e8,0x1f8,0x214,0x218,0x222,0x22e,0x234,0x246,
-0x266,0,0x26a,0x27a,0x288,0x298,0x2be,0x2c2,0x2d0,0x2d4,0x2e8,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x2f4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x941,0x944,0x56f,0x947,0x57a,0x57f,0x2fa,0x584,
-0x94a,0x94d,0x589,0x950,0x953,0x956,0x959,0x594,0,0x95c,0x95f,0x962,0x599,0x5a4,0x5ad,0,
-0x2fe,0x965,0x968,0x96b,0x5b2,0x96e,0,0,0x971,0x974,0x5bd,0x977,0x5c8,0x5cd,0x300,0x5d2,
-0x97a,0x97d,0x5d7,0x980,0x983,0x986,0x989,0x5e2,0,0x98c,0x98f,0x992,0x5e7,0x5f2,0x5fb,0,
-0x304,0x995,0x998,0x99b,0x600,0x99e,0,0x9a1,0x9a4,0x9a7,0x60b,0x616,0x9aa,0x9ad,0x9b0,0x9b3,
-0x9b6,0x9b9,0x9bc,0x9bf,0x9c2,0x9c5,0x9c8,0x9cb,0,0,0x621,0x628,0x9ce,0x9d1,0x9d4,0x9d7,
-0x9da,0x9dd,0x9e0,0x9e3,0x9e6,0x9e9,0x9ec,0x9ef,0x9f2,0x9f5,0x9f8,0x9fb,0x9fe,0xa01,0,0,
-0xa04,0xa07,0xa0a,0xa0d,0xa10,0xa13,0xa16,0xa19,0xa1c,0,0,0,0xa1f,0xa22,0xa25,0xa28,
-0,0xa2b,0xa2e,0xa31,0xa34,0xa37,0xa3a,0,0,0,0,0xa3d,0xa40,0xa43,0xa46,0xa49,
-0xa4c,0,0,0,0x62f,0x636,0xa4f,0xa52,0xa55,0xa58,0,0,0xa5b,0xa5e,0xa61,0xa64,
-0xa67,0xa6a,0x63d,0x642,0xa6d,0xa70,0xa73,0xa76,0x647,0x64c,0xa79,0xa7c,0xa7f,0xa82,0,0,
-0x651,0x656,0x65b,0x660,0xa85,0xa88,0xa8b,0xa8e,0xa91,0xa94,0xa97,0xa9a,0xa9d,0xaa0,0xaa3,0xaa6,
-0xaa9,0xaac,0xaaf,0xab2,0xab5,0xab8,0xabb,0x306,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x665,0x672,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0x67f,0x68c,0,0,0,0,0,0,0x308,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0xabe,0xac1,0xac4,
-0xac7,0xaca,0xacd,0xad0,0xad3,0xad7,0xadc,0xae1,0xae6,0xaeb,0xaf0,0xaf5,0xafa,0,0xaff,0xb04,
-0xb09,0xb0e,0xb12,0xb15,0,0,0xb18,0xb1b,0xb1e,0xb21,0x699,0x69e,0xb25,0xb2a,0xb2e,0xb31,
-0xb34,0,0,0,0xb37,0xb3a,0,0,0xb3d,0xb40,0xb44,0xb49,0xb4d,0xb50,0xb53,0xb56,
-0xb59,0xb5c,0xb5f,0xb62,0xb65,0xb68,0xb6b,0xb6e,0xb71,0xb74,0xb77,0xb7a,0xb7d,0xb80,0xb83,0xb86,
-0xb89,0xb8c,0xb8f,0xb92,0xb95,0xb98,0xb9b,0xb9e,0xba1,0xba4,0xba7,0xbaa,0,0,0xbad,0xbb0,
-0,0,0,0,0,0,0x6a3,0x6a8,0x6ad,0x6b2,0xbb4,0xbb9,0xbbe,0xbc3,0x6b7,0x6bc,
-0xbc8,0xbcd,0xbd1,0xbd4,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0x30a,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xfee6,0xfee6,0xfee6,0xfee6,0xfee6,0xffe6,0xfee6,0xfee6,0xfee6,0xfee6,0xfee6,0xfee6,
-0xfee6,0xffe6,0xffe6,0xfee6,0xffe6,0xfee6,0xffe6,0xfee6,0xfee6,0xffe8,0xffdc,0xffdc,0xffdc,0xffdc,0xffe8,0xfed8,
-0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffca,0xffca,0xfedc,0xfedc,0xfedc,0xfedc,0xfeca,0xfeca,0xffdc,0xffdc,0xffdc,
-0xffdc,0xfedc,0xfedc,0xffdc,0xfedc,0xfedc,0xffdc,0xffdc,0xff01,0xff01,0xff01,0xff01,0xfe01,0xffdc,0xffdc,0xffdc,
-0xffdc,0xffe6,0xffe6,0xffe6,0x14e8,0x14eb,0xfee6,0x14ee,0x14f1,0xfef0,0xffe6,0xffdc,0xffdc,0xffdc,0xffe6,0xffe6,
-0xffe6,0xffdc,0xffdc,0,0xffe6,0xffe6,0xffe6,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0xffe8,0xffdc,0xffdc,0xffe6,
-0xffe9,0xffea,0xffea,0xffe9,0xffea,0xffea,0xffe9,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,
-0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,0x14f4,0,0,0,0,0,0,0,
-0,0,0x14f6,0,0,0,0,0,0,0xbd7,0xbda,0x14f8,0xbdd,0xbe0,0xbe3,0,
-0xbe6,0,0xbe9,0xbec,0xbf0,0x30c,0,0,0,0x31a,0,0x322,0,0x32c,0,0,
-0,0,0,0x33a,0,0x342,0,0,0,0x344,0,0,0,0x350,0xbf4,0xbf7,
-0x6c1,0xbfa,0x6c6,0xbfd,0xc01,0x35a,0,0,0,0x36a,0,0x372,0,0x37e,0,0,
-0,0,0,0x38e,0,0x396,0,0,0,0x39a,0,0,0,0x3aa,0x6cb,0x6d4,
-0xc05,0xc08,0x6dd,0,0,0,0x3b6,0xc0b,0xc0e,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xc11,0xc14,0,0xc17,0,0,0x3ba,0xc1a,0,0,0,0,
-0xc1d,0xc20,0xc23,0,0x3bc,0,0,0x3c0,0,0x3c2,0x3c8,0x3cc,0x3ce,0xc26,0x3d6,0,
-0,0,0x3d8,0,0,0,0,0x3da,0,0,0,0x3e2,0,0,0,0x3e4,
-0,0x3e6,0,0,0x3e8,0,0,0x3ec,0,0x3ee,0x3f4,0x3f8,0x3fa,0xc29,0x402,0,
-0,0,0x404,0,0,0,0,0x406,0,0,0,0x40e,0,0,0,0x410,
-0,0x412,0,0,0xc2c,0xc2f,0,0xc32,0,0,0x414,0xc35,0,0,0,0,
-0xc38,0xc3b,0xc3e,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x416,0x418,0xc41,0xc44,0,0,0,0,
-0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xc47,0xc4a,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xc4d,0xc50,0xc53,0xc56,0,0,0xc59,0xc5c,0x41a,0x41c,0xc5f,0xc62,
-0xc65,0xc68,0xc6b,0xc6e,0,0,0xc71,0xc74,0xc77,0xc7a,0xc7d,0xc80,0x41e,0x420,0xc83,0xc86,
-0xc89,0xc8c,0xc8f,0xc92,0xc95,0xc98,0xc9b,0xc9e,0xca1,0xca4,0,0,0xca7,0xcaa,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0xffdc,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffe6,0xffde,0xffdc,0xffe6,0xffe6,0xffe6,0xffe6,
-0xffe6,0xffe6,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffde,0xffe4,0xffe6,
-0xff0a,0xff0b,0xff0c,0xff0d,0xff0e,0xff0f,0xff10,0xff11,0xff12,0xff13,0xff13,0xff14,0xff15,0xff16,0,0xff17,
-0,0xff18,0xff19,0,0xffe6,0xffdc,0,0xff12,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xff1e,0xff1f,0xff20,0,0,0,0,0,
-0,0,0xcad,0xcb0,0xcb3,0xcb6,0xcb9,0x422,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x428,0,0x42a,0xff1b,0xff1c,0xff1d,0xff1e,0xff1f,0xff20,0xff21,0xff22,0xfee6,0xfee6,0xfedc,0xffdc,0xffe6,
-0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffdc,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xff23,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xcbc,0x42c,0xcbf,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0x42e,0xcc2,0,0x430,0xffe6,0xffe6,
-0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6,0,0,0xffe6,
-0xffe6,0,0xffdc,0xffe6,0xffe6,0xffdc,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0xff24,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xffe6,0xffdc,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffdc,
-0xffdc,0xffdc,0xffe6,0xffdc,0xffdc,0xffe6,0xffdc,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6,0xffdc,0xffe6,0xffdc,0xffe6,
-0xffdc,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,
-0xffe6,0xffe6,0xffdc,0xffe6,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0,0xffe6,
-0xffe6,0xffe6,0xffe6,0xffe6,0,0xffe6,0xffe6,0xffe6,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0xffdc,0xffdc,0xffdc,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0xffdc,
-0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffe6,0xffdc,0xffdc,0xffdc,0xff1b,0xff1c,0xff1d,0xffe6,
-0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffdc,0xffdc,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,
-0,0,0,0,0x432,0xcc5,0,0,0,0,0,0,0x434,0xcc8,0,0x436,
-0xccb,0,0,0,0,0,0,0,0xfe07,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0xff09,0,0,0,0xffe6,0xffdc,0xffe6,
-0xffe6,0,0,0,0x14fa,0x14fd,0x1500,0x1503,0x1506,0x1509,0x150c,0x150f,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xff07,0,0xfe00,0,0,0,0,0,
-0,0,0,0x438,0,0,0,0xcce,0xcd1,0xff09,0,0,0,0,0,0,
-0,0,0,0xfe00,0,0,0,0,0x1512,0x1515,0,0x1518,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x151b,
-0,0,0x151e,0,0,0,0,0,0xff07,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0xff09,0,0,0,0,0,0,
-0,0,0,0,0,0x1521,0x1524,0x1527,0,0,0x152a,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xff07,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0xff09,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x43c,
-0xcd4,0,0,0xcd7,0xcda,0xff09,0,0,0,0,0,0,0,0,0xfe00,0xfe00,
-0,0,0,0,0x152d,0x1530,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0x442,0,0xcdd,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xfe00,0,
-0,0,0,0,0,0,0x444,0x448,0,0,0xce0,0xce3,0xce6,0xff09,0,0,
-0,0,0,0,0,0,0,0xfe00,0,0,0,0,0,0,0,0,
-0,0,0x44a,0,0xce9,0,0,0,0,0xff09,0,0,0,0,0,0,
-0,0xff54,0xfe5b,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xff07,0,0,0x44c,0xcec,0,0xfe00,0,0,0,0x44e,0xcef,0xcf2,0,0x6e2,0xcf6,
-0,0xff09,0,0,0,0,0,0,0,0xfe00,0xfe00,0,0,0,0,0,
-0,0,0,0,0,0,0x454,0x458,0,0,0xcfa,0xcfd,0xd00,0xff09,0,0,
-0,0,0,0,0,0,0,0xfe00,0,0,0,0,0,0,0,0,
-0,0,0xfe09,0,0,0,0,0xfe00,0,0,0,0,0,0,0,0,
-0,0x45a,0xd03,0,0x6e7,0xd07,0xd0b,0xfe00,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xff67,0xff67,0xff09,0,0,0,0,0,0,0,0,0,0xff6b,0xff6b,0xff6b,0xff6b,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xff76,0xff76,0,0,0,0,0,0,
-0,0,0,0,0xff7a,0xff7a,0xff7a,0xff7a,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xffdc,0xffdc,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0xffdc,0,0xffdc,0,0xffd8,0,0,
-0,0,0,0,0,0,0,0x1533,0,0,0,0,0,0,0,0,
-0,0x1536,0,0,0,0,0x1539,0,0,0,0,0x153c,0,0,0,0,
-0x153f,0,0,0,0,0,0,0,0,0,0,0,0,0x1542,0,0,
-0,0,0,0,0,0xff81,0xff82,0x1546,0xff84,0x154a,0x154d,0,0x1550,0,0xff82,0xff82,
-0xff82,0xff82,0,0,0xff82,0x1554,0xffe6,0xffe6,0xff09,0,0xffe6,0xffe6,0,0,0,0,
-0,0,0,0,0,0,0,0x1557,0,0,0,0,0,0,0,0,
-0,0x155a,0,0,0,0,0x155d,0,0,0,0,0x1560,0,0,0,0,
-0x1563,0,0,0,0,0,0,0,0,0,0,0,0,0x1566,0,0,
-0,0,0,0,0,0,0xffdc,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0x460,0xd0e,0,0,0,0,0,0,0,0xfe00,0,0,0,0,0,
-0,0,0,0xff07,0,0xff09,0xff09,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xffdc,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0xff09,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0xff09,0,0,0,0,0,0,0,0,0,0,0xffe6,0,0,
-0,0,0,0,0,0,0,0,0,0xffe4,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xffde,0xffe6,0xffdc,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xffe6,
-0xffdc,0,0,0,0,0,0,0,0xff09,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,
-0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0xffdc,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffdc,0xffdc,
-0xffdc,0xffdc,0xffdc,0xffe6,0xffe6,0xffdc,0,0,0,0,0,0,0,0x462,0xd11,0x464,
-0xd14,0x466,0xd17,0x468,0xd1a,0x46a,0xd1d,0,0,0x46c,0xd20,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xff07,0xfe00,0,0,0,0,0x46e,0xd23,0x470,0xd26,0x472,0x474,0xd29,0xd2c,0x476,0xd2f,
-0xff09,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xffe6,
-0xffdc,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0xff09,0xff09,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xff07,0,
-0,0,0,0,0,0,0,0,0,0,0xff09,0xff09,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0xff07,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xffe6,0xffe6,0xffe6,0,0xff01,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0xffe6,
-0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0,0xff01,0xff01,0xff01,0xff01,0xff01,0xff01,0xff01,0,0,0,
-0,0xffdc,0,0,0,0,0,0,0xffe6,0,0,0,0xffe6,0xffe6,0,0,
-0,0,0,0,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6,
-0xffe6,0xffea,0xffd6,0xffdc,0xffca,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,
-0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,
-0,0,0,0xffe6,0xffe9,0xffdc,0xffe6,0xffdc,0xd32,0xd35,0xd38,0xd3b,0xd3e,0xd41,0xd44,0xd47,
-0xd4b,0xd50,0xd54,0xd57,0xd5a,0xd5d,0xd60,0xd63,0xd66,0xd69,0xd6c,0xd6f,0xd73,0xd78,0xd7d,0xd82,
-0xd86,0xd89,0xd8c,0xd8f,0xd93,0xd98,0xd9c,0xd9f,0xda2,0xda5,0xda8,0xdab,0xdae,0xdb1,0xdb4,0xdb7,
-0xdba,0xdbd,0xdc0,0xdc3,0xdc6,0xdc9,0xdcd,0xdd2,0xdd6,0xdd9,0xddc,0xddf,0xde2,0xde5,0x6ec,0x6f1,
-0xde9,0xdee,0xdf2,0xdf5,0xdf8,0xdfb,0xdfe,0xe01,0xe04,0xe07,0xe0a,0xe0d,0xe10,0xe13,0xe16,0xe19,
-0xe1c,0xe1f,0xe22,0xe25,0xe29,0xe2e,0xe33,0xe38,0xe3d,0xe42,0xe47,0xe4c,0xe50,0xe53,0xe56,0xe59,
-0xe5c,0xe5f,0x6f6,0x6fb,0xe63,0xe68,0xe6c,0xe6f,0xe72,0xe75,0x700,0x705,0xe79,0xe7e,0xe83,0xe88,
-0xe8d,0xe92,0xe96,0xe99,0xe9c,0xe9f,0xea2,0xea5,0xea8,0xeab,0xeae,0xeb1,0xeb4,0xeb7,0xeba,0xebd,
-0xec1,0xec6,0xecb,0xed0,0xed4,0xed7,0xeda,0xedd,0xee0,0xee3,0xee6,0xee9,0xeec,0xeef,0xef2,0xef5,
-0xef8,0xefb,0xefe,0xf01,0xf04,0xf07,0xf0a,0xf0d,0xf10,0xf13,0xf16,0xf19,0xf1c,0xf1f,0xf22,0xf25,
-0xf28,0xf2b,0,0xf2e,0,0,0,0,0x70a,0x711,0xf31,0xf34,0xf38,0xf3d,0xf42,0xf47,
-0xf4c,0xf51,0xf56,0xf5b,0xf60,0xf65,0xf6a,0xf6f,0xf74,0xf79,0xf7e,0xf83,0xf88,0xf8d,0xf92,0xf97,
-0x718,0x71d,0xf9b,0xf9e,0xfa1,0xfa4,0xfa8,0xfad,0xfb2,0xfb7,0xfbc,0xfc1,0xfc6,0xfcb,0xfd0,0xfd5,
-0xfd9,0xfdc,0xfdf,0xfe2,0x722,0x727,0xfe5,0xfe8,0xfec,0xff1,0xff6,0xffb,0x1000,0x1005,0x100a,0x100f,
-0x1014,0x1019,0x101e,0x1023,0x1028,0x102d,0x1032,0x1037,0x103c,0x1041,0x1046,0x104b,0x104f,0x1052,0x1055,0x1058,
-0x105c,0x1061,0x1066,0x106b,0x1070,0x1075,0x107a,0x107f,0x1084,0x1089,0x108d,0x1090,0x1093,0x1096,0x1099,0x109c,
-0x109f,0x10a2,0,0,0,0,0,0,0x72c,0x737,0x743,0x74a,0x751,0x758,0x75f,0x766,
-0x76c,0x777,0x783,0x78a,0x791,0x798,0x79f,0x7a6,0x7ac,0x7b3,0x10a6,0x10ab,0x10b0,0x10b5,0,0,
-0x7ba,0x7c1,0x10ba,0x10bf,0x10c4,0x10c9,0,0,0x7c8,0x7d3,0x7df,0x7e6,0x7ed,0x7f4,0x7fb,0x802,
-0x808,0x813,0x81f,0x826,0x82d,0x834,0x83b,0x842,0x848,0x851,0x10ce,0x10d3,0x10d8,0x10dd,0x10e2,0x10e7,
-0x85a,0x863,0x10ec,0x10f1,0x10f6,0x10fb,0x1100,0x1105,0x86c,0x873,0x110a,0x110f,0x1114,0x1119,0,0,
-0x87a,0x881,0x111e,0x1123,0x1128,0x112d,0,0,0x888,0x891,0x1132,0x1137,0x113c,0x1141,0x1146,0x114b,
-0,0x89a,0,0x1150,0,0x1155,0,0x115a,0x8a3,0x8ae,0x8ba,0x8c1,0x8c8,0x8cf,0x8d6,0x8dd,
-0x8e3,0x8ee,0x8fa,0x901,0x908,0x90f,0x916,0x91d,0x923,0x156a,0x115e,0x156e,0x928,0x1572,0x1161,0x1576,
-0x1164,0x157a,0x1167,0x157e,0x92d,0x1582,0,0,0x116b,0x1170,0x1177,0x117f,0x1187,0x118f,0x1197,0x119f,
-0x11a5,0x11aa,0x11b1,0x11b9,0x11c1,0x11c9,0x11d1,0x11d9,0x11df,0x11e4,0x11eb,0x11f3,0x11fb,0x1203,0x120b,0x1213,
-0x1219,0x121e,0x1225,0x122d,0x1235,0x123d,0x1245,0x124d,0x1253,0x1258,0x125f,0x1267,0x126f,0x1277,0x127f,0x1287,
-0x128d,0x1292,0x1299,0x12a1,0x12a9,0x12b1,0x12b9,0x12c1,0x12c6,0x12c9,0x12cd,0x12d1,0x12d5,0,0x932,0x12da,
-0x12de,0x12e1,0x12e4,0x1586,0x12e7,0,0x1589,0x478,0,0x12ea,0x12ee,0x12f2,0x12f6,0,0x937,0x12fb,
-0x12ff,0x158c,0x1302,0x1590,0x1305,0x1308,0x130b,0x130e,0x1311,0x1314,0x1318,0x1595,0,0,0x131c,0x1320,
-0x1324,0x1327,0x132a,0x159a,0,0x132d,0x1330,0x1333,0x1336,0x1339,0x133d,0x159f,0x1341,0x1344,0x1347,0x134b,
-0x134f,0x1352,0x1355,0x15a4,0x1358,0x135b,0x15a8,0x15ab,0,0,0x135f,0x1363,0x1367,0,0x93c,0x136c,
-0x1370,0x15ae,0x1373,0x15b2,0x1376,0x15b5,0x47e,0,0xfdc1,0xfdc1,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xff01,0xff01,0xffe6,0xffe6,0xffe6,0xffe6,
-0xff01,0xff01,0xff01,0xffe6,0xffe6,0,0,0,0,0xffe6,0,0,0,0xff01,0xff01,0xffe6,
-0xffdc,0xffe6,0xff01,0xff01,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0x15b7,0,0,0,0x15b9,0x15bc,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x484,0,0x486,0,0x488,0,0,0,0,0,0x1379,0x137c,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x137f,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0x1382,0x1385,0x1388,0x48a,0,0x48c,0,0x48e,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0x490,0x138b,0,0,0,0x492,0x138e,0,0x494,
-0x1391,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0x496,0x1394,0x498,0x1397,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0x49a,0,0,0,0,0x139a,0,0x49c,0x139d,0x49e,0,0x13a0,0x4a0,0x13a3,0,0,
-0,0x4a2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x13a6,0x4a4,0x13a9,0,0x4a6,0x4a8,0,0,0,0,0,0,
-0,0x13ac,0x13af,0x13b2,0x13b5,0x13b8,0x4aa,0x4ac,0x13bb,0x13be,0x4ae,0x4b0,0x13c1,0x13c4,0x4b2,0x4b4,
-0x4b6,0x4b8,0,0,0x13c7,0x13ca,0x4ba,0x4bc,0x13cd,0x13d0,0x4be,0x4c0,0x13d3,0x13d6,0,0,
-0,0,0,0,0,0x4c2,0x4c4,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0x4c6,0,0,0,0,0,0x4c8,0x4ca,0,0x4cc,
-0x13d9,0x13dc,0x13df,0x13e2,0,0,0x4ce,0x4d0,0x4d2,0x4d4,0,0,0,0,0,0,
-0,0,0,0,0x13e5,0x13e8,0x13eb,0x13ee,0,0,0,0,0,0,0x13f1,0x13f4,
-0x13f7,0x13fa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0x15bf,0x15c1,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x15c3,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0xff09,0xffe6,0xffe6,0xffe6,0xffe6,
-0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,
-0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,
-0,0,0,0,0,0,0xffda,0xffe4,0xffe8,0xffde,0xffe0,0xffe0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x4d6,0,
-0,0,0,0x4d8,0x13fd,0x4da,0x1400,0x4dc,0x1403,0x4de,0x1406,0x4e0,0x1409,0x4e2,0x140c,0x4e4,
-0x140f,0x4e6,0x1412,0x4e8,0x1415,0x4ea,0x1418,0x4ec,0x141b,0x4ee,0x141e,0,0x4f0,0x1421,0x4f2,0x1424,
-0x4f4,0x1427,0,0,0,0,0,0x4f6,0x142a,0x142d,0x4fa,0x1430,0x1433,0x4fe,0x1436,0x1439,
-0x502,0x143c,0x143f,0x506,0x1442,0x1445,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x1448,0,0,0,
-0,0xfe08,0xfe08,0,0,0x50a,0x144b,0,0,0,0,0,0,0,0x50c,0,
-0,0,0,0x50e,0x144e,0x510,0x1451,0x512,0x1454,0x514,0x1457,0x516,0x145a,0x518,0x145d,0x51a,
-0x1460,0x51c,0x1463,0x51e,0x1466,0x520,0x1469,0x522,0x146c,0x524,0x146f,0,0x526,0x1472,0x528,0x1475,
-0x52a,0x1478,0,0,0,0,0,0x52c,0x147b,0x147e,0x530,0x1481,0x1484,0x534,0x1487,0x148a,
-0x538,0x148d,0x1490,0x53c,0x1493,0x1496,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0x540,0x542,0x544,0x546,0,0x1499,0,0,0x149c,
-0x149f,0x14a2,0x14a5,0,0,0x548,0x14a8,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0xffe6,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,
-0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0xffe6,0xffe6,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xffe6,0xffe6,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0xff09,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0xff09,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,
-0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0xffdc,0xffdc,0xffdc,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0xff09,0,0,0,0,
-0,0,0,0,0,0,0,0,0xff09,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xffe6,0,0xffe6,0xffe6,0xffdc,0,0,0xffe6,
-0xffe6,0,0,0,0,0,0xffe6,0xffe6,0,0xffe6,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0xff09,0,0,0,0,0,
-0,0,0,0,0x15c6,0x15c8,0x15ca,0x15cc,0x15ce,0x15d0,0x15d2,0x15d4,0x15d4,0x15d6,0x15d8,0x15da,
-0x15dc,0x15de,0x15e0,0x15e2,0x15e4,0x15e6,0x15e8,0x15ea,0x15ec,0x15ee,0x15f0,0x15f2,0x15f4,0x15f6,0x15f8,0x15fa,
-0x15fc,0x15fe,0x1600,0x1602,0x1604,0x1606,0x1608,0x160a,0x160c,0x160e,0x1610,0x1612,0x1614,0x1616,0x1618,0x161a,
-0x161c,0x161e,0x1620,0x1622,0x1624,0x1626,0x1628,0x162a,0x162c,0x162e,0x1630,0x1632,0x1634,0x1636,0x1638,0x163a,
-0x163c,0x163e,0x1640,0x1642,0x1644,0x1646,0x1648,0x164a,0x164c,0x164e,0x1650,0x1652,0x1654,0x1656,0x1658,0x165a,
-0x165c,0x165e,0x1660,0x1662,0x1664,0x1666,0x1668,0x166a,0x166c,0x166e,0x1670,0x1672,0x1674,0x1676,0x1678,0x167a,
-0x15ec,0x167c,0x167e,0x1680,0x1682,0x1684,0x1686,0x1688,0x168a,0x168c,0x168e,0x1690,0x1692,0x1694,0x1696,0x1698,
-0x169a,0x169c,0x169e,0x16a0,0x16a2,0x16a4,0x16a6,0x16a8,0x16aa,0x16ac,0x16ae,0x16b0,0x16b2,0x16b4,0x16b6,0x16b8,
-0x16ba,0x16bc,0x16be,0x16c0,0x16c2,0x16c4,0x16c6,0x16c8,0x16ca,0x16cc,0x16ce,0x16d0,0x16d2,0x16d4,0x16d6,0x16d8,
-0x16da,0x16dc,0x16de,0x16e0,0x16e2,0x16e4,0x16e6,0x16e8,0x16ea,0x16ec,0x16ee,0x16f0,0x16f2,0x16f4,0x16f6,0x16f8,
-0x16fa,0x16fc,0x16fe,0x1700,0x1702,0x16a0,0x1704,0x1706,0x1708,0x170a,0x170c,0x170e,0x1710,0x1712,0x1680,0x1714,
-0x1716,0x1718,0x171a,0x171c,0x171e,0x1720,0x1722,0x1724,0x1726,0x1728,0x172a,0x172c,0x172e,0x1730,0x1732,0x1734,
-0x1736,0x1738,0x173a,0x15ec,0x173c,0x173e,0x1740,0x1742,0x1744,0x1746,0x1748,0x174a,0x174c,0x174e,0x1750,0x1752,
-0x1754,0x1756,0x1758,0x175a,0x175c,0x175e,0x1760,0x1762,0x1764,0x1766,0x1768,0x176a,0x176c,0x176e,0x1770,0x1684,
-0x1772,0x1774,0x1776,0x1778,0x177a,0x177c,0x177e,0x1780,0x1782,0x1784,0x1786,0x1788,0x178a,0x178c,0x178e,0x1790,
-0x1792,0x1794,0x1796,0x1798,0x179a,0x179c,0x179e,0x17a0,0x17a2,0x17a4,0x17a6,0x17a8,0x17aa,0x17ac,0x17ae,0x17b0,
-0x17b2,0x17b4,0x17b6,0x17b8,0x17ba,0x17bc,0x17be,0x17c0,0x17c2,0x17c4,0x17c6,0x17c8,0x17ca,0x17cc,0x17ce,0x17d0,
-0x17d2,0x17d4,0,0,0x17d6,0,0x17d8,0,0,0x17da,0x17dc,0x17de,0x17e0,0x17e2,0x17e4,0x17e6,
-0x17e8,0x17ea,0x17ec,0,0x17ee,0,0x17f0,0,0,0x17f2,0x17f4,0,0,0,0x17f6,0x17f8,
-0x17fa,0x17fc,0x17fe,0x1800,0x1802,0x1804,0x1806,0x1808,0x180a,0x180c,0x180e,0x1810,0x1812,0x1814,0x1816,0x1818,
-0x181a,0x181c,0x181e,0x1820,0x1822,0x1824,0x1826,0x1828,0x182a,0x182c,0x182e,0x1830,0x1832,0x1834,0x1836,0x1838,
-0x183a,0x183c,0x183e,0x1840,0x1842,0x1844,0x1846,0x1848,0x184a,0x184c,0x184e,0x16ee,0x1850,0x1852,0x1854,0x1856,
-0x1858,0x185a,0x185a,0x185c,0x185e,0x1860,0x1862,0x1864,0x1866,0x1868,0x186a,0x17f2,0x186c,0x186e,0x1870,0x1872,
-0x1874,0x1877,0,0,0x1879,0x187b,0x187d,0x187f,0x1881,0x1883,0x1885,0x1887,0x180e,0x1889,0x188b,0x188d,
-0x17d6,0x188f,0x1891,0x1893,0x1895,0x1897,0x1899,0x189b,0x189d,0x189f,0x18a1,0x18a3,0x18a5,0x1820,0x18a7,0x1822,
-0x18a9,0x18ab,0x18ad,0x18af,0x18b1,0x17d8,0x1616,0x18b3,0x18b5,0x18b7,0x16a2,0x1750,0x18b9,0x18bb,0x1830,0x18bd,
-0x1832,0x18bf,0x18c1,0x18c3,0x17dc,0x18c5,0x18c7,0x18c9,0x18cb,0x18cd,0x17de,0x18cf,0x18d1,0x18d3,0x18d5,0x18d7,
-0x18d9,0x184e,0x18db,0x18dd,0x16ee,0x18df,0x1856,0x18e1,0x18e3,0x18e5,0x18e7,0x18e9,0x1860,0x18eb,0x17f0,0x18ed,
-0x1862,0x167c,0x18ef,0x1864,0x18f1,0x1868,0x18f3,0x18f5,0x18f7,0x18f9,0x18fb,0x186c,0x17e8,0x18fd,0x186e,0x18ff,
-0x1870,0x1901,0x15d4,0x1903,0x1906,0x1909,0x190c,0x190e,0x1910,0x1912,0x1915,0x1918,0x191b,0x191d,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0x191f,0xff1a,0x1922,
-0,0,0,0,0,0,0,0,0,0,0x1925,0x1928,0x192c,0x1931,0x1935,0x1938,
-0x193b,0x193e,0x1941,0x1944,0x1947,0x194a,0x194d,0,0x1950,0x1953,0x1956,0x1959,0x195c,0,0x195f,0,
-0x1962,0x1965,0,0x1968,0x196b,0,0x196e,0x1971,0x1974,0x1977,0x197a,0x197d,0x1980,0x1983,0x1986,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0xffe6,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0xffdc,0,0,
-0xffdc,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xffdc,0,0xffe6,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xffe6,0xff01,0xffdc,0,0,0,0,0xff09,0,0,0,0,0,0xffe6,0xffdc,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0x54a,0x14ab,0x54d,0x14b0,0,0,0,
-0,0,0,0,0,0x550,0,0,0,0,0,0x14b5,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0xff09,0xfe07,0,0,0,0,0,
-0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0xfe00,0,0,0,0,0,0,0x14ba,0x14bf,0,0x553,0x556,0xff09,
-0xff09,0,0,0,0,0,0,0,0,0,0,0,0xff09,0,0,0,
-0,0,0,0,0,0,0xff07,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0xff09,0xff07,0,
-0,0,0,0,0,0,0,0,0,0xff07,0xff09,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0x559,0,0,0,0x14c4,0x14c9,0xff09,0,0,0,0,0,0,
-0,0,0,0xfe00,0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6,
-0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0xff09,0,0,0,0xff07,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xfe00,0,0,0,0,0,0,0,
-0,0x55f,0xfe00,0x14ce,0x14d3,0xfe00,0x14d8,0,0,0,0xff09,0xff07,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0xfe00,0,0,0,0,
-0,0,0,0,0x568,0x56b,0x14dd,0x14e2,0,0,0,0xff09,0xff07,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xff09,0xff07,
-0,0,0,0,0,0,0,0,0,0,0,0xff09,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0xff01,0xff01,0xff01,0xff01,0xff01,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xff01,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x1989,0x198e,
-0x1998,0x19a4,0x19b0,0x19bc,0x19c8,0xffd8,0xffd8,0xff01,0xff01,0xff01,0,0,0,0xffe2,0xffd8,0xffd8,
-0xffd8,0xffd8,0xffd8,0,0,0,0,0,0,0,0,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,
-0xffdc,0xffdc,0xffdc,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffdc,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0x19cf,0x19d4,0x19de,0x19ea,0x19f6,0x1a02,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,
-0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,
-0xffe6,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0xffe6,0xffe6,0,0xffe6,0xffe6,
-0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0,
-0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xff07,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0x1a09,0x1a0b,0x1a0d,0x1a0f,0x1a12,0x1802,0x1a14,0x1a16,0x1a18,0x1a1a,0x1804,0x1a1c,
-0x1a1e,0x1a20,0x1806,0x1a23,0x1a25,0x1a27,0x1a29,0x1a2c,0x1a2e,0x1a30,0x1a32,0x1a35,0x1a37,0x1a39,0x1a3b,0x187b,
-0x1a3d,0x1a40,0x1a42,0x1a44,0x1a46,0x1a48,0x1a4a,0x1a4c,0x1a4e,0x1885,0x1808,0x180a,0x1887,0x1a50,0x1a52,0x1688,
-0x1a54,0x180c,0x1a56,0x1a58,0x1a5a,0x1a5c,0x1a5c,0x1a5c,0x1a5e,0x1a61,0x1a63,0x1a65,0x1a67,0x1a6a,0x1a6c,0x1a6e,
-0x1a70,0x1a72,0x1a74,0x1a76,0x1a78,0x1a7a,0x1a7c,0x1a7e,0x1a80,0x1a82,0x1a82,0x188b,0x1a84,0x1a86,0x1a88,0x1a8a,
-0x1810,0x1a8c,0x1a8e,0x1a90,0x17ba,0x1a92,0x1a94,0x1a96,0x1a98,0x1a9a,0x1a9c,0x1a9e,0x1aa0,0x1aa2,0x1aa5,0x1aa7,
-0x1aa9,0x1aab,0x1aad,0x1aaf,0x1ab1,0x1ab4,0x1ab7,0x1ab9,0x1abb,0x1abd,0x1abf,0x1ac1,0x1ac3,0x1ac5,0x1ac7,0x1ac7,
-0x1ac9,0x1acc,0x1ace,0x1680,0x1ad0,0x1ad2,0x1ad5,0x1ad7,0x1ad9,0x1adb,0x1add,0x1adf,0x181a,0x1ae1,0x1ae3,0x1ae5,
-0x1ae8,0x1aea,0x1aed,0x1aef,0x1af1,0x1af3,0x1af5,0x1af7,0x1af9,0x1afb,0x1afd,0x1aff,0x1b01,0x1b03,0x1b06,0x1b08,
-0x1b0a,0x1b0c,0x1614,0x1b0e,0x1b11,0x1b13,0x1b13,0x1b16,0x1b18,0x1b18,0x1b1a,0x1b1c,0x1b1f,0x1b22,0x1b24,0x1b26,
-0x1b28,0x1b2a,0x1b2c,0x1b2e,0x1b30,0x1b32,0x1b34,0x181c,0x1b36,0x1b39,0x1b3b,0x1b3d,0x18a3,0x1b3d,0x1b3f,0x1820,
-0x1b41,0x1b43,0x1b45,0x1b47,0x1822,0x15de,0x1b49,0x1b4b,0x1b4d,0x1b4f,0x1b51,0x1b53,0x1b55,0x1b58,0x1b5a,0x1b5c,
-0x1b5e,0x1b60,0x1b62,0x1b65,0x1b67,0x1b69,0x1b6b,0x1b6d,0x1b6f,0x1b71,0x1b73,0x1b75,0x1824,0x1b77,0x1b79,0x1b7c,
-0x1b7e,0x1b80,0x1b82,0x1828,0x1b84,0x1b86,0x1b88,0x1b8a,0x1b8c,0x1b8e,0x1b90,0x1b92,0x1616,0x18b3,0x1b94,0x1b96,
-0x1b98,0x1b9a,0x1b9d,0x1b9f,0x1ba1,0x1ba3,0x182a,0x1ba5,0x1ba8,0x1baa,0x1bac,0x190c,0x1bae,0x1bb0,0x1bb2,0x1bb4,
-0x1bb6,0x1bb9,0x1bbb,0x1bbd,0x1bbf,0x1bc2,0x1bc4,0x1bc6,0x1bc8,0x16a2,0x1bca,0x1bcc,0x1bcf,0x1bd2,0x1bd5,0x1bd7,
-0x1bda,0x1bdc,0x1bde,0x1be0,0x1be2,0x182c,0x1750,0x1be4,0x1be6,0x1be8,0x1bea,0x1bed,0x1bef,0x1bf1,0x1bf3,0x18bb,
-0x1bf5,0x1bf7,0x1bfa,0x1bfc,0x1bfe,0x1c01,0x1c04,0x1c06,0x18bd,0x1c08,0x1c0a,0x1c0c,0x1c0e,0x1c10,0x1c12,0x1c14,
-0x1c17,0x1c19,0x1c1c,0x1c1e,0x1c21,0x18c1,0x1c23,0x1c25,0x1c28,0x1c2a,0x1c2c,0x1c2f,0x1c32,0x1c34,0x1c36,0x1c38,
-0x1c3a,0x1c3a,0x1c3c,0x1c3e,0x18c5,0x1c40,0x1c42,0x1c44,0x1c46,0x1c48,0x1c4b,0x1c4d,0x1686,0x1c50,0x1c53,0x1c55,
-0x1c58,0x1c5b,0x1c5e,0x1c60,0x18d1,0x1c62,0x1c65,0x1c68,0x1c6b,0x1c6e,0x1c70,0x1c70,0x18d3,0x1910,0x1c72,0x1c74,
-0x1c76,0x1c78,0x1c7b,0x163a,0x18d7,0x1c7d,0x1c7f,0x1842,0x1c82,0x1c85,0x17e6,0x1c88,0x1c8a,0x184a,0x1c8c,0x1c8e,
-0x1c90,0x1c93,0x1c93,0x1c96,0x1c98,0x1c9a,0x1c9d,0x1c9f,0x1ca1,0x1ca3,0x1ca6,0x1ca8,0x1caa,0x1cac,0x1cae,0x1cb0,
-0x1cb3,0x1cb5,0x1cb7,0x1cb9,0x1cbb,0x1cbd,0x1cbf,0x1cc2,0x1cc5,0x1cc7,0x1cca,0x1ccc,0x1ccf,0x1cd1,0x1856,0x1cd3,
-0x1cd6,0x1cd9,0x1cdb,0x1cde,0x1ce0,0x1ce3,0x1ce5,0x1ce7,0x1ce9,0x1ceb,0x1ced,0x1cef,0x1cf2,0x1cf5,0x1cf8,0x1b16,
-0x1cfb,0x1cfd,0x1cff,0x1d01,0x1d03,0x1d05,0x1d07,0x1d09,0x1d0b,0x1d0d,0x1d0f,0x1d11,0x16aa,0x1d14,0x1d16,0x1d18,
-0x1d1a,0x1d1c,0x1d1e,0x185c,0x1d20,0x1d22,0x1d24,0x1d26,0x1d28,0x1d2b,0x1d2e,0x1d31,0x1d33,0x1d35,0x1d37,0x1d39,
-0x1d3c,0x1d3e,0x1d41,0x1d43,0x1d45,0x1d48,0x1d4b,0x1d4d,0x1630,0x1d4f,0x1d51,0x1d53,0x1d55,0x1d57,0x1d59,0x18e5,
-0x1d5b,0x1d5d,0x1d5f,0x1d61,0x1d63,0x1d65,0x1d67,0x1d69,0x1d6b,0x1d6d,0x1d70,0x1d72,0x1d74,0x1d76,0x1d78,0x1d7a,
-0x1d7d,0x1d80,0x1d82,0x1d84,0x18ef,0x18f1,0x1d86,0x1d88,0x1d8b,0x1d8d,0x1d8f,0x1d91,0x1d93,0x1d96,0x1d99,0x1d9b,
-0x1d9d,0x1d9f,0x1da2,0x18f3,0x1da4,0x1da7,0x1daa,0x1dac,0x1dae,0x1db0,0x1db3,0x1db5,0x1db7,0x1db9,0x1dbb,0x1dbd,
-0x1dbf,0x1dc1,0x1dc4,0x1dc6,0x1dc8,0x1dca,0x1dcd,0x1dcf,0x1dd1,0x1dd3,0x1dd5,0x1dd8,0x1ddb,0x1ddd,0x1ddf,0x1de1,
-0x1de4,0x1de6,0x18ff,0x18ff,0x1de9,0x1deb,0x1dee,0x1df0,0x1df2,0x1df4,0x1df6,0x1df8,0x1dfa,0x1dfc,0x1901,0x1dff,
-0x1e01,0x1e03,0x1e05,0x1e07,0x1e09,0x1e0c,0x1e0e,0x1e11,0x1e14,0x1e17,0x1e19,0x1e1b,0x1e1d,0x1e1f,0x1e21,0x1e23,
-0x1e25,0x1e27,0,0,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,
-0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0,0,0,0,0,0,
-0,0,0,0,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,
-0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0x56e,0x56e,0x56e,0x56e,
-0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,
-0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0x1e29,0,0x1e29,0,0x1e29,0x1e29,0,0x1e29,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0x1e29,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0x1e29,0,0,0,0,0x1e29,0,0,0,0x1e29,0,0x1e29,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x1e27,0,
-0,0,0,0
+0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2a7,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,4,8,0xc,1,
+1,0x10,0x50,0x5c,0x70,0x88,0xcc,0xd0,0xec,0x108,0x144,0x148,0x15c,0x174,0x180,0x1a4,
+0x1e4,1,0x1ec,0x20c,0x228,0x244,0x290,0x298,0x2b0,0x2b8,0x2dc,1,1,1,1,1,
+1,0x2f4,0x334,0x340,0x354,0x36c,0x3b0,0x3b4,0x3d0,0x3f0,0x428,0x430,0x444,0x45c,0x468,0x48c,
+0x4cc,1,0x4d4,0x4f4,0x510,0x530,0x57c,0x584,0x5a0,0x5a8,0x5d0,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+0x5e8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,0x1284,0x128a,0xade,0x1290,0xaf4,0xafe,0x5f4,0xb08,
+0x1296,0x129c,0xb12,0x12a2,0x12a8,0x12ae,0x12b4,0xb28,1,0x12ba,0x12c0,0x12c6,0xb32,0xb48,0xb5a,1,
+0x5fc,0x12cc,0x12d2,0x12d8,0xb64,0x12de,1,1,0x12e4,0x12ea,0xb7a,0x12f0,0xb90,0xb9a,0x600,0xba4,
+0x12f6,0x12fc,0xbae,0x1302,0x1308,0x130e,0x1314,0xbc4,1,0x131a,0x1320,0x1326,0xbce,0xbe4,0xbf6,1,
+0x608,0x132c,0x1332,0x1338,0xc00,0x133e,1,0x1344,0x134a,0x1350,0xc16,0xc2c,0x1357,0x135d,0x1362,0x1368,
+0x136e,0x1374,0x137a,0x1380,0x1386,0x138c,0x1392,0x1398,1,1,0xc42,0xc50,0x139e,0x13a4,0x13aa,0x13b0,
+0x13b7,0x13bd,0x13c2,0x13c8,0x13ce,0x13d4,0x13da,0x13e0,0x13e6,0x13ec,0x13f3,0x13f9,0x13fe,0x1404,1,1,
+0x140a,0x1410,0x1416,0x141c,0x1422,0x1428,0x142f,0x1435,0x143a,1,1,1,0x1441,0x1447,0x144d,0x1453,
+1,0x1458,0x145e,0x1465,0x146b,0x1470,0x1476,1,1,1,1,0x147c,0x1482,0x1489,0x148f,0x1494,
+0x149a,1,1,1,0xc5e,0xc6c,0x14a0,0x14a6,0x14ac,0x14b2,1,1,0x14b8,0x14be,0x14c5,0x14cb,
+0x14d0,0x14d6,0xc7a,0xc84,0x14dc,0x14e2,0x14e9,0x14ef,0xc8e,0xc98,0x14f5,0x14fb,0x1500,0x1506,1,1,
+0xca2,0xcac,0xcb6,0xcc0,0x150c,0x1512,0x1518,0x151e,0x1524,0x152a,0x1531,0x1537,0x153c,0x1542,0x1548,0x154e,
+0x1554,0x155a,0x1560,0x1566,0x156c,0x1572,0x1578,0x60c,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,0xcca,0xce4,1,1,1,1,1,1,
+1,1,1,1,1,1,1,0xcfe,0xd18,1,1,1,1,1,1,0x610,
+1,1,1,1,1,1,1,1,1,1,1,1,1,0x157e,0x1584,0x158a,
+0x1590,0x1596,0x159c,0x15a2,0x15a8,0x15b0,0x15ba,0x15c4,0x15ce,0x15d8,0x15e2,0x15ec,0x15f6,1,0x1600,0x160a,
+0x1614,0x161e,0x1627,0x162d,1,1,0x1632,0x1638,0x163e,0x1644,0xd32,0xd3c,0x164d,0x1657,0x165f,0x1665,
+0x166b,1,1,1,0x1670,0x1676,1,1,0x167c,0x1682,0x168a,0x1694,0x169d,0x16a3,0x16a9,0x16af,
+0x16b4,0x16ba,0x16c0,0x16c6,0x16cc,0x16d2,0x16d8,0x16de,0x16e4,0x16ea,0x16f0,0x16f6,0x16fc,0x1702,0x1708,0x170e,
+0x1714,0x171a,0x1720,0x1726,0x172c,0x1732,0x1738,0x173e,0x1744,0x174a,0x1750,0x1756,1,1,0x175c,0x1762,
+1,1,1,1,1,1,0xd46,0xd50,0xd5a,0xd64,0x176a,0x1774,0x177e,0x1788,0xd6e,0xd78,
+0x1792,0x179c,0x17a4,0x17aa,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,0x614,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,0xfdcc,0xfdcc,0xfdcc,0xfdcc,0xfdcc,0xffcc,0xfdcc,0xfdcc,0xfdcc,0xfdcc,0xfdcc,0xfdcc,
+0xfdcc,0xffcc,0xffcc,0xfdcc,0xffcc,0xfdcc,0xffcc,0xfdcc,0xfdcc,0xffd0,0xffb8,0xffb8,0xffb8,0xffb8,0xffd0,0xfdb0,
+0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xff94,0xff94,0xfdb8,0xfdb8,0xfdb8,0xfdb8,0xfd94,0xfd94,0xffb8,0xffb8,0xffb8,
+0xffb8,0xfdb8,0xfdb8,0xffb8,0xfdb8,0xfdb8,0xffb8,0xffb8,0xfe02,0xfe02,0xfe02,0xfe02,0xfc02,0xffb8,0xffb8,0xffb8,
+0xffb8,0xffcc,0xffcc,0xffcc,0x3c26,0x3c2c,0xfdcc,0x3c32,0x3c38,0xfde0,0xffcc,0xffb8,0xffb8,0xffb8,0xffcc,0xffcc,
+0xffcc,0xffb8,0xffb8,1,0xffcc,0xffcc,0xffcc,0xffb8,0xffb8,0xffb8,0xffb8,0xffcc,0xffd0,0xffb8,0xffb8,0xffcc,
+0xffd2,0xffd4,0xffd4,0xffd2,0xffd4,0xffd4,0xffd2,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
+0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,1,0x29d1,1,1,1,1,1,1,1,
+1,1,0x29d5,1,1,1,1,1,1,0x17b1,0x17b7,0x29d9,0x17bd,0x17c3,0x17c9,1,
+0x17cf,1,0x17d5,0x17db,0x17e3,0x618,1,1,1,0x634,1,0x644,1,0x658,1,1,
+1,1,1,0x674,1,0x684,1,1,1,0x688,1,1,1,0x6a0,0x17eb,0x17f1,
+0xd82,0x17f7,0xd8c,0x17fd,0x1805,0x6b4,1,1,1,0x6d4,1,0x6e4,1,0x6fc,1,1,
+1,1,1,0x71c,1,0x72c,1,1,1,0x734,1,1,1,0x754,0xd96,0xda8,
+0x180d,0x1813,0xdba,1,1,1,0x76c,0x1819,0x181f,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,0x1825,0x182b,1,0x1831,1,1,0x774,0x1837,1,1,1,1,
+0x183d,0x1843,0x1849,1,0x778,1,1,0x780,1,0x784,0x790,0x798,0x79c,0x184f,0x7ac,1,
+1,1,0x7b0,1,1,1,1,0x7b4,1,1,1,0x7c4,1,1,1,0x7c8,
+1,0x7cc,1,1,0x7d0,1,1,0x7d8,1,0x7dc,0x7e8,0x7f0,0x7f4,0x1855,0x804,1,
+1,1,0x808,1,1,1,1,0x80c,1,1,1,0x81c,1,1,1,0x820,
+1,0x824,1,1,0x185b,0x1861,1,0x1867,1,1,0x828,0x186d,1,1,1,1,
+0x1873,0x1879,0x187f,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,0x82c,0x830,0x1885,0x188b,1,1,1,1,
+1,1,1,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,0x1891,0x1897,1,1,1,1,1,1,1,1,1,
+1,1,1,1,0x189d,0x18a3,0x18a9,0x18af,1,1,0x18b5,0x18bb,0x834,0x838,0x18c1,0x18c7,
+0x18cd,0x18d3,0x18d9,0x18df,1,1,0x18e5,0x18eb,0x18f1,0x18f7,0x18fd,0x1903,0x83c,0x840,0x1909,0x190f,
+0x1915,0x191b,0x1921,0x1927,0x192d,0x1933,0x1939,0x193f,0x1945,0x194b,1,1,0x1951,0x1957,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,0xffb8,0xffcc,0xffcc,0xffcc,0xffcc,0xffb8,0xffcc,0xffcc,0xffcc,0xffbc,0xffb8,0xffcc,0xffcc,0xffcc,0xffcc,
+0xffcc,0xffcc,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffcc,0xffcc,0xffb8,0xffcc,0xffcc,0xffbc,0xffc8,0xffcc,
+0xfe14,0xfe16,0xfe18,0xfe1a,0xfe1c,0xfe1e,0xfe20,0xfe22,0xfe24,0xfe26,0xfe26,0xfe28,0xfe2a,0xfe2c,1,0xfe2e,
+1,0xfe30,0xfe32,1,0xffcc,0xffb8,1,0xfe24,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xfe3c,0xfe3e,0xfe40,1,1,1,1,1,
+1,1,0x195c,0x1962,0x1969,0x196f,0x1975,0x844,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+0x850,1,0x854,0xfe36,0xfe38,0xfe3a,0xfe3c,0xfe3e,0xfe40,0xfe42,0xfe44,0xfdcc,0xfdcc,0xfdb8,0xffb8,0xffcc,
+0xffcc,0xffcc,0xffcc,0xffcc,0xffb8,0xffcc,0xffcc,0xffb8,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,0xfe46,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,0x197b,0x858,0x1981,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,0x85c,0x1987,1,0x860,0xffcc,0xffcc,
+0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffb8,0xffcc,1,1,0xffcc,
+0xffcc,1,0xffb8,0xffcc,0xffcc,0xffb8,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,0xfe48,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,0xffcc,0xffb8,0xffcc,0xffcc,0xffb8,0xffcc,0xffcc,0xffb8,
+0xffb8,0xffb8,0xffcc,0xffb8,0xffb8,0xffcc,0xffb8,0xffcc,0xffcc,0xffcc,0xffb8,0xffcc,0xffb8,0xffcc,0xffb8,0xffcc,
+0xffb8,0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
+0xffcc,0xffcc,0xffb8,0xffcc,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,1,0xffcc,
+0xffcc,0xffcc,0xffcc,0xffcc,1,0xffcc,0xffcc,0xffcc,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,0xffb8,0xffb8,0xffb8,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,0xffb8,
+0xffcc,0xffcc,0xffb8,0xffcc,0xffcc,0xffb8,0xffcc,0xffcc,0xffcc,0xffb8,0xffb8,0xffb8,0xfe36,0xfe38,0xfe3a,0xffcc,
+0xffcc,0xffcc,0xffb8,0xffcc,0xffcc,0xffb8,0xffb8,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,1,
+1,1,1,1,0x864,0x198d,1,1,1,1,1,1,0x868,0x1993,1,0x86c,
+0x1999,1,1,1,1,1,1,1,0xfc0e,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,0xfe12,1,1,1,0xffcc,0xffb8,0xffcc,
+0xffcc,1,1,1,0x29dc,0x29e2,0x29e8,0x29ee,0x29f4,0x29fa,0x2a00,0x2a06,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,0xfe0e,1,0xfc00,1,1,1,1,1,
+1,1,1,0x870,1,1,1,0x199f,0x19a5,0xfe12,1,1,1,1,1,1,
+1,1,1,0xfc00,1,1,1,1,0x2a0c,0x2a12,1,0x2a18,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x2a1e,
+1,1,0x2a24,1,1,1,1,1,0xfe0e,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,0xfe12,1,1,1,1,1,1,
+1,1,1,1,1,0x2a2a,0x2a30,0x2a36,1,1,0x2a3c,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,0xfe0e,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,0xfe12,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x878,
+0x19ab,1,1,0x19b1,0x19b7,0xfe12,1,1,1,1,1,1,1,1,0xfc00,0xfc00,
+1,1,1,1,0x2a42,0x2a48,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,0x884,1,0x19bd,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xfc00,1,
+1,1,1,1,1,1,0x888,0x890,1,1,0x19c3,0x19c9,0x19cf,0xfe12,1,1,
+1,1,1,1,1,1,1,0xfc00,1,1,1,1,1,1,1,1,
+1,1,0x894,1,0x19d5,1,1,1,1,0xfe12,1,1,1,1,1,1,
+1,0xfea8,0xfcb6,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+0xfe0e,1,1,0x898,0x19db,1,0xfc00,1,1,1,0x89c,0x19e1,0x19e7,1,0xdc4,0x19ef,
+1,0xfe12,1,1,1,1,1,1,1,0xfc00,0xfc00,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,0xfe12,0xfe12,1,0xfc00,1,1,1,1,1,
+1,1,0x8a8,0x8b0,1,1,0x19f7,0x19fd,0x1a03,0xfe12,1,1,1,1,1,1,
+1,1,1,0xfc00,1,1,1,1,1,1,1,1,1,1,0xfc12,1,
+1,1,1,0xfc00,1,1,1,1,1,1,1,1,1,0x8b4,0x1a09,1,
+0xdce,0x1a11,0x1a19,0xfc00,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,0xfece,0xfece,0xfe12,1,
+1,1,1,1,1,1,1,1,0xfed6,0xfed6,0xfed6,0xfed6,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,0xfeec,0xfeec,1,1,1,1,1,1,1,1,1,1,
+0xfef4,0xfef4,0xfef4,0xfef4,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,0xffb8,0xffb8,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,0xffb8,1,0xffb8,1,0xffb0,1,1,1,1,1,1,
+1,1,1,0x2a4f,1,1,1,1,1,1,1,1,1,0x2a55,1,1,
+1,1,0x2a5b,1,1,1,1,0x2a61,1,1,1,1,0x2a67,1,1,1,
+1,1,1,1,1,1,1,1,1,0x2a6d,1,1,1,1,1,1,
+1,0xff02,0xff04,0x3c40,0xff08,0x3c48,0x2a72,1,0x2a78,1,0xff04,0xff04,0xff04,0xff04,1,1,
+0xff04,0x3c50,0xffcc,0xffcc,0xfe12,1,0xffcc,0xffcc,1,1,1,1,1,1,1,1,
+1,1,1,0x2a7f,1,1,1,1,1,1,1,1,1,0x2a85,1,1,
+1,1,0x2a8b,1,1,1,1,0x2a91,1,1,1,1,0x2a97,1,1,1,
+1,1,1,1,1,1,1,1,1,0x2a9d,1,1,1,1,1,1,
+1,1,0xffb8,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,0x8c0,0x1a1f,1,
+1,1,1,1,1,1,0xfc00,1,1,1,1,1,1,1,1,0xfe0e,
+1,0xfe12,0xfe12,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,0xffb8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,0xffcc,0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,0xfe12,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xfe12,1,
+1,1,1,1,1,1,1,1,1,0xffcc,1,1,1,1,1,1,
+1,1,1,1,1,0xffc8,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,0xffbc,0xffcc,0xffb8,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,0xffcc,0xffb8,1,1,1,
+1,1,1,1,0xfe12,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
+0xffcc,1,1,0xffb8,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffcc,
+0xffcc,0xffb8,1,1,1,1,1,1,1,0x8c4,0x1a25,0x8c8,0x1a2b,0x8cc,0x1a31,0x8d0,
+0x1a37,0x8d4,0x1a3d,1,1,0x8d8,0x1a43,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,0xfe0e,0xfc00,1,1,
+1,1,0x8dc,0x1a49,0x8e0,0x1a4f,0x8e4,0x8e8,0x1a55,0x1a5b,0x8ec,0x1a61,0xfe12,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,0xffcc,0xffb8,0xffcc,0xffcc,0xffcc,
+0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,0xfe12,0xfe12,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,0xfe0e,1,1,1,1,1,
+1,1,1,1,1,1,0xfe12,0xfe12,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xfe0e,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+0xffcc,0xffcc,0xffcc,1,0xfe02,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffcc,0xffcc,0xffb8,0xffb8,0xffb8,0xffb8,
+0xffcc,1,0xfe02,0xfe02,0xfe02,0xfe02,0xfe02,0xfe02,0xfe02,1,1,1,1,0xffb8,1,1,
+1,1,1,1,0xffcc,1,1,1,0xffcc,0xffcc,1,1,1,1,1,1,
+0xffcc,0xffcc,0xffb8,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffb8,0xffcc,0xffcc,0xffd4,0xffac,0xffb8,
+0xff94,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
+0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffd0,0xffc8,0xffc8,0xffb8,1,0xffcc,
+0xffd2,0xffb8,0xffcc,0xffb8,0x1a66,0x1a6c,0x1a72,0x1a78,0x1a7f,0x1a85,0x1a8b,0x1a91,0x1a99,0x1aa3,0x1aaa,0x1ab0,
+0x1ab6,0x1abc,0x1ac2,0x1ac8,0x1acf,0x1ad5,0x1ada,0x1ae0,0x1ae8,0x1af2,0x1afc,0x1b06,0x1b0e,0x1b14,0x1b1a,0x1b20,
+0x1b29,0x1b33,0x1b3b,0x1b41,0x1b46,0x1b4c,0x1b52,0x1b58,0x1b5e,0x1b64,0x1b6a,0x1b70,0x1b77,0x1b7d,0x1b82,0x1b88,
+0x1b8e,0x1b94,0x1b9c,0x1ba6,0x1bae,0x1bb4,0x1bba,0x1bc0,0x1bc6,0x1bcc,0xdd8,0xde2,0x1bd4,0x1bde,0x1be6,0x1bec,
+0x1bf2,0x1bf8,0x1bfe,0x1c04,0x1c0a,0x1c10,0x1c17,0x1c1d,0x1c22,0x1c28,0x1c2e,0x1c34,0x1c3a,0x1c40,0x1c46,0x1c4c,
+0x1c54,0x1c5e,0x1c68,0x1c72,0x1c7c,0x1c86,0x1c90,0x1c9a,0x1ca3,0x1ca9,0x1caf,0x1cb5,0x1cba,0x1cc0,0xdec,0xdf6,
+0x1cc8,0x1cd2,0x1cda,0x1ce0,0x1ce6,0x1cec,0xe00,0xe0a,0x1cf4,0x1cfe,0x1d08,0x1d12,0x1d1c,0x1d26,0x1d2e,0x1d34,
+0x1d3a,0x1d40,0x1d46,0x1d4c,0x1d52,0x1d58,0x1d5e,0x1d64,0x1d6a,0x1d70,0x1d76,0x1d7c,0x1d84,0x1d8e,0x1d98,0x1da2,
+0x1daa,0x1db0,0x1db7,0x1dbd,0x1dc2,0x1dc8,0x1dce,0x1dd4,0x1dda,0x1de0,0x1de6,0x1dec,0x1df3,0x1df9,0x1dff,0x1e05,
+0x1e0b,0x1e11,0x1e16,0x1e1c,0x1e22,0x1e28,0x1e2f,0x1e35,0x1e3b,0x1e41,0x1e46,0x1e4c,0x1e52,0x1e58,1,0x1e5f,
+1,1,1,1,0xe14,0xe22,0x1e64,0x1e6a,0x1e72,0x1e7c,0x1e86,0x1e90,0x1e9a,0x1ea4,0x1eae,0x1eb8,
+0x1ec2,0x1ecc,0x1ed6,0x1ee0,0x1eea,0x1ef4,0x1efe,0x1f08,0x1f12,0x1f1c,0x1f26,0x1f30,0xe30,0xe3a,0x1f38,0x1f3e,
+0x1f44,0x1f4a,0x1f52,0x1f5c,0x1f66,0x1f70,0x1f7a,0x1f84,0x1f8e,0x1f98,0x1fa2,0x1fac,0x1fb4,0x1fba,0x1fc0,0x1fc6,
+0xe44,0xe4e,0x1fcc,0x1fd2,0x1fda,0x1fe4,0x1fee,0x1ff8,0x2002,0x200c,0x2016,0x2020,0x202a,0x2034,0x203e,0x2048,
+0x2052,0x205c,0x2066,0x2070,0x207a,0x2084,0x208e,0x2098,0x20a0,0x20a6,0x20ac,0x20b2,0x20ba,0x20c4,0x20ce,0x20d8,
+0x20e2,0x20ec,0x20f6,0x2100,0x210a,0x2114,0x211c,0x2122,0x2129,0x212f,0x2134,0x213a,0x2140,0x2146,1,1,
+1,1,1,1,0xe58,0xe6e,0xe86,0xe94,0xea2,0xeb0,0xebe,0xecc,0xed8,0xeee,0xf06,0xf14,
+0xf22,0xf30,0xf3e,0xf4c,0xf58,0xf66,0x214f,0x2159,0x2163,0x216d,1,1,0xf74,0xf82,0x2177,0x2181,
+0x218b,0x2195,1,1,0xf90,0xfa6,0xfbe,0xfcc,0xfda,0xfe8,0xff6,0x1004,0x1010,0x1026,0x103e,0x104c,
+0x105a,0x1068,0x1076,0x1084,0x1090,0x10a2,0x219f,0x21a9,0x21b3,0x21bd,0x21c7,0x21d1,0x10b4,0x10c6,0x21db,0x21e5,
+0x21ef,0x21f9,0x2203,0x220d,0x10d8,0x10e6,0x2217,0x2221,0x222b,0x2235,1,1,0x10f4,0x1102,0x223f,0x2249,
+0x2253,0x225d,1,1,0x1110,0x1122,0x2267,0x2271,0x227b,0x2285,0x228f,0x2299,1,0x1134,1,0x22a3,
+1,0x22ad,1,0x22b7,0x1146,0x115c,0x1174,0x1182,0x1190,0x119e,0x11ac,0x11ba,0x11c6,0x11dc,0x11f4,0x1202,
+0x1210,0x121e,0x122c,0x123a,0x1246,0x3b8e,0x22bf,0x3b96,0x1250,0x3b9e,0x22c5,0x3ba6,0x22cb,0x3bae,0x22d1,0x3bb6,
+0x125a,0x3bbe,1,1,0x22d8,0x22e2,0x22f1,0x2301,0x2311,0x2321,0x2331,0x2341,0x234c,0x2356,0x2365,0x2375,
+0x2385,0x2395,0x23a5,0x23b5,0x23c0,0x23ca,0x23d9,0x23e9,0x23f9,0x2409,0x2419,0x2429,0x2434,0x243e,0x244d,0x245d,
+0x246d,0x247d,0x248d,0x249d,0x24a8,0x24b2,0x24c1,0x24d1,0x24e1,0x24f1,0x2501,0x2511,0x251c,0x2526,0x2535,0x2545,
+0x2555,0x2565,0x2575,0x2585,0x258f,0x2595,0x259d,0x25a4,0x25ad,1,0x1264,0x25b7,0x25bf,0x25c5,0x25cb,0x3bc6,
+0x25d0,1,0x2aa2,0x8f0,1,0x25d7,0x25df,0x25e6,0x25ef,1,0x126e,0x25f9,0x2601,0x3bce,0x2607,0x3bd6,
+0x260c,0x2613,0x2619,0x261f,0x2625,0x262b,0x2633,0x3be0,1,1,0x263b,0x2643,0x264b,0x2651,0x2657,0x3bea,
+1,0x265d,0x2663,0x2669,0x266f,0x2675,0x267d,0x3bf4,0x2685,0x268b,0x2691,0x2699,0x26a1,0x26a7,0x26ad,0x3bfe,
+0x26b3,0x26b9,0x3c06,0x2aa7,1,1,0x26c1,0x26c8,0x26d1,1,0x1278,0x26db,0x26e3,0x3c0e,0x26e9,0x3c16,
+0x26ee,0x2aab,0x8fc,1,0xfa09,0xfa09,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,0xffcc,0xffcc,0xfe02,0xfe02,0xffcc,0xffcc,0xffcc,0xffcc,0xfe02,0xfe02,0xfe02,0xffcc,
+0xffcc,1,1,1,1,0xffcc,1,1,1,0xfe02,0xfe02,0xffcc,0xffb8,0xffcc,0xfe02,0xfe02,
+0xffb8,0xffb8,0xffb8,0xffb8,0xffcc,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,0x2aae,1,1,1,0x2ab2,0x3c1e,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+0x908,1,0x90c,1,0x910,1,1,1,1,1,0x26f5,0x26fb,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,0x2701,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,0x2707,0x270d,0x2713,
+0x914,1,0x918,1,0x91c,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,0x920,0x2719,1,1,1,0x924,0x271f,1,0x928,0x2725,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,0x92c,0x272b,0x930,0x2731,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,0x934,1,1,1,
+1,0x2737,1,0x938,0x273d,0x93c,1,0x2743,0x940,0x2749,1,1,1,0x944,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+0x274f,0x948,0x2755,1,0x94c,0x950,1,1,1,1,1,1,1,0x275b,0x2761,0x2767,
+0x276d,0x2773,0x954,0x958,0x2779,0x277f,0x95c,0x960,0x2785,0x278b,0x964,0x968,0x96c,0x970,1,1,
+0x2791,0x2797,0x974,0x978,0x279d,0x27a3,0x97c,0x980,0x27a9,0x27af,1,1,1,1,1,1,
+1,0x984,0x988,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,0x98c,1,1,1,1,1,0x990,0x994,1,0x998,0x27b5,0x27bb,0x27c1,0x27c7,
+1,1,0x99c,0x9a0,0x9a4,0x9a8,1,1,1,1,1,1,1,1,1,1,
+0x27cd,0x27d3,0x27d9,0x27df,1,1,1,1,1,1,0x27e5,0x27eb,0x27f1,0x27f7,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,0x2ab7,0x2abb,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+0x2abf,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,0xffcc,0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,0xfe12,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
+0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
+0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,1,1,1,1,1,
+1,1,0xffb4,0xffc8,0xffd0,0xffbc,0xffc0,0xffc0,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,0x9ac,1,1,1,1,0x9b0,
+0x27fd,0x9b4,0x2803,0x9b8,0x2809,0x9bc,0x280f,0x9c0,0x2815,0x9c4,0x281b,0x9c8,0x2821,0x9cc,0x2827,0x9d0,
+0x282d,0x9d4,0x2833,0x9d8,0x2839,0x9dc,0x283f,1,0x9e0,0x2845,0x9e4,0x284b,0x9e8,0x2851,1,1,
+1,1,1,0x9ec,0x2857,0x285d,0x9f4,0x2863,0x2869,0x9fc,0x286f,0x2875,0xa04,0x287b,0x2881,0xa0c,
+0x2887,0x288d,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,0x2893,1,1,1,1,0xfc10,0xfc10,1,
+1,0xa14,0x2899,1,1,1,1,1,1,1,0xa18,1,1,1,1,0xa1c,
+0x289f,0xa20,0x28a5,0xa24,0x28ab,0xa28,0x28b1,0xa2c,0x28b7,0xa30,0x28bd,0xa34,0x28c3,0xa38,0x28c9,0xa3c,
+0x28cf,0xa40,0x28d5,0xa44,0x28db,0xa48,0x28e1,1,0xa4c,0x28e7,0xa50,0x28ed,0xa54,0x28f3,1,1,
+1,1,1,0xa58,0x28f9,0x28ff,0xa60,0x2905,0x290b,0xa68,0x2911,0x2917,0xa70,0x291d,0x2923,0xa78,
+0x2929,0x292f,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,0xa80,0xa84,0xa88,0xa8c,1,0x2935,1,1,0x293b,0x2941,0x2947,0x294d,1,
+1,0xa90,0x2953,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,0xffcc,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
+0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,0xfe12,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+0xfe12,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,
+0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xffb8,
+0xffb8,0xffb8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,0xfe12,1,1,1,1,1,1,1,1,
+1,1,1,1,0xfe12,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,0xffcc,1,0xffcc,0xffcc,0xffb8,1,1,0xffcc,0xffcc,1,1,1,
+1,1,0xffcc,0xffcc,1,0xffcc,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,0xfe12,1,1,1,1,1,1,1,1,1,
+0x2ac5,0x2ac9,0x2acd,0x2ad1,0x2ad5,0x2ad9,0x2add,0x2ae1,0x2ae1,0x2ae5,0x2ae9,0x2aed,0x2af1,0x2af5,0x2af9,0x2afd,
+0x2b01,0x2b05,0x2b09,0x2b0d,0x2b11,0x2b15,0x2b19,0x2b1d,0x2b21,0x2b25,0x2b29,0x2b2d,0x2b31,0x2b35,0x2b39,0x2b3d,
+0x2b41,0x2b45,0x2b49,0x2b4d,0x2b51,0x2b55,0x2b59,0x2b5d,0x2b61,0x2b65,0x2b69,0x2b6d,0x2b71,0x2b75,0x2b79,0x2b7d,
+0x2b81,0x2b85,0x2b89,0x2b8d,0x2b91,0x2b95,0x2b99,0x2b9d,0x2ba1,0x2ba5,0x2ba9,0x2bad,0x2bb1,0x2bb5,0x2bb9,0x2bbd,
+0x2bc1,0x2bc5,0x2bc9,0x2bcd,0x2bd1,0x2bd5,0x2bd9,0x2bdd,0x2be1,0x2be5,0x2be9,0x2bed,0x2bf1,0x2bf5,0x2bf9,0x2bfd,
+0x2c01,0x2c05,0x2c09,0x2c0d,0x2c11,0x2c15,0x2c19,0x2c1d,0x2c21,0x2c25,0x2c29,0x2c2d,0x2b11,0x2c31,0x2c35,0x2c39,
+0x2c3d,0x2c41,0x2c45,0x2c49,0x2c4d,0x2c51,0x2c55,0x2c59,0x2c5d,0x2c61,0x2c65,0x2c69,0x2c6d,0x2c71,0x2c75,0x2c79,
+0x2c7d,0x2c81,0x2c85,0x2c89,0x2c8d,0x2c91,0x2c95,0x2c99,0x2c9d,0x2ca1,0x2ca5,0x2ca9,0x2cad,0x2cb1,0x2cb5,0x2cb9,
+0x2cbd,0x2cc1,0x2cc5,0x2cc9,0x2ccd,0x2cd1,0x2cd5,0x2cd9,0x2cdd,0x2ce1,0x2ce5,0x2ce9,0x2ced,0x2cf1,0x2cf5,0x2cf9,
+0x2cfd,0x2d01,0x2d05,0x2d09,0x2d0d,0x2d11,0x2d15,0x2d19,0x2d1d,0x2d21,0x2d25,0x2d29,0x2d2d,0x2d31,0x2d35,0x2d39,
+0x2d3d,0x2c79,0x2d41,0x2d45,0x2d49,0x2d4d,0x2d51,0x2d55,0x2d59,0x2d5d,0x2c39,0x2d61,0x2d65,0x2d69,0x2d6d,0x2d71,
+0x2d75,0x2d79,0x2d7d,0x2d81,0x2d85,0x2d89,0x2d8d,0x2d91,0x2d95,0x2d99,0x2d9d,0x2da1,0x2da5,0x2da9,0x2dad,0x2b11,
+0x2db1,0x2db5,0x2db9,0x2dbd,0x2dc1,0x2dc5,0x2dc9,0x2dcd,0x2dd1,0x2dd5,0x2dd9,0x2ddd,0x2de1,0x2de5,0x2de9,0x2ded,
+0x2df1,0x2df5,0x2df9,0x2dfd,0x2e01,0x2e05,0x2e09,0x2e0d,0x2e11,0x2e15,0x2e19,0x2c41,0x2e1d,0x2e21,0x2e25,0x2e29,
+0x2e2d,0x2e31,0x2e35,0x2e39,0x2e3d,0x2e41,0x2e45,0x2e49,0x2e4d,0x2e51,0x2e55,0x2e59,0x2e5d,0x2e61,0x2e65,0x2e69,
+0x2e6d,0x2e71,0x2e75,0x2e79,0x2e7d,0x2e81,0x2e85,0x2e89,0x2e8d,0x2e91,0x2e95,0x2e99,0x2e9d,0x2ea1,0x2ea5,0x2ea9,
+0x2ead,0x2eb1,0x2eb5,0x2eb9,0x2ebd,0x2ec1,0x2ec5,0x2ec9,0x2ecd,0x2ed1,0x2ed5,0x2ed9,0x2edd,0x2ee1,1,1,
+0x2ee5,1,0x2ee9,1,1,0x2eed,0x2ef1,0x2ef5,0x2ef9,0x2efd,0x2f01,0x2f05,0x2f09,0x2f0d,0x2f11,1,
+0x2f15,1,0x2f19,1,1,0x2f1d,0x2f21,1,1,1,0x2f25,0x2f29,0x2f2d,0x2f31,0x2f35,0x2f39,
+0x2f3d,0x2f41,0x2f45,0x2f49,0x2f4d,0x2f51,0x2f55,0x2f59,0x2f5d,0x2f61,0x2f65,0x2f69,0x2f6d,0x2f71,0x2f75,0x2f79,
+0x2f7d,0x2f81,0x2f85,0x2f89,0x2f8d,0x2f91,0x2f95,0x2f99,0x2f9d,0x2fa1,0x2fa5,0x2fa9,0x2fad,0x2fb1,0x2fb5,0x2fb9,
+0x2fbd,0x2fc1,0x2fc5,0x2fc9,0x2fcd,0x2fd1,0x2fd5,0x2d15,0x2fd9,0x2fdd,0x2fe1,0x2fe5,0x2fe9,0x2fed,0x2fed,0x2ff1,
+0x2ff5,0x2ff9,0x2ffd,0x3001,0x3005,0x3009,0x300d,0x2f1d,0x3011,0x3015,0x3019,0x301d,0x3021,0x3027,1,1,
+0x302b,0x302f,0x3033,0x3037,0x303b,0x303f,0x3043,0x3047,0x2f55,0x304b,0x304f,0x3053,0x2ee5,0x3057,0x305b,0x305f,
+0x3063,0x3067,0x306b,0x306f,0x3073,0x3077,0x307b,0x307f,0x3083,0x2f79,0x3087,0x2f7d,0x308b,0x308f,0x3093,0x3097,
+0x309b,0x2ee9,0x2b65,0x309f,0x30a3,0x30a7,0x2c7d,0x2dd9,0x30ab,0x30af,0x2f99,0x30b3,0x2f9d,0x30b7,0x30bb,0x30bf,
+0x2ef1,0x30c3,0x30c7,0x30cb,0x30cf,0x30d3,0x2ef5,0x30d7,0x30db,0x30df,0x30e3,0x30e7,0x30eb,0x2fd5,0x30ef,0x30f3,
+0x2d15,0x30f7,0x2fe5,0x30fb,0x30ff,0x3103,0x3107,0x310b,0x2ff9,0x310f,0x2f19,0x3113,0x2ffd,0x2c31,0x3117,0x3001,
+0x311b,0x3009,0x311f,0x3123,0x3127,0x312b,0x312f,0x3011,0x2f09,0x3133,0x3015,0x3137,0x3019,0x313b,0x2ae1,0x313f,
+0x3145,0x314b,0x3151,0x3155,0x3159,0x315d,0x3163,0x3169,0x316f,0x3173,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,0x3176,0xfe34,0x317c,1,1,1,1,
+1,1,1,1,1,1,0x3182,0x3188,0x3190,0x319a,0x31a2,0x31a8,0x31ae,0x31b4,0x31ba,0x31c0,
+0x31c6,0x31cc,0x31d2,1,0x31d8,0x31de,0x31e4,0x31ea,0x31f0,1,0x31f6,1,0x31fc,0x3202,1,0x3208,
+0x320e,1,0x3214,0x321a,0x3220,0x3226,0x322c,0x3232,0x3238,0x323e,0x3244,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,
+0xffcc,0xffcc,0xffcc,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffcc,0xffcc,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,0xffb8,1,1,0xffb8,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xffcc,0xffcc,
+0xffcc,0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,0xffb8,1,0xffcc,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,0xffcc,0xfe02,0xffb8,1,
+1,1,1,0xfe12,1,1,1,1,1,0xffcc,0xffb8,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,0xa94,0x2959,0xa9a,0x2963,1,1,1,1,1,1,1,
+1,0xaa0,1,1,1,1,1,0x296d,1,1,1,1,1,1,1,1,
+1,1,1,1,1,0xfe12,0xfc0e,1,1,1,1,1,0xffcc,0xffcc,0xffcc,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xfc00,
+1,1,1,1,1,1,0x2977,0x2981,1,0xaa6,0xaac,0xfe12,0xfe12,1,1,1,
+1,1,1,1,1,1,1,1,0xfe12,1,1,1,1,1,1,1,
+1,1,0xfe0e,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,0xfe12,0xfe0e,1,1,1,1,1,
+1,1,1,1,1,0xfe0e,0xfe12,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xab2,
+1,1,1,0x298b,0x2995,0xfe12,1,1,1,1,1,1,1,1,1,0xfc00,
+1,1,1,1,1,1,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
+0xffcc,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,1,1,1,1,
+1,1,1,1,1,1,0xfe12,1,1,1,0xfe0e,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,0xfc00,1,1,1,1,1,1,1,1,0xabe,0xfc00,0x299f,
+0x29a9,0xfc00,0x29b3,1,1,1,0xfe12,0xfe0e,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,0xfc00,1,1,1,1,1,1,1,1,
+0xad0,0xad6,0x29bd,0x29c7,1,1,1,0xfe12,0xfe0e,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,0xfe12,0xfe0e,1,1,1,1,
+1,1,1,1,1,1,1,0xfe12,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,0xfe12,1,1,1,1,1,1,1,1,0xfe0e,1,0xfe12,0xfe12,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,0xfe02,0xfe02,0xfe02,0xfe02,0xfe02,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,0xfe02,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,0x324a,0x3254,0x3268,0x3280,0x3298,0x32b0,0x32c8,0xffb0,0xffb0,0xfe02,
+0xfe02,0xfe02,1,1,1,0xffc4,0xffb0,0xffb0,0xffb0,0xffb0,0xffb0,1,1,1,1,1,
+1,1,1,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,1,1,0xffcc,0xffcc,0xffcc,
+0xffcc,0xffcc,0xffb8,0xffb8,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,0xffcc,0xffcc,0xffcc,0xffcc,1,1,
+1,1,1,1,1,1,1,1,1,1,1,0x32d6,0x32e0,0x32f4,0x330c,0x3324,
+0x333c,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,0xffcc,0xffcc,0xffcc,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
+0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,
+0xffcc,0xffcc,1,0xffcc,0xffcc,1,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,0xffb8,1,1,1,1,1,1,1,1,1,
+0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xffcc,0xfe0e,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,0x334b,0x334f,0x3353,0x3357,
+0x335d,0x2f3d,0x3361,0x3365,0x3369,0x336d,0x2f41,0x3371,0x3375,0x3379,0x2f45,0x337f,0x3383,0x3387,0x338b,0x3391,
+0x3395,0x3399,0x339d,0x33a3,0x33a7,0x33ab,0x33af,0x302f,0x33b3,0x33b9,0x33bd,0x33c1,0x33c5,0x33c9,0x33cd,0x33d1,
+0x33d5,0x3043,0x2f49,0x2f4d,0x3047,0x33d9,0x33dd,0x2c49,0x33e1,0x2f51,0x33e5,0x33e9,0x33ed,0x33f1,0x33f1,0x33f1,
+0x33f5,0x33fb,0x33ff,0x3403,0x3407,0x340d,0x3411,0x3415,0x3419,0x341d,0x3421,0x3425,0x3429,0x342d,0x3431,0x3435,
+0x3439,0x343d,0x343d,0x304f,0x3441,0x3445,0x3449,0x344d,0x2f59,0x3451,0x3455,0x3459,0x2ead,0x345d,0x3461,0x3465,
+0x3469,0x346d,0x3471,0x3475,0x3479,0x347d,0x3483,0x3487,0x348b,0x348f,0x3493,0x3497,0x349b,0x34a1,0x34a7,0x34ab,
+0x34af,0x34b3,0x34b7,0x34bb,0x34bf,0x34c3,0x34c7,0x34c7,0x34cb,0x34d1,0x34d5,0x2c39,0x34d9,0x34dd,0x34e3,0x34e7,
+0x34eb,0x34ef,0x34f3,0x34f7,0x2f6d,0x34fb,0x34ff,0x3503,0x3509,0x350d,0x3513,0x3517,0x351b,0x351f,0x3523,0x3527,
+0x352b,0x352f,0x3533,0x3537,0x353b,0x353f,0x3545,0x3549,0x354d,0x3551,0x2b61,0x3555,0x355b,0x355f,0x355f,0x3565,
+0x3569,0x3569,0x356d,0x3571,0x3577,0x357d,0x3581,0x3585,0x3589,0x358d,0x3591,0x3595,0x3599,0x359d,0x35a1,0x2f71,
+0x35a5,0x35ab,0x35af,0x35b3,0x307f,0x35b3,0x35b7,0x2f79,0x35bb,0x35bf,0x35c3,0x35c7,0x2f7d,0x2af5,0x35cb,0x35cf,
+0x35d3,0x35d7,0x35db,0x35df,0x35e3,0x35e9,0x35ed,0x35f1,0x35f5,0x35f9,0x35fd,0x3603,0x3607,0x360b,0x360f,0x3613,
+0x3617,0x361b,0x361f,0x3623,0x2f81,0x3627,0x362b,0x3631,0x3635,0x3639,0x363d,0x2f89,0x3641,0x3645,0x3649,0x364d,
+0x3651,0x3655,0x3659,0x365d,0x2b65,0x309f,0x3661,0x3665,0x3669,0x366d,0x3673,0x3677,0x367b,0x367f,0x2f8d,0x3683,
+0x3689,0x368d,0x3691,0x3151,0x3695,0x3699,0x369d,0x36a1,0x36a5,0x36ab,0x36af,0x36b3,0x36b7,0x36bd,0x36c1,0x36c5,
+0x36c9,0x2c7d,0x36cd,0x36d1,0x36d7,0x36dd,0x36e3,0x36e7,0x36ed,0x36f1,0x36f5,0x36f9,0x36fd,0x2f91,0x2dd9,0x3701,
+0x3705,0x3709,0x370d,0x3713,0x3717,0x371b,0x371f,0x30af,0x3723,0x3727,0x372d,0x3731,0x3735,0x373b,0x3741,0x3745,
+0x30b3,0x3749,0x374d,0x3751,0x3755,0x3759,0x375d,0x3761,0x3767,0x376b,0x3771,0x3775,0x377b,0x30bb,0x377f,0x3783,
+0x3789,0x378d,0x3791,0x3797,0x379d,0x37a1,0x37a5,0x37a9,0x37ad,0x37ad,0x37b1,0x37b5,0x30c3,0x37b9,0x37bd,0x37c1,
+0x37c5,0x37c9,0x37cf,0x37d3,0x2c45,0x37d9,0x37df,0x37e3,0x37e9,0x37ef,0x37f5,0x37f9,0x30db,0x37fd,0x3803,0x3809,
+0x380f,0x3815,0x3819,0x3819,0x30df,0x3159,0x381d,0x3821,0x3825,0x3829,0x382f,0x2bad,0x30e7,0x3833,0x3837,0x2fbd,
+0x383d,0x3843,0x2f05,0x3849,0x384d,0x2fcd,0x3851,0x3855,0x3859,0x385f,0x385f,0x3865,0x3869,0x386d,0x3873,0x3877,
+0x387b,0x387f,0x3885,0x3889,0x388d,0x3891,0x3895,0x3899,0x389f,0x38a3,0x38a7,0x38ab,0x38af,0x38b3,0x38b7,0x38bd,
+0x38c3,0x38c7,0x38cd,0x38d1,0x38d7,0x38db,0x2fe5,0x38df,0x38e5,0x38eb,0x38ef,0x38f5,0x38f9,0x38ff,0x3903,0x3907,
+0x390b,0x390f,0x3913,0x3917,0x391d,0x3923,0x3929,0x3565,0x392f,0x3933,0x3937,0x393b,0x393f,0x3943,0x3947,0x394b,
+0x394f,0x3953,0x3957,0x395b,0x2c8d,0x3961,0x3965,0x3969,0x396d,0x3971,0x3975,0x2ff1,0x3979,0x397d,0x3981,0x3985,
+0x3989,0x398f,0x3995,0x399b,0x399f,0x39a3,0x39a7,0x39ab,0x39b1,0x39b5,0x39bb,0x39bf,0x39c3,0x39c9,0x39cf,0x39d3,
+0x2b99,0x39d7,0x39db,0x39df,0x39e3,0x39e7,0x39eb,0x3103,0x39ef,0x39f3,0x39f7,0x39fb,0x39ff,0x3a03,0x3a07,0x3a0b,
+0x3a0f,0x3a13,0x3a19,0x3a1d,0x3a21,0x3a25,0x3a29,0x3a2d,0x3a33,0x3a39,0x3a3d,0x3a41,0x3117,0x311b,0x3a45,0x3a49,
+0x3a4f,0x3a53,0x3a57,0x3a5b,0x3a5f,0x3a65,0x3a6b,0x3a6f,0x3a73,0x3a77,0x3a7d,0x311f,0x3a81,0x3a87,0x3a8d,0x3a91,
+0x3a95,0x3a99,0x3a9f,0x3aa3,0x3aa7,0x3aab,0x3aaf,0x3ab3,0x3ab7,0x3abb,0x3ac1,0x3ac5,0x3ac9,0x3acd,0x3ad3,0x3ad7,
+0x3adb,0x3adf,0x3ae3,0x3ae9,0x3aef,0x3af3,0x3af7,0x3afb,0x3b01,0x3b05,0x3137,0x3137,0x3b0b,0x3b0f,0x3b15,0x3b19,
+0x3b1d,0x3b21,0x3b25,0x3b29,0x3b2d,0x3b31,0x313b,0x3b37,0x3b3b,0x3b3f,0x3b43,0x3b47,0x3b4b,0x3b51,0x3b55,0x3b5b,
+0x3b61,0x3b67,0x3b6b,0x3b6f,0x3b73,0x3b77,0x3b7b,0x3b7f,0x3b83,0x3b87,1,1,2,2,2,2,
+2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,0xfe00,0xfe00,0xfe00,
+0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,
+0xfe00,0xfe00,1,1,1,1,1,1,1,1,1,1,0xfe00,0xfe00,0xfe00,0xfe00,
+0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,
+0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,0xfe00,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,0xadc,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,
+0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,
+0xadc,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,
+0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,0x1283,0x1283,0x1283,0x1283,0xadc,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,
+0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,0x1283,
+0x1283,0x1283,0x1283,0x1283,0x3c54,1,0x3c54,1,0x3c54,0x3c54,0x3c54,0x3c54,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x3c54,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x3c54,
+1,1,1,1,0x3c54,1,1,1,0x3c54,1,0x3c54,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+1,1,1,1,1,1,1,1,1,1,0x3b87,1,1,1,1,1
 };
 
-static const uint16_t norm2_nfc_data_extraData[7722]={
+static const uint16_t norm2_nfc_data_extraData[7724]={
 0xffff,0xffff,0x8670,0x44dc,0x8670,0x44c0,0x8670,0x44de,0x600,0x180,0x602,0x182,0x604,0x185,0x606,0x186,
 0x608,0x200,0x60c,0x205,0x60e,0x44d,0x610,0x189,0x612,0x3d44,0x614,0x18b,0x618,0x39a,0x61e,0x400,
 0x622,0x404,0x646,0x3d41,0x64a,0x3c00,0x8650,0x208,0x60e,0x3c04,0x646,0x3c08,0x8662,0x3c0c,0x602,0x20c,
@@ -712,407 +720,407 @@
 0x6132,0x61a6,0xe134,0x61a8,0x6132,0x61ac,0xe134,0x61ae,0x6132,0x61b2,0xe134,0x61b4,0x6132,0x61b8,0xe134,0x61ba,
 0xe132,0x61ee,0xe132,0x61f0,0xe132,0x61f2,0xe132,0x61f4,0xe132,0x61fc,0xb489,0x2e82,0x2134,0xb489,0x2e82,0x2138,
 0xb489,0x2e82,0x2156,0xb489,0x49c2,0x225c,0xb489,0x49c2,0x225e,0x3489,0xcf82,0x2696,0xb489,0xd5c2,0x2698,0x348b,
-0x2c02,0x2978,0x348b,0x2e82,0x2976,0xb48b,0x2f42,0x297c,0xb48b,0x6bc2,0x2b74,0xb48b,0x6bc2,0x2b76,0,0xe622,
-0x41,0x302,0x600,0x3d4c,0x602,0x3d48,0x606,0x3d54,0x8612,0x3d50,0xe622,0x41,0x308,0x8608,0x3bc,0xe622,
-0x41,0x30a,0x8602,0x3f4,0xca22,0x43,0x327,0x8602,0x3c10,0xe622,0x45,0x302,0x600,0x3d80,0x602,0x3d7c,
-0x606,0x3d88,0x8612,0x3d84,0xe622,0x49,0x308,0x8602,0x3c5c,0xe622,0x4f,0x302,0x600,0x3da4,0x602,0x3da0,
-0x606,0x3dac,0x8612,0x3da8,0xe622,0x4f,0x303,0x602,0x3c98,0x608,0x458,0x8610,0x3c9c,0xe622,0x4f,0x308,
-0x8608,0x454,0xe622,0x55,0x308,0x600,0x3b6,0x602,0x3ae,0x608,0x3aa,0x8618,0x3b2,0xe622,0x61,0x302,
-0x600,0x3d4e,0x602,0x3d4a,0x606,0x3d56,0x8612,0x3d52,0xe622,0x61,0x308,0x8608,0x3be,0xe622,0x61,0x30a,
-0x8602,0x3f6,0xca22,0x63,0x327,0x8602,0x3c12,0xe622,0x65,0x302,0x600,0x3d82,0x602,0x3d7e,0x606,0x3d8a,
-0x8612,0x3d86,0xe622,0x69,0x308,0x8602,0x3c5e,0xe622,0x6f,0x302,0x600,0x3da6,0x602,0x3da2,0x606,0x3dae,
-0x8612,0x3daa,0xe622,0x6f,0x303,0x602,0x3c9a,0x608,0x45a,0x8610,0x3c9e,0xe622,0x6f,0x308,0x8608,0x456,
-0xe622,0x75,0x308,0x600,0x3b8,0x602,0x3b0,0x608,0x3ac,0x8618,0x3b4,0xe622,0x41,0x306,0x600,0x3d60,
-0x602,0x3d5c,0x606,0x3d68,0x8612,0x3d64,0xe622,0x61,0x306,0x600,0x3d62,0x602,0x3d5e,0x606,0x3d6a,0x8612,
-0x3d66,0xe622,0x45,0x304,0x600,0x3c28,0x8602,0x3c2c,0xe622,0x65,0x304,0x600,0x3c2a,0x8602,0x3c2e,0xe622,
-0x4f,0x304,0x600,0x3ca0,0x8602,0x3ca4,0xe622,0x6f,0x304,0x600,0x3ca2,0x8602,0x3ca6,0xe622,0x53,0x301,
-0x860e,0x3cc8,0xe622,0x73,0x301,0x860e,0x3cca,0xe622,0x53,0x30c,0x860e,0x3ccc,0xe622,0x73,0x30c,0x860e,
-0x3cce,0xe622,0x55,0x303,0x8602,0x3cf0,0xe622,0x75,0x303,0x8602,0x3cf2,0xe622,0x55,0x304,0x8610,0x3cf4,
-0xe622,0x75,0x304,0x8610,0x3cf6,0xd822,0x4f,0x31b,0x600,0x3db8,0x602,0x3db4,0x606,0x3dc0,0x612,0x3dbc,
-0x8646,0x3dc4,0xd822,0x6f,0x31b,0x600,0x3dba,0x602,0x3db6,0x606,0x3dc2,0x612,0x3dbe,0x8646,0x3dc6,0xd822,
-0x55,0x31b,0x600,0x3dd4,0x602,0x3dd0,0x606,0x3ddc,0x612,0x3dd8,0x8646,0x3de0,0xd822,0x75,0x31b,0x600,
-0x3dd6,0x602,0x3dd2,0x606,0x3dde,0x612,0x3dda,0x8646,0x3de2,0xca22,0x4f,0x328,0x8608,0x3d8,0xca22,0x6f,
-0x328,0x8608,0x3da,0xe622,0x41,0x307,0x8608,0x3c0,0xe622,0x61,0x307,0x8608,0x3c2,0xca22,0x45,0x327,
-0x860c,0x3c38,0xca22,0x65,0x327,0x860c,0x3c3a,0xe622,0x4f,0x307,0x8608,0x460,0xe622,0x6f,0x307,0x8608,
-0x462,0xe622,0x3b1,0x301,0x868a,0x3f68,0xe622,0x3b7,0x301,0x868a,0x3f88,0xe622,0x3b9,0x308,0x600,0x3fa4,
-0x602,0x720,0x8684,0x3fae,0xe622,0x3c5,0x308,0x600,0x3fc4,0x602,0x760,0x8684,0x3fce,0xe622,0x3c9,0x301,
-0x868a,0x3fe8,0x22,0xcc6,0xcc2,0x99aa,0x1996,0x22,0xdd9,0xdcf,0x9b94,0x1bba,0xdc22,0x4c,0x323,0x8608,
-0x3c70,0xdc22,0x6c,0x323,0x8608,0x3c72,0xdc22,0x52,0x323,0x8608,0x3cb8,0xdc22,0x72,0x323,0x8608,0x3cba,
-0xdc22,0x53,0x323,0x860e,0x3cd0,0xdc22,0x73,0x323,0x860e,0x3cd2,0xdc22,0x41,0x323,0x604,0x3d58,0x860c,
-0x3d6c,0xdc22,0x61,0x323,0x604,0x3d5a,0x860c,0x3d6e,0xdc22,0x45,0x323,0x8604,0x3d8c,0xdc22,0x65,0x323,
-0x8604,0x3d8e,0xdc22,0x4f,0x323,0x8604,0x3db0,0xdc22,0x6f,0x323,0x8604,0x3db2,0xe622,0x3b1,0x313,0x600,
-0x3e05,0x602,0x3e09,0x684,0x3e0d,0x868a,0x3f00,0xe622,0x3b1,0x314,0x600,0x3e07,0x602,0x3e0b,0x684,0x3e0f,
-0x868a,0x3f02,0x1f00,0xe663,0x3b1,0x313,0x300,0x868a,0x3f04,0x1f01,0xe663,0x3b1,0x314,0x300,0x868a,0x3f06,
-0x1f00,0xe663,0x3b1,0x313,0x301,0x868a,0x3f08,0x1f01,0xe663,0x3b1,0x314,0x301,0x868a,0x3f0a,0x1f00,0xe663,
-0x3b1,0x313,0x342,0x868a,0x3f0c,0x1f01,0xe663,0x3b1,0x314,0x342,0x868a,0x3f0e,0xe622,0x391,0x313,0x600,
-0x3e15,0x602,0x3e19,0x684,0x3e1d,0x868a,0x3f10,0xe622,0x391,0x314,0x600,0x3e17,0x602,0x3e1b,0x684,0x3e1f,
-0x868a,0x3f12,0x1f08,0xe663,0x391,0x313,0x300,0x868a,0x3f14,0x1f09,0xe663,0x391,0x314,0x300,0x868a,0x3f16,
-0x1f08,0xe663,0x391,0x313,0x301,0x868a,0x3f18,0x1f09,0xe663,0x391,0x314,0x301,0x868a,0x3f1a,0x1f08,0xe663,
-0x391,0x313,0x342,0x868a,0x3f1c,0x1f09,0xe663,0x391,0x314,0x342,0x868a,0x3f1e,0xe622,0x3b5,0x313,0x600,
-0x3e24,0x8602,0x3e28,0xe622,0x3b5,0x314,0x600,0x3e26,0x8602,0x3e2a,0xe622,0x395,0x313,0x600,0x3e34,0x8602,
-0x3e38,0xe622,0x395,0x314,0x600,0x3e36,0x8602,0x3e3a,0xe622,0x3b7,0x313,0x600,0x3e45,0x602,0x3e49,0x684,
-0x3e4d,0x868a,0x3f20,0xe622,0x3b7,0x314,0x600,0x3e47,0x602,0x3e4b,0x684,0x3e4f,0x868a,0x3f22,0x1f20,0xe663,
-0x3b7,0x313,0x300,0x868a,0x3f24,0x1f21,0xe663,0x3b7,0x314,0x300,0x868a,0x3f26,0x1f20,0xe663,0x3b7,0x313,
-0x301,0x868a,0x3f28,0x1f21,0xe663,0x3b7,0x314,0x301,0x868a,0x3f2a,0x1f20,0xe663,0x3b7,0x313,0x342,0x868a,
-0x3f2c,0x1f21,0xe663,0x3b7,0x314,0x342,0x868a,0x3f2e,0xe622,0x397,0x313,0x600,0x3e55,0x602,0x3e59,0x684,
-0x3e5d,0x868a,0x3f30,0xe622,0x397,0x314,0x600,0x3e57,0x602,0x3e5b,0x684,0x3e5f,0x868a,0x3f32,0x1f28,0xe663,
-0x397,0x313,0x300,0x868a,0x3f34,0x1f29,0xe663,0x397,0x314,0x300,0x868a,0x3f36,0x1f28,0xe663,0x397,0x313,
-0x301,0x868a,0x3f38,0x1f29,0xe663,0x397,0x314,0x301,0x868a,0x3f3a,0x1f28,0xe663,0x397,0x313,0x342,0x868a,
-0x3f3c,0x1f29,0xe663,0x397,0x314,0x342,0x868a,0x3f3e,0xe622,0x3b9,0x313,0x600,0x3e64,0x602,0x3e68,0x8684,
-0x3e6c,0xe622,0x3b9,0x314,0x600,0x3e66,0x602,0x3e6a,0x8684,0x3e6e,0xe622,0x399,0x313,0x600,0x3e74,0x602,
-0x3e78,0x8684,0x3e7c,0xe622,0x399,0x314,0x600,0x3e76,0x602,0x3e7a,0x8684,0x3e7e,0xe622,0x3bf,0x313,0x600,
-0x3e84,0x8602,0x3e88,0xe622,0x3bf,0x314,0x600,0x3e86,0x8602,0x3e8a,0xe622,0x39f,0x313,0x600,0x3e94,0x8602,
-0x3e98,0xe622,0x39f,0x314,0x600,0x3e96,0x8602,0x3e9a,0xe622,0x3c5,0x313,0x600,0x3ea4,0x602,0x3ea8,0x8684,
-0x3eac,0xe622,0x3c5,0x314,0x600,0x3ea6,0x602,0x3eaa,0x8684,0x3eae,0xe622,0x3a5,0x314,0x600,0x3eb6,0x602,
-0x3eba,0x8684,0x3ebe,0xe622,0x3c9,0x313,0x600,0x3ec5,0x602,0x3ec9,0x684,0x3ecd,0x868a,0x3f40,0xe622,0x3c9,
-0x314,0x600,0x3ec7,0x602,0x3ecb,0x684,0x3ecf,0x868a,0x3f42,0x1f60,0xe663,0x3c9,0x313,0x300,0x868a,0x3f44,
-0x1f61,0xe663,0x3c9,0x314,0x300,0x868a,0x3f46,0x1f60,0xe663,0x3c9,0x313,0x301,0x868a,0x3f48,0x1f61,0xe663,
-0x3c9,0x314,0x301,0x868a,0x3f4a,0x1f60,0xe663,0x3c9,0x313,0x342,0x868a,0x3f4c,0x1f61,0xe663,0x3c9,0x314,
-0x342,0x868a,0x3f4e,0xe622,0x3a9,0x313,0x600,0x3ed5,0x602,0x3ed9,0x684,0x3edd,0x868a,0x3f50,0xe622,0x3a9,
-0x314,0x600,0x3ed7,0x602,0x3edb,0x684,0x3edf,0x868a,0x3f52,0x1f68,0xe663,0x3a9,0x313,0x300,0x868a,0x3f54,
-0x1f69,0xe663,0x3a9,0x314,0x300,0x868a,0x3f56,0x1f68,0xe663,0x3a9,0x313,0x301,0x868a,0x3f58,0x1f69,0xe663,
-0x3a9,0x314,0x301,0x868a,0x3f5a,0x1f68,0xe663,0x3a9,0x313,0x342,0x868a,0x3f5c,0x1f69,0xe663,0x3a9,0x314,
-0x342,0x868a,0x3f5e,0xe622,0x3b1,0x300,0x868a,0x3f64,0xe622,0x3b7,0x300,0x868a,0x3f84,0xe622,0x3c9,0x300,
-0x868a,0x3fe4,0xe622,0x3b1,0x342,0x868a,0x3f6e,0xe622,0x3b7,0x342,0x868a,0x3f8e,0xe622,0x3c9,0x342,0x868a,
-0x3fee,0xe622,0x41,0x300,0xe622,0x41,0x301,0xe622,0x41,0x303,0xe622,0x45,0x300,0xe622,0x45,0x301,
-0xe622,0x45,0x308,0xe622,0x49,0x300,0xe622,0x49,0x301,0xe622,0x49,0x302,0xe622,0x4e,0x303,0xe622,
-0x4f,0x300,0xe622,0x4f,0x301,0xe622,0x55,0x300,0xe622,0x55,0x301,0xe622,0x55,0x302,0xe622,0x59,
-0x301,0xe622,0x61,0x300,0xe622,0x61,0x301,0xe622,0x61,0x303,0xe622,0x65,0x300,0xe622,0x65,0x301,
-0xe622,0x65,0x308,0xe622,0x69,0x300,0xe622,0x69,0x301,0xe622,0x69,0x302,0xe622,0x6e,0x303,0xe622,
-0x6f,0x300,0xe622,0x6f,0x301,0xe622,0x75,0x300,0xe622,0x75,0x301,0xe622,0x75,0x302,0xe622,0x79,
-0x301,0xe622,0x79,0x308,0xe622,0x41,0x304,0xe622,0x61,0x304,0xca02,0x41,0x328,0xca02,0x61,0x328,
-0xe622,0x43,0x301,0xe622,0x63,0x301,0xe622,0x43,0x302,0xe622,0x63,0x302,0xe622,0x43,0x307,0xe622,
-0x63,0x307,0xe622,0x43,0x30c,0xe622,0x63,0x30c,0xe622,0x44,0x30c,0xe622,0x64,0x30c,0xe622,0x45,
-0x306,0xe622,0x65,0x306,0xe622,0x45,0x307,0xe622,0x65,0x307,0xca02,0x45,0x328,0xca02,0x65,0x328,
-0xe622,0x45,0x30c,0xe622,0x65,0x30c,0xe622,0x47,0x302,0xe622,0x67,0x302,0xe622,0x47,0x306,0xe622,
-0x67,0x306,0xe622,0x47,0x307,0xe622,0x67,0x307,0xca02,0x47,0x327,0xca02,0x67,0x327,0xe622,0x48,
-0x302,0xe622,0x68,0x302,0xe622,0x49,0x303,0xe622,0x69,0x303,0xe622,0x49,0x304,0xe622,0x69,0x304,
-0xe622,0x49,0x306,0xe622,0x69,0x306,0xca02,0x49,0x328,0xca02,0x69,0x328,0xe622,0x49,0x307,0xe602,
-0x4a,0x302,0xe602,0x6a,0x302,0xca02,0x4b,0x327,0xca02,0x6b,0x327,0xe622,0x4c,0x301,0xe622,0x6c,
-0x301,0xca02,0x4c,0x327,0xca02,0x6c,0x327,0xe622,0x4c,0x30c,0xe622,0x6c,0x30c,0xe622,0x4e,0x301,
-0xe622,0x6e,0x301,0xca02,0x4e,0x327,0xca02,0x6e,0x327,0xe622,0x4e,0x30c,0xe622,0x6e,0x30c,0xe622,
-0x4f,0x306,0xe622,0x6f,0x306,0xe622,0x4f,0x30b,0xe622,0x6f,0x30b,0xe622,0x52,0x301,0xe622,0x72,
-0x301,0xca02,0x52,0x327,0xca02,0x72,0x327,0xe622,0x52,0x30c,0xe622,0x72,0x30c,0xe622,0x53,0x302,
-0xe622,0x73,0x302,0xca02,0x53,0x327,0xca02,0x73,0x327,0xca02,0x54,0x327,0xca02,0x74,0x327,0xe622,
-0x54,0x30c,0xe622,0x74,0x30c,0xe622,0x55,0x306,0xe622,0x75,0x306,0xe622,0x55,0x30a,0xe622,0x75,
-0x30a,0xe622,0x55,0x30b,0xe622,0x75,0x30b,0xca02,0x55,0x328,0xca02,0x75,0x328,0xe622,0x57,0x302,
-0xe622,0x77,0x302,0xe622,0x59,0x302,0xe622,0x79,0x302,0xe622,0x59,0x308,0xe622,0x5a,0x301,0xe622,
-0x7a,0x301,0xe622,0x5a,0x307,0xe622,0x7a,0x307,0xe622,0x5a,0x30c,0xe622,0x7a,0x30c,0xe622,0x41,
-0x30c,0xe622,0x61,0x30c,0xe622,0x49,0x30c,0xe622,0x69,0x30c,0xe622,0x4f,0x30c,0xe622,0x6f,0x30c,
-0xe622,0x55,0x30c,0xe622,0x75,0x30c,0xdc,0xe663,0x55,0x308,0x304,0xfc,0xe663,0x75,0x308,0x304,
-0xdc,0xe663,0x55,0x308,0x301,0xfc,0xe663,0x75,0x308,0x301,0xdc,0xe663,0x55,0x308,0x30c,0xfc,
-0xe663,0x75,0x308,0x30c,0xdc,0xe663,0x55,0x308,0x300,0xfc,0xe663,0x75,0x308,0x300,0xc4,0xe663,
-0x41,0x308,0x304,0xe4,0xe663,0x61,0x308,0x304,0x226,0xe663,0x41,0x307,0x304,0x227,0xe663,0x61,
-0x307,0x304,0xe602,0xc6,0x304,0xe602,0xe6,0x304,0xe622,0x47,0x30c,0xe622,0x67,0x30c,0xe622,0x4b,
-0x30c,0xe622,0x6b,0x30c,0x1ea,0xe643,0x4f,0x328,0x304,0x1eb,0xe643,0x6f,0x328,0x304,0xe602,0x1b7,
-0x30c,0xe602,0x292,0x30c,0xe602,0x6a,0x30c,0xe622,0x47,0x301,0xe622,0x67,0x301,0xe622,0x4e,0x300,
-0xe622,0x6e,0x300,0xc5,0xe663,0x41,0x30a,0x301,0xe5,0xe663,0x61,0x30a,0x301,0xe602,0xc6,0x301,
-0xe602,0xe6,0x301,0xe602,0xd8,0x301,0xe602,0xf8,0x301,0xe622,0x41,0x30f,0xe622,0x61,0x30f,0xe622,
-0x41,0x311,0xe622,0x61,0x311,0xe622,0x45,0x30f,0xe622,0x65,0x30f,0xe622,0x45,0x311,0xe622,0x65,
-0x311,0xe622,0x49,0x30f,0xe622,0x69,0x30f,0xe622,0x49,0x311,0xe622,0x69,0x311,0xe622,0x4f,0x30f,
-0xe622,0x6f,0x30f,0xe622,0x4f,0x311,0xe622,0x6f,0x311,0xe622,0x52,0x30f,0xe622,0x72,0x30f,0xe622,
-0x52,0x311,0xe622,0x72,0x311,0xe622,0x55,0x30f,0xe622,0x75,0x30f,0xe622,0x55,0x311,0xe622,0x75,
-0x311,0xdc22,0x53,0x326,0xdc22,0x73,0x326,0xdc22,0x54,0x326,0xdc22,0x74,0x326,0xe622,0x48,0x30c,
-0xe622,0x68,0x30c,0xd6,0xe663,0x4f,0x308,0x304,0xf6,0xe663,0x6f,0x308,0x304,0xd5,0xe663,0x4f,
-0x303,0x304,0xf5,0xe663,0x6f,0x303,0x304,0x22e,0xe663,0x4f,0x307,0x304,0x22f,0xe663,0x6f,0x307,
-0x304,0xe622,0x59,0x304,0xe622,0x79,0x304,0xe602,0xa8,0x301,0xe602,0x391,0x301,0xe602,0x395,0x301,
-0xe602,0x397,0x301,0xe602,0x399,0x301,0xe602,0x39f,0x301,0xe602,0x3a5,0x301,0xe602,0x3a9,0x301,0x3ca,
-0xe643,0x3b9,0x308,0x301,0xe602,0x399,0x308,0xe602,0x3a5,0x308,0xe602,0x3b5,0x301,0xe602,0x3b9,0x301,
-0x3cb,0xe643,0x3c5,0x308,0x301,0xe602,0x3bf,0x301,0xe602,0x3c5,0x301,0xe602,0x3d2,0x301,0xe602,0x3d2,
-0x308,0xe602,0x415,0x300,0xe602,0x415,0x308,0xe602,0x413,0x301,0xe602,0x406,0x308,0xe602,0x41a,0x301,
-0xe602,0x418,0x300,0xe602,0x423,0x306,0xe602,0x418,0x306,0xe602,0x438,0x306,0xe602,0x435,0x300,0xe602,
-0x435,0x308,0xe602,0x433,0x301,0xe602,0x456,0x308,0xe602,0x43a,0x301,0xe602,0x438,0x300,0xe602,0x443,
-0x306,0xe602,0x474,0x30f,0xe602,0x475,0x30f,0xe602,0x416,0x306,0xe602,0x436,0x306,0xe602,0x410,0x306,
-0xe602,0x430,0x306,0xe602,0x410,0x308,0xe602,0x430,0x308,0xe602,0x415,0x306,0xe602,0x435,0x306,0xe602,
-0x4d8,0x308,0xe602,0x4d9,0x308,0xe602,0x416,0x308,0xe602,0x436,0x308,0xe602,0x417,0x308,0xe602,0x437,
-0x308,0xe602,0x418,0x304,0xe602,0x438,0x304,0xe602,0x418,0x308,0xe602,0x438,0x308,0xe602,0x41e,0x308,
-0xe602,0x43e,0x308,0xe602,0x4e8,0x308,0xe602,0x4e9,0x308,0xe602,0x42d,0x308,0xe602,0x44d,0x308,0xe602,
-0x423,0x304,0xe602,0x443,0x304,0xe602,0x423,0x308,0xe602,0x443,0x308,0xe602,0x423,0x30b,0xe602,0x443,
-0x30b,0xe602,0x427,0x308,0xe602,0x447,0x308,0xe602,0x42b,0x308,0xe602,0x44b,0x308,0xe622,0x627,0x653,
-0xe622,0x627,0x654,0xe602,0x648,0x654,0xdc02,0x627,0x655,0xe602,0x64a,0x654,0xe602,0x6d5,0x654,0xe602,
-0x6c1,0x654,0xe602,0x6d2,0x654,0x702,0x928,0x93c,0x702,0x930,0x93c,0x702,0x933,0x93c,2,0x9c7,
-0x9be,2,0x9c7,0x9d7,2,0xb47,0xb56,2,0xb47,0xb3e,2,0xb47,0xb57,2,0xb92,0xbd7,
-2,0xbc6,0xbbe,2,0xbc7,0xbbe,2,0xbc6,0xbd7,0x5b02,0xc46,0xc56,2,0xcbf,0xcd5,2,
-0xcc6,0xcd5,2,0xcc6,0xcd6,0xcca,0x43,0xcc6,0xcc2,0xcd5,2,0xd46,0xd3e,2,0xd47,0xd3e,
-2,0xd46,0xd57,0x902,0xdd9,0xdca,0xddc,0x943,0xdd9,0xdcf,0xdca,2,0xdd9,0xddf,2,0x1025,
-0x102e,2,0x1b05,0x1b35,2,0x1b07,0x1b35,2,0x1b09,0x1b35,2,0x1b0b,0x1b35,2,0x1b0d,0x1b35,
-2,0x1b11,0x1b35,2,0x1b3a,0x1b35,2,0x1b3c,0x1b35,2,0x1b3e,0x1b35,2,0x1b3f,0x1b35,2,
-0x1b42,0x1b35,0xdc22,0x41,0x325,0xdc22,0x61,0x325,0xe622,0x42,0x307,0xe622,0x62,0x307,0xdc02,0x42,
-0x323,0xdc02,0x62,0x323,0xdc02,0x42,0x331,0xdc02,0x62,0x331,0xc7,0xe643,0x43,0x327,0x301,0xe7,
-0xe643,0x63,0x327,0x301,0xe622,0x44,0x307,0xe622,0x64,0x307,0xdc22,0x44,0x323,0xdc22,0x64,0x323,
-0xdc22,0x44,0x331,0xdc22,0x64,0x331,0xca02,0x44,0x327,0xca02,0x64,0x327,0xdc22,0x44,0x32d,0xdc22,
-0x64,0x32d,0x112,0xe663,0x45,0x304,0x300,0x113,0xe663,0x65,0x304,0x300,0x112,0xe663,0x45,0x304,
-0x301,0x113,0xe663,0x65,0x304,0x301,0xdc22,0x45,0x32d,0xdc22,0x65,0x32d,0xdc22,0x45,0x330,0xdc22,
-0x65,0x330,0x228,0xe643,0x45,0x327,0x306,0x229,0xe643,0x65,0x327,0x306,0xe602,0x46,0x307,0xe602,
-0x66,0x307,0xe622,0x47,0x304,0xe622,0x67,0x304,0xe622,0x48,0x307,0xe622,0x68,0x307,0xdc22,0x48,
-0x323,0xdc22,0x68,0x323,0xe622,0x48,0x308,0xe622,0x68,0x308,0xca02,0x48,0x327,0xca02,0x68,0x327,
-0xdc22,0x48,0x32e,0xdc22,0x68,0x32e,0xdc22,0x49,0x330,0xdc22,0x69,0x330,0xcf,0xe663,0x49,0x308,
-0x301,0xef,0xe663,0x69,0x308,0x301,0xe622,0x4b,0x301,0xe622,0x6b,0x301,0xdc22,0x4b,0x323,0xdc22,
-0x6b,0x323,0xdc22,0x4b,0x331,0xdc22,0x6b,0x331,0x1e36,0xe663,0x4c,0x323,0x304,0x1e37,0xe663,0x6c,
-0x323,0x304,0xdc22,0x4c,0x331,0xdc22,0x6c,0x331,0xdc22,0x4c,0x32d,0xdc22,0x6c,0x32d,0xe622,0x4d,
-0x301,0xe622,0x6d,0x301,0xe622,0x4d,0x307,0xe622,0x6d,0x307,0xdc02,0x4d,0x323,0xdc02,0x6d,0x323,
-0xe622,0x4e,0x307,0xe622,0x6e,0x307,0xdc22,0x4e,0x323,0xdc22,0x6e,0x323,0xdc22,0x4e,0x331,0xdc22,
-0x6e,0x331,0xdc22,0x4e,0x32d,0xdc22,0x6e,0x32d,0xd5,0xe663,0x4f,0x303,0x301,0xf5,0xe663,0x6f,
-0x303,0x301,0xd5,0xe663,0x4f,0x303,0x308,0xf5,0xe663,0x6f,0x303,0x308,0x14c,0xe663,0x4f,0x304,
-0x300,0x14d,0xe663,0x6f,0x304,0x300,0x14c,0xe663,0x4f,0x304,0x301,0x14d,0xe663,0x6f,0x304,0x301,
-0xe602,0x50,0x301,0xe602,0x70,0x301,0xe602,0x50,0x307,0xe602,0x70,0x307,0xe622,0x52,0x307,0xe622,
-0x72,0x307,0x1e5a,0xe663,0x52,0x323,0x304,0x1e5b,0xe663,0x72,0x323,0x304,0xdc22,0x52,0x331,0xdc22,
-0x72,0x331,0xe622,0x53,0x307,0xe622,0x73,0x307,0x15a,0xe663,0x53,0x301,0x307,0x15b,0xe663,0x73,
-0x301,0x307,0x160,0xe663,0x53,0x30c,0x307,0x161,0xe663,0x73,0x30c,0x307,0x1e62,0xe663,0x53,0x323,
-0x307,0x1e63,0xe663,0x73,0x323,0x307,0xe622,0x54,0x307,0xe622,0x74,0x307,0xdc22,0x54,0x323,0xdc22,
-0x74,0x323,0xdc22,0x54,0x331,0xdc22,0x74,0x331,0xdc22,0x54,0x32d,0xdc22,0x74,0x32d,0xdc22,0x55,
-0x324,0xdc22,0x75,0x324,0xdc22,0x55,0x330,0xdc22,0x75,0x330,0xdc22,0x55,0x32d,0xdc22,0x75,0x32d,
-0x168,0xe663,0x55,0x303,0x301,0x169,0xe663,0x75,0x303,0x301,0x16a,0xe663,0x55,0x304,0x308,0x16b,
-0xe663,0x75,0x304,0x308,0xe622,0x56,0x303,0xe622,0x76,0x303,0xdc02,0x56,0x323,0xdc02,0x76,0x323,
-0xe622,0x57,0x300,0xe622,0x77,0x300,0xe622,0x57,0x301,0xe622,0x77,0x301,0xe622,0x57,0x308,0xe622,
-0x77,0x308,0xe622,0x57,0x307,0xe622,0x77,0x307,0xdc02,0x57,0x323,0xdc02,0x77,0x323,0xe602,0x58,
-0x307,0xe602,0x78,0x307,0xe602,0x58,0x308,0xe602,0x78,0x308,0xe622,0x59,0x307,0xe622,0x79,0x307,
-0xe622,0x5a,0x302,0xe622,0x7a,0x302,0xdc02,0x5a,0x323,0xdc02,0x7a,0x323,0xdc02,0x5a,0x331,0xdc02,
-0x7a,0x331,0xdc22,0x68,0x331,0xe622,0x74,0x308,0xe622,0x77,0x30a,0xe622,0x79,0x30a,0xe602,0x17f,
-0x307,0xe622,0x41,0x309,0xe622,0x61,0x309,0xc2,0xe663,0x41,0x302,0x301,0xe2,0xe663,0x61,0x302,
-0x301,0xc2,0xe663,0x41,0x302,0x300,0xe2,0xe663,0x61,0x302,0x300,0xc2,0xe663,0x41,0x302,0x309,
-0xe2,0xe663,0x61,0x302,0x309,0xc2,0xe663,0x41,0x302,0x303,0xe2,0xe663,0x61,0x302,0x303,0x1ea0,
-0xe663,0x41,0x323,0x302,0x1ea1,0xe663,0x61,0x323,0x302,0x102,0xe663,0x41,0x306,0x301,0x103,0xe663,
-0x61,0x306,0x301,0x102,0xe663,0x41,0x306,0x300,0x103,0xe663,0x61,0x306,0x300,0x102,0xe663,0x41,
-0x306,0x309,0x103,0xe663,0x61,0x306,0x309,0x102,0xe663,0x41,0x306,0x303,0x103,0xe663,0x61,0x306,
-0x303,0x1ea0,0xe663,0x41,0x323,0x306,0x1ea1,0xe663,0x61,0x323,0x306,0xe622,0x45,0x309,0xe622,0x65,
-0x309,0xe622,0x45,0x303,0xe622,0x65,0x303,0xca,0xe663,0x45,0x302,0x301,0xea,0xe663,0x65,0x302,
-0x301,0xca,0xe663,0x45,0x302,0x300,0xea,0xe663,0x65,0x302,0x300,0xca,0xe663,0x45,0x302,0x309,
-0xea,0xe663,0x65,0x302,0x309,0xca,0xe663,0x45,0x302,0x303,0xea,0xe663,0x65,0x302,0x303,0x1eb8,
-0xe663,0x45,0x323,0x302,0x1eb9,0xe663,0x65,0x323,0x302,0xe622,0x49,0x309,0xe622,0x69,0x309,0xdc22,
-0x49,0x323,0xdc22,0x69,0x323,0xe622,0x4f,0x309,0xe622,0x6f,0x309,0xd4,0xe663,0x4f,0x302,0x301,
-0xf4,0xe663,0x6f,0x302,0x301,0xd4,0xe663,0x4f,0x302,0x300,0xf4,0xe663,0x6f,0x302,0x300,0xd4,
-0xe663,0x4f,0x302,0x309,0xf4,0xe663,0x6f,0x302,0x309,0xd4,0xe663,0x4f,0x302,0x303,0xf4,0xe663,
-0x6f,0x302,0x303,0x1ecc,0xe663,0x4f,0x323,0x302,0x1ecd,0xe663,0x6f,0x323,0x302,0x1a0,0xe663,0x4f,
-0x31b,0x301,0x1a1,0xe663,0x6f,0x31b,0x301,0x1a0,0xe663,0x4f,0x31b,0x300,0x1a1,0xe663,0x6f,0x31b,
-0x300,0x1a0,0xe663,0x4f,0x31b,0x309,0x1a1,0xe663,0x6f,0x31b,0x309,0x1a0,0xe663,0x4f,0x31b,0x303,
-0x1a1,0xe663,0x6f,0x31b,0x303,0x1a0,0xdc63,0x4f,0x31b,0x323,0x1a1,0xdc63,0x6f,0x31b,0x323,0xdc22,
-0x55,0x323,0xdc22,0x75,0x323,0xe622,0x55,0x309,0xe622,0x75,0x309,0x1af,0xe663,0x55,0x31b,0x301,
-0x1b0,0xe663,0x75,0x31b,0x301,0x1af,0xe663,0x55,0x31b,0x300,0x1b0,0xe663,0x75,0x31b,0x300,0x1af,
-0xe663,0x55,0x31b,0x309,0x1b0,0xe663,0x75,0x31b,0x309,0x1af,0xe663,0x55,0x31b,0x303,0x1b0,0xe663,
-0x75,0x31b,0x303,0x1af,0xdc63,0x55,0x31b,0x323,0x1b0,0xdc63,0x75,0x31b,0x323,0xe622,0x59,0x300,
-0xe622,0x79,0x300,0xdc02,0x59,0x323,0xdc02,0x79,0x323,0xe622,0x59,0x309,0xe622,0x79,0x309,0xe622,
-0x59,0x303,0xe622,0x79,0x303,0x1f10,0xe643,0x3b5,0x313,0x300,0x1f11,0xe643,0x3b5,0x314,0x300,0x1f10,
-0xe643,0x3b5,0x313,0x301,0x1f11,0xe643,0x3b5,0x314,0x301,0x1f18,0xe643,0x395,0x313,0x300,0x1f19,0xe643,
-0x395,0x314,0x300,0x1f18,0xe643,0x395,0x313,0x301,0x1f19,0xe643,0x395,0x314,0x301,0x1f30,0xe643,0x3b9,
-0x313,0x300,0x1f31,0xe643,0x3b9,0x314,0x300,0x1f30,0xe643,0x3b9,0x313,0x301,0x1f31,0xe643,0x3b9,0x314,
-0x301,0x1f30,0xe643,0x3b9,0x313,0x342,0x1f31,0xe643,0x3b9,0x314,0x342,0x1f38,0xe643,0x399,0x313,0x300,
-0x1f39,0xe643,0x399,0x314,0x300,0x1f38,0xe643,0x399,0x313,0x301,0x1f39,0xe643,0x399,0x314,0x301,0x1f38,
-0xe643,0x399,0x313,0x342,0x1f39,0xe643,0x399,0x314,0x342,0x1f40,0xe643,0x3bf,0x313,0x300,0x1f41,0xe643,
-0x3bf,0x314,0x300,0x1f40,0xe643,0x3bf,0x313,0x301,0x1f41,0xe643,0x3bf,0x314,0x301,0x1f48,0xe643,0x39f,
-0x313,0x300,0x1f49,0xe643,0x39f,0x314,0x300,0x1f48,0xe643,0x39f,0x313,0x301,0x1f49,0xe643,0x39f,0x314,
-0x301,0x1f50,0xe643,0x3c5,0x313,0x300,0x1f51,0xe643,0x3c5,0x314,0x300,0x1f50,0xe643,0x3c5,0x313,0x301,
-0x1f51,0xe643,0x3c5,0x314,0x301,0x1f50,0xe643,0x3c5,0x313,0x342,0x1f51,0xe643,0x3c5,0x314,0x342,0x1f59,
-0xe643,0x3a5,0x314,0x300,0x1f59,0xe643,0x3a5,0x314,0x301,0x1f59,0xe643,0x3a5,0x314,0x342,0xe602,0x3b5,
-0x300,0xe602,0x3b9,0x300,0xe602,0x3bf,0x300,0xe602,0x3c5,0x300,0x1f00,0xf063,0x3b1,0x313,0x345,0x1f01,
-0xf063,0x3b1,0x314,0x345,0x1f02,0x345,2,0xf044,0x3b1,0x313,0x300,0x345,0x1f03,0x345,2,0xf044,
-0x3b1,0x314,0x300,0x345,0x1f04,0x345,2,0xf044,0x3b1,0x313,0x301,0x345,0x1f05,0x345,2,0xf044,
-0x3b1,0x314,0x301,0x345,0x1f06,0x345,2,0xf044,0x3b1,0x313,0x342,0x345,0x1f07,0x345,2,0xf044,
-0x3b1,0x314,0x342,0x345,0x1f08,0xf063,0x391,0x313,0x345,0x1f09,0xf063,0x391,0x314,0x345,0x1f0a,0x345,
-2,0xf044,0x391,0x313,0x300,0x345,0x1f0b,0x345,2,0xf044,0x391,0x314,0x300,0x345,0x1f0c,0x345,
-2,0xf044,0x391,0x313,0x301,0x345,0x1f0d,0x345,2,0xf044,0x391,0x314,0x301,0x345,0x1f0e,0x345,
-2,0xf044,0x391,0x313,0x342,0x345,0x1f0f,0x345,2,0xf044,0x391,0x314,0x342,0x345,0x1f20,0xf063,
-0x3b7,0x313,0x345,0x1f21,0xf063,0x3b7,0x314,0x345,0x1f22,0x345,2,0xf044,0x3b7,0x313,0x300,0x345,
-0x1f23,0x345,2,0xf044,0x3b7,0x314,0x300,0x345,0x1f24,0x345,2,0xf044,0x3b7,0x313,0x301,0x345,
-0x1f25,0x345,2,0xf044,0x3b7,0x314,0x301,0x345,0x1f26,0x345,2,0xf044,0x3b7,0x313,0x342,0x345,
-0x1f27,0x345,2,0xf044,0x3b7,0x314,0x342,0x345,0x1f28,0xf063,0x397,0x313,0x345,0x1f29,0xf063,0x397,
-0x314,0x345,0x1f2a,0x345,2,0xf044,0x397,0x313,0x300,0x345,0x1f2b,0x345,2,0xf044,0x397,0x314,
-0x300,0x345,0x1f2c,0x345,2,0xf044,0x397,0x313,0x301,0x345,0x1f2d,0x345,2,0xf044,0x397,0x314,
-0x301,0x345,0x1f2e,0x345,2,0xf044,0x397,0x313,0x342,0x345,0x1f2f,0x345,2,0xf044,0x397,0x314,
-0x342,0x345,0x1f60,0xf063,0x3c9,0x313,0x345,0x1f61,0xf063,0x3c9,0x314,0x345,0x1f62,0x345,2,0xf044,
-0x3c9,0x313,0x300,0x345,0x1f63,0x345,2,0xf044,0x3c9,0x314,0x300,0x345,0x1f64,0x345,2,0xf044,
-0x3c9,0x313,0x301,0x345,0x1f65,0x345,2,0xf044,0x3c9,0x314,0x301,0x345,0x1f66,0x345,2,0xf044,
-0x3c9,0x313,0x342,0x345,0x1f67,0x345,2,0xf044,0x3c9,0x314,0x342,0x345,0x1f68,0xf063,0x3a9,0x313,
-0x345,0x1f69,0xf063,0x3a9,0x314,0x345,0x1f6a,0x345,2,0xf044,0x3a9,0x313,0x300,0x345,0x1f6b,0x345,
-2,0xf044,0x3a9,0x314,0x300,0x345,0x1f6c,0x345,2,0xf044,0x3a9,0x313,0x301,0x345,0x1f6d,0x345,
-2,0xf044,0x3a9,0x314,0x301,0x345,0x1f6e,0x345,2,0xf044,0x3a9,0x313,0x342,0x345,0x1f6f,0x345,
-2,0xf044,0x3a9,0x314,0x342,0x345,0xe602,0x3b1,0x306,0xe602,0x3b1,0x304,0x1f70,0xf043,0x3b1,0x300,
-0x345,0xf022,0x3b1,0x345,0x3ac,0xf043,0x3b1,0x301,0x345,0x1fb6,0xf043,0x3b1,0x342,0x345,0xe602,0x391,
-0x306,0xe602,0x391,0x304,0xe602,0x391,0x300,0xf022,0x391,0x345,0xe602,0xa8,0x342,0x1f74,0xf043,0x3b7,
-0x300,0x345,0xf022,0x3b7,0x345,0x3ae,0xf043,0x3b7,0x301,0x345,0x1fc6,0xf043,0x3b7,0x342,0x345,0xe602,
-0x395,0x300,0xe602,0x397,0x300,0xf022,0x397,0x345,0xe602,0x1fbf,0x300,0xe602,0x1fbf,0x301,0xe602,0x1fbf,
-0x342,0xe602,0x3b9,0x306,0xe602,0x3b9,0x304,0x3ca,0xe643,0x3b9,0x308,0x300,0xe602,0x3b9,0x342,0x3ca,
-0xe643,0x3b9,0x308,0x342,0xe602,0x399,0x306,0xe602,0x399,0x304,0xe602,0x399,0x300,0xe602,0x1ffe,0x300,
-0xe602,0x1ffe,0x301,0xe602,0x1ffe,0x342,0xe602,0x3c5,0x306,0xe602,0x3c5,0x304,0x3cb,0xe643,0x3c5,0x308,
-0x300,0xe602,0x3c1,0x313,0xe602,0x3c1,0x314,0xe602,0x3c5,0x342,0x3cb,0xe643,0x3c5,0x308,0x342,0xe602,
-0x3a5,0x306,0xe602,0x3a5,0x304,0xe602,0x3a5,0x300,0xe602,0x3a1,0x314,0xe602,0xa8,0x300,0x1f7c,0xf043,
-0x3c9,0x300,0x345,0xf022,0x3c9,0x345,0x3ce,0xf043,0x3c9,0x301,0x345,0x1ff6,0xf043,0x3c9,0x342,0x345,
-0xe602,0x39f,0x300,0xe602,0x3a9,0x300,0xf022,0x3a9,0x345,0x102,0x2190,0x338,0x102,0x2192,0x338,0x102,
-0x2194,0x338,0x102,0x21d0,0x338,0x102,0x21d4,0x338,0x102,0x21d2,0x338,0x102,0x2203,0x338,0x102,0x2208,
-0x338,0x102,0x220b,0x338,0x102,0x2223,0x338,0x102,0x2225,0x338,0x102,0x223c,0x338,0x102,0x2243,0x338,
-0x102,0x2245,0x338,0x102,0x2248,0x338,0x102,0x3d,0x338,0x102,0x2261,0x338,0x102,0x224d,0x338,0x102,
-0x3c,0x338,0x102,0x3e,0x338,0x102,0x2264,0x338,0x102,0x2265,0x338,0x102,0x2272,0x338,0x102,0x2273,
-0x338,0x102,0x2276,0x338,0x102,0x2277,0x338,0x102,0x227a,0x338,0x102,0x227b,0x338,0x102,0x2282,0x338,
-0x102,0x2283,0x338,0x102,0x2286,0x338,0x102,0x2287,0x338,0x102,0x22a2,0x338,0x102,0x22a8,0x338,0x102,
-0x22a9,0x338,0x102,0x22ab,0x338,0x102,0x227c,0x338,0x102,0x227d,0x338,0x102,0x2291,0x338,0x102,0x2292,
-0x338,0x102,0x22b2,0x338,0x102,0x22b3,0x338,0x102,0x22b4,0x338,0x102,0x22b5,0x338,0x802,0x304b,0x3099,
-0x802,0x304d,0x3099,0x802,0x304f,0x3099,0x802,0x3051,0x3099,0x802,0x3053,0x3099,0x802,0x3055,0x3099,0x802,
-0x3057,0x3099,0x802,0x3059,0x3099,0x802,0x305b,0x3099,0x802,0x305d,0x3099,0x802,0x305f,0x3099,0x802,0x3061,
-0x3099,0x802,0x3064,0x3099,0x802,0x3066,0x3099,0x802,0x3068,0x3099,0x802,0x306f,0x3099,0x802,0x306f,0x309a,
-0x802,0x3072,0x3099,0x802,0x3072,0x309a,0x802,0x3075,0x3099,0x802,0x3075,0x309a,0x802,0x3078,0x3099,0x802,
-0x3078,0x309a,0x802,0x307b,0x3099,0x802,0x307b,0x309a,0x802,0x3046,0x3099,0x802,0x309d,0x3099,0x802,0x30ab,
-0x3099,0x802,0x30ad,0x3099,0x802,0x30af,0x3099,0x802,0x30b1,0x3099,0x802,0x30b3,0x3099,0x802,0x30b5,0x3099,
-0x802,0x30b7,0x3099,0x802,0x30b9,0x3099,0x802,0x30bb,0x3099,0x802,0x30bd,0x3099,0x802,0x30bf,0x3099,0x802,
-0x30c1,0x3099,0x802,0x30c4,0x3099,0x802,0x30c6,0x3099,0x802,0x30c8,0x3099,0x802,0x30cf,0x3099,0x802,0x30cf,
-0x309a,0x802,0x30d2,0x3099,0x802,0x30d2,0x309a,0x802,0x30d5,0x3099,0x802,0x30d5,0x309a,0x802,0x30d8,0x3099,
-0x802,0x30d8,0x309a,0x802,0x30db,0x3099,0x802,0x30db,0x309a,0x802,0x30a6,0x3099,0x802,0x30ef,0x3099,0x802,
-0x30f0,0x3099,0x802,0x30f1,0x3099,0x802,0x30f2,0x3099,0x802,0x30fd,0x3099,0x704,0xd804,0xdc99,0xd804,0xdcba,
-0x704,0xd804,0xdc9b,0xd804,0xdcba,0x704,0xd804,0xdca5,0xd804,0xdcba,4,0xd804,0xdd31,0xd804,0xdd27,4,
-0xd804,0xdd32,0xd804,0xdd27,4,0xd804,0xdf47,0xd804,0xdf3e,4,0xd804,0xdf47,0xd804,0xdf57,4,0xd805,
-0xdcb9,0xd805,0xdcba,4,0xd805,0xdcb9,0xd805,0xdcb0,4,0xd805,0xdcb9,0xd805,0xdcbd,4,0xd805,0xddb8,
-0xd805,0xddaf,4,0xd805,0xddb9,0xd805,0xddaf,0xe6e6,0xe6a1,0x300,0xe6e6,0xe6a1,0x301,0xe6e6,0xe6a1,0x313,
-0xe6e6,0xe6a2,0x308,0x301,1,0x2b9,1,0x3b,1,0xb7,0x702,0x915,0x93c,0x702,0x916,0x93c,
-0x702,0x917,0x93c,0x702,0x91c,0x93c,0x702,0x921,0x93c,0x702,0x922,0x93c,0x702,0x92b,0x93c,0x702,
-0x92f,0x93c,0x702,0x9a1,0x9bc,0x702,0x9a2,0x9bc,0x702,0x9af,0x9bc,0x702,0xa32,0xa3c,0x702,0xa38,
-0xa3c,0x702,0xa16,0xa3c,0x702,0xa17,0xa3c,0x702,0xa1c,0xa3c,0x702,0xa2b,0xa3c,0x702,0xb21,0xb3c,
-0x702,0xb22,0xb3c,2,0xf42,0xfb7,2,0xf4c,0xfb7,2,0xf51,0xfb7,2,0xf56,0xfb7,2,
-0xf5b,0xfb7,2,0xf40,0xfb5,0x8100,0x82a2,0xf71,0xf72,0x8100,0x84a2,0xf71,0xf74,0x8202,0xfb2,0xf80,
-0x8202,0xfb3,0xf80,0x8100,0x82a2,0xf71,0xf80,2,0xf92,0xfb7,2,0xf9c,0xfb7,2,0xfa1,0xfb7,
-2,0xfa6,0xfb7,2,0xfab,0xfb7,2,0xf90,0xfb5,0x3ac,0xe662,0x3b1,0x301,0x3ad,0xe642,0x3b5,
-0x301,0x3ae,0xe662,0x3b7,0x301,0x3af,0xe642,0x3b9,0x301,0x3cc,0xe642,0x3bf,0x301,0x3cd,0xe642,0x3c5,
-0x301,0x3ce,0xe662,0x3c9,0x301,0x386,0xe642,0x391,0x301,0x21,0x3b9,0x388,0xe642,0x395,0x301,0x389,
-0xe642,0x397,0x301,0x390,1,0xe643,0x3b9,0x308,0x301,0x38a,0xe642,0x399,0x301,0x3b0,1,0xe643,
-0x3c5,0x308,0x301,0x38e,0xe642,0x3a5,0x301,0x385,0xe642,0xa8,0x301,1,0x60,0x38c,0xe642,0x39f,
-0x301,0x38f,0xe642,0x3a9,0x301,1,0xb4,0x21,0x3a9,0x21,0x4b,0xc5,0xe662,0x41,0x30a,1,
-0x3008,1,0x3009,0x102,0x2add,0x338,1,0x8c48,1,0x66f4,1,0x8eca,1,0x8cc8,1,0x6ed1,
-1,0x4e32,1,0x53e5,1,0x9f9c,1,0x5951,1,0x91d1,1,0x5587,1,0x5948,1,0x61f6,
-1,0x7669,1,0x7f85,1,0x863f,1,0x87ba,1,0x88f8,1,0x908f,1,0x6a02,1,0x6d1b,
-1,0x70d9,1,0x73de,1,0x843d,1,0x916a,1,0x99f1,1,0x4e82,1,0x5375,1,0x6b04,
-1,0x721b,1,0x862d,1,0x9e1e,1,0x5d50,1,0x6feb,1,0x85cd,1,0x8964,1,0x62c9,
-1,0x81d8,1,0x881f,1,0x5eca,1,0x6717,1,0x6d6a,1,0x72fc,1,0x90ce,1,0x4f86,
-1,0x51b7,1,0x52de,1,0x64c4,1,0x6ad3,1,0x7210,1,0x76e7,1,0x8001,1,0x8606,
-1,0x865c,1,0x8def,1,0x9732,1,0x9b6f,1,0x9dfa,1,0x788c,1,0x797f,1,0x7da0,
-1,0x83c9,1,0x9304,1,0x9e7f,1,0x8ad6,1,0x58df,1,0x5f04,1,0x7c60,1,0x807e,
-1,0x7262,1,0x78ca,1,0x8cc2,1,0x96f7,1,0x58d8,1,0x5c62,1,0x6a13,1,0x6dda,
-1,0x6f0f,1,0x7d2f,1,0x7e37,1,0x964b,1,0x52d2,1,0x808b,1,0x51dc,1,0x51cc,
-1,0x7a1c,1,0x7dbe,1,0x83f1,1,0x9675,1,0x8b80,1,0x62cf,1,0x8afe,1,0x4e39,
-1,0x5be7,1,0x6012,1,0x7387,1,0x7570,1,0x5317,1,0x78fb,1,0x4fbf,1,0x5fa9,
-1,0x4e0d,1,0x6ccc,1,0x6578,1,0x7d22,1,0x53c3,1,0x585e,1,0x7701,1,0x8449,
-1,0x8aaa,1,0x6bba,1,0x8fb0,1,0x6c88,1,0x62fe,1,0x82e5,1,0x63a0,1,0x7565,
-1,0x4eae,1,0x5169,1,0x51c9,1,0x6881,1,0x7ce7,1,0x826f,1,0x8ad2,1,0x91cf,
-1,0x52f5,1,0x5442,1,0x5973,1,0x5eec,1,0x65c5,1,0x6ffe,1,0x792a,1,0x95ad,
-1,0x9a6a,1,0x9e97,1,0x9ece,1,0x529b,1,0x66c6,1,0x6b77,1,0x8f62,1,0x5e74,
-1,0x6190,1,0x6200,1,0x649a,1,0x6f23,1,0x7149,1,0x7489,1,0x79ca,1,0x7df4,
-1,0x806f,1,0x8f26,1,0x84ee,1,0x9023,1,0x934a,1,0x5217,1,0x52a3,1,0x54bd,
-1,0x70c8,1,0x88c2,1,0x5ec9,1,0x5ff5,1,0x637b,1,0x6bae,1,0x7c3e,1,0x7375,
-1,0x4ee4,1,0x56f9,1,0x5dba,1,0x601c,1,0x73b2,1,0x7469,1,0x7f9a,1,0x8046,
-1,0x9234,1,0x96f6,1,0x9748,1,0x9818,1,0x4f8b,1,0x79ae,1,0x91b4,1,0x96b8,
-1,0x60e1,1,0x4e86,1,0x50da,1,0x5bee,1,0x5c3f,1,0x6599,1,0x71ce,1,0x7642,
-1,0x84fc,1,0x907c,1,0x9f8d,1,0x6688,1,0x962e,1,0x5289,1,0x677b,1,0x67f3,
-1,0x6d41,1,0x6e9c,1,0x7409,1,0x7559,1,0x786b,1,0x7d10,1,0x985e,1,0x516d,
-1,0x622e,1,0x9678,1,0x502b,1,0x5d19,1,0x6dea,1,0x8f2a,1,0x5f8b,1,0x6144,
-1,0x6817,1,0x9686,1,0x5229,1,0x540f,1,0x5c65,1,0x6613,1,0x674e,1,0x68a8,
-1,0x6ce5,1,0x7406,1,0x75e2,1,0x7f79,1,0x88cf,1,0x88e1,1,0x91cc,1,0x96e2,
-1,0x533f,1,0x6eba,1,0x541d,1,0x71d0,1,0x7498,1,0x85fa,1,0x96a3,1,0x9c57,
-1,0x9e9f,1,0x6797,1,0x6dcb,1,0x81e8,1,0x7acb,1,0x7b20,1,0x7c92,1,0x72c0,
-1,0x7099,1,0x8b58,1,0x4ec0,1,0x8336,1,0x523a,1,0x5207,1,0x5ea6,1,0x62d3,
-1,0x7cd6,1,0x5b85,1,0x6d1e,1,0x66b4,1,0x8f3b,1,0x884c,1,0x964d,1,0x898b,
-1,0x5ed3,1,0x5140,1,0x55c0,1,0x585a,1,0x6674,1,0x51de,1,0x732a,1,0x76ca,
-1,0x793c,1,0x795e,1,0x7965,1,0x798f,1,0x9756,1,0x7cbe,1,0x7fbd,1,0x8612,
-1,0x8af8,1,0x9038,1,0x90fd,1,0x98ef,1,0x98fc,1,0x9928,1,0x9db4,1,0x90de,
-1,0x96b7,1,0x4fae,1,0x50e7,1,0x514d,1,0x52c9,1,0x52e4,1,0x5351,1,0x559d,
-1,0x5606,1,0x5668,1,0x5840,1,0x58a8,1,0x5c64,1,0x5c6e,1,0x6094,1,0x6168,
-1,0x618e,1,0x61f2,1,0x654f,1,0x65e2,1,0x6691,1,0x6885,1,0x6d77,1,0x6e1a,
-1,0x6f22,1,0x716e,1,0x722b,1,0x7422,1,0x7891,1,0x793e,1,0x7949,1,0x7948,
-1,0x7950,1,0x7956,1,0x795d,1,0x798d,1,0x798e,1,0x7a40,1,0x7a81,1,0x7bc0,
-1,0x7e09,1,0x7e41,1,0x7f72,1,0x8005,1,0x81ed,1,0x8279,1,0x8457,1,0x8910,
-1,0x8996,1,0x8b01,1,0x8b39,1,0x8cd3,1,0x8d08,1,0x8fb6,1,0x96e3,1,0x97ff,
-1,0x983b,1,0x6075,2,0xd850,0xdeee,1,0x8218,1,0x4e26,1,0x51b5,1,0x5168,1,
-0x4f80,1,0x5145,1,0x5180,1,0x52c7,1,0x52fa,1,0x5555,1,0x5599,1,0x55e2,1,
-0x58b3,1,0x5944,1,0x5954,1,0x5a62,1,0x5b28,1,0x5ed2,1,0x5ed9,1,0x5f69,1,
-0x5fad,1,0x60d8,1,0x614e,1,0x6108,1,0x6160,1,0x6234,1,0x63c4,1,0x641c,1,
-0x6452,1,0x6556,1,0x671b,1,0x6756,1,0x6b79,1,0x6edb,1,0x6ecb,1,0x701e,1,
-0x77a7,1,0x7235,1,0x72af,1,0x7471,1,0x7506,1,0x753b,1,0x761d,1,0x761f,1,
-0x76db,1,0x76f4,1,0x774a,1,0x7740,1,0x78cc,1,0x7ab1,1,0x7c7b,1,0x7d5b,1,
-0x7f3e,1,0x8352,1,0x83ef,1,0x8779,1,0x8941,1,0x8986,1,0x8abf,1,0x8acb,1,
-0x8aed,1,0x8b8a,1,0x8f38,1,0x9072,1,0x9199,1,0x9276,1,0x967c,1,0x97db,1,
-0x980b,1,0x9b12,2,0xd84a,0xdc4a,2,0xd84a,0xdc44,2,0xd84c,0xdfd5,1,0x3b9d,1,0x4018,
-1,0x4039,2,0xd854,0xde49,2,0xd857,0xdcd0,2,0xd85f,0xded3,1,0x9f43,1,0x9f8e,0xe02,
-0x5d9,0x5b4,0x1102,0x5f2,0x5b7,0x1802,0x5e9,0x5c1,0x1902,0x5e9,0x5c2,0xfb49,0x1843,0x5e9,0x5bc,0x5c1,
-0xfb49,0x1943,0x5e9,0x5bc,0x5c2,0x1102,0x5d0,0x5b7,0x1202,0x5d0,0x5b8,0x1502,0x5d0,0x5bc,0x1502,0x5d1,
-0x5bc,0x1502,0x5d2,0x5bc,0x1502,0x5d3,0x5bc,0x1502,0x5d4,0x5bc,0x1502,0x5d5,0x5bc,0x1502,0x5d6,0x5bc,
-0x1502,0x5d8,0x5bc,0x1502,0x5d9,0x5bc,0x1502,0x5da,0x5bc,0x1502,0x5db,0x5bc,0x1502,0x5dc,0x5bc,0x1502,
-0x5de,0x5bc,0x1502,0x5e0,0x5bc,0x1502,0x5e1,0x5bc,0x1502,0x5e3,0x5bc,0x1502,0x5e4,0x5bc,0x1502,0x5e6,
-0x5bc,0x1502,0x5e7,0x5bc,0x1502,0x5e8,0x5bc,0x1502,0x5e9,0x5bc,0x1502,0x5ea,0x5bc,0x1302,0x5d5,0x5b9,
-0x1702,0x5d1,0x5bf,0x1702,0x5db,0x5bf,0x1702,0x5e4,0x5bf,0xd804,0xd834,0xdd57,0xd834,0xdd65,0xd804,0xd834,
-0xdd58,0xd834,0xdd65,0xd834,0xdd5f,0xd834,0xdd6e,4,0xd846,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd6e,0xd834,
-0xdd5f,0xd834,0xdd6f,4,0xd846,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd6f,0xd834,0xdd5f,0xd834,0xdd70,4,
-0xd846,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd70,0xd834,0xdd5f,0xd834,0xdd71,4,0xd846,0xd834,0xdd58,0xd834,
-0xdd65,0xd834,0xdd71,0xd834,0xdd5f,0xd834,0xdd72,4,0xd846,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd72,0xd804,
-0xd834,0xddb9,0xd834,0xdd65,0xd804,0xd834,0xddba,0xd834,0xdd65,0xd834,0xddbb,0xd834,0xdd6e,4,0xd846,0xd834,
-0xddb9,0xd834,0xdd65,0xd834,0xdd6e,0xd834,0xddbc,0xd834,0xdd6e,4,0xd846,0xd834,0xddba,0xd834,0xdd65,0xd834,
-0xdd6e,0xd834,0xddbb,0xd834,0xdd6f,4,0xd846,0xd834,0xddb9,0xd834,0xdd65,0xd834,0xdd6f,0xd834,0xddbc,0xd834,
-0xdd6f,4,0xd846,0xd834,0xddba,0xd834,0xdd65,0xd834,0xdd6f,1,0x4e3d,1,0x4e38,1,0x4e41,2,
-0xd840,0xdd22,1,0x4f60,1,0x4fbb,1,0x5002,1,0x507a,1,0x5099,1,0x50cf,1,0x349e,
-2,0xd841,0xde3a,1,0x5154,1,0x5164,1,0x5177,2,0xd841,0xdd1c,1,0x34b9,1,0x5167,
-1,0x518d,2,0xd841,0xdd4b,1,0x5197,1,0x51a4,1,0x4ecc,1,0x51ac,2,0xd864,0xdddf,
-1,0x51f5,1,0x5203,1,0x34df,1,0x523b,1,0x5246,1,0x5272,1,0x5277,1,0x3515,
-1,0x5305,1,0x5306,1,0x5349,1,0x535a,1,0x5373,1,0x537d,1,0x537f,2,0xd842,
-0xde2c,1,0x7070,1,0x53ca,1,0x53df,2,0xd842,0xdf63,1,0x53eb,1,0x53f1,1,0x5406,
-1,0x549e,1,0x5438,1,0x5448,1,0x5468,1,0x54a2,1,0x54f6,1,0x5510,1,0x5553,
-1,0x5563,1,0x5584,1,0x55ab,1,0x55b3,1,0x55c2,1,0x5716,1,0x5717,1,0x5651,
-1,0x5674,1,0x58ee,1,0x57ce,1,0x57f4,1,0x580d,1,0x578b,1,0x5832,1,0x5831,
-1,0x58ac,2,0xd845,0xdce4,1,0x58f2,1,0x58f7,1,0x5906,1,0x591a,1,0x5922,1,
-0x5962,2,0xd845,0xdea8,2,0xd845,0xdeea,1,0x59ec,1,0x5a1b,1,0x5a27,1,0x59d8,1,
-0x5a66,1,0x36ee,1,0x36fc,1,0x5b08,1,0x5b3e,2,0xd846,0xddc8,1,0x5bc3,1,0x5bd8,
-1,0x5bf3,2,0xd846,0xdf18,1,0x5bff,1,0x5c06,1,0x5f53,1,0x5c22,1,0x3781,1,
-0x5c60,1,0x5cc0,1,0x5c8d,2,0xd847,0xdde4,1,0x5d43,2,0xd847,0xdde6,1,0x5d6e,1,
-0x5d6b,1,0x5d7c,1,0x5de1,1,0x5de2,1,0x382f,1,0x5dfd,1,0x5e28,1,0x5e3d,1,
-0x5e69,1,0x3862,2,0xd848,0xdd83,1,0x387c,1,0x5eb0,1,0x5eb3,1,0x5eb6,2,0xd868,
-0xdf92,1,0x5efe,2,0xd848,0xdf31,1,0x8201,1,0x5f22,1,0x38c7,2,0xd84c,0xdeb8,2,
-0xd858,0xddda,1,0x5f62,1,0x5f6b,1,0x38e3,1,0x5f9a,1,0x5fcd,1,0x5fd7,1,0x5ff9,
-1,0x6081,1,0x393a,1,0x391c,2,0xd849,0xded4,1,0x60c7,1,0x6148,1,0x614c,1,
-0x617a,1,0x61b2,1,0x61a4,1,0x61af,1,0x61de,1,0x6210,1,0x621b,1,0x625d,1,
-0x62b1,1,0x62d4,1,0x6350,2,0xd84a,0xdf0c,1,0x633d,1,0x62fc,1,0x6368,1,0x6383,
-1,0x63e4,2,0xd84a,0xdff1,1,0x6422,1,0x63c5,1,0x63a9,1,0x3a2e,1,0x6469,1,
-0x647e,1,0x649d,1,0x6477,1,0x3a6c,1,0x656c,2,0xd84c,0xdc0a,1,0x65e3,1,0x66f8,
-1,0x6649,1,0x3b19,1,0x3b08,1,0x3ae4,1,0x5192,1,0x5195,1,0x6700,1,0x669c,
-1,0x80ad,1,0x43d9,1,0x6721,1,0x675e,1,0x6753,2,0xd84c,0xdfc3,1,0x3b49,1,
-0x67fa,1,0x6785,1,0x6852,2,0xd84d,0xdc6d,1,0x688e,1,0x681f,1,0x6914,1,0x6942,
-1,0x69a3,1,0x69ea,1,0x6aa8,2,0xd84d,0xdea3,1,0x6adb,1,0x3c18,1,0x6b21,2,
-0xd84e,0xdca7,1,0x6b54,1,0x3c4e,1,0x6b72,1,0x6b9f,1,0x6bbb,2,0xd84e,0xde8d,2,
-0xd847,0xdd0b,2,0xd84e,0xdefa,1,0x6c4e,2,0xd84f,0xdcbc,1,0x6cbf,1,0x6ccd,1,0x6c67,
-1,0x6d16,1,0x6d3e,1,0x6d69,1,0x6d78,1,0x6d85,2,0xd84f,0xdd1e,1,0x6d34,1,
-0x6e2f,1,0x6e6e,1,0x3d33,1,0x6ec7,2,0xd84f,0xded1,1,0x6df9,1,0x6f6e,2,0xd84f,
-0xdf5e,2,0xd84f,0xdf8e,1,0x6fc6,1,0x7039,1,0x701b,1,0x3d96,1,0x704a,1,0x707d,
-1,0x7077,1,0x70ad,2,0xd841,0xdd25,1,0x7145,2,0xd850,0xde63,1,0x719c,2,0xd850,
-0xdfab,1,0x7228,1,0x7250,2,0xd851,0xde08,1,0x7280,1,0x7295,2,0xd851,0xdf35,2,
-0xd852,0xdc14,1,0x737a,1,0x738b,1,0x3eac,1,0x73a5,1,0x3eb8,1,0x7447,1,0x745c,
-1,0x7485,1,0x74ca,1,0x3f1b,1,0x7524,2,0xd853,0xdc36,1,0x753e,2,0xd853,0xdc92,
-2,0xd848,0xdd9f,1,0x7610,2,0xd853,0xdfa1,2,0xd853,0xdfb8,2,0xd854,0xdc44,1,0x3ffc,
-1,0x4008,2,0xd854,0xdcf3,2,0xd854,0xdcf2,2,0xd854,0xdd19,2,0xd854,0xdd33,1,0x771e,
-1,0x771f,1,0x778b,1,0x4046,1,0x4096,2,0xd855,0xdc1d,1,0x784e,1,0x40e3,2,
-0xd855,0xde26,2,0xd855,0xde9a,2,0xd855,0xdec5,1,0x79eb,1,0x412f,1,0x7a4a,1,0x7a4f,
-2,0xd856,0xdd7c,2,0xd856,0xdea7,1,0x7aee,1,0x4202,2,0xd856,0xdfab,1,0x7bc6,1,
-0x7bc9,1,0x4227,2,0xd857,0xdc80,1,0x7cd2,1,0x42a0,1,0x7ce8,1,0x7ce3,1,0x7d00,
-2,0xd857,0xdf86,1,0x7d63,1,0x4301,1,0x7dc7,1,0x7e02,1,0x7e45,1,0x4334,2,
-0xd858,0xde28,2,0xd858,0xde47,1,0x4359,2,0xd858,0xded9,1,0x7f7a,2,0xd858,0xdf3e,1,
-0x7f95,1,0x7ffa,2,0xd859,0xdcda,2,0xd859,0xdd23,1,0x8060,2,0xd859,0xdda8,1,0x8070,
-2,0xd84c,0xdf5f,1,0x43d5,1,0x80b2,1,0x8103,1,0x440b,1,0x813e,1,0x5ab5,2,
-0xd859,0xdfa7,2,0xd859,0xdfb5,2,0xd84c,0xdf93,2,0xd84c,0xdf9c,1,0x8204,1,0x8f9e,1,
-0x446b,1,0x8291,1,0x828b,1,0x829d,1,0x52b3,1,0x82b1,1,0x82b3,1,0x82bd,1,
-0x82e6,2,0xd85a,0xdf3c,1,0x831d,1,0x8363,1,0x83ad,1,0x8323,1,0x83bd,1,0x83e7,
-1,0x8353,1,0x83ca,1,0x83cc,1,0x83dc,2,0xd85b,0xdc36,2,0xd85b,0xdd6b,2,0xd85b,
-0xdcd5,1,0x452b,1,0x84f1,1,0x84f3,1,0x8516,2,0xd85c,0xdfca,1,0x8564,2,0xd85b,
-0xdf2c,1,0x455d,1,0x4561,2,0xd85b,0xdfb1,2,0xd85c,0xdcd2,1,0x456b,1,0x8650,1,
-0x8667,1,0x8669,1,0x86a9,1,0x8688,1,0x870e,1,0x86e2,1,0x8728,1,0x876b,1,
-0x8786,1,0x45d7,1,0x87e1,1,0x8801,1,0x45f9,1,0x8860,1,0x8863,2,0xd85d,0xde67,
-1,0x88d7,1,0x88de,1,0x4635,1,0x88fa,1,0x34bb,2,0xd85e,0xdcae,2,0xd85e,0xdd66,
-1,0x46be,1,0x46c7,1,0x8aa0,1,0x8c55,2,0xd85f,0xdca8,1,0x8cab,1,0x8cc1,1,
-0x8d1b,1,0x8d77,2,0xd85f,0xdf2f,2,0xd842,0xdc04,1,0x8dcb,1,0x8dbc,1,0x8df0,2,
-0xd842,0xdcde,1,0x8ed4,2,0xd861,0xddd2,2,0xd861,0xdded,1,0x9094,1,0x90f1,1,0x9111,
-2,0xd861,0xdf2e,1,0x911b,1,0x9238,1,0x92d7,1,0x92d8,1,0x927c,1,0x93f9,1,
-0x9415,2,0xd862,0xdffa,1,0x958b,1,0x4995,1,0x95b7,2,0xd863,0xdd77,1,0x49e6,1,
-0x96c3,1,0x5db2,1,0x9723,2,0xd864,0xdd45,2,0xd864,0xde1a,1,0x4a6e,1,0x4a76,1,
-0x97e0,2,0xd865,0xdc0a,1,0x4ab2,2,0xd865,0xdc96,1,0x9829,2,0xd865,0xddb6,1,0x98e2,
-1,0x4b33,1,0x9929,1,0x99a7,1,0x99c2,1,0x99fe,1,0x4bce,2,0xd866,0xdf30,1,
-0x9c40,1,0x9cfd,1,0x4cce,1,0x4ced,1,0x9d67,2,0xd868,0xdcce,1,0x4cf8,2,0xd868,
-0xdd05,2,0xd868,0xde0e,2,0xd868,0xde91,1,0x9ebb,1,0x4d56,1,0x9ef9,1,0x9efe,1,
-0x9f05,1,0x9f0f,1,0x9f16,1,0x9f3b,2,0xd869,0xde00
+0x2c02,0x2978,0x348b,0x2e82,0x2976,0xb48b,0x2f42,0x297c,0xb48b,0x6bc2,0x2b74,0xb48b,0x6bc2,0x2b76,2,0xe602,
+0x41,0x302,0x600,0x3d4c,0x602,0x3d48,0x606,0x3d54,0x8612,0x3d50,0xe602,0x41,0x308,0x8608,0x3bc,0xe602,
+0x41,0x30a,0x8602,0x3f4,0xca02,0x43,0x327,0x8602,0x3c10,0xe602,0x45,0x302,0x600,0x3d80,0x602,0x3d7c,
+0x606,0x3d88,0x8612,0x3d84,0xe602,0x49,0x308,0x8602,0x3c5c,0xe602,0x4f,0x302,0x600,0x3da4,0x602,0x3da0,
+0x606,0x3dac,0x8612,0x3da8,0xe602,0x4f,0x303,0x602,0x3c98,0x608,0x458,0x8610,0x3c9c,0xe602,0x4f,0x308,
+0x8608,0x454,0xe602,0x55,0x308,0x600,0x3b6,0x602,0x3ae,0x608,0x3aa,0x8618,0x3b2,0xe602,0x61,0x302,
+0x600,0x3d4e,0x602,0x3d4a,0x606,0x3d56,0x8612,0x3d52,0xe602,0x61,0x308,0x8608,0x3be,0xe602,0x61,0x30a,
+0x8602,0x3f6,0xca02,0x63,0x327,0x8602,0x3c12,0xe602,0x65,0x302,0x600,0x3d82,0x602,0x3d7e,0x606,0x3d8a,
+0x8612,0x3d86,0xe602,0x69,0x308,0x8602,0x3c5e,0xe602,0x6f,0x302,0x600,0x3da6,0x602,0x3da2,0x606,0x3dae,
+0x8612,0x3daa,0xe602,0x6f,0x303,0x602,0x3c9a,0x608,0x45a,0x8610,0x3c9e,0xe602,0x6f,0x308,0x8608,0x456,
+0xe602,0x75,0x308,0x600,0x3b8,0x602,0x3b0,0x608,0x3ac,0x8618,0x3b4,0xe602,0x41,0x306,0x600,0x3d60,
+0x602,0x3d5c,0x606,0x3d68,0x8612,0x3d64,0xe602,0x61,0x306,0x600,0x3d62,0x602,0x3d5e,0x606,0x3d6a,0x8612,
+0x3d66,0xe602,0x45,0x304,0x600,0x3c28,0x8602,0x3c2c,0xe602,0x65,0x304,0x600,0x3c2a,0x8602,0x3c2e,0xe602,
+0x4f,0x304,0x600,0x3ca0,0x8602,0x3ca4,0xe602,0x6f,0x304,0x600,0x3ca2,0x8602,0x3ca6,0xe602,0x53,0x301,
+0x860e,0x3cc8,0xe602,0x73,0x301,0x860e,0x3cca,0xe602,0x53,0x30c,0x860e,0x3ccc,0xe602,0x73,0x30c,0x860e,
+0x3cce,0xe602,0x55,0x303,0x8602,0x3cf0,0xe602,0x75,0x303,0x8602,0x3cf2,0xe602,0x55,0x304,0x8610,0x3cf4,
+0xe602,0x75,0x304,0x8610,0x3cf6,0xd802,0x4f,0x31b,0x600,0x3db8,0x602,0x3db4,0x606,0x3dc0,0x612,0x3dbc,
+0x8646,0x3dc4,0xd802,0x6f,0x31b,0x600,0x3dba,0x602,0x3db6,0x606,0x3dc2,0x612,0x3dbe,0x8646,0x3dc6,0xd802,
+0x55,0x31b,0x600,0x3dd4,0x602,0x3dd0,0x606,0x3ddc,0x612,0x3dd8,0x8646,0x3de0,0xd802,0x75,0x31b,0x600,
+0x3dd6,0x602,0x3dd2,0x606,0x3dde,0x612,0x3dda,0x8646,0x3de2,0xca02,0x4f,0x328,0x8608,0x3d8,0xca02,0x6f,
+0x328,0x8608,0x3da,0xe602,0x41,0x307,0x8608,0x3c0,0xe602,0x61,0x307,0x8608,0x3c2,0xca02,0x45,0x327,
+0x860c,0x3c38,0xca02,0x65,0x327,0x860c,0x3c3a,0xe602,0x4f,0x307,0x8608,0x460,0xe602,0x6f,0x307,0x8608,
+0x462,0xe602,0x3b1,0x301,0x868a,0x3f68,0xe602,0x3b7,0x301,0x868a,0x3f88,0xe602,0x3b9,0x308,0x600,0x3fa4,
+0x602,0x720,0x8684,0x3fae,0xe602,0x3c5,0x308,0x600,0x3fc4,0x602,0x760,0x8684,0x3fce,0xe602,0x3c9,0x301,
+0x868a,0x3fe8,2,0xcc6,0xcc2,0x99aa,0x1996,2,0xdd9,0xdcf,0x9b94,0x1bba,0xdc02,0x4c,0x323,0x8608,
+0x3c70,0xdc02,0x6c,0x323,0x8608,0x3c72,0xdc02,0x52,0x323,0x8608,0x3cb8,0xdc02,0x72,0x323,0x8608,0x3cba,
+0xdc02,0x53,0x323,0x860e,0x3cd0,0xdc02,0x73,0x323,0x860e,0x3cd2,0xdc02,0x41,0x323,0x604,0x3d58,0x860c,
+0x3d6c,0xdc02,0x61,0x323,0x604,0x3d5a,0x860c,0x3d6e,0xdc02,0x45,0x323,0x8604,0x3d8c,0xdc02,0x65,0x323,
+0x8604,0x3d8e,0xdc02,0x4f,0x323,0x8604,0x3db0,0xdc02,0x6f,0x323,0x8604,0x3db2,0xe602,0x3b1,0x313,0x600,
+0x3e05,0x602,0x3e09,0x684,0x3e0d,0x868a,0x3f00,0xe602,0x3b1,0x314,0x600,0x3e07,0x602,0x3e0b,0x684,0x3e0f,
+0x868a,0x3f02,0x1f00,0xe643,0x3b1,0x313,0x300,0x868a,0x3f04,0x1f01,0xe643,0x3b1,0x314,0x300,0x868a,0x3f06,
+0x1f00,0xe643,0x3b1,0x313,0x301,0x868a,0x3f08,0x1f01,0xe643,0x3b1,0x314,0x301,0x868a,0x3f0a,0x1f00,0xe643,
+0x3b1,0x313,0x342,0x868a,0x3f0c,0x1f01,0xe643,0x3b1,0x314,0x342,0x868a,0x3f0e,0xe602,0x391,0x313,0x600,
+0x3e15,0x602,0x3e19,0x684,0x3e1d,0x868a,0x3f10,0xe602,0x391,0x314,0x600,0x3e17,0x602,0x3e1b,0x684,0x3e1f,
+0x868a,0x3f12,0x1f08,0xe643,0x391,0x313,0x300,0x868a,0x3f14,0x1f09,0xe643,0x391,0x314,0x300,0x868a,0x3f16,
+0x1f08,0xe643,0x391,0x313,0x301,0x868a,0x3f18,0x1f09,0xe643,0x391,0x314,0x301,0x868a,0x3f1a,0x1f08,0xe643,
+0x391,0x313,0x342,0x868a,0x3f1c,0x1f09,0xe643,0x391,0x314,0x342,0x868a,0x3f1e,0xe602,0x3b5,0x313,0x600,
+0x3e24,0x8602,0x3e28,0xe602,0x3b5,0x314,0x600,0x3e26,0x8602,0x3e2a,0xe602,0x395,0x313,0x600,0x3e34,0x8602,
+0x3e38,0xe602,0x395,0x314,0x600,0x3e36,0x8602,0x3e3a,0xe602,0x3b7,0x313,0x600,0x3e45,0x602,0x3e49,0x684,
+0x3e4d,0x868a,0x3f20,0xe602,0x3b7,0x314,0x600,0x3e47,0x602,0x3e4b,0x684,0x3e4f,0x868a,0x3f22,0x1f20,0xe643,
+0x3b7,0x313,0x300,0x868a,0x3f24,0x1f21,0xe643,0x3b7,0x314,0x300,0x868a,0x3f26,0x1f20,0xe643,0x3b7,0x313,
+0x301,0x868a,0x3f28,0x1f21,0xe643,0x3b7,0x314,0x301,0x868a,0x3f2a,0x1f20,0xe643,0x3b7,0x313,0x342,0x868a,
+0x3f2c,0x1f21,0xe643,0x3b7,0x314,0x342,0x868a,0x3f2e,0xe602,0x397,0x313,0x600,0x3e55,0x602,0x3e59,0x684,
+0x3e5d,0x868a,0x3f30,0xe602,0x397,0x314,0x600,0x3e57,0x602,0x3e5b,0x684,0x3e5f,0x868a,0x3f32,0x1f28,0xe643,
+0x397,0x313,0x300,0x868a,0x3f34,0x1f29,0xe643,0x397,0x314,0x300,0x868a,0x3f36,0x1f28,0xe643,0x397,0x313,
+0x301,0x868a,0x3f38,0x1f29,0xe643,0x397,0x314,0x301,0x868a,0x3f3a,0x1f28,0xe643,0x397,0x313,0x342,0x868a,
+0x3f3c,0x1f29,0xe643,0x397,0x314,0x342,0x868a,0x3f3e,0xe602,0x3b9,0x313,0x600,0x3e64,0x602,0x3e68,0x8684,
+0x3e6c,0xe602,0x3b9,0x314,0x600,0x3e66,0x602,0x3e6a,0x8684,0x3e6e,0xe602,0x399,0x313,0x600,0x3e74,0x602,
+0x3e78,0x8684,0x3e7c,0xe602,0x399,0x314,0x600,0x3e76,0x602,0x3e7a,0x8684,0x3e7e,0xe602,0x3bf,0x313,0x600,
+0x3e84,0x8602,0x3e88,0xe602,0x3bf,0x314,0x600,0x3e86,0x8602,0x3e8a,0xe602,0x39f,0x313,0x600,0x3e94,0x8602,
+0x3e98,0xe602,0x39f,0x314,0x600,0x3e96,0x8602,0x3e9a,0xe602,0x3c5,0x313,0x600,0x3ea4,0x602,0x3ea8,0x8684,
+0x3eac,0xe602,0x3c5,0x314,0x600,0x3ea6,0x602,0x3eaa,0x8684,0x3eae,0xe602,0x3a5,0x314,0x600,0x3eb6,0x602,
+0x3eba,0x8684,0x3ebe,0xe602,0x3c9,0x313,0x600,0x3ec5,0x602,0x3ec9,0x684,0x3ecd,0x868a,0x3f40,0xe602,0x3c9,
+0x314,0x600,0x3ec7,0x602,0x3ecb,0x684,0x3ecf,0x868a,0x3f42,0x1f60,0xe643,0x3c9,0x313,0x300,0x868a,0x3f44,
+0x1f61,0xe643,0x3c9,0x314,0x300,0x868a,0x3f46,0x1f60,0xe643,0x3c9,0x313,0x301,0x868a,0x3f48,0x1f61,0xe643,
+0x3c9,0x314,0x301,0x868a,0x3f4a,0x1f60,0xe643,0x3c9,0x313,0x342,0x868a,0x3f4c,0x1f61,0xe643,0x3c9,0x314,
+0x342,0x868a,0x3f4e,0xe602,0x3a9,0x313,0x600,0x3ed5,0x602,0x3ed9,0x684,0x3edd,0x868a,0x3f50,0xe602,0x3a9,
+0x314,0x600,0x3ed7,0x602,0x3edb,0x684,0x3edf,0x868a,0x3f52,0x1f68,0xe643,0x3a9,0x313,0x300,0x868a,0x3f54,
+0x1f69,0xe643,0x3a9,0x314,0x300,0x868a,0x3f56,0x1f68,0xe643,0x3a9,0x313,0x301,0x868a,0x3f58,0x1f69,0xe643,
+0x3a9,0x314,0x301,0x868a,0x3f5a,0x1f68,0xe643,0x3a9,0x313,0x342,0x868a,0x3f5c,0x1f69,0xe643,0x3a9,0x314,
+0x342,0x868a,0x3f5e,0xe602,0x3b1,0x300,0x868a,0x3f64,0xe602,0x3b7,0x300,0x868a,0x3f84,0xe602,0x3c9,0x300,
+0x868a,0x3fe4,0xe602,0x3b1,0x342,0x868a,0x3f6e,0xe602,0x3b7,0x342,0x868a,0x3f8e,0xe602,0x3c9,0x342,0x868a,
+0x3fee,3,0xe602,0x41,0x300,0xe602,0x41,0x301,0xe602,0x41,0x303,0xe602,0x45,0x300,0xe602,0x45,
+0x301,0xe602,0x45,0x308,0xe602,0x49,0x300,0xe602,0x49,0x301,0xe602,0x49,0x302,0xe602,0x4e,0x303,
+0xe602,0x4f,0x300,0xe602,0x4f,0x301,0xe602,0x55,0x300,0xe602,0x55,0x301,0xe602,0x55,0x302,0xe602,
+0x59,0x301,0xe602,0x61,0x300,0xe602,0x61,0x301,0xe602,0x61,0x303,0xe602,0x65,0x300,0xe602,0x65,
+0x301,0xe602,0x65,0x308,0xe602,0x69,0x300,0xe602,0x69,0x301,0xe602,0x69,0x302,0xe602,0x6e,0x303,
+0xe602,0x6f,0x300,0xe602,0x6f,0x301,0xe602,0x75,0x300,0xe602,0x75,0x301,0xe602,0x75,0x302,0xe602,
+0x79,0x301,0xe602,0x79,0x308,0xe602,0x41,0x304,0xe602,0x61,0x304,0xca02,0x41,0x328,0xca02,0x61,
+0x328,0xe602,0x43,0x301,0xe602,0x63,0x301,0xe602,0x43,0x302,0xe602,0x63,0x302,0xe602,0x43,0x307,
+0xe602,0x63,0x307,0xe602,0x43,0x30c,0xe602,0x63,0x30c,0xe602,0x44,0x30c,0xe602,0x64,0x30c,0xe602,
+0x45,0x306,0xe602,0x65,0x306,0xe602,0x45,0x307,0xe602,0x65,0x307,0xca02,0x45,0x328,0xca02,0x65,
+0x328,0xe602,0x45,0x30c,0xe602,0x65,0x30c,0xe602,0x47,0x302,0xe602,0x67,0x302,0xe602,0x47,0x306,
+0xe602,0x67,0x306,0xe602,0x47,0x307,0xe602,0x67,0x307,0xca02,0x47,0x327,0xca02,0x67,0x327,0xe602,
+0x48,0x302,0xe602,0x68,0x302,0xe602,0x49,0x303,0xe602,0x69,0x303,0xe602,0x49,0x304,0xe602,0x69,
+0x304,0xe602,0x49,0x306,0xe602,0x69,0x306,0xca02,0x49,0x328,0xca02,0x69,0x328,0xe602,0x49,0x307,
+0xe602,0x4a,0x302,0xe602,0x6a,0x302,0xca02,0x4b,0x327,0xca02,0x6b,0x327,0xe602,0x4c,0x301,0xe602,
+0x6c,0x301,0xca02,0x4c,0x327,0xca02,0x6c,0x327,0xe602,0x4c,0x30c,0xe602,0x6c,0x30c,0xe602,0x4e,
+0x301,0xe602,0x6e,0x301,0xca02,0x4e,0x327,0xca02,0x6e,0x327,0xe602,0x4e,0x30c,0xe602,0x6e,0x30c,
+0xe602,0x4f,0x306,0xe602,0x6f,0x306,0xe602,0x4f,0x30b,0xe602,0x6f,0x30b,0xe602,0x52,0x301,0xe602,
+0x72,0x301,0xca02,0x52,0x327,0xca02,0x72,0x327,0xe602,0x52,0x30c,0xe602,0x72,0x30c,0xe602,0x53,
+0x302,0xe602,0x73,0x302,0xca02,0x53,0x327,0xca02,0x73,0x327,0xca02,0x54,0x327,0xca02,0x74,0x327,
+0xe602,0x54,0x30c,0xe602,0x74,0x30c,0xe602,0x55,0x306,0xe602,0x75,0x306,0xe602,0x55,0x30a,0xe602,
+0x75,0x30a,0xe602,0x55,0x30b,0xe602,0x75,0x30b,0xca02,0x55,0x328,0xca02,0x75,0x328,0xe602,0x57,
+0x302,0xe602,0x77,0x302,0xe602,0x59,0x302,0xe602,0x79,0x302,0xe602,0x59,0x308,0xe602,0x5a,0x301,
+0xe602,0x7a,0x301,0xe602,0x5a,0x307,0xe602,0x7a,0x307,0xe602,0x5a,0x30c,0xe602,0x7a,0x30c,0xe602,
+0x41,0x30c,0xe602,0x61,0x30c,0xe602,0x49,0x30c,0xe602,0x69,0x30c,0xe602,0x4f,0x30c,0xe602,0x6f,
+0x30c,0xe602,0x55,0x30c,0xe602,0x75,0x30c,0xdc,0xe643,0x55,0x308,0x304,0xfc,0xe643,0x75,0x308,
+0x304,0xdc,0xe643,0x55,0x308,0x301,0xfc,0xe643,0x75,0x308,0x301,0xdc,0xe643,0x55,0x308,0x30c,
+0xfc,0xe643,0x75,0x308,0x30c,0xdc,0xe643,0x55,0x308,0x300,0xfc,0xe643,0x75,0x308,0x300,0xc4,
+0xe643,0x41,0x308,0x304,0xe4,0xe643,0x61,0x308,0x304,0x226,0xe643,0x41,0x307,0x304,0x227,0xe643,
+0x61,0x307,0x304,0xe602,0xc6,0x304,0xe602,0xe6,0x304,0xe602,0x47,0x30c,0xe602,0x67,0x30c,0xe602,
+0x4b,0x30c,0xe602,0x6b,0x30c,0x1ea,0xe643,0x4f,0x328,0x304,0x1eb,0xe643,0x6f,0x328,0x304,0xe602,
+0x1b7,0x30c,0xe602,0x292,0x30c,0xe602,0x6a,0x30c,0xe602,0x47,0x301,0xe602,0x67,0x301,0xe602,0x4e,
+0x300,0xe602,0x6e,0x300,0xc5,0xe643,0x41,0x30a,0x301,0xe5,0xe643,0x61,0x30a,0x301,0xe602,0xc6,
+0x301,0xe602,0xe6,0x301,0xe602,0xd8,0x301,0xe602,0xf8,0x301,0xe602,0x41,0x30f,0xe602,0x61,0x30f,
+0xe602,0x41,0x311,0xe602,0x61,0x311,0xe602,0x45,0x30f,0xe602,0x65,0x30f,0xe602,0x45,0x311,0xe602,
+0x65,0x311,0xe602,0x49,0x30f,0xe602,0x69,0x30f,0xe602,0x49,0x311,0xe602,0x69,0x311,0xe602,0x4f,
+0x30f,0xe602,0x6f,0x30f,0xe602,0x4f,0x311,0xe602,0x6f,0x311,0xe602,0x52,0x30f,0xe602,0x72,0x30f,
+0xe602,0x52,0x311,0xe602,0x72,0x311,0xe602,0x55,0x30f,0xe602,0x75,0x30f,0xe602,0x55,0x311,0xe602,
+0x75,0x311,0xdc02,0x53,0x326,0xdc02,0x73,0x326,0xdc02,0x54,0x326,0xdc02,0x74,0x326,0xe602,0x48,
+0x30c,0xe602,0x68,0x30c,0xd6,0xe643,0x4f,0x308,0x304,0xf6,0xe643,0x6f,0x308,0x304,0xd5,0xe643,
+0x4f,0x303,0x304,0xf5,0xe643,0x6f,0x303,0x304,0x22e,0xe643,0x4f,0x307,0x304,0x22f,0xe643,0x6f,
+0x307,0x304,0xe602,0x59,0x304,0xe602,0x79,0x304,0xe602,0xa8,0x301,0xe602,0x391,0x301,0xe602,0x395,
+0x301,0xe602,0x397,0x301,0xe602,0x399,0x301,0xe602,0x39f,0x301,0xe602,0x3a5,0x301,0xe602,0x3a9,0x301,
+0x3ca,0xe643,0x3b9,0x308,0x301,0xe602,0x399,0x308,0xe602,0x3a5,0x308,0xe602,0x3b5,0x301,0xe602,0x3b9,
+0x301,0x3cb,0xe643,0x3c5,0x308,0x301,0xe602,0x3bf,0x301,0xe602,0x3c5,0x301,0xe602,0x3d2,0x301,0xe602,
+0x3d2,0x308,0xe602,0x415,0x300,0xe602,0x415,0x308,0xe602,0x413,0x301,0xe602,0x406,0x308,0xe602,0x41a,
+0x301,0xe602,0x418,0x300,0xe602,0x423,0x306,0xe602,0x418,0x306,0xe602,0x438,0x306,0xe602,0x435,0x300,
+0xe602,0x435,0x308,0xe602,0x433,0x301,0xe602,0x456,0x308,0xe602,0x43a,0x301,0xe602,0x438,0x300,0xe602,
+0x443,0x306,0xe602,0x474,0x30f,0xe602,0x475,0x30f,0xe602,0x416,0x306,0xe602,0x436,0x306,0xe602,0x410,
+0x306,0xe602,0x430,0x306,0xe602,0x410,0x308,0xe602,0x430,0x308,0xe602,0x415,0x306,0xe602,0x435,0x306,
+0xe602,0x4d8,0x308,0xe602,0x4d9,0x308,0xe602,0x416,0x308,0xe602,0x436,0x308,0xe602,0x417,0x308,0xe602,
+0x437,0x308,0xe602,0x418,0x304,0xe602,0x438,0x304,0xe602,0x418,0x308,0xe602,0x438,0x308,0xe602,0x41e,
+0x308,0xe602,0x43e,0x308,0xe602,0x4e8,0x308,0xe602,0x4e9,0x308,0xe602,0x42d,0x308,0xe602,0x44d,0x308,
+0xe602,0x423,0x304,0xe602,0x443,0x304,0xe602,0x423,0x308,0xe602,0x443,0x308,0xe602,0x423,0x30b,0xe602,
+0x443,0x30b,0xe602,0x427,0x308,0xe602,0x447,0x308,0xe602,0x42b,0x308,0xe602,0x44b,0x308,0xe602,0x627,
+0x653,0xe602,0x627,0x654,0xe602,0x648,0x654,0xdc02,0x627,0x655,0xe602,0x64a,0x654,0xe602,0x6d5,0x654,
+0xe602,0x6c1,0x654,0xe602,0x6d2,0x654,0x702,0x928,0x93c,0x702,0x930,0x93c,0x702,0x933,0x93c,2,
+0x9c7,0x9be,2,0x9c7,0x9d7,2,0xb47,0xb56,2,0xb47,0xb3e,2,0xb47,0xb57,2,0xb92,
+0xbd7,2,0xbc6,0xbbe,2,0xbc7,0xbbe,2,0xbc6,0xbd7,0x5b02,0xc46,0xc56,2,0xcbf,0xcd5,
+2,0xcc6,0xcd5,2,0xcc6,0xcd6,0xcca,0x43,0xcc6,0xcc2,0xcd5,2,0xd46,0xd3e,2,0xd47,
+0xd3e,2,0xd46,0xd57,0x902,0xdd9,0xdca,0xddc,0x943,0xdd9,0xdcf,0xdca,2,0xdd9,0xddf,2,
+0x1025,0x102e,2,0x1b05,0x1b35,2,0x1b07,0x1b35,2,0x1b09,0x1b35,2,0x1b0b,0x1b35,2,0x1b0d,
+0x1b35,2,0x1b11,0x1b35,2,0x1b3a,0x1b35,2,0x1b3c,0x1b35,2,0x1b3e,0x1b35,2,0x1b3f,0x1b35,
+2,0x1b42,0x1b35,0xdc02,0x41,0x325,0xdc02,0x61,0x325,0xe602,0x42,0x307,0xe602,0x62,0x307,0xdc02,
+0x42,0x323,0xdc02,0x62,0x323,0xdc02,0x42,0x331,0xdc02,0x62,0x331,0xc7,0xe643,0x43,0x327,0x301,
+0xe7,0xe643,0x63,0x327,0x301,0xe602,0x44,0x307,0xe602,0x64,0x307,0xdc02,0x44,0x323,0xdc02,0x64,
+0x323,0xdc02,0x44,0x331,0xdc02,0x64,0x331,0xca02,0x44,0x327,0xca02,0x64,0x327,0xdc02,0x44,0x32d,
+0xdc02,0x64,0x32d,0x112,0xe643,0x45,0x304,0x300,0x113,0xe643,0x65,0x304,0x300,0x112,0xe643,0x45,
+0x304,0x301,0x113,0xe643,0x65,0x304,0x301,0xdc02,0x45,0x32d,0xdc02,0x65,0x32d,0xdc02,0x45,0x330,
+0xdc02,0x65,0x330,0x228,0xe643,0x45,0x327,0x306,0x229,0xe643,0x65,0x327,0x306,0xe602,0x46,0x307,
+0xe602,0x66,0x307,0xe602,0x47,0x304,0xe602,0x67,0x304,0xe602,0x48,0x307,0xe602,0x68,0x307,0xdc02,
+0x48,0x323,0xdc02,0x68,0x323,0xe602,0x48,0x308,0xe602,0x68,0x308,0xca02,0x48,0x327,0xca02,0x68,
+0x327,0xdc02,0x48,0x32e,0xdc02,0x68,0x32e,0xdc02,0x49,0x330,0xdc02,0x69,0x330,0xcf,0xe643,0x49,
+0x308,0x301,0xef,0xe643,0x69,0x308,0x301,0xe602,0x4b,0x301,0xe602,0x6b,0x301,0xdc02,0x4b,0x323,
+0xdc02,0x6b,0x323,0xdc02,0x4b,0x331,0xdc02,0x6b,0x331,0x1e36,0xe643,0x4c,0x323,0x304,0x1e37,0xe643,
+0x6c,0x323,0x304,0xdc02,0x4c,0x331,0xdc02,0x6c,0x331,0xdc02,0x4c,0x32d,0xdc02,0x6c,0x32d,0xe602,
+0x4d,0x301,0xe602,0x6d,0x301,0xe602,0x4d,0x307,0xe602,0x6d,0x307,0xdc02,0x4d,0x323,0xdc02,0x6d,
+0x323,0xe602,0x4e,0x307,0xe602,0x6e,0x307,0xdc02,0x4e,0x323,0xdc02,0x6e,0x323,0xdc02,0x4e,0x331,
+0xdc02,0x6e,0x331,0xdc02,0x4e,0x32d,0xdc02,0x6e,0x32d,0xd5,0xe643,0x4f,0x303,0x301,0xf5,0xe643,
+0x6f,0x303,0x301,0xd5,0xe643,0x4f,0x303,0x308,0xf5,0xe643,0x6f,0x303,0x308,0x14c,0xe643,0x4f,
+0x304,0x300,0x14d,0xe643,0x6f,0x304,0x300,0x14c,0xe643,0x4f,0x304,0x301,0x14d,0xe643,0x6f,0x304,
+0x301,0xe602,0x50,0x301,0xe602,0x70,0x301,0xe602,0x50,0x307,0xe602,0x70,0x307,0xe602,0x52,0x307,
+0xe602,0x72,0x307,0x1e5a,0xe643,0x52,0x323,0x304,0x1e5b,0xe643,0x72,0x323,0x304,0xdc02,0x52,0x331,
+0xdc02,0x72,0x331,0xe602,0x53,0x307,0xe602,0x73,0x307,0x15a,0xe643,0x53,0x301,0x307,0x15b,0xe643,
+0x73,0x301,0x307,0x160,0xe643,0x53,0x30c,0x307,0x161,0xe643,0x73,0x30c,0x307,0x1e62,0xe643,0x53,
+0x323,0x307,0x1e63,0xe643,0x73,0x323,0x307,0xe602,0x54,0x307,0xe602,0x74,0x307,0xdc02,0x54,0x323,
+0xdc02,0x74,0x323,0xdc02,0x54,0x331,0xdc02,0x74,0x331,0xdc02,0x54,0x32d,0xdc02,0x74,0x32d,0xdc02,
+0x55,0x324,0xdc02,0x75,0x324,0xdc02,0x55,0x330,0xdc02,0x75,0x330,0xdc02,0x55,0x32d,0xdc02,0x75,
+0x32d,0x168,0xe643,0x55,0x303,0x301,0x169,0xe643,0x75,0x303,0x301,0x16a,0xe643,0x55,0x304,0x308,
+0x16b,0xe643,0x75,0x304,0x308,0xe602,0x56,0x303,0xe602,0x76,0x303,0xdc02,0x56,0x323,0xdc02,0x76,
+0x323,0xe602,0x57,0x300,0xe602,0x77,0x300,0xe602,0x57,0x301,0xe602,0x77,0x301,0xe602,0x57,0x308,
+0xe602,0x77,0x308,0xe602,0x57,0x307,0xe602,0x77,0x307,0xdc02,0x57,0x323,0xdc02,0x77,0x323,0xe602,
+0x58,0x307,0xe602,0x78,0x307,0xe602,0x58,0x308,0xe602,0x78,0x308,0xe602,0x59,0x307,0xe602,0x79,
+0x307,0xe602,0x5a,0x302,0xe602,0x7a,0x302,0xdc02,0x5a,0x323,0xdc02,0x7a,0x323,0xdc02,0x5a,0x331,
+0xdc02,0x7a,0x331,0xdc02,0x68,0x331,0xe602,0x74,0x308,0xe602,0x77,0x30a,0xe602,0x79,0x30a,0xe602,
+0x17f,0x307,0xe602,0x41,0x309,0xe602,0x61,0x309,0xc2,0xe643,0x41,0x302,0x301,0xe2,0xe643,0x61,
+0x302,0x301,0xc2,0xe643,0x41,0x302,0x300,0xe2,0xe643,0x61,0x302,0x300,0xc2,0xe643,0x41,0x302,
+0x309,0xe2,0xe643,0x61,0x302,0x309,0xc2,0xe643,0x41,0x302,0x303,0xe2,0xe643,0x61,0x302,0x303,
+0x1ea0,0xe643,0x41,0x323,0x302,0x1ea1,0xe643,0x61,0x323,0x302,0x102,0xe643,0x41,0x306,0x301,0x103,
+0xe643,0x61,0x306,0x301,0x102,0xe643,0x41,0x306,0x300,0x103,0xe643,0x61,0x306,0x300,0x102,0xe643,
+0x41,0x306,0x309,0x103,0xe643,0x61,0x306,0x309,0x102,0xe643,0x41,0x306,0x303,0x103,0xe643,0x61,
+0x306,0x303,0x1ea0,0xe643,0x41,0x323,0x306,0x1ea1,0xe643,0x61,0x323,0x306,0xe602,0x45,0x309,0xe602,
+0x65,0x309,0xe602,0x45,0x303,0xe602,0x65,0x303,0xca,0xe643,0x45,0x302,0x301,0xea,0xe643,0x65,
+0x302,0x301,0xca,0xe643,0x45,0x302,0x300,0xea,0xe643,0x65,0x302,0x300,0xca,0xe643,0x45,0x302,
+0x309,0xea,0xe643,0x65,0x302,0x309,0xca,0xe643,0x45,0x302,0x303,0xea,0xe643,0x65,0x302,0x303,
+0x1eb8,0xe643,0x45,0x323,0x302,0x1eb9,0xe643,0x65,0x323,0x302,0xe602,0x49,0x309,0xe602,0x69,0x309,
+0xdc02,0x49,0x323,0xdc02,0x69,0x323,0xe602,0x4f,0x309,0xe602,0x6f,0x309,0xd4,0xe643,0x4f,0x302,
+0x301,0xf4,0xe643,0x6f,0x302,0x301,0xd4,0xe643,0x4f,0x302,0x300,0xf4,0xe643,0x6f,0x302,0x300,
+0xd4,0xe643,0x4f,0x302,0x309,0xf4,0xe643,0x6f,0x302,0x309,0xd4,0xe643,0x4f,0x302,0x303,0xf4,
+0xe643,0x6f,0x302,0x303,0x1ecc,0xe643,0x4f,0x323,0x302,0x1ecd,0xe643,0x6f,0x323,0x302,0x1a0,0xe643,
+0x4f,0x31b,0x301,0x1a1,0xe643,0x6f,0x31b,0x301,0x1a0,0xe643,0x4f,0x31b,0x300,0x1a1,0xe643,0x6f,
+0x31b,0x300,0x1a0,0xe643,0x4f,0x31b,0x309,0x1a1,0xe643,0x6f,0x31b,0x309,0x1a0,0xe643,0x4f,0x31b,
+0x303,0x1a1,0xe643,0x6f,0x31b,0x303,0x1a0,0xdc43,0x4f,0x31b,0x323,0x1a1,0xdc43,0x6f,0x31b,0x323,
+0xdc02,0x55,0x323,0xdc02,0x75,0x323,0xe602,0x55,0x309,0xe602,0x75,0x309,0x1af,0xe643,0x55,0x31b,
+0x301,0x1b0,0xe643,0x75,0x31b,0x301,0x1af,0xe643,0x55,0x31b,0x300,0x1b0,0xe643,0x75,0x31b,0x300,
+0x1af,0xe643,0x55,0x31b,0x309,0x1b0,0xe643,0x75,0x31b,0x309,0x1af,0xe643,0x55,0x31b,0x303,0x1b0,
+0xe643,0x75,0x31b,0x303,0x1af,0xdc43,0x55,0x31b,0x323,0x1b0,0xdc43,0x75,0x31b,0x323,0xe602,0x59,
+0x300,0xe602,0x79,0x300,0xdc02,0x59,0x323,0xdc02,0x79,0x323,0xe602,0x59,0x309,0xe602,0x79,0x309,
+0xe602,0x59,0x303,0xe602,0x79,0x303,0x1f10,0xe643,0x3b5,0x313,0x300,0x1f11,0xe643,0x3b5,0x314,0x300,
+0x1f10,0xe643,0x3b5,0x313,0x301,0x1f11,0xe643,0x3b5,0x314,0x301,0x1f18,0xe643,0x395,0x313,0x300,0x1f19,
+0xe643,0x395,0x314,0x300,0x1f18,0xe643,0x395,0x313,0x301,0x1f19,0xe643,0x395,0x314,0x301,0x1f30,0xe643,
+0x3b9,0x313,0x300,0x1f31,0xe643,0x3b9,0x314,0x300,0x1f30,0xe643,0x3b9,0x313,0x301,0x1f31,0xe643,0x3b9,
+0x314,0x301,0x1f30,0xe643,0x3b9,0x313,0x342,0x1f31,0xe643,0x3b9,0x314,0x342,0x1f38,0xe643,0x399,0x313,
+0x300,0x1f39,0xe643,0x399,0x314,0x300,0x1f38,0xe643,0x399,0x313,0x301,0x1f39,0xe643,0x399,0x314,0x301,
+0x1f38,0xe643,0x399,0x313,0x342,0x1f39,0xe643,0x399,0x314,0x342,0x1f40,0xe643,0x3bf,0x313,0x300,0x1f41,
+0xe643,0x3bf,0x314,0x300,0x1f40,0xe643,0x3bf,0x313,0x301,0x1f41,0xe643,0x3bf,0x314,0x301,0x1f48,0xe643,
+0x39f,0x313,0x300,0x1f49,0xe643,0x39f,0x314,0x300,0x1f48,0xe643,0x39f,0x313,0x301,0x1f49,0xe643,0x39f,
+0x314,0x301,0x1f50,0xe643,0x3c5,0x313,0x300,0x1f51,0xe643,0x3c5,0x314,0x300,0x1f50,0xe643,0x3c5,0x313,
+0x301,0x1f51,0xe643,0x3c5,0x314,0x301,0x1f50,0xe643,0x3c5,0x313,0x342,0x1f51,0xe643,0x3c5,0x314,0x342,
+0x1f59,0xe643,0x3a5,0x314,0x300,0x1f59,0xe643,0x3a5,0x314,0x301,0x1f59,0xe643,0x3a5,0x314,0x342,0xe602,
+0x3b5,0x300,0xe602,0x3b9,0x300,0xe602,0x3bf,0x300,0xe602,0x3c5,0x300,0x1f00,0xf043,0x3b1,0x313,0x345,
+0x1f01,0xf043,0x3b1,0x314,0x345,0x1f02,0x345,2,0xf044,0x3b1,0x313,0x300,0x345,0x1f03,0x345,2,
+0xf044,0x3b1,0x314,0x300,0x345,0x1f04,0x345,2,0xf044,0x3b1,0x313,0x301,0x345,0x1f05,0x345,2,
+0xf044,0x3b1,0x314,0x301,0x345,0x1f06,0x345,2,0xf044,0x3b1,0x313,0x342,0x345,0x1f07,0x345,2,
+0xf044,0x3b1,0x314,0x342,0x345,0x1f08,0xf043,0x391,0x313,0x345,0x1f09,0xf043,0x391,0x314,0x345,0x1f0a,
+0x345,2,0xf044,0x391,0x313,0x300,0x345,0x1f0b,0x345,2,0xf044,0x391,0x314,0x300,0x345,0x1f0c,
+0x345,2,0xf044,0x391,0x313,0x301,0x345,0x1f0d,0x345,2,0xf044,0x391,0x314,0x301,0x345,0x1f0e,
+0x345,2,0xf044,0x391,0x313,0x342,0x345,0x1f0f,0x345,2,0xf044,0x391,0x314,0x342,0x345,0x1f20,
+0xf043,0x3b7,0x313,0x345,0x1f21,0xf043,0x3b7,0x314,0x345,0x1f22,0x345,2,0xf044,0x3b7,0x313,0x300,
+0x345,0x1f23,0x345,2,0xf044,0x3b7,0x314,0x300,0x345,0x1f24,0x345,2,0xf044,0x3b7,0x313,0x301,
+0x345,0x1f25,0x345,2,0xf044,0x3b7,0x314,0x301,0x345,0x1f26,0x345,2,0xf044,0x3b7,0x313,0x342,
+0x345,0x1f27,0x345,2,0xf044,0x3b7,0x314,0x342,0x345,0x1f28,0xf043,0x397,0x313,0x345,0x1f29,0xf043,
+0x397,0x314,0x345,0x1f2a,0x345,2,0xf044,0x397,0x313,0x300,0x345,0x1f2b,0x345,2,0xf044,0x397,
+0x314,0x300,0x345,0x1f2c,0x345,2,0xf044,0x397,0x313,0x301,0x345,0x1f2d,0x345,2,0xf044,0x397,
+0x314,0x301,0x345,0x1f2e,0x345,2,0xf044,0x397,0x313,0x342,0x345,0x1f2f,0x345,2,0xf044,0x397,
+0x314,0x342,0x345,0x1f60,0xf043,0x3c9,0x313,0x345,0x1f61,0xf043,0x3c9,0x314,0x345,0x1f62,0x345,2,
+0xf044,0x3c9,0x313,0x300,0x345,0x1f63,0x345,2,0xf044,0x3c9,0x314,0x300,0x345,0x1f64,0x345,2,
+0xf044,0x3c9,0x313,0x301,0x345,0x1f65,0x345,2,0xf044,0x3c9,0x314,0x301,0x345,0x1f66,0x345,2,
+0xf044,0x3c9,0x313,0x342,0x345,0x1f67,0x345,2,0xf044,0x3c9,0x314,0x342,0x345,0x1f68,0xf043,0x3a9,
+0x313,0x345,0x1f69,0xf043,0x3a9,0x314,0x345,0x1f6a,0x345,2,0xf044,0x3a9,0x313,0x300,0x345,0x1f6b,
+0x345,2,0xf044,0x3a9,0x314,0x300,0x345,0x1f6c,0x345,2,0xf044,0x3a9,0x313,0x301,0x345,0x1f6d,
+0x345,2,0xf044,0x3a9,0x314,0x301,0x345,0x1f6e,0x345,2,0xf044,0x3a9,0x313,0x342,0x345,0x1f6f,
+0x345,2,0xf044,0x3a9,0x314,0x342,0x345,0xe602,0x3b1,0x306,0xe602,0x3b1,0x304,0x1f70,0xf043,0x3b1,
+0x300,0x345,0xf002,0x3b1,0x345,0x3ac,0xf043,0x3b1,0x301,0x345,0x1fb6,0xf043,0x3b1,0x342,0x345,0xe602,
+0x391,0x306,0xe602,0x391,0x304,0xe602,0x391,0x300,0xf002,0x391,0x345,0xe602,0xa8,0x342,0x1f74,0xf043,
+0x3b7,0x300,0x345,0xf002,0x3b7,0x345,0x3ae,0xf043,0x3b7,0x301,0x345,0x1fc6,0xf043,0x3b7,0x342,0x345,
+0xe602,0x395,0x300,0xe602,0x397,0x300,0xf002,0x397,0x345,0xe602,0x1fbf,0x300,0xe602,0x1fbf,0x301,0xe602,
+0x1fbf,0x342,0xe602,0x3b9,0x306,0xe602,0x3b9,0x304,0x3ca,0xe643,0x3b9,0x308,0x300,0xe602,0x3b9,0x342,
+0x3ca,0xe643,0x3b9,0x308,0x342,0xe602,0x399,0x306,0xe602,0x399,0x304,0xe602,0x399,0x300,0xe602,0x1ffe,
+0x300,0xe602,0x1ffe,0x301,0xe602,0x1ffe,0x342,0xe602,0x3c5,0x306,0xe602,0x3c5,0x304,0x3cb,0xe643,0x3c5,
+0x308,0x300,0xe602,0x3c1,0x313,0xe602,0x3c1,0x314,0xe602,0x3c5,0x342,0x3cb,0xe643,0x3c5,0x308,0x342,
+0xe602,0x3a5,0x306,0xe602,0x3a5,0x304,0xe602,0x3a5,0x300,0xe602,0x3a1,0x314,0xe602,0xa8,0x300,0x1f7c,
+0xf043,0x3c9,0x300,0x345,0xf002,0x3c9,0x345,0x3ce,0xf043,0x3c9,0x301,0x345,0x1ff6,0xf043,0x3c9,0x342,
+0x345,0xe602,0x39f,0x300,0xe602,0x3a9,0x300,0xf002,0x3a9,0x345,0x102,0x2190,0x338,0x102,0x2192,0x338,
+0x102,0x2194,0x338,0x102,0x21d0,0x338,0x102,0x21d4,0x338,0x102,0x21d2,0x338,0x102,0x2203,0x338,0x102,
+0x2208,0x338,0x102,0x220b,0x338,0x102,0x2223,0x338,0x102,0x2225,0x338,0x102,0x223c,0x338,0x102,0x2243,
+0x338,0x102,0x2245,0x338,0x102,0x2248,0x338,0x102,0x3d,0x338,0x102,0x2261,0x338,0x102,0x224d,0x338,
+0x102,0x3c,0x338,0x102,0x3e,0x338,0x102,0x2264,0x338,0x102,0x2265,0x338,0x102,0x2272,0x338,0x102,
+0x2273,0x338,0x102,0x2276,0x338,0x102,0x2277,0x338,0x102,0x227a,0x338,0x102,0x227b,0x338,0x102,0x2282,
+0x338,0x102,0x2283,0x338,0x102,0x2286,0x338,0x102,0x2287,0x338,0x102,0x22a2,0x338,0x102,0x22a8,0x338,
+0x102,0x22a9,0x338,0x102,0x22ab,0x338,0x102,0x227c,0x338,0x102,0x227d,0x338,0x102,0x2291,0x338,0x102,
+0x2292,0x338,0x102,0x22b2,0x338,0x102,0x22b3,0x338,0x102,0x22b4,0x338,0x102,0x22b5,0x338,0x802,0x304b,
+0x3099,0x802,0x304d,0x3099,0x802,0x304f,0x3099,0x802,0x3051,0x3099,0x802,0x3053,0x3099,0x802,0x3055,0x3099,
+0x802,0x3057,0x3099,0x802,0x3059,0x3099,0x802,0x305b,0x3099,0x802,0x305d,0x3099,0x802,0x305f,0x3099,0x802,
+0x3061,0x3099,0x802,0x3064,0x3099,0x802,0x3066,0x3099,0x802,0x3068,0x3099,0x802,0x306f,0x3099,0x802,0x306f,
+0x309a,0x802,0x3072,0x3099,0x802,0x3072,0x309a,0x802,0x3075,0x3099,0x802,0x3075,0x309a,0x802,0x3078,0x3099,
+0x802,0x3078,0x309a,0x802,0x307b,0x3099,0x802,0x307b,0x309a,0x802,0x3046,0x3099,0x802,0x309d,0x3099,0x802,
+0x30ab,0x3099,0x802,0x30ad,0x3099,0x802,0x30af,0x3099,0x802,0x30b1,0x3099,0x802,0x30b3,0x3099,0x802,0x30b5,
+0x3099,0x802,0x30b7,0x3099,0x802,0x30b9,0x3099,0x802,0x30bb,0x3099,0x802,0x30bd,0x3099,0x802,0x30bf,0x3099,
+0x802,0x30c1,0x3099,0x802,0x30c4,0x3099,0x802,0x30c6,0x3099,0x802,0x30c8,0x3099,0x802,0x30cf,0x3099,0x802,
+0x30cf,0x309a,0x802,0x30d2,0x3099,0x802,0x30d2,0x309a,0x802,0x30d5,0x3099,0x802,0x30d5,0x309a,0x802,0x30d8,
+0x3099,0x802,0x30d8,0x309a,0x802,0x30db,0x3099,0x802,0x30db,0x309a,0x802,0x30a6,0x3099,0x802,0x30ef,0x3099,
+0x802,0x30f0,0x3099,0x802,0x30f1,0x3099,0x802,0x30f2,0x3099,0x802,0x30fd,0x3099,0x704,0xd804,0xdc99,0xd804,
+0xdcba,0x704,0xd804,0xdc9b,0xd804,0xdcba,0x704,0xd804,0xdca5,0xd804,0xdcba,4,0xd804,0xdd31,0xd804,0xdd27,
+4,0xd804,0xdd32,0xd804,0xdd27,4,0xd804,0xdf47,0xd804,0xdf3e,4,0xd804,0xdf47,0xd804,0xdf57,4,
+0xd805,0xdcb9,0xd805,0xdcba,4,0xd805,0xdcb9,0xd805,0xdcb0,4,0xd805,0xdcb9,0xd805,0xdcbd,4,0xd805,
+0xddb8,0xd805,0xddaf,4,0xd805,0xddb9,0xd805,0xddaf,1,0x2b9,1,0x3b,1,0xb7,0x702,0x915,
+0x93c,0x702,0x916,0x93c,0x702,0x917,0x93c,0x702,0x91c,0x93c,0x702,0x921,0x93c,0x702,0x922,0x93c,
+0x702,0x92b,0x93c,0x702,0x92f,0x93c,0x702,0x9a1,0x9bc,0x702,0x9a2,0x9bc,0x702,0x9af,0x9bc,0x702,
+0xa32,0xa3c,0x702,0xa38,0xa3c,0x702,0xa16,0xa3c,0x702,0xa17,0xa3c,0x702,0xa1c,0xa3c,0x702,0xa2b,
+0xa3c,0x702,0xb21,0xb3c,0x702,0xb22,0xb3c,2,0xf42,0xfb7,2,0xf4c,0xfb7,2,0xf51,0xfb7,
+2,0xf56,0xfb7,2,0xf5b,0xfb7,2,0xf40,0xfb5,0x8202,0xfb2,0xf80,0x8202,0xfb3,0xf80,2,
+0xf92,0xfb7,2,0xf9c,0xfb7,2,0xfa1,0xfb7,2,0xfa6,0xfb7,2,0xfab,0xfb7,2,0xf90,
+0xfb5,1,0x3b9,1,0x60,1,0xb4,1,0x3a9,1,0x4b,1,0x3008,1,0x3009,0x102,
+0x2add,0x338,1,0x8c48,1,0x66f4,1,0x8eca,1,0x8cc8,1,0x6ed1,1,0x4e32,1,0x53e5,
+1,0x9f9c,1,0x5951,1,0x91d1,1,0x5587,1,0x5948,1,0x61f6,1,0x7669,1,0x7f85,
+1,0x863f,1,0x87ba,1,0x88f8,1,0x908f,1,0x6a02,1,0x6d1b,1,0x70d9,1,0x73de,
+1,0x843d,1,0x916a,1,0x99f1,1,0x4e82,1,0x5375,1,0x6b04,1,0x721b,1,0x862d,
+1,0x9e1e,1,0x5d50,1,0x6feb,1,0x85cd,1,0x8964,1,0x62c9,1,0x81d8,1,0x881f,
+1,0x5eca,1,0x6717,1,0x6d6a,1,0x72fc,1,0x90ce,1,0x4f86,1,0x51b7,1,0x52de,
+1,0x64c4,1,0x6ad3,1,0x7210,1,0x76e7,1,0x8001,1,0x8606,1,0x865c,1,0x8def,
+1,0x9732,1,0x9b6f,1,0x9dfa,1,0x788c,1,0x797f,1,0x7da0,1,0x83c9,1,0x9304,
+1,0x9e7f,1,0x8ad6,1,0x58df,1,0x5f04,1,0x7c60,1,0x807e,1,0x7262,1,0x78ca,
+1,0x8cc2,1,0x96f7,1,0x58d8,1,0x5c62,1,0x6a13,1,0x6dda,1,0x6f0f,1,0x7d2f,
+1,0x7e37,1,0x964b,1,0x52d2,1,0x808b,1,0x51dc,1,0x51cc,1,0x7a1c,1,0x7dbe,
+1,0x83f1,1,0x9675,1,0x8b80,1,0x62cf,1,0x8afe,1,0x4e39,1,0x5be7,1,0x6012,
+1,0x7387,1,0x7570,1,0x5317,1,0x78fb,1,0x4fbf,1,0x5fa9,1,0x4e0d,1,0x6ccc,
+1,0x6578,1,0x7d22,1,0x53c3,1,0x585e,1,0x7701,1,0x8449,1,0x8aaa,1,0x6bba,
+1,0x8fb0,1,0x6c88,1,0x62fe,1,0x82e5,1,0x63a0,1,0x7565,1,0x4eae,1,0x5169,
+1,0x51c9,1,0x6881,1,0x7ce7,1,0x826f,1,0x8ad2,1,0x91cf,1,0x52f5,1,0x5442,
+1,0x5973,1,0x5eec,1,0x65c5,1,0x6ffe,1,0x792a,1,0x95ad,1,0x9a6a,1,0x9e97,
+1,0x9ece,1,0x529b,1,0x66c6,1,0x6b77,1,0x8f62,1,0x5e74,1,0x6190,1,0x6200,
+1,0x649a,1,0x6f23,1,0x7149,1,0x7489,1,0x79ca,1,0x7df4,1,0x806f,1,0x8f26,
+1,0x84ee,1,0x9023,1,0x934a,1,0x5217,1,0x52a3,1,0x54bd,1,0x70c8,1,0x88c2,
+1,0x5ec9,1,0x5ff5,1,0x637b,1,0x6bae,1,0x7c3e,1,0x7375,1,0x4ee4,1,0x56f9,
+1,0x5dba,1,0x601c,1,0x73b2,1,0x7469,1,0x7f9a,1,0x8046,1,0x9234,1,0x96f6,
+1,0x9748,1,0x9818,1,0x4f8b,1,0x79ae,1,0x91b4,1,0x96b8,1,0x60e1,1,0x4e86,
+1,0x50da,1,0x5bee,1,0x5c3f,1,0x6599,1,0x71ce,1,0x7642,1,0x84fc,1,0x907c,
+1,0x9f8d,1,0x6688,1,0x962e,1,0x5289,1,0x677b,1,0x67f3,1,0x6d41,1,0x6e9c,
+1,0x7409,1,0x7559,1,0x786b,1,0x7d10,1,0x985e,1,0x516d,1,0x622e,1,0x9678,
+1,0x502b,1,0x5d19,1,0x6dea,1,0x8f2a,1,0x5f8b,1,0x6144,1,0x6817,1,0x9686,
+1,0x5229,1,0x540f,1,0x5c65,1,0x6613,1,0x674e,1,0x68a8,1,0x6ce5,1,0x7406,
+1,0x75e2,1,0x7f79,1,0x88cf,1,0x88e1,1,0x91cc,1,0x96e2,1,0x533f,1,0x6eba,
+1,0x541d,1,0x71d0,1,0x7498,1,0x85fa,1,0x96a3,1,0x9c57,1,0x9e9f,1,0x6797,
+1,0x6dcb,1,0x81e8,1,0x7acb,1,0x7b20,1,0x7c92,1,0x72c0,1,0x7099,1,0x8b58,
+1,0x4ec0,1,0x8336,1,0x523a,1,0x5207,1,0x5ea6,1,0x62d3,1,0x7cd6,1,0x5b85,
+1,0x6d1e,1,0x66b4,1,0x8f3b,1,0x884c,1,0x964d,1,0x898b,1,0x5ed3,1,0x5140,
+1,0x55c0,1,0x585a,1,0x6674,1,0x51de,1,0x732a,1,0x76ca,1,0x793c,1,0x795e,
+1,0x7965,1,0x798f,1,0x9756,1,0x7cbe,1,0x7fbd,1,0x8612,1,0x8af8,1,0x9038,
+1,0x90fd,1,0x98ef,1,0x98fc,1,0x9928,1,0x9db4,1,0x90de,1,0x96b7,1,0x4fae,
+1,0x50e7,1,0x514d,1,0x52c9,1,0x52e4,1,0x5351,1,0x559d,1,0x5606,1,0x5668,
+1,0x5840,1,0x58a8,1,0x5c64,1,0x5c6e,1,0x6094,1,0x6168,1,0x618e,1,0x61f2,
+1,0x654f,1,0x65e2,1,0x6691,1,0x6885,1,0x6d77,1,0x6e1a,1,0x6f22,1,0x716e,
+1,0x722b,1,0x7422,1,0x7891,1,0x793e,1,0x7949,1,0x7948,1,0x7950,1,0x7956,
+1,0x795d,1,0x798d,1,0x798e,1,0x7a40,1,0x7a81,1,0x7bc0,1,0x7e09,1,0x7e41,
+1,0x7f72,1,0x8005,1,0x81ed,1,0x8279,1,0x8457,1,0x8910,1,0x8996,1,0x8b01,
+1,0x8b39,1,0x8cd3,1,0x8d08,1,0x8fb6,1,0x96e3,1,0x97ff,1,0x983b,1,0x6075,
+2,0xd850,0xdeee,1,0x8218,1,0x4e26,1,0x51b5,1,0x5168,1,0x4f80,1,0x5145,1,
+0x5180,1,0x52c7,1,0x52fa,1,0x5555,1,0x5599,1,0x55e2,1,0x58b3,1,0x5944,1,
+0x5954,1,0x5a62,1,0x5b28,1,0x5ed2,1,0x5ed9,1,0x5f69,1,0x5fad,1,0x60d8,1,
+0x614e,1,0x6108,1,0x6160,1,0x6234,1,0x63c4,1,0x641c,1,0x6452,1,0x6556,1,
+0x671b,1,0x6756,1,0x6b79,1,0x6edb,1,0x6ecb,1,0x701e,1,0x77a7,1,0x7235,1,
+0x72af,1,0x7471,1,0x7506,1,0x753b,1,0x761d,1,0x761f,1,0x76db,1,0x76f4,1,
+0x774a,1,0x7740,1,0x78cc,1,0x7ab1,1,0x7c7b,1,0x7d5b,1,0x7f3e,1,0x8352,1,
+0x83ef,1,0x8779,1,0x8941,1,0x8986,1,0x8abf,1,0x8acb,1,0x8aed,1,0x8b8a,1,
+0x8f38,1,0x9072,1,0x9199,1,0x9276,1,0x967c,1,0x97db,1,0x980b,1,0x9b12,2,
+0xd84a,0xdc4a,2,0xd84a,0xdc44,2,0xd84c,0xdfd5,1,0x3b9d,1,0x4018,1,0x4039,2,0xd854,
+0xde49,2,0xd857,0xdcd0,2,0xd85f,0xded3,1,0x9f43,1,0x9f8e,0xe02,0x5d9,0x5b4,0x1102,0x5f2,
+0x5b7,0x1802,0x5e9,0x5c1,0x1902,0x5e9,0x5c2,0xfb49,0x1843,0x5e9,0x5bc,0x5c1,0xfb49,0x1943,0x5e9,0x5bc,
+0x5c2,0x1102,0x5d0,0x5b7,0x1202,0x5d0,0x5b8,0x1502,0x5d0,0x5bc,0x1502,0x5d1,0x5bc,0x1502,0x5d2,0x5bc,
+0x1502,0x5d3,0x5bc,0x1502,0x5d4,0x5bc,0x1502,0x5d5,0x5bc,0x1502,0x5d6,0x5bc,0x1502,0x5d8,0x5bc,0x1502,
+0x5d9,0x5bc,0x1502,0x5da,0x5bc,0x1502,0x5db,0x5bc,0x1502,0x5dc,0x5bc,0x1502,0x5de,0x5bc,0x1502,0x5e0,
+0x5bc,0x1502,0x5e1,0x5bc,0x1502,0x5e3,0x5bc,0x1502,0x5e4,0x5bc,0x1502,0x5e6,0x5bc,0x1502,0x5e7,0x5bc,
+0x1502,0x5e8,0x5bc,0x1502,0x5e9,0x5bc,0x1502,0x5ea,0x5bc,0x1302,0x5d5,0x5b9,0x1702,0x5d1,0x5bf,0x1702,
+0x5db,0x5bf,0x1702,0x5e4,0x5bf,0xd804,0xd834,0xdd57,0xd834,0xdd65,0xd804,0xd834,0xdd58,0xd834,0xdd65,0xd834,
+0xdd5f,0xd834,0xdd6e,4,0xd846,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd6e,0xd834,0xdd5f,0xd834,0xdd6f,4,
+0xd846,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd6f,0xd834,0xdd5f,0xd834,0xdd70,4,0xd846,0xd834,0xdd58,0xd834,
+0xdd65,0xd834,0xdd70,0xd834,0xdd5f,0xd834,0xdd71,4,0xd846,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd71,0xd834,
+0xdd5f,0xd834,0xdd72,4,0xd846,0xd834,0xdd58,0xd834,0xdd65,0xd834,0xdd72,0xd804,0xd834,0xddb9,0xd834,0xdd65,
+0xd804,0xd834,0xddba,0xd834,0xdd65,0xd834,0xddbb,0xd834,0xdd6e,4,0xd846,0xd834,0xddb9,0xd834,0xdd65,0xd834,
+0xdd6e,0xd834,0xddbc,0xd834,0xdd6e,4,0xd846,0xd834,0xddba,0xd834,0xdd65,0xd834,0xdd6e,0xd834,0xddbb,0xd834,
+0xdd6f,4,0xd846,0xd834,0xddb9,0xd834,0xdd65,0xd834,0xdd6f,0xd834,0xddbc,0xd834,0xdd6f,4,0xd846,0xd834,
+0xddba,0xd834,0xdd65,0xd834,0xdd6f,1,0x4e3d,1,0x4e38,1,0x4e41,2,0xd840,0xdd22,1,0x4f60,
+1,0x4fbb,1,0x5002,1,0x507a,1,0x5099,1,0x50cf,1,0x349e,2,0xd841,0xde3a,1,
+0x5154,1,0x5164,1,0x5177,2,0xd841,0xdd1c,1,0x34b9,1,0x5167,1,0x518d,2,0xd841,
+0xdd4b,1,0x5197,1,0x51a4,1,0x4ecc,1,0x51ac,2,0xd864,0xdddf,1,0x51f5,1,0x5203,
+1,0x34df,1,0x523b,1,0x5246,1,0x5272,1,0x5277,1,0x3515,1,0x5305,1,0x5306,
+1,0x5349,1,0x535a,1,0x5373,1,0x537d,1,0x537f,2,0xd842,0xde2c,1,0x7070,1,
+0x53ca,1,0x53df,2,0xd842,0xdf63,1,0x53eb,1,0x53f1,1,0x5406,1,0x549e,1,0x5438,
+1,0x5448,1,0x5468,1,0x54a2,1,0x54f6,1,0x5510,1,0x5553,1,0x5563,1,0x5584,
+1,0x55ab,1,0x55b3,1,0x55c2,1,0x5716,1,0x5717,1,0x5651,1,0x5674,1,0x58ee,
+1,0x57ce,1,0x57f4,1,0x580d,1,0x578b,1,0x5832,1,0x5831,1,0x58ac,2,0xd845,
+0xdce4,1,0x58f2,1,0x58f7,1,0x5906,1,0x591a,1,0x5922,1,0x5962,2,0xd845,0xdea8,
+2,0xd845,0xdeea,1,0x59ec,1,0x5a1b,1,0x5a27,1,0x59d8,1,0x5a66,1,0x36ee,1,
+0x36fc,1,0x5b08,1,0x5b3e,2,0xd846,0xddc8,1,0x5bc3,1,0x5bd8,1,0x5bf3,2,0xd846,
+0xdf18,1,0x5bff,1,0x5c06,1,0x5f53,1,0x5c22,1,0x3781,1,0x5c60,1,0x5cc0,1,
+0x5c8d,2,0xd847,0xdde4,1,0x5d43,2,0xd847,0xdde6,1,0x5d6e,1,0x5d6b,1,0x5d7c,1,
+0x5de1,1,0x5de2,1,0x382f,1,0x5dfd,1,0x5e28,1,0x5e3d,1,0x5e69,1,0x3862,2,
+0xd848,0xdd83,1,0x387c,1,0x5eb0,1,0x5eb3,1,0x5eb6,2,0xd868,0xdf92,1,0x5efe,2,
+0xd848,0xdf31,1,0x8201,1,0x5f22,1,0x38c7,2,0xd84c,0xdeb8,2,0xd858,0xddda,1,0x5f62,
+1,0x5f6b,1,0x38e3,1,0x5f9a,1,0x5fcd,1,0x5fd7,1,0x5ff9,1,0x6081,1,0x393a,
+1,0x391c,2,0xd849,0xded4,1,0x60c7,1,0x6148,1,0x614c,1,0x617a,1,0x61b2,1,
+0x61a4,1,0x61af,1,0x61de,1,0x6210,1,0x621b,1,0x625d,1,0x62b1,1,0x62d4,1,
+0x6350,2,0xd84a,0xdf0c,1,0x633d,1,0x62fc,1,0x6368,1,0x6383,1,0x63e4,2,0xd84a,
+0xdff1,1,0x6422,1,0x63c5,1,0x63a9,1,0x3a2e,1,0x6469,1,0x647e,1,0x649d,1,
+0x6477,1,0x3a6c,1,0x656c,2,0xd84c,0xdc0a,1,0x65e3,1,0x66f8,1,0x6649,1,0x3b19,
+1,0x3b08,1,0x3ae4,1,0x5192,1,0x5195,1,0x6700,1,0x669c,1,0x80ad,1,0x43d9,
+1,0x6721,1,0x675e,1,0x6753,2,0xd84c,0xdfc3,1,0x3b49,1,0x67fa,1,0x6785,1,
+0x6852,2,0xd84d,0xdc6d,1,0x688e,1,0x681f,1,0x6914,1,0x6942,1,0x69a3,1,0x69ea,
+1,0x6aa8,2,0xd84d,0xdea3,1,0x6adb,1,0x3c18,1,0x6b21,2,0xd84e,0xdca7,1,0x6b54,
+1,0x3c4e,1,0x6b72,1,0x6b9f,1,0x6bbb,2,0xd84e,0xde8d,2,0xd847,0xdd0b,2,0xd84e,
+0xdefa,1,0x6c4e,2,0xd84f,0xdcbc,1,0x6cbf,1,0x6ccd,1,0x6c67,1,0x6d16,1,0x6d3e,
+1,0x6d69,1,0x6d78,1,0x6d85,2,0xd84f,0xdd1e,1,0x6d34,1,0x6e2f,1,0x6e6e,1,
+0x3d33,1,0x6ec7,2,0xd84f,0xded1,1,0x6df9,1,0x6f6e,2,0xd84f,0xdf5e,2,0xd84f,0xdf8e,
+1,0x6fc6,1,0x7039,1,0x701b,1,0x3d96,1,0x704a,1,0x707d,1,0x7077,1,0x70ad,
+2,0xd841,0xdd25,1,0x7145,2,0xd850,0xde63,1,0x719c,2,0xd850,0xdfab,1,0x7228,1,
+0x7250,2,0xd851,0xde08,1,0x7280,1,0x7295,2,0xd851,0xdf35,2,0xd852,0xdc14,1,0x737a,
+1,0x738b,1,0x3eac,1,0x73a5,1,0x3eb8,1,0x7447,1,0x745c,1,0x7485,1,0x74ca,
+1,0x3f1b,1,0x7524,2,0xd853,0xdc36,1,0x753e,2,0xd853,0xdc92,2,0xd848,0xdd9f,1,
+0x7610,2,0xd853,0xdfa1,2,0xd853,0xdfb8,2,0xd854,0xdc44,1,0x3ffc,1,0x4008,2,0xd854,
+0xdcf3,2,0xd854,0xdcf2,2,0xd854,0xdd19,2,0xd854,0xdd33,1,0x771e,1,0x771f,1,0x778b,
+1,0x4046,1,0x4096,2,0xd855,0xdc1d,1,0x784e,1,0x40e3,2,0xd855,0xde26,2,0xd855,
+0xde9a,2,0xd855,0xdec5,1,0x79eb,1,0x412f,1,0x7a4a,1,0x7a4f,2,0xd856,0xdd7c,2,
+0xd856,0xdea7,1,0x7aee,1,0x4202,2,0xd856,0xdfab,1,0x7bc6,1,0x7bc9,1,0x4227,2,
+0xd857,0xdc80,1,0x7cd2,1,0x42a0,1,0x7ce8,1,0x7ce3,1,0x7d00,2,0xd857,0xdf86,1,
+0x7d63,1,0x4301,1,0x7dc7,1,0x7e02,1,0x7e45,1,0x4334,2,0xd858,0xde28,2,0xd858,
+0xde47,1,0x4359,2,0xd858,0xded9,1,0x7f7a,2,0xd858,0xdf3e,1,0x7f95,1,0x7ffa,2,
+0xd859,0xdcda,2,0xd859,0xdd23,1,0x8060,2,0xd859,0xdda8,1,0x8070,2,0xd84c,0xdf5f,1,
+0x43d5,1,0x80b2,1,0x8103,1,0x440b,1,0x813e,1,0x5ab5,2,0xd859,0xdfa7,2,0xd859,
+0xdfb5,2,0xd84c,0xdf93,2,0xd84c,0xdf9c,1,0x8204,1,0x8f9e,1,0x446b,1,0x8291,1,
+0x828b,1,0x829d,1,0x52b3,1,0x82b1,1,0x82b3,1,0x82bd,1,0x82e6,2,0xd85a,0xdf3c,
+1,0x831d,1,0x8363,1,0x83ad,1,0x8323,1,0x83bd,1,0x83e7,1,0x8353,1,0x83ca,
+1,0x83cc,1,0x83dc,2,0xd85b,0xdc36,2,0xd85b,0xdd6b,2,0xd85b,0xdcd5,1,0x452b,1,
+0x84f1,1,0x84f3,1,0x8516,2,0xd85c,0xdfca,1,0x8564,2,0xd85b,0xdf2c,1,0x455d,1,
+0x4561,2,0xd85b,0xdfb1,2,0xd85c,0xdcd2,1,0x456b,1,0x8650,1,0x8667,1,0x8669,1,
+0x86a9,1,0x8688,1,0x870e,1,0x86e2,1,0x8728,1,0x876b,1,0x8786,1,0x45d7,1,
+0x87e1,1,0x8801,1,0x45f9,1,0x8860,1,0x8863,2,0xd85d,0xde67,1,0x88d7,1,0x88de,
+1,0x4635,1,0x88fa,1,0x34bb,2,0xd85e,0xdcae,2,0xd85e,0xdd66,1,0x46be,1,0x46c7,
+1,0x8aa0,1,0x8c55,2,0xd85f,0xdca8,1,0x8cab,1,0x8cc1,1,0x8d1b,1,0x8d77,2,
+0xd85f,0xdf2f,2,0xd842,0xdc04,1,0x8dcb,1,0x8dbc,1,0x8df0,2,0xd842,0xdcde,1,0x8ed4,
+2,0xd861,0xddd2,2,0xd861,0xdded,1,0x9094,1,0x90f1,1,0x9111,2,0xd861,0xdf2e,1,
+0x911b,1,0x9238,1,0x92d7,1,0x92d8,1,0x927c,1,0x93f9,1,0x9415,2,0xd862,0xdffa,
+1,0x958b,1,0x4995,1,0x95b7,2,0xd863,0xdd77,1,0x49e6,1,0x96c3,1,0x5db2,1,
+0x9723,2,0xd864,0xdd45,2,0xd864,0xde1a,1,0x4a6e,1,0x4a76,1,0x97e0,2,0xd865,0xdc0a,
+1,0x4ab2,2,0xd865,0xdc96,1,0x9829,2,0xd865,0xddb6,1,0x98e2,1,0x4b33,1,0x9929,
+1,0x99a7,1,0x99c2,1,0x99fe,1,0x4bce,2,0xd866,0xdf30,1,0x9c40,1,0x9cfd,1,
+0x4cce,1,0x4ced,1,0x9d67,2,0xd868,0xdcce,1,0x4cf8,2,0xd868,0xdd05,2,0xd868,0xde0e,
+2,0xd868,0xde91,1,0x9ebb,1,0x4d56,1,0x9ef9,1,0x9efe,1,0x9f05,1,0x9f0f,1,
+0x9f16,1,0x9f3b,2,0xd869,0xde00,0x3ac,0xe642,0x3b1,0x301,0x3ad,0xe642,0x3b5,0x301,0x3ae,0xe642,
+0x3b7,0x301,0x3af,0xe642,0x3b9,0x301,0x3cc,0xe642,0x3bf,0x301,0x3cd,0xe642,0x3c5,0x301,0x3ce,0xe642,
+0x3c9,0x301,0x386,0xe642,0x391,0x301,0x388,0xe642,0x395,0x301,0x389,0xe642,0x397,0x301,0x390,1,
+0xe643,0x3b9,0x308,0x301,0x38a,0xe642,0x399,0x301,0x3b0,1,0xe643,0x3c5,0x308,0x301,0x38e,0xe642,
+0x3a5,0x301,0x385,0xe642,0xa8,0x301,0x38c,0xe642,0x39f,0x301,0x38f,0xe642,0x3a9,0x301,0xc5,0xe642,
+0x41,0x30a,0xe6e6,0xe681,0x300,0xe6e6,0xe681,0x301,0xe6e6,0xe681,0x313,0xe6e6,0xe682,0x308,0x301,0x8100,
+0x8282,0xf71,0xf72,0x8100,0x8482,0xf71,0xf74,0x8100,0x8282,0xf71,0xf80,0
 };
 
 static const uint8_t norm2_nfc_data_smallFCD[256]={
-0xc0,0xef,3,0x7f,0xdf,0x70,0xcf,0x87,0xc7,0x66,0x66,0x46,0x64,0x44,0x66,0x5b,
+0xc0,0xef,3,0x7f,0xdf,0x70,0xcf,0x87,0xc7,0x66,0x66,0x46,0x64,0x46,0x66,0x5b,
 0x12,0,0,4,0,0,0,0x43,0x20,2,0x29,0xae,0xc2,0xc0,0xff,0xff,
 0xc0,0x72,0xbf,0,0,0,0,0,0,0,0x40,0,0x80,0x88,0,0,
 0xfe,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -1135,13 +1143,13 @@
     norm2_nfc_data_trieIndex+2720,
     NULL,
     2720,
-    6932,
+    7056,
     0x188,
     0xb1c,
-    0x0,
-    0x0,
+    0x1,
+    0x1,
     0x30000,
-    0x25b0,
+    0x262c,
     NULL, 0, FALSE, FALSE, 0, NULL
 };
 

Modified: trunk/Build/source/libs/icu/icu-src/source/common/norm2allmodes.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/norm2allmodes.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/norm2allmodes.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 *******************************************************************************
@@ -5,7 +5,7 @@
 * Copyright (C) 2014, International Business Machines
 * Corporation and others.  All Rights Reserved.
 *******************************************************************************
-* loadednormalizer2impl.h
+* norm2allmodes.h
 *
 * created on: 2014sep07
 * created by: Markus W. Scherer
@@ -18,7 +18,9 @@
 
 #if !UCONFIG_NO_NORMALIZATION
 
+#include "unicode/edits.h"
 #include "unicode/normalizer2.h"
+#include "unicode/stringoptions.h"
 #include "unicode/unistr.h"
 #include "cpputils.h"
 #include "normalizer2impl.h"
@@ -210,8 +212,8 @@
     virtual UNormalizationCheckResult getQuickCheck(UChar32 c) const {
         return impl.isDecompYes(impl.getNorm16(c)) ? UNORM_YES : UNORM_NO;
     }
-    virtual UBool hasBoundaryBefore(UChar32 c) const { return impl.hasDecompBoundary(c, TRUE); }
-    virtual UBool hasBoundaryAfter(UChar32 c) const { return impl.hasDecompBoundary(c, FALSE); }
+    virtual UBool hasBoundaryBefore(UChar32 c) const { return impl.hasDecompBoundaryBefore(c); }
+    virtual UBool hasBoundaryAfter(UChar32 c) const { return impl.hasDecompBoundaryAfter(c); }
     virtual UBool isInert(UChar32 c) const { return impl.isDecompInert(c); }
 };
 
@@ -224,19 +226,35 @@
 private:
     virtual void
     normalize(const UChar *src, const UChar *limit,
-              ReorderingBuffer &buffer, UErrorCode &errorCode) const {
+              ReorderingBuffer &buffer, UErrorCode &errorCode) const U_OVERRIDE {
         impl.compose(src, limit, onlyContiguous, TRUE, buffer, errorCode);
     }
     using Normalizer2WithImpl::normalize;  // Avoid warning about hiding base class function.
+
+    void
+    normalizeUTF8(uint32_t options, StringPiece src, ByteSink &sink,
+                  Edits *edits, UErrorCode &errorCode) const U_OVERRIDE {
+        if (U_FAILURE(errorCode)) {
+            return;
+        }
+        if (edits != nullptr && (options & U_EDITS_NO_RESET) == 0) {
+            edits->reset();
+        }
+        const uint8_t *s = reinterpret_cast<const uint8_t *>(src.data());
+        impl.composeUTF8(options, onlyContiguous, s, s + src.length(),
+                         &sink, edits, errorCode);
+        sink.Flush();
+    }
+
     virtual void
     normalizeAndAppend(const UChar *src, const UChar *limit, UBool doNormalize,
                        UnicodeString &safeMiddle,
-                       ReorderingBuffer &buffer, UErrorCode &errorCode) const {
+                       ReorderingBuffer &buffer, UErrorCode &errorCode) const U_OVERRIDE {
         impl.composeAndAppend(src, limit, doNormalize, onlyContiguous, safeMiddle, buffer, errorCode);
     }
 
     virtual UBool
-    isNormalized(const UnicodeString &s, UErrorCode &errorCode) const {
+    isNormalized(const UnicodeString &s, UErrorCode &errorCode) const U_OVERRIDE {
         if(U_FAILURE(errorCode)) {
             return FALSE;
         }
@@ -252,8 +270,16 @@
         }
         return impl.compose(sArray, sArray+s.length(), onlyContiguous, FALSE, buffer, errorCode);
     }
+    virtual UBool
+    isNormalizedUTF8(StringPiece sp, UErrorCode &errorCode) const U_OVERRIDE {
+        if(U_FAILURE(errorCode)) {
+            return FALSE;
+        }
+        const uint8_t *s = reinterpret_cast<const uint8_t *>(sp.data());
+        return impl.composeUTF8(0, onlyContiguous, s, s + sp.length(), nullptr, nullptr, errorCode);
+    }
     virtual UNormalizationCheckResult
-    quickCheck(const UnicodeString &s, UErrorCode &errorCode) const {
+    quickCheck(const UnicodeString &s, UErrorCode &errorCode) const U_OVERRIDE {
         if(U_FAILURE(errorCode)) {
             return UNORM_MAYBE;
         }
@@ -267,21 +293,21 @@
         return qcResult;
     }
     virtual const UChar *
-    spanQuickCheckYes(const UChar *src, const UChar *limit, UErrorCode &) const {
+    spanQuickCheckYes(const UChar *src, const UChar *limit, UErrorCode &) const U_OVERRIDE {
         return impl.composeQuickCheck(src, limit, onlyContiguous, NULL);
     }
     using Normalizer2WithImpl::spanQuickCheckYes;  // Avoid warning about hiding base class function.
-    virtual UNormalizationCheckResult getQuickCheck(UChar32 c) const {
+    virtual UNormalizationCheckResult getQuickCheck(UChar32 c) const U_OVERRIDE {
         return impl.getCompQuickCheck(impl.getNorm16(c));
     }
-    virtual UBool hasBoundaryBefore(UChar32 c) const {
+    virtual UBool hasBoundaryBefore(UChar32 c) const U_OVERRIDE {
         return impl.hasCompBoundaryBefore(c);
     }
-    virtual UBool hasBoundaryAfter(UChar32 c) const {
-        return impl.hasCompBoundaryAfter(c, onlyContiguous, FALSE);
+    virtual UBool hasBoundaryAfter(UChar32 c) const U_OVERRIDE {
+        return impl.hasCompBoundaryAfter(c, onlyContiguous);
     }
-    virtual UBool isInert(UChar32 c) const {
-        return impl.hasCompBoundaryAfter(c, onlyContiguous, TRUE);
+    virtual UBool isInert(UChar32 c) const U_OVERRIDE {
+        return impl.isCompInert(c, onlyContiguous);
     }
 
     const UBool onlyContiguous;

Modified: trunk/Build/source/libs/icu/icu-src/source/common/normalizer2.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/normalizer2.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/normalizer2.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 *******************************************************************************
@@ -8,7 +8,7 @@
 *
 *******************************************************************************
 *   file name:  normalizer2.cpp
-*   encoding:   US-ASCII
+*   encoding:   UTF-8
 *   tab size:   8 (not used)
 *   indentation:4
 *
@@ -20,7 +20,9 @@
 
 #if !UCONFIG_NO_NORMALIZATION
 
+#include "unicode/edits.h"
 #include "unicode/normalizer2.h"
+#include "unicode/stringoptions.h"
 #include "unicode/unistr.h"
 #include "unicode/unorm.h"
 #include "cstring.h"
@@ -42,6 +44,20 @@
 
 Normalizer2::~Normalizer2() {}
 
+void
+Normalizer2::normalizeUTF8(uint32_t /*options*/, StringPiece src, ByteSink &sink,
+                           Edits *edits, UErrorCode &errorCode) const {
+    if (U_FAILURE(errorCode)) {
+        return;
+    }
+    if (edits != nullptr) {
+        errorCode = U_UNSUPPORTED_ERROR;
+        return;
+    }
+    UnicodeString src16 = UnicodeString::fromUTF8(src);
+    normalize(src16, errorCode).toUTF8(sink);
+}
+
 UBool
 Normalizer2::getRawDecomposition(UChar32, UnicodeString &) const {
     return FALSE;
@@ -57,6 +73,11 @@
     return 0;
 }
 
+UBool
+Normalizer2::isNormalizedUTF8(StringPiece s, UErrorCode &errorCode) const {
+    return U_SUCCESS(errorCode) && isNormalized(UnicodeString::fromUTF8(s), errorCode);
+}
+
 // Normalizer2 implementation for the old UNORM_NONE.
 class NoopNormalizer2 : public Normalizer2 {
     virtual ~NoopNormalizer2();
@@ -64,7 +85,7 @@
     virtual UnicodeString &
     normalize(const UnicodeString &src,
               UnicodeString &dest,
-              UErrorCode &errorCode) const {
+              UErrorCode &errorCode) const U_OVERRIDE {
         if(U_SUCCESS(errorCode)) {
             if(&dest!=&src) {
                 dest=src;
@@ -74,10 +95,27 @@
         }
         return dest;
     }
+    virtual void
+    normalizeUTF8(uint32_t options, StringPiece src, ByteSink &sink,
+                  Edits *edits, UErrorCode &errorCode) const U_OVERRIDE {
+        if(U_SUCCESS(errorCode)) {
+            if (edits != nullptr) {
+                if ((options & U_EDITS_NO_RESET) == 0) {
+                    edits->reset();
+                }
+                edits->addUnchanged(src.length());
+            }
+            if ((options & U_OMIT_UNCHANGED_TEXT) == 0) {
+                sink.Append(src.data(), src.length());
+            }
+            sink.Flush();
+        }
+    }
+
     virtual UnicodeString &
     normalizeSecondAndAppend(UnicodeString &first,
                              const UnicodeString &second,
-                             UErrorCode &errorCode) const {
+                             UErrorCode &errorCode) const U_OVERRIDE {
         if(U_SUCCESS(errorCode)) {
             if(&first!=&second) {
                 first.append(second);
@@ -90,7 +128,7 @@
     virtual UnicodeString &
     append(UnicodeString &first,
            const UnicodeString &second,
-           UErrorCode &errorCode) const {
+           UErrorCode &errorCode) const U_OVERRIDE {
         if(U_SUCCESS(errorCode)) {
             if(&first!=&second) {
                 first.append(second);
@@ -101,25 +139,29 @@
         return first;
     }
     virtual UBool
-    getDecomposition(UChar32, UnicodeString &) const {
+    getDecomposition(UChar32, UnicodeString &) const U_OVERRIDE {
         return FALSE;
     }
-    // No need to override the default getRawDecomposition().
+    // No need to U_OVERRIDE the default getRawDecomposition().
     virtual UBool
-    isNormalized(const UnicodeString &, UErrorCode &) const {
-        return TRUE;
+    isNormalized(const UnicodeString &, UErrorCode &errorCode) const U_OVERRIDE {
+        return U_SUCCESS(errorCode);
     }
+    virtual UBool
+    isNormalizedUTF8(StringPiece, UErrorCode &errorCode) const U_OVERRIDE {
+        return U_SUCCESS(errorCode);
+    }
     virtual UNormalizationCheckResult
-    quickCheck(const UnicodeString &, UErrorCode &) const {
+    quickCheck(const UnicodeString &, UErrorCode &) const U_OVERRIDE {
         return UNORM_YES;
     }
     virtual int32_t
-    spanQuickCheckYes(const UnicodeString &s, UErrorCode &) const {
+    spanQuickCheckYes(const UnicodeString &s, UErrorCode &) const U_OVERRIDE {
         return s.length();
     }
-    virtual UBool hasBoundaryBefore(UChar32) const { return TRUE; }
-    virtual UBool hasBoundaryAfter(UChar32) const { return TRUE; }
-    virtual UBool isInert(UChar32) const { return TRUE; }
+    virtual UBool hasBoundaryBefore(UChar32) const U_OVERRIDE { return TRUE; }
+    virtual UBool hasBoundaryAfter(UChar32) const U_OVERRIDE { return TRUE; }
+    virtual UBool isInert(UChar32) const U_OVERRIDE { return TRUE; }
 };
 
 NoopNormalizer2::~NoopNormalizer2() {}

Modified: trunk/Build/source/libs/icu/icu-src/source/common/normalizer2impl.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/normalizer2impl.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/normalizer2impl.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 *******************************************************************************
@@ -8,7 +8,7 @@
 *
 *******************************************************************************
 *   file name:  normalizer2impl.cpp
-*   encoding:   US-ASCII
+*   encoding:   UTF-8
 *   tab size:   8 (not used)
 *   indentation:4
 *
@@ -20,10 +20,15 @@
 
 #if !UCONFIG_NO_NORMALIZATION
 
+#include "unicode/bytestream.h"
+#include "unicode/edits.h"
 #include "unicode/normalizer2.h"
+#include "unicode/stringoptions.h"
 #include "unicode/udata.h"
 #include "unicode/ustring.h"
 #include "unicode/utf16.h"
+#include "unicode/utf8.h"
+#include "bytesinkutil.h"
 #include "cmemory.h"
 #include "mutex.h"
 #include "normalizer2impl.h"
@@ -35,8 +40,142 @@
 
 U_NAMESPACE_BEGIN
 
+namespace {
+
+/**
+ * UTF-8 lead byte for minNoMaybeCP.
+ * Can be lower than the actual lead byte for c.
+ * Typically U+0300 for NFC/NFD, U+00A0 for NFKC/NFKD, U+0041 for NFKC_Casefold.
+ */
+inline uint8_t leadByteForCP(UChar32 c) {
+    if (c <= 0x7f) {
+        return (uint8_t)c;
+    } else if (c <= 0x7ff) {
+        return (uint8_t)(0xc0+(c>>6));
+    } else {
+        // Should not occur because ccc(U+0300)!=0.
+        return 0xe0;
+    }
+}
+
+/**
+ * Returns the code point from one single well-formed UTF-8 byte sequence
+ * between cpStart and cpLimit.
+ *
+ * UTrie2 UTF-8 macros do not assemble whole code points (for efficiency).
+ * When we do need the code point, we call this function.
+ * We should not need it for normalization-inert data (norm16==0).
+ * Illegal sequences yield the error value norm16==0 just like real normalization-inert code points.
+ */
+UChar32 codePointFromValidUTF8(const uint8_t *cpStart, const uint8_t *cpLimit) {
+    // Similar to U8_NEXT_UNSAFE(s, i, c).
+    U_ASSERT(cpStart < cpLimit);
+    uint8_t c = *cpStart;
+    switch(cpLimit-cpStart) {
+    case 1:
+        return c;
+    case 2:
+        return ((c&0x1f)<<6) | (cpStart[1]&0x3f);
+    case 3:
+        // no need for (c&0xf) because the upper bits are truncated after <<12 in the cast to (UChar)
+        return (UChar)((c<<12) | ((cpStart[1]&0x3f)<<6) | (cpStart[2]&0x3f));
+    case 4:
+        return ((c&7)<<18) | ((cpStart[1]&0x3f)<<12) | ((cpStart[2]&0x3f)<<6) | (cpStart[3]&0x3f);
+    default:
+        U_ASSERT(FALSE);  // Should not occur.
+        return U_SENTINEL;
+    }
+}
+
+/**
+ * Returns the last code point in [start, p[ if it is valid and in U+1000..U+D7FF.
+ * Otherwise returns a negative value.
+ */
+UChar32 previousHangulOrJamo(const uint8_t *start, const uint8_t *p) {
+    if ((p - start) >= 3) {
+        p -= 3;
+        uint8_t l = *p;
+        uint8_t t1, t2;
+        if (0xe1 <= l && l <= 0xed &&
+                (t1 = (uint8_t)(p[1] - 0x80)) <= 0x3f &&
+                (t2 = (uint8_t)(p[2] - 0x80)) <= 0x3f &&
+                (l < 0xed || t1 <= 0x1f)) {
+            return ((l & 0xf) << 12) | (t1 << 6) | t2;
+        }
+    }
+    return U_SENTINEL;
+}
+
+/**
+ * Returns the offset from the Jamo T base if [src, limit[ starts with a single Jamo T code point.
+ * Otherwise returns a negative value.
+ */
+int32_t getJamoTMinusBase(const uint8_t *src, const uint8_t *limit) {
+    // Jamo T: E1 86 A8..E1 87 82
+    if ((limit - src) >= 3 && *src == 0xe1) {
+        if (src[1] == 0x86) {
+            uint8_t t = src[2];
+            // The first Jamo T is U+11A8 but JAMO_T_BASE is 11A7.
+            // Offset 0 does not correspond to any conjoining Jamo.
+            if (0xa8 <= t && t <= 0xbf) {
+                return t - 0xa7;
+            }
+        } else if (src[1] == 0x87) {
+            uint8_t t = src[2];
+            if ((int8_t)t <= (int8_t)0x82) {
+                return t - (0xa7 - 0x40);
+            }
+        }
+    }
+    return -1;
+}
+
+void
+appendCodePointDelta(const uint8_t *cpStart, const uint8_t *cpLimit, int32_t delta,
+                     ByteSink &sink, Edits *edits) {
+    char buffer[U8_MAX_LENGTH];
+    int32_t length;
+    int32_t cpLength = (int32_t)(cpLimit - cpStart);
+    if (cpLength == 1) {
+        // The builder makes ASCII map to ASCII.
+        buffer[0] = (uint8_t)(*cpStart + delta);
+        length = 1;
+    } else {
+        int32_t trail = *(cpLimit-1) + delta;
+        if (0x80 <= trail && trail <= 0xbf) {
+            // The delta only changes the last trail byte.
+            --cpLimit;
+            length = 0;
+            do { buffer[length++] = *cpStart++; } while (cpStart < cpLimit);
+            buffer[length++] = (uint8_t)trail;
+        } else {
+            // Decode the code point, add the delta, re-encode.
+            UChar32 c = codePointFromValidUTF8(cpStart, cpLimit) + delta;
+            length = 0;
+            U8_APPEND_UNSAFE(buffer, length, c);
+        }
+    }
+    if (edits != nullptr) {
+        edits->addReplace(cpLength, length);
+    }
+    sink.Append(buffer, length);
+}
+
+}  // namespace
+
 // ReorderingBuffer -------------------------------------------------------- ***
 
+ReorderingBuffer::ReorderingBuffer(const Normalizer2Impl &ni, UnicodeString &dest,
+                                   UErrorCode &errorCode) :
+        impl(ni), str(dest),
+        start(str.getBuffer(8)), reorderStart(start), limit(start),
+        remainingCapacity(str.getCapacity()), lastCC(0) {
+    if (start == nullptr && U_SUCCESS(errorCode)) {
+        // getBuffer() already did str.setToBogus()
+        errorCode = U_MEMORY_ALLOCATION_ERROR;
+    }
+}
+
 UBool ReorderingBuffer::init(int32_t destCapacity, UErrorCode &errorCode) {
     int32_t length=str.length();
     start=str.getBuffer(destCapacity);
@@ -69,6 +208,32 @@
         0==u_memcmp(start, otherStart, length);
 }
 
+UBool ReorderingBuffer::equals(const uint8_t *otherStart, const uint8_t *otherLimit) const {
+    U_ASSERT((otherLimit - otherStart) <= INT32_MAX);  // ensured by caller
+    int32_t length = (int32_t)(limit - start);
+    int32_t otherLength = (int32_t)(otherLimit - otherStart);
+    // For equal strings, UTF-8 is at least as long as UTF-16, and at most three times as long.
+    if (otherLength < length || (otherLength / 3) > length) {
+        return FALSE;
+    }
+    // Compare valid strings from between normalization boundaries.
+    // (Invalid sequences are normalization-inert.)
+    for (int32_t i = 0, j = 0;;) {
+        if (i >= length) {
+            return j >= otherLength;
+        } else if (j >= otherLength) {
+            return FALSE;
+        }
+        // Not at the end of either string yet.
+        UChar32 c, other;
+        U16_NEXT_UNSAFE(start, i, c);
+        U8_NEXT_UNSAFE(otherStart, j, other);
+        if (c != other) {
+            return FALSE;
+        }
+    }
+}
+
 UBool ReorderingBuffer::appendSupplementary(UChar32 c, uint8_t cc, UErrorCode &errorCode) {
     if(remainingCapacity<2 && !resize(2, errorCode)) {
         return FALSE;
@@ -216,16 +381,12 @@
         return 0;
     }
     UChar32 c=*--codePointStart;
-    if(c<Normalizer2Impl::MIN_CCC_LCCC_CP) {
-        return 0;
-    }
-
     UChar c2;
     if(U16_IS_TRAIL(c) && start<codePointStart && U16_IS_LEAD(c2=*(codePointStart-1))) {
         --codePointStart;
         c=U16_GET_SUPPLEMENTARY(c2, c);
     }
-    return Normalizer2Impl::getCCFromYesOrMaybe(impl.getNorm16(c));
+    return impl.getCCFromYesOrMaybeCP(c);
 }
 
 // Inserts c somewhere before the last character.
@@ -263,68 +424,36 @@
                       const uint16_t *inExtraData, const uint8_t *inSmallFCD) {
     minDecompNoCP=inIndexes[IX_MIN_DECOMP_NO_CP];
     minCompNoMaybeCP=inIndexes[IX_MIN_COMP_NO_MAYBE_CP];
+    minLcccCP=inIndexes[IX_MIN_LCCC_CP];
 
     minYesNo=inIndexes[IX_MIN_YES_NO];
     minYesNoMappingsOnly=inIndexes[IX_MIN_YES_NO_MAPPINGS_ONLY];
     minNoNo=inIndexes[IX_MIN_NO_NO];
+    minNoNoCompBoundaryBefore=inIndexes[IX_MIN_NO_NO_COMP_BOUNDARY_BEFORE];
+    minNoNoCompNoMaybeCC=inIndexes[IX_MIN_NO_NO_COMP_NO_MAYBE_CC];
+    minNoNoEmpty=inIndexes[IX_MIN_NO_NO_EMPTY];
     limitNoNo=inIndexes[IX_LIMIT_NO_NO];
     minMaybeYes=inIndexes[IX_MIN_MAYBE_YES];
+    U_ASSERT((minMaybeYes&7)==0);  // 8-aligned for noNoDelta bit fields
+    centerNoNoDelta=(minMaybeYes>>DELTA_SHIFT)-MAX_DELTA-1;
 
     normTrie=inTrie;
 
     maybeYesCompositions=inExtraData;
-    extraData=maybeYesCompositions+(MIN_NORMAL_MAYBE_YES-minMaybeYes);
+    extraData=maybeYesCompositions+((MIN_NORMAL_MAYBE_YES-minMaybeYes)>>OFFSET_SHIFT);
 
     smallFCD=inSmallFCD;
-
-    // Build tccc180[].
-    // gennorm2 enforces lccc=0 for c<MIN_CCC_LCCC_CP=U+0300.
-    uint8_t bits=0;
-    for(UChar c=0; c<0x180; bits>>=1) {
-        if((c&0xff)==0) {
-            bits=smallFCD[c>>8];  // one byte per 0x100 code points
-        }
-        if(bits&1) {
-            for(int i=0; i<0x20; ++i, ++c) {
-                tccc180[c]=(uint8_t)getFCD16FromNormData(c);
-            }
-        } else {
-            uprv_memset(tccc180+c, 0, 0x20);
-            c+=0x20;
-        }
-    }
 }
 
-uint8_t Normalizer2Impl::getTrailCCFromCompYesAndZeroCC(const UChar *cpStart, const UChar *cpLimit) const {
-    UChar32 c;
-    if(cpStart==(cpLimit-1)) {
-        c=*cpStart;
-    } else {
-        c=U16_GET_SUPPLEMENTARY(cpStart[0], cpStart[1]);
-    }
-    uint16_t prevNorm16=getNorm16(c);
-    if(prevNorm16<=minYesNo) {
-        return 0;  // yesYes and Hangul LV/LVT have ccc=tccc=0
-    } else {
-        return (uint8_t)(*getMapping(prevNorm16)>>8);  // tccc from yesNo
-    }
-}
-
-namespace {
-
 class LcccContext {
 public:
     LcccContext(const Normalizer2Impl &ni, UnicodeSet &s) : impl(ni), set(s) {}
 
     void handleRange(UChar32 start, UChar32 end, uint16_t norm16) {
-        if(impl.isAlgorithmicNoNo(norm16)) {
-            // Range of code points with same-norm16-value algorithmic decompositions.
-            // They might have different non-zero FCD16 values.
-            do {
-                uint16_t fcd16=impl.getFCD16(start);
-                if(fcd16>0xff) { set.add(start); }
-            } while(++start<=end);
-        } else {
+        if (norm16 > Normalizer2Impl::MIN_NORMAL_MAYBE_YES &&
+                norm16 != Normalizer2Impl::JAMO_VT) {
+            set.add(start, end);
+        } else if (impl.minNoNoCompNoMaybeCC <= norm16 && norm16 < impl.limitNoNo) {
             uint16_t fcd16=impl.getFCD16(start);
             if(fcd16>0xff) { set.add(start, end); }
         }
@@ -335,6 +464,8 @@
     UnicodeSet &set;
 };
 
+namespace {
+
 struct PropertyStartsContext {
     PropertyStartsContext(const Normalizer2Impl &ni, const USetAdder *adder)
             : impl(ni), sa(adder) {}
@@ -359,7 +490,8 @@
     const PropertyStartsContext *ctx=(const PropertyStartsContext *)context;
     const USetAdder *sa=ctx->sa;
     sa->add(sa->set, start);
-    if(start!=end && ctx->impl.isAlgorithmicNoNo((uint16_t)value)) {
+    if (start != end && ctx->impl.isAlgorithmicNoNo((uint16_t)value) &&
+            (value & Normalizer2Impl::DELTA_TCCC_MASK) > Normalizer2Impl::DELTA_TCCC_1) {
         // Range of code points with same-norm16-value algorithmic decompositions.
         // They might have different non-zero FCD16 values.
         uint16_t prevFCD16=ctx->impl.getFCD16(start);
@@ -391,7 +523,6 @@
 
 void
 Normalizer2Impl::addLcccChars(UnicodeSet &set) const {
-    /* add the start code point of each same-value range of each trie */
     LcccContext context(*this, set);
     utrie2_enum(normTrie, NULL, enumLcccRange, &context);
 }
@@ -568,77 +699,174 @@
 // fail the quick check loop and/or where the quick check loop's overhead
 // is unlikely to be amortized.
 // Called by the compose() and makeFCD() implementations.
-UBool Normalizer2Impl::decomposeShort(const UChar *src, const UChar *limit,
-                                      ReorderingBuffer &buffer,
-                                      UErrorCode &errorCode) const {
+const UChar *
+Normalizer2Impl::decomposeShort(const UChar *src, const UChar *limit,
+                                UBool stopAtCompBoundary, UBool onlyContiguous,
+                                ReorderingBuffer &buffer, UErrorCode &errorCode) const {
+    if (U_FAILURE(errorCode)) {
+        return nullptr;
+    }
     while(src<limit) {
+        if (stopAtCompBoundary && *src < minCompNoMaybeCP) {
+            return src;
+        }
+        const UChar *prevSrc = src;
         UChar32 c;
         uint16_t norm16;
         UTRIE2_U16_NEXT16(normTrie, src, limit, c, norm16);
+        if (stopAtCompBoundary && norm16HasCompBoundaryBefore(norm16)) {
+            return prevSrc;
+        }
         if(!decompose(c, norm16, buffer, errorCode)) {
-            return FALSE;
+            return nullptr;
         }
+        if (stopAtCompBoundary && norm16HasCompBoundaryAfter(norm16, onlyContiguous)) {
+            return src;
+        }
     }
-    return TRUE;
+    return src;
 }
 
 UBool Normalizer2Impl::decompose(UChar32 c, uint16_t norm16,
                                  ReorderingBuffer &buffer,
                                  UErrorCode &errorCode) const {
-    // Only loops for 1:1 algorithmic mappings.
-    for(;;) {
-        // get the decomposition and the lead and trail cc's
-        if(isDecompYes(norm16)) {
-            // c does not decompose
+    // get the decomposition and the lead and trail cc's
+    if (norm16 >= limitNoNo) {
+        if (isMaybeOrNonZeroCC(norm16)) {
             return buffer.append(c, getCCFromYesOrMaybe(norm16), errorCode);
-        } else if(isHangul(norm16)) {
+        }
+        // Maps to an isCompYesAndZeroCC.
+        c=mapAlgorithmic(c, norm16);
+        norm16=getNorm16(c);
+    }
+    if (norm16 < minYesNo) {
+        // c does not decompose
+        return buffer.append(c, 0, errorCode);
+    } else if(isHangulLV(norm16) || isHangulLVT(norm16)) {
+        // Hangul syllable: decompose algorithmically
+        UChar jamos[3];
+        return buffer.appendZeroCC(jamos, jamos+Hangul::decompose(c, jamos), errorCode);
+    }
+    // c decomposes, get everything from the variable-length extra data
+    const uint16_t *mapping=getMapping(norm16);
+    uint16_t firstUnit=*mapping;
+    int32_t length=firstUnit&MAPPING_LENGTH_MASK;
+    uint8_t leadCC, trailCC;
+    trailCC=(uint8_t)(firstUnit>>8);
+    if(firstUnit&MAPPING_HAS_CCC_LCCC_WORD) {
+        leadCC=(uint8_t)(*(mapping-1)>>8);
+    } else {
+        leadCC=0;
+    }
+    return buffer.append((const UChar *)mapping+1, length, leadCC, trailCC, errorCode);
+}
+
+const uint8_t *
+Normalizer2Impl::decomposeShort(const uint8_t *src, const uint8_t *limit,
+                                UBool stopAtCompBoundary, UBool onlyContiguous,
+                                ReorderingBuffer &buffer, UErrorCode &errorCode) const {
+    if (U_FAILURE(errorCode)) {
+        return nullptr;
+    }
+    while (src < limit) {
+        const uint8_t *prevSrc = src;
+        uint16_t norm16;
+        UTRIE2_U8_NEXT16(normTrie, src, limit, norm16);
+        // Get the decomposition and the lead and trail cc's.
+        UChar32 c = U_SENTINEL;
+        if (norm16 >= limitNoNo) {
+            if (isMaybeOrNonZeroCC(norm16)) {
+                // No boundaries around this character.
+                c = codePointFromValidUTF8(prevSrc, src);
+                if (!buffer.append(c, getCCFromYesOrMaybe(norm16), errorCode)) {
+                    return nullptr;
+                }
+                continue;
+            }
+            // Maps to an isCompYesAndZeroCC.
+            if (stopAtCompBoundary) {
+                return prevSrc;
+            }
+            c = codePointFromValidUTF8(prevSrc, src);
+            c = mapAlgorithmic(c, norm16);
+            norm16 = getNorm16(c);
+        } else if (stopAtCompBoundary && norm16 < minNoNoCompNoMaybeCC) {
+            return prevSrc;
+        }
+        // norm16!=INERT guarantees that [prevSrc, src[ is valid UTF-8.
+        // We do not see invalid UTF-8 here because
+        // its norm16==INERT is normalization-inert,
+        // so it gets copied unchanged in the fast path,
+        // and we stop the slow path where invalid UTF-8 begins.
+        U_ASSERT(norm16 != INERT);
+        if (norm16 < minYesNo) {
+            if (c < 0) {
+                c = codePointFromValidUTF8(prevSrc, src);
+            }
+            // does not decompose
+            if (!buffer.append(c, 0, errorCode)) {
+                return nullptr;
+            }
+        } else if (isHangulLV(norm16) || isHangulLVT(norm16)) {
             // Hangul syllable: decompose algorithmically
-            UChar jamos[3];
-            return buffer.appendZeroCC(jamos, jamos+Hangul::decompose(c, jamos), errorCode);
-        } else if(isDecompNoAlgorithmic(norm16)) {
-            c=mapAlgorithmic(c, norm16);
-            norm16=getNorm16(c);
+            if (c < 0) {
+                c = codePointFromValidUTF8(prevSrc, src);
+            }
+            char16_t jamos[3];
+            if (!buffer.appendZeroCC(jamos, jamos+Hangul::decompose(c, jamos), errorCode)) {
+                return nullptr;
+            }
         } else {
-            // c decomposes, get everything from the variable-length extra data
-            const uint16_t *mapping=getMapping(norm16);
-            uint16_t firstUnit=*mapping;
-            int32_t length=firstUnit&MAPPING_LENGTH_MASK;
-            uint8_t leadCC, trailCC;
-            trailCC=(uint8_t)(firstUnit>>8);
-            if(firstUnit&MAPPING_HAS_CCC_LCCC_WORD) {
-                leadCC=(uint8_t)(*(mapping-1)>>8);
+            // The character decomposes, get everything from the variable-length extra data.
+            const uint16_t *mapping = getMapping(norm16);
+            uint16_t firstUnit = *mapping;
+            int32_t length = firstUnit & MAPPING_LENGTH_MASK;
+            uint8_t trailCC = (uint8_t)(firstUnit >> 8);
+            uint8_t leadCC;
+            if (firstUnit & MAPPING_HAS_CCC_LCCC_WORD) {
+                leadCC = (uint8_t)(*(mapping-1) >> 8);
             } else {
-                leadCC=0;
+                leadCC = 0;
             }
-            return buffer.append((const UChar *)mapping+1, length, leadCC, trailCC, errorCode);
+            if (!buffer.append((const char16_t *)mapping+1, length, leadCC, trailCC, errorCode)) {
+                return nullptr;
+            }
         }
+        if (stopAtCompBoundary && norm16HasCompBoundaryAfter(norm16, onlyContiguous)) {
+            return src;
+        }
     }
+    return src;
 }
 
 const UChar *
 Normalizer2Impl::getDecomposition(UChar32 c, UChar buffer[4], int32_t &length) const {
-    const UChar *decomp=NULL;
     uint16_t norm16;
-    for(;;) {
-        if(c<minDecompNoCP || isDecompYes(norm16=getNorm16(c))) {
-            // c does not decompose
-            return decomp;
-        } else if(isHangul(norm16)) {
-            // Hangul syllable: decompose algorithmically
-            length=Hangul::decompose(c, buffer);
-            return buffer;
-        } else if(isDecompNoAlgorithmic(norm16)) {
-            c=mapAlgorithmic(c, norm16);
-            decomp=buffer;
-            length=0;
-            U16_APPEND_UNSAFE(buffer, length, c);
-        } else {
-            // c decomposes, get everything from the variable-length extra data
-            const uint16_t *mapping=getMapping(norm16);
-            length=*mapping&MAPPING_LENGTH_MASK;
-            return (const UChar *)mapping+1;
-        }
+    if(c<minDecompNoCP || isMaybeOrNonZeroCC(norm16=getNorm16(c))) {
+        // c does not decompose
+        return nullptr;
     }
+    const UChar *decomp = nullptr;
+    if(isDecompNoAlgorithmic(norm16)) {
+        // Maps to an isCompYesAndZeroCC.
+        c=mapAlgorithmic(c, norm16);
+        decomp=buffer;
+        length=0;
+        U16_APPEND_UNSAFE(buffer, length, c);
+        // The mapping might decompose further.
+        norm16 = getNorm16(c);
+    }
+    if (norm16 < minYesNo) {
+        return decomp;
+    } else if(isHangulLV(norm16) || isHangulLVT(norm16)) {
+        // Hangul syllable: decompose algorithmically
+        length=Hangul::decompose(c, buffer);
+        return buffer;
+    }
+    // c decomposes, get everything from the variable-length extra data
+    const uint16_t *mapping=getMapping(norm16);
+    length=*mapping&MAPPING_LENGTH_MASK;
+    return (const UChar *)mapping+1;
 }
 
 // The capacity of the buffer must be 30=MAPPING_LENGTH_MASK-1
@@ -647,13 +875,11 @@
 // The maximum length of a normal mapping is 31=MAPPING_LENGTH_MASK.
 const UChar *
 Normalizer2Impl::getRawDecomposition(UChar32 c, UChar buffer[30], int32_t &length) const {
-    // We do not loop in this method because an algorithmic mapping itself
-    // becomes a final result rather than having to be decomposed recursively.
     uint16_t norm16;
     if(c<minDecompNoCP || isDecompYes(norm16=getNorm16(c))) {
         // c does not decompose
         return NULL;
-    } else if(isHangul(norm16)) {
+    } else if(isHangulLV(norm16) || isHangulLVT(norm16)) {
         // Hangul syllable: decompose algorithmically
         Hangul::getRawDecomposition(c, buffer);
         length=2;
@@ -663,30 +889,29 @@
         length=0;
         U16_APPEND_UNSAFE(buffer, length, c);
         return buffer;
-    } else {
-        // c decomposes, get everything from the variable-length extra data
-        const uint16_t *mapping=getMapping(norm16);
-        uint16_t firstUnit=*mapping;
-        int32_t mLength=firstUnit&MAPPING_LENGTH_MASK;  // length of normal mapping
-        if(firstUnit&MAPPING_HAS_RAW_MAPPING) {
-            // Read the raw mapping from before the firstUnit and before the optional ccc/lccc word.
-            // Bit 7=MAPPING_HAS_CCC_LCCC_WORD
-            const uint16_t *rawMapping=mapping-((firstUnit>>7)&1)-1;
-            uint16_t rm0=*rawMapping;
-            if(rm0<=MAPPING_LENGTH_MASK) {
-                length=rm0;
-                return (const UChar *)rawMapping-rm0;
-            } else {
-                // Copy the normal mapping and replace its first two code units with rm0.
-                buffer[0]=(UChar)rm0;
-                u_memcpy(buffer+1, (const UChar *)mapping+1+2, mLength-2);
-                length=mLength-1;
-                return buffer;
-            }
+    }
+    // c decomposes, get everything from the variable-length extra data
+    const uint16_t *mapping=getMapping(norm16);
+    uint16_t firstUnit=*mapping;
+    int32_t mLength=firstUnit&MAPPING_LENGTH_MASK;  // length of normal mapping
+    if(firstUnit&MAPPING_HAS_RAW_MAPPING) {
+        // Read the raw mapping from before the firstUnit and before the optional ccc/lccc word.
+        // Bit 7=MAPPING_HAS_CCC_LCCC_WORD
+        const uint16_t *rawMapping=mapping-((firstUnit>>7)&1)-1;
+        uint16_t rm0=*rawMapping;
+        if(rm0<=MAPPING_LENGTH_MASK) {
+            length=rm0;
+            return (const UChar *)rawMapping-rm0;
         } else {
-            length=mLength;
-            return (const UChar *)mapping+1;
+            // Copy the normal mapping and replace its first two code units with rm0.
+            buffer[0]=(UChar)rm0;
+            u_memcpy(buffer+1, (const UChar *)mapping+1+2, mLength-2);
+            length=mLength-1;
+            return buffer;
         }
+    } else {
+        length=mLength;
+        return (const UChar *)mapping+1;
     }
 }
 
@@ -717,43 +942,60 @@
     }
 }
 
-// Note: hasDecompBoundary() could be implemented as aliases to
-// hasFCDBoundaryBefore() and hasFCDBoundaryAfter()
-// at the cost of building the FCD trie for a decomposition normalizer.
-UBool Normalizer2Impl::hasDecompBoundary(UChar32 c, UBool before) const {
-    for(;;) {
-        if(c<minDecompNoCP) {
-            return TRUE;
+UBool Normalizer2Impl::hasDecompBoundaryBefore(UChar32 c) const {
+    return c < minLcccCP || (c <= 0xffff && !singleLeadMightHaveNonZeroFCD16(c)) ||
+        norm16HasDecompBoundaryBefore(getNorm16(c));
+}
+
+UBool Normalizer2Impl::norm16HasDecompBoundaryBefore(uint16_t norm16) const {
+    if (norm16 < minNoNoCompNoMaybeCC) {
+        return TRUE;
+    }
+    if (norm16 >= limitNoNo) {
+        return norm16 <= MIN_NORMAL_MAYBE_YES || norm16 == JAMO_VT;
+    }
+    // c decomposes, get everything from the variable-length extra data
+    const uint16_t *mapping=getMapping(norm16);
+    uint16_t firstUnit=*mapping;
+    // TRUE if leadCC==0 (hasFCDBoundaryBefore())
+    return (firstUnit&MAPPING_HAS_CCC_LCCC_WORD)==0 || (*(mapping-1)&0xff00)==0;
+}
+
+UBool Normalizer2Impl::hasDecompBoundaryAfter(UChar32 c) const {
+    if (c < minDecompNoCP) {
+        return TRUE;
+    }
+    if (c <= 0xffff && !singleLeadMightHaveNonZeroFCD16(c)) {
+        return TRUE;
+    }
+    return norm16HasDecompBoundaryAfter(getNorm16(c));
+}
+
+UBool Normalizer2Impl::norm16HasDecompBoundaryAfter(uint16_t norm16) const {
+    if(norm16 <= minYesNo || isHangulLVT(norm16)) {
+        return TRUE;
+    }
+    if (norm16 >= limitNoNo) {
+        if (isMaybeOrNonZeroCC(norm16)) {
+            return norm16 <= MIN_NORMAL_MAYBE_YES || norm16 == JAMO_VT;
         }
-        uint16_t norm16=getNorm16(c);
-        if(isHangul(norm16) || isDecompYesAndZeroCC(norm16)) {
-            return TRUE;
-        } else if(norm16>MIN_NORMAL_MAYBE_YES) {
-            return FALSE;  // ccc!=0
-        } else if(isDecompNoAlgorithmic(norm16)) {
-            c=mapAlgorithmic(c, norm16);
-        } else {
-            // c decomposes, get everything from the variable-length extra data
-            const uint16_t *mapping=getMapping(norm16);
-            uint16_t firstUnit=*mapping;
-            if((firstUnit&MAPPING_LENGTH_MASK)==0) {
-                return FALSE;
-            }
-            if(!before) {
-                // decomp after-boundary: same as hasFCDBoundaryAfter(),
-                // fcd16<=1 || trailCC==0
-                if(firstUnit>0x1ff) {
-                    return FALSE;  // trailCC>1
-                }
-                if(firstUnit<=0xff) {
-                    return TRUE;  // trailCC==0
-                }
-                // if(trailCC==1) test leadCC==0, same as checking for before-boundary
-            }
-            // TRUE if leadCC==0 (hasFCDBoundaryBefore())
-            return (firstUnit&MAPPING_HAS_CCC_LCCC_WORD)==0 || (*(mapping-1)&0xff00)==0;
-        }
+        // Maps to an isCompYesAndZeroCC.
+        return (norm16 & DELTA_TCCC_MASK) <= DELTA_TCCC_1;
     }
+    // c decomposes, get everything from the variable-length extra data
+    const uint16_t *mapping=getMapping(norm16);
+    uint16_t firstUnit=*mapping;
+    // decomp after-boundary: same as hasFCDBoundaryAfter(),
+    // fcd16<=1 || trailCC==0
+    if(firstUnit>0x1ff) {
+        return FALSE;  // trailCC>1
+    }
+    if(firstUnit<=0xff) {
+        return TRUE;  // trailCC==0
+    }
+    // if(trailCC==1) test leadCC==0, same as checking for before-boundary
+    // TRUE if leadCC==0 (hasFCDBoundaryBefore())
+    return (firstUnit&MAPPING_HAS_CCC_LCCC_WORD)==0 || (*(mapping-1)&0xff00)==0;
 }
 
 /*
@@ -1031,6 +1273,7 @@
     if(isInert(norm16)) {
         return U_SENTINEL;
     } else if(norm16<minYesNoMappingsOnly) {
+        // a combines forward.
         if(isJamoL(norm16)) {
             b-=Hangul::JAMO_V_BASE;
             if(0<=b && b<Hangul::JAMO_V_COUNT) {
@@ -1041,9 +1284,9 @@
             } else {
                 return U_SENTINEL;
             }
-        } else if(isHangul(norm16)) {
+        } else if(isHangulLV(norm16)) {
             b-=Hangul::JAMO_T_BASE;
-            if(Hangul::isHangulWithoutJamoT(a) && 0<b && b<Hangul::JAMO_T_COUNT) {  // not b==0!
+            if(0<b && b<Hangul::JAMO_T_COUNT) {  // not b==0!
                 return a+b;
             } else {
                 return U_SENTINEL;
@@ -1050,10 +1293,10 @@
             }
         } else {
             // 'a' has a compositions list in extraData
-            list=extraData+norm16;
+            list=getMapping(norm16);
             if(norm16>minYesNo) {  // composite 'a' has both mapping & compositions list
                 list+=  // mapping pointer
-                    1+  // +1 to skip the first unit with the mapping lenth
+                    1+  // +1 to skip the first unit with the mapping length
                     (*list&MAPPING_LENGTH_MASK);  // + mapping length
             }
         }
@@ -1060,7 +1303,7 @@
     } else if(norm16<minMaybeYes || MIN_NORMAL_MAYBE_YES<=norm16) {
         return U_SENTINEL;
     } else {
-        list=maybeYesCompositions+norm16-minMaybeYes;
+        list=getCompositionsListForMaybe(norm16);
     }
     if(b<0 || 0x10ffff<b) {  // combine(list, b) requires a valid code point b
         return U_SENTINEL;
@@ -1082,18 +1325,6 @@
                          UBool doCompose,
                          ReorderingBuffer &buffer,
                          UErrorCode &errorCode) const {
-    /*
-     * prevBoundary points to the last character before the current one
-     * that has a composition boundary before it with ccc==0 and quick check "yes".
-     * Keeping track of prevBoundary saves us looking for a composition boundary
-     * when we find a "no" or "maybe".
-     *
-     * When we back out from prevSrc back to prevBoundary,
-     * then we also remove those same characters (which had been simply copied
-     * or canonically-order-inserted) from the ReorderingBuffer.
-     * Therefore, at all times, the [prevBoundary..prevSrc[ source units
-     * must correspond 1:1 to destination units at the end of the destination buffer.
-     */
     const UChar *prevBoundary=src;
     UChar32 minNoMaybeCP=minCompNoMaybeCP;
     if(limit==NULL) {
@@ -1103,231 +1334,260 @@
         if(U_FAILURE(errorCode)) {
             return FALSE;
         }
-        if(prevBoundary<src) {
-            // Set prevBoundary to the last character in the prefix.
-            prevBoundary=src-1;
+        limit=u_strchr(src, 0);
+        if (prevBoundary != src) {
+            if (hasCompBoundaryAfter(*(src-1), onlyContiguous)) {
+                prevBoundary = src;
+            } else {
+                buffer.removeSuffix(1);
+                prevBoundary = --src;
+            }
         }
-        limit=u_strchr(src, 0);
     }
 
-    const UChar *prevSrc;
-    UChar32 c=0;
-    uint16_t norm16=0;
-
-    // only for isNormalized
-    uint8_t prevCC=0;
-
-    for(;;) {
-        // count code units below the minimum or with irrelevant data for the quick check
-        for(prevSrc=src; src!=limit;) {
+    for (;;) {
+        // Fast path: Scan over a sequence of characters below the minimum "no or maybe" code point,
+        // or with (compYes && ccc==0) properties.
+        const UChar *prevSrc;
+        UChar32 c = 0;
+        uint16_t norm16 = 0;
+        for (;;) {
+            if (src == limit) {
+                if (prevBoundary != limit && doCompose) {
+                    buffer.appendZeroCC(prevBoundary, limit, errorCode);
+                }
+                return TRUE;
+            }
             if( (c=*src)<minNoMaybeCP ||
                 isCompYesAndZeroCC(norm16=UTRIE2_GET16_FROM_U16_SINGLE_LEAD(normTrie, c))
             ) {
                 ++src;
-            } else if(!U16_IS_SURROGATE(c)) {
-                break;
             } else {
-                UChar c2;
-                if(U16_IS_SURROGATE_LEAD(c)) {
-                    if((src+1)!=limit && U16_IS_TRAIL(c2=src[1])) {
-                        c=U16_GET_SUPPLEMENTARY(c, c2);
+                prevSrc = src++;
+                if(!U16_IS_SURROGATE(c)) {
+                    break;
+                } else {
+                    UChar c2;
+                    if(U16_IS_SURROGATE_LEAD(c)) {
+                        if(src!=limit && U16_IS_TRAIL(c2=*src)) {
+                            ++src;
+                            c=U16_GET_SUPPLEMENTARY(c, c2);
+                        }
+                    } else /* trail surrogate */ {
+                        if(prevBoundary<prevSrc && U16_IS_LEAD(c2=*(prevSrc-1))) {
+                            --prevSrc;
+                            c=U16_GET_SUPPLEMENTARY(c2, c);
+                        }
                     }
-                } else /* trail surrogate */ {
-                    if(prevSrc<src && U16_IS_LEAD(c2=*(src-1))) {
-                        --src;
-                        c=U16_GET_SUPPLEMENTARY(c2, c);
+                    if(!isCompYesAndZeroCC(norm16=getNorm16(c))) {
+                        break;
                     }
                 }
-                if(isCompYesAndZeroCC(norm16=getNorm16(c))) {
-                    src+=U16_LENGTH(c);
-                } else {
-                    break;
-                }
             }
         }
-        // copy these code units all at once
-        if(src!=prevSrc) {
-            if(doCompose) {
-                if(!buffer.appendZeroCC(prevSrc, src, errorCode)) {
-                    break;
+        // isCompYesAndZeroCC(norm16) is false, that is, norm16>=minNoNo.
+        // The current character is either a "noNo" (has a mapping)
+        // or a "maybeYes" (combines backward)
+        // or a "yesYes" with ccc!=0.
+        // It is not a Hangul syllable or Jamo L because those have "yes" properties.
+
+        // Medium-fast path: Handle cases that do not require full decomposition and recomposition.
+        if (!isMaybeOrNonZeroCC(norm16)) {  // minNoNo <= norm16 < minMaybeYes
+            if (!doCompose) {
+                return FALSE;
+            }
+            // Fast path for mapping a character that is immediately surrounded by boundaries.
+            // In this case, we need not decompose around the current character.
+            if (isDecompNoAlgorithmic(norm16)) {
+                // Maps to a single isCompYesAndZeroCC character
+                // which also implies hasCompBoundaryBefore.
+                if (norm16HasCompBoundaryAfter(norm16, onlyContiguous) ||
+                        hasCompBoundaryBefore(src, limit)) {
+                    if (prevBoundary != prevSrc && !buffer.appendZeroCC(prevBoundary, prevSrc, errorCode)) {
+                        break;
+                    }
+                    if(!buffer.append(mapAlgorithmic(c, norm16), 0, errorCode)) {
+                        break;
+                    }
+                    prevBoundary = src;
+                    continue;
                 }
-            } else {
-                prevCC=0;
+            } else if (norm16 < minNoNoCompBoundaryBefore) {
+                // The mapping is comp-normalized which also implies hasCompBoundaryBefore.
+                if (norm16HasCompBoundaryAfter(norm16, onlyContiguous) ||
+                        hasCompBoundaryBefore(src, limit)) {
+                    if (prevBoundary != prevSrc && !buffer.appendZeroCC(prevBoundary, prevSrc, errorCode)) {
+                        break;
+                    }
+                    const UChar *mapping = reinterpret_cast<const UChar *>(getMapping(norm16));
+                    int32_t length = *mapping++ & MAPPING_LENGTH_MASK;
+                    if(!buffer.appendZeroCC(mapping, mapping + length, errorCode)) {
+                        break;
+                    }
+                    prevBoundary = src;
+                    continue;
+                }
+            } else if (norm16 >= minNoNoEmpty) {
+                // The current character maps to nothing.
+                // Simply omit it from the output if there is a boundary before _or_ after it.
+                // The character itself implies no boundaries.
+                if (hasCompBoundaryBefore(src, limit) ||
+                        hasCompBoundaryAfter(prevBoundary, prevSrc, onlyContiguous)) {
+                    if (prevBoundary != prevSrc && !buffer.appendZeroCC(prevBoundary, prevSrc, errorCode)) {
+                        break;
+                    }
+                    prevBoundary = src;
+                    continue;
+                }
             }
-            if(src==limit) {
-                break;
-            }
-            // Set prevBoundary to the last character in the quick check loop.
-            prevBoundary=src-1;
-            if( U16_IS_TRAIL(*prevBoundary) && prevSrc<prevBoundary &&
-                U16_IS_LEAD(*(prevBoundary-1))
-            ) {
-                --prevBoundary;
-            }
-            // The start of the current character (c).
-            prevSrc=src;
-        } else if(src==limit) {
-            break;
-        }
-
-        src+=U16_LENGTH(c);
-        /*
-         * isCompYesAndZeroCC(norm16) is false, that is, norm16>=minNoNo.
-         * c is either a "noNo" (has a mapping) or a "maybeYes" (combines backward)
-         * or has ccc!=0.
-         * Check for Jamo V/T, then for regular characters.
-         * c is not a Hangul syllable or Jamo L because those have "yes" properties.
-         */
-        if(isJamoVT(norm16) && prevBoundary!=prevSrc) {
+            // Other "noNo" type, or need to examine more text around this character:
+            // Fall through to the slow path.
+        } else if (isJamoVT(norm16) && prevBoundary != prevSrc) {
             UChar prev=*(prevSrc-1);
-            UBool needToDecompose=FALSE;
             if(c<Hangul::JAMO_T_BASE) {
-                // c is a Jamo Vowel, compose with previous Jamo L and following Jamo T.
-                prev=(UChar)(prev-Hangul::JAMO_L_BASE);
-                if(prev<Hangul::JAMO_L_COUNT) {
-                    if(!doCompose) {
+                // The current character is a Jamo Vowel,
+                // compose with previous Jamo L and following Jamo T.
+                UChar l = (UChar)(prev-Hangul::JAMO_L_BASE);
+                if(l<Hangul::JAMO_L_COUNT) {
+                    if (!doCompose) {
                         return FALSE;
                     }
-                    UChar syllable=(UChar)
-                        (Hangul::HANGUL_BASE+
-                         (prev*Hangul::JAMO_V_COUNT+(c-Hangul::JAMO_V_BASE))*
-                         Hangul::JAMO_T_COUNT);
-                    UChar t;
-                    if(src!=limit && (t=(UChar)(*src-Hangul::JAMO_T_BASE))<Hangul::JAMO_T_COUNT) {
+                    int32_t t;
+                    if (src != limit &&
+                            0 < (t = ((int32_t)*src - Hangul::JAMO_T_BASE)) &&
+                            t < Hangul::JAMO_T_COUNT) {
+                        // The next character is a Jamo T.
                         ++src;
-                        syllable+=t;  // The next character was a Jamo T.
-                        prevBoundary=src;
-                        buffer.setLastChar(syllable);
+                    } else if (hasCompBoundaryBefore(src, limit)) {
+                        // No Jamo T follows, not even via decomposition.
+                        t = 0;
+                    } else {
+                        t = -1;
+                    }
+                    if (t >= 0) {
+                        UChar32 syllable = Hangul::HANGUL_BASE +
+                            (l*Hangul::JAMO_V_COUNT + (c-Hangul::JAMO_V_BASE)) *
+                            Hangul::JAMO_T_COUNT + t;
+                        --prevSrc;  // Replace the Jamo L as well.
+                        if (prevBoundary != prevSrc && !buffer.appendZeroCC(prevBoundary, prevSrc, errorCode)) {
+                            break;
+                        }
+                        if(!buffer.appendBMP((UChar)syllable, 0, errorCode)) {
+                            break;
+                        }
+                        prevBoundary = src;
                         continue;
                     }
                     // If we see L+V+x where x!=T then we drop to the slow path,
                     // decompose and recompose.
                     // This is to deal with NFKC finding normal L and V but a
-                    // compatibility variant of a T. We need to either fully compose that
-                    // combination here (which would complicate the code and may not work
-                    // with strange custom data) or use the slow path -- or else our replacing
-                    // two input characters (L+V) with one output character (LV syllable)
-                    // would violate the invariant that [prevBoundary..prevSrc[ has the same
-                    // length as what we appended to the buffer since prevBoundary.
-                    needToDecompose=TRUE;
+                    // compatibility variant of a T.
+                    // We need to either fully compose that combination here
+                    // (which would complicate the code and may not work with strange custom data)
+                    // or use the slow path.
                 }
-            } else if(Hangul::isHangulWithoutJamoT(prev)) {
-                // c is a Jamo Trailing consonant,
+            } else if (Hangul::isHangulLV(prev)) {
+                // The current character is a Jamo Trailing consonant,
                 // compose with previous Hangul LV that does not contain a Jamo T.
-                if(!doCompose) {
+                if (!doCompose) {
                     return FALSE;
                 }
-                buffer.setLastChar((UChar)(prev+c-Hangul::JAMO_T_BASE));
-                prevBoundary=src;
-                continue;
-            }
-            if(!needToDecompose) {
-                // The Jamo V/T did not compose into a Hangul syllable.
-                if(doCompose) {
-                    if(!buffer.appendBMP((UChar)c, 0, errorCode)) {
-                        break;
-                    }
-                } else {
-                    prevCC=0;
+                UChar32 syllable = prev + c - Hangul::JAMO_T_BASE;
+                --prevSrc;  // Replace the Hangul LV as well.
+                if (prevBoundary != prevSrc && !buffer.appendZeroCC(prevBoundary, prevSrc, errorCode)) {
+                    break;
                 }
+                if(!buffer.appendBMP((UChar)syllable, 0, errorCode)) {
+                    break;
+                }
+                prevBoundary = src;
                 continue;
             }
-        }
-        /*
-         * Source buffer pointers:
-         *
-         *  all done      quick check   current char  not yet
-         *                "yes" but     (c)           processed
-         *                may combine
-         *                forward
-         * [-------------[-------------[-------------[-------------[
-         * |             |             |             |             |
-         * orig. src     prevBoundary  prevSrc       src           limit
-         *
-         *
-         * Destination buffer pointers inside the ReorderingBuffer:
-         *
-         *  all done      might take    not filled yet
-         *                characters for
-         *                reordering
-         * [-------------[-------------[-------------[
-         * |             |             |             |
-         * start         reorderStart  limit         |
-         *                             +remainingCap.+
-         */
-        if(norm16>=MIN_YES_YES_WITH_CC) {
-            uint8_t cc=(uint8_t)norm16;  // cc!=0
-            if( onlyContiguous &&  // FCC
-                (doCompose ? buffer.getLastCC() : prevCC)==0 &&
-                prevBoundary<prevSrc &&
-                // buffer.getLastCC()==0 && prevBoundary<prevSrc tell us that
-                // [prevBoundary..prevSrc[ (which is exactly one character under these conditions)
-                // passed the quick check "yes && ccc==0" test.
-                // Check whether the last character was a "yesYes" or a "yesNo".
-                // If a "yesNo", then we get its trailing ccc from its
-                // mapping and check for canonical order.
-                // All other cases are ok.
-                getTrailCCFromCompYesAndZeroCC(prevBoundary, prevSrc)>cc
-            ) {
+            // No matching context, or may need to decompose surrounding text first:
+            // Fall through to the slow path.
+        } else if (norm16 > JAMO_VT) {  // norm16 >= MIN_YES_YES_WITH_CC
+            // One or more combining marks that do not combine-back:
+            // Check for canonical order, copy unchanged if ok and
+            // if followed by a character with a boundary-before.
+            uint8_t cc = getCCFromNormalYesOrMaybe(norm16);  // cc!=0
+            if (onlyContiguous /* FCC */ && getPreviousTrailCC(prevBoundary, prevSrc) > cc) {
                 // Fails FCD test, need to decompose and contiguously recompose.
-                if(!doCompose) {
+                if (!doCompose) {
                     return FALSE;
                 }
-            } else if(doCompose) {
-                if(!buffer.append(c, cc, errorCode)) {
-                    break;
+            } else {
+                // If !onlyContiguous (not FCC), then we ignore the tccc of
+                // the previous character which passed the quick check "yes && ccc==0" test.
+                const UChar *nextSrc;
+                uint16_t n16;
+                for (;;) {
+                    if (src == limit) {
+                        if (doCompose) {
+                            buffer.appendZeroCC(prevBoundary, limit, errorCode);
+                        }
+                        return TRUE;
+                    }
+                    uint8_t prevCC = cc;
+                    nextSrc = src;
+                    UTRIE2_U16_NEXT16(normTrie, nextSrc, limit, c, n16);
+                    if (n16 >= MIN_YES_YES_WITH_CC) {
+                        cc = getCCFromNormalYesOrMaybe(n16);
+                        if (prevCC > cc) {
+                            if (!doCompose) {
+                                return FALSE;
+                            }
+                            break;
+                        }
+                    } else {
+                        break;
+                    }
+                    src = nextSrc;
                 }
-                continue;
-            } else if(prevCC<=cc) {
-                prevCC=cc;
-                continue;
-            } else {
-                return FALSE;
+                // src is after the last in-order combining mark.
+                // If there is a boundary here, then we continue with no change.
+                if (norm16HasCompBoundaryBefore(n16)) {
+                    if (isCompYesAndZeroCC(n16)) {
+                        src = nextSrc;
+                    }
+                    continue;
+                }
+                // Use the slow path. There is no boundary in [prevSrc, src[.
             }
-        } else if(!doCompose && !isMaybeOrNonZeroCC(norm16)) {
-            return FALSE;
         }
 
-        /*
-         * Find appropriate boundaries around this character,
-         * decompose the source text from between the boundaries,
-         * and recompose it.
-         *
-         * We may need to remove the last few characters from the ReorderingBuffer
-         * to account for source text that was copied or appended
-         * but needs to take part in the recomposition.
-         */
-
-        /*
-         * Find the last composition boundary in [prevBoundary..src[.
-         * It is either the decomposition of the current character (at prevSrc),
-         * or prevBoundary.
-         */
-        if(hasCompBoundaryBefore(c, norm16)) {
-            prevBoundary=prevSrc;
-        } else if(doCompose) {
-            buffer.removeSuffix((int32_t)(prevSrc-prevBoundary));
+        // Slow path: Find the nearest boundaries around the current character,
+        // decompose and recompose.
+        if (prevBoundary != prevSrc && !norm16HasCompBoundaryBefore(norm16)) {
+            const UChar *p = prevSrc;
+            UTRIE2_U16_PREV16(normTrie, prevBoundary, p, c, norm16);
+            if (!norm16HasCompBoundaryAfter(norm16, onlyContiguous)) {
+                prevSrc = p;
+            }
         }
-
-        // Find the next composition boundary in [src..limit[ -
-        // modifies src to point to the next starter.
-        src=(UChar *)findNextCompBoundary(src, limit);
-
-        // Decompose [prevBoundary..src[ into the buffer and then recompose that part of it.
+        if (doCompose && prevBoundary != prevSrc && !buffer.appendZeroCC(prevBoundary, prevSrc, errorCode)) {
+            break;
+        }
         int32_t recomposeStartIndex=buffer.length();
-        if(!decomposeShort(prevBoundary, src, buffer, errorCode)) {
+        // We know there is not a boundary here.
+        decomposeShort(prevSrc, src, FALSE /* !stopAtCompBoundary */, onlyContiguous,
+                       buffer, errorCode);
+        // Decompose until the next boundary.
+        src = decomposeShort(src, limit, TRUE /* stopAtCompBoundary */, onlyContiguous,
+                             buffer, errorCode);
+        if (U_FAILURE(errorCode)) {
             break;
         }
+        if ((src - prevSrc) > INT32_MAX) {  // guard before buffer.equals()
+            errorCode = U_INDEX_OUTOFBOUNDS_ERROR;
+            return TRUE;
+        }
         recompose(buffer, recomposeStartIndex, onlyContiguous);
         if(!doCompose) {
-            if(!buffer.equals(prevBoundary, src)) {
+            if(!buffer.equals(prevSrc, src)) {
                 return FALSE;
             }
             buffer.remove();
-            prevCC=0;
         }
-
-        // Move to the next starter. We never need to look back before this point again.
         prevBoundary=src;
     }
     return TRUE;
@@ -1340,30 +1600,28 @@
 Normalizer2Impl::composeQuickCheck(const UChar *src, const UChar *limit,
                                    UBool onlyContiguous,
                                    UNormalizationCheckResult *pQCResult) const {
-    /*
-     * prevBoundary points to the last character before the current one
-     * that has a composition boundary before it with ccc==0 and quick check "yes".
-     */
     const UChar *prevBoundary=src;
     UChar32 minNoMaybeCP=minCompNoMaybeCP;
     if(limit==NULL) {
         UErrorCode errorCode=U_ZERO_ERROR;
         src=copyLowPrefixFromNulTerminated(src, minNoMaybeCP, NULL, errorCode);
-        if(prevBoundary<src) {
-            // Set prevBoundary to the last character in the prefix.
-            prevBoundary=src-1;
+        limit=u_strchr(src, 0);
+        if (prevBoundary != src) {
+            if (hasCompBoundaryAfter(*(src-1), onlyContiguous)) {
+                prevBoundary = src;
+            } else {
+                prevBoundary = --src;
+            }
         }
-        limit=u_strchr(src, 0);
     }
 
-    const UChar *prevSrc;
-    UChar32 c=0;
-    uint16_t norm16=0;
-    uint8_t prevCC=0;
-
     for(;;) {
-        // count code units below the minimum or with irrelevant data for the quick check
-        for(prevSrc=src;;) {
+        // Fast path: Scan over a sequence of characters below the minimum "no or maybe" code point,
+        // or with (compYes && ccc==0) properties.
+        const UChar *prevSrc;
+        UChar32 c = 0;
+        uint16_t norm16 = 0;
+        for (;;) {
             if(src==limit) {
                 return src;
             }
@@ -1371,72 +1629,93 @@
                 isCompYesAndZeroCC(norm16=UTRIE2_GET16_FROM_U16_SINGLE_LEAD(normTrie, c))
             ) {
                 ++src;
-            } else if(!U16_IS_SURROGATE(c)) {
-                break;
             } else {
-                UChar c2;
-                if(U16_IS_SURROGATE_LEAD(c)) {
-                    if((src+1)!=limit && U16_IS_TRAIL(c2=src[1])) {
-                        c=U16_GET_SUPPLEMENTARY(c, c2);
+                prevSrc = src++;
+                if(!U16_IS_SURROGATE(c)) {
+                    break;
+                } else {
+                    UChar c2;
+                    if(U16_IS_SURROGATE_LEAD(c)) {
+                        if(src!=limit && U16_IS_TRAIL(c2=*src)) {
+                            ++src;
+                            c=U16_GET_SUPPLEMENTARY(c, c2);
+                        }
+                    } else /* trail surrogate */ {
+                        if(prevBoundary<prevSrc && U16_IS_LEAD(c2=*(prevSrc-1))) {
+                            --prevSrc;
+                            c=U16_GET_SUPPLEMENTARY(c2, c);
+                        }
                     }
-                } else /* trail surrogate */ {
-                    if(prevSrc<src && U16_IS_LEAD(c2=*(src-1))) {
-                        --src;
-                        c=U16_GET_SUPPLEMENTARY(c2, c);
+                    if(!isCompYesAndZeroCC(norm16=getNorm16(c))) {
+                        break;
                     }
                 }
-                if(isCompYesAndZeroCC(norm16=getNorm16(c))) {
-                    src+=U16_LENGTH(c);
+            }
+        }
+        // isCompYesAndZeroCC(norm16) is false, that is, norm16>=minNoNo.
+        // The current character is either a "noNo" (has a mapping)
+        // or a "maybeYes" (combines backward)
+        // or a "yesYes" with ccc!=0.
+        // It is not a Hangul syllable or Jamo L because those have "yes" properties.
+
+        uint16_t prevNorm16 = INERT;
+        if (prevBoundary != prevSrc) {
+            if (norm16HasCompBoundaryBefore(norm16)) {
+                prevBoundary = prevSrc;
+            } else {
+                const UChar *p = prevSrc;
+                uint16_t n16;
+                UTRIE2_U16_PREV16(normTrie, prevBoundary, p, c, n16);
+                if (norm16HasCompBoundaryAfter(n16, onlyContiguous)) {
+                    prevBoundary = prevSrc;
                 } else {
-                    break;
+                    prevBoundary = p;
+                    prevNorm16 = n16;
                 }
             }
         }
-        if(src!=prevSrc) {
-            // Set prevBoundary to the last character in the quick check loop.
-            prevBoundary=src-1;
-            if( U16_IS_TRAIL(*prevBoundary) && prevSrc<prevBoundary &&
-                U16_IS_LEAD(*(prevBoundary-1))
-            ) {
-                --prevBoundary;
-            }
-            prevCC=0;
-            // The start of the current character (c).
-            prevSrc=src;
-        }
 
-        src+=U16_LENGTH(c);
-        /*
-         * isCompYesAndZeroCC(norm16) is false, that is, norm16>=minNoNo.
-         * c is either a "noNo" (has a mapping) or a "maybeYes" (combines backward)
-         * or has ccc!=0.
-         */
         if(isMaybeOrNonZeroCC(norm16)) {
             uint8_t cc=getCCFromYesOrMaybe(norm16);
-            if( onlyContiguous &&  // FCC
-                cc!=0 &&
-                prevCC==0 &&
-                prevBoundary<prevSrc &&
-                // prevCC==0 && prevBoundary<prevSrc tell us that
-                // [prevBoundary..prevSrc[ (which is exactly one character under these conditions)
-                // passed the quick check "yes && ccc==0" test.
-                // Check whether the last character was a "yesYes" or a "yesNo".
-                // If a "yesNo", then we get its trailing ccc from its
-                // mapping and check for canonical order.
-                // All other cases are ok.
-                getTrailCCFromCompYesAndZeroCC(prevBoundary, prevSrc)>cc
-            ) {
-                // Fails FCD test.
-            } else if(prevCC<=cc || cc==0) {
-                prevCC=cc;
-                if(norm16<MIN_YES_YES_WITH_CC) {
-                    if(pQCResult!=NULL) {
-                        *pQCResult=UNORM_MAYBE;
+            if (onlyContiguous /* FCC */ && cc != 0 &&
+                    getTrailCCFromCompYesAndZeroCC(prevNorm16) > cc) {
+                // The [prevBoundary..prevSrc[ character
+                // passed the quick check "yes && ccc==0" test
+                // but is out of canonical order with the current combining mark.
+            } else {
+                // If !onlyContiguous (not FCC), then we ignore the tccc of
+                // the previous character which passed the quick check "yes && ccc==0" test.
+                const UChar *nextSrc;
+                for (;;) {
+                    if (norm16 < MIN_YES_YES_WITH_CC) {
+                        if (pQCResult != nullptr) {
+                            *pQCResult = UNORM_MAYBE;
+                        } else {
+                            return prevBoundary;
+                        }
+                    }
+                    if (src == limit) {
+                        return src;
+                    }
+                    uint8_t prevCC = cc;
+                    nextSrc = src;
+                    UTRIE2_U16_NEXT16(normTrie, nextSrc, limit, c, norm16);
+                    if (isMaybeOrNonZeroCC(norm16)) {
+                        cc = getCCFromYesOrMaybe(norm16);
+                        if (!(prevCC <= cc || cc == 0)) {
+                            break;
+                        }
                     } else {
-                        return prevBoundary;
+                        break;
                     }
+                    src = nextSrc;
                 }
-                continue;
+                // src is after the last in-order combining mark.
+                if (isCompYesAndZeroCC(norm16)) {
+                    prevBoundary = src;
+                    src = nextSrc;
+                    continue;
+                }
             }
         }
         if(pQCResult!=NULL) {
@@ -1453,10 +1732,10 @@
                                        ReorderingBuffer &buffer,
                                        UErrorCode &errorCode) const {
     if(!buffer.isEmpty()) {
-        const UChar *firstStarterInSrc=findNextCompBoundary(src, limit);
+        const UChar *firstStarterInSrc=findNextCompBoundary(src, limit, onlyContiguous);
         if(src!=firstStarterInSrc) {
             const UChar *lastStarterInDest=findPreviousCompBoundary(buffer.getStart(),
-                                                                    buffer.getLimit());
+                                                                    buffer.getLimit(), onlyContiguous);
             int32_t destSuffixLength=(int32_t)(buffer.getLimit()-lastStarterInDest);
             UnicodeString middle(lastStarterInDest, destSuffixLength);
             buffer.removeSuffix(destSuffixLength);
@@ -1481,135 +1760,391 @@
     }
 }
 
-/**
- * Does c have a composition boundary before it?
- * True if its decomposition begins with a character that has
- * ccc=0 && NFC_QC=Yes (isCompYesAndZeroCC()).
- * As a shortcut, this is true if c itself has ccc=0 && NFC_QC=Yes
- * (isCompYesAndZeroCC()) so we need not decompose.
- */
-UBool Normalizer2Impl::hasCompBoundaryBefore(UChar32 c, uint16_t norm16) const {
-    for(;;) {
-        if(isCompYesAndZeroCC(norm16)) {
+UBool
+Normalizer2Impl::composeUTF8(uint32_t options, UBool onlyContiguous,
+                             const uint8_t *src, const uint8_t *limit,
+                             ByteSink *sink, Edits *edits, UErrorCode &errorCode) const {
+    U_ASSERT(limit != nullptr);
+    UnicodeString s16;
+    uint8_t minNoMaybeLead = leadByteForCP(minCompNoMaybeCP);
+    const uint8_t *prevBoundary = src;
+
+    for (;;) {
+        // Fast path: Scan over a sequence of characters below the minimum "no or maybe" code point,
+        // or with (compYes && ccc==0) properties.
+        const uint8_t *prevSrc;
+        uint16_t norm16 = 0;
+        for (;;) {
+            if (src == limit) {
+                if (prevBoundary != limit && sink != nullptr) {
+                    ByteSinkUtil::appendUnchanged(prevBoundary, limit,
+                                                  *sink, options, edits, errorCode);
+                }
+                return TRUE;
+            }
+            if (*src < minNoMaybeLead) {
+                ++src;
+            } else {
+                prevSrc = src;
+                UTRIE2_U8_NEXT16(normTrie, src, limit, norm16);
+                if (!isCompYesAndZeroCC(norm16)) {
+                    break;
+                }
+            }
+        }
+        // isCompYesAndZeroCC(norm16) is false, that is, norm16>=minNoNo.
+        // The current character is either a "noNo" (has a mapping)
+        // or a "maybeYes" (combines backward)
+        // or a "yesYes" with ccc!=0.
+        // It is not a Hangul syllable or Jamo L because those have "yes" properties.
+
+        // Medium-fast path: Handle cases that do not require full decomposition and recomposition.
+        if (!isMaybeOrNonZeroCC(norm16)) {  // minNoNo <= norm16 < minMaybeYes
+            if (sink == nullptr) {
+                return FALSE;
+            }
+            // Fast path for mapping a character that is immediately surrounded by boundaries.
+            // In this case, we need not decompose around the current character.
+            if (isDecompNoAlgorithmic(norm16)) {
+                // Maps to a single isCompYesAndZeroCC character
+                // which also implies hasCompBoundaryBefore.
+                if (norm16HasCompBoundaryAfter(norm16, onlyContiguous) ||
+                        hasCompBoundaryBefore(src, limit)) {
+                    if (prevBoundary != prevSrc &&
+                            !ByteSinkUtil::appendUnchanged(prevBoundary, prevSrc,
+                                                           *sink, options, edits, errorCode)) {
+                        break;
+                    }
+                    appendCodePointDelta(prevSrc, src, getAlgorithmicDelta(norm16), *sink, edits);
+                    prevBoundary = src;
+                    continue;
+                }
+            } else if (norm16 < minNoNoCompBoundaryBefore) {
+                // The mapping is comp-normalized which also implies hasCompBoundaryBefore.
+                if (norm16HasCompBoundaryAfter(norm16, onlyContiguous) ||
+                        hasCompBoundaryBefore(src, limit)) {
+                    if (prevBoundary != prevSrc &&
+                            !ByteSinkUtil::appendUnchanged(prevBoundary, prevSrc,
+                                                           *sink, options, edits, errorCode)) {
+                        break;
+                    }
+                    const uint16_t *mapping = getMapping(norm16);
+                    int32_t length = *mapping++ & MAPPING_LENGTH_MASK;
+                    if (!ByteSinkUtil::appendChange(prevSrc, src, (const UChar *)mapping, length,
+                                                    *sink, edits, errorCode)) {
+                        break;
+                    }
+                    prevBoundary = src;
+                    continue;
+                }
+            } else if (norm16 >= minNoNoEmpty) {
+                // The current character maps to nothing.
+                // Simply omit it from the output if there is a boundary before _or_ after it.
+                // The character itself implies no boundaries.
+                if (hasCompBoundaryBefore(src, limit) ||
+                        hasCompBoundaryAfter(prevBoundary, prevSrc, onlyContiguous)) {
+                    if (prevBoundary != prevSrc &&
+                            !ByteSinkUtil::appendUnchanged(prevBoundary, prevSrc,
+                                                           *sink, options, edits, errorCode)) {
+                        break;
+                    }
+                    if (edits != nullptr) {
+                        edits->addReplace((int32_t)(src - prevSrc), 0);
+                    }
+                    prevBoundary = src;
+                    continue;
+                }
+            }
+            // Other "noNo" type, or need to examine more text around this character:
+            // Fall through to the slow path.
+        } else if (isJamoVT(norm16)) {
+            // Jamo L: E1 84 80..92
+            // Jamo V: E1 85 A1..B5
+            // Jamo T: E1 86 A8..E1 87 82
+            U_ASSERT((src - prevSrc) == 3 && *prevSrc == 0xe1);
+            UChar32 prev = previousHangulOrJamo(prevBoundary, prevSrc);
+            if (prevSrc[1] == 0x85) {
+                // The current character is a Jamo Vowel,
+                // compose with previous Jamo L and following Jamo T.
+                UChar32 l = prev - Hangul::JAMO_L_BASE;
+                if ((uint32_t)l < Hangul::JAMO_L_COUNT) {
+                    if (sink == nullptr) {
+                        return FALSE;
+                    }
+                    int32_t t = getJamoTMinusBase(src, limit);
+                    if (t >= 0) {
+                        // The next character is a Jamo T.
+                        src += 3;
+                    } else if (hasCompBoundaryBefore(src, limit)) {
+                        // No Jamo T follows, not even via decomposition.
+                        t = 0;
+                    }
+                    if (t >= 0) {
+                        UChar32 syllable = Hangul::HANGUL_BASE +
+                            (l*Hangul::JAMO_V_COUNT + (prevSrc[2]-0xa1)) *
+                            Hangul::JAMO_T_COUNT + t;
+                        prevSrc -= 3;  // Replace the Jamo L as well.
+                        if (prevBoundary != prevSrc &&
+                                !ByteSinkUtil::appendUnchanged(prevBoundary, prevSrc,
+                                                               *sink, options, edits, errorCode)) {
+                            break;
+                        }
+                        ByteSinkUtil::appendCodePoint(prevSrc, src, syllable, *sink, edits);
+                        prevBoundary = src;
+                        continue;
+                    }
+                    // If we see L+V+x where x!=T then we drop to the slow path,
+                    // decompose and recompose.
+                    // This is to deal with NFKC finding normal L and V but a
+                    // compatibility variant of a T.
+                    // We need to either fully compose that combination here
+                    // (which would complicate the code and may not work with strange custom data)
+                    // or use the slow path.
+                }
+            } else if (Hangul::isHangulLV(prev)) {
+                // The current character is a Jamo Trailing consonant,
+                // compose with previous Hangul LV that does not contain a Jamo T.
+                if (sink == nullptr) {
+                    return FALSE;
+                }
+                UChar32 syllable = prev + getJamoTMinusBase(prevSrc, src);
+                prevSrc -= 3;  // Replace the Hangul LV as well.
+                if (prevBoundary != prevSrc &&
+                        !ByteSinkUtil::appendUnchanged(prevBoundary, prevSrc,
+                                                       *sink, options, edits, errorCode)) {
+                    break;
+                }
+                ByteSinkUtil::appendCodePoint(prevSrc, src, syllable, *sink, edits);
+                prevBoundary = src;
+                continue;
+            }
+            // No matching context, or may need to decompose surrounding text first:
+            // Fall through to the slow path.
+        } else if (norm16 > JAMO_VT) {  // norm16 >= MIN_YES_YES_WITH_CC
+            // One or more combining marks that do not combine-back:
+            // Check for canonical order, copy unchanged if ok and
+            // if followed by a character with a boundary-before.
+            uint8_t cc = getCCFromNormalYesOrMaybe(norm16);  // cc!=0
+            if (onlyContiguous /* FCC */ && getPreviousTrailCC(prevBoundary, prevSrc) > cc) {
+                // Fails FCD test, need to decompose and contiguously recompose.
+                if (sink == nullptr) {
+                    return FALSE;
+                }
+            } else {
+                // If !onlyContiguous (not FCC), then we ignore the tccc of
+                // the previous character which passed the quick check "yes && ccc==0" test.
+                const uint8_t *nextSrc;
+                uint16_t n16;
+                for (;;) {
+                    if (src == limit) {
+                        if (sink != nullptr) {
+                            ByteSinkUtil::appendUnchanged(prevBoundary, limit,
+                                                          *sink, options, edits, errorCode);
+                        }
+                        return TRUE;
+                    }
+                    uint8_t prevCC = cc;
+                    nextSrc = src;
+                    UTRIE2_U8_NEXT16(normTrie, nextSrc, limit, n16);
+                    if (n16 >= MIN_YES_YES_WITH_CC) {
+                        cc = getCCFromNormalYesOrMaybe(n16);
+                        if (prevCC > cc) {
+                            if (sink == nullptr) {
+                                return FALSE;
+                            }
+                            break;
+                        }
+                    } else {
+                        break;
+                    }
+                    src = nextSrc;
+                }
+                // src is after the last in-order combining mark.
+                // If there is a boundary here, then we continue with no change.
+                if (norm16HasCompBoundaryBefore(n16)) {
+                    if (isCompYesAndZeroCC(n16)) {
+                        src = nextSrc;
+                    }
+                    continue;
+                }
+                // Use the slow path. There is no boundary in [prevSrc, src[.
+            }
+        }
+
+        // Slow path: Find the nearest boundaries around the current character,
+        // decompose and recompose.
+        if (prevBoundary != prevSrc && !norm16HasCompBoundaryBefore(norm16)) {
+            const uint8_t *p = prevSrc;
+            UTRIE2_U8_PREV16(normTrie, prevBoundary, p, norm16);
+            if (!norm16HasCompBoundaryAfter(norm16, onlyContiguous)) {
+                prevSrc = p;
+            }
+        }
+        ReorderingBuffer buffer(*this, s16, errorCode);
+        if (U_FAILURE(errorCode)) {
+            break;
+        }
+        // We know there is not a boundary here.
+        decomposeShort(prevSrc, src, FALSE /* !stopAtCompBoundary */, onlyContiguous,
+                       buffer, errorCode);
+        // Decompose until the next boundary.
+        src = decomposeShort(src, limit, TRUE /* stopAtCompBoundary */, onlyContiguous,
+                             buffer, errorCode);
+        if (U_FAILURE(errorCode)) {
+            break;
+        }
+        if ((src - prevSrc) > INT32_MAX) {  // guard before buffer.equals()
+            errorCode = U_INDEX_OUTOFBOUNDS_ERROR;
             return TRUE;
-        } else if(isMaybeOrNonZeroCC(norm16)) {
-            return FALSE;
-        } else if(isDecompNoAlgorithmic(norm16)) {
-            c=mapAlgorithmic(c, norm16);
-            norm16=getNorm16(c);
-        } else {
-            // c decomposes, get everything from the variable-length extra data
-            const uint16_t *mapping=getMapping(norm16);
-            uint16_t firstUnit=*mapping;
-            if((firstUnit&MAPPING_LENGTH_MASK)==0) {
+        }
+        recompose(buffer, 0, onlyContiguous);
+        if (!buffer.equals(prevSrc, src)) {
+            if (sink == nullptr) {
                 return FALSE;
             }
-            if((firstUnit&MAPPING_HAS_CCC_LCCC_WORD) && (*(mapping-1)&0xff00)) {
-                return FALSE;  // non-zero leadCC
+            if (prevBoundary != prevSrc &&
+                    !ByteSinkUtil::appendUnchanged(prevBoundary, prevSrc,
+                                                   *sink, options, edits, errorCode)) {
+                break;
             }
-            int32_t i=1;  // skip over the firstUnit
-            UChar32 c;
-            U16_NEXT_UNSAFE(mapping, i, c);
-            return isCompYesAndZeroCC(getNorm16(c));
+            if (!ByteSinkUtil::appendChange(prevSrc, src, buffer.getStart(), buffer.length(),
+                                            *sink, edits, errorCode)) {
+                break;
+            }
+            prevBoundary = src;
         }
     }
+    return TRUE;
 }
 
-UBool Normalizer2Impl::hasCompBoundaryAfter(UChar32 c, UBool onlyContiguous, UBool testInert) const {
-    for(;;) {
-        uint16_t norm16=getNorm16(c);
-        if(isInert(norm16)) {
-            return TRUE;
-        } else if(norm16<=minYesNo) {
-            // Hangul: norm16==minYesNo
-            // Hangul LVT has a boundary after it.
-            // Hangul LV and non-inert yesYes characters combine forward.
-            return isHangul(norm16) && !Hangul::isHangulWithoutJamoT((UChar)c);
-        } else if(norm16>= (testInert ? minNoNo : minMaybeYes)) {
-            return FALSE;
-        } else if(isDecompNoAlgorithmic(norm16)) {
-            c=mapAlgorithmic(c, norm16);
-        } else {
-            // c decomposes, get everything from the variable-length extra data.
-            // If testInert, then c must be a yesNo character which has lccc=0,
-            // otherwise it could be a noNo.
-            const uint16_t *mapping=getMapping(norm16);
-            uint16_t firstUnit=*mapping;
-            // TRUE if
-            //   not MAPPING_NO_COMP_BOUNDARY_AFTER
-            //     (which is set if
-            //       c is not deleted, and
-            //       it and its decomposition do not combine forward, and it has a starter)
-            //   and if FCC then trailCC<=1
-            return
-                (firstUnit&MAPPING_NO_COMP_BOUNDARY_AFTER)==0 &&
-                (!onlyContiguous || firstUnit<=0x1ff);
-        }
+UBool Normalizer2Impl::hasCompBoundaryBefore(const UChar *src, const UChar *limit) const {
+    if (src == limit || *src < minCompNoMaybeCP) {
+        return TRUE;
     }
+    UChar32 c;
+    uint16_t norm16;
+    UTRIE2_U16_NEXT16(normTrie, src, limit, c, norm16);
+    return norm16HasCompBoundaryBefore(norm16);
 }
 
-const UChar *Normalizer2Impl::findPreviousCompBoundary(const UChar *start, const UChar *p) const {
-    BackwardUTrie2StringIterator iter(normTrie, start, p);
+UBool Normalizer2Impl::hasCompBoundaryBefore(const uint8_t *src, const uint8_t *limit) const {
+    if (src == limit) {
+        return TRUE;
+    }
     uint16_t norm16;
-    do {
-        norm16=iter.previous16();
-    } while(!hasCompBoundaryBefore(iter.codePoint, norm16));
-    // We could also test hasCompBoundaryAfter() and return iter.codePointLimit,
-    // but that's probably not worth the extra cost.
-    return iter.codePointStart;
+    UTRIE2_U8_NEXT16(normTrie, src, limit, norm16);
+    return norm16HasCompBoundaryBefore(norm16);
 }
 
-const UChar *Normalizer2Impl::findNextCompBoundary(const UChar *p, const UChar *limit) const {
-    ForwardUTrie2StringIterator iter(normTrie, p, limit);
+UBool Normalizer2Impl::hasCompBoundaryAfter(const UChar *start, const UChar *p,
+                                            UBool onlyContiguous) const {
+    if (start == p) {
+        return TRUE;
+    }
+    UChar32 c;
     uint16_t norm16;
-    do {
-        norm16=iter.next16();
-    } while(!hasCompBoundaryBefore(iter.codePoint, norm16));
-    return iter.codePointStart;
+    UTRIE2_U16_PREV16(normTrie, start, p, c, norm16);
+    return norm16HasCompBoundaryAfter(norm16, onlyContiguous);
 }
 
+UBool Normalizer2Impl::hasCompBoundaryAfter(const uint8_t *start, const uint8_t *p,
+                                            UBool onlyContiguous) const {
+    if (start == p) {
+        return TRUE;
+    }
+    uint16_t norm16;
+    UTRIE2_U8_PREV16(normTrie, start, p, norm16);
+    return norm16HasCompBoundaryAfter(norm16, onlyContiguous);
+}
+
+const UChar *Normalizer2Impl::findPreviousCompBoundary(const UChar *start, const UChar *p,
+                                                       UBool onlyContiguous) const {
+    BackwardUTrie2StringIterator iter(normTrie, start, p);
+    for(;;) {
+        uint16_t norm16=iter.previous16();
+        if (norm16HasCompBoundaryAfter(norm16, onlyContiguous)) {
+            return iter.codePointLimit;
+        }
+        if (hasCompBoundaryBefore(iter.codePoint, norm16)) {
+            return iter.codePointStart;
+        }
+    }
+}
+
+const UChar *Normalizer2Impl::findNextCompBoundary(const UChar *p, const UChar *limit,
+                                                   UBool onlyContiguous) const {
+    ForwardUTrie2StringIterator iter(normTrie, p, limit);
+    for(;;) {
+        uint16_t norm16=iter.next16();
+        if (hasCompBoundaryBefore(iter.codePoint, norm16)) {
+            return iter.codePointStart;
+        }
+        if (norm16HasCompBoundaryAfter(norm16, onlyContiguous)) {
+            return iter.codePointLimit;
+        }
+    }
+}
+
+uint8_t Normalizer2Impl::getPreviousTrailCC(const UChar *start, const UChar *p) const {
+    if (start == p) {
+        return 0;
+    }
+    int32_t i = (int32_t)(p - start);
+    UChar32 c;
+    U16_PREV(start, 0, i, c);
+    return (uint8_t)getFCD16(c);
+}
+
+uint8_t Normalizer2Impl::getPreviousTrailCC(const uint8_t *start, const uint8_t *p) const {
+    if (start == p) {
+        return 0;
+    }
+    int32_t i = (int32_t)(p - start);
+    UChar32 c;
+    U8_PREV(start, 0, i, c);
+    return (uint8_t)getFCD16(c);
+}
+
 // Note: normalizer2impl.cpp r30982 (2011-nov-27)
 // still had getFCDTrie() which built and cached an FCD trie.
 // That provided faster access to FCD data than getFCD16FromNormData()
 // but required synchronization and consumed some 10kB of heap memory
 // in any process that uses FCD (e.g., via collation).
-// tccc180[] and smallFCD[] are intended to help with any loss of performance,
-// at least for Latin & CJK.
+// minDecompNoCP etc. and smallFCD[] are intended to help with any loss of performance,
+// at least for ASCII & CJK.
 
 // Gets the FCD value from the regular normalization data.
 uint16_t Normalizer2Impl::getFCD16FromNormData(UChar32 c) const {
-    // Only loops for 1:1 algorithmic mappings.
-    for(;;) {
-        uint16_t norm16=getNorm16(c);
-        if(norm16<=minYesNo) {
-            // no decomposition or Hangul syllable, all zeros
-            return 0;
-        } else if(norm16>=MIN_NORMAL_MAYBE_YES) {
+    uint16_t norm16=getNorm16(c);
+    if (norm16 >= limitNoNo) {
+        if(norm16>=MIN_NORMAL_MAYBE_YES) {
             // combining mark
-            norm16&=0xff;
+            norm16=getCCFromNormalYesOrMaybe(norm16);
             return norm16|(norm16<<8);
         } else if(norm16>=minMaybeYes) {
             return 0;
-        } else if(isDecompNoAlgorithmic(norm16)) {
+        } else {  // isDecompNoAlgorithmic(norm16)
+            uint16_t deltaTrailCC = norm16 & DELTA_TCCC_MASK;
+            if (deltaTrailCC <= DELTA_TCCC_1) {
+                return deltaTrailCC >> OFFSET_SHIFT;
+            }
+            // Maps to an isCompYesAndZeroCC.
             c=mapAlgorithmic(c, norm16);
-        } else {
-            // c decomposes, get everything from the variable-length extra data
-            const uint16_t *mapping=getMapping(norm16);
-            uint16_t firstUnit=*mapping;
-            if((firstUnit&MAPPING_LENGTH_MASK)==0) {
-                // A character that is deleted (maps to an empty string) must
-                // get the worst-case lccc and tccc values because arbitrary
-                // characters on both sides will become adjacent.
-                return 0x1ff;
-            } else {
-                norm16=firstUnit>>8;  // tccc
-                if(firstUnit&MAPPING_HAS_CCC_LCCC_WORD) {
-                    norm16|=*(mapping-1)&0xff00;  // lccc
-                }
-                return norm16;
-            }
+            norm16=getNorm16(c);
         }
     }
+    if(norm16<=minYesNo || isHangulLVT(norm16)) {
+        // no decomposition or Hangul syllable, all zeros
+        return 0;
+    }
+    // c decomposes, get everything from the variable-length extra data
+    const uint16_t *mapping=getMapping(norm16);
+    uint16_t firstUnit=*mapping;
+    norm16=firstUnit>>8;  // tccc
+    if(firstUnit&MAPPING_HAS_CCC_LCCC_WORD) {
+        norm16|=*(mapping-1)&0xff00;  // lccc
+    }
+    return norm16;
 }
 
 // Dual functionality:
@@ -1624,7 +2159,7 @@
     const UChar *prevBoundary=src;
     int32_t prevFCD16=0;
     if(limit==NULL) {
-        src=copyLowPrefixFromNulTerminated(src, MIN_CCC_LCCC_CP, buffer, errorCode);
+        src=copyLowPrefixFromNulTerminated(src, minLcccCP, buffer, errorCode);
         if(U_FAILURE(errorCode)) {
             return src;
         }
@@ -1653,7 +2188,7 @@
     for(;;) {
         // count code units with lccc==0
         for(prevSrc=src; src!=limit;) {
-            if((c=*src)<MIN_CCC_LCCC_CP) {
+            if((c=*src)<minLcccCP) {
                 prevFCD16=~c;
                 ++src;
             } else if(!singleLeadMightHaveNonZeroFCD16(c)) {
@@ -1692,11 +2227,15 @@
             prevBoundary=src;
             // We know that the previous character's lccc==0.
             if(prevFCD16<0) {
-                // Fetching the fcd16 value was deferred for this below-U+0300 code point.
+                // Fetching the fcd16 value was deferred for this below-minLcccCP code point.
                 UChar32 prev=~prevFCD16;
-                prevFCD16= prev<0x180 ? tccc180[prev] : getFCD16FromNormData(prev);
-                if(prevFCD16>1) {
-                    --prevBoundary;
+                if(prev<minDecompNoCP) {
+                    prevFCD16=0;
+                } else {
+                    prevFCD16=getFCD16FromNormData(prev);
+                    if(prevFCD16>1) {
+                        --prevBoundary;
+                    }
                 }
             } else {
                 const UChar *p=src-1;
@@ -1748,7 +2287,8 @@
              * The source text does not fulfill the conditions for FCD.
              * Decompose and reorder a limited piece of the text.
              */
-            if(!decomposeShort(prevBoundary, src, *buffer, errorCode)) {
+            decomposeShort(prevBoundary, src, FALSE, FALSE, *buffer, errorCode);
+            if (U_FAILURE(errorCode)) {
                 break;
             }
             prevBoundary=src;
@@ -1792,7 +2332,18 @@
 }
 
 const UChar *Normalizer2Impl::findPreviousFCDBoundary(const UChar *start, const UChar *p) const {
-    while(start<p && previousFCD16(start, p)>0xff) {}
+    while(start<p) {
+        const UChar *codePointLimit = p;
+        UChar32 c;
+        uint16_t norm16;
+        UTRIE2_U16_PREV16(normTrie, start, p, c, norm16);
+        if (c < minDecompNoCP || norm16HasDecompBoundaryAfter(norm16)) {
+            return codePointLimit;
+        }
+        if (norm16HasDecompBoundaryBefore(norm16)) {
+            return p;
+        }
+    }
     return p;
 }
 
@@ -1799,9 +2350,15 @@
 const UChar *Normalizer2Impl::findNextFCDBoundary(const UChar *p, const UChar *limit) const {
     while(p<limit) {
         const UChar *codePointStart=p;
-        if(nextFCD16(p, limit)<=0xff) {
+        UChar32 c;
+        uint16_t norm16;
+        UTRIE2_U16_NEXT16(normTrie, p, limit, c, norm16);
+        if (c < minLcccCP || norm16HasDecompBoundaryBefore(norm16)) {
             return codePointStart;
         }
+        if (norm16HasDecompBoundaryAfter(norm16)) {
+            return p;
+        }
     }
     return p;
 }
@@ -1845,27 +2402,36 @@
     }
 }
 
+// C++ class for friend access to private Normalizer2Impl members.
+class InitCanonIterData {
+public:
+    static void doInit(Normalizer2Impl *impl, UErrorCode &errorCode);
+    static void handleRange(Normalizer2Impl *impl, UChar32 start, UChar32 end, uint16_t value, UErrorCode &errorCode);
+};
+
 U_CDECL_BEGIN
 
+// UInitOnce instantiation function for CanonIterData
+static void U_CALLCONV
+initCanonIterData(Normalizer2Impl *impl, UErrorCode &errorCode) {
+    InitCanonIterData::doInit(impl, errorCode);
+}
+
 // Call Normalizer2Impl::makeCanonIterDataFromNorm16() for a range of same-norm16 characters.
 //     context: the Normalizer2Impl
 static UBool U_CALLCONV
 enumCIDRangeHandler(const void *context, UChar32 start, UChar32 end, uint32_t value) {
     UErrorCode errorCode = U_ZERO_ERROR;
-    if (value != 0) {
+    if (value != Normalizer2Impl::INERT) {
         Normalizer2Impl *impl = (Normalizer2Impl *)context;
-        impl->makeCanonIterDataFromNorm16(
-            start, end, (uint16_t)value, *impl->fCanonIterData, errorCode);
+        InitCanonIterData::handleRange(impl, start, end, (uint16_t)value, errorCode);
     }
     return U_SUCCESS(errorCode);
 }
 
+U_CDECL_END
 
-
-// UInitOnce instantiation function for CanonIterData
-
-static void U_CALLCONV 
-initCanonIterData(Normalizer2Impl *impl, UErrorCode &errorCode) {
+void InitCanonIterData::doInit(Normalizer2Impl *impl, UErrorCode &errorCode) {
     U_ASSERT(impl->fCanonIterData == NULL);
     impl->fCanonIterData = new CanonIterData(errorCode);
     if (impl->fCanonIterData == NULL) {
@@ -1872,7 +2438,7 @@
         errorCode=U_MEMORY_ALLOCATION_ERROR;
     }
     if (U_SUCCESS(errorCode)) {
-        utrie2_enum(impl->getNormTrie(), NULL, enumCIDRangeHandler, impl);
+        utrie2_enum(impl->normTrie, NULL, enumCIDRangeHandler, impl);
         utrie2_freeze(impl->fCanonIterData->trie, UTRIE2_32_VALUE_BITS, &errorCode);
     }
     if (U_FAILURE(errorCode)) {
@@ -1881,12 +2447,15 @@
     }
 }
 
-U_CDECL_END
+void InitCanonIterData::handleRange(
+        Normalizer2Impl *impl, UChar32 start, UChar32 end, uint16_t value, UErrorCode &errorCode) {
+    impl->makeCanonIterDataFromNorm16(start, end, value, *impl->fCanonIterData, errorCode);
+}
 
-void Normalizer2Impl::makeCanonIterDataFromNorm16(UChar32 start, UChar32 end, uint16_t norm16,
+void Normalizer2Impl::makeCanonIterDataFromNorm16(UChar32 start, UChar32 end, const uint16_t norm16,
                                                   CanonIterData &newData,
                                                   UErrorCode &errorCode) const {
-    if(norm16==0 || (minYesNo<=norm16 && norm16<minNoNo)) {
+    if(isInert(norm16) || (minYesNo<=norm16 && norm16<minNoNo)) {
         // Inert, or 2-way mapping (including Hangul syllable).
         // We do not write a canonStartSet for any yesNo character.
         // Composites from 2-way mappings are added at runtime from the
@@ -1898,7 +2467,7 @@
     for(UChar32 c=start; c<=end; ++c) {
         uint32_t oldValue=utrie2_get32(newData.trie, c);
         uint32_t newValue=oldValue;
-        if(norm16>=minMaybeYes) {
+        if(isMaybeOrNonZeroCC(norm16)) {
             // not a segment starter if it occurs in a decomposition or has cc!=0
             newValue|=CANON_NOT_SEGMENT_STARTER;
             if(norm16<MIN_NORMAL_MAYBE_YES) {
@@ -1909,12 +2478,16 @@
         } else {
             // c has a one-way decomposition
             UChar32 c2=c;
+            // Do not modify the whole-range norm16 value.
             uint16_t norm16_2=norm16;
-            while(limitNoNo<=norm16_2 && norm16_2<minMaybeYes) {
-                c2=mapAlgorithmic(c2, norm16_2);
-                norm16_2=getNorm16(c2);
+            if (isDecompNoAlgorithmic(norm16_2)) {
+                // Maps to an isCompYesAndZeroCC.
+                c2 = mapAlgorithmic(c2, norm16_2);
+                norm16_2 = getNorm16(c2);
+                // No compatibility mappings for the CanonicalIterator.
+                U_ASSERT(!(isHangulLV(norm16_2) || isHangulLVT(norm16_2)));
             }
-            if(minYesNo<=norm16_2 && norm16_2<limitNoNo) {
+            if (norm16_2 > minYesNo) {
                 // c decomposes, get everything from the variable-length extra data
                 const uint16_t *mapping=getMapping(norm16_2);
                 uint16_t firstUnit=*mapping;
@@ -2017,7 +2590,7 @@
     uint8_t *outBytes;
 
     const int32_t *inIndexes;
-    int32_t indexes[Normalizer2Impl::IX_MIN_MAYBE_YES+1];
+    int32_t indexes[Normalizer2Impl::IX_TOTAL_SIZE+1];
 
     int32_t i, offset, nextOffset, size;
 
@@ -2029,12 +2602,13 @@
 
     /* check data format and format version */
     pInfo=(const UDataInfo *)((const char *)inData+4);
+    uint8_t formatVersion0=pInfo->formatVersion[0];
     if(!(
         pInfo->dataFormat[0]==0x4e &&   /* dataFormat="Nrm2" */
         pInfo->dataFormat[1]==0x72 &&
         pInfo->dataFormat[2]==0x6d &&
         pInfo->dataFormat[3]==0x32 &&
-        (pInfo->formatVersion[0]==1 || pInfo->formatVersion[0]==2)
+        (1<=formatVersion0 && formatVersion0<=3)
     )) {
         udata_printError(ds, "unorm2_swap(): data format %02x.%02x.%02x.%02x (format version %02x) is not recognized as Normalizer2 data\n",
                          pInfo->dataFormat[0], pInfo->dataFormat[1],
@@ -2048,10 +2622,18 @@
     outBytes=(uint8_t *)outData+headerSize;
 
     inIndexes=(const int32_t *)inBytes;
+    int32_t minIndexesLength;
+    if(formatVersion0==1) {
+        minIndexesLength=Normalizer2Impl::IX_MIN_MAYBE_YES+1;
+    } else if(formatVersion0==2) {
+        minIndexesLength=Normalizer2Impl::IX_MIN_YES_NO_MAPPINGS_ONLY+1;
+    } else {
+        minIndexesLength=Normalizer2Impl::IX_MIN_LCCC_CP+1;
+    }
 
     if(length>=0) {
         length-=headerSize;
-        if(length<(int32_t)sizeof(indexes)) {
+        if(length<minIndexesLength*4) {
             udata_printError(ds, "unorm2_swap(): too few bytes (%d after header) for Normalizer2 data\n",
                              length);
             *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR;
@@ -2060,7 +2642,7 @@
     }
 
     /* read the first few indexes */
-    for(i=0; i<=Normalizer2Impl::IX_MIN_MAYBE_YES; ++i) {
+    for(i=0; i<UPRV_LENGTHOF(indexes); ++i) {
         indexes[i]=udata_readInt32(ds, inIndexes[i]);
     }
 

Modified: trunk/Build/source/libs/icu/icu-src/source/common/normalizer2impl.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/normalizer2impl.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/normalizer2impl.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 *******************************************************************************
@@ -8,7 +8,7 @@
 *
 *******************************************************************************
 *   file name:  normalizer2impl.h
-*   encoding:   US-ASCII
+*   encoding:   UTF-8
 *   tab size:   8 (not used)
 *   indentation:4
 *
@@ -35,6 +35,11 @@
 
 struct CanonIterData;
 
+class ByteSink;
+class Edits;
+class InitCanonIterData;
+class LcccContext;
+
 class U_COMMON_API Hangul {
 public:
     /* Korean Hangul and Jamo constants */
@@ -63,9 +68,9 @@
         return HANGUL_BASE<=c && c<HANGUL_LIMIT;
     }
     static inline UBool
-    isHangulWithoutJamoT(UChar c) {
+    isHangulLV(UChar32 c) {
         c-=HANGUL_BASE;
-        return c<HANGUL_COUNT && c%JAMO_T_COUNT==0;
+        return 0<=c && c<HANGUL_COUNT && c%JAMO_T_COUNT==0;
     }
     static inline UBool isJamoL(UChar32 c) {
         return (uint32_t)(c-JAMO_L_BASE)<JAMO_L_COUNT;
@@ -73,6 +78,14 @@
     static inline UBool isJamoV(UChar32 c) {
         return (uint32_t)(c-JAMO_V_BASE)<JAMO_V_COUNT;
     }
+    static inline UBool isJamoT(UChar32 c) {
+        int32_t t=c-JAMO_T_BASE;
+        return 0<t && t<JAMO_T_COUNT;  // not JAMO_T_BASE itself
+    }
+    static UBool isJamo(UChar32 c) {
+        return JAMO_L_BASE<=c && c<=JAMO_T_END &&
+            (c<=JAMO_L_END || (JAMO_V_BASE<=c && c<=JAMO_V_END) || JAMO_T_BASE<c);
+    }
 
     /**
      * Decomposes c, which must be a Hangul syllable, into buffer
@@ -117,10 +130,13 @@
 
 class U_COMMON_API ReorderingBuffer : public UMemory {
 public:
+    /** Constructs only; init() should be called. */
     ReorderingBuffer(const Normalizer2Impl &ni, UnicodeString &dest) :
         impl(ni), str(dest),
         start(NULL), reorderStart(NULL), limit(NULL),
         remainingCapacity(0), lastCC(0) {}
+    /** Constructs, removes the string contents, and initializes for a small initial capacity. */
+    ReorderingBuffer(const Normalizer2Impl &ni, UnicodeString &dest, UErrorCode &errorCode);
     ~ReorderingBuffer() {
         if(start!=NULL) {
             str.releaseBuffer((int32_t)(limit-start));
@@ -135,12 +151,8 @@
     uint8_t getLastCC() const { return lastCC; }
 
     UBool equals(const UChar *start, const UChar *limit) const;
+    UBool equals(const uint8_t *otherStart, const uint8_t *otherLimit) const;
 
-    // For Hangul composition, replacing the Leading consonant Jamo with the syllable.
-    void setLastChar(UChar c) {
-        *(limit-1)=c;
-    }
-
     UBool append(UChar32 c, uint8_t cc, UErrorCode &errorCode) {
         return (c<=0xffff) ?
             appendBMP((UChar)c, cc, errorCode) :
@@ -176,7 +188,7 @@
         lastCC=0;
     }
     void copyReorderableSuffixTo(UnicodeString &s) const {
-        s.setTo(reorderStart, (int32_t)(limit-reorderStart));
+        s.setTo(ConstChar16Ptr(reorderStart), (int32_t)(limit-reorderStart));
     }
 private:
     /*
@@ -218,6 +230,12 @@
     UChar *codePointStart, *codePointLimit;
 };
 
+/**
+ * Low-level implementation of the Unicode Normalization Algorithm.
+ * For the data structure and details see the documentation at the end of
+ * this normalizer2impl.h and in the design doc at
+ * http://site.icu-project.org/design/normalization/custom
+ */
 class U_COMMON_API Normalizer2Impl : public UObject {
 public:
     Normalizer2Impl() : normTrie(NULL), fCanonIterData(NULL) {
@@ -234,8 +252,6 @@
 
     // low-level properties ------------------------------------------------ ***
 
-    const UTrie2 *getNormTrie() const { return normTrie; }
-
     UBool ensureCanonIterData(UErrorCode &errorCode) const;
 
     uint16_t getNorm16(UChar32 c) const { return UTRIE2_GET16(normTrie, c); }
@@ -255,7 +271,7 @@
 
     uint8_t getCC(uint16_t norm16) const {
         if(norm16>=MIN_NORMAL_MAYBE_YES) {
-            return (uint8_t)norm16;
+            return getCCFromNormalYesOrMaybe(norm16);
         }
         if(norm16<minNoNo || limitNoNo<=norm16) {
             return 0;
@@ -262,9 +278,16 @@
         }
         return getCCFromNoNo(norm16);
     }
+    static uint8_t getCCFromNormalYesOrMaybe(uint16_t norm16) {
+        return (uint8_t)(norm16 >> OFFSET_SHIFT);
+    }
     static uint8_t getCCFromYesOrMaybe(uint16_t norm16) {
-        return norm16>=MIN_NORMAL_MAYBE_YES ? (uint8_t)norm16 : 0;
+        return norm16>=MIN_NORMAL_MAYBE_YES ? getCCFromNormalYesOrMaybe(norm16) : 0;
     }
+    uint8_t getCCFromYesOrMaybeCP(UChar32 c) const {
+        if (c < minCompNoMaybeCP) { return 0; }
+        return getCCFromYesOrMaybe(getNorm16(c));
+    }
 
     /**
      * Returns the FCD data for code point c.
@@ -272,10 +295,8 @@
      * @return The lccc(c) in bits 15..8 and tccc(c) in bits 7..0.
      */
     uint16_t getFCD16(UChar32 c) const {
-        if(c<0) {
+        if(c<minDecompNoCP) {
             return 0;
-        } else if(c<0x180) {
-            return tccc180[c];
         } else if(c<=0xffff) {
             if(!singleLeadMightHaveNonZeroFCD16(c)) { return 0; }
         }
@@ -291,9 +312,7 @@
      */
     uint16_t nextFCD16(const UChar *&s, const UChar *limit) const {
         UChar32 c=*s++;
-        if(c<0x180) {
-            return tccc180[c];
-        } else if(!singleLeadMightHaveNonZeroFCD16(c)) {
+        if(c<minDecompNoCP || !singleLeadMightHaveNonZeroFCD16(c)) {
             return 0;
         }
         UChar c2;
@@ -311,8 +330,8 @@
      */
     uint16_t previousFCD16(const UChar *start, const UChar *&s) const {
         UChar32 c=*--s;
-        if(c<0x180) {
-            return tccc180[c];
+        if(c<minDecompNoCP) {
+            return 0;
         }
         if(!U16_IS_TRAIL(c)) {
             if(!singleLeadMightHaveNonZeroFCD16(c)) {
@@ -328,8 +347,6 @@
         return getFCD16FromNormData(c);
     }
 
-    /** Returns the FCD data for U+0000<=c<U+0180. */
-    uint16_t getFCD16FromBelow180(UChar32 c) const { return tccc180[c]; }
     /** Returns TRUE if the single-or-lead code unit c might have non-zero FCD data. */
     UBool singleLeadMightHaveNonZeroFCD16(UChar32 lead) const {
         // 0<=lead<=0xffff
@@ -340,9 +357,6 @@
     /** Returns the FCD value from the regular normalization data. */
     uint16_t getFCD16FromNormData(UChar32 c) const;
 
-    void makeCanonIterDataFromNorm16(UChar32 start, UChar32 end, uint16_t norm16,
-                                     CanonIterData &newData, UErrorCode &errorCode) const;
-
     /**
      * Gets the decomposition for one code point.
      * @param c code point
@@ -367,14 +381,25 @@
     UBool getCanonStartSet(UChar32 c, UnicodeSet &set) const;
 
     enum {
-        MIN_CCC_LCCC_CP=0x300
-    };
+        // Fixed norm16 values.
+        MIN_YES_YES_WITH_CC=0xfe02,
+        JAMO_VT=0xfe00,
+        MIN_NORMAL_MAYBE_YES=0xfc00,
+        JAMO_L=2,  // offset=1 hasCompBoundaryAfter=FALSE
+        INERT=1,  // offset=0 hasCompBoundaryAfter=TRUE
 
-    enum {
-        MIN_YES_YES_WITH_CC=0xff01,
-        JAMO_VT=0xff00,
-        MIN_NORMAL_MAYBE_YES=0xfe00,
-        JAMO_L=1,
+        // norm16 bit 0 is comp-boundary-after.
+        HAS_COMP_BOUNDARY_AFTER=1,
+        OFFSET_SHIFT=1,
+
+        // For algorithmic one-way mappings, norm16 bits 2..1 indicate the
+        // tccc (0, 1, >1) for quick FCC boundary-after tests.
+        DELTA_TCCC_0=0,
+        DELTA_TCCC_1=2,
+        DELTA_TCCC_GT_1=4,
+        DELTA_TCCC_MASK=6,
+        DELTA_SHIFT=3,
+
         MAX_DELTA=0x40
     };
 
@@ -394,14 +419,25 @@
         IX_MIN_COMP_NO_MAYBE_CP,
 
         // Norm16 value thresholds for quick check combinations and types of extra data.
-        IX_MIN_YES_NO,  // Mappings & compositions in [minYesNo..minYesNoMappingsOnly[.
+
+        /** Mappings & compositions in [minYesNo..minYesNoMappingsOnly[. */
+        IX_MIN_YES_NO,
+        /** Mappings are comp-normalized. */
         IX_MIN_NO_NO,
         IX_LIMIT_NO_NO,
         IX_MIN_MAYBE_YES,
 
-        IX_MIN_YES_NO_MAPPINGS_ONLY,  // Mappings only in [minYesNoMappingsOnly..minNoNo[.
+        /** Mappings only in [minYesNoMappingsOnly..minNoNo[. */
+        IX_MIN_YES_NO_MAPPINGS_ONLY,
+        /** Mappings are not comp-normalized but have a comp boundary before. */
+        IX_MIN_NO_NO_COMP_BOUNDARY_BEFORE,
+        /** Mappings do not have a comp boundary before. */
+        IX_MIN_NO_NO_COMP_NO_MAYBE_CC,
+        /** Mappings to the empty string. */
+        IX_MIN_NO_NO_EMPTY,
 
-        IX_RESERVED15,
+        IX_MIN_LCCC_CP,
+        IX_RESERVED19,
         IX_COUNT
     };
 
@@ -408,7 +444,7 @@
     enum {
         MAPPING_HAS_CCC_LCCC_WORD=0x80,
         MAPPING_HAS_RAW_MAPPING=0x40,
-        MAPPING_NO_COMP_BOUNDARY_AFTER=0x20,
+        // unused bit 0x20,
         MAPPING_LENGTH_MASK=0x1f
     };
 
@@ -457,6 +493,12 @@
                           UnicodeString &safeMiddle,
                           ReorderingBuffer &buffer,
                           UErrorCode &errorCode) const;
+
+    /** sink==nullptr: isNormalized() */
+    UBool composeUTF8(uint32_t options, UBool onlyContiguous,
+                      const uint8_t *src, const uint8_t *limit,
+                      ByteSink *sink, icu::Edits *edits, UErrorCode &errorCode) const;
+
     const UChar *makeFCD(const UChar *src, const UChar *limit,
                          ReorderingBuffer *buffer, UErrorCode &errorCode) const;
     void makeFCDAndAppend(const UChar *src, const UChar *limit,
@@ -465,27 +507,42 @@
                           ReorderingBuffer &buffer,
                           UErrorCode &errorCode) const;
 
-    UBool hasDecompBoundary(UChar32 c, UBool before) const;
+    UBool hasDecompBoundaryBefore(UChar32 c) const;
+    UBool norm16HasDecompBoundaryBefore(uint16_t norm16) const;
+    UBool hasDecompBoundaryAfter(UChar32 c) const;
+    UBool norm16HasDecompBoundaryAfter(uint16_t norm16) const;
     UBool isDecompInert(UChar32 c) const { return isDecompYesAndZeroCC(getNorm16(c)); }
 
     UBool hasCompBoundaryBefore(UChar32 c) const {
-        return c<minCompNoMaybeCP || hasCompBoundaryBefore(c, getNorm16(c));
+        return c<minCompNoMaybeCP || norm16HasCompBoundaryBefore(getNorm16(c));
     }
-    UBool hasCompBoundaryAfter(UChar32 c, UBool onlyContiguous, UBool testInert) const;
+    UBool hasCompBoundaryAfter(UChar32 c, UBool onlyContiguous) const {
+        return norm16HasCompBoundaryAfter(getNorm16(c), onlyContiguous);
+    }
+    UBool isCompInert(UChar32 c, UBool onlyContiguous) const {
+        uint16_t norm16=getNorm16(c);
+        return isCompYesAndZeroCC(norm16) &&
+            (norm16 & HAS_COMP_BOUNDARY_AFTER) != 0 &&
+            (!onlyContiguous || isInert(norm16) || *getMapping(norm16) <= 0x1ff);
+    }
 
-    UBool hasFCDBoundaryBefore(UChar32 c) const { return c<MIN_CCC_LCCC_CP || getFCD16(c)<=0xff; }
-    UBool hasFCDBoundaryAfter(UChar32 c) const {
-        uint16_t fcd16=getFCD16(c);
-        return fcd16<=1 || (fcd16&0xff)==0;
-    }
+    UBool hasFCDBoundaryBefore(UChar32 c) const { return hasDecompBoundaryBefore(c); }
+    UBool hasFCDBoundaryAfter(UChar32 c) const { return hasDecompBoundaryAfter(c); }
     UBool isFCDInert(UChar32 c) const { return getFCD16(c)<=1; }
 private:
+    friend class InitCanonIterData;
+    friend class LcccContext;
+
     UBool isMaybe(uint16_t norm16) const { return minMaybeYes<=norm16 && norm16<=JAMO_VT; }
     UBool isMaybeOrNonZeroCC(uint16_t norm16) const { return norm16>=minMaybeYes; }
-    static UBool isInert(uint16_t norm16) { return norm16==0; }
-    static UBool isJamoL(uint16_t norm16) { return norm16==1; }
+    static UBool isInert(uint16_t norm16) { return norm16==INERT; }
+    static UBool isJamoL(uint16_t norm16) { return norm16==JAMO_L; }
     static UBool isJamoVT(uint16_t norm16) { return norm16==JAMO_VT; }
-    UBool isHangul(uint16_t norm16) const { return norm16==minYesNo; }
+    uint16_t hangulLVT() const { return minYesNoMappingsOnly|HAS_COMP_BOUNDARY_AFTER; }
+    UBool isHangulLV(uint16_t norm16) const { return norm16==minYesNo; }
+    UBool isHangulLVT(uint16_t norm16) const {
+        return norm16==hangulLVT();
+    }
     UBool isCompYesAndZeroCC(uint16_t norm16) const { return norm16<minNoNo; }
     // UBool isCompYes(uint16_t norm16) const {
     //     return norm16>=MIN_YES_YES_WITH_CC || norm16<minNoNo;
@@ -504,7 +561,7 @@
     /**
      * A little faster and simpler than isDecompYesAndZeroCC() but does not include
      * the MaybeYes which combine-forward and have ccc=0.
-     * (Standard Unicode 5.2 normalization does not have such characters.)
+     * (Standard Unicode 10 normalization does not have such characters.)
      */
     UBool isMostDecompYesAndZeroCC(uint16_t norm16) const {
         return norm16<minYesNo || norm16==MIN_NORMAL_MAYBE_YES || norm16==JAMO_VT;
@@ -514,7 +571,7 @@
     // For use with isCompYes().
     // Perhaps the compiler can combine the two tests for MIN_YES_YES_WITH_CC.
     // static uint8_t getCCFromYes(uint16_t norm16) {
-    //     return norm16>=MIN_YES_YES_WITH_CC ? (uint8_t)norm16 : 0;
+    //     return norm16>=MIN_YES_YES_WITH_CC ? getCCFromNormalYesOrMaybe(norm16) : 0;
     // }
     uint8_t getCCFromNoNo(uint16_t norm16) const {
         const uint16_t *mapping=getMapping(norm16);
@@ -525,30 +582,47 @@
         }
     }
     // requires that the [cpStart..cpLimit[ character passes isCompYesAndZeroCC()
-    uint8_t getTrailCCFromCompYesAndZeroCC(const UChar *cpStart, const UChar *cpLimit) const;
+    uint8_t getTrailCCFromCompYesAndZeroCC(uint16_t norm16) const {
+        if(norm16<=minYesNo) {
+            return 0;  // yesYes and Hangul LV have ccc=tccc=0
+        } else {
+            // For Hangul LVT we harmlessly fetch a firstUnit with tccc=0 here.
+            return (uint8_t)(*getMapping(norm16)>>8);  // tccc from yesNo
+        }
+    }
+    uint8_t getPreviousTrailCC(const UChar *start, const UChar *p) const;
+    uint8_t getPreviousTrailCC(const uint8_t *start, const uint8_t *p) const;
 
     // Requires algorithmic-NoNo.
     UChar32 mapAlgorithmic(UChar32 c, uint16_t norm16) const {
-        return c+norm16-(minMaybeYes-MAX_DELTA-1);
+        return c+(norm16>>DELTA_SHIFT)-centerNoNoDelta;
     }
+    UChar32 getAlgorithmicDelta(uint16_t norm16) const {
+        return (norm16>>DELTA_SHIFT)-centerNoNoDelta;
+    }
 
     // Requires minYesNo<norm16<limitNoNo.
-    const uint16_t *getMapping(uint16_t norm16) const { return extraData+norm16; }
+    const uint16_t *getMapping(uint16_t norm16) const { return extraData+(norm16>>OFFSET_SHIFT); }
     const uint16_t *getCompositionsListForDecompYes(uint16_t norm16) const {
-        if(norm16==0 || MIN_NORMAL_MAYBE_YES<=norm16) {
+        if(norm16<JAMO_L || MIN_NORMAL_MAYBE_YES<=norm16) {
             return NULL;
         } else if(norm16<minMaybeYes) {
-            return extraData+norm16;  // for yesYes; if Jamo L: harmless empty list
+            return getMapping(norm16);  // for yesYes; if Jamo L: harmless empty list
         } else {
             return maybeYesCompositions+norm16-minMaybeYes;
         }
     }
     const uint16_t *getCompositionsListForComposite(uint16_t norm16) const {
-        const uint16_t *list=extraData+norm16;  // composite has both mapping & compositions list
+        // A composite has both mapping & compositions list.
+        const uint16_t *list=getMapping(norm16);
         return list+  // mapping pointer
-            1+  // +1 to skip the first unit with the mapping lenth
+            1+  // +1 to skip the first unit with the mapping length
             (*list&MAPPING_LENGTH_MASK);  // + mapping length
     }
+    const uint16_t *getCompositionsListForMaybe(uint16_t norm16) const {
+        // minMaybeYes<=norm16<MIN_NORMAL_MAYBE_YES
+        return maybeYesCompositions+((norm16-minMaybeYes)>>OFFSET_SHIFT);
+    }
     /**
      * @param c code point must have compositions
      * @return compositions list pointer
@@ -563,37 +637,71 @@
                                                 UChar32 minNeedDataCP,
                                                 ReorderingBuffer *buffer,
                                                 UErrorCode &errorCode) const;
-    UBool decomposeShort(const UChar *src, const UChar *limit,
-                         ReorderingBuffer &buffer, UErrorCode &errorCode) const;
+    const UChar *decomposeShort(const UChar *src, const UChar *limit,
+                                UBool stopAtCompBoundary, UBool onlyContiguous,
+                                ReorderingBuffer &buffer, UErrorCode &errorCode) const;
     UBool decompose(UChar32 c, uint16_t norm16,
                     ReorderingBuffer &buffer, UErrorCode &errorCode) const;
 
+    const uint8_t *decomposeShort(const uint8_t *src, const uint8_t *limit,
+                                  UBool stopAtCompBoundary, UBool onlyContiguous,
+                                  ReorderingBuffer &buffer, UErrorCode &errorCode) const;
+
     static int32_t combine(const uint16_t *list, UChar32 trail);
     void addComposites(const uint16_t *list, UnicodeSet &set) const;
     void recompose(ReorderingBuffer &buffer, int32_t recomposeStartIndex,
                    UBool onlyContiguous) const;
 
-    UBool hasCompBoundaryBefore(UChar32 c, uint16_t norm16) const;
-    const UChar *findPreviousCompBoundary(const UChar *start, const UChar *p) const;
-    const UChar *findNextCompBoundary(const UChar *p, const UChar *limit) const;
+    UBool hasCompBoundaryBefore(UChar32 c, uint16_t norm16) const {
+        return c<minCompNoMaybeCP || norm16HasCompBoundaryBefore(norm16);
+    }
+    UBool norm16HasCompBoundaryBefore(uint16_t norm16) const  {
+        return norm16 < minNoNoCompNoMaybeCC || isAlgorithmicNoNo(norm16);
+    }
+    UBool hasCompBoundaryBefore(const UChar *src, const UChar *limit) const;
+    UBool hasCompBoundaryBefore(const uint8_t *src, const uint8_t *limit) const;
+    UBool hasCompBoundaryAfter(const UChar *start, const UChar *p,
+                               UBool onlyContiguous) const;
+    UBool hasCompBoundaryAfter(const uint8_t *start, const uint8_t *p,
+                               UBool onlyContiguous) const;
+    UBool norm16HasCompBoundaryAfter(uint16_t norm16, UBool onlyContiguous) const {
+        return (norm16 & HAS_COMP_BOUNDARY_AFTER) != 0 &&
+            (!onlyContiguous || isTrailCC01ForCompBoundaryAfter(norm16));
+    }
+    /** For FCC: Given norm16 HAS_COMP_BOUNDARY_AFTER, does it have tccc<=1? */
+    UBool isTrailCC01ForCompBoundaryAfter(uint16_t norm16) const {
+        return isInert(norm16) || (isDecompNoAlgorithmic(norm16) ?
+            (norm16 & DELTA_TCCC_MASK) <= DELTA_TCCC_1 : *getMapping(norm16) <= 0x1ff);
+    }
 
+    const UChar *findPreviousCompBoundary(const UChar *start, const UChar *p, UBool onlyContiguous) const;
+    const UChar *findNextCompBoundary(const UChar *p, const UChar *limit, UBool onlyContiguous) const;
+
     const UChar *findPreviousFCDBoundary(const UChar *start, const UChar *p) const;
     const UChar *findNextFCDBoundary(const UChar *p, const UChar *limit) const;
 
+    void makeCanonIterDataFromNorm16(UChar32 start, UChar32 end, const uint16_t norm16,
+                                     CanonIterData &newData, UErrorCode &errorCode) const;
+
     int32_t getCanonValue(UChar32 c) const;
     const UnicodeSet &getCanonStartSet(int32_t n) const;
 
     // UVersionInfo dataVersion;
 
-    // Code point thresholds for quick check codes.
-    UChar32 minDecompNoCP;
-    UChar32 minCompNoMaybeCP;
+    // BMP code point thresholds for quick check loops looking at single UTF-16 code units.
+    UChar minDecompNoCP;
+    UChar minCompNoMaybeCP;
+    UChar minLcccCP;
 
     // Norm16 value thresholds for quick check combinations and types of extra data.
     uint16_t minYesNo;
     uint16_t minYesNoMappingsOnly;
     uint16_t minNoNo;
+    uint16_t minNoNoCompBoundaryBefore;
+    uint16_t minNoNoCompNoMaybeCC;
+    uint16_t minNoNoEmpty;
     uint16_t limitNoNo;
+    uint16_t centerNoNoDelta;
     uint16_t minMaybeYes;
 
     const UTrie2 *normTrie;
@@ -600,9 +708,7 @@
     const uint16_t *maybeYesCompositions;
     const uint16_t *extraData;  // mappings and/or compositions for yesYes, yesNo & noNo characters
     const uint8_t *smallFCD;  // [0x100] one bit per 32 BMP code points, set if any FCD!=0
-    uint8_t tccc180[0x180];  // tccc values for U+0000..U+017F
 
-public:  // CanonIterData is public to allow access from C callback functions.
     UInitOnce       fCanonIterDataInitOnce;
     CanonIterData  *fCanonIterData;
 };
@@ -658,7 +764,7 @@
 
 /**
  * Format of Normalizer2 .nrm data files.
- * Format version 2.0.
+ * Format version 3.0.
  *
  * Normalizer2 .nrm data files provide data for the Unicode Normalization algorithms.
  * ICU ships with data files for standard Unicode Normalization Forms
@@ -665,6 +771,7 @@
  * NFC and NFD (nfc.nrm), NFKC and NFKD (nfkc.nrm) and NFKC_Casefold (nfkc_cf.nrm).
  * Custom (application-specific) data can be built into additional .nrm files
  * with the gennorm2 build tool.
+ * ICU ships with one such file, uts46.nrm, for the implementation of UTS #46.
  *
  * Normalizer2.getInstance() causes a .nrm file to be loaded, unless it has been
  * cached already. Internally, Normalizer2Impl.load() reads the .nrm file.
@@ -695,14 +802,20 @@
  *      with a decomposition mapping, that is, with NF*D_QC=No.
  *      minCompNoMaybeCP=indexes[IX_MIN_COMP_NO_MAYBE_CP] is the lowest code point
  *      with NF*C_QC=No (has a one-way mapping) or Maybe (combines backward).
+ *      minLcccCP=indexes[IX_MIN_LCCC_CP] (index 18, new in formatVersion 3)
+ *      is the lowest code point with lccc!=0.
  *
- *      The next five indexes are thresholds of 16-bit trie values for ranges of
+ *      The next eight indexes are thresholds of 16-bit trie values for ranges of
  *      values indicating multiple normalization properties.
+ *      They are listed here in threshold order, not in the order they are stored in the indexes.
  *          minYesNo=indexes[IX_MIN_YES_NO];
+ *          minYesNoMappingsOnly=indexes[IX_MIN_YES_NO_MAPPINGS_ONLY];
  *          minNoNo=indexes[IX_MIN_NO_NO];
+ *          minNoNoCompBoundaryBefore=indexes[IX_MIN_NO_NO_COMP_BOUNDARY_BEFORE];
+ *          minNoNoCompNoMaybeCC=indexes[IX_MIN_NO_NO_COMP_NO_MAYBE_CC];
+ *          minNoNoEmpty=indexes[IX_MIN_NO_NO_EMPTY];
  *          limitNoNo=indexes[IX_LIMIT_NO_NO];
  *          minMaybeYes=indexes[IX_MIN_MAYBE_YES];
- *          minYesNoMappingsOnly=indexes[IX_MIN_YES_NO_MAPPINGS_ONLY];
  *      See the normTrie description below and the design doc for details.
  *
  * UTrie2 normTrie; -- see utrie2_impl.h and utrie2.h
@@ -710,12 +823,14 @@
  *      The trie holds the main normalization data. Each code point is mapped to a 16-bit value.
  *      Rather than using independent bits in the value (which would require more than 16 bits),
  *      information is extracted primarily via range checks.
+ *      Except, format version 3 uses bit 0 for hasCompBoundaryAfter().
  *      For example, a 16-bit value norm16 in the range minYesNo<=norm16<minNoNo
  *      means that the character has NF*C_QC=Yes and NF*D_QC=No properties,
  *      which means it has a two-way (round-trip) decomposition mapping.
  *      Values in the range 2<=norm16<limitNoNo are also directly indexes into the extraData
  *      pointing to mappings, compositions lists, or both.
- *      Value norm16==0 means that the character is normalization-inert, that is,
+ *      Value norm16==INERT (0 in versions 1 & 2, 1 in version 3)
+ *      means that the character is normalization-inert, that is,
  *      it does not have a mapping, does not participate in composition, has a zero
  *      canonical combining class, and forms a boundary where text before it and after it
  *      can be normalized independently.
@@ -729,7 +844,7 @@
  *      The trie has a value for each lead surrogate code unit representing the "worst case"
  *      properties of the 1024 supplementary characters whose UTF-16 form starts with
  *      the lead surrogate. If all of the 1024 supplementary characters are normalization-inert,
- *      then their lead surrogate code unit has the trie value 0.
+ *      then their lead surrogate code unit has the trie value INERT.
  *      When the lead surrogate unit's value exceeds the quick check minimum during processing,
  *      the properties for the full supplementary code point need to be looked up.
  *
@@ -738,6 +853,7 @@
  *
  *      There is only one byte offset for the end of these two arrays.
  *      The split between them is given by the constant and variable mentioned above.
+ *      In version 3, the difference must be shifted right by OFFSET_SHIFT.
  *
  *      The maybeYesCompositions array contains compositions lists for characters that
  *      combine both forward (as starters in composition pairs)
@@ -754,6 +870,8 @@
  *      followed by only mappings for "NoNo" characters.
  *      (Referring to pairs of NFC/NFD quick check values.)
  *      The norm16 values of those characters are directly indexes into the extraData array.
+ *      In version 3, the norm16 values must be shifted right by OFFSET_SHIFT
+ *      for accessing extraData.
  *
  *      The data structures for compositions lists and mappings are described in the design doc.
  *
@@ -784,6 +902,50 @@
  *   This is fully equivalent with formatVersion 1's MAPPING_PLUS_COMPOSITION_LIST flag.
  *   It is needed for the new (in ICU 49) composePair(), not for other normalization.
  * - Addition of the smallFCD[] bit set.
+ *
+ * Changes from format version 2 to format version 3 (ICU 60) ------------------
+ *
+ * - norm16 bit 0 indicates hasCompBoundaryAfter(),
+ *   except that for contiguous composition (FCC) the tccc must be checked as well.
+ *   Data indexes and ccc values are shifted left by one (OFFSET_SHIFT).
+ *   Thresholds like minNoNo are tested before shifting.
+ *
+ * - Algorithmic mapping deltas are shifted left by two more bits (total DELTA_SHIFT),
+ *   to make room for two bits (three values) indicating whether the tccc is 0, 1, or greater.
+ *   See DELTA_TCCC_MASK etc.
+ *   This helps with fetching tccc/FCD values and FCC hasCompBoundaryAfter().
+ *   minMaybeYes is 8-aligned so that the DELTA_TCCC_MASK bits can be tested directly.
+ *
+ * - Algorithmic mappings are only used for mapping to "comp yes and ccc=0" characters,
+ *   and ASCII characters are mapped algorithmically only to other ASCII characters.
+ *   This helps with hasCompBoundaryBefore() and compose() fast paths.
+ *   It is never necessary any more to loop for algorithmic mappings.
+ *
+ * - Addition of indexes[IX_MIN_NO_NO_COMP_BOUNDARY_BEFORE],
+ *   indexes[IX_MIN_NO_NO_COMP_NO_MAYBE_CC], and indexes[IX_MIN_NO_NO_EMPTY],
+ *   and separation of the noNo extraData into distinct ranges.
+ *   With this, the noNo norm16 value indicates whether the mapping is
+ *   compose-normalized, not normalized but hasCompBoundaryBefore(),
+ *   not even that, or maps to an empty string.
+ *   hasCompBoundaryBefore() can be determined solely from the norm16 value.
+ *
+ * - The norm16 value for Hangul LVT is now different from that for Hangul LV,
+ *   so that hasCompBoundaryAfter() need not check for the syllable type.
+ *   For Hangul LV, minYesNo continues to be used (no comp-boundary-after).
+ *   For Hangul LVT, minYesNoMappingsOnly|HAS_COMP_BOUNDARY_AFTER is used.
+ *   The extraData units at these indexes are set to firstUnit=2 and firstUnit=3, respectively,
+ *   to simplify some code.
+ *
+ * - The extraData firstUnit bit 5 is no longer necessary
+ *   (norm16 bit 0 used instead of firstUnit MAPPING_NO_COMP_BOUNDARY_AFTER),
+ *   is reserved again, and always set to 0.
+ *
+ * - Addition of indexes[IX_MIN_LCCC_CP], the first code point where lccc!=0.
+ *   This used to be hardcoded to U+0300, but in data like NFKC_Casefold it is lower:
+ *   U+00AD Soft Hyphen maps to an empty string,
+ *   which is artificially assigned "worst case" values lccc=1 and tccc=255.
+ *
+ * - A mapping to an empty string has explicit lccc=1 and tccc=255 values.
  */
 
 #endif  /* !UCONFIG_NO_NORMALIZATION */

Modified: trunk/Build/source/libs/icu/icu-src/source/common/normlzr.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/normlzr.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/normlzr.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
  *************************************************************************
@@ -23,6 +23,12 @@
 #include "normalizer2impl.h"
 #include "uprops.h"  // for uniset_getUnicode32Instance()
 
+#if defined(_ARM64_) && defined(move32)
+ // System can define move32 intrinsics, but the char iters define move32 method
+ // using same undef trick in headers, so undef here to re-enable the method.
+#undef move32
+#endif
+
 U_NAMESPACE_BEGIN
 
 UOBJECT_DEFINE_RTTI_IMPLEMENTATION(Normalizer)
@@ -40,7 +46,7 @@
     init();
 }
 
-Normalizer::Normalizer(const UChar *str, int32_t length, UNormalizationMode mode) :
+Normalizer::Normalizer(ConstChar16Ptr str, int32_t length, UNormalizationMode mode) :
     UObject(), fFilteredNorm2(NULL), fNorm2(NULL), fUMode(mode), fOptions(0),
     text(new UCharCharacterIterator(str, length)),
     currentIndex(0), nextIndex(0),
@@ -435,7 +441,7 @@
 }
 
 void
-Normalizer::setText(const UChar* newText,
+Normalizer::setText(ConstChar16Ptr newText,
                     int32_t length,
                     UErrorCode &status)
 {

Modified: trunk/Build/source/libs/icu/icu-src/source/common/parsepos.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/parsepos.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/parsepos.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 **********************************************************************

Modified: trunk/Build/source/libs/icu/icu-src/source/common/patternprops.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/patternprops.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/patternprops.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 *******************************************************************************
@@ -6,7 +6,7 @@
 *   Corporation and others.  All Rights Reserved.
 *******************************************************************************
 *   file name:  patternprops.cpp
-*   encoding:   US-ASCII
+*   encoding:   UTF-8
 *   tab size:   8 (not used)
 *   indentation:4
 *

Modified: trunk/Build/source/libs/icu/icu-src/source/common/patternprops.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/patternprops.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/patternprops.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 *******************************************************************************
@@ -6,7 +6,7 @@
 *   Corporation and others.  All Rights Reserved.
 *******************************************************************************
 *   file name:  patternprops.h
-*   encoding:   US-ASCII
+*   encoding:   UTF-8
 *   tab size:   8 (not used)
 *   indentation:4
 *

Modified: trunk/Build/source/libs/icu/icu-src/source/common/pluralmap.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/pluralmap.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/pluralmap.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
  * Copyright (C) 2015, International Business Machines Corporation and

Modified: trunk/Build/source/libs/icu/icu-src/source/common/pluralmap.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/pluralmap.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/pluralmap.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 ******************************************************************************

Modified: trunk/Build/source/libs/icu/icu-src/source/common/propname.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/propname.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/propname.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 **********************************************************************

Modified: trunk/Build/source/libs/icu/icu-src/source/common/propname.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/propname.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/propname.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 **********************************************************************

Modified: trunk/Build/source/libs/icu/icu-src/source/common/propname_data.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/propname_data.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/propname_data.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 //
 // Copyright (C) 1999-2016, International Business Machines
@@ -13,90 +13,92 @@
 
 U_NAMESPACE_BEGIN
 
-const int32_t PropNameData::indexes[8]={0x20,0x135c,0x468d,0x8e95,0x8e95,0x8e95,0x2f,0};
+const int32_t PropNameData::indexes[8]={0x20,0x13c8,0x4831,0x92bb,0x92bb,0x92bb,0x2f,0};
 
-const int32_t PropNameData::valueMaps[1231]={
-6,0,0x3d,0,0xd5,0x356,0xd5,0x36c,0xd5,0x381,0xd5,0x397,0xd5,0x3a2,0xd5,0x3c3,
-0xd5,0x3d3,0xd5,0x3e2,0xd5,0x3f0,0xd5,0x414,0xd5,0x42b,0xd5,0x443,0xd5,0x45a,0xd5,0x469,
-0xd5,0x478,0xd5,0x489,0xd5,0x497,0xd5,0x4a9,0xd5,0x4c3,0xd5,0x4de,0xd5,0x4f3,0xd5,0x510,
-0xd5,0x521,0xd5,0x52c,0xd5,0x54b,0xd5,0x561,0xd5,0x572,0xd5,0x582,0xd5,0x59d,0xd5,0x5b6,
-0xd5,0x5c7,0xd5,0x5e1,0xd5,0x5f4,0xd5,0x604,0xd5,0x61e,0xd5,0x637,0xd5,0x64e,0xd5,0x662,
-0xd5,0x678,0xd5,0x68c,0xd5,0x6a2,0xd5,0x6bc,0xd5,0x6d4,0xd5,0x6f0,0xd5,0x6f8,0xd5,0x700,
-0xd5,0x708,0xd5,0x710,0xd5,0x719,0xd5,0x726,0xd5,0x739,0xd5,0x756,0xd5,0x773,0xd5,0x790,
-0xd5,0x7ae,0xd5,0x7cc,0xd5,0x7f0,0xd5,0x7fd,0xd5,0x824,0xd5,0x843,0xd5,0x1000,0x1016,0x86c,
-0x14f,0xa8c,0x16a,0x2a61,0xdb,0x2a80,0x280,0x2bbe,0x296,0x2c18,0x2a0,0x2e75,0x2c2,0x35d7,0x31f,0x3647,
-0x329,0x38f8,0x358,0x3936,0x360,0x42e5,0x413,0x4363,0x41d,0x4388,0x423,0x43a2,0x429,0x43c3,0x430,0x43dd,
-0xdb,0x4402,0xdb,0x4428,0x437,0x44d2,0x44d,0x454b,0x460,0x45e8,0x47a,0x2000,0x2001,0x461f,0x481,0x3000,
-0x3001,0x46ab,0,0x4000,0x400e,0x46bd,0,0x46c6,0,0x46e0,0,0x46f1,0,0x4702,0,0x4718,
-0,0x4721,0,0x473e,0,0x475c,0,0x477a,0,0x4798,0,0x47ae,0,0x47c2,0,0x47d8,
-0,0x7000,0x7001,0x47f1,0,0x702,0x12,0,1,0x12,0x20,0x720,0x49,0,1,7,
-8,9,0xa,0xb,0xc,0xd,0xe,0xf,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
-0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x54,0x5b,0x67,
-0x6b,0x76,0x7a,0x81,0x82,0x84,0x85,0xc8,0xca,0xd6,0xd8,0xda,0xdc,0xde,0xe0,0xe2,
-0xe4,0xe6,0xe8,0xe9,0xea,0xf0,0x2e,0x40,0x4c,0x56,0x67,0x72,0x7f,0x8c,0x99,0xa6,
-0xb3,0xc0,0xcd,0xda,0xe7,0xf4,0x101,0x10e,0x11b,0x128,0x135,0x142,0x14f,0x15c,0x169,0x176,
-0x183,0x190,0x19d,0x1aa,0x1b7,0x1c4,0x1d1,0x1de,0x1eb,0x1fa,0x209,0x218,0x227,0x236,0x245,0x254,
-0x263,0x27d,0x291,0x2a5,0x2c0,0x2cf,0x2d8,0x2e8,0x2f0,0x2f9,0x308,0x311,0x321,0x332,0x343,0x8b2,
-1,0,0x17,0x87b,0x88c,0x89d,0x8b1,0x8c8,0x8e0,0x8f2,0x907,0x91e,0x933,0x943,0x955,0x972,
-0x98e,0x9a0,0x9bd,0x9d9,0x9f5,0xa0a,0xa1f,0xa39,0xa54,0xa6f,0xa54,1,0,0x112,0xa97,0xaa4,
-0xab7,0xadf,0xafd,0xb1b,0xb33,0xb5e,0xb88,0xba0,0xbb3,0xbc6,0xbd5,0xbe4,0xbf3,0xc02,0xc19,0xc2a,
-0xc3d,0xc50,0xc5d,0xc6a,0xc79,0xc8a,0xc9f,0xcb0,0xcbb,0xcc4,0xcd5,0xce6,0xcf9,0xd0b,0xd1e,0xd31,
-0xd70,0xd7d,0xd8a,0xd97,0xdac,0xddc,0xdf6,0xe17,0xe42,0xe65,0xec3,0xeea,0xf05,0xf14,0xf3b,0xf63,
-0xf86,0xfa9,0xfd3,0xfec,0x100b,0x102e,0x1052,0x1065,0x107f,0x10a9,0x10c1,0x10e9,0x1112,0x1125,0x1138,0x114b,
-0x1172,0x1181,0x11a1,0x11cf,0x11ed,0x121b,0x1237,0x1252,0x126b,0x1284,0x12a5,0x12d5,0x12f4,0x1316,0x134a,0x1377,
-0x13bc,0x13dd,0x1407,0x1428,0x1451,0x1464,0x1497,0x14ae,0x14bd,0x14ce,0x14f9,0x1510,0x1541,0x156f,0x15b2,0x15bd,
-0x15f6,0x1607,0x1618,0x1625,0x1638,0x1672,0x1696,0x16ba,0x16f4,0x172c,0x1757,0x176f,0x179b,0x17c7,0x17d4,0x17e3,
-0x1800,0x1822,0x1850,0x1870,0x1897,0x18be,0x18dd,0x18f0,0x1901,0x1912,0x1937,0x195c,0x1983,0x19b7,0x19e4,0x1a02,
-0x1a15,0x1a2e,0x1a67,0x1a76,0x1a96,0x1ab8,0x1ada,0x1af1,0x1b08,0x1b35,0x1b4e,0x1b67,0x1b98,0x1bc2,0x1bdd,0x1bf0,
-0x1c0f,0x1c18,0x1c2b,0x1c49,0x1c67,0x1c7a,0x1c91,0x1ca6,0x1cdb,0x1cff,0x1d14,0x1d23,0x1d36,0x1d5a,0x1d63,0x1d87,
-0x1d9e,0x1db1,0x1dc0,0x1dcb,0x1dec,0x1e04,0x1e13,0x1e22,0x1e31,0x1e48,0x1e5d,0x1e72,0x1eab,0x1ebe,0x1eda,0x1ee5,
-0x1ef2,0x1f20,0x1f44,0x1f67,0x1f7a,0x1f9c,0x1faf,0x1fca,0x1fed,0x2010,0x2035,0x2046,0x2075,0x20a2,0x20b9,0x20d4,
-0x20e3,0x210e,0x2146,0x2180,0x21ae,0x21bf,0x21cc,0x21f0,0x21ff,0x221b,0x2235,0x2252,0x228a,0x229f,0x22cc,0x22eb,
-0x2319,0x2339,0x236d,0x237c,0x23a6,0x23c9,0x23f4,0x23ff,0x2410,0x242b,0x244f,0x245c,0x2471,0x2498,0x24c3,0x24fa,
-0x250d,0x251e,0x254e,0x255f,0x256e,0x2583,0x25a1,0x25b4,0x25c7,0x25de,0x25fb,0x2606,0x260f,0x2631,0x2646,0x266b,
-0x2682,0x26ab,0x26c6,0x26db,0x26f4,0x2715,0x274a,0x275b,0x278c,0x27b0,0x27c1,0x27da,0x27e5,0x2812,0x2834,0x2862,
-0x2895,0x28a4,0x28b5,0x28d2,0x2914,0x293b,0x2948,0x295d,0x2981,0x29a7,0x29e0,0x29f1,0x2a15,0x2a20,0x2a2d,0x2a3c,
-0x1b91,1,0,0x12,0x2a97,0x2aa7,0x2aba,0x2aca,0x2ada,0x2ae9,0x2af9,0x2b0b,0x2b1e,0x2b30,0x2b40,0x2b50,
-0x2b5f,0x2b6e,0x2b7e,0x2b8b,0x2b9a,0x2bae,0x1c4f,1,0,6,0x2bd3,0x2bde,0x2beb,0x2bf8,0x2c05,0x2c10,
-0x1c93,1,0,0x1e,0x2c2d,0x2c3c,0x2c51,0x2c66,0x2c7b,0x2c8f,0x2ca0,0x2cb4,0x2cc7,0x2cd8,0x2cf1,0x2d03,
-0x2d14,0x2d28,0x2d3b,0x2d53,0x2d65,0x2d70,0x2d80,0x2d8e,0x2da3,0x2db8,0x2dce,0x2de8,0x2dfe,0x2e0e,0x2e22,0x2e36,
-0x2e47,0x2e5f,0x1ebe,1,0,0x59,0x2e87,0x2eaa,0x2eb3,0x2ec0,0x2ecb,0x2ed4,0x2edf,0x2ee8,0x2f01,0x2f06,
-0x2f0f,0x2f2c,0x2f35,0x2f42,0x2f4b,0x2f6f,0x2f76,0x2f7f,0x2f92,0x2f9d,0x2fa6,0x2fb1,0x2fca,0x2fd3,0x2fe2,0x2fed,
-0x2ff6,0x3001,0x300a,0x3011,0x301a,0x3025,0x302e,0x3047,0x3050,0x305d,0x3068,0x3079,0x3084,0x3099,0x30b0,0x30b9,
-0x30c2,0x30db,0x30e6,0x30ef,0x30f8,0x310f,0x312c,0x3137,0x3148,0x3153,0x315a,0x3167,0x3174,0x31a1,0x31b6,0x31bf,
-0x31da,0x31fd,0x321e,0x323f,0x3264,0x328b,0x32ac,0x32cf,0x32f0,0x3317,0x3338,0x335d,0x337c,0x339b,0x33ba,0x33d7,
-0x33f8,0x3419,0x343c,0x3461,0x3480,0x349f,0x34c0,0x34e7,0x350c,0x352b,0x354c,0x356f,0x358a,0x35a3,0x35be,0x2191,
-1,0,6,0x35e8,0x35f7,0x3607,0x3617,0x3627,0x3638,0x21ef,1,0,0x2b,0x3656,0x3662,0x3670,
-0x367f,0x368e,0x369e,0x36af,0x36c3,0x36d8,0x36ee,0x3701,0x3715,0x3725,0x372e,0x3739,0x3749,0x3765,0x3777,0x3785,
-0x3794,0x37a0,0x37b5,0x37c9,0x37dc,0x37ea,0x37fe,0x380c,0x3816,0x3828,0x3834,0x3842,0x3852,0x3859,0x3860,0x3867,
-0x386e,0x3875,0x388b,0x38ac,0x38be,0x38d5,0x38e0,0x38ef,0x2448,1,0,4,0x3909,0x3914,0x3920,0x392a,
-0x246e,1,0,0xaf,0x3941,0x394e,0x3963,0x3970,0x397f,0x398d,0x399c,0x39ab,0x39bd,0x39cc,0x39da,0x39eb,
-0x39fa,0x3a09,0x3a16,0x3a22,0x3a31,0x3a40,0x3a4a,0x3a57,0x3a64,0x3a73,0x3a81,0x3a90,0x3a9c,0x3aa6,0x3ab2,0x3ac2,
-0x3ad2,0x3ae0,0x3aec,0x3afd,0x3b09,0x3b15,0x3b23,0x3b30,0x3b3c,0x3b49,0xcb0,0x3b56,0x3b64,0x3b7e,0x3b87,0x3b95,
-0x3ba3,0x3baf,0x3bbe,0x3bcc,0x3bda,0x3be6,0x3bf5,0x3c03,0x3c11,0x3c1e,0x3c2d,0x3c48,0x3c57,0x3c68,0x3c79,0x3c8c,
-0x3c9e,0x3cad,0x3cbf,0x3cce,0x3cda,0x3ce5,0x1dc0,0x3cf2,0x3cfd,0x3d08,0x3d13,0x3d1e,0x3d39,0x3d44,0x3d4f,0x3d5a,
-0x3d6d,0x3d81,0x3d8c,0x3d9b,0x3daa,0x3db5,0x3dc0,0x3dcd,0x3ddc,0x3dea,0x3df5,0x3e10,0x3e1a,0x3e2b,0x3e3c,0x3e4b,
-0x3e5c,0x3e67,0x3e72,0x3e7d,0x3e88,0x3e93,0x3e9e,0x3ea9,0x3eb3,0x3ebe,0x3ece,0x3ed9,0x3ee7,0x3ef4,0x3eff,0x3f0e,
-0x3f1b,0x3f28,0x3f37,0x3f44,0x3f55,0x3f67,0x3f77,0x3f82,0x3f95,0x3fac,0x3fba,0x3fc7,0x3fd2,0x3fdf,0x3ff0,0x400c,
-0x4022,0x402d,0x404a,0x405a,0x4069,0x4074,0x407f,0x1eda,0x408b,0x4096,0x40ae,0x40be,0x40cd,0x40db,0x40e9,0x40f4,
-0x40ff,0x4113,0x412a,0x4142,0x4152,0x4162,0x4172,0x4184,0x418f,0x419a,0x41a4,0x41af,0x41bd,0x41d0,0x41dc,0x41e9,
-0x41f4,0x4210,0x421d,0x422b,0x4244,0x27da,0x4253,0x25fb,0x4260,0x426e,0x4280,0x428e,0x429a,0x42aa,0x2a15,0x42b8,
-0x42c4,0x42cf,0x42da,0x2d1f,1,0,6,0x42ff,0x4312,0x4322,0x4330,0x4341,0x4351,0x2d7b,0x12,0,
-1,0x437b,0x4381,0x2d88,0x12,0,1,0x437b,0x4381,0x2d95,1,0,3,0x437b,0x4381,0x43ba,
-0x2dab,1,0,3,0x437b,0x4381,0x43ba,0x2dc1,1,0,0x12,0x4444,0x444e,0x445a,0x4461,0x446c,
-0x4471,0x4478,0x447f,0x4488,0x448d,0x4492,0x44a2,0x38be,0x38d5,0x44ae,0x38e0,0x44be,0x38ef,0x2e6a,1,0,
-0xf,0x4444,0x44e5,0x44ef,0x44f9,0x4504,0x3794,0x450e,0x451a,0x4522,0x4529,0x4533,0x445a,0x4461,0x4471,0x453d,
-0x2ef1,1,0,0x16,0x4444,0x455a,0x44f9,0x4566,0x4573,0x4581,0x3794,0x458c,0x445a,0x459d,0x4471,0x45ac,
-0x45ba,0x38be,0x38ac,0x45c6,0x45d7,0x38d5,0x44ae,0x38e0,0x44be,0x38ef,0x3001,1,0,3,0x4606,0x460e,
-0x4616,0x301a,0x36,1,2,4,8,0xe,0x10,0x20,0x3e,0x40,0x80,0x100,0x1c0,0x200,
-0x400,0x800,0xe00,0x1000,0x2000,0x4000,0x7000,0x8000,0x10000,0x20000,0x40000,0x78001,0x80000,0x100000,0x200000,0x400000,
-0x800000,0x1000000,0x2000000,0x4000000,0x8000000,0xf000000,0x10000000,0x20000000,0x30f80000,0x2c2d,0x2c3c,0x2c51,0x2c66,0x464d,0x2c7b,0x2c8f,
-0x4643,0x2ca0,0x2cb4,0x2cc7,0x465e,0x2cd8,0x2cf1,0x2d03,0x4675,0x2d14,0x2d28,0x2d3b,0x469e,0x2d53,0x2d65,0x2d70,
-0x2d80,0x463a,0x2d8e,0x2da3,0x2db8,0x2dce,0x2de8,0x2dfe,0x2e0e,0x2e22,0x2e36,0x4694,0x2e47,0x2e5f,0x467f
+const int32_t PropNameData::valueMaps[1258]={
+6,0,0x40,0,0xdb,0x356,0xdb,0x36c,0xdb,0x381,0xdb,0x397,0xdb,0x3a2,0xdb,0x3c3,
+0xdb,0x3d3,0xdb,0x3e2,0xdb,0x3f0,0xdb,0x414,0xdb,0x42b,0xdb,0x443,0xdb,0x45a,0xdb,0x469,
+0xdb,0x478,0xdb,0x489,0xdb,0x497,0xdb,0x4a9,0xdb,0x4c3,0xdb,0x4de,0xdb,0x4f3,0xdb,0x510,
+0xdb,0x521,0xdb,0x52c,0xdb,0x54b,0xdb,0x561,0xdb,0x572,0xdb,0x582,0xdb,0x59d,0xdb,0x5b6,
+0xdb,0x5c7,0xdb,0x5e1,0xdb,0x5f4,0xdb,0x604,0xdb,0x61e,0xdb,0x637,0xdb,0x64e,0xdb,0x662,
+0xdb,0x678,0xdb,0x68c,0xdb,0x6a2,0xdb,0x6bc,0xdb,0x6d4,0xdb,0x6f0,0xdb,0x6f8,0xdb,0x700,
+0xdb,0x708,0xdb,0x710,0xdb,0x719,0xdb,0x726,0xdb,0x739,0xdb,0x756,0xdb,0x773,0xdb,0x790,
+0xdb,0x7ae,0xdb,0x7cc,0xdb,0x7f0,0xdb,0x7fd,0xdb,0x824,0xdb,0x843,0xdb,0x86c,0xdb,0x88d,
+0xdb,0x8a4,0xdb,0x1000,0x1016,0x8c6,0x155,0xae6,0x170,0x2b81,0xe1,0x2ba0,0x28d,0x2cde,0x2a3,0x2d38,
+0x2ad,0x2f95,0x2cf,0x3836,0x337,0x38a6,0x341,0x3b40,0x370,0x3b7e,0x378,0x4567,0x42e,0x45e5,0x438,0x460a,
+0x43e,0x4624,0x444,0x4645,0x44b,0x465f,0xe1,0x4684,0xe1,0x46aa,0x452,0x4754,0x468,0x47cd,0x47b,0x486a,
+0x495,0x2000,0x2001,0x48a1,0x49c,0x3000,0x3001,0x492d,0,0x4000,0x400e,0x493f,0,0x4948,0,0x4962,
+0,0x4973,0,0x4984,0,0x499a,0,0x49a3,0,0x49c0,0,0x49de,0,0x49fc,0,0x4a1a,
+0,0x4a30,0,0x4a44,0,0x4a5a,0,0x7000,0x7001,0x4a73,0,0x748,0x12,0,1,0x12,
+0x20,0x766,0x49,0,1,7,8,9,0xa,0xb,0xc,0xd,0xe,0xf,0x10,0x11,
+0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,
+0x22,0x23,0x24,0x54,0x5b,0x67,0x6b,0x76,0x7a,0x81,0x82,0x84,0x85,0xc8,0xca,0xd6,
+0xd8,0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,0xe9,0xea,0xf0,0x2e,0x40,0x4c,0x56,
+0x67,0x72,0x7f,0x8c,0x99,0xa6,0xb3,0xc0,0xcd,0xda,0xe7,0xf4,0x101,0x10e,0x11b,0x128,
+0x135,0x142,0x14f,0x15c,0x169,0x176,0x183,0x190,0x19d,0x1aa,0x1b7,0x1c4,0x1d1,0x1de,0x1eb,0x1fa,
+0x209,0x218,0x227,0x236,0x245,0x254,0x263,0x27d,0x291,0x2a5,0x2c0,0x2cf,0x2d8,0x2e8,0x2f0,0x2f9,
+0x308,0x311,0x321,0x332,0x343,0x8f8,1,0,0x17,0x8d5,0x8e6,0x8f7,0x90b,0x922,0x93a,0x94c,
+0x961,0x978,0x98d,0x99d,0x9af,0x9cc,0x9e8,0x9fa,0xa17,0xa33,0xa4f,0xa64,0xa79,0xa93,0xaae,0xac9,
+0xa9a,1,0,0x119,0xaf1,0xafe,0xb11,0xb39,0xb57,0xb75,0xb8d,0xbb8,0xbe2,0xbfa,0xc0d,0xc20,
+0xc2f,0xc3e,0xc4d,0xc5c,0xc73,0xc84,0xc97,0xcaa,0xcb7,0xcc4,0xcd3,0xce4,0xcf9,0xd0a,0xd15,0xd1e,
+0xd2f,0xd40,0xd53,0xd65,0xd78,0xd8b,0xdca,0xdd7,0xde4,0xdf1,0xe06,0xe36,0xe50,0xe71,0xe9c,0xebf,
+0xf1d,0xf44,0xf5f,0xf6e,0xf95,0xfbd,0xfe0,0x1003,0x102d,0x1046,0x1065,0x1088,0x10ac,0x10bf,0x10d9,0x1103,
+0x111b,0x1143,0x116c,0x117f,0x1192,0x11a5,0x11cc,0x11db,0x11fb,0x1229,0x1247,0x1275,0x1291,0x12ac,0x12c5,0x12de,
+0x12ff,0x132f,0x134e,0x1370,0x13a4,0x13d1,0x1416,0x1437,0x1461,0x1482,0x14ab,0x14be,0x14f1,0x1508,0x1517,0x1528,
+0x1553,0x156a,0x159b,0x15c9,0x160c,0x1617,0x1650,0x1661,0x1672,0x167f,0x1692,0x16cc,0x16f0,0x1714,0x174e,0x1786,
+0x17b1,0x17c9,0x17f5,0x1821,0x182e,0x183d,0x185a,0x187c,0x18aa,0x18ca,0x18f1,0x1918,0x1937,0x194a,0x195b,0x196c,
+0x1991,0x19b6,0x19dd,0x1a11,0x1a3e,0x1a5c,0x1a6f,0x1a88,0x1ac1,0x1ad0,0x1af0,0x1b12,0x1b34,0x1b4b,0x1b62,0x1b8f,
+0x1ba8,0x1bc1,0x1bf2,0x1c1c,0x1c37,0x1c4a,0x1c69,0x1c72,0x1c85,0x1ca3,0x1cc1,0x1cd4,0x1ceb,0x1d00,0x1d35,0x1d59,
+0x1d6e,0x1d7d,0x1d90,0x1db4,0x1dbd,0x1de1,0x1df8,0x1e0b,0x1e1a,0x1e25,0x1e46,0x1e5e,0x1e6d,0x1e7c,0x1e8b,0x1ea2,
+0x1eb7,0x1ecc,0x1f05,0x1f18,0x1f34,0x1f3f,0x1f4c,0x1f7a,0x1f9e,0x1fc1,0x1fd4,0x1ff6,0x2009,0x2024,0x2047,0x206a,
+0x208f,0x20a0,0x20cf,0x20fc,0x2113,0x212e,0x213d,0x2168,0x21a0,0x21da,0x2208,0x2219,0x2226,0x224a,0x2259,0x2275,
+0x228f,0x22ac,0x22e4,0x22f9,0x2326,0x2345,0x2373,0x2393,0x23c7,0x23d6,0x2400,0x2423,0x244e,0x2459,0x246a,0x2485,
+0x24a9,0x24b6,0x24cb,0x24f2,0x251d,0x2554,0x2567,0x2578,0x25a8,0x25b9,0x25c8,0x25dd,0x25fb,0x260e,0x2621,0x2638,
+0x2655,0x2660,0x2669,0x268b,0x26a0,0x26c5,0x26dc,0x2705,0x2720,0x2735,0x274e,0x276f,0x27a4,0x27b5,0x27e6,0x280a,
+0x281b,0x2834,0x283f,0x286c,0x288e,0x28bc,0x28ef,0x28fe,0x290f,0x292c,0x296e,0x2995,0x29a2,0x29b7,0x29db,0x2a01,
+0x2a3a,0x2a4b,0x2a6f,0x2a7a,0x2a87,0x2a96,0x2abb,0x2ae9,0x2b05,0x2b22,0x2b2f,0x2b40,0x2b5e,0x1c30,1,0,
+0x12,0x2bb7,0x2bc7,0x2bda,0x2bea,0x2bfa,0x2c09,0x2c19,0x2c2b,0x2c3e,0x2c50,0x2c60,0x2c70,0x2c7f,0x2c8e,0x2c9e,
+0x2cab,0x2cba,0x2cce,0x1cee,1,0,6,0x2cf3,0x2cfe,0x2d0b,0x2d18,0x2d25,0x2d30,0x1d32,1,0,
+0x1e,0x2d4d,0x2d5c,0x2d71,0x2d86,0x2d9b,0x2daf,0x2dc0,0x2dd4,0x2de7,0x2df8,0x2e11,0x2e23,0x2e34,0x2e48,0x2e5b,
+0x2e73,0x2e85,0x2e90,0x2ea0,0x2eae,0x2ec3,0x2ed8,0x2eee,0x2f08,0x2f1e,0x2f2e,0x2f42,0x2f56,0x2f67,0x2f7f,0x1f5d,
+1,0,0x64,0x2fa7,0x2fca,0x2fd3,0x2fe0,0x2feb,0x2ff4,0x2fff,0x3008,0x3021,0x3026,0x302f,0x304c,0x3055,
+0x3062,0x306b,0x308f,0x3096,0x309f,0x30b2,0x30bd,0x30c6,0x30d1,0x30ea,0x30f3,0x3102,0x310d,0x3116,0x3121,0x312a,
+0x3131,0x313a,0x3145,0x314e,0x3167,0x3170,0x317d,0x3188,0x3199,0x31a4,0x31b9,0x31d0,0x31d9,0x31e2,0x31fb,0x3206,
+0x320f,0x3218,0x322f,0x324c,0x3257,0x3268,0x3273,0x327a,0x3287,0x3294,0x32c1,0x32d6,0x32df,0x32fa,0x331d,0x333e,
+0x335f,0x3384,0x33ab,0x33cc,0x33ef,0x3410,0x3437,0x3458,0x347d,0x349c,0x34bb,0x34da,0x34f7,0x3518,0x3539,0x355c,
+0x3581,0x35a0,0x35bf,0x35e0,0x3607,0x362c,0x364b,0x366c,0x368f,0x36aa,0x36c3,0x36de,0x36f7,0x3714,0x372f,0x374c,
+0x376b,0x3788,0x37a5,0x37c4,0x37e1,0x37fc,0x3819,0x2283,1,0,6,0x3847,0x3856,0x3866,0x3876,0x3886,
+0x3897,0x22e1,1,0,0x2b,0x38b5,0x38c1,0x38cf,0x38de,0x38ed,0x38fd,0x390e,0x3922,0x3937,0x394d,0x3960,
+0x3974,0x3984,0x398d,0x3998,0x39a8,0x39c4,0x39d6,0x39e4,0x39f3,0x39ff,0x3a14,0x3a28,0x3a3b,0x3a49,0x3a5d,0x3a6b,
+0x3a75,0x3a87,0x3a93,0x3aa1,0x3ab1,0x3ab8,0x3abf,0x3ac6,0x3acd,0x3ad4,0x3aea,0x3b0b,0x88d,0x3b1d,0x3b28,0x3b37,
+0x253a,1,0,4,0x3b51,0x3b5c,0x3b68,0x3b72,0x2560,1,0,0xb2,0x3b89,0x3b96,0x3bab,0x3bb8,
+0x3bc7,0x3bd5,0x3be4,0x3bf3,0x3c05,0x3c14,0x3c22,0x3c33,0x3c42,0x3c51,0x3c5e,0x3c6a,0x3c79,0x3c88,0x3c92,0x3c9f,
+0x3cac,0x3cbb,0x3cc9,0x3cd8,0x3ce4,0x3cee,0x3cfa,0x3d0a,0x3d1a,0x3d28,0x3d34,0x3d45,0x3d51,0x3d5d,0x3d6b,0x3d78,
+0x3d84,0x3d91,0xd0a,0x3d9e,0x3dac,0x3dc6,0x3dcf,0x3ddd,0x3deb,0x3df7,0x3e06,0x3e14,0x3e22,0x3e2e,0x3e3d,0x3e4b,
+0x3e59,0x3e66,0x3e75,0x3e90,0x3e9f,0x3eb0,0x3ec1,0x3ed4,0x3ee6,0x3ef5,0x3f07,0x3f16,0x3f22,0x3f2d,0x1e1a,0x3f3a,
+0x3f45,0x3f50,0x3f5b,0x3f66,0x3f81,0x3f8c,0x3f97,0x3fa2,0x3fb5,0x3fc9,0x3fd4,0x3fe3,0x3ff2,0x3ffd,0x4008,0x4015,
+0x4024,0x4032,0x403d,0x4058,0x4062,0x4073,0x4084,0x4093,0x40a4,0x40af,0x40ba,0x40c5,0x40d0,0x40db,0x40e6,0x40f1,
+0x40fb,0x4106,0x4116,0x4121,0x412f,0x413c,0x4147,0x4156,0x4163,0x4170,0x417f,0x418c,0x419d,0x41af,0x41bf,0x41ca,
+0x41dd,0x41f4,0x4202,0x420f,0x421a,0x4227,0x4238,0x4254,0x426a,0x4275,0x4292,0x42a2,0x42b1,0x42bc,0x42c7,0x1f34,
+0x42d3,0x42de,0x42f6,0x4306,0x4315,0x4323,0x4331,0x433c,0x4347,0x435b,0x4372,0x438a,0x439a,0x43aa,0x43ba,0x43cc,
+0x43d7,0x43e2,0x43ec,0x43f8,0x4406,0x4419,0x4425,0x4432,0x443d,0x4459,0x4466,0x4474,0x448d,0x2834,0x449c,0x2655,
+0x44a9,0x44b7,0x44c9,0x44d7,0x44e3,0x44f3,0x2a6f,0x4501,0x450d,0x4518,0x4523,0x452e,0x4542,0x4550,0x2e57,1,
+0,6,0x4581,0x4594,0x45a4,0x45b2,0x45c3,0x45d3,0x2eb3,0x12,0,1,0x45fd,0x4603,0x2ec0,0x12,
+0,1,0x45fd,0x4603,0x2ecd,1,0,3,0x45fd,0x4603,0x463c,0x2ee3,1,0,3,0x45fd,
+0x4603,0x463c,0x2ef9,1,0,0x12,0x46c6,0x46d0,0x46dc,0x46e3,0x46ee,0x46f3,0x46fa,0x4701,0x470a,0x470f,
+0x4714,0x4724,0x88d,0x3b1d,0x4730,0x3b28,0x4740,0x3b37,0x2fa2,1,0,0xf,0x46c6,0x4767,0x4771,0x477b,
+0x4786,0x39f3,0x4790,0x479c,0x47a4,0x47ab,0x47b5,0x46dc,0x46e3,0x46f3,0x47bf,0x3029,1,0,0x16,0x46c6,
+0x47dc,0x477b,0x47e8,0x47f5,0x4803,0x39f3,0x480e,0x46dc,0x481f,0x46f3,0x482e,0x483c,0x88d,0x3b0b,0x4848,0x4859,
+0x3b1d,0x4730,0x3b28,0x4740,0x3b37,0x3139,1,0,3,0x4888,0x4890,0x4898,0x3152,0x36,1,2,
+4,8,0xe,0x10,0x20,0x3e,0x40,0x80,0x100,0x1c0,0x200,0x400,0x800,0xe00,0x1000,0x2000,
+0x4000,0x7000,0x8000,0x10000,0x20000,0x40000,0x78001,0x80000,0x100000,0x200000,0x400000,0x800000,0x1000000,0x2000000,0x4000000,0x8000000,
+0xf000000,0x10000000,0x20000000,0x30f80000,0x2d4d,0x2d5c,0x2d71,0x2d86,0x48cf,0x2d9b,0x2daf,0x48c5,0x2dc0,0x2dd4,0x2de7,0x48e0,
+0x2df8,0x2e11,0x2e23,0x48f7,0x2e34,0x2e48,0x2e5b,0x4920,0x2e73,0x2e85,0x2e90,0x2ea0,0x48bc,0x2eae,0x2ec3,0x2ed8,
+0x2eee,0x2f08,0x2f1e,0x2f2e,0x2f42,0x2f56,0x4916,0x2f67,0x2f7f,0x4901
 };
 
-const uint8_t PropNameData::bytesTries[13105]={
-0,0x15,0x6d,0xc3,0x23,0x73,0xc1,0xf7,0x76,0x5f,0x76,0x68,0x77,0x90,0x78,1,
+const uint8_t PropNameData::bytesTries[13417]={
+0,0x15,0x6d,0xc3,0x5d,0x73,0xc1,0xf7,0x76,0x5f,0x76,0x68,0x77,0x90,0x78,1,
 0x64,0x50,0x69,0x10,0x64,1,0x63,0x30,0x73,0x62,0x13,0x74,0x61,0x72,0x74,0x63,
 0x60,0x16,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x61,0x13,0x69,0x67,0x69,0x74,0x81,
 1,0x61,0x24,0x73,0x69,0x1e,0x72,0x69,0x61,0x74,0x69,0x6f,0x6e,0x73,0x65,0x6c,
@@ -128,625 +130,644 @@
 0xd8,0x40,0xa,0x11,0x63,0x63,0xc3,0x11,0x11,0x72,0x6d,0x58,0x1e,0x69,0x6e,0x61,
 0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x59,0x1d,0x74,0x6c,
 0x65,0x63,0x61,0x73,0x65,0x6d,0x61,0x70,0x70,0x69,0x6e,0x67,0xd9,0x40,0xa,0x6d,
-0x42,0x6e,0x48,0x70,0xa2,0xda,0x71,0xa4,9,0x72,0x15,0x61,0x64,0x69,0x63,0x61,
-0x6c,0x55,0x12,0x61,0x74,0x68,0x4f,6,0x6f,0x39,0x6f,0x32,0x74,0xc3,9,0x75,
-0x54,0x76,0xd9,0x30,0,0x12,0x6e,0x63,0x68,0x1f,0x61,0x72,0x61,0x63,0x74,0x65,
-0x72,0x63,0x6f,0x64,0x65,0x70,0x6f,0x69,0x6e,0x74,0x51,0x14,0x6d,0x65,0x72,0x69,
-0x63,1,0x74,0x32,0x76,0x13,0x61,0x6c,0x75,0x65,0xd9,0x30,0,0x12,0x79,0x70,
-0x65,0xc3,9,0x61,0xa2,0x77,0x63,0xa2,0x82,0x66,2,0x63,0x98,0x64,0xa2,0x53,
-0x6b,1,0x63,0x56,0x64,1,0x69,0x42,0x71,1,0x63,0xc3,0xd,0x75,0x17,0x69,
-0x63,0x6b,0x63,0x68,0x65,0x63,0x6b,0xc3,0xd,0x13,0x6e,0x65,0x72,0x74,0x6d,1,
-0x69,0x42,0x71,1,0x63,0xc3,0xf,0x75,0x17,0x69,0x63,0x6b,0x63,0x68,0x65,0x63,
-0x6b,0xc3,0xf,0x13,0x6e,0x65,0x72,0x74,0x71,1,0x69,0x42,0x71,1,0x63,0xc3,
-0xe,0x75,0x17,0x69,0x63,0x6b,0x63,0x68,0x65,0x63,0x6b,0xc3,0xe,0x13,0x6e,0x65,
-0x72,0x74,0x6f,1,0x69,0x42,0x71,1,0x63,0xc3,0xc,0x75,0x17,0x69,0x63,0x6b,
-0x63,0x68,0x65,0x63,0x6b,0xc3,0xc,0x13,0x6e,0x65,0x72,0x74,0x6b,0xd8,0x40,5,
-1,0x31,0xd9,0x40,0xb,0x6d,0x10,0x65,0xd9,0x40,5,0x12,0x68,0x61,0x72,0x51,
-1,0x61,0x2c,0x72,0x12,0x69,0x6e,0x74,0x7f,0x10,0x74,2,0x73,0x2c,0x74,0x30,
-0x77,0x10,0x73,0x77,0x11,0x79,0x6e,0x75,0x12,0x65,0x72,0x6e,1,0x73,0x38,0x77,
-0x18,0x68,0x69,0x74,0x65,0x73,0x70,0x61,0x63,0x65,0x77,0x14,0x79,0x6e,0x74,0x61,
-0x78,0x75,1,0x6d,0x3c,0x75,0x1a,0x6f,0x74,0x61,0x74,0x69,0x6f,0x6e,0x6d,0x61,
-0x72,0x6b,0x53,0x12,0x61,0x72,0x6b,0x53,0x66,0xc1,0xb9,0x69,0xc0,0xfd,0x69,0xa2,
-0x6f,0x6a,0xa2,0xca,0x6c,4,0x62,0xc3,8,0x63,0x8c,0x65,0x98,0x69,0xa2,0x56,
-0x6f,2,0x65,0x4b,0x67,0x4c,0x77,0x11,0x65,0x72,0x4c,0x13,0x63,0x61,0x73,0x65,
-0x4c,0x16,0x6d,0x61,0x70,0x70,0x69,0x6e,0x67,0xd9,0x40,4,0x11,0x69,0x63,0x1f,
-0x61,0x6c,0x6f,0x72,0x64,0x65,0x72,0x65,0x78,0x63,0x65,0x70,0x74,0x69,0x6f,0x6e,
-0x4b,0xd8,0x40,4,0x11,0x63,0x63,0xc3,0x10,0x18,0x61,0x64,0x63,0x61,0x6e,0x6f,
-0x6e,0x69,0x63,0x1f,0x61,0x6c,0x63,0x6f,0x6d,0x62,0x69,0x6e,0x69,0x6e,0x67,0x63,
-0x6c,0x61,0x73,0x73,0xc3,0x10,0x16,0x6e,0x65,0x62,0x72,0x65,0x61,0x6b,0xc3,8,
-1,0x64,0x44,0x73,1,0x63,0xd9,0x40,3,0x6f,0x16,0x63,0x6f,0x6d,0x6d,0x65,
-0x6e,0x74,0xd9,0x40,3,2,0x63,0x80,0x65,0x90,0x73,0x40,1,0x62,0x52,0x74,
-0x46,1,0x61,0x40,0x72,0x1c,0x69,0x6e,0x61,0x72,0x79,0x6f,0x70,0x65,0x72,0x61,
-0x74,0x6f,0x72,0x47,0x11,0x72,0x74,0x41,0x44,0x1c,0x69,0x6e,0x61,0x72,0x79,0x6f,
-0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x45,0x3e,0x16,0x6f,0x6e,0x74,0x69,0x6e,0x75,
-0x65,0x3f,0x10,0x6f,0x42,0x16,0x67,0x72,0x61,0x70,0x68,0x69,0x63,0x43,2,0x67,
-0xc3,6,0x6f,0x26,0x74,0xc3,7,0x11,0x69,0x6e,1,0x63,0x4a,0x69,0x11,0x6e,
-0x67,1,0x67,0x2e,0x74,0x12,0x79,0x70,0x65,0xc3,7,0x13,0x72,0x6f,0x75,0x70,
-0xc3,6,0x48,0x15,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x49,0x66,0x86,0x67,0xa2,0x4a,
-0x68,3,0x61,0x36,0x65,0x58,0x73,0x68,0x79,0x13,0x70,0x68,0x65,0x6e,0x3d,0x1f,
-0x6e,0x67,0x75,0x6c,0x73,0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65,0x74,0x79,0x70,0x65,
-0xc3,0xb,0x10,0x78,0x3a,0x14,0x64,0x69,0x67,0x69,0x74,0x3b,0x10,0x74,0xc3,0xb,
-0x16,0x75,0x6c,0x6c,0x63,0x6f,0x6d,0x70,0x1f,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,
-0x65,0x78,0x63,0x6c,0x75,0x73,0x69,0x6f,0x6e,0x33,2,0x63,0xa2,0x44,0x65,0xa2,
-0x4b,0x72,3,0x61,0x34,0x62,0x84,0x65,0x8a,0x6c,0x12,0x69,0x6e,0x6b,0x39,0x11,
-0x70,0x68,0x7c,0x12,0x65,0x6d,0x65,3,0x62,0x5e,0x63,0x30,0x65,0x48,0x6c,0x12,
-0x69,0x6e,0x6b,0x39,0x1a,0x6c,0x75,0x73,0x74,0x65,0x72,0x62,0x72,0x65,0x61,0x6b,
-0xc3,0x12,0x14,0x78,0x74,0x65,0x6e,0x64,0x37,0x12,0x61,0x73,0x65,0x35,0x11,0x78,
-0x74,0x37,0xc2,5,1,0x62,0xc3,0x12,0x6d,0xd9,0x20,0,0x1c,0x6e,0x65,0x72,
-0x61,0x6c,0x63,0x61,0x74,0x65,0x67,0x6f,0x72,0x79,0xc2,5,0x13,0x6d,0x61,0x73,
-0x6b,0xd9,0x20,0,0x61,0xa2,0x50,0x62,0xa2,0x7e,0x63,0xa2,0xf0,0x64,0xa4,0xbd,
-0x65,2,0x61,0x3a,0x6d,0x58,0x78,0x10,0x74,0x30,0x14,0x65,0x6e,0x64,0x65,0x72,
-0x31,0xc2,4,0x1b,0x73,0x74,0x61,0x73,0x69,0x61,0x6e,0x77,0x69,0x64,0x74,0x68,
-0xc3,4,0x12,0x6f,0x6a,0x69,0x92,1,0x6d,0x3c,0x70,0x1a,0x72,0x65,0x73,0x65,
-0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x95,0x16,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,
-0x96,0x13,0x62,0x61,0x73,0x65,0x99,3,0x67,0x44,0x68,0x4a,0x6c,0x4e,0x73,0x1a,
-0x63,0x69,0x69,0x68,0x65,0x78,0x64,0x69,0x67,0x69,0x74,0x23,0x10,0x65,0xd9,0x40,
-0,0x11,0x65,0x78,0x23,1,0x6e,0x38,0x70,0x11,0x68,0x61,0x20,0x14,0x62,0x65,
-0x74,0x69,0x63,0x21,0x11,0x75,0x6d,0x79,4,0x63,0xc3,0,0x69,0x3e,0x6c,0xa2,
-0x57,0x6d,0xa2,0x64,0x70,1,0x62,0xd9,0x40,0xd,0x74,0xc3,0x15,0x11,0x64,0x69,
-2,0x63,0x54,0x6d,0x74,0x70,0x1b,0x61,0x69,0x72,0x65,0x64,0x62,0x72,0x61,0x63,
-0x6b,0x65,0x74,0xd8,0x40,0xd,0x13,0x74,0x79,0x70,0x65,0xc3,0x15,0x24,1,0x6c,
-0x30,0x6f,0x14,0x6e,0x74,0x72,0x6f,0x6c,0x25,0x12,0x61,0x73,0x73,0xc3,0,0x26,
-0x14,0x69,0x72,0x72,0x6f,0x72,1,0x65,0x38,0x69,0x16,0x6e,0x67,0x67,0x6c,0x79,
-0x70,0x68,0xd9,0x40,1,0x10,0x64,0x27,2,0x61,0x32,0x6b,0xc3,1,0x6f,0x11,
-0x63,0x6b,0xc3,1,0x11,0x6e,0x6b,0x7b,0x10,0x67,0xd9,0x40,1,6,0x68,0x7c,
-0x68,0x54,0x69,0x85,0x6f,0xa2,0x6f,0x77,4,0x63,0x30,0x6b,0x36,0x6c,0x87,0x74,
-0x8b,0x75,0x89,1,0x66,0x8d,0x6d,0x8f,0x11,0x63,0x66,0x91,0x18,0x61,0x6e,0x67,
-0x65,0x73,0x77,0x68,0x65,0x6e,4,0x63,0x44,0x6c,0x6c,0x6e,0x7e,0x74,0x98,0x75,
-0x18,0x70,0x70,0x65,0x72,0x63,0x61,0x73,0x65,0x64,0x89,0x12,0x61,0x73,0x65,1,
-0x66,0x30,0x6d,0x14,0x61,0x70,0x70,0x65,0x64,0x8f,0x14,0x6f,0x6c,0x64,0x65,0x64,
-0x8d,0x18,0x6f,0x77,0x65,0x72,0x63,0x61,0x73,0x65,0x64,0x87,0x1c,0x66,0x6b,0x63,
-0x63,0x61,0x73,0x65,0x66,0x6f,0x6c,0x64,0x65,0x64,0x91,0x18,0x69,0x74,0x6c,0x65,
-0x63,0x61,0x73,0x65,0x64,0x8b,0x13,0x6d,0x70,0x65,0x78,0x33,0x61,0x2e,0x63,0xa2,
-0x48,0x66,0xd9,0x40,2,1,0x6e,0x72,0x73,0x10,0x65,3,0x64,0x83,0x66,0x3a,
-0x69,0x4a,0x73,0x17,0x65,0x6e,0x73,0x69,0x74,0x69,0x76,0x65,0x65,0x15,0x6f,0x6c,
-0x64,0x69,0x6e,0x67,0xd9,0x40,2,0x17,0x67,0x6e,0x6f,0x72,0x61,0x62,0x6c,0x65,
-0x85,0x13,0x6f,0x6e,0x69,0x63,0x1f,0x61,0x6c,0x63,0x6f,0x6d,0x62,0x69,0x6e,0x69,
-0x6e,0x67,0x63,0x6c,0x61,0x73,0x73,0xc3,2,0x10,0x63,0xc3,2,3,0x61,0x30,
-0x65,0x34,0x69,0xa2,0x41,0x74,0xc3,3,0x11,0x73,0x68,0x29,2,0x63,0x3a,0x66,
-0x58,0x70,0x2c,0x16,0x72,0x65,0x63,0x61,0x74,0x65,0x64,0x2d,0x1d,0x6f,0x6d,0x70,
-0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x74,0x79,0x70,0x65,0xc3,3,0x15,0x61,0x75,
-0x6c,0x74,0x69,0x67,0x1f,0x6e,0x6f,0x72,0x61,0x62,0x6c,0x65,0x63,0x6f,0x64,0x65,
-0x70,0x6f,0x69,0x6e,0x74,0x2b,0x2a,0x10,0x61,0x2e,0x15,0x63,0x72,0x69,0x74,0x69,
-0x63,0x2f,3,0x66,0x34,0x6e,0x3e,0x74,0x42,0x79,0x22,0x11,0x65,0x73,0x23,0x20,
-0x13,0x61,0x6c,0x73,0x65,0x21,0x20,0x10,0x6f,0x21,0x22,0x12,0x72,0x75,0x65,0x23,
-0xa,0x6b,0x5b,0x6f,0x23,0x6f,0x3c,0x72,0x4c,0x76,1,0x69,0x24,0x72,0x33,0x13,
-0x72,0x61,0x6d,0x61,0x33,0x10,0x76,0x22,0x14,0x65,0x72,0x6c,0x61,0x79,0x23,0xa2,
-0xe2,0x13,0x69,0x67,0x68,0x74,0xa3,0xe2,0x6b,0x58,0x6c,0x74,0x6e,3,0x6b,0x2f,
-0x6f,0x30,0x72,0x21,0x75,0x12,0x6b,0x74,0x61,0x2f,0x19,0x74,0x72,0x65,0x6f,0x72,
-0x64,0x65,0x72,0x65,0x64,0x21,1,0x61,0x24,0x76,0x31,0x18,0x6e,0x61,0x76,0x6f,
-0x69,0x63,0x69,0x6e,0x67,0x31,0xa2,0xe0,0x12,0x65,0x66,0x74,0xa3,0xe0,0x61,0x5c,
-0x62,0xa2,0x77,0x63,0xa2,0x96,0x64,0xa4,0xa,0x69,1,0x6f,0x26,0x73,0xa3,0xf0,
-0x1a,0x74,0x61,0x73,0x75,0x62,0x73,0x63,0x72,0x69,0x70,0x74,0xa3,0xf0,0xa2,0xe6,
-3,0x62,0xa0,0x6c,0xa3,0xe4,0x72,0xa3,0xe8,0x74,2,0x61,0x74,0x62,0x7c,0x74,
-0x14,0x61,0x63,0x68,0x65,0x64,1,0x61,0x3e,0x62,0x13,0x65,0x6c,0x6f,0x77,0xa2,
-0xca,0x13,0x6c,0x65,0x66,0x74,0xa3,0xc8,0x13,0x62,0x6f,0x76,0x65,0xa2,0xd6,0x14,
-0x72,0x69,0x67,0x68,0x74,0xa3,0xd8,0xa2,0xd6,0x10,0x72,0xa3,0xd8,0xa2,0xca,0x10,
-0x6c,0xa3,0xc8,0x12,0x6f,0x76,0x65,0xa2,0xe6,1,0x6c,0x30,0x72,0x13,0x69,0x67,
-0x68,0x74,0xa3,0xe8,0x12,0x65,0x66,0x74,0xa3,0xe4,0xa2,0xdc,2,0x65,0x2c,0x6c,
-0xa3,0xda,0x72,0xa3,0xde,0x12,0x6c,0x6f,0x77,0xa2,0xdc,1,0x6c,0x30,0x72,0x13,
-0x69,0x67,0x68,0x74,0xa3,0xde,0x12,0x65,0x66,0x74,0xa3,0xda,0x11,0x63,0x63,4,
-0x31,0x3c,0x32,0xa2,0x42,0x33,0xa2,0x56,0x38,0xa2,0x64,0x39,0x10,0x31,0xa3,0x5b,
-9,0x35,0xa,0x35,0x3f,0x36,0x41,0x37,0x43,0x38,0x45,0x39,0x47,0x30,0x30,0x31,
-0x3c,0x32,0x42,0x33,0x4e,0x34,0x3d,0x34,1,0x33,0xa3,0x67,0x37,0xa3,0x6b,0x36,
-0x10,0x38,0xa3,0x76,0x38,1,0x32,0xa3,0x7a,0x39,0xa3,0x81,0x3a,2,0x30,0xa3,
-0x82,0x32,0xa3,0x84,0x33,0xa3,0x85,9,0x35,0xa,0x35,0x53,0x36,0x55,0x37,0x57,
-0x38,0x59,0x39,0x5b,0x30,0x49,0x31,0x4b,0x32,0x4d,0x33,0x4f,0x34,0x51,6,0x33,
-8,0x33,0x63,0x34,0x65,0x35,0x67,0x36,0x69,0x30,0x5d,0x31,0x5f,0x32,0x61,0x10,
-0x34,0xa3,0x54,2,0x61,0xa3,0xea,0x62,0xa3,0xe9,0x6f,0x13,0x75,0x62,0x6c,0x65,
-1,0x61,0x30,0x62,0x13,0x65,0x6c,0x6f,0x77,0xa3,0xe9,0x13,0x62,0x6f,0x76,0x65,
-0xa3,0xea,0xb,0x6e,0xc0,0xca,0x72,0x5f,0x72,0x46,0x73,0xa2,0x48,0x77,1,0x68,
-0x24,0x73,0x33,0x17,0x69,0x74,0x65,0x73,0x70,0x61,0x63,0x65,0x33,0x22,1,0x69,
-0x30,0x6c,2,0x65,0x3d,0x69,0x4b,0x6f,0x3f,0x18,0x67,0x68,0x74,0x74,0x6f,0x6c,
-0x65,0x66,0x74,0x22,2,0x65,0x38,0x69,0x48,0x6f,0x16,0x76,0x65,0x72,0x72,0x69,
-0x64,0x65,0x3f,0x17,0x6d,0x62,0x65,0x64,0x64,0x69,0x6e,0x67,0x3d,0x15,0x73,0x6f,
-0x6c,0x61,0x74,0x65,0x4b,0x30,0x1e,0x65,0x67,0x6d,0x65,0x6e,0x74,0x73,0x65,0x70,
-0x61,0x72,0x61,0x74,0x6f,0x72,0x31,0x6e,0xa2,0x41,0x6f,0xa2,0x53,0x70,2,0x61,
-0x66,0x64,0x86,0x6f,0x1b,0x70,0x64,0x69,0x72,0x65,0x63,0x74,0x69,0x6f,0x6e,0x61,
-0x6c,1,0x66,0x32,0x69,0x15,0x73,0x6f,0x6c,0x61,0x74,0x65,0x4d,0x14,0x6f,0x72,
-0x6d,0x61,0x74,0x41,0x1f,0x72,0x61,0x67,0x72,0x61,0x70,0x68,0x73,0x65,0x70,0x61,
-0x72,0x61,0x74,0x6f,0x72,0x2f,1,0x66,0x41,0x69,0x4d,1,0x6f,0x28,0x73,0x10,
-0x6d,0x43,0x1b,0x6e,0x73,0x70,0x61,0x63,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0x43,
-1,0x6e,0x35,0x74,0x19,0x68,0x65,0x72,0x6e,0x65,0x75,0x74,0x72,0x61,0x6c,0x35,
-0x65,0x88,0x65,0x98,0x66,0xa2,0x6a,0x6c,0x20,1,0x65,0x30,0x72,2,0x65,0x37,
-0x69,0x49,0x6f,0x39,0x18,0x66,0x74,0x74,0x6f,0x72,0x69,0x67,0x68,0x74,0x20,2,
-0x65,0x38,0x69,0x48,0x6f,0x16,0x76,0x65,0x72,0x72,0x69,0x64,0x65,0x39,0x17,0x6d,
-0x62,0x65,0x64,0x64,0x69,0x6e,0x67,0x37,0x15,0x73,0x6f,0x6c,0x61,0x74,0x65,0x49,
-3,0x6e,0x25,0x73,0x27,0x74,0x29,0x75,0x15,0x72,0x6f,0x70,0x65,0x61,0x6e,2,
-0x6e,0x3c,0x73,0x46,0x74,0x18,0x65,0x72,0x6d,0x69,0x6e,0x61,0x74,0x6f,0x72,0x29,
-0x14,0x75,0x6d,0x62,0x65,0x72,0x25,0x17,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,
-0x27,1,0x69,0x28,0x73,0x10,0x69,0x47,0x1f,0x72,0x73,0x74,0x73,0x74,0x72,0x6f,
-0x6e,0x67,0x69,0x73,0x6f,0x6c,0x61,0x74,0x65,0x47,0x61,0x4e,0x62,0x84,0x63,1,
-0x6f,0x24,0x73,0x2d,0x1c,0x6d,0x6d,0x6f,0x6e,0x73,0x65,0x70,0x61,0x72,0x61,0x74,
-0x6f,0x72,0x2d,2,0x6c,0x3b,0x6e,0x2b,0x72,0x13,0x61,0x62,0x69,0x63,1,0x6c,
-0x30,0x6e,0x14,0x75,0x6d,0x62,0x65,0x72,0x2b,0x14,0x65,0x74,0x74,0x65,0x72,0x3b,
-0x2e,1,0x6e,0x45,0x6f,0x1c,0x75,0x6e,0x64,0x61,0x72,0x79,0x6e,0x65,0x75,0x74,
-0x72,0x61,0x6c,0x45,0,0x15,0x6d,0xc7,0x81,0x73,0xc3,0x8b,0x76,0x9c,0x76,0x92,
-0x77,0xa2,0x8b,0x79,0x10,0x69,2,0x6a,0x3c,0x72,0x68,0x73,0x17,0x79,0x6c,0x6c,
-0x61,0x62,0x6c,0x65,0x73,0xa3,0x48,0x12,0x69,0x6e,0x67,0xa2,0x74,0x1e,0x68,0x65,
-0x78,0x61,0x67,0x72,0x61,0x6d,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x74,0x16,
-0x61,0x64,0x69,0x63,0x61,0x6c,0x73,0xa3,0x49,2,0x61,0x36,0x65,0x7a,0x73,0xa2,
-0x6c,0x12,0x73,0x75,0x70,0xa3,0x7d,1,0x69,0xa3,0x9f,0x72,0x1e,0x69,0x61,0x74,
-0x69,0x6f,0x6e,0x73,0x65,0x6c,0x65,0x63,0x74,0x6f,0x72,0x73,0xa2,0x6c,0x19,0x73,
-0x75,0x70,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x7d,1,0x64,0x3c,0x72,0x19,
-0x74,0x69,0x63,0x61,0x6c,0x66,0x6f,0x72,0x6d,0x73,0xa3,0x91,0x14,0x69,0x63,0x65,
-0x78,0x74,0xa2,0xaf,0x16,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x73,0xa3,0xaf,0x18,0x61,
-0x72,0x61,0x6e,0x67,0x63,0x69,0x74,0x69,0xa3,0xfc,0x73,0xa2,0x4b,0x74,0xa6,0x2b,
-0x75,2,0x63,0x82,0x67,0x92,0x6e,0x1f,0x69,0x66,0x69,0x65,0x64,0x63,0x61,0x6e,
-0x61,0x64,0x69,0x61,0x6e,0x61,0x62,0x6f,0x1f,0x72,0x69,0x67,0x69,0x6e,0x61,0x6c,
-0x73,0x79,0x6c,0x6c,0x61,0x62,0x69,0x63,0x73,0x62,0x17,0x65,0x78,0x74,0x65,0x6e,
-0x64,0x65,0x64,0xa3,0xad,0x11,0x61,0x73,0x62,0x12,0x65,0x78,0x74,0xa3,0xad,0x15,
-0x61,0x72,0x69,0x74,0x69,0x63,0xa3,0x78,7,0x6f,0xc1,0x5b,0x6f,0x54,0x70,0x68,
-0x75,0xa2,0x43,0x79,1,0x6c,0x2c,0x72,0x12,0x69,0x61,0x63,0x3b,0x17,0x6f,0x74,
-0x69,0x6e,0x61,0x67,0x72,0x69,0xa3,0x8f,0x18,0x72,0x61,0x73,0x6f,0x6d,0x70,0x65,
-0x6e,0x67,0xa3,0xda,1,0x61,0x32,0x65,0x14,0x63,0x69,0x61,0x6c,0x73,0xa3,0x56,
-0x12,0x63,0x69,0x6e,0x1f,0x67,0x6d,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,0x6c,0x65,
-0x74,0x74,0x65,0x72,0x73,0x2d,2,0x6e,0x48,0x70,0x76,0x74,0x1d,0x74,0x6f,0x6e,
-0x73,0x69,0x67,0x6e,0x77,0x72,0x69,0x74,0x69,0x6e,0x67,0xa5,6,0x15,0x64,0x61,
-0x6e,0x65,0x73,0x65,0xa2,0x9b,0x12,0x73,0x75,0x70,0xa2,0xdb,0x16,0x70,0x6c,0x65,
-0x6d,0x65,0x6e,0x74,0xa3,0xdb,4,0x61,0xa2,0xa8,0x65,0x5c,0x6d,0x9e,0x70,0xa2,
-0x4b,0x73,0x13,0x79,0x6d,0x62,0x6f,0x1f,0x6c,0x73,0x61,0x6e,0x64,0x70,0x69,0x63,
-0x74,0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0xa5,5,0x10,0x72,1,0x61,0x4e,0x73,
-0x12,0x63,0x72,0x69,0x1f,0x70,0x74,0x73,0x61,0x6e,0x64,0x73,0x75,0x62,0x73,0x63,
-0x72,0x69,0x70,0x74,0x73,0x73,0x14,0x6e,0x64,0x73,0x75,0x62,0x73,0x1b,0x61,0x74,
-0x68,0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x73,0xa3,0x6a,1,0x6c,0x40,0x75,
-1,0x61,0x6e,0x6e,0x17,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xa3,0x8e,0x15,
-0x65,0x6d,0x65,0x6e,0x74,0x61,1,0x6c,0x50,0x72,0x1e,0x79,0x70,0x72,0x69,0x76,
-0x61,0x74,0x65,0x75,0x73,0x65,0x61,0x72,0x65,0x61,1,0x61,0xa3,0x6d,0x62,0xa3,
-0x6e,3,0x61,0x5c,0x6d,0x78,0x70,0xa2,0x41,0x73,0x13,0x79,0x6d,0x62,0x6f,0x1f,
-0x6c,0x73,0x61,0x6e,0x64,0x70,0x69,0x63,0x74,0x6f,0x67,0x72,0x61,0x70,0x68,0x73,
-0xa5,5,0x14,0x72,0x72,0x6f,0x77,0x73,2,0x61,0xa3,0x67,0x62,0xa3,0x68,0x63,
-0xa3,0xfa,0x13,0x61,0x74,0x68,0x65,0x1f,0x6d,0x61,0x74,0x69,0x63,0x61,0x6c,0x6f,
-0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x73,0xa3,0x6a,0x19,0x75,0x6e,0x63,0x74,0x75,
-0x61,0x74,0x69,0x6f,0x6e,0xa3,0x8e,0x61,0x5a,0x68,0x84,0x69,0xa2,0x5b,0x6d,0x16,
-0x61,0x6c,0x6c,0x66,0x6f,0x72,0x6d,1,0x73,0xa3,0x54,0x76,0x16,0x61,0x72,0x69,
-0x61,0x6e,0x74,0x73,0xa3,0x54,1,0x6d,0x36,0x75,0x16,0x72,0x61,0x73,0x68,0x74,
-0x72,0x61,0xa3,0xa1,0x15,0x61,0x72,0x69,0x74,0x61,0x6e,0xa3,0xac,1,0x61,0x52,
-0x6f,0x13,0x72,0x74,0x68,0x61,0x1f,0x6e,0x64,0x66,0x6f,0x72,0x6d,0x61,0x74,0x63,
-0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x73,0xa3,0xf7,1,0x72,0x2e,0x76,0x12,0x69,0x61,
-0x6e,0xa3,0x79,0x12,0x61,0x64,0x61,0xa3,0xd9,1,0x64,0x50,0x6e,0x13,0x68,0x61,
-0x6c,0x61,0x50,0x1d,0x61,0x72,0x63,0x68,0x61,0x69,0x63,0x6e,0x75,0x6d,0x62,0x65,
-0x72,0x73,0xa3,0xf9,0x13,0x64,0x68,0x61,0x6d,0xa3,0xf8,4,0x61,0x68,0x65,0xa2,
-0x8a,0x68,0xa2,0x8d,0x69,0xa2,0x95,0x72,0x1c,0x61,0x6e,0x73,0x70,0x6f,0x72,0x74,
-0x61,0x6e,0x64,0x6d,0x61,0x70,0xa2,0xcf,0x16,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,
-0xa3,0xcf,4,0x67,0x58,0x69,0x7e,0x6b,0xa2,0x58,0x6d,0xa2,0x5a,0x6e,0x12,0x67,
-0x75,0x74,0xa4,0x10,0x19,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x73,0xa5,
-0x11,2,0x61,0x2a,0x62,0x32,0x73,0xa3,0x60,0x12,0x6c,0x6f,0x67,0xa3,0x62,0x13,
-0x61,0x6e,0x77,0x61,0xa3,0x65,3,0x6c,0x52,0x74,0x56,0x76,0x5e,0x78,0x16,0x75,
-0x61,0x6e,0x6a,0x69,0x6e,0x67,0xa2,0x7c,0x16,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,
-0xa3,0x7c,0x10,0x65,0xa3,0x70,0x12,0x68,0x61,0x6d,0xa3,0xae,0x12,0x69,0x65,0x74,
-0xa3,0xb7,0x11,0x72,0x69,0xa3,0xdc,0x11,0x69,0x6c,0x49,0x13,0x6c,0x75,0x67,0x75,
-0x4b,0x10,0x61,1,0x61,0x24,0x69,0x53,0x11,0x6e,0x61,0x3d,2,0x62,0x34,0x66,
-0x3c,0x72,0x13,0x68,0x75,0x74,0x61,0xa3,0xfb,0x13,0x65,0x74,0x61,0x6e,0x57,0x14,
-0x69,0x6e,0x61,0x67,0x68,0xa3,0x90,0x6d,0x84,0x6e,0xa6,0x34,0x6f,0xa6,0x6d,0x70,
-0xa8,0x29,0x72,1,0x65,0x5c,0x75,1,0x6d,0x2a,0x6e,0x11,0x69,0x63,0x67,0x10,
-0x69,0xa2,0xc0,0x1d,0x6e,0x75,0x6d,0x65,0x72,0x61,0x6c,0x73,0x79,0x6d,0x62,0x6f,
-0x6c,0x73,0xa3,0xc0,0x13,0x6a,0x61,0x6e,0x67,0xa3,0xa3,6,0x6f,0x86,0x6f,0x6c,
-0x72,0xa2,0x61,0x75,0xa2,0x62,0x79,0x14,0x61,0x6e,0x6d,0x61,0x72,0x58,0x12,0x65,
-0x78,0x74,2,0x61,0xa3,0xb6,0x62,0xa3,0xee,0x65,0x13,0x6e,0x64,0x65,0x64,1,
-0x61,0xa3,0xb6,0x62,0xa3,0xee,1,0x64,0x52,0x6e,0x15,0x67,0x6f,0x6c,0x69,0x61,
-0x6e,0x6a,0x12,0x73,0x75,0x70,0xa4,0xd,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,
-0xa5,0xd,0x10,0x69,0xa2,0xec,0x13,0x66,0x69,0x65,0x72,1,0x6c,0x3c,0x74,0x19,
-0x6f,0x6e,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x73,0xa3,0x8a,0x15,0x65,0x74,0x74,
-0x65,0x72,0x73,0x2d,0x10,0x6f,0xa3,0xed,1,0x6c,0x44,0x73,0x11,0x69,0x63,0xa2,
-0x5c,0x18,0x61,0x6c,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x5c,0x13,0x74,0x61,
-0x6e,0x69,0xa5,3,0x61,0xa2,0x9b,0x65,0xa4,0x29,0x69,1,0x61,0xa2,0x8f,0x73,
-0x10,0x63,5,0x70,0x18,0x70,0xa2,0x71,0x73,0x36,0x74,0x17,0x65,0x63,0x68,0x6e,
-0x69,0x63,0x61,0x6c,0x81,0x15,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x8f,0x61,0xa2,0x66,
-0x65,0x46,0x6d,0x19,0x61,0x74,0x68,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,1,0x61,
-0xa3,0x66,0x62,0xa3,0x69,0x17,0x6c,0x6c,0x61,0x6e,0x65,0x6f,0x75,0x73,2,0x6d,
-0x3a,0x73,0x6c,0x74,0x17,0x65,0x63,0x68,0x6e,0x69,0x63,0x61,0x6c,0x81,0x11,0x61,
-0x74,0x1f,0x68,0x65,0x6d,0x61,0x74,0x69,0x63,0x61,0x6c,0x73,0x79,0x6d,0x62,0x6f,
-0x6c,0x73,1,0x61,0xa3,0x66,0x62,0xa3,0x69,0x15,0x79,0x6d,0x62,0x6f,0x6c,0x73,
-0x8e,0x12,0x61,0x6e,0x64,1,0x61,0x3c,0x70,0x19,0x69,0x63,0x74,0x6f,0x67,0x72,
-0x61,0x70,0x68,0x73,0xa3,0xcd,0x14,0x72,0x72,0x6f,0x77,0x73,0xa3,0x73,0x10,0x6f,
-0xa3,0xd8,4,0x68,0xa2,0x52,0x6c,0xa2,0x68,0x6e,0xa2,0x6d,0x72,0xa2,0x7d,0x74,
-0x10,0x68,2,0x61,0x3a,0x65,0x4a,0x6f,0x17,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,
-0x73,0x7f,0x16,0x6c,0x70,0x68,0x61,0x6e,0x75,0x6d,0xa3,0x5d,0x16,0x6d,0x61,0x74,
-0x69,0x63,0x61,0x6c,1,0x61,0x36,0x6f,0x17,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,
-0x73,0x7f,0x11,0x6c,0x70,0x1f,0x68,0x61,0x6e,0x75,0x6d,0x65,0x72,0x69,0x63,0x73,
-0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x5d,1,0x61,0x3e,0x6a,0x12,0x6f,0x6e,0x67,
-0xa2,0xaa,0x14,0x74,0x69,0x6c,0x65,0x73,0xa3,0xaa,0x13,0x6a,0x61,0x6e,0x69,0xa3,
-0xe9,0x15,0x61,0x79,0x61,0x6c,0x61,0x6d,0x4f,1,0x64,0x34,0x69,0x15,0x63,0x68,
-0x61,0x65,0x61,0x6e,0xa3,0xea,0x12,0x61,0x69,0x63,0xa3,0xc6,0x13,0x63,0x68,0x65,
-0x6e,0xa5,0xc,2,0x65,0x66,0x6e,0x98,0x72,0x14,0x6f,0x69,0x74,0x69,0x63,1,
+0x70,0x6e,0x76,0x70,0xa2,0xf1,0x71,0xa4,0x43,0x72,2,0x61,0x28,0x65,0x32,0x69,
+0x9d,0x14,0x64,0x69,0x63,0x61,0x6c,0x55,0x1e,0x67,0x69,0x6f,0x6e,0x61,0x6c,0x69,
+0x6e,0x64,0x69,0x63,0x61,0x74,0x6f,0x72,0x9d,0x12,0x61,0x74,0x68,0x4f,6,0x6f,
+0x39,0x6f,0x32,0x74,0xc3,9,0x75,0x54,0x76,0xd9,0x30,0,0x12,0x6e,0x63,0x68,
+0x1f,0x61,0x72,0x61,0x63,0x74,0x65,0x72,0x63,0x6f,0x64,0x65,0x70,0x6f,0x69,0x6e,
+0x74,0x51,0x14,0x6d,0x65,0x72,0x69,0x63,1,0x74,0x32,0x76,0x13,0x61,0x6c,0x75,
+0x65,0xd9,0x30,0,0x12,0x79,0x70,0x65,0xc3,9,0x61,0xa2,0x77,0x63,0xa2,0x82,
+0x66,2,0x63,0x98,0x64,0xa2,0x53,0x6b,1,0x63,0x56,0x64,1,0x69,0x42,0x71,
+1,0x63,0xc3,0xd,0x75,0x17,0x69,0x63,0x6b,0x63,0x68,0x65,0x63,0x6b,0xc3,0xd,
+0x13,0x6e,0x65,0x72,0x74,0x6d,1,0x69,0x42,0x71,1,0x63,0xc3,0xf,0x75,0x17,
+0x69,0x63,0x6b,0x63,0x68,0x65,0x63,0x6b,0xc3,0xf,0x13,0x6e,0x65,0x72,0x74,0x71,
+1,0x69,0x42,0x71,1,0x63,0xc3,0xe,0x75,0x17,0x69,0x63,0x6b,0x63,0x68,0x65,
+0x63,0x6b,0xc3,0xe,0x13,0x6e,0x65,0x72,0x74,0x6f,1,0x69,0x42,0x71,1,0x63,
+0xc3,0xc,0x75,0x17,0x69,0x63,0x6b,0x63,0x68,0x65,0x63,0x6b,0xc3,0xc,0x13,0x6e,
+0x65,0x72,0x74,0x6b,0xd8,0x40,5,1,0x31,0xd9,0x40,0xb,0x6d,0x10,0x65,0xd9,
+0x40,5,0x12,0x68,0x61,0x72,0x51,2,0x61,0x6c,0x63,0xa2,0x4c,0x72,1,0x65,
+0x2a,0x69,0x11,0x6e,0x74,0x7f,0x16,0x70,0x65,0x6e,0x64,0x65,0x64,0x63,0x1f,0x6f,
+0x6e,0x63,0x61,0x74,0x65,0x6e,0x61,0x74,0x69,0x6f,0x6e,0x6d,0x61,0x72,0x6b,0x9f,
+0x10,0x74,2,0x73,0x2c,0x74,0x30,0x77,0x10,0x73,0x77,0x11,0x79,0x6e,0x75,0x12,
+0x65,0x72,0x6e,1,0x73,0x38,0x77,0x18,0x68,0x69,0x74,0x65,0x73,0x70,0x61,0x63,
+0x65,0x77,0x14,0x79,0x6e,0x74,0x61,0x78,0x75,0x10,0x6d,0x9f,1,0x6d,0x3c,0x75,
+0x1a,0x6f,0x74,0x61,0x74,0x69,0x6f,0x6e,0x6d,0x61,0x72,0x6b,0x53,0x12,0x61,0x72,
+0x6b,0x53,0x66,0xc1,0xb9,0x69,0xc0,0xfd,0x69,0xa2,0x6f,0x6a,0xa2,0xca,0x6c,4,
+0x62,0xc3,8,0x63,0x8c,0x65,0x98,0x69,0xa2,0x56,0x6f,2,0x65,0x4b,0x67,0x4c,
+0x77,0x11,0x65,0x72,0x4c,0x13,0x63,0x61,0x73,0x65,0x4c,0x16,0x6d,0x61,0x70,0x70,
+0x69,0x6e,0x67,0xd9,0x40,4,0x11,0x69,0x63,0x1f,0x61,0x6c,0x6f,0x72,0x64,0x65,
+0x72,0x65,0x78,0x63,0x65,0x70,0x74,0x69,0x6f,0x6e,0x4b,0xd8,0x40,4,0x11,0x63,
+0x63,0xc3,0x10,0x18,0x61,0x64,0x63,0x61,0x6e,0x6f,0x6e,0x69,0x63,0x1f,0x61,0x6c,
+0x63,0x6f,0x6d,0x62,0x69,0x6e,0x69,0x6e,0x67,0x63,0x6c,0x61,0x73,0x73,0xc3,0x10,
+0x16,0x6e,0x65,0x62,0x72,0x65,0x61,0x6b,0xc3,8,1,0x64,0x44,0x73,1,0x63,
+0xd9,0x40,3,0x6f,0x16,0x63,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0xd9,0x40,3,2,
+0x63,0x80,0x65,0x90,0x73,0x40,1,0x62,0x52,0x74,0x46,1,0x61,0x40,0x72,0x1c,
+0x69,0x6e,0x61,0x72,0x79,0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x47,0x11,0x72,
+0x74,0x41,0x44,0x1c,0x69,0x6e,0x61,0x72,0x79,0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,
+0x72,0x45,0x3e,0x16,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x3f,0x10,0x6f,0x42,0x16,
+0x67,0x72,0x61,0x70,0x68,0x69,0x63,0x43,2,0x67,0xc3,6,0x6f,0x26,0x74,0xc3,
+7,0x11,0x69,0x6e,1,0x63,0x4a,0x69,0x11,0x6e,0x67,1,0x67,0x2e,0x74,0x12,
+0x79,0x70,0x65,0xc3,7,0x13,0x72,0x6f,0x75,0x70,0xc3,6,0x48,0x15,0x6f,0x6e,
+0x74,0x72,0x6f,0x6c,0x49,0x66,0x86,0x67,0xa2,0x4a,0x68,3,0x61,0x36,0x65,0x58,
+0x73,0x68,0x79,0x13,0x70,0x68,0x65,0x6e,0x3d,0x1f,0x6e,0x67,0x75,0x6c,0x73,0x79,
+0x6c,0x6c,0x61,0x62,0x6c,0x65,0x74,0x79,0x70,0x65,0xc3,0xb,0x10,0x78,0x3a,0x14,
+0x64,0x69,0x67,0x69,0x74,0x3b,0x10,0x74,0xc3,0xb,0x16,0x75,0x6c,0x6c,0x63,0x6f,
+0x6d,0x70,0x1f,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x65,0x78,0x63,0x6c,0x75,0x73,
+0x69,0x6f,0x6e,0x33,2,0x63,0xa2,0x44,0x65,0xa2,0x4b,0x72,3,0x61,0x34,0x62,
+0x84,0x65,0x8a,0x6c,0x12,0x69,0x6e,0x6b,0x39,0x11,0x70,0x68,0x7c,0x12,0x65,0x6d,
+0x65,3,0x62,0x5e,0x63,0x30,0x65,0x48,0x6c,0x12,0x69,0x6e,0x6b,0x39,0x1a,0x6c,
+0x75,0x73,0x74,0x65,0x72,0x62,0x72,0x65,0x61,0x6b,0xc3,0x12,0x14,0x78,0x74,0x65,
+0x6e,0x64,0x37,0x12,0x61,0x73,0x65,0x35,0x11,0x78,0x74,0x37,0xc2,5,1,0x62,
+0xc3,0x12,0x6d,0xd9,0x20,0,0x1c,0x6e,0x65,0x72,0x61,0x6c,0x63,0x61,0x74,0x65,
+0x67,0x6f,0x72,0x79,0xc2,5,0x13,0x6d,0x61,0x73,0x6b,0xd9,0x20,0,0x61,0xa2,
+0x5c,0x62,0xa2,0x8a,0x63,0xa2,0xfc,0x64,0xa4,0xc9,0x65,2,0x61,0x3a,0x6d,0x58,
+0x78,0x10,0x74,0x30,0x14,0x65,0x6e,0x64,0x65,0x72,0x31,0xc2,4,0x1b,0x73,0x74,
+0x61,0x73,0x69,0x61,0x6e,0x77,0x69,0x64,0x74,0x68,0xc3,4,0x12,0x6f,0x6a,0x69,
+0x92,2,0x63,0x40,0x6d,0x50,0x70,0x1a,0x72,0x65,0x73,0x65,0x6e,0x74,0x61,0x74,
+0x69,0x6f,0x6e,0x95,0x17,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x9b,0x16,0x6f,
+0x64,0x69,0x66,0x69,0x65,0x72,0x96,0x13,0x62,0x61,0x73,0x65,0x99,3,0x67,0x44,
+0x68,0x4a,0x6c,0x4e,0x73,0x1a,0x63,0x69,0x69,0x68,0x65,0x78,0x64,0x69,0x67,0x69,
+0x74,0x23,0x10,0x65,0xd9,0x40,0,0x11,0x65,0x78,0x23,1,0x6e,0x38,0x70,0x11,
+0x68,0x61,0x20,0x14,0x62,0x65,0x74,0x69,0x63,0x21,0x11,0x75,0x6d,0x79,4,0x63,
+0xc3,0,0x69,0x3e,0x6c,0xa2,0x57,0x6d,0xa2,0x64,0x70,1,0x62,0xd9,0x40,0xd,
+0x74,0xc3,0x15,0x11,0x64,0x69,2,0x63,0x54,0x6d,0x74,0x70,0x1b,0x61,0x69,0x72,
+0x65,0x64,0x62,0x72,0x61,0x63,0x6b,0x65,0x74,0xd8,0x40,0xd,0x13,0x74,0x79,0x70,
+0x65,0xc3,0x15,0x24,1,0x6c,0x30,0x6f,0x14,0x6e,0x74,0x72,0x6f,0x6c,0x25,0x12,
+0x61,0x73,0x73,0xc3,0,0x26,0x14,0x69,0x72,0x72,0x6f,0x72,1,0x65,0x38,0x69,
+0x16,0x6e,0x67,0x67,0x6c,0x79,0x70,0x68,0xd9,0x40,1,0x10,0x64,0x27,2,0x61,
+0x32,0x6b,0xc3,1,0x6f,0x11,0x63,0x6b,0xc3,1,0x11,0x6e,0x6b,0x7b,0x10,0x67,
+0xd9,0x40,1,6,0x68,0x7c,0x68,0x54,0x69,0x85,0x6f,0xa2,0x6f,0x77,4,0x63,
+0x30,0x6b,0x36,0x6c,0x87,0x74,0x8b,0x75,0x89,1,0x66,0x8d,0x6d,0x8f,0x11,0x63,
+0x66,0x91,0x18,0x61,0x6e,0x67,0x65,0x73,0x77,0x68,0x65,0x6e,4,0x63,0x44,0x6c,
+0x6c,0x6e,0x7e,0x74,0x98,0x75,0x18,0x70,0x70,0x65,0x72,0x63,0x61,0x73,0x65,0x64,
+0x89,0x12,0x61,0x73,0x65,1,0x66,0x30,0x6d,0x14,0x61,0x70,0x70,0x65,0x64,0x8f,
+0x14,0x6f,0x6c,0x64,0x65,0x64,0x8d,0x18,0x6f,0x77,0x65,0x72,0x63,0x61,0x73,0x65,
+0x64,0x87,0x1c,0x66,0x6b,0x63,0x63,0x61,0x73,0x65,0x66,0x6f,0x6c,0x64,0x65,0x64,
+0x91,0x18,0x69,0x74,0x6c,0x65,0x63,0x61,0x73,0x65,0x64,0x8b,0x13,0x6d,0x70,0x65,
+0x78,0x33,0x61,0x2e,0x63,0xa2,0x48,0x66,0xd9,0x40,2,1,0x6e,0x72,0x73,0x10,
+0x65,3,0x64,0x83,0x66,0x3a,0x69,0x4a,0x73,0x17,0x65,0x6e,0x73,0x69,0x74,0x69,
+0x76,0x65,0x65,0x15,0x6f,0x6c,0x64,0x69,0x6e,0x67,0xd9,0x40,2,0x17,0x67,0x6e,
+0x6f,0x72,0x61,0x62,0x6c,0x65,0x85,0x13,0x6f,0x6e,0x69,0x63,0x1f,0x61,0x6c,0x63,
+0x6f,0x6d,0x62,0x69,0x6e,0x69,0x6e,0x67,0x63,0x6c,0x61,0x73,0x73,0xc3,2,0x10,
+0x63,0xc3,2,3,0x61,0x30,0x65,0x34,0x69,0xa2,0x41,0x74,0xc3,3,0x11,0x73,
+0x68,0x29,2,0x63,0x3a,0x66,0x58,0x70,0x2c,0x16,0x72,0x65,0x63,0x61,0x74,0x65,
+0x64,0x2d,0x1d,0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x74,0x79,0x70,
+0x65,0xc3,3,0x15,0x61,0x75,0x6c,0x74,0x69,0x67,0x1f,0x6e,0x6f,0x72,0x61,0x62,
+0x6c,0x65,0x63,0x6f,0x64,0x65,0x70,0x6f,0x69,0x6e,0x74,0x2b,0x2a,0x10,0x61,0x2e,
+0x15,0x63,0x72,0x69,0x74,0x69,0x63,0x2f,3,0x66,0x34,0x6e,0x3e,0x74,0x42,0x79,
+0x22,0x11,0x65,0x73,0x23,0x20,0x13,0x61,0x6c,0x73,0x65,0x21,0x20,0x10,0x6f,0x21,
+0x22,0x12,0x72,0x75,0x65,0x23,0xa,0x6b,0x5b,0x6f,0x23,0x6f,0x3c,0x72,0x4c,0x76,
+1,0x69,0x24,0x72,0x33,0x13,0x72,0x61,0x6d,0x61,0x33,0x10,0x76,0x22,0x14,0x65,
+0x72,0x6c,0x61,0x79,0x23,0xa2,0xe2,0x13,0x69,0x67,0x68,0x74,0xa3,0xe2,0x6b,0x58,
+0x6c,0x74,0x6e,3,0x6b,0x2f,0x6f,0x30,0x72,0x21,0x75,0x12,0x6b,0x74,0x61,0x2f,
+0x19,0x74,0x72,0x65,0x6f,0x72,0x64,0x65,0x72,0x65,0x64,0x21,1,0x61,0x24,0x76,
+0x31,0x18,0x6e,0x61,0x76,0x6f,0x69,0x63,0x69,0x6e,0x67,0x31,0xa2,0xe0,0x12,0x65,
+0x66,0x74,0xa3,0xe0,0x61,0x5c,0x62,0xa2,0x77,0x63,0xa2,0x96,0x64,0xa4,0xa,0x69,
+1,0x6f,0x26,0x73,0xa3,0xf0,0x1a,0x74,0x61,0x73,0x75,0x62,0x73,0x63,0x72,0x69,
+0x70,0x74,0xa3,0xf0,0xa2,0xe6,3,0x62,0xa0,0x6c,0xa3,0xe4,0x72,0xa3,0xe8,0x74,
+2,0x61,0x74,0x62,0x7c,0x74,0x14,0x61,0x63,0x68,0x65,0x64,1,0x61,0x3e,0x62,
+0x13,0x65,0x6c,0x6f,0x77,0xa2,0xca,0x13,0x6c,0x65,0x66,0x74,0xa3,0xc8,0x13,0x62,
+0x6f,0x76,0x65,0xa2,0xd6,0x14,0x72,0x69,0x67,0x68,0x74,0xa3,0xd8,0xa2,0xd6,0x10,
+0x72,0xa3,0xd8,0xa2,0xca,0x10,0x6c,0xa3,0xc8,0x12,0x6f,0x76,0x65,0xa2,0xe6,1,
+0x6c,0x30,0x72,0x13,0x69,0x67,0x68,0x74,0xa3,0xe8,0x12,0x65,0x66,0x74,0xa3,0xe4,
+0xa2,0xdc,2,0x65,0x2c,0x6c,0xa3,0xda,0x72,0xa3,0xde,0x12,0x6c,0x6f,0x77,0xa2,
+0xdc,1,0x6c,0x30,0x72,0x13,0x69,0x67,0x68,0x74,0xa3,0xde,0x12,0x65,0x66,0x74,
+0xa3,0xda,0x11,0x63,0x63,4,0x31,0x3c,0x32,0xa2,0x42,0x33,0xa2,0x56,0x38,0xa2,
+0x64,0x39,0x10,0x31,0xa3,0x5b,9,0x35,0xa,0x35,0x3f,0x36,0x41,0x37,0x43,0x38,
+0x45,0x39,0x47,0x30,0x30,0x31,0x3c,0x32,0x42,0x33,0x4e,0x34,0x3d,0x34,1,0x33,
+0xa3,0x67,0x37,0xa3,0x6b,0x36,0x10,0x38,0xa3,0x76,0x38,1,0x32,0xa3,0x7a,0x39,
+0xa3,0x81,0x3a,2,0x30,0xa3,0x82,0x32,0xa3,0x84,0x33,0xa3,0x85,9,0x35,0xa,
+0x35,0x53,0x36,0x55,0x37,0x57,0x38,0x59,0x39,0x5b,0x30,0x49,0x31,0x4b,0x32,0x4d,
+0x33,0x4f,0x34,0x51,6,0x33,8,0x33,0x63,0x34,0x65,0x35,0x67,0x36,0x69,0x30,
+0x5d,0x31,0x5f,0x32,0x61,0x10,0x34,0xa3,0x54,2,0x61,0xa3,0xea,0x62,0xa3,0xe9,
+0x6f,0x13,0x75,0x62,0x6c,0x65,1,0x61,0x30,0x62,0x13,0x65,0x6c,0x6f,0x77,0xa3,
+0xe9,0x13,0x62,0x6f,0x76,0x65,0xa3,0xea,0xb,0x6e,0xc0,0xca,0x72,0x5f,0x72,0x46,
+0x73,0xa2,0x48,0x77,1,0x68,0x24,0x73,0x33,0x17,0x69,0x74,0x65,0x73,0x70,0x61,
+0x63,0x65,0x33,0x22,1,0x69,0x30,0x6c,2,0x65,0x3d,0x69,0x4b,0x6f,0x3f,0x18,
+0x67,0x68,0x74,0x74,0x6f,0x6c,0x65,0x66,0x74,0x22,2,0x65,0x38,0x69,0x48,0x6f,
+0x16,0x76,0x65,0x72,0x72,0x69,0x64,0x65,0x3f,0x17,0x6d,0x62,0x65,0x64,0x64,0x69,
+0x6e,0x67,0x3d,0x15,0x73,0x6f,0x6c,0x61,0x74,0x65,0x4b,0x30,0x1e,0x65,0x67,0x6d,
+0x65,0x6e,0x74,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0x31,0x6e,0xa2,0x41,
+0x6f,0xa2,0x53,0x70,2,0x61,0x66,0x64,0x86,0x6f,0x1b,0x70,0x64,0x69,0x72,0x65,
+0x63,0x74,0x69,0x6f,0x6e,0x61,0x6c,1,0x66,0x32,0x69,0x15,0x73,0x6f,0x6c,0x61,
+0x74,0x65,0x4d,0x14,0x6f,0x72,0x6d,0x61,0x74,0x41,0x1f,0x72,0x61,0x67,0x72,0x61,
+0x70,0x68,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0x2f,1,0x66,0x41,0x69,
+0x4d,1,0x6f,0x28,0x73,0x10,0x6d,0x43,0x1b,0x6e,0x73,0x70,0x61,0x63,0x69,0x6e,
+0x67,0x6d,0x61,0x72,0x6b,0x43,1,0x6e,0x35,0x74,0x19,0x68,0x65,0x72,0x6e,0x65,
+0x75,0x74,0x72,0x61,0x6c,0x35,0x65,0x88,0x65,0x98,0x66,0xa2,0x6a,0x6c,0x20,1,
+0x65,0x30,0x72,2,0x65,0x37,0x69,0x49,0x6f,0x39,0x18,0x66,0x74,0x74,0x6f,0x72,
+0x69,0x67,0x68,0x74,0x20,2,0x65,0x38,0x69,0x48,0x6f,0x16,0x76,0x65,0x72,0x72,
+0x69,0x64,0x65,0x39,0x17,0x6d,0x62,0x65,0x64,0x64,0x69,0x6e,0x67,0x37,0x15,0x73,
+0x6f,0x6c,0x61,0x74,0x65,0x49,3,0x6e,0x25,0x73,0x27,0x74,0x29,0x75,0x15,0x72,
+0x6f,0x70,0x65,0x61,0x6e,2,0x6e,0x3c,0x73,0x46,0x74,0x18,0x65,0x72,0x6d,0x69,
+0x6e,0x61,0x74,0x6f,0x72,0x29,0x14,0x75,0x6d,0x62,0x65,0x72,0x25,0x17,0x65,0x70,
+0x61,0x72,0x61,0x74,0x6f,0x72,0x27,1,0x69,0x28,0x73,0x10,0x69,0x47,0x1f,0x72,
+0x73,0x74,0x73,0x74,0x72,0x6f,0x6e,0x67,0x69,0x73,0x6f,0x6c,0x61,0x74,0x65,0x47,
+0x61,0x4e,0x62,0x84,0x63,1,0x6f,0x24,0x73,0x2d,0x1c,0x6d,0x6d,0x6f,0x6e,0x73,
+0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0x2d,2,0x6c,0x3b,0x6e,0x2b,0x72,0x13,
+0x61,0x62,0x69,0x63,1,0x6c,0x30,0x6e,0x14,0x75,0x6d,0x62,0x65,0x72,0x2b,0x14,
+0x65,0x74,0x74,0x65,0x72,0x3b,0x2e,1,0x6e,0x45,0x6f,0x1c,0x75,0x6e,0x64,0x61,
+0x72,0x79,0x6e,0x65,0x75,0x74,0x72,0x61,0x6c,0x45,0,0x16,0x6d,0xc7,0xc5,0x74,
+0xc1,0xb8,0x77,0x57,0x77,0x48,0x79,0x5c,0x7a,0x1d,0x61,0x6e,0x61,0x62,0x61,0x7a,
+0x61,0x72,0x73,0x71,0x75,0x61,0x72,0x65,0xa5,0x18,0x18,0x61,0x72,0x61,0x6e,0x67,
+0x63,0x69,0x74,0x69,0xa3,0xfc,0x10,0x69,2,0x6a,0x3c,0x72,0x68,0x73,0x17,0x79,
+0x6c,0x6c,0x61,0x62,0x6c,0x65,0x73,0xa3,0x48,0x12,0x69,0x6e,0x67,0xa2,0x74,0x1e,
+0x68,0x65,0x78,0x61,0x67,0x72,0x61,0x6d,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,
+0x74,0x16,0x61,0x64,0x69,0x63,0x61,0x6c,0x73,0xa3,0x49,0x74,0xa2,0x59,0x75,0xa4,
+0x12,0x76,2,0x61,0x36,0x65,0x7a,0x73,0xa2,0x6c,0x12,0x73,0x75,0x70,0xa3,0x7d,
+1,0x69,0xa3,0x9f,0x72,0x1e,0x69,0x61,0x74,0x69,0x6f,0x6e,0x73,0x65,0x6c,0x65,
+0x63,0x74,0x6f,0x72,0x73,0xa2,0x6c,0x19,0x73,0x75,0x70,0x70,0x6c,0x65,0x6d,0x65,
+0x6e,0x74,0xa3,0x7d,1,0x64,0x3c,0x72,0x19,0x74,0x69,0x63,0x61,0x6c,0x66,0x6f,
+0x72,0x6d,0x73,0xa3,0x91,0x14,0x69,0x63,0x65,0x78,0x74,0xa2,0xaf,0x16,0x65,0x6e,
+0x73,0x69,0x6f,0x6e,0x73,0xa3,0xaf,4,0x61,0x68,0x65,0xa2,0x8a,0x68,0xa2,0x8d,
+0x69,0xa2,0x95,0x72,0x1c,0x61,0x6e,0x73,0x70,0x6f,0x72,0x74,0x61,0x6e,0x64,0x6d,
+0x61,0x70,0xa2,0xcf,0x16,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0xcf,4,0x67,
+0x58,0x69,0x7e,0x6b,0xa2,0x58,0x6d,0xa2,0x5a,0x6e,0x12,0x67,0x75,0x74,0xa4,0x10,
+0x19,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x73,0xa5,0x11,2,0x61,0x2a,
+0x62,0x32,0x73,0xa3,0x60,0x12,0x6c,0x6f,0x67,0xa3,0x62,0x13,0x61,0x6e,0x77,0x61,
+0xa3,0x65,3,0x6c,0x52,0x74,0x56,0x76,0x5e,0x78,0x16,0x75,0x61,0x6e,0x6a,0x69,
+0x6e,0x67,0xa2,0x7c,0x16,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x7c,0x10,0x65,
+0xa3,0x70,0x12,0x68,0x61,0x6d,0xa3,0xae,0x12,0x69,0x65,0x74,0xa3,0xb7,0x11,0x72,
+0x69,0xa3,0xdc,0x11,0x69,0x6c,0x49,0x13,0x6c,0x75,0x67,0x75,0x4b,0x10,0x61,1,
+0x61,0x24,0x69,0x53,0x11,0x6e,0x61,0x3d,2,0x62,0x34,0x66,0x3c,0x72,0x13,0x68,
+0x75,0x74,0x61,0xa3,0xfb,0x13,0x65,0x74,0x61,0x6e,0x57,0x14,0x69,0x6e,0x61,0x67,
+0x68,0xa3,0x90,2,0x63,0x82,0x67,0x92,0x6e,0x1f,0x69,0x66,0x69,0x65,0x64,0x63,
+0x61,0x6e,0x61,0x64,0x69,0x61,0x6e,0x61,0x62,0x6f,0x1f,0x72,0x69,0x67,0x69,0x6e,
+0x61,0x6c,0x73,0x79,0x6c,0x6c,0x61,0x62,0x69,0x63,0x73,0x62,0x17,0x65,0x78,0x74,
+0x65,0x6e,0x64,0x65,0x64,0xa3,0xad,0x11,0x61,0x73,0x62,0x12,0x65,0x78,0x74,0xa3,
+0xad,0x15,0x61,0x72,0x69,0x74,0x69,0x63,0xa3,0x78,0x70,0xc2,0xeb,0x70,0xa6,1,
+0x72,0xa6,0xbd,0x73,7,0x6f,0xc1,0x75,0x6f,0x74,0x70,0x9c,0x75,0xa2,0x5d,0x79,
+1,0x6c,0x4c,0x72,0x12,0x69,0x61,0x63,0x3a,0x12,0x73,0x75,0x70,0xa4,0x17,0x16,
+0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa5,0x17,0x17,0x6f,0x74,0x69,0x6e,0x61,0x67,
+0x72,0x69,0xa3,0x8f,1,0x72,0x30,0x79,0x13,0x6f,0x6d,0x62,0x6f,0xa5,0x16,0x17,
+0x61,0x73,0x6f,0x6d,0x70,0x65,0x6e,0x67,0xa3,0xda,1,0x61,0x32,0x65,0x14,0x63,
+0x69,0x61,0x6c,0x73,0xa3,0x56,0x12,0x63,0x69,0x6e,0x1f,0x67,0x6d,0x6f,0x64,0x69,
+0x66,0x69,0x65,0x72,0x6c,0x65,0x74,0x74,0x65,0x72,0x73,0x2d,2,0x6e,0x48,0x70,
+0x76,0x74,0x1d,0x74,0x6f,0x6e,0x73,0x69,0x67,0x6e,0x77,0x72,0x69,0x74,0x69,0x6e,
+0x67,0xa5,6,0x15,0x64,0x61,0x6e,0x65,0x73,0x65,0xa2,0x9b,0x12,0x73,0x75,0x70,
+0xa2,0xdb,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xdb,4,0x61,0xa2,0xa8,
+0x65,0x5c,0x6d,0x9e,0x70,0xa2,0x4b,0x73,0x13,0x79,0x6d,0x62,0x6f,0x1f,0x6c,0x73,
+0x61,0x6e,0x64,0x70,0x69,0x63,0x74,0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0xa5,5,
+0x10,0x72,1,0x61,0x4e,0x73,0x12,0x63,0x72,0x69,0x1f,0x70,0x74,0x73,0x61,0x6e,
+0x64,0x73,0x75,0x62,0x73,0x63,0x72,0x69,0x70,0x74,0x73,0x73,0x14,0x6e,0x64,0x73,
+0x75,0x62,0x73,0x1b,0x61,0x74,0x68,0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x73,
+0xa3,0x6a,1,0x6c,0x40,0x75,1,0x61,0x6e,0x6e,0x17,0x63,0x74,0x75,0x61,0x74,
+0x69,0x6f,0x6e,0xa3,0x8e,0x15,0x65,0x6d,0x65,0x6e,0x74,0x61,1,0x6c,0x50,0x72,
+0x1e,0x79,0x70,0x72,0x69,0x76,0x61,0x74,0x65,0x75,0x73,0x65,0x61,0x72,0x65,0x61,
+1,0x61,0xa3,0x6d,0x62,0xa3,0x6e,3,0x61,0x5c,0x6d,0x78,0x70,0xa2,0x41,0x73,
+0x13,0x79,0x6d,0x62,0x6f,0x1f,0x6c,0x73,0x61,0x6e,0x64,0x70,0x69,0x63,0x74,0x6f,
+0x67,0x72,0x61,0x70,0x68,0x73,0xa5,5,0x14,0x72,0x72,0x6f,0x77,0x73,2,0x61,
+0xa3,0x67,0x62,0xa3,0x68,0x63,0xa3,0xfa,0x13,0x61,0x74,0x68,0x65,0x1f,0x6d,0x61,
+0x74,0x69,0x63,0x61,0x6c,0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x73,0xa3,0x6a,
+0x19,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xa3,0x8e,0x61,0x5a,0x68,
+0x84,0x69,0xa2,0x5b,0x6d,0x16,0x61,0x6c,0x6c,0x66,0x6f,0x72,0x6d,1,0x73,0xa3,
+0x54,0x76,0x16,0x61,0x72,0x69,0x61,0x6e,0x74,0x73,0xa3,0x54,1,0x6d,0x36,0x75,
+0x16,0x72,0x61,0x73,0x68,0x74,0x72,0x61,0xa3,0xa1,0x15,0x61,0x72,0x69,0x74,0x61,
+0x6e,0xa3,0xac,1,0x61,0x52,0x6f,0x13,0x72,0x74,0x68,0x61,0x1f,0x6e,0x64,0x66,
+0x6f,0x72,0x6d,0x61,0x74,0x63,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x73,0xa3,0xf7,1,
+0x72,0x2e,0x76,0x12,0x69,0x61,0x6e,0xa3,0x79,0x12,0x61,0x64,0x61,0xa3,0xd9,1,
+0x64,0x50,0x6e,0x13,0x68,0x61,0x6c,0x61,0x50,0x1d,0x61,0x72,0x63,0x68,0x61,0x69,
+0x63,0x6e,0x75,0x6d,0x62,0x65,0x72,0x73,0xa3,0xf9,0x13,0x64,0x68,0x61,0x6d,0xa3,
+0xf8,5,0x72,0x35,0x72,0x44,0x73,0x64,0x75,1,0x61,0xa3,0x4e,0x6e,0x17,0x63,
+0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x71,0x17,0x69,0x76,0x61,0x74,0x65,0x75,0x73,
+0x65,0xa2,0x4e,0x13,0x61,0x72,0x65,0x61,0xa3,0x4e,0x1b,0x61,0x6c,0x74,0x65,0x72,
+0x70,0x61,0x68,0x6c,0x61,0x76,0x69,0xa3,0xf6,0x61,0x40,0x68,0x82,0x6c,0x19,0x61,
+0x79,0x69,0x6e,0x67,0x63,0x61,0x72,0x64,0x73,0xa3,0xcc,2,0x68,0x38,0x6c,0x4a,
+0x75,0x15,0x63,0x69,0x6e,0x68,0x61,0x75,0xa3,0xf5,0x17,0x61,0x77,0x68,0x68,0x6d,
+0x6f,0x6e,0x67,0xa3,0xf3,0x15,0x6d,0x79,0x72,0x65,0x6e,0x65,0xa3,0xf4,1,0x61,
+0x8e,0x6f,1,0x65,0x74,0x6e,0x16,0x65,0x74,0x69,0x63,0x65,0x78,0x74,0xa2,0x72,
+1,0x65,0x2c,0x73,0x11,0x75,0x70,0xa3,0x8d,0x15,0x6e,0x73,0x69,0x6f,0x6e,0x73,
+0xa2,0x72,0x19,0x73,0x75,0x70,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x8d,0x15,
+0x6e,0x69,0x63,0x69,0x61,0x6e,0xa3,0x97,1,0x67,0x3e,0x69,0x13,0x73,0x74,0x6f,
+0x73,0xa2,0xa6,0x13,0x64,0x69,0x73,0x63,0xa3,0xa6,0x12,0x73,0x70,0x61,0xa3,0x96,
+1,0x65,0x5c,0x75,1,0x6d,0x2a,0x6e,0x11,0x69,0x63,0x67,0x10,0x69,0xa2,0xc0,
+0x1d,0x6e,0x75,0x6d,0x65,0x72,0x61,0x6c,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,
+0xc0,0x13,0x6a,0x61,0x6e,0x67,0xa3,0xa3,0x6d,0xa2,0xc3,0x6e,0xa6,0xd2,0x6f,5,
+0x70,0x4b,0x70,0x46,0x72,0x7a,0x73,1,0x61,0x30,0x6d,0x13,0x61,0x6e,0x79,0x61,
+0xa3,0x7a,0x11,0x67,0x65,0xa5,0xf,0x18,0x74,0x69,0x63,0x61,0x6c,0x63,0x68,0x61,
+0x72,0x1f,0x61,0x63,0x74,0x65,0x72,0x72,0x65,0x63,0x6f,0x67,0x6e,0x69,0x74,0x69,
+0x6f,0x6e,0x85,1,0x69,0x46,0x6e,0x1e,0x61,0x6d,0x65,0x6e,0x74,0x61,0x6c,0x64,
+0x69,0x6e,0x67,0x62,0x61,0x74,0x73,0xa3,0xf2,0x11,0x79,0x61,0x47,0x63,0xa2,0x66,
+0x67,0xa2,0x66,0x6c,1,0x63,0xa2,0x57,0x64,5,0x70,0x2d,0x70,0x36,0x73,0x56,
+0x74,0x14,0x75,0x72,0x6b,0x69,0x63,0xa3,0xbf,0x11,0x65,0x72,1,0x6d,0x2e,0x73,
+0x12,0x69,0x61,0x6e,0xa3,0x8c,0x11,0x69,0x63,0xa3,0xf1,0x1a,0x6f,0x75,0x74,0x68,
+0x61,0x72,0x61,0x62,0x69,0x61,0x6e,0xa3,0xbb,0x68,0x42,0x69,0x54,0x6e,0x1a,0x6f,
+0x72,0x74,0x68,0x61,0x72,0x61,0x62,0x69,0x61,0x6e,0xa3,0xf0,0x17,0x75,0x6e,0x67,
+0x61,0x72,0x69,0x61,0x6e,0xa5,4,0x14,0x74,0x61,0x6c,0x69,0x63,0xa3,0x58,0x13,
+0x68,0x69,0x6b,0x69,0xa3,0x9d,0x10,0x72,0x85,0x12,0x68,0x61,0x6d,0x65,6,0x6f,
+0x86,0x6f,0x6c,0x72,0xa2,0x61,0x75,0xa2,0x62,0x79,0x14,0x61,0x6e,0x6d,0x61,0x72,
+0x58,0x12,0x65,0x78,0x74,2,0x61,0xa3,0xb6,0x62,0xa3,0xee,0x65,0x13,0x6e,0x64,
+0x65,0x64,1,0x61,0xa3,0xb6,0x62,0xa3,0xee,1,0x64,0x52,0x6e,0x15,0x67,0x6f,
+0x6c,0x69,0x61,0x6e,0x6a,0x12,0x73,0x75,0x70,0xa4,0xd,0x16,0x70,0x6c,0x65,0x6d,
+0x65,0x6e,0x74,0xa5,0xd,0x10,0x69,0xa2,0xec,0x13,0x66,0x69,0x65,0x72,1,0x6c,
+0x3c,0x74,0x19,0x6f,0x6e,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x73,0xa3,0x8a,0x15,
+0x65,0x74,0x74,0x65,0x72,0x73,0x2d,0x10,0x6f,0xa3,0xed,1,0x6c,0x44,0x73,0x11,
+0x69,0x63,0xa2,0x5c,0x18,0x61,0x6c,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x5c,
+0x13,0x74,0x61,0x6e,0x69,0xa5,3,0x61,0xa2,0x9b,0x65,0xa4,0x36,0x69,1,0x61,
+0xa2,0x8f,0x73,0x10,0x63,5,0x70,0x18,0x70,0xa2,0x71,0x73,0x36,0x74,0x17,0x65,
+0x63,0x68,0x6e,0x69,0x63,0x61,0x6c,0x81,0x15,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x8f,
+0x61,0xa2,0x66,0x65,0x46,0x6d,0x19,0x61,0x74,0x68,0x73,0x79,0x6d,0x62,0x6f,0x6c,
+0x73,1,0x61,0xa3,0x66,0x62,0xa3,0x69,0x17,0x6c,0x6c,0x61,0x6e,0x65,0x6f,0x75,
+0x73,2,0x6d,0x3a,0x73,0x6c,0x74,0x17,0x65,0x63,0x68,0x6e,0x69,0x63,0x61,0x6c,
+0x81,0x11,0x61,0x74,0x1f,0x68,0x65,0x6d,0x61,0x74,0x69,0x63,0x61,0x6c,0x73,0x79,
+0x6d,0x62,0x6f,0x6c,0x73,1,0x61,0xa3,0x66,0x62,0xa3,0x69,0x15,0x79,0x6d,0x62,
+0x6f,0x6c,0x73,0x8e,0x12,0x61,0x6e,0x64,1,0x61,0x3c,0x70,0x19,0x69,0x63,0x74,
+0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0xa3,0xcd,0x14,0x72,0x72,0x6f,0x77,0x73,0xa3,
+0x73,0x10,0x6f,0xa3,0xd8,5,0x72,0x62,0x72,0xa2,0x4c,0x73,0xa2,0x50,0x74,0x10,
+0x68,2,0x61,0x3a,0x65,0x4a,0x6f,0x17,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x73,
+0x7f,0x16,0x6c,0x70,0x68,0x61,0x6e,0x75,0x6d,0xa3,0x5d,0x16,0x6d,0x61,0x74,0x69,
+0x63,0x61,0x6c,1,0x61,0x36,0x6f,0x17,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x73,
+0x7f,0x11,0x6c,0x70,0x1f,0x68,0x61,0x6e,0x75,0x6d,0x65,0x72,0x69,0x63,0x73,0x79,
+0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x5d,0x13,0x63,0x68,0x65,0x6e,0xa5,0xc,0x18,0x61,
+0x72,0x61,0x6d,0x67,0x6f,0x6e,0x64,0x69,0xa5,0x14,0x68,0x4c,0x6c,0x7a,0x6e,1,
+0x64,0x34,0x69,0x15,0x63,0x68,0x61,0x65,0x61,0x6e,0xa3,0xea,0x12,0x61,0x69,0x63,
+0xa3,0xc6,1,0x61,0x3e,0x6a,0x12,0x6f,0x6e,0x67,0xa2,0xaa,0x14,0x74,0x69,0x6c,
+0x65,0x73,0xa3,0xaa,0x13,0x6a,0x61,0x6e,0x69,0xa3,0xe9,0x15,0x61,0x79,0x61,0x6c,
+0x61,0x6d,0x4f,2,0x65,0x66,0x6e,0x98,0x72,0x14,0x6f,0x69,0x74,0x69,0x63,1,
 0x63,0x3c,0x68,0x19,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0xd7,
 0x15,0x75,0x72,0x73,0x69,0x76,0x65,0xa3,0xd6,0x17,0x74,0x65,0x69,0x6d,0x61,0x79,
 0x65,0x6b,0xa2,0xb8,0x12,0x65,0x78,0x74,0xa2,0xd5,0x16,0x65,0x6e,0x73,0x69,0x6f,
 0x6e,0x73,0xa3,0xd5,0x18,0x64,0x65,0x6b,0x69,0x6b,0x61,0x6b,0x75,0x69,0xa3,0xeb,
-5,0x6b,0x1b,0x6b,0x3c,0x6f,0x40,0x75,0x18,0x6d,0x62,0x65,0x72,0x66,0x6f,0x72,
-0x6d,0x73,0x7b,0x10,0x6f,0xa3,0x92,0x14,0x62,0x6c,0x6f,0x63,0x6b,0x21,0x61,0x44,
-0x62,0x21,0x65,0x10,0x77,1,0x61,0xa5,0xe,0x74,0x14,0x61,0x69,0x6c,0x75,0x65,
-0xa3,0x8b,0x16,0x62,0x61,0x74,0x61,0x65,0x61,0x6e,0xa3,0xef,5,0x70,0x4b,0x70,
-0x46,0x72,0x7a,0x73,1,0x61,0x30,0x6d,0x13,0x61,0x6e,0x79,0x61,0xa3,0x7a,0x11,
-0x67,0x65,0xa5,0xf,0x18,0x74,0x69,0x63,0x61,0x6c,0x63,0x68,0x61,0x72,0x1f,0x61,
-0x63,0x74,0x65,0x72,0x72,0x65,0x63,0x6f,0x67,0x6e,0x69,0x74,0x69,0x6f,0x6e,0x85,
-1,0x69,0x46,0x6e,0x1e,0x61,0x6d,0x65,0x6e,0x74,0x61,0x6c,0x64,0x69,0x6e,0x67,
-0x62,0x61,0x74,0x73,0xa3,0xf2,0x11,0x79,0x61,0x47,0x63,0xa2,0x66,0x67,0xa2,0x66,
-0x6c,1,0x63,0xa2,0x57,0x64,5,0x70,0x2d,0x70,0x36,0x73,0x56,0x74,0x14,0x75,
-0x72,0x6b,0x69,0x63,0xa3,0xbf,0x11,0x65,0x72,1,0x6d,0x2e,0x73,0x12,0x69,0x61,
-0x6e,0xa3,0x8c,0x11,0x69,0x63,0xa3,0xf1,0x1a,0x6f,0x75,0x74,0x68,0x61,0x72,0x61,
-0x62,0x69,0x61,0x6e,0xa3,0xbb,0x68,0x42,0x69,0x54,0x6e,0x1a,0x6f,0x72,0x74,0x68,
-0x61,0x72,0x61,0x62,0x69,0x61,0x6e,0xa3,0xf0,0x17,0x75,0x6e,0x67,0x61,0x72,0x69,
-0x61,0x6e,0xa5,4,0x14,0x74,0x61,0x6c,0x69,0x63,0xa3,0x58,0x13,0x68,0x69,0x6b,
-0x69,0xa3,0x9d,0x10,0x72,0x85,0x12,0x68,0x61,0x6d,0x65,5,0x72,0x35,0x72,0x44,
-0x73,0x64,0x75,1,0x61,0xa3,0x4e,0x6e,0x17,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,
-0x6e,0x71,0x17,0x69,0x76,0x61,0x74,0x65,0x75,0x73,0x65,0xa2,0x4e,0x13,0x61,0x72,
-0x65,0x61,0xa3,0x4e,0x1b,0x61,0x6c,0x74,0x65,0x72,0x70,0x61,0x68,0x6c,0x61,0x76,
-0x69,0xa3,0xf6,0x61,0x40,0x68,0x82,0x6c,0x19,0x61,0x79,0x69,0x6e,0x67,0x63,0x61,
-0x72,0x64,0x73,0xa3,0xcc,2,0x68,0x38,0x6c,0x4a,0x75,0x15,0x63,0x69,0x6e,0x68,
-0x61,0x75,0xa3,0xf5,0x17,0x61,0x77,0x68,0x68,0x6d,0x6f,0x6e,0x67,0xa3,0xf3,0x15,
-0x6d,0x79,0x72,0x65,0x6e,0x65,0xa3,0xf4,1,0x61,0x8e,0x6f,1,0x65,0x74,0x6e,
-0x16,0x65,0x74,0x69,0x63,0x65,0x78,0x74,0xa2,0x72,1,0x65,0x2c,0x73,0x11,0x75,
-0x70,0xa3,0x8d,0x15,0x6e,0x73,0x69,0x6f,0x6e,0x73,0xa2,0x72,0x19,0x73,0x75,0x70,
-0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x8d,0x15,0x6e,0x69,0x63,0x69,0x61,0x6e,
-0xa3,0x97,1,0x67,0x3e,0x69,0x13,0x73,0x74,0x6f,0x73,0xa2,0xa6,0x13,0x64,0x69,
-0x73,0x63,0xa3,0xa6,0x12,0x73,0x70,0x61,0xa3,0x96,0x67,0xc3,0xb9,0x6a,0xc1,0x81,
-0x6a,0xa2,0xc5,0x6b,0xa2,0xde,0x6c,4,0x61,0x54,0x65,0xa2,0x61,0x69,0xa2,0x78,
-0x6f,0xa2,0xa7,0x79,1,0x63,0x2e,0x64,0x12,0x69,0x61,0x6e,0xa3,0xa9,0x12,0x69,
-0x61,0x6e,0xa3,0xa7,1,0x6f,0x55,0x74,0x11,0x69,0x6e,1,0x31,0x82,0x65,0x11,
-0x78,0x74,4,0x61,0x5c,0x62,0x29,0x63,0xa3,0x94,0x64,0xa3,0x95,0x65,0xa2,0xe7,
-0x13,0x6e,0x64,0x65,0x64,4,0x61,0x36,0x62,0x29,0x63,0xa3,0x94,0x64,0xa3,0x95,
-0x65,0xa3,0xe7,0x26,0x18,0x64,0x64,0x69,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x6d,0x24,
-0x12,0x73,0x75,0x70,0x24,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x25,1,0x70,
-0x42,0x74,0x1d,0x74,0x65,0x72,0x6c,0x69,0x6b,0x65,0x73,0x79,0x6d,0x62,0x6f,0x6c,
-0x73,0x79,0x12,0x63,0x68,0x61,0xa3,0x9c,2,0x6d,0x2e,0x6e,0x34,0x73,0x10,0x75,
-0xa3,0xb0,0x11,0x62,0x75,0xa3,0x6f,0x12,0x65,0x61,0x72,1,0x61,0xa3,0xe8,0x62,
-1,0x69,0x38,0x73,0x17,0x79,0x6c,0x6c,0x61,0x62,0x61,0x72,0x79,0xa3,0x75,0x17,
-0x64,0x65,0x6f,0x67,0x72,0x61,0x6d,0x73,0xa3,0x76,0x1a,0x77,0x73,0x75,0x72,0x72,
-0x6f,0x67,0x61,0x74,0x65,0x73,0xa3,0x4d,0x10,0x61,1,0x6d,0x32,0x76,0x14,0x61,
-0x6e,0x65,0x73,0x65,0xa3,0xb5,0x10,0x6f,0x5c,0x12,0x65,0x78,0x74,1,0x61,0xa3,
-0xb4,0x62,0xa3,0xb9,1,0x61,0x80,0x68,3,0x61,0x3c,0x6d,0x4c,0x6f,0x64,0x75,
-0x15,0x64,0x61,0x77,0x61,0x64,0x69,0xa3,0xe6,0x16,0x72,0x6f,0x73,0x68,0x74,0x68,
-0x69,0xa3,0x89,0x11,0x65,0x72,0x68,0x16,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,
-0x71,0x12,0x6a,0x6b,0x69,0xa3,0xe5,3,0x69,0x38,0x6e,0x40,0x74,0x9c,0x79,0x13,
-0x61,0x68,0x6c,0x69,0xa3,0xa2,0x12,0x74,0x68,0x69,0xa3,0xc1,3,0x61,0x34,0x62,
-0x50,0x67,0x56,0x6e,0x12,0x61,0x64,0x61,0x4d,0x12,0x73,0x75,0x70,0xa2,0xcb,0x16,
-0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xcb,0x11,0x75,0x6e,0xa3,0x42,0x11,0x78,
-0x69,0x96,0x17,0x72,0x61,0x64,0x69,0x63,0x61,0x6c,0x73,0x97,0x14,0x61,0x6b,0x61,
-0x6e,0x61,0x9e,1,0x65,0x4c,0x70,0x10,0x68,0x1f,0x6f,0x6e,0x65,0x74,0x69,0x63,
-0x65,0x78,0x74,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x73,0xa3,0x6b,0x11,0x78,0x74,0xa3,
-0x6b,0x67,0xa2,0xa3,0x68,0xa4,0x53,0x69,3,0x64,0x4c,0x6d,0xa2,0x55,0x6e,0xa2,
-0x62,0x70,0x13,0x61,0x65,0x78,0x74,0x2a,0x16,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x73,
-0x2b,1,0x63,0x99,0x65,0x17,0x6f,0x67,0x72,0x61,0x70,0x68,0x69,0x63,1,0x64,
-0x56,0x73,0x15,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa4,0xb,0x1d,0x61,0x6e,0x64,0x70,
-0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xa5,0xb,0x13,0x65,0x73,0x63,
-0x72,0x1f,0x69,0x70,0x74,0x69,0x6f,0x6e,0x63,0x68,0x61,0x72,0x61,0x63,0x74,0x65,
-0x72,0x73,0x99,0x1c,0x70,0x65,0x72,0x69,0x61,0x6c,0x61,0x72,0x61,0x6d,0x61,0x69,
-0x63,0xa3,0xba,1,0x64,0x62,0x73,0x1b,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,
-0x61,0x6c,0x70,0x61,1,0x68,0x32,0x72,0x14,0x74,0x68,0x69,0x61,0x6e,0xa3,0xbd,
-0x13,0x6c,0x61,0x76,0x69,0xa3,0xbe,0x1c,0x69,0x63,0x6e,0x75,0x6d,0x62,0x65,0x72,
-0x66,0x6f,0x72,0x6d,0x73,0xa3,0xb2,4,0x65,0x58,0x6c,0xa2,0x63,0x6f,0xa2,0x7b,
-0x72,0xa2,0x7f,0x75,1,0x6a,0x30,0x72,0x14,0x6d,0x75,0x6b,0x68,0x69,0x43,0x14,
-0x61,0x72,0x61,0x74,0x69,0x45,1,0x6e,0x8c,0x6f,1,0x6d,0x4e,0x72,0x13,0x67,
-0x69,0x61,0x6e,0x5a,0x12,0x73,0x75,0x70,0xa2,0x87,0x16,0x70,0x6c,0x65,0x6d,0x65,
-0x6e,0x74,0xa3,0x87,0x1a,0x65,0x74,0x72,0x69,0x63,0x73,0x68,0x61,0x70,0x65,0x73,
-0x8c,0x12,0x65,0x78,0x74,0xa2,0xe3,0x14,0x65,0x6e,0x64,0x65,0x64,0xa3,0xe3,0x1e,
-0x65,0x72,0x61,0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x71,
-0x17,0x61,0x67,0x6f,0x6c,0x69,0x74,0x69,0x63,0xa2,0x88,0x12,0x73,0x75,0x70,0xa4,
-0xa,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa5,0xa,0x13,0x74,0x68,0x69,0x63,
-0xa3,0x59,1,0x61,0x5c,0x65,0x11,0x65,0x6b,0x30,1,0x61,0x38,0x65,0x11,0x78,
-0x74,0x6e,0x14,0x65,0x6e,0x64,0x65,0x64,0x6f,0x17,0x6e,0x64,0x63,0x6f,0x70,0x74,
-0x69,0x63,0x31,0x13,0x6e,0x74,0x68,0x61,0xa3,0xe4,2,0x61,0xa2,0x48,0x65,0xa2,
-0xcf,0x69,1,0x67,0x30,0x72,0x14,0x61,0x67,0x61,0x6e,0x61,0x9d,0x10,0x68,1,
-0x70,0x3a,0x73,0x18,0x75,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x73,0xa3,0x4b,1,
-0x72,0x3c,0x75,0x19,0x73,0x75,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x73,0xa3,0x4c,
-0x11,0x69,0x76,0x1f,0x61,0x74,0x65,0x75,0x73,0x65,0x73,0x75,0x72,0x72,0x6f,0x67,
-0x61,0x74,0x65,0x73,0xa3,0x4c,2,0x6c,0x32,0x6e,0x9a,0x74,0x12,0x72,0x61,0x6e,
-0xa5,2,0x10,0x66,2,0x61,0x58,0x6d,0x70,0x77,0x14,0x69,0x64,0x74,0x68,0x61,
-0x1f,0x6e,0x64,0x66,0x75,0x6c,0x6c,0x77,0x69,0x64,0x74,0x68,0x66,0x6f,0x72,0x6d,
-0x73,0xa3,0x57,0x1a,0x6e,0x64,0x66,0x75,0x6c,0x6c,0x66,0x6f,0x72,0x6d,0x73,0xa3,
-0x57,0x13,0x61,0x72,0x6b,0x73,0xa3,0x52,1,0x67,0x2e,0x75,0x12,0x6e,0x6f,0x6f,
-0xa3,0x63,0x11,0x75,0x6c,0xa2,0x4a,2,0x63,0x3c,0x6a,0x5e,0x73,0x17,0x79,0x6c,
-0x6c,0x61,0x62,0x6c,0x65,0x73,0xa3,0x4a,0x1f,0x6f,0x6d,0x70,0x61,0x74,0x69,0x62,
-0x69,0x6c,0x69,0x74,0x79,0x6a,0x61,0x6d,0x6f,0xa3,0x41,0x12,0x61,0x6d,0x6f,0x5c,
-0x17,0x65,0x78,0x74,0x65,0x6e,0x64,0x65,0x64,1,0x61,0xa3,0xb4,0x62,0xa3,0xb9,
-0x13,0x62,0x72,0x65,0x77,0x37,0x61,0xa2,0xe9,0x62,0xa6,0x29,0x63,0xa6,0xfe,0x64,
-0xac,0x7b,0x65,5,0x6d,0xa2,0x6d,0x86,0x6e,0x96,0x74,0x15,0x68,0x69,0x6f,0x70,
-0x69,0x63,0x5e,1,0x65,0x40,0x73,0x11,0x75,0x70,0xa2,0x86,0x16,0x70,0x6c,0x65,
-0x6d,0x65,0x6e,0x74,0xa3,0x86,0x11,0x78,0x74,0xa2,0x85,1,0x61,0xa3,0xc8,0x65,
-0x13,0x6e,0x64,0x65,0x64,0xa2,0x85,0x10,0x61,0xa3,0xc8,0x16,0x6f,0x74,0x69,0x63,
-0x6f,0x6e,0x73,0xa3,0xce,0x15,0x63,0x6c,0x6f,0x73,0x65,0x64,2,0x61,0x5a,0x63,
-0x9e,0x69,0x1c,0x64,0x65,0x6f,0x67,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x75,0x70,
-0xa2,0xc4,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xc4,0x16,0x6c,0x70,0x68,
-0x61,0x6e,0x75,0x6d,0x86,1,0x65,0x2c,0x73,0x11,0x75,0x70,0xa3,0xc3,0x13,0x72,
-0x69,0x63,0x73,0x86,0x18,0x75,0x70,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xc3,
-0x11,0x6a,0x6b,0xa2,0x44,0x1f,0x6c,0x65,0x74,0x74,0x65,0x72,0x73,0x61,0x6e,0x64,
-0x6d,0x6f,0x6e,0x74,0x68,0x73,0xa3,0x44,0x61,0x36,0x67,0x62,0x6c,0x14,0x62,0x61,
-0x73,0x61,0x6e,0xa3,0xe2,0x13,0x72,0x6c,0x79,0x64,0x1f,0x79,0x6e,0x61,0x73,0x74,
-0x69,0x63,0x63,0x75,0x6e,0x65,0x69,0x66,0x6f,0x72,0x6d,0xa5,1,0x10,0x79,0x1f,
-0x70,0x74,0x69,0x61,0x6e,0x68,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,
-0xa3,0xc2,7,0x6e,0xc0,0xe5,0x6e,0x3e,0x72,0xa2,0x5d,0x73,0xa2,0xd8,0x76,0x14,
-0x65,0x73,0x74,0x61,0x6e,0xa3,0xbc,1,0x61,0x92,0x63,0x13,0x69,0x65,0x6e,0x74,
-1,0x67,0x34,0x73,0x15,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0xa5,0x13,0x72,0x65,
-0x65,0x6b,1,0x6d,0x34,0x6e,0x15,0x75,0x6d,0x62,0x65,0x72,0x73,0xa3,0x7f,0x13,
-0x75,0x73,0x69,0x63,0xa2,0x7e,0x19,0x61,0x6c,0x6e,0x6f,0x74,0x61,0x74,0x69,0x6f,
-0x6e,0xa3,0x7e,0x10,0x74,0x1f,0x6f,0x6c,0x69,0x61,0x6e,0x68,0x69,0x65,0x72,0x6f,
-0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0xfe,2,0x61,0x32,0x6d,0xa2,0x71,0x72,0x12,
-0x6f,0x77,0x73,0x7d,0x12,0x62,0x69,0x63,0x38,3,0x65,0x4a,0x6d,0x66,0x70,0xa2,
-0x43,0x73,0x11,0x75,0x70,0xa2,0x80,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,
-0x80,0x11,0x78,0x74,1,0x61,0xa3,0xd2,0x65,0x14,0x6e,0x64,0x65,0x64,0x61,0xa3,
-0xd2,0x12,0x61,0x74,0x68,0xa2,0xd3,0x18,0x65,0x6d,0x61,0x74,0x69,0x63,0x61,0x6c,
-0x61,0x1f,0x6c,0x70,0x68,0x61,0x62,0x65,0x74,0x69,0x63,0x73,0x79,0x6d,0x62,0x6f,
-0x6c,0x73,0xa3,0xd3,1,0x66,0x42,0x72,0x1e,0x65,0x73,0x65,0x6e,0x74,0x61,0x74,
-0x69,0x6f,0x6e,0x66,0x6f,0x72,0x6d,0x73,1,0x61,0xa3,0x51,0x62,0xa3,0x55,0x14,
-0x65,0x6e,0x69,0x61,0x6e,0x35,0x12,0x63,0x69,0x69,0x23,0x64,0x9e,0x65,0xa2,0x42,
-0x68,0xa2,0x4d,0x6c,1,0x63,0x62,0x70,0x17,0x68,0x61,0x62,0x65,0x74,0x69,0x63,
-0x70,1,0x66,0xa3,0x50,0x72,0x1e,0x65,0x73,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,
-0x6e,0x66,0x6f,0x72,0x6d,0x73,0xa3,0x50,0x16,0x68,0x65,0x6d,0x69,0x63,0x61,0x6c,
-0xa2,0xd0,0x16,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0xd0,0x12,0x6c,0x61,0x6d,
-0xa5,7,0x1a,0x67,0x65,0x61,0x6e,0x6e,0x75,0x6d,0x62,0x65,0x72,0x73,0xa3,0x77,
-0x11,0x6f,0x6d,0xa3,0xfd,7,0x6f,0x71,0x6f,0x64,0x72,0xa2,0x41,0x75,0xa2,0x58,
-0x79,0x1b,0x7a,0x61,0x6e,0x74,0x69,0x6e,0x65,0x6d,0x75,0x73,0x69,0x63,0xa2,0x5b,
-0x18,0x61,0x6c,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x5b,1,0x70,0x34,0x78,
-0x16,0x64,0x72,0x61,0x77,0x69,0x6e,0x67,0x89,0x14,0x6f,0x6d,0x6f,0x66,0x6f,0xa0,
-0x12,0x65,0x78,0x74,0xa2,0x43,0x14,0x65,0x6e,0x64,0x65,0x64,0xa3,0x43,0x10,0x61,
-1,0x68,0x40,0x69,0x12,0x6c,0x6c,0x65,0x92,0x17,0x70,0x61,0x74,0x74,0x65,0x72,
-0x6e,0x73,0x93,0x11,0x6d,0x69,0xa3,0xc9,1,0x67,0x2c,0x68,0x11,0x69,0x64,0xa3,
-0x64,0x14,0x69,0x6e,0x65,0x73,0x65,0xa3,0x81,0x61,0x48,0x65,0xa2,0x4e,0x68,0xa2,
-0x52,0x6c,0x1a,0x6f,0x63,0x6b,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x73,0x8b,3,
-0x6c,0x34,0x6d,0x40,0x73,0x66,0x74,0x11,0x61,0x6b,0xa3,0xc7,0x14,0x69,0x6e,0x65,
-0x73,0x65,0xa3,0x93,0x11,0x75,0x6d,0xa2,0xb1,0x12,0x73,0x75,0x70,0xa2,0xca,0x16,
-0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xca,1,0x69,0x30,0x73,0x13,0x61,0x76,
-0x61,0x68,0xa3,0xdd,0x15,0x63,0x6c,0x61,0x74,0x69,0x6e,0x23,0x14,0x6e,0x67,0x61,
-0x6c,0x69,0x41,0x16,0x61,0x69,0x6b,0x73,0x75,0x6b,0x69,0xa5,8,5,0x6f,0xc1,
-0x4c,0x6f,0xa2,0x55,0x75,0xa4,0x10,0x79,1,0x70,0x9c,0x72,0x14,0x69,0x6c,0x6c,
-0x69,0x63,0x32,1,0x65,0x4c,0x73,0x11,0x75,0x70,0xa2,0x61,0x16,0x70,0x6c,0x65,
-0x6d,0x65,0x6e,0x74,0xa2,0x61,0x12,0x61,0x72,0x79,0xa3,0x61,0x11,0x78,0x74,3,
-0x61,0xa3,0x9e,0x62,0xa3,0xa0,0x63,0xa5,9,0x65,0x13,0x6e,0x64,0x65,0x64,2,
-0x61,0xa3,0x9e,0x62,0xa3,0xa0,0x63,0xa5,9,0x1c,0x72,0x69,0x6f,0x74,0x73,0x79,
-0x6c,0x6c,0x61,0x62,0x61,0x72,0x79,0xa3,0x7b,3,0x6d,0x5a,0x6e,0xa2,0x95,0x70,
-0xa2,0xa0,0x75,0x17,0x6e,0x74,0x69,0x6e,0x67,0x72,0x6f,0x64,0xa2,0x9a,0x17,0x6e,
-0x75,0x6d,0x65,0x72,0x61,0x6c,0x73,0xa3,0x9a,2,0x62,0x3a,0x6d,0xa2,0x5f,0x70,
-0x15,0x61,0x74,0x6a,0x61,0x6d,0x6f,0xa3,0x41,0x14,0x69,0x6e,0x69,0x6e,0x67,2,
-0x64,0x46,0x68,0x9e,0x6d,0x1d,0x61,0x72,0x6b,0x73,0x66,0x6f,0x72,0x73,0x79,0x6d,
-0x62,0x6f,0x6c,0x73,0x77,0x1e,0x69,0x61,0x63,0x72,0x69,0x74,0x69,0x63,0x61,0x6c,
-0x6d,0x61,0x72,0x6b,0x73,0x2e,2,0x65,0x40,0x66,0xa6,0x1b,0x73,0x18,0x75,0x70,
-0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x83,0x16,0x78,0x74,0x65,0x6e,0x64,0x65,
-0x64,0xa3,0xe0,0x17,0x61,0x6c,0x66,0x6d,0x61,0x72,0x6b,0x73,0xa3,0x52,0x11,0x6f,
-0x6e,0x1f,0x69,0x6e,0x64,0x69,0x63,0x6e,0x75,0x6d,0x62,0x65,0x72,0x66,0x6f,0x72,
-0x6d,0x73,0xa3,0xb2,0x1b,0x74,0x72,0x6f,0x6c,0x70,0x69,0x63,0x74,0x75,0x72,0x65,
-0x73,0x83,0x12,0x74,0x69,0x63,0xa2,0x84,0x1b,0x65,0x70,0x61,0x63,0x74,0x6e,0x75,
-0x6d,0x62,0x65,0x72,0x73,0xa3,0xdf,1,0x6e,0x3e,0x72,0x1b,0x72,0x65,0x6e,0x63,
-0x79,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x75,0x15,0x65,0x69,0x66,0x6f,0x72,0x6d,
-0xa2,0x98,0x16,0x6e,0x75,0x6d,0x62,0x65,0x72,0x73,0xa2,0x99,0x1d,0x61,0x6e,0x64,
-0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xa3,0x99,0x61,0xa2,0xda,
-0x68,0xa4,4,0x6a,0x10,0x6b,0xa2,0x47,4,0x63,0x8e,0x65,0xa2,0x81,0x72,0xa2,
-0x91,0x73,0xa2,0xa3,0x75,0x1f,0x6e,0x69,0x66,0x69,0x65,0x64,0x69,0x64,0x65,0x6f,
-0x67,0x72,0x61,0x70,0x68,0x73,0xa2,0x47,0x18,0x65,0x78,0x74,0x65,0x6e,0x73,0x69,
-0x6f,0x6e,4,0x61,0xa3,0x46,0x62,0xa3,0x5e,0x63,0xa3,0xc5,0x64,0xa3,0xd1,0x65,
-0xa5,0,0x14,0x6f,0x6d,0x70,0x61,0x74,0xa2,0x45,1,0x66,0x96,0x69,1,0x62,
-0x44,0x64,0x17,0x65,0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0xa2,0x4f,0x12,0x73,0x75,
-0x70,0xa3,0x5f,0x14,0x69,0x6c,0x69,0x74,0x79,0xa2,0x45,1,0x66,0x54,0x69,0x18,
-0x64,0x65,0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0xa2,0x4f,0x19,0x73,0x75,0x70,0x70,
-0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x5f,0x13,0x6f,0x72,0x6d,0x73,0xa3,0x53,0x11,
-0x78,0x74,4,0x61,0xa3,0x46,0x62,0xa3,0x5e,0x63,0xa3,0xc5,0x64,0xa3,0xd1,0x65,
-0xa5,0,0x19,0x61,0x64,0x69,0x63,0x61,0x6c,0x73,0x73,0x75,0x70,0x94,0x16,0x70,
-0x6c,0x65,0x6d,0x65,0x6e,0x74,0x95,1,0x74,0x50,0x79,0x14,0x6d,0x62,0x6f,0x6c,
-0x73,0x9a,0x1d,0x61,0x6e,0x64,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,
-0x6e,0x9b,0x14,0x72,0x6f,0x6b,0x65,0x73,0xa3,0x82,2,0x6e,0x48,0x72,0x64,0x75,
-0x1d,0x63,0x61,0x73,0x69,0x61,0x6e,0x61,0x6c,0x62,0x61,0x6e,0x69,0x61,0x6e,0xa3,
-0xde,0x1d,0x61,0x64,0x69,0x61,0x6e,0x73,0x79,0x6c,0x6c,0x61,0x62,0x69,0x63,0x73,
-0x63,0x12,0x69,0x61,0x6e,0xa3,0xa8,1,0x61,0x50,0x65,0x14,0x72,0x6f,0x6b,0x65,
-0x65,0x60,0x12,0x73,0x75,0x70,0xa2,0xff,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,
-0xa3,0xff,1,0x6b,0x26,0x6d,0xa3,0xa4,0x11,0x6d,0x61,0xa3,0xd4,3,0x65,0x3e,
-0x69,0x7e,0x6f,0xa2,0x5d,0x75,0x15,0x70,0x6c,0x6f,0x79,0x61,0x6e,0xa3,0xe1,1,
-0x73,0x50,0x76,0x16,0x61,0x6e,0x61,0x67,0x61,0x72,0x69,0x3e,0x12,0x65,0x78,0x74,
-0xa2,0xb3,0x14,0x65,0x6e,0x64,0x65,0x64,0xa3,0xb3,0x13,0x65,0x72,0x65,0x74,0xa3,
-0x5a,1,0x61,0x30,0x6e,0x14,0x67,0x62,0x61,0x74,0x73,0x91,0x18,0x63,0x72,0x69,
-0x74,0x69,0x63,0x61,0x6c,0x73,0x2e,2,0x65,0x30,0x66,0x36,0x73,0x11,0x75,0x70,
-0xa3,0x83,0x11,0x78,0x74,0xa3,0xe0,0x18,0x6f,0x72,0x73,0x79,0x6d,0x62,0x6f,0x6c,
-0x73,0x77,0x13,0x6d,0x69,0x6e,0x6f,0xa2,0xab,0x14,0x74,0x69,0x6c,0x65,0x73,0xa3,
-0xab,8,0x6d,0x5f,0x6d,0x3a,0x6e,0x48,0x73,0x7a,0x76,0xa2,0x4b,0x77,0x12,0x69,
-0x64,0x65,0x43,0x11,0x65,0x64,0x32,0x12,0x69,0x61,0x6c,0x33,2,0x61,0x40,0x62,
-0x37,0x6f,1,0x62,0x28,0x6e,0x10,0x65,0x21,0x13,0x72,0x65,0x61,0x6b,0x37,0x10,
-0x72,0x34,0x12,0x72,0x6f,0x77,0x35,2,0x6d,0x38,0x71,0x46,0x75,1,0x62,0x3d,
-0x70,0x3e,0x11,0x65,0x72,0x3f,1,0x61,0x24,0x6c,0x39,0x11,0x6c,0x6c,0x39,1,
-0x72,0x3b,0x75,0x12,0x61,0x72,0x65,0x3b,0x12,0x65,0x72,0x74,0x40,0x13,0x69,0x63,
-0x61,0x6c,0x41,0x63,0x58,0x65,0x92,0x66,0x96,0x69,1,0x6e,0x36,0x73,0x10,0x6f,
-0x30,0x14,0x6c,0x61,0x74,0x65,0x64,0x31,0x11,0x69,0x74,0x2e,0x12,0x69,0x61,0x6c,
-0x2f,2,0x61,0x36,0x69,0x48,0x6f,0x10,0x6d,0x24,0x12,0x70,0x61,0x74,0x25,0x10,
-0x6e,0x22,0x15,0x6f,0x6e,0x69,0x63,0x61,0x6c,0x23,0x13,0x72,0x63,0x6c,0x65,0x27,
-0x11,0x6e,0x63,0x27,2,0x69,0x3a,0x6f,0x44,0x72,0x10,0x61,0x2c,0x14,0x63,0x74,
-0x69,0x6f,0x6e,0x2d,0x10,0x6e,0x28,0x11,0x61,0x6c,0x29,0x11,0x6e,0x74,0x2b,4,
-0x61,0x3a,0x66,0x4c,0x68,0x5e,0x6e,0x70,0x77,0x2a,0x12,0x69,0x64,0x65,0x2b,0x22,
-0x17,0x6d,0x62,0x69,0x67,0x75,0x6f,0x75,0x73,0x23,0x26,0x17,0x75,0x6c,0x6c,0x77,
-0x69,0x64,0x74,0x68,0x27,0x24,0x17,0x61,0x6c,0x66,0x77,0x69,0x64,0x74,0x68,0x25,
-0x20,1,0x61,0x30,0x65,0x14,0x75,0x74,0x72,0x61,0x6c,0x21,0x28,0x13,0x72,0x72,
-0x6f,0x77,0x29,0xd,0x6e,0xc0,0xfb,0x73,0x6d,0x73,0x3a,0x74,0x98,0x75,0xa2,0x49,
-0x7a,2,0x6c,0x3b,0x70,0x3d,0x73,0x39,5,0x6f,0x28,0x6f,0x57,0x70,0x34,0x75,
-0x16,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x45,0x11,0x61,0x63,1,0x65,0x32,0x69,
-0x15,0x6e,0x67,0x6d,0x61,0x72,0x6b,0x31,0x18,0x73,0x65,0x70,0x61,0x72,0x61,0x74,
-0x6f,0x72,0x39,0x63,0x53,0x6b,0x55,0x6d,0x51,0x1d,0x69,0x74,0x6c,0x65,0x63,0x61,
-0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x27,1,0x6e,0x40,0x70,0x1c,0x70,0x65,
-0x72,0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x23,0x17,0x61,0x73,0x73,
-0x69,0x67,0x6e,0x65,0x64,0x21,0x6e,0x8a,0x6f,0xa2,0x47,0x70,8,0x66,0x14,0x66,
-0x5b,0x69,0x59,0x6f,0x4f,0x72,0x24,0x73,0x49,0x17,0x69,0x76,0x61,0x74,0x65,0x75,
-0x73,0x65,0x43,0x61,0x2c,0x63,0x4d,0x64,0x47,0x65,0x4b,0x1f,0x72,0x61,0x67,0x72,
-0x61,0x70,0x68,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0x3d,2,0x64,0x33,
-0x6c,0x35,0x6f,0x36,0x1b,0x6e,0x73,0x70,0x61,0x63,0x69,0x6e,0x67,0x6d,0x61,0x72,
-0x6b,0x2d,1,0x70,0x7c,0x74,0x12,0x68,0x65,0x72,3,0x6c,0x38,0x6e,0x42,0x70,
-0x4c,0x73,0x14,0x79,0x6d,0x62,0x6f,0x6c,0x57,0x14,0x65,0x74,0x74,0x65,0x72,0x2b,
-0x14,0x75,0x6d,0x62,0x65,0x72,0x37,0x19,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,
-0x6f,0x6e,0x4f,0x1c,0x65,0x6e,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,
-0x6e,0x49,0x66,0x9e,0x66,0x88,0x69,0xa2,0x4b,0x6c,0xa2,0x5c,0x6d,4,0x61,0x60,
-0x63,0x31,0x65,0x2f,0x6e,0x2d,0x6f,0x15,0x64,0x69,0x66,0x69,0x65,0x72,1,0x6c,
-0x30,0x73,0x14,0x79,0x6d,0x62,0x6f,0x6c,0x55,0x14,0x65,0x74,0x74,0x65,0x72,0x29,
-0x17,0x74,0x68,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x51,1,0x69,0x2e,0x6f,0x13,0x72,
-0x6d,0x61,0x74,0x41,0x1d,0x6e,0x61,0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,
-0x69,0x6f,0x6e,0x5b,0x10,0x6e,0x1f,0x69,0x74,0x69,0x61,0x6c,0x70,0x75,0x6e,0x63,
-0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x59,6,0x6d,0x18,0x6d,0x29,0x6f,0x28,0x74,
-0x27,0x75,0x23,0x2a,0x1c,0x77,0x65,0x72,0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74,
-0x65,0x72,0x25,0x65,0x28,0x69,0x3c,0x6c,0x25,0x19,0x74,0x74,0x65,0x72,0x6e,0x75,
-0x6d,0x62,0x65,0x72,0x35,0x1a,0x6e,0x65,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,
-0x72,0x3b,0x63,0x44,0x64,0xa2,0x60,0x65,0x1b,0x6e,0x63,0x6c,0x6f,0x73,0x69,0x6e,
-0x67,0x6d,0x61,0x72,0x6b,0x2f,6,0x6e,0x39,0x6e,0x46,0x6f,0x4e,0x73,0x45,0x75,
-0x1b,0x72,0x72,0x65,0x6e,0x63,0x79,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x53,0x20,0x12,
-0x74,0x72,0x6c,0x3f,0x42,0x10,0x6e,1,0x6e,0x2c,0x74,0x12,0x72,0x6f,0x6c,0x3f,
-0x1f,0x65,0x63,0x74,0x6f,0x72,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,
-0x6e,0x4d,0x63,0x3f,0x66,0x41,0x6c,0x1d,0x6f,0x73,0x65,0x70,0x75,0x6e,0x63,0x74,
-0x75,0x61,0x74,0x69,0x6f,0x6e,0x4b,2,0x61,0x30,0x65,0x4a,0x69,0x12,0x67,0x69,
-0x74,0x33,0x1c,0x73,0x68,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,
-0x47,0x1a,0x63,0x69,0x6d,0x61,0x6c,0x6e,0x75,0x6d,0x62,0x65,0x72,0x33,0,0x12,
-0x6d,0xc1,0xec,0x73,0xa1,0x73,0x4e,0x74,0xa2,0x56,0x77,0xa2,0x72,0x79,0xa2,0x73,
-0x7a,1,0x61,0x2c,0x68,0x12,0x61,0x69,0x6e,0x8b,0x11,0x69,0x6e,0x85,5,0x74,
-0x22,0x74,0x38,0x77,0x4c,0x79,0x16,0x72,0x69,0x61,0x63,0x77,0x61,0x77,0x6f,0x18,
-0x72,0x61,0x69,0x67,0x68,0x74,0x77,0x61,0x77,0xa3,0x55,0x15,0x61,0x73,0x68,0x6b,
-0x61,0x66,0x6d,0x61,0x2e,0x65,0x38,0x68,0x11,0x69,0x6e,0x6b,0x10,0x64,0x62,0x11,
-0x68,0x65,0x65,1,0x65,0x2e,0x6d,0x13,0x6b,0x61,0x74,0x68,0x69,0x10,0x6e,0x67,
-1,0x61,0x4e,0x65,1,0x68,0x28,0x74,0x10,0x68,0x77,0x16,0x6d,0x61,0x72,0x62,
-0x75,0x74,0x61,0x74,0x13,0x67,0x6f,0x61,0x6c,0x3d,1,0x68,0x71,0x77,0x73,0x11,
-0x61,0x77,0x79,1,0x65,0x32,0x75,0x11,0x64,0x68,0x80,0x11,0x68,0x65,0x83,0x10,
-0x68,0x7a,1,0x62,0x34,0x77,0x16,0x69,0x74,0x68,0x74,0x61,0x69,0x6c,0x7f,0x14,
-0x61,0x72,0x72,0x65,0x65,0x7d,0x6d,0x6c,0x6e,0xa4,0x18,0x70,0xa4,0x35,0x71,0xa4,
-0x35,0x72,1,0x65,0x38,0x6f,0x18,0x68,0x69,0x6e,0x67,0x79,0x61,0x79,0x65,0x68,
-0x93,1,0x68,0x5f,0x76,0x16,0x65,0x72,0x73,0x65,0x64,0x70,0x65,0x61,2,0x61,
-0x2e,0x65,0xa2,0xeb,0x69,0x10,0x6d,0x53,0x17,0x6e,0x69,0x63,0x68,0x61,0x65,0x61,
-0x6e,0,0x12,0x6e,0x76,0x73,0x51,0x73,0x3e,0x74,0x5c,0x77,0xa0,0x79,0xa2,0x42,
-0x7a,0x13,0x61,0x79,0x69,0x6e,0xa3,0x54,0x10,0x61,1,0x64,0x2e,0x6d,0x12,0x65,
-0x6b,0x68,0xa3,0x4c,0x11,0x68,0x65,0xa3,0x4b,3,0x61,0x38,0x65,0x3c,0x68,0x4a,
-0x77,0x13,0x65,0x6e,0x74,0x79,0xa3,0x51,0x10,0x77,0xa3,0x4d,1,0x6e,0xa3,0x4e,
-0x74,0x10,0x68,0xa3,0x4f,0x14,0x61,0x6d,0x65,0x64,0x68,0xa3,0x50,0x11,0x61,0x77,
-0xa3,0x52,0x12,0x6f,0x64,0x68,0xa3,0x53,0x6e,0x3a,0x6f,0x40,0x70,0x46,0x71,0x4a,
-0x72,0x12,0x65,0x73,0x68,0xa3,0x4a,0x11,0x75,0x6e,0xa3,0x46,0x11,0x6e,0x65,0xa3,
-0x47,0x10,0x65,0xa3,0x48,0x12,0x6f,0x70,0x68,0xa3,0x49,0x67,0x33,0x67,0x38,0x68,
-0x40,0x6b,0x5e,0x6c,0x66,0x6d,0x11,0x65,0x6d,0xa3,0x45,0x13,0x69,0x6d,0x65,0x6c,
-0xa1,1,0x65,0x32,0x75,0x14,0x6e,0x64,0x72,0x65,0x64,0xa3,0x42,0x11,0x74,0x68,
-0xa3,0x41,0x12,0x61,0x70,0x68,0xa3,0x43,0x14,0x61,0x6d,0x65,0x64,0x68,0xa3,0x44,
-0x61,0x34,0x62,0x4a,0x64,0x50,0x66,0x12,0x69,0x76,0x65,0x9f,1,0x6c,0x2a,0x79,
-0x11,0x69,0x6e,0x97,0x12,0x65,0x70,0x68,0x95,0x12,0x65,0x74,0x68,0x99,1,0x61,
-0x30,0x68,0x14,0x61,0x6d,0x65,0x64,0x68,0x9d,0x13,0x6c,0x65,0x74,0x68,0x9b,0x11,
-0x65,0x6d,0x51,2,0x6f,0x2c,0x75,0x50,0x79,0x10,0x61,0x91,1,0x6a,0x28,0x6f,
-0x10,0x6e,0x55,0x1a,0x6f,0x69,0x6e,0x69,0x6e,0x67,0x67,0x72,0x6f,0x75,0x70,0x21,
-0x10,0x6e,0x57,0x10,0x65,0x59,0x10,0x61,1,0x66,0x5b,0x70,0x10,0x68,0x5d,0x66,
-0x7b,0x66,0x42,0x67,0x7a,0x68,0x8a,0x6b,0xa2,0x56,0x6c,0x11,0x61,0x6d,0x4c,0x12,
-0x61,0x64,0x68,0x4f,2,0x61,0x3e,0x65,0x4a,0x69,0x19,0x6e,0x61,0x6c,0x73,0x65,
-0x6d,0x6b,0x61,0x74,0x68,0x35,0x15,0x72,0x73,0x69,0x79,0x65,0x68,0x8f,0x86,0x10,
-0x68,0x33,0x10,0x61,1,0x66,0x37,0x6d,0x11,0x61,0x6c,0x39,1,0x61,0x40,0x65,
-0x3e,1,0x68,0x28,0x74,0x10,0x68,0x45,0x40,0x13,0x67,0x6f,0x61,0x6c,0x43,1,
-0x68,0x3b,0x6d,0x1a,0x7a,0x61,0x6f,0x6e,0x68,0x65,0x68,0x67,0x6f,0x61,0x6c,0x3d,
-2,0x61,0x3a,0x68,0x44,0x6e,0x17,0x6f,0x74,0x74,0x65,0x64,0x68,0x65,0x68,0x4b,
-1,0x66,0x47,0x70,0x10,0x68,0x49,0x12,0x61,0x70,0x68,0x89,0x61,0x2e,0x62,0x8a,
-0x64,0xa2,0x51,0x65,0x31,2,0x66,0x3c,0x69,0x70,0x6c,1,0x61,0x28,0x65,0x10,
-0x66,0x27,0x11,0x70,0x68,0x25,0x14,0x72,0x69,0x63,0x61,0x6e,2,0x66,0x30,0x6e,
-0x36,0x71,0x11,0x61,0x66,0xa3,0x58,0x11,0x65,0x68,0xa3,0x56,0x12,0x6f,0x6f,0x6e,
-0xa3,0x57,0x10,0x6e,0x23,1,0x65,0x4a,0x75,0x10,0x72,0x1f,0x75,0x73,0x68,0x61,
-0x73,0x6b,0x69,0x79,0x65,0x68,0x62,0x61,0x72,0x72,0x65,0x65,0x8d,1,0x68,0x29,
-0x74,0x10,0x68,0x2b,0x11,0x61,0x6c,0x2c,0x16,0x61,0x74,0x68,0x72,0x69,0x73,0x68,
-0x2f,7,0x6e,0x2e,0x6e,0x2c,0x72,0x3e,0x74,0x56,0x75,0x21,0x18,0x6f,0x6e,0x6a,
-0x6f,0x69,0x6e,0x69,0x6e,0x67,0x21,0x28,0x1a,0x69,0x67,0x68,0x74,0x6a,0x6f,0x69,
-0x6e,0x69,0x6e,0x67,0x29,0x2a,0x19,0x72,0x61,0x6e,0x73,0x70,0x61,0x72,0x65,0x6e,
-0x74,0x2b,0x63,0x23,0x64,0x40,0x6a,0x56,0x6c,0x26,0x19,0x65,0x66,0x74,0x6a,0x6f,
-0x69,0x6e,0x69,0x6e,0x67,0x27,0x24,0x19,0x75,0x61,0x6c,0x6a,0x6f,0x69,0x6e,0x69,
-0x6e,0x67,0x25,0x19,0x6f,0x69,0x6e,0x63,0x61,0x75,0x73,0x69,0x6e,0x67,0x23,0,
-0x13,0x6e,0xc0,0xd0,0x73,0x49,0x73,0x48,0x75,0x78,0x77,0x84,0x78,0x9c,0x7a,0x10,
-0x77,0x58,1,0x6a,0x75,0x73,0x13,0x70,0x61,0x63,0x65,0x59,4,0x61,0x51,0x67,
-0x53,0x70,0x28,0x75,0x30,0x79,0x57,0x54,0x12,0x61,0x63,0x65,0x55,0x16,0x72,0x72,
-0x6f,0x67,0x61,0x74,0x65,0x53,0x15,0x6e,0x6b,0x6e,0x6f,0x77,0x6e,0x21,1,0x6a,
-0x5d,0x6f,0x17,0x72,0x64,0x6a,0x6f,0x69,0x6e,0x65,0x72,0x5d,0x10,0x78,0x21,0x6e,
-0x60,0x6f,0xa2,0x41,0x70,0xa2,0x50,0x71,0xa2,0x6e,0x72,1,0x65,0x24,0x69,0x6f,
-0x1e,0x67,0x69,0x6f,0x6e,0x61,0x6c,0x69,0x6e,0x64,0x69,0x63,0x61,0x74,0x6f,0x72,
-0x6f,4,0x65,0x3e,0x6c,0x5b,0x6f,0x46,0x73,0x45,0x75,0x46,0x14,0x6d,0x65,0x72,
-0x69,0x63,0x47,0x15,0x78,0x74,0x6c,0x69,0x6e,0x65,0x5b,0x17,0x6e,0x73,0x74,0x61,
-0x72,0x74,0x65,0x72,0x45,0x10,0x70,0x48,0x1c,0x65,0x6e,0x70,0x75,0x6e,0x63,0x74,
-0x75,0x61,0x74,0x69,0x6f,0x6e,0x49,1,0x6f,0x3e,0x72,0x4c,0x1a,0x65,0x66,0x69,
-0x78,0x6e,0x75,0x6d,0x65,0x72,0x69,0x63,0x4d,0x4a,0x1b,0x73,0x74,0x66,0x69,0x78,
-0x6e,0x75,0x6d,0x65,0x72,0x69,0x63,0x4b,0x10,0x75,0x4e,0x16,0x6f,0x74,0x61,0x74,
-0x69,0x6f,0x6e,0x4f,0x68,0x7b,0x68,0x50,0x69,0x86,0x6a,0xa2,0x61,0x6c,0xa2,0x65,
-0x6d,0x1c,0x61,0x6e,0x64,0x61,0x74,0x6f,0x72,0x79,0x62,0x72,0x65,0x61,0x6b,0x2d,
-4,0x32,0x5f,0x33,0x61,0x65,0x34,0x6c,0x6d,0x79,0x3a,0x13,0x70,0x68,0x65,0x6e,
-0x3b,0x19,0x62,0x72,0x65,0x77,0x6c,0x65,0x74,0x74,0x65,0x72,0x6d,2,0x64,0x28,
-0x6e,0x3c,0x73,0x41,0x3c,0x18,0x65,0x6f,0x67,0x72,0x61,0x70,0x68,0x69,0x63,0x3d,
-0x3e,1,0x66,0x3e,0x73,0x11,0x65,0x70,1,0x61,0x22,0x65,0x14,0x72,0x61,0x62,
-0x6c,0x65,0x3f,0x18,0x69,0x78,0x6e,0x75,0x6d,0x65,0x72,0x69,0x63,0x41,2,0x6c,
-0x63,0x74,0x65,0x76,0x67,1,0x66,0x43,0x69,0x15,0x6e,0x65,0x66,0x65,0x65,0x64,
-0x43,0x61,0x40,0x62,0x70,0x63,0xa2,0x55,0x65,0xa2,0xdb,0x67,0x10,0x6c,0x38,0x11,
-0x75,0x65,0x39,2,0x69,0x23,0x6c,0x34,0x6d,0x16,0x62,0x69,0x67,0x75,0x6f,0x75,
-0x73,0x23,0x24,0x17,0x70,0x68,0x61,0x62,0x65,0x74,0x69,0x63,0x25,4,0x32,0x27,
-0x61,0x29,0x62,0x2b,0x6b,0x2d,0x72,0x12,0x65,0x61,0x6b,2,0x61,0x36,0x62,0x3e,
-0x73,0x15,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x57,0x13,0x66,0x74,0x65,0x72,0x29,1,
-0x65,0x2a,0x6f,0x11,0x74,0x68,0x27,0x13,0x66,0x6f,0x72,0x65,0x2b,7,0x6d,0x51,
-0x6d,0x33,0x6f,0x28,0x70,0x69,0x72,0x35,1,0x6d,0x76,0x6e,1,0x64,0x3c,0x74,
-0x1a,0x69,0x6e,0x67,0x65,0x6e,0x74,0x62,0x72,0x65,0x61,0x6b,0x2f,0x15,0x69,0x74,
-0x69,0x6f,0x6e,0x61,0x1f,0x6c,0x6a,0x61,0x70,0x61,0x6e,0x65,0x73,0x65,0x73,0x74,
-0x61,0x72,0x74,0x65,0x72,0x6b,1,0x62,0x3a,0x70,0x19,0x6c,0x65,0x78,0x63,0x6f,
-0x6e,0x74,0x65,0x78,0x74,0x51,0x18,0x69,0x6e,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,
-0x33,0x61,0x6a,0x62,0x2f,0x6a,0x6b,0x6c,0x30,0x13,0x6f,0x73,0x65,0x70,1,0x61,
-0x38,0x75,0x18,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x31,0x18,0x72,0x65,
-0x6e,0x74,0x68,0x65,0x73,0x69,0x73,0x69,0x1b,0x72,0x72,0x69,0x61,0x67,0x65,0x72,
-0x65,0x74,0x75,0x72,0x6e,0x35,2,0x62,0x3e,0x6d,0x46,0x78,0x36,0x18,0x63,0x6c,
-0x61,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x37,0x70,0x12,0x61,0x73,0x65,0x71,0x72,0x16,
-0x6f,0x64,0x69,0x66,0x69,0x65,0x72,0x73,1,0x64,0x42,0x6e,1,0x6f,0x32,0x75,
-0x26,0x14,0x6d,0x65,0x72,0x69,0x63,0x27,0x11,0x6e,0x65,0x21,1,0x65,0x2e,0x69,
-0x24,0x12,0x67,0x69,0x74,0x25,0x22,0x14,0x63,0x69,0x6d,0x61,0x6c,0x23,0,0x18,
-0x6e,0xc3,0x95,0x74,0xc1,0x38,0x77,0x61,0x77,0x88,0x78,0xa2,0x48,0x79,0xa2,0x52,
-0x7a,5,0x78,0x13,0x78,0x30,0x79,0x36,0x7a,0x11,0x7a,0x7a,0xa3,0x67,0x11,0x78,
-0x78,0xa3,0x66,0x11,0x79,0x79,0x21,0x69,0x38,0x6d,0x3c,0x73,0x10,0x79,1,0x65,
-0xa3,0xae,0x6d,0xa3,0x81,0x11,0x6e,0x68,0x23,0x11,0x74,0x68,0xa3,0x80,1,0x61,
-0x2c,0x6f,0x11,0x6c,0x65,0xa3,0x9b,0x11,0x72,0x61,0xa2,0x92,0x15,0x6e,0x67,0x63,
-0x69,0x74,0x69,0xa3,0x92,1,0x70,0x2c,0x73,0x11,0x75,0x78,0xa3,0x65,0x11,0x65,
-0x6f,0x9b,0x10,0x69,0x72,0x11,0x69,0x69,0x73,0x74,0x4a,0x75,0xa2,0xba,0x76,1,
-0x61,0x2c,0x69,0x11,0x73,0x70,0xa3,0x64,0x10,0x69,0xa2,0x63,0x10,0x69,0xa3,0x63,
-5,0x67,0x36,0x67,0x68,0x68,0x6c,0x69,2,0x62,0x3a,0x66,0x4a,0x72,0x10,0x68,
-0xa2,0x9e,0x12,0x75,0x74,0x61,0xa3,0x9e,1,0x65,0x24,0x74,0x6f,0x12,0x74,0x61,
-0x6e,0x6f,0x14,0x69,0x6e,0x61,0x67,0x68,0x99,0x11,0x6c,0x67,0x75,0x10,0x61,1,
-0x61,0x24,0x69,0x6d,0x6a,0x11,0x6e,0x61,0x6b,0x61,0x30,0x65,0xa2,0x5b,0x66,0x11,
-0x6e,0x67,0x99,6,0x6c,0x21,0x6c,0x32,0x6d,0x38,0x6e,0x44,0x76,0x10,0x74,0xa3,
-0x7f,1,0x65,0x89,0x75,0x97,1,0x69,0x24,0x6c,0x67,0x10,0x6c,0x67,0x10,0x67,
-0xa2,0x9a,0x11,0x75,0x74,0xa3,0x9a,0x67,0x36,0x69,0x52,0x6b,0x10,0x72,0xa2,0x99,
-0x10,0x69,0xa3,0x99,1,0x61,0x30,0x62,0x7a,0x13,0x61,0x6e,0x77,0x61,0x7b,0x12,
-0x6c,0x6f,0x67,0x75,2,0x6c,0x32,0x74,0x34,0x76,0x12,0x69,0x65,0x74,0xa3,0x7f,
-0x10,0x65,0x89,0x12,0x68,0x61,0x6d,0xa3,0x6a,1,0x6c,0x2a,0x6e,0x10,0x67,0xa3,
-0x62,0x10,0x75,0x68,0x11,0x67,0x75,0x69,1,0x67,0x32,0x6e,0x14,0x6b,0x6e,0x6f,
-0x77,0x6e,0xa3,0x67,0x11,0x61,0x72,0x8a,0x13,0x69,0x74,0x69,0x63,0x8b,0x71,0xc0,
-0xef,0x71,0xa2,0xc1,0x72,0xa2,0xc6,0x73,6,0x69,0x6d,0x69,0x72,0x6f,0xa2,0x4c,
-0x75,0xa2,0x58,0x79,1,0x6c,0x46,0x72,4,0x63,0x65,0x65,0xa3,0x5f,0x69,0x2c,
-0x6a,0xa3,0x60,0x6e,0xa3,0x61,0x11,0x61,0x63,0x65,0x10,0x6f,0x94,0x16,0x74,0x69,
-0x6e,0x61,0x67,0x72,0x69,0x95,2,0x64,0x3c,0x67,0x4c,0x6e,1,0x64,0xa3,0x91,
-0x68,0x62,0x12,0x61,0x6c,0x61,0x63,0x10,0x64,0xa2,0xa6,0x12,0x68,0x61,0x6d,0xa3,
-0xa6,0x17,0x6e,0x77,0x72,0x69,0x74,0x69,0x6e,0x67,0xa3,0x70,0x11,0x72,0x61,0xa2,
-0x98,0x16,0x73,0x6f,0x6d,0x70,0x65,0x6e,0x67,0xa3,0x98,0x11,0x6e,0x64,0xa2,0x71,
-0x14,0x61,0x6e,0x65,0x73,0x65,0xa3,0x71,0x61,0x5c,0x67,0xa2,0x43,0x68,1,0x61,
-0x2a,0x72,0x10,0x64,0xa3,0x97,2,0x72,0x28,0x76,0x30,0x77,0x87,0x12,0x61,0x64,
-0x61,0xa3,0x97,0x12,0x69,0x61,0x6e,0x87,2,0x6d,0x40,0x72,0x58,0x75,0x10,0x72,
-0xa2,0x6f,0x15,0x61,0x73,0x68,0x74,0x72,0x61,0xa3,0x6f,1,0x61,0x26,0x72,0xa3,
-0x7e,0x14,0x72,0x69,0x74,0x61,0x6e,0xa3,0x7e,1,0x61,0xa3,0x5e,0x62,0xa3,0x85,
-0x11,0x6e,0x77,0xa3,0x70,0x11,0x61,0x61,1,0x63,0x2f,0x69,0x23,3,0x65,0x3e,
-0x6a,0x48,0x6f,0x4e,0x75,0x10,0x6e,1,0x69,0x24,0x72,0x61,0x10,0x63,0x61,0x13,
-0x6a,0x61,0x6e,0x67,0xa3,0x6e,0x11,0x6e,0x67,0xa3,0x6e,0x11,0x72,0x6f,0xa3,0x5d,
-0x6e,0xa2,0x83,0x6f,0xa2,0xc1,0x70,5,0x6c,0x1e,0x6c,0x44,0x72,0x4a,0x73,0x1b,
-0x61,0x6c,0x74,0x65,0x72,0x70,0x61,0x68,0x6c,0x61,0x76,0x69,0xa3,0x7b,0x11,0x72,
-0x64,0xa3,0x5c,0x11,0x74,0x69,0xa3,0x7d,0x61,0x7c,0x65,0xa2,0x54,0x68,3,0x61,
-0x3e,0x6c,0x4e,0x6e,0x5e,0x6f,0x16,0x65,0x6e,0x69,0x63,0x69,0x61,0x6e,0xa3,0x5b,
-0x10,0x67,0xa2,0x5a,0x12,0x73,0x70,0x61,0xa3,0x5a,2,0x69,0xa3,0x7a,0x70,0xa3,
-0x7b,0x76,0xa3,0x7c,0x10,0x78,0xa3,0x5b,2,0x68,0x3e,0x6c,0x50,0x75,0x10,0x63,
-0xa2,0xa5,0x14,0x69,0x6e,0x68,0x61,0x75,0xa3,0xa5,0x17,0x61,0x77,0x68,0x68,0x6d,
-0x6f,0x6e,0x67,0xa3,0x4b,0x10,0x6d,0xa2,0x90,0x14,0x79,0x72,0x65,0x6e,0x65,0xa3,
-0x90,0x11,0x72,0x6d,0xa3,0x59,4,0x61,0x38,0x62,0x56,0x65,0x5c,0x6b,0x74,0x73,
-0x11,0x68,0x75,0xa3,0x96,1,0x62,0x2a,0x72,0x10,0x62,0xa3,0x8e,0x15,0x61,0x74,
-0x61,0x65,0x61,0x6e,0xa3,0x8f,0x11,0x61,0x74,0xa3,0x8f,0x10,0x77,1,0x61,0xa3,
-0xaa,0x74,0x14,0x61,0x69,0x6c,0x75,0x65,0x97,1,0x67,0x2e,0x6f,0xa2,0x57,0x10,
-0x6f,0xa3,0x57,0x10,0x62,0xa3,0x84,3,0x67,0x5a,0x6c,0x6c,0x72,0xa2,0x88,0x73,
-2,0x61,0x36,0x67,0x3c,0x6d,0x10,0x61,0x84,0x12,0x6e,0x79,0x61,0x85,0x11,0x67,
-0x65,0xa3,0xab,0x10,0x65,0xa3,0xab,1,0x61,0x2a,0x68,0x11,0x61,0x6d,0x5b,0x10,
-0x6d,0x5b,1,0x63,0xa2,0x55,0x64,5,0x70,0x2c,0x70,0x36,0x73,0x54,0x74,0x14,
-0x75,0x72,0x6b,0x69,0x63,0xa3,0x58,0x11,0x65,0x72,1,0x6d,0x2c,0x73,0x12,0x69,
-0x61,0x6e,0x9b,0x11,0x69,0x63,0xa3,0x59,0x1a,0x6f,0x75,0x74,0x68,0x61,0x72,0x61,
-0x62,0x69,0x61,0x6e,0xa3,0x85,0x68,0x42,0x69,0x54,0x6e,0x1a,0x6f,0x72,0x74,0x68,
-0x61,0x72,0x61,0x62,0x69,0x61,0x6e,0xa3,0x8e,0x17,0x75,0x6e,0x67,0x61,0x72,0x69,
-0x61,0x6e,0xa3,0x4c,0x14,0x74,0x61,0x6c,0x69,0x63,0x5d,1,0x68,0x26,0x6b,0xa3,
-0x6d,0x12,0x69,0x6b,0x69,0xa3,0x6d,2,0x69,0x2c,0x6b,0x30,0x79,0x10,0x61,0x5f,
-0x11,0x79,0x61,0x5f,0x10,0x68,0xa3,0x58,0x68,0xc2,0xb3,0x6b,0xc1,0xdc,0x6b,0xa2,
-0xe9,0x6c,0xa4,0x6a,0x6d,8,0x6f,0x46,0x6f,0x48,0x72,0x74,0x74,0x80,0x75,0x86,
-0x79,1,0x61,0x28,0x6d,0x10,0x72,0x59,0x13,0x6e,0x6d,0x61,0x72,0x59,2,0x64,
-0x2e,0x6e,0x32,0x6f,0x10,0x6e,0xa3,0x72,0x10,0x69,0xa3,0xa3,0x10,0x67,0x56,0x14,
-0x6f,0x6c,0x69,0x61,0x6e,0x57,0x10,0x6f,0xa2,0x95,0x10,0x6f,0xa3,0x95,0x11,0x65,
-0x69,0xa3,0x73,0x11,0x6c,0x74,0xa2,0xa4,0x12,0x61,0x6e,0x69,0xa3,0xa4,0x61,0x36,
-0x65,0xa2,0x4c,0x69,0xa2,0x8f,0x6c,0x11,0x79,0x6d,0x55,4,0x68,0x36,0x6c,0x4c,
-0x6e,0x58,0x72,0x82,0x79,0x10,0x61,0xa3,0x55,1,0x61,0x26,0x6a,0xa3,0xa0,0x13,
-0x6a,0x61,0x6e,0x69,0xa3,0xa0,0x15,0x61,0x79,0x61,0x6c,0x61,0x6d,0x55,1,0x64,
-0x38,0x69,0xa2,0x79,0x15,0x63,0x68,0x61,0x65,0x61,0x6e,0xa3,0x79,0xa2,0x54,0x12,
-0x61,0x69,0x63,0xa3,0x54,0x10,0x63,0xa2,0xa9,0x12,0x68,0x65,0x6e,0xa3,0xa9,2,
+5,0x6b,0x23,0x6b,0x4c,0x6f,0x50,0x75,1,0x6d,0x2c,0x73,0x11,0x68,0x75,0xa5,
+0x15,0x17,0x62,0x65,0x72,0x66,0x6f,0x72,0x6d,0x73,0x7b,0x10,0x6f,0xa3,0x92,0x14,
+0x62,0x6c,0x6f,0x63,0x6b,0x21,0x61,0x44,0x62,0x21,0x65,0x10,0x77,1,0x61,0xa5,
+0xe,0x74,0x14,0x61,0x69,0x6c,0x75,0x65,0xa3,0x8b,0x16,0x62,0x61,0x74,0x61,0x65,
+0x61,0x6e,0xa3,0xef,0x67,0xc3,0xcd,0x6a,0xc1,0x95,0x6a,0xa2,0xc5,0x6b,0xa2,0xde,
+0x6c,4,0x61,0x54,0x65,0xa2,0x61,0x69,0xa2,0x78,0x6f,0xa2,0xa7,0x79,1,0x63,
+0x2e,0x64,0x12,0x69,0x61,0x6e,0xa3,0xa9,0x12,0x69,0x61,0x6e,0xa3,0xa7,1,0x6f,
+0x55,0x74,0x11,0x69,0x6e,1,0x31,0x82,0x65,0x11,0x78,0x74,4,0x61,0x5c,0x62,
+0x29,0x63,0xa3,0x94,0x64,0xa3,0x95,0x65,0xa2,0xe7,0x13,0x6e,0x64,0x65,0x64,4,
+0x61,0x36,0x62,0x29,0x63,0xa3,0x94,0x64,0xa3,0x95,0x65,0xa3,0xe7,0x26,0x18,0x64,
+0x64,0x69,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x6d,0x24,0x12,0x73,0x75,0x70,0x24,0x16,
+0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x25,1,0x70,0x42,0x74,0x1d,0x74,0x65,0x72,
+0x6c,0x69,0x6b,0x65,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x79,0x12,0x63,0x68,0x61,
+0xa3,0x9c,2,0x6d,0x2e,0x6e,0x34,0x73,0x10,0x75,0xa3,0xb0,0x11,0x62,0x75,0xa3,
+0x6f,0x12,0x65,0x61,0x72,1,0x61,0xa3,0xe8,0x62,1,0x69,0x38,0x73,0x17,0x79,
+0x6c,0x6c,0x61,0x62,0x61,0x72,0x79,0xa3,0x75,0x17,0x64,0x65,0x6f,0x67,0x72,0x61,
+0x6d,0x73,0xa3,0x76,0x1a,0x77,0x73,0x75,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x73,
+0xa3,0x4d,0x10,0x61,1,0x6d,0x32,0x76,0x14,0x61,0x6e,0x65,0x73,0x65,0xa3,0xb5,
+0x10,0x6f,0x5c,0x12,0x65,0x78,0x74,1,0x61,0xa3,0xb4,0x62,0xa3,0xb9,1,0x61,
+0x80,0x68,3,0x61,0x3c,0x6d,0x4c,0x6f,0x64,0x75,0x15,0x64,0x61,0x77,0x61,0x64,
+0x69,0xa3,0xe6,0x16,0x72,0x6f,0x73,0x68,0x74,0x68,0x69,0xa3,0x89,0x11,0x65,0x72,
+0x68,0x16,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x71,0x12,0x6a,0x6b,0x69,0xa3,
+0xe5,3,0x69,0x3a,0x6e,0x42,0x74,0xa2,0x51,0x79,0x13,0x61,0x68,0x6c,0x69,0xa3,
+0xa2,0x12,0x74,0x68,0x69,0xa3,0xc1,3,0x61,0x34,0x62,0x76,0x67,0x7c,0x6e,0x12,
+0x61,0x64,0x61,0x4d,1,0x65,0x40,0x73,0x11,0x75,0x70,0xa2,0xcb,0x16,0x70,0x6c,
+0x65,0x6d,0x65,0x6e,0x74,0xa3,0xcb,0x11,0x78,0x74,1,0x61,0xa5,0x13,0x65,0x14,
+0x6e,0x64,0x65,0x64,0x61,0xa5,0x13,0x11,0x75,0x6e,0xa3,0x42,0x11,0x78,0x69,0x96,
+0x17,0x72,0x61,0x64,0x69,0x63,0x61,0x6c,0x73,0x97,0x14,0x61,0x6b,0x61,0x6e,0x61,
+0x9e,1,0x65,0x4c,0x70,0x10,0x68,0x1f,0x6f,0x6e,0x65,0x74,0x69,0x63,0x65,0x78,
+0x74,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x73,0xa3,0x6b,0x11,0x78,0x74,0xa3,0x6b,0x67,
+0xa2,0xa3,0x68,0xa4,0x53,0x69,3,0x64,0x4c,0x6d,0xa2,0x55,0x6e,0xa2,0x62,0x70,
+0x13,0x61,0x65,0x78,0x74,0x2a,0x16,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x73,0x2b,1,
+0x63,0x99,0x65,0x17,0x6f,0x67,0x72,0x61,0x70,0x68,0x69,0x63,1,0x64,0x56,0x73,
+0x15,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa4,0xb,0x1d,0x61,0x6e,0x64,0x70,0x75,0x6e,
+0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xa5,0xb,0x13,0x65,0x73,0x63,0x72,0x1f,
+0x69,0x70,0x74,0x69,0x6f,0x6e,0x63,0x68,0x61,0x72,0x61,0x63,0x74,0x65,0x72,0x73,
+0x99,0x1c,0x70,0x65,0x72,0x69,0x61,0x6c,0x61,0x72,0x61,0x6d,0x61,0x69,0x63,0xa3,
+0xba,1,0x64,0x62,0x73,0x1b,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x61,0x6c,
+0x70,0x61,1,0x68,0x32,0x72,0x14,0x74,0x68,0x69,0x61,0x6e,0xa3,0xbd,0x13,0x6c,
+0x61,0x76,0x69,0xa3,0xbe,0x1c,0x69,0x63,0x6e,0x75,0x6d,0x62,0x65,0x72,0x66,0x6f,
+0x72,0x6d,0x73,0xa3,0xb2,4,0x65,0x58,0x6c,0xa2,0x63,0x6f,0xa2,0x7b,0x72,0xa2,
+0x7f,0x75,1,0x6a,0x30,0x72,0x14,0x6d,0x75,0x6b,0x68,0x69,0x43,0x14,0x61,0x72,
+0x61,0x74,0x69,0x45,1,0x6e,0x8c,0x6f,1,0x6d,0x4e,0x72,0x13,0x67,0x69,0x61,
+0x6e,0x5a,0x12,0x73,0x75,0x70,0xa2,0x87,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,
+0xa3,0x87,0x1a,0x65,0x74,0x72,0x69,0x63,0x73,0x68,0x61,0x70,0x65,0x73,0x8c,0x12,
+0x65,0x78,0x74,0xa2,0xe3,0x14,0x65,0x6e,0x64,0x65,0x64,0xa3,0xe3,0x1e,0x65,0x72,
+0x61,0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x71,0x17,0x61,
+0x67,0x6f,0x6c,0x69,0x74,0x69,0x63,0xa2,0x88,0x12,0x73,0x75,0x70,0xa4,0xa,0x16,
+0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa5,0xa,0x13,0x74,0x68,0x69,0x63,0xa3,0x59,
+1,0x61,0x5c,0x65,0x11,0x65,0x6b,0x30,1,0x61,0x38,0x65,0x11,0x78,0x74,0x6e,
+0x14,0x65,0x6e,0x64,0x65,0x64,0x6f,0x17,0x6e,0x64,0x63,0x6f,0x70,0x74,0x69,0x63,
+0x31,0x13,0x6e,0x74,0x68,0x61,0xa3,0xe4,2,0x61,0xa2,0x48,0x65,0xa2,0xcf,0x69,
+1,0x67,0x30,0x72,0x14,0x61,0x67,0x61,0x6e,0x61,0x9d,0x10,0x68,1,0x70,0x3a,
+0x73,0x18,0x75,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x73,0xa3,0x4b,1,0x72,0x3c,
+0x75,0x19,0x73,0x75,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x73,0xa3,0x4c,0x11,0x69,
+0x76,0x1f,0x61,0x74,0x65,0x75,0x73,0x65,0x73,0x75,0x72,0x72,0x6f,0x67,0x61,0x74,
+0x65,0x73,0xa3,0x4c,2,0x6c,0x32,0x6e,0x9a,0x74,0x12,0x72,0x61,0x6e,0xa5,2,
+0x10,0x66,2,0x61,0x58,0x6d,0x70,0x77,0x14,0x69,0x64,0x74,0x68,0x61,0x1f,0x6e,
+0x64,0x66,0x75,0x6c,0x6c,0x77,0x69,0x64,0x74,0x68,0x66,0x6f,0x72,0x6d,0x73,0xa3,
+0x57,0x1a,0x6e,0x64,0x66,0x75,0x6c,0x6c,0x66,0x6f,0x72,0x6d,0x73,0xa3,0x57,0x13,
+0x61,0x72,0x6b,0x73,0xa3,0x52,1,0x67,0x2e,0x75,0x12,0x6e,0x6f,0x6f,0xa3,0x63,
+0x11,0x75,0x6c,0xa2,0x4a,2,0x63,0x3c,0x6a,0x5e,0x73,0x17,0x79,0x6c,0x6c,0x61,
+0x62,0x6c,0x65,0x73,0xa3,0x4a,0x1f,0x6f,0x6d,0x70,0x61,0x74,0x69,0x62,0x69,0x6c,
+0x69,0x74,0x79,0x6a,0x61,0x6d,0x6f,0xa3,0x41,0x12,0x61,0x6d,0x6f,0x5c,0x17,0x65,
+0x78,0x74,0x65,0x6e,0x64,0x65,0x64,1,0x61,0xa3,0xb4,0x62,0xa3,0xb9,0x13,0x62,
+0x72,0x65,0x77,0x37,0x61,0xa2,0xe9,0x62,0xa6,0x29,0x63,0xa6,0xfe,0x64,0xac,0x7c,
+0x65,5,0x6d,0xa2,0x6d,0x86,0x6e,0x96,0x74,0x15,0x68,0x69,0x6f,0x70,0x69,0x63,
+0x5e,1,0x65,0x40,0x73,0x11,0x75,0x70,0xa2,0x86,0x16,0x70,0x6c,0x65,0x6d,0x65,
+0x6e,0x74,0xa3,0x86,0x11,0x78,0x74,0xa2,0x85,1,0x61,0xa3,0xc8,0x65,0x13,0x6e,
+0x64,0x65,0x64,0xa2,0x85,0x10,0x61,0xa3,0xc8,0x16,0x6f,0x74,0x69,0x63,0x6f,0x6e,
+0x73,0xa3,0xce,0x15,0x63,0x6c,0x6f,0x73,0x65,0x64,2,0x61,0x5a,0x63,0x9e,0x69,
+0x1c,0x64,0x65,0x6f,0x67,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x75,0x70,0xa2,0xc4,
+0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xc4,0x16,0x6c,0x70,0x68,0x61,0x6e,
+0x75,0x6d,0x86,1,0x65,0x2c,0x73,0x11,0x75,0x70,0xa3,0xc3,0x13,0x72,0x69,0x63,
+0x73,0x86,0x18,0x75,0x70,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xc3,0x11,0x6a,
+0x6b,0xa2,0x44,0x1f,0x6c,0x65,0x74,0x74,0x65,0x72,0x73,0x61,0x6e,0x64,0x6d,0x6f,
+0x6e,0x74,0x68,0x73,0xa3,0x44,0x61,0x36,0x67,0x62,0x6c,0x14,0x62,0x61,0x73,0x61,
+0x6e,0xa3,0xe2,0x13,0x72,0x6c,0x79,0x64,0x1f,0x79,0x6e,0x61,0x73,0x74,0x69,0x63,
+0x63,0x75,0x6e,0x65,0x69,0x66,0x6f,0x72,0x6d,0xa5,1,0x10,0x79,0x1f,0x70,0x74,
+0x69,0x61,0x6e,0x68,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0xc2,
+7,0x6e,0xc0,0xe5,0x6e,0x3e,0x72,0xa2,0x5d,0x73,0xa2,0xd8,0x76,0x14,0x65,0x73,
+0x74,0x61,0x6e,0xa3,0xbc,1,0x61,0x92,0x63,0x13,0x69,0x65,0x6e,0x74,1,0x67,
+0x34,0x73,0x15,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0xa5,0x13,0x72,0x65,0x65,0x6b,
+1,0x6d,0x34,0x6e,0x15,0x75,0x6d,0x62,0x65,0x72,0x73,0xa3,0x7f,0x13,0x75,0x73,
+0x69,0x63,0xa2,0x7e,0x19,0x61,0x6c,0x6e,0x6f,0x74,0x61,0x74,0x69,0x6f,0x6e,0xa3,
+0x7e,0x10,0x74,0x1f,0x6f,0x6c,0x69,0x61,0x6e,0x68,0x69,0x65,0x72,0x6f,0x67,0x6c,
+0x79,0x70,0x68,0x73,0xa3,0xfe,2,0x61,0x32,0x6d,0xa2,0x71,0x72,0x12,0x6f,0x77,
+0x73,0x7d,0x12,0x62,0x69,0x63,0x38,3,0x65,0x4a,0x6d,0x66,0x70,0xa2,0x43,0x73,
+0x11,0x75,0x70,0xa2,0x80,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x80,0x11,
+0x78,0x74,1,0x61,0xa3,0xd2,0x65,0x14,0x6e,0x64,0x65,0x64,0x61,0xa3,0xd2,0x12,
+0x61,0x74,0x68,0xa2,0xd3,0x18,0x65,0x6d,0x61,0x74,0x69,0x63,0x61,0x6c,0x61,0x1f,
+0x6c,0x70,0x68,0x61,0x62,0x65,0x74,0x69,0x63,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,
+0xa3,0xd3,1,0x66,0x42,0x72,0x1e,0x65,0x73,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,
+0x6e,0x66,0x6f,0x72,0x6d,0x73,1,0x61,0xa3,0x51,0x62,0xa3,0x55,0x14,0x65,0x6e,
+0x69,0x61,0x6e,0x35,0x12,0x63,0x69,0x69,0x23,0x64,0x9e,0x65,0xa2,0x42,0x68,0xa2,
+0x4d,0x6c,1,0x63,0x62,0x70,0x17,0x68,0x61,0x62,0x65,0x74,0x69,0x63,0x70,1,
+0x66,0xa3,0x50,0x72,0x1e,0x65,0x73,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x66,
+0x6f,0x72,0x6d,0x73,0xa3,0x50,0x16,0x68,0x65,0x6d,0x69,0x63,0x61,0x6c,0xa2,0xd0,
+0x16,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0xd0,0x12,0x6c,0x61,0x6d,0xa5,7,
+0x1a,0x67,0x65,0x61,0x6e,0x6e,0x75,0x6d,0x62,0x65,0x72,0x73,0xa3,0x77,0x11,0x6f,
+0x6d,0xa3,0xfd,7,0x6f,0x71,0x6f,0x64,0x72,0xa2,0x41,0x75,0xa2,0x58,0x79,0x1b,
+0x7a,0x61,0x6e,0x74,0x69,0x6e,0x65,0x6d,0x75,0x73,0x69,0x63,0xa2,0x5b,0x18,0x61,
+0x6c,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x5b,1,0x70,0x34,0x78,0x16,0x64,
+0x72,0x61,0x77,0x69,0x6e,0x67,0x89,0x14,0x6f,0x6d,0x6f,0x66,0x6f,0xa0,0x12,0x65,
+0x78,0x74,0xa2,0x43,0x14,0x65,0x6e,0x64,0x65,0x64,0xa3,0x43,0x10,0x61,1,0x68,
+0x40,0x69,0x12,0x6c,0x6c,0x65,0x92,0x17,0x70,0x61,0x74,0x74,0x65,0x72,0x6e,0x73,
+0x93,0x11,0x6d,0x69,0xa3,0xc9,1,0x67,0x2c,0x68,0x11,0x69,0x64,0xa3,0x64,0x14,
+0x69,0x6e,0x65,0x73,0x65,0xa3,0x81,0x61,0x48,0x65,0xa2,0x4e,0x68,0xa2,0x52,0x6c,
+0x1a,0x6f,0x63,0x6b,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x73,0x8b,3,0x6c,0x34,
+0x6d,0x40,0x73,0x66,0x74,0x11,0x61,0x6b,0xa3,0xc7,0x14,0x69,0x6e,0x65,0x73,0x65,
+0xa3,0x93,0x11,0x75,0x6d,0xa2,0xb1,0x12,0x73,0x75,0x70,0xa2,0xca,0x16,0x70,0x6c,
+0x65,0x6d,0x65,0x6e,0x74,0xa3,0xca,1,0x69,0x30,0x73,0x13,0x61,0x76,0x61,0x68,
+0xa3,0xdd,0x15,0x63,0x6c,0x61,0x74,0x69,0x6e,0x23,0x14,0x6e,0x67,0x61,0x6c,0x69,
+0x41,0x16,0x61,0x69,0x6b,0x73,0x75,0x6b,0x69,0xa5,8,5,0x6f,0xc1,0x4c,0x6f,
+0xa2,0x55,0x75,0xa4,0x10,0x79,1,0x70,0x9c,0x72,0x14,0x69,0x6c,0x6c,0x69,0x63,
+0x32,1,0x65,0x4c,0x73,0x11,0x75,0x70,0xa2,0x61,0x16,0x70,0x6c,0x65,0x6d,0x65,
+0x6e,0x74,0xa2,0x61,0x12,0x61,0x72,0x79,0xa3,0x61,0x11,0x78,0x74,3,0x61,0xa3,
+0x9e,0x62,0xa3,0xa0,0x63,0xa5,9,0x65,0x13,0x6e,0x64,0x65,0x64,2,0x61,0xa3,
+0x9e,0x62,0xa3,0xa0,0x63,0xa5,9,0x1c,0x72,0x69,0x6f,0x74,0x73,0x79,0x6c,0x6c,
+0x61,0x62,0x61,0x72,0x79,0xa3,0x7b,3,0x6d,0x5a,0x6e,0xa2,0x95,0x70,0xa2,0xa0,
+0x75,0x17,0x6e,0x74,0x69,0x6e,0x67,0x72,0x6f,0x64,0xa2,0x9a,0x17,0x6e,0x75,0x6d,
+0x65,0x72,0x61,0x6c,0x73,0xa3,0x9a,2,0x62,0x3a,0x6d,0xa2,0x5f,0x70,0x15,0x61,
+0x74,0x6a,0x61,0x6d,0x6f,0xa3,0x41,0x14,0x69,0x6e,0x69,0x6e,0x67,2,0x64,0x46,
+0x68,0x9e,0x6d,0x1d,0x61,0x72,0x6b,0x73,0x66,0x6f,0x72,0x73,0x79,0x6d,0x62,0x6f,
+0x6c,0x73,0x77,0x1e,0x69,0x61,0x63,0x72,0x69,0x74,0x69,0x63,0x61,0x6c,0x6d,0x61,
+0x72,0x6b,0x73,0x2e,2,0x65,0x40,0x66,0xa6,0x1c,0x73,0x18,0x75,0x70,0x70,0x6c,
+0x65,0x6d,0x65,0x6e,0x74,0xa3,0x83,0x16,0x78,0x74,0x65,0x6e,0x64,0x65,0x64,0xa3,
+0xe0,0x17,0x61,0x6c,0x66,0x6d,0x61,0x72,0x6b,0x73,0xa3,0x52,0x11,0x6f,0x6e,0x1f,
+0x69,0x6e,0x64,0x69,0x63,0x6e,0x75,0x6d,0x62,0x65,0x72,0x66,0x6f,0x72,0x6d,0x73,
+0xa3,0xb2,0x1b,0x74,0x72,0x6f,0x6c,0x70,0x69,0x63,0x74,0x75,0x72,0x65,0x73,0x83,
+0x12,0x74,0x69,0x63,0xa2,0x84,0x1b,0x65,0x70,0x61,0x63,0x74,0x6e,0x75,0x6d,0x62,
+0x65,0x72,0x73,0xa3,0xdf,1,0x6e,0x3e,0x72,0x1b,0x72,0x65,0x6e,0x63,0x79,0x73,
+0x79,0x6d,0x62,0x6f,0x6c,0x73,0x75,0x15,0x65,0x69,0x66,0x6f,0x72,0x6d,0xa2,0x98,
+0x16,0x6e,0x75,0x6d,0x62,0x65,0x72,0x73,0xa2,0x99,0x1d,0x61,0x6e,0x64,0x70,0x75,
+0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xa3,0x99,0x61,0xa2,0xdb,0x68,0xa4,
+5,0x6a,0x10,0x6b,0xa2,0x47,4,0x63,0x86,0x65,0xa2,0x7d,0x72,0xa2,0x92,0x73,
+0xa2,0xa4,0x75,0x1f,0x6e,0x69,0x66,0x69,0x65,0x64,0x69,0x64,0x65,0x6f,0x67,0x72,
+0x61,0x70,0x68,0x73,0xa2,0x47,0x18,0x65,0x78,0x74,0x65,0x6e,0x73,0x69,0x6f,0x6e,
+5,0x64,0x65,0x64,0xa3,0xd1,0x65,0xa5,0,0x66,0xa5,0x12,0x14,0x6f,0x6d,0x70,
+0x61,0x74,0xa2,0x45,1,0x66,0x96,0x69,1,0x62,0x44,0x64,0x17,0x65,0x6f,0x67,
+0x72,0x61,0x70,0x68,0x73,0xa2,0x4f,0x12,0x73,0x75,0x70,0xa3,0x5f,0x14,0x69,0x6c,
+0x69,0x74,0x79,0xa2,0x45,1,0x66,0x54,0x69,0x18,0x64,0x65,0x6f,0x67,0x72,0x61,
+0x70,0x68,0x73,0xa2,0x4f,0x19,0x73,0x75,0x70,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,
+0xa3,0x5f,0x13,0x6f,0x72,0x6d,0x73,0xa3,0x53,0x11,0x78,0x74,5,0x64,9,0x64,
+0xa3,0xd1,0x65,0xa5,0,0x66,0xa5,0x12,0x61,0xa3,0x46,0x62,0xa3,0x5e,0x63,0xa3,
+0xc5,0x19,0x61,0x64,0x69,0x63,0x61,0x6c,0x73,0x73,0x75,0x70,0x94,0x16,0x70,0x6c,
+0x65,0x6d,0x65,0x6e,0x74,0x95,1,0x74,0x50,0x79,0x14,0x6d,0x62,0x6f,0x6c,0x73,
+0x9a,0x1d,0x61,0x6e,0x64,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,
+0x9b,0x14,0x72,0x6f,0x6b,0x65,0x73,0xa3,0x82,2,0x6e,0x48,0x72,0x64,0x75,0x1d,
+0x63,0x61,0x73,0x69,0x61,0x6e,0x61,0x6c,0x62,0x61,0x6e,0x69,0x61,0x6e,0xa3,0xde,
+0x1d,0x61,0x64,0x69,0x61,0x6e,0x73,0x79,0x6c,0x6c,0x61,0x62,0x69,0x63,0x73,0x63,
+0x12,0x69,0x61,0x6e,0xa3,0xa8,1,0x61,0x50,0x65,0x14,0x72,0x6f,0x6b,0x65,0x65,
+0x60,0x12,0x73,0x75,0x70,0xa2,0xff,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,
+0xff,1,0x6b,0x26,0x6d,0xa3,0xa4,0x11,0x6d,0x61,0xa3,0xd4,3,0x65,0x3e,0x69,
+0x7e,0x6f,0xa2,0x5d,0x75,0x15,0x70,0x6c,0x6f,0x79,0x61,0x6e,0xa3,0xe1,1,0x73,
+0x50,0x76,0x16,0x61,0x6e,0x61,0x67,0x61,0x72,0x69,0x3e,0x12,0x65,0x78,0x74,0xa2,
+0xb3,0x14,0x65,0x6e,0x64,0x65,0x64,0xa3,0xb3,0x13,0x65,0x72,0x65,0x74,0xa3,0x5a,
+1,0x61,0x30,0x6e,0x14,0x67,0x62,0x61,0x74,0x73,0x91,0x18,0x63,0x72,0x69,0x74,
+0x69,0x63,0x61,0x6c,0x73,0x2e,2,0x65,0x30,0x66,0x36,0x73,0x11,0x75,0x70,0xa3,
+0x83,0x11,0x78,0x74,0xa3,0xe0,0x18,0x6f,0x72,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,
+0x77,0x13,0x6d,0x69,0x6e,0x6f,0xa2,0xab,0x14,0x74,0x69,0x6c,0x65,0x73,0xa3,0xab,
+8,0x6d,0x5f,0x6d,0x3a,0x6e,0x48,0x73,0x7a,0x76,0xa2,0x4b,0x77,0x12,0x69,0x64,
+0x65,0x43,0x11,0x65,0x64,0x32,0x12,0x69,0x61,0x6c,0x33,2,0x61,0x40,0x62,0x37,
+0x6f,1,0x62,0x28,0x6e,0x10,0x65,0x21,0x13,0x72,0x65,0x61,0x6b,0x37,0x10,0x72,
+0x34,0x12,0x72,0x6f,0x77,0x35,2,0x6d,0x38,0x71,0x46,0x75,1,0x62,0x3d,0x70,
+0x3e,0x11,0x65,0x72,0x3f,1,0x61,0x24,0x6c,0x39,0x11,0x6c,0x6c,0x39,1,0x72,
+0x3b,0x75,0x12,0x61,0x72,0x65,0x3b,0x12,0x65,0x72,0x74,0x40,0x13,0x69,0x63,0x61,
+0x6c,0x41,0x63,0x58,0x65,0x92,0x66,0x96,0x69,1,0x6e,0x36,0x73,0x10,0x6f,0x30,
+0x14,0x6c,0x61,0x74,0x65,0x64,0x31,0x11,0x69,0x74,0x2e,0x12,0x69,0x61,0x6c,0x2f,
+2,0x61,0x36,0x69,0x48,0x6f,0x10,0x6d,0x24,0x12,0x70,0x61,0x74,0x25,0x10,0x6e,
+0x22,0x15,0x6f,0x6e,0x69,0x63,0x61,0x6c,0x23,0x13,0x72,0x63,0x6c,0x65,0x27,0x11,
+0x6e,0x63,0x27,2,0x69,0x3a,0x6f,0x44,0x72,0x10,0x61,0x2c,0x14,0x63,0x74,0x69,
+0x6f,0x6e,0x2d,0x10,0x6e,0x28,0x11,0x61,0x6c,0x29,0x11,0x6e,0x74,0x2b,4,0x61,
+0x3a,0x66,0x4c,0x68,0x5e,0x6e,0x70,0x77,0x2a,0x12,0x69,0x64,0x65,0x2b,0x22,0x17,
+0x6d,0x62,0x69,0x67,0x75,0x6f,0x75,0x73,0x23,0x26,0x17,0x75,0x6c,0x6c,0x77,0x69,
+0x64,0x74,0x68,0x27,0x24,0x17,0x61,0x6c,0x66,0x77,0x69,0x64,0x74,0x68,0x25,0x20,
+1,0x61,0x30,0x65,0x14,0x75,0x74,0x72,0x61,0x6c,0x21,0x28,0x13,0x72,0x72,0x6f,
+0x77,0x29,0xd,0x6e,0xc0,0xfb,0x73,0x6d,0x73,0x3a,0x74,0x98,0x75,0xa2,0x49,0x7a,
+2,0x6c,0x3b,0x70,0x3d,0x73,0x39,5,0x6f,0x28,0x6f,0x57,0x70,0x34,0x75,0x16,
+0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x45,0x11,0x61,0x63,1,0x65,0x32,0x69,0x15,
+0x6e,0x67,0x6d,0x61,0x72,0x6b,0x31,0x18,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,
+0x72,0x39,0x63,0x53,0x6b,0x55,0x6d,0x51,0x1d,0x69,0x74,0x6c,0x65,0x63,0x61,0x73,
+0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x27,1,0x6e,0x40,0x70,0x1c,0x70,0x65,0x72,
+0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x23,0x17,0x61,0x73,0x73,0x69,
+0x67,0x6e,0x65,0x64,0x21,0x6e,0x8a,0x6f,0xa2,0x47,0x70,8,0x66,0x14,0x66,0x5b,
+0x69,0x59,0x6f,0x4f,0x72,0x24,0x73,0x49,0x17,0x69,0x76,0x61,0x74,0x65,0x75,0x73,
+0x65,0x43,0x61,0x2c,0x63,0x4d,0x64,0x47,0x65,0x4b,0x1f,0x72,0x61,0x67,0x72,0x61,
+0x70,0x68,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0x3d,2,0x64,0x33,0x6c,
+0x35,0x6f,0x36,0x1b,0x6e,0x73,0x70,0x61,0x63,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,
+0x2d,1,0x70,0x7c,0x74,0x12,0x68,0x65,0x72,3,0x6c,0x38,0x6e,0x42,0x70,0x4c,
+0x73,0x14,0x79,0x6d,0x62,0x6f,0x6c,0x57,0x14,0x65,0x74,0x74,0x65,0x72,0x2b,0x14,
+0x75,0x6d,0x62,0x65,0x72,0x37,0x19,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,
+0x6e,0x4f,0x1c,0x65,0x6e,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,
+0x49,0x66,0x9e,0x66,0x88,0x69,0xa2,0x4b,0x6c,0xa2,0x5c,0x6d,4,0x61,0x60,0x63,
+0x31,0x65,0x2f,0x6e,0x2d,0x6f,0x15,0x64,0x69,0x66,0x69,0x65,0x72,1,0x6c,0x30,
+0x73,0x14,0x79,0x6d,0x62,0x6f,0x6c,0x55,0x14,0x65,0x74,0x74,0x65,0x72,0x29,0x17,
+0x74,0x68,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x51,1,0x69,0x2e,0x6f,0x13,0x72,0x6d,
+0x61,0x74,0x41,0x1d,0x6e,0x61,0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,
+0x6f,0x6e,0x5b,0x10,0x6e,0x1f,0x69,0x74,0x69,0x61,0x6c,0x70,0x75,0x6e,0x63,0x74,
+0x75,0x61,0x74,0x69,0x6f,0x6e,0x59,6,0x6d,0x18,0x6d,0x29,0x6f,0x28,0x74,0x27,
+0x75,0x23,0x2a,0x1c,0x77,0x65,0x72,0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74,0x65,
+0x72,0x25,0x65,0x28,0x69,0x3c,0x6c,0x25,0x19,0x74,0x74,0x65,0x72,0x6e,0x75,0x6d,
+0x62,0x65,0x72,0x35,0x1a,0x6e,0x65,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,
+0x3b,0x63,0x44,0x64,0xa2,0x60,0x65,0x1b,0x6e,0x63,0x6c,0x6f,0x73,0x69,0x6e,0x67,
+0x6d,0x61,0x72,0x6b,0x2f,6,0x6e,0x39,0x6e,0x46,0x6f,0x4e,0x73,0x45,0x75,0x1b,
+0x72,0x72,0x65,0x6e,0x63,0x79,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x53,0x20,0x12,0x74,
+0x72,0x6c,0x3f,0x42,0x10,0x6e,1,0x6e,0x2c,0x74,0x12,0x72,0x6f,0x6c,0x3f,0x1f,
+0x65,0x63,0x74,0x6f,0x72,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,
+0x4d,0x63,0x3f,0x66,0x41,0x6c,0x1d,0x6f,0x73,0x65,0x70,0x75,0x6e,0x63,0x74,0x75,
+0x61,0x74,0x69,0x6f,0x6e,0x4b,2,0x61,0x30,0x65,0x4a,0x69,0x12,0x67,0x69,0x74,
+0x33,0x1c,0x73,0x68,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x47,
+0x1a,0x63,0x69,0x6d,0x61,0x6c,0x6e,0x75,0x6d,0x62,0x65,0x72,0x33,0,0x12,0x6d,
+0xc2,0x3f,0x73,0xa1,0x73,0x4e,0x74,0xa2,0x56,0x77,0xa2,0x72,0x79,0xa2,0x73,0x7a,
+1,0x61,0x2c,0x68,0x12,0x61,0x69,0x6e,0x8b,0x11,0x69,0x6e,0x85,5,0x74,0x22,
+0x74,0x38,0x77,0x4c,0x79,0x16,0x72,0x69,0x61,0x63,0x77,0x61,0x77,0x6f,0x18,0x72,
+0x61,0x69,0x67,0x68,0x74,0x77,0x61,0x77,0xa3,0x55,0x15,0x61,0x73,0x68,0x6b,0x61,
+0x66,0x6d,0x61,0x2e,0x65,0x38,0x68,0x11,0x69,0x6e,0x6b,0x10,0x64,0x62,0x11,0x68,
+0x65,0x65,1,0x65,0x2e,0x6d,0x13,0x6b,0x61,0x74,0x68,0x69,0x10,0x6e,0x67,1,
+0x61,0x4e,0x65,1,0x68,0x28,0x74,0x10,0x68,0x77,0x16,0x6d,0x61,0x72,0x62,0x75,
+0x74,0x61,0x74,0x13,0x67,0x6f,0x61,0x6c,0x3d,1,0x68,0x71,0x77,0x73,0x11,0x61,
+0x77,0x79,1,0x65,0x32,0x75,0x11,0x64,0x68,0x80,0x11,0x68,0x65,0x83,0x10,0x68,
+0x7a,1,0x62,0x34,0x77,0x16,0x69,0x74,0x68,0x74,0x61,0x69,0x6c,0x7f,0x14,0x61,
+0x72,0x72,0x65,0x65,0x7d,0x6d,0x6c,0x6e,0xa4,0x6b,0x70,0xa4,0x88,0x71,0xa4,0x88,
+0x72,1,0x65,0x38,0x6f,0x18,0x68,0x69,0x6e,0x67,0x79,0x61,0x79,0x65,0x68,0x93,
+1,0x68,0x5f,0x76,0x16,0x65,0x72,0x73,0x65,0x64,0x70,0x65,0x61,2,0x61,0x2e,
+0x65,0xa4,0x3e,0x69,0x10,0x6d,0x53,1,0x6c,0xa2,0xe7,0x6e,0x16,0x69,0x63,0x68,
+0x61,0x65,0x61,0x6e,0,0x12,0x6e,0x76,0x73,0x51,0x73,0x3e,0x74,0x5c,0x77,0xa0,
+0x79,0xa2,0x42,0x7a,0x13,0x61,0x79,0x69,0x6e,0xa3,0x54,0x10,0x61,1,0x64,0x2e,
+0x6d,0x12,0x65,0x6b,0x68,0xa3,0x4c,0x11,0x68,0x65,0xa3,0x4b,3,0x61,0x38,0x65,
+0x3c,0x68,0x4a,0x77,0x13,0x65,0x6e,0x74,0x79,0xa3,0x51,0x10,0x77,0xa3,0x4d,1,
+0x6e,0xa3,0x4e,0x74,0x10,0x68,0xa3,0x4f,0x14,0x61,0x6d,0x65,0x64,0x68,0xa3,0x50,
+0x11,0x61,0x77,0xa3,0x52,0x12,0x6f,0x64,0x68,0xa3,0x53,0x6e,0x3a,0x6f,0x40,0x70,
+0x46,0x71,0x4a,0x72,0x12,0x65,0x73,0x68,0xa3,0x4a,0x11,0x75,0x6e,0xa3,0x46,0x11,
+0x6e,0x65,0xa3,0x47,0x10,0x65,0xa3,0x48,0x12,0x6f,0x70,0x68,0xa3,0x49,0x67,0x33,
+0x67,0x38,0x68,0x40,0x6b,0x5e,0x6c,0x66,0x6d,0x11,0x65,0x6d,0xa3,0x45,0x13,0x69,
+0x6d,0x65,0x6c,0xa1,1,0x65,0x32,0x75,0x14,0x6e,0x64,0x72,0x65,0x64,0xa3,0x42,
+0x11,0x74,0x68,0xa3,0x41,0x12,0x61,0x70,0x68,0xa3,0x43,0x14,0x61,0x6d,0x65,0x64,
+0x68,0xa3,0x44,0x61,0x34,0x62,0x4a,0x64,0x50,0x66,0x12,0x69,0x76,0x65,0x9f,1,
+0x6c,0x2a,0x79,0x11,0x69,0x6e,0x97,0x12,0x65,0x70,0x68,0x95,0x12,0x65,0x74,0x68,
+0x99,1,0x61,0x30,0x68,0x14,0x61,0x6d,0x65,0x64,0x68,0x9d,0x13,0x6c,0x65,0x74,
+0x68,0x9b,0x15,0x61,0x79,0x61,0x6c,0x61,0x6d,6,0x6e,0x2c,0x6e,0x34,0x72,0x5e,
+0x73,0x62,0x74,0x11,0x74,0x61,0xa3,0x63,2,0x67,0x2e,0x6e,0x32,0x79,0x10,0x61,
+0xa3,0x60,0x10,0x61,0xa3,0x5d,1,0x61,0xa3,0x5e,0x6e,0x10,0x61,0xa3,0x5f,0x10,
+0x61,0xa3,0x61,0x11,0x73,0x61,0xa3,0x62,0x62,0x3c,0x6a,0x42,0x6c,0x10,0x6c,1,
+0x61,0xa3,0x5b,0x6c,0x10,0x61,0xa3,0x5c,0x11,0x68,0x61,0xa3,0x59,0x10,0x61,0xa3,
+0x5a,0x11,0x65,0x6d,0x51,2,0x6f,0x2c,0x75,0x50,0x79,0x10,0x61,0x91,1,0x6a,
+0x28,0x6f,0x10,0x6e,0x55,0x1a,0x6f,0x69,0x6e,0x69,0x6e,0x67,0x67,0x72,0x6f,0x75,
+0x70,0x21,0x10,0x6e,0x57,0x10,0x65,0x59,0x10,0x61,1,0x66,0x5b,0x70,0x10,0x68,
+0x5d,0x66,0x7b,0x66,0x42,0x67,0x7a,0x68,0x8a,0x6b,0xa2,0x56,0x6c,0x11,0x61,0x6d,
+0x4c,0x12,0x61,0x64,0x68,0x4f,2,0x61,0x3e,0x65,0x4a,0x69,0x19,0x6e,0x61,0x6c,
+0x73,0x65,0x6d,0x6b,0x61,0x74,0x68,0x35,0x15,0x72,0x73,0x69,0x79,0x65,0x68,0x8f,
+0x86,0x10,0x68,0x33,0x10,0x61,1,0x66,0x37,0x6d,0x11,0x61,0x6c,0x39,1,0x61,
+0x40,0x65,0x3e,1,0x68,0x28,0x74,0x10,0x68,0x45,0x40,0x13,0x67,0x6f,0x61,0x6c,
+0x43,1,0x68,0x3b,0x6d,0x1a,0x7a,0x61,0x6f,0x6e,0x68,0x65,0x68,0x67,0x6f,0x61,
+0x6c,0x3d,2,0x61,0x3a,0x68,0x44,0x6e,0x17,0x6f,0x74,0x74,0x65,0x64,0x68,0x65,
+0x68,0x4b,1,0x66,0x47,0x70,0x10,0x68,0x49,0x12,0x61,0x70,0x68,0x89,0x61,0x2e,
+0x62,0x8a,0x64,0xa2,0x51,0x65,0x31,2,0x66,0x3c,0x69,0x70,0x6c,1,0x61,0x28,
+0x65,0x10,0x66,0x27,0x11,0x70,0x68,0x25,0x14,0x72,0x69,0x63,0x61,0x6e,2,0x66,
+0x30,0x6e,0x36,0x71,0x11,0x61,0x66,0xa3,0x58,0x11,0x65,0x68,0xa3,0x56,0x12,0x6f,
+0x6f,0x6e,0xa3,0x57,0x10,0x6e,0x23,1,0x65,0x4a,0x75,0x10,0x72,0x1f,0x75,0x73,
+0x68,0x61,0x73,0x6b,0x69,0x79,0x65,0x68,0x62,0x61,0x72,0x72,0x65,0x65,0x8d,1,
+0x68,0x29,0x74,0x10,0x68,0x2b,0x11,0x61,0x6c,0x2c,0x16,0x61,0x74,0x68,0x72,0x69,
+0x73,0x68,0x2f,7,0x6e,0x2e,0x6e,0x2c,0x72,0x3e,0x74,0x56,0x75,0x21,0x18,0x6f,
+0x6e,0x6a,0x6f,0x69,0x6e,0x69,0x6e,0x67,0x21,0x28,0x1a,0x69,0x67,0x68,0x74,0x6a,
+0x6f,0x69,0x6e,0x69,0x6e,0x67,0x29,0x2a,0x19,0x72,0x61,0x6e,0x73,0x70,0x61,0x72,
+0x65,0x6e,0x74,0x2b,0x63,0x23,0x64,0x40,0x6a,0x56,0x6c,0x26,0x19,0x65,0x66,0x74,
+0x6a,0x6f,0x69,0x6e,0x69,0x6e,0x67,0x27,0x24,0x19,0x75,0x61,0x6c,0x6a,0x6f,0x69,
+0x6e,0x69,0x6e,0x67,0x25,0x19,0x6f,0x69,0x6e,0x63,0x61,0x75,0x73,0x69,0x6e,0x67,
+0x23,0,0x13,0x6e,0xc0,0xd0,0x73,0x49,0x73,0x48,0x75,0x78,0x77,0x84,0x78,0x9c,
+0x7a,0x10,0x77,0x58,1,0x6a,0x75,0x73,0x13,0x70,0x61,0x63,0x65,0x59,4,0x61,
+0x51,0x67,0x53,0x70,0x28,0x75,0x30,0x79,0x57,0x54,0x12,0x61,0x63,0x65,0x55,0x16,
+0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x53,0x15,0x6e,0x6b,0x6e,0x6f,0x77,0x6e,0x21,
+1,0x6a,0x5d,0x6f,0x17,0x72,0x64,0x6a,0x6f,0x69,0x6e,0x65,0x72,0x5d,0x10,0x78,
+0x21,0x6e,0x60,0x6f,0xa2,0x41,0x70,0xa2,0x50,0x71,0xa2,0x6e,0x72,1,0x65,0x24,
+0x69,0x6f,0x1e,0x67,0x69,0x6f,0x6e,0x61,0x6c,0x69,0x6e,0x64,0x69,0x63,0x61,0x74,
+0x6f,0x72,0x6f,4,0x65,0x3e,0x6c,0x5b,0x6f,0x46,0x73,0x45,0x75,0x46,0x14,0x6d,
+0x65,0x72,0x69,0x63,0x47,0x15,0x78,0x74,0x6c,0x69,0x6e,0x65,0x5b,0x17,0x6e,0x73,
+0x74,0x61,0x72,0x74,0x65,0x72,0x45,0x10,0x70,0x48,0x1c,0x65,0x6e,0x70,0x75,0x6e,
+0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x49,1,0x6f,0x3e,0x72,0x4c,0x1a,0x65,
+0x66,0x69,0x78,0x6e,0x75,0x6d,0x65,0x72,0x69,0x63,0x4d,0x4a,0x1b,0x73,0x74,0x66,
+0x69,0x78,0x6e,0x75,0x6d,0x65,0x72,0x69,0x63,0x4b,0x10,0x75,0x4e,0x16,0x6f,0x74,
+0x61,0x74,0x69,0x6f,0x6e,0x4f,0x68,0x7b,0x68,0x50,0x69,0x86,0x6a,0xa2,0x61,0x6c,
+0xa2,0x65,0x6d,0x1c,0x61,0x6e,0x64,0x61,0x74,0x6f,0x72,0x79,0x62,0x72,0x65,0x61,
+0x6b,0x2d,4,0x32,0x5f,0x33,0x61,0x65,0x34,0x6c,0x6d,0x79,0x3a,0x13,0x70,0x68,
+0x65,0x6e,0x3b,0x19,0x62,0x72,0x65,0x77,0x6c,0x65,0x74,0x74,0x65,0x72,0x6d,2,
+0x64,0x28,0x6e,0x3c,0x73,0x41,0x3c,0x18,0x65,0x6f,0x67,0x72,0x61,0x70,0x68,0x69,
+0x63,0x3d,0x3e,1,0x66,0x3e,0x73,0x11,0x65,0x70,1,0x61,0x22,0x65,0x14,0x72,
+0x61,0x62,0x6c,0x65,0x3f,0x18,0x69,0x78,0x6e,0x75,0x6d,0x65,0x72,0x69,0x63,0x41,
+2,0x6c,0x63,0x74,0x65,0x76,0x67,1,0x66,0x43,0x69,0x15,0x6e,0x65,0x66,0x65,
+0x65,0x64,0x43,0x61,0x40,0x62,0x70,0x63,0xa2,0x55,0x65,0xa2,0xdb,0x67,0x10,0x6c,
+0x38,0x11,0x75,0x65,0x39,2,0x69,0x23,0x6c,0x34,0x6d,0x16,0x62,0x69,0x67,0x75,
+0x6f,0x75,0x73,0x23,0x24,0x17,0x70,0x68,0x61,0x62,0x65,0x74,0x69,0x63,0x25,4,
+0x32,0x27,0x61,0x29,0x62,0x2b,0x6b,0x2d,0x72,0x12,0x65,0x61,0x6b,2,0x61,0x36,
+0x62,0x3e,0x73,0x15,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x57,0x13,0x66,0x74,0x65,0x72,
+0x29,1,0x65,0x2a,0x6f,0x11,0x74,0x68,0x27,0x13,0x66,0x6f,0x72,0x65,0x2b,7,
+0x6d,0x51,0x6d,0x33,0x6f,0x28,0x70,0x69,0x72,0x35,1,0x6d,0x76,0x6e,1,0x64,
+0x3c,0x74,0x1a,0x69,0x6e,0x67,0x65,0x6e,0x74,0x62,0x72,0x65,0x61,0x6b,0x2f,0x15,
+0x69,0x74,0x69,0x6f,0x6e,0x61,0x1f,0x6c,0x6a,0x61,0x70,0x61,0x6e,0x65,0x73,0x65,
+0x73,0x74,0x61,0x72,0x74,0x65,0x72,0x6b,1,0x62,0x3a,0x70,0x19,0x6c,0x65,0x78,
+0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x51,0x18,0x69,0x6e,0x69,0x6e,0x67,0x6d,0x61,
+0x72,0x6b,0x33,0x61,0x6a,0x62,0x2f,0x6a,0x6b,0x6c,0x30,0x13,0x6f,0x73,0x65,0x70,
+1,0x61,0x38,0x75,0x18,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x31,0x18,
+0x72,0x65,0x6e,0x74,0x68,0x65,0x73,0x69,0x73,0x69,0x1b,0x72,0x72,0x69,0x61,0x67,
+0x65,0x72,0x65,0x74,0x75,0x72,0x6e,0x35,2,0x62,0x3e,0x6d,0x46,0x78,0x36,0x18,
+0x63,0x6c,0x61,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x37,0x70,0x12,0x61,0x73,0x65,0x71,
+0x72,0x16,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,0x73,1,0x64,0x42,0x6e,1,0x6f,
+0x32,0x75,0x26,0x14,0x6d,0x65,0x72,0x69,0x63,0x27,0x11,0x6e,0x65,0x21,1,0x65,
+0x2e,0x69,0x24,0x12,0x67,0x69,0x74,0x25,0x22,0x14,0x63,0x69,0x6d,0x61,0x6c,0x23,
+0,0x18,0x6e,0xc3,0xc4,0x74,0xc1,0x51,0x77,0x7a,0x77,0xa2,0x4c,0x78,0xa2,0x60,
+0x79,0xa2,0x6a,0x7a,6,0x73,0x1e,0x73,0x34,0x78,0x42,0x79,0x48,0x7a,0x11,0x7a,
+0x7a,0xa3,0x67,0x10,0x79,1,0x65,0xa3,0xae,0x6d,0xa3,0x81,0x11,0x78,0x78,0xa3,
+0x66,0x11,0x79,0x79,0x21,0x61,0x30,0x69,0x58,0x6d,0x11,0x74,0x68,0xa3,0x80,0x10,
+0x6e,1,0x61,0x26,0x62,0xa3,0xb1,0x1a,0x62,0x61,0x7a,0x61,0x72,0x73,0x71,0x75,
+0x61,0x72,0x65,0xa3,0xb1,0x11,0x6e,0x68,0x23,1,0x61,0x2c,0x6f,0x11,0x6c,0x65,
+0xa3,0x9b,0x11,0x72,0x61,0xa2,0x92,0x15,0x6e,0x67,0x63,0x69,0x74,0x69,0xa3,0x92,
+1,0x70,0x2c,0x73,0x11,0x75,0x78,0xa3,0x65,0x11,0x65,0x6f,0x9b,0x10,0x69,0x72,
+0x11,0x69,0x69,0x73,0x74,0x4a,0x75,0xa2,0xba,0x76,1,0x61,0x2c,0x69,0x11,0x73,
+0x70,0xa3,0x64,0x10,0x69,0xa2,0x63,0x10,0x69,0xa3,0x63,5,0x67,0x36,0x67,0x68,
+0x68,0x6c,0x69,2,0x62,0x3a,0x66,0x4a,0x72,0x10,0x68,0xa2,0x9e,0x12,0x75,0x74,
+0x61,0xa3,0x9e,1,0x65,0x24,0x74,0x6f,0x12,0x74,0x61,0x6e,0x6f,0x14,0x69,0x6e,
+0x61,0x67,0x68,0x99,0x11,0x6c,0x67,0x75,0x10,0x61,1,0x61,0x24,0x69,0x6d,0x6a,
+0x11,0x6e,0x61,0x6b,0x61,0x30,0x65,0xa2,0x5b,0x66,0x11,0x6e,0x67,0x99,6,0x6c,
+0x21,0x6c,0x32,0x6d,0x38,0x6e,0x44,0x76,0x10,0x74,0xa3,0x7f,1,0x65,0x89,0x75,
+0x97,1,0x69,0x24,0x6c,0x67,0x10,0x6c,0x67,0x10,0x67,0xa2,0x9a,0x11,0x75,0x74,
+0xa3,0x9a,0x67,0x36,0x69,0x52,0x6b,0x10,0x72,0xa2,0x99,0x10,0x69,0xa3,0x99,1,
+0x61,0x30,0x62,0x7a,0x13,0x61,0x6e,0x77,0x61,0x7b,0x12,0x6c,0x6f,0x67,0x75,2,
+0x6c,0x32,0x74,0x34,0x76,0x12,0x69,0x65,0x74,0xa3,0x7f,0x10,0x65,0x89,0x12,0x68,
+0x61,0x6d,0xa3,0x6a,1,0x6c,0x2a,0x6e,0x10,0x67,0xa3,0x62,0x10,0x75,0x68,0x11,
+0x67,0x75,0x69,1,0x67,0x32,0x6e,0x14,0x6b,0x6e,0x6f,0x77,0x6e,0xa3,0x67,0x11,
+0x61,0x72,0x8a,0x13,0x69,0x74,0x69,0x63,0x8b,0x71,0xc0,0xfc,0x71,0xa2,0xce,0x72,
+0xa2,0xd3,0x73,6,0x69,0x7a,0x69,0x72,0x6f,0xa2,0x4c,0x75,0xa2,0x65,0x79,1,
+0x6c,0x46,0x72,4,0x63,0x65,0x65,0xa3,0x5f,0x69,0x2c,0x6a,0xa3,0x60,0x6e,0xa3,
+0x61,0x11,0x61,0x63,0x65,0x10,0x6f,0x94,0x16,0x74,0x69,0x6e,0x61,0x67,0x72,0x69,
+0x95,2,0x64,0x3c,0x67,0x4c,0x6e,1,0x64,0xa3,0x91,0x68,0x62,0x12,0x61,0x6c,
+0x61,0x63,0x10,0x64,0xa2,0xa6,0x12,0x68,0x61,0x6d,0xa3,0xa6,0x17,0x6e,0x77,0x72,
+0x69,0x74,0x69,0x6e,0x67,0xa3,0x70,1,0x72,0x36,0x79,0x10,0x6f,0xa2,0xb0,0x12,
+0x6d,0x62,0x6f,0xa3,0xb0,0x10,0x61,0xa2,0x98,0x16,0x73,0x6f,0x6d,0x70,0x65,0x6e,
+0x67,0xa3,0x98,0x11,0x6e,0x64,0xa2,0x71,0x14,0x61,0x6e,0x65,0x73,0x65,0xa3,0x71,
+0x61,0x5c,0x67,0xa2,0x43,0x68,1,0x61,0x2a,0x72,0x10,0x64,0xa3,0x97,2,0x72,
+0x28,0x76,0x30,0x77,0x87,0x12,0x61,0x64,0x61,0xa3,0x97,0x12,0x69,0x61,0x6e,0x87,
+2,0x6d,0x40,0x72,0x58,0x75,0x10,0x72,0xa2,0x6f,0x15,0x61,0x73,0x68,0x74,0x72,
+0x61,0xa3,0x6f,1,0x61,0x26,0x72,0xa3,0x7e,0x14,0x72,0x69,0x74,0x61,0x6e,0xa3,
+0x7e,1,0x61,0xa3,0x5e,0x62,0xa3,0x85,0x11,0x6e,0x77,0xa3,0x70,0x11,0x61,0x61,
+1,0x63,0x2f,0x69,0x23,3,0x65,0x3e,0x6a,0x48,0x6f,0x4e,0x75,0x10,0x6e,1,
+0x69,0x24,0x72,0x61,0x10,0x63,0x61,0x13,0x6a,0x61,0x6e,0x67,0xa3,0x6e,0x11,0x6e,
+0x67,0xa3,0x6e,0x11,0x72,0x6f,0xa3,0x5d,0x6e,0xa2,0x83,0x6f,0xa2,0xca,0x70,5,
+0x6c,0x1e,0x6c,0x44,0x72,0x4a,0x73,0x1b,0x61,0x6c,0x74,0x65,0x72,0x70,0x61,0x68,
+0x6c,0x61,0x76,0x69,0xa3,0x7b,0x11,0x72,0x64,0xa3,0x5c,0x11,0x74,0x69,0xa3,0x7d,
+0x61,0x7c,0x65,0xa2,0x54,0x68,3,0x61,0x3e,0x6c,0x4e,0x6e,0x5e,0x6f,0x16,0x65,
+0x6e,0x69,0x63,0x69,0x61,0x6e,0xa3,0x5b,0x10,0x67,0xa2,0x5a,0x12,0x73,0x70,0x61,
+0xa3,0x5a,2,0x69,0xa3,0x7a,0x70,0xa3,0x7b,0x76,0xa3,0x7c,0x10,0x78,0xa3,0x5b,
+2,0x68,0x3e,0x6c,0x50,0x75,0x10,0x63,0xa2,0xa5,0x14,0x69,0x6e,0x68,0x61,0x75,
+0xa3,0xa5,0x17,0x61,0x77,0x68,0x68,0x6d,0x6f,0x6e,0x67,0xa3,0x4b,0x10,0x6d,0xa2,
+0x90,0x14,0x79,0x72,0x65,0x6e,0x65,0xa3,0x90,0x11,0x72,0x6d,0xa3,0x59,5,0x6b,
+0x1e,0x6b,0x32,0x73,0x4a,0x75,0x12,0x73,0x68,0x75,0xa3,0x96,1,0x67,0x2e,0x6f,
+0xa2,0x57,0x10,0x6f,0xa3,0x57,0x10,0x62,0xa3,0x84,0x11,0x68,0x75,0xa3,0x96,0x61,
+0x42,0x62,0x60,0x65,0x10,0x77,1,0x61,0xa3,0xaa,0x74,0x14,0x61,0x69,0x6c,0x75,
+0x65,0x97,1,0x62,0x2a,0x72,0x10,0x62,0xa3,0x8e,0x15,0x61,0x74,0x61,0x65,0x61,
+0x6e,0xa3,0x8f,0x11,0x61,0x74,0xa3,0x8f,3,0x67,0x5a,0x6c,0x6c,0x72,0xa2,0x88,
+0x73,2,0x61,0x36,0x67,0x3c,0x6d,0x10,0x61,0x84,0x12,0x6e,0x79,0x61,0x85,0x11,
+0x67,0x65,0xa3,0xab,0x10,0x65,0xa3,0xab,1,0x61,0x2a,0x68,0x11,0x61,0x6d,0x5b,
+0x10,0x6d,0x5b,1,0x63,0xa2,0x55,0x64,5,0x70,0x2c,0x70,0x36,0x73,0x54,0x74,
+0x14,0x75,0x72,0x6b,0x69,0x63,0xa3,0x58,0x11,0x65,0x72,1,0x6d,0x2c,0x73,0x12,
+0x69,0x61,0x6e,0x9b,0x11,0x69,0x63,0xa3,0x59,0x1a,0x6f,0x75,0x74,0x68,0x61,0x72,
+0x61,0x62,0x69,0x61,0x6e,0xa3,0x85,0x68,0x42,0x69,0x54,0x6e,0x1a,0x6f,0x72,0x74,
+0x68,0x61,0x72,0x61,0x62,0x69,0x61,0x6e,0xa3,0x8e,0x17,0x75,0x6e,0x67,0x61,0x72,
+0x69,0x61,0x6e,0xa3,0x4c,0x14,0x74,0x61,0x6c,0x69,0x63,0x5d,1,0x68,0x26,0x6b,
+0xa3,0x6d,0x12,0x69,0x6b,0x69,0xa3,0x6d,2,0x69,0x2c,0x6b,0x30,0x79,0x10,0x61,
+0x5f,0x11,0x79,0x61,0x5f,0x10,0x68,0xa3,0x58,0x68,0xc2,0xc2,0x6b,0xc1,0xeb,0x6b,
+0xa2,0xf8,0x6c,0xa4,0x79,0x6d,8,0x6f,0x46,0x6f,0x48,0x72,0x74,0x74,0x80,0x75,
+0x86,0x79,1,0x61,0x28,0x6d,0x10,0x72,0x59,0x13,0x6e,0x6d,0x61,0x72,0x59,2,
+0x64,0x2e,0x6e,0x32,0x6f,0x10,0x6e,0xa3,0x72,0x10,0x69,0xa3,0xa3,0x10,0x67,0x56,
+0x14,0x6f,0x6c,0x69,0x61,0x6e,0x57,0x10,0x6f,0xa2,0x95,0x10,0x6f,0xa3,0x95,0x11,
+0x65,0x69,0xa3,0x73,0x11,0x6c,0x74,0xa2,0xa4,0x12,0x61,0x6e,0x69,0xa3,0xa4,0x61,
+0x36,0x65,0xa2,0x5b,0x69,0xa2,0x9e,0x6c,0x11,0x79,0x6d,0x55,5,0x72,0x1f,0x72,
+0x2e,0x73,0x3e,0x79,0x10,0x61,0xa3,0x55,0x10,0x63,0xa2,0xa9,0x12,0x68,0x65,0x6e,
+0xa3,0xa9,0x18,0x61,0x72,0x61,0x6d,0x67,0x6f,0x6e,0x64,0x69,0xa3,0xaf,0x68,0x54,
+0x6c,0x6a,0x6e,1,0x64,0x38,0x69,0xa2,0x79,0x15,0x63,0x68,0x61,0x65,0x61,0x6e,
+0xa3,0x79,0xa2,0x54,0x12,0x61,0x69,0x63,0xa3,0x54,1,0x61,0x26,0x6a,0xa3,0xa0,
+0x13,0x6a,0x61,0x6e,0x69,0xa3,0xa0,0x15,0x61,0x79,0x61,0x6c,0x61,0x6d,0x55,2,
 0x65,0x72,0x6e,0x84,0x72,1,0x63,0xa3,0x8d,0x6f,0xa2,0x56,0x13,0x69,0x74,0x69,
 0x63,1,0x63,0x3c,0x68,0x19,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,
 0xa3,0x56,0x15,0x75,0x72,0x73,0x69,0x76,0x65,0xa3,0x8d,0x17,0x74,0x65,0x69,0x6d,
@@ -780,145 +801,145 @@
 0x6a,0x73,0x1b,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x70,0x61,1,
 0x68,0x32,0x72,0x14,0x74,0x68,0x69,0x61,0x6e,0xa3,0x7d,0x13,0x6c,0x61,0x76,0x69,
 0xa3,0x7a,0x10,0x73,0xa3,0x4d,0x15,0x65,0x72,0x69,0x74,0x65,0x64,0x23,0x64,0xc0,
-0xc7,0x64,0xa2,0x60,0x65,0xa2,0x88,0x67,4,0x65,0x62,0x6c,0x7a,0x6f,0x8e,0x72,
-0x9a,0x75,1,0x6a,0x38,0x72,1,0x6d,0x24,0x75,0x41,0x13,0x75,0x6b,0x68,0x69,
-0x41,1,0x61,0x24,0x72,0x3f,0x13,0x72,0x61,0x74,0x69,0x3f,0x10,0x6f,1,0x6b,
-0xa3,0x48,0x72,0x38,0x13,0x67,0x69,0x61,0x6e,0x39,0x11,0x61,0x67,0x90,0x15,0x6f,
-0x6c,0x69,0x74,0x69,0x63,0x91,0x11,0x74,0x68,0x3a,0x11,0x69,0x63,0x3b,1,0x61,
-0x32,0x65,1,0x65,0x24,0x6b,0x3d,0x10,0x6b,0x3d,0x10,0x6e,0xa2,0x89,0x12,0x74,
-0x68,0x61,0xa3,0x89,2,0x65,0x3e,0x73,0x64,0x75,0x11,0x70,0x6c,0xa2,0x87,0x13,
-0x6f,0x79,0x61,0x6e,0xa3,0x87,1,0x73,0x38,0x76,0x10,0x61,0x34,0x15,0x6e,0x61,
-0x67,0x61,0x72,0x69,0x35,0x13,0x65,0x72,0x65,0x74,0x33,0x11,0x72,0x74,0x33,2,
-0x67,0x3a,0x6c,0x72,0x74,0x11,0x68,0x69,0x36,0x13,0x6f,0x70,0x69,0x63,0x37,0x10,
-0x79,2,0x64,0xa3,0x45,0x68,0xa3,0x46,0x70,0xa2,0x47,0x1e,0x74,0x69,0x61,0x6e,
-0x68,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0x47,0x11,0x62,0x61,
-0xa2,0x88,0x12,0x73,0x61,0x6e,0xa3,0x88,0x61,0xa2,0xa2,0x62,0xa4,7,0x63,6,
-0x6f,0x3d,0x6f,0x5a,0x70,0x76,0x75,0x7a,0x79,1,0x70,0x3e,0x72,2,0x69,0x2a,
-0x6c,0x31,0x73,0xa3,0x44,0x13,0x6c,0x6c,0x69,0x63,0x31,0x13,0x72,0x69,0x6f,0x74,
-0x7f,1,0x6d,0x30,0x70,0x10,0x74,0x2e,0x11,0x69,0x63,0x2f,0x12,0x6d,0x6f,0x6e,
-0x21,0x11,0x72,0x74,0x7f,0x16,0x6e,0x65,0x69,0x66,0x6f,0x72,0x6d,0xa3,0x65,0x61,
-0x32,0x68,0xa2,0x41,0x69,0x11,0x72,0x74,0xa3,0x43,3,0x6b,0x4c,0x6e,0x50,0x72,
-0x76,0x75,0x1d,0x63,0x61,0x73,0x69,0x61,0x6e,0x61,0x6c,0x62,0x61,0x6e,0x69,0x61,
-0x6e,0xa3,0x9f,0x10,0x6d,0xa3,0x76,1,0x61,0x24,0x73,0x71,0x1d,0x64,0x69,0x61,
-0x6e,0x61,0x62,0x6f,0x72,0x69,0x67,0x69,0x6e,0x61,0x6c,0x71,0x10,0x69,0xa2,0x68,
-0x11,0x61,0x6e,0xa3,0x68,1,0x61,0x34,0x65,0x10,0x72,0x2c,0x13,0x6f,0x6b,0x65,
-0x65,0x2d,1,0x6b,0x26,0x6d,0xa3,0x42,0x11,0x6d,0x61,0xa3,0x76,6,0x68,0x4a,
-0x68,0x48,0x6e,0x4e,0x72,0x76,0x76,1,0x65,0x2a,0x73,0x10,0x74,0xa3,0x75,0x13,
-0x73,0x74,0x61,0x6e,0xa3,0x75,0x11,0x6f,0x6d,0xa3,0xa1,0x11,0x61,0x74,0x1f,0x6f,
-0x6c,0x69,0x61,0x6e,0x68,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,
-0x9c,1,0x61,0x3e,0x6d,2,0x65,0x2a,0x69,0xa3,0x74,0x6e,0x27,0x13,0x6e,0x69,
-0x61,0x6e,0x27,0x10,0x62,0x24,0x11,0x69,0x63,0x25,0x64,0x30,0x66,0x44,0x67,0x11,
-0x68,0x62,0xa3,0x9f,0x10,0x6c,1,0x61,0x26,0x6d,0xa3,0xa7,0x10,0x6d,0xa3,0xa7,
-0x11,0x61,0x6b,0xa3,0x93,6,0x6c,0x3c,0x6c,0x52,0x6f,0x56,0x72,0x66,0x75,1,
-0x67,0x30,0x68,1,0x64,0x79,0x69,0x10,0x64,0x79,0x10,0x69,0x8e,0x13,0x6e,0x65,
-0x73,0x65,0x8f,0x11,0x69,0x73,0xa1,0x11,0x70,0x6f,0x2a,0x13,0x6d,0x6f,0x66,0x6f,
-0x2b,0x10,0x61,1,0x68,0x2e,0x69,0x7c,0x12,0x6c,0x6c,0x65,0x7d,0xa2,0x41,0x11,
-0x6d,0x69,0xa3,0x41,0x61,0x48,0x65,0x9c,0x68,1,0x61,0x2a,0x6b,0x10,0x73,0xa3,
-0xa8,0x15,0x69,0x6b,0x73,0x75,0x6b,0x69,0xa3,0xa8,3,0x6c,0x3a,0x6d,0x48,0x73,
-0x54,0x74,1,0x61,0x24,0x6b,0x9f,0x10,0x6b,0x9f,0x10,0x69,0x9c,0x13,0x6e,0x65,
-0x73,0x65,0x9d,0x10,0x75,0xa2,0x82,0x10,0x6d,0xa3,0x82,0x10,0x73,0xa2,0x86,0x13,
-0x61,0x76,0x61,0x68,0xa3,0x86,0x11,0x6e,0x67,0x28,0x12,0x61,0x6c,0x69,0x29,3,
-0x6c,0x42,0x6e,0x90,0x74,0xa2,0x46,0x76,0x24,0x17,0x6f,0x77,0x65,0x6c,0x6a,0x61,
-0x6d,0x6f,0x25,0x22,1,0x65,0x54,0x76,0x28,1,0x73,0x38,0x74,0x2a,0x17,0x73,
-0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65,0x2b,0x16,0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65,
-0x29,0x18,0x61,0x64,0x69,0x6e,0x67,0x6a,0x61,0x6d,0x6f,0x23,1,0x61,0x21,0x6f,
-0x1a,0x74,0x61,0x70,0x70,0x6c,0x69,0x63,0x61,0x62,0x6c,0x65,0x21,0x26,0x1a,0x72,
-0x61,0x69,0x6c,0x69,0x6e,0x67,0x6a,0x61,0x6d,0x6f,0x27,1,0x6e,0x2c,0x79,0x22,
-0x11,0x65,0x73,0x23,0x20,0x10,0x6f,0x21,1,0x6e,0x2c,0x79,0x22,0x11,0x65,0x73,
-0x23,0x20,0x10,0x6f,0x21,2,0x6d,0x30,0x6e,0x3a,0x79,0x22,0x11,0x65,0x73,0x23,
-0x24,0x13,0x61,0x79,0x62,0x65,0x25,0x20,0x10,0x6f,0x21,2,0x6d,0x30,0x6e,0x3a,
-0x79,0x22,0x11,0x65,0x73,0x23,0x24,0x13,0x61,0x79,0x62,0x65,0x25,0x20,0x10,0x6f,
-0x21,0xb,0x72,0x39,0x76,0xc,0x76,0x33,0x78,0x2a,0x7a,0x11,0x77,0x6a,0x43,0x10,
-0x78,0x21,0x72,0x28,0x73,0x50,0x74,0x31,1,0x65,0x24,0x69,0x39,0x1e,0x67,0x69,
-0x6f,0x6e,0x61,0x6c,0x69,0x6e,0x64,0x69,0x63,0x61,0x74,0x6f,0x72,0x39,1,0x6d,
-0x35,0x70,0x18,0x61,0x63,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0x35,0x6c,0x1f,0x6c,
-0x3c,0x6f,0x4a,0x70,1,0x70,0x37,0x72,0x14,0x65,0x70,0x65,0x6e,0x64,0x37,0x28,
-1,0x66,0x2b,0x76,0x2c,0x10,0x74,0x2f,0x13,0x74,0x68,0x65,0x72,0x21,0x63,0x4c,
-0x65,0x64,0x67,1,0x61,0x3a,0x6c,0x19,0x75,0x65,0x61,0x66,0x74,0x65,0x72,0x7a,
-0x77,0x6a,0x41,0x10,0x7a,0x41,2,0x6e,0x23,0x6f,0x24,0x72,0x25,0x14,0x6e,0x74,
-0x72,0x6f,0x6c,0x23,2,0x62,0x34,0x6d,0x4e,0x78,0x26,0x13,0x74,0x65,0x6e,0x64,
-0x27,0x3a,1,0x61,0x24,0x67,0x3d,0x11,0x73,0x65,0x3a,0x12,0x67,0x61,0x7a,0x3d,
-0x3e,0x16,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,0x3f,9,0x6e,0x4a,0x6e,0x34,0x6f,
-0x44,0x73,0x60,0x75,0x94,0x78,0x10,0x78,0x21,0x10,0x75,0x2a,0x14,0x6d,0x65,0x72,
-0x69,0x63,0x2b,1,0x6c,0x2c,0x74,0x12,0x68,0x65,0x72,0x21,0x14,0x65,0x74,0x74,
-0x65,0x72,0x2d,3,0x63,0x36,0x65,0x46,0x70,0x31,0x74,0x32,0x12,0x65,0x72,0x6d,
-0x33,0x3c,0x16,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x3d,0x2e,0x10,0x70,0x2f,0x10,
-0x70,0x34,0x12,0x70,0x65,0x72,0x35,0x61,0x46,0x63,0x52,0x65,0x64,0x66,0x72,0x6c,
-2,0x65,0x2d,0x66,0x3b,0x6f,0x28,0x12,0x77,0x65,0x72,0x29,0x10,0x74,0x22,0x12,
-0x65,0x72,0x6d,0x23,1,0x6c,0x24,0x72,0x37,0x24,0x12,0x6f,0x73,0x65,0x25,0x10,
-0x78,0x38,0x13,0x74,0x65,0x6e,0x64,0x39,0x10,0x6f,0x26,0x13,0x72,0x6d,0x61,0x74,
-0x27,0xf,0x6c,0x7c,0x72,0x34,0x72,0x32,0x73,0x5a,0x78,0x76,0x7a,0x11,0x77,0x6a,
-0x4b,1,0x65,0x24,0x69,0x3b,0x1e,0x67,0x69,0x6f,0x6e,0x61,0x6c,0x69,0x6e,0x64,
-0x69,0x63,0x61,0x74,0x6f,0x72,0x3b,1,0x69,0x24,0x71,0x3f,0x18,0x6e,0x67,0x6c,
-0x65,0x71,0x75,0x6f,0x74,0x65,0x3f,0x10,0x78,0x21,0x6c,0x36,0x6d,0x3c,0x6e,0x76,
-0x6f,0x13,0x74,0x68,0x65,0x72,0x21,1,0x65,0x23,0x66,0x35,3,0x62,0x37,0x69,
-0x28,0x6c,0x29,0x6e,0x2b,0x10,0x64,1,0x6c,0x34,0x6e,0x11,0x75,0x6d,0x2a,0x12,
-0x6c,0x65,0x74,0x37,0x14,0x65,0x74,0x74,0x65,0x72,0x29,2,0x65,0x36,0x6c,0x39,
-0x75,0x2c,0x14,0x6d,0x65,0x72,0x69,0x63,0x2d,0x14,0x77,0x6c,0x69,0x6e,0x65,0x39,
-0x66,0x3f,0x66,0x40,0x67,0x4e,0x68,0x70,0x6b,0x10,0x61,0x26,0x15,0x74,0x61,0x6b,
-0x61,0x6e,0x61,0x27,0x10,0x6f,0x24,0x13,0x72,0x6d,0x61,0x74,0x25,1,0x61,0x3a,
-0x6c,0x19,0x75,0x65,0x61,0x66,0x74,0x65,0x72,0x7a,0x77,0x6a,0x49,0x10,0x7a,0x49,
-1,0x65,0x24,0x6c,0x3d,0x19,0x62,0x72,0x65,0x77,0x6c,0x65,0x74,0x74,0x65,0x72,
-0x3d,0x61,0x86,0x63,0x92,0x64,0x94,0x65,2,0x62,0x44,0x6d,0x5e,0x78,0x2e,0x13,
-0x74,0x65,0x6e,0x64,0x32,0x15,0x6e,0x75,0x6d,0x6c,0x65,0x74,0x2f,0x42,1,0x61,
-0x24,0x67,0x45,0x11,0x73,0x65,0x42,0x12,0x67,0x61,0x7a,0x45,0x46,0x16,0x6f,0x64,
-0x69,0x66,0x69,0x65,0x72,0x47,0x15,0x6c,0x65,0x74,0x74,0x65,0x72,0x23,0x10,0x72,
-0x31,1,0x6f,0x24,0x71,0x41,0x18,0x75,0x62,0x6c,0x65,0x71,0x75,0x6f,0x74,0x65,
-0x41,2,0x63,0x32,0x6e,0x3c,0x6f,0x22,0x12,0x70,0x65,0x6e,0x23,0x24,0x13,0x6c,
-0x6f,0x73,0x65,0x25,0x20,0x12,0x6f,0x6e,0x65,0x21,0xd,0x6e,0xc1,0x86,0x73,0xa8,
-0x73,0x4c,0x74,0xa2,0x76,0x75,0xa2,0x83,0x7a,0xd8,0x70,0,2,0x6c,0xd9,0x20,
-0,0x70,0xd9,0x40,0,0x73,0xc3,0,0xfe,0xf,0,0,0,7,0x6f,0x3c,
-0x6f,0xff,8,0,0,0,0x70,0x3a,0x75,0x6e,0x79,0x13,0x6d,0x62,0x6f,0x6c,
-0xff,0xf,0,0,0,0x11,0x61,0x63,1,0x65,0x34,0x69,0x15,0x6e,0x67,0x6d,
-0x61,0x72,0x6b,0xa5,0,0x18,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0xc3,
-0,0x16,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0xe1,0,0,0x63,0xff,2,0,
-0,0,0x65,0x38,0x6b,0xff,4,0,0,0,0x6d,0xff,1,0,0,0,
-0x16,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0xd9,0x70,0,0x1d,0x69,0x74,0x6c,0x65,
-0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x31,1,0x6e,0x40,0x70,0x1c,
-0x70,0x65,0x72,0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x25,0x17,0x61,
-0x73,0x73,0x69,0x67,0x6e,0x65,0x64,0x23,0x6e,0xa2,0x69,0x6f,0xa2,0x89,0x70,0xfe,
-0x30,0xf8,0,0,9,0x69,0x33,0x69,0xff,0x10,0,0,0,0x6f,0xfd,0x80,
-0,0,0x72,0x54,0x73,0xf9,0,0,0x75,0x12,0x6e,0x63,0x74,0xfe,0x30,0xf8,
-0,0,0x15,0x75,0x61,0x74,0x69,0x6f,0x6e,0xff,0x30,0xf8,0,0,0x17,0x69,
-0x76,0x61,0x74,0x65,0x75,0x73,0x65,0xdd,0,0,0x61,0x48,0x63,0xfd,0x40,0,
-0,0x64,0xe9,0,0,0x65,0xfd,0x20,0,0,0x66,0xff,0x20,0,0,0,
-0x1f,0x72,0x61,0x67,0x72,0x61,0x70,0x68,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,
-0x72,0xd9,0x40,0,0xbe,0,3,0x64,0xa7,0,0x6c,0xab,0,0x6f,0x30,0x75,
-0x13,0x6d,0x62,0x65,0x72,0xbf,0,0xb2,0,0x1b,0x6e,0x73,0x70,0x61,0x63,0x69,
-0x6e,0x67,0x6d,0x61,0x72,0x6b,0xa1,1,0x70,0x92,0x74,0x12,0x68,0x65,0x72,0xe6,
-0x80,1,3,0x6c,0x40,0x6e,0x4a,0x70,0x56,0x73,0x14,0x79,0x6d,0x62,0x6f,0x6c,
-0xff,8,0,0,0,0x14,0x65,0x74,0x74,0x65,0x72,0x61,0x14,0x75,0x6d,0x62,
-0x65,0x72,0xb3,0,0x19,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xfd,
-0x80,0,0,0x1c,0x65,0x6e,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,
-0x6e,0xf9,0,0,0x66,0xc0,0xc4,0x66,0xa2,0x47,0x69,0xa2,0x64,0x6c,0xa2,0x79,
-0x6d,0xa4,0xc0,4,0x61,0x6c,0x63,0xa5,0,0x65,0xa3,0x80,0x6e,0xa1,0x6f,0x15,
-0x64,0x69,0x66,0x69,0x65,0x72,1,0x6c,0x38,0x73,0x14,0x79,0x6d,0x62,0x6f,0x6c,
-0xff,4,0,0,0,0x14,0x65,0x74,0x74,0x65,0x72,0x41,1,0x72,0x3c,0x74,
-0x16,0x68,0x73,0x79,0x6d,0x62,0x6f,0x6c,0xff,1,0,0,0,0x10,0x6b,0xa5,
-0xc0,1,0x69,0x32,0x6f,0x13,0x72,0x6d,0x61,0x74,0xdb,0,0,0x1d,0x6e,0x61,
-0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xff,0x20,0,0,
-0,0x10,0x6e,0x1f,0x69,0x74,0x69,0x61,0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,
-0x74,0x69,0x6f,0x6e,0xff,0x10,0,0,0,0x9c,7,0x6d,0x18,0x6d,0x41,0x6f,
-0x28,0x74,0x31,0x75,0x25,0x60,0x1c,0x77,0x65,0x72,0x63,0x61,0x73,0x65,0x6c,0x65,
-0x74,0x74,0x65,0x72,0x29,0x63,0x3d,0x65,0x28,0x69,0x42,0x6c,0x29,0x13,0x74,0x74,
-0x65,0x72,0x9c,0x15,0x6e,0x75,0x6d,0x62,0x65,0x72,0xab,0,0x1a,0x6e,0x65,0x73,
-0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0xd9,0x20,0,0x63,0x46,0x64,0xa2,0x96,
-0x65,0x1b,0x6e,0x63,0x6c,0x6f,0x73,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0xa3,0x80,
-0xe6,0x80,1,7,0x6e,0x57,0x6e,0x52,0x6f,0x5e,0x73,0xe1,0,0,0x75,0x1b,
-0x72,0x72,0x65,0x6e,0x63,0x79,0x73,0x79,0x6d,0x62,0x6f,0x6c,0xff,2,0,0,
-0,0x22,0x12,0x74,0x72,0x6c,0xd9,0x80,0,0xdc,0,0,1,0x6d,0x62,0x6e,
-1,0x6e,0x30,0x74,0x12,0x72,0x6f,0x6c,0xd9,0x80,0,0x1f,0x65,0x63,0x74,0x6f,
-0x72,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xfd,0x40,0,0,
-0x19,0x62,0x69,0x6e,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0xa5,0xc0,0x61,0x58,0x63,
-0xd9,0x80,0,0x66,0xdb,0,0,0x6c,0x1d,0x6f,0x73,0x65,0x70,0x75,0x6e,0x63,
-0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xfd,0x20,0,0,0x18,0x73,0x65,0x64,0x6c,
-0x65,0x74,0x74,0x65,0x72,0x3d,2,0x61,0x32,0x65,0x50,0x69,0x12,0x67,0x69,0x74,
-0xa7,0,0x1c,0x73,0x68,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,
-0xe9,0,0,0x1a,0x63,0x69,0x6d,0x61,0x6c,0x6e,0x75,0x6d,0x62,0x65,0x72,0xa7,
-0
+0xcf,0x64,0xa2,0x68,0x65,0xa2,0x90,0x67,4,0x65,0x64,0x6c,0x7c,0x6f,0x90,0x72,
+0xa2,0x44,0x75,1,0x6a,0x38,0x72,1,0x6d,0x24,0x75,0x41,0x13,0x75,0x6b,0x68,
+0x69,0x41,1,0x61,0x24,0x72,0x3f,0x13,0x72,0x61,0x74,0x69,0x3f,0x10,0x6f,1,
+0x6b,0xa3,0x48,0x72,0x38,0x13,0x67,0x69,0x61,0x6e,0x39,0x11,0x61,0x67,0x90,0x15,
+0x6f,0x6c,0x69,0x74,0x69,0x63,0x91,1,0x6e,0x30,0x74,0x10,0x68,0x3a,0x11,0x69,
+0x63,0x3b,0x10,0x6d,0xa3,0xaf,1,0x61,0x32,0x65,1,0x65,0x24,0x6b,0x3d,0x10,
+0x6b,0x3d,0x10,0x6e,0xa2,0x89,0x12,0x74,0x68,0x61,0xa3,0x89,2,0x65,0x3e,0x73,
+0x64,0x75,0x11,0x70,0x6c,0xa2,0x87,0x13,0x6f,0x79,0x61,0x6e,0xa3,0x87,1,0x73,
+0x38,0x76,0x10,0x61,0x34,0x15,0x6e,0x61,0x67,0x61,0x72,0x69,0x35,0x13,0x65,0x72,
+0x65,0x74,0x33,0x11,0x72,0x74,0x33,2,0x67,0x3a,0x6c,0x72,0x74,0x11,0x68,0x69,
+0x36,0x13,0x6f,0x70,0x69,0x63,0x37,0x10,0x79,2,0x64,0xa3,0x45,0x68,0xa3,0x46,
+0x70,0xa2,0x47,0x1e,0x74,0x69,0x61,0x6e,0x68,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,
+0x70,0x68,0x73,0xa3,0x47,0x11,0x62,0x61,0xa2,0x88,0x12,0x73,0x61,0x6e,0xa3,0x88,
+0x61,0xa2,0xa2,0x62,0xa4,7,0x63,6,0x6f,0x3d,0x6f,0x5a,0x70,0x76,0x75,0x7a,
+0x79,1,0x70,0x3e,0x72,2,0x69,0x2a,0x6c,0x31,0x73,0xa3,0x44,0x13,0x6c,0x6c,
+0x69,0x63,0x31,0x13,0x72,0x69,0x6f,0x74,0x7f,1,0x6d,0x30,0x70,0x10,0x74,0x2e,
+0x11,0x69,0x63,0x2f,0x12,0x6d,0x6f,0x6e,0x21,0x11,0x72,0x74,0x7f,0x16,0x6e,0x65,
+0x69,0x66,0x6f,0x72,0x6d,0xa3,0x65,0x61,0x32,0x68,0xa2,0x41,0x69,0x11,0x72,0x74,
+0xa3,0x43,3,0x6b,0x4c,0x6e,0x50,0x72,0x76,0x75,0x1d,0x63,0x61,0x73,0x69,0x61,
+0x6e,0x61,0x6c,0x62,0x61,0x6e,0x69,0x61,0x6e,0xa3,0x9f,0x10,0x6d,0xa3,0x76,1,
+0x61,0x24,0x73,0x71,0x1d,0x64,0x69,0x61,0x6e,0x61,0x62,0x6f,0x72,0x69,0x67,0x69,
+0x6e,0x61,0x6c,0x71,0x10,0x69,0xa2,0x68,0x11,0x61,0x6e,0xa3,0x68,1,0x61,0x34,
+0x65,0x10,0x72,0x2c,0x13,0x6f,0x6b,0x65,0x65,0x2d,1,0x6b,0x26,0x6d,0xa3,0x42,
+0x11,0x6d,0x61,0xa3,0x76,6,0x68,0x4a,0x68,0x48,0x6e,0x4e,0x72,0x76,0x76,1,
+0x65,0x2a,0x73,0x10,0x74,0xa3,0x75,0x13,0x73,0x74,0x61,0x6e,0xa3,0x75,0x11,0x6f,
+0x6d,0xa3,0xa1,0x11,0x61,0x74,0x1f,0x6f,0x6c,0x69,0x61,0x6e,0x68,0x69,0x65,0x72,
+0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0x9c,1,0x61,0x3e,0x6d,2,0x65,0x2a,
+0x69,0xa3,0x74,0x6e,0x27,0x13,0x6e,0x69,0x61,0x6e,0x27,0x10,0x62,0x24,0x11,0x69,
+0x63,0x25,0x64,0x30,0x66,0x44,0x67,0x11,0x68,0x62,0xa3,0x9f,0x10,0x6c,1,0x61,
+0x26,0x6d,0xa3,0xa7,0x10,0x6d,0xa3,0xa7,0x11,0x61,0x6b,0xa3,0x93,6,0x6c,0x3c,
+0x6c,0x52,0x6f,0x56,0x72,0x66,0x75,1,0x67,0x30,0x68,1,0x64,0x79,0x69,0x10,
+0x64,0x79,0x10,0x69,0x8e,0x13,0x6e,0x65,0x73,0x65,0x8f,0x11,0x69,0x73,0xa1,0x11,
+0x70,0x6f,0x2a,0x13,0x6d,0x6f,0x66,0x6f,0x2b,0x10,0x61,1,0x68,0x2e,0x69,0x7c,
+0x12,0x6c,0x6c,0x65,0x7d,0xa2,0x41,0x11,0x6d,0x69,0xa3,0x41,0x61,0x48,0x65,0x9c,
+0x68,1,0x61,0x2a,0x6b,0x10,0x73,0xa3,0xa8,0x15,0x69,0x6b,0x73,0x75,0x6b,0x69,
+0xa3,0xa8,3,0x6c,0x3a,0x6d,0x48,0x73,0x54,0x74,1,0x61,0x24,0x6b,0x9f,0x10,
+0x6b,0x9f,0x10,0x69,0x9c,0x13,0x6e,0x65,0x73,0x65,0x9d,0x10,0x75,0xa2,0x82,0x10,
+0x6d,0xa3,0x82,0x10,0x73,0xa2,0x86,0x13,0x61,0x76,0x61,0x68,0xa3,0x86,0x11,0x6e,
+0x67,0x28,0x12,0x61,0x6c,0x69,0x29,3,0x6c,0x42,0x6e,0x90,0x74,0xa2,0x46,0x76,
+0x24,0x17,0x6f,0x77,0x65,0x6c,0x6a,0x61,0x6d,0x6f,0x25,0x22,1,0x65,0x54,0x76,
+0x28,1,0x73,0x38,0x74,0x2a,0x17,0x73,0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65,0x2b,
+0x16,0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65,0x29,0x18,0x61,0x64,0x69,0x6e,0x67,0x6a,
+0x61,0x6d,0x6f,0x23,1,0x61,0x21,0x6f,0x1a,0x74,0x61,0x70,0x70,0x6c,0x69,0x63,
+0x61,0x62,0x6c,0x65,0x21,0x26,0x1a,0x72,0x61,0x69,0x6c,0x69,0x6e,0x67,0x6a,0x61,
+0x6d,0x6f,0x27,1,0x6e,0x2c,0x79,0x22,0x11,0x65,0x73,0x23,0x20,0x10,0x6f,0x21,
+1,0x6e,0x2c,0x79,0x22,0x11,0x65,0x73,0x23,0x20,0x10,0x6f,0x21,2,0x6d,0x30,
+0x6e,0x3a,0x79,0x22,0x11,0x65,0x73,0x23,0x24,0x13,0x61,0x79,0x62,0x65,0x25,0x20,
+0x10,0x6f,0x21,2,0x6d,0x30,0x6e,0x3a,0x79,0x22,0x11,0x65,0x73,0x23,0x24,0x13,
+0x61,0x79,0x62,0x65,0x25,0x20,0x10,0x6f,0x21,0xb,0x72,0x39,0x76,0xc,0x76,0x33,
+0x78,0x2a,0x7a,0x11,0x77,0x6a,0x43,0x10,0x78,0x21,0x72,0x28,0x73,0x50,0x74,0x31,
+1,0x65,0x24,0x69,0x39,0x1e,0x67,0x69,0x6f,0x6e,0x61,0x6c,0x69,0x6e,0x64,0x69,
+0x63,0x61,0x74,0x6f,0x72,0x39,1,0x6d,0x35,0x70,0x18,0x61,0x63,0x69,0x6e,0x67,
+0x6d,0x61,0x72,0x6b,0x35,0x6c,0x1f,0x6c,0x3c,0x6f,0x4a,0x70,1,0x70,0x37,0x72,
+0x14,0x65,0x70,0x65,0x6e,0x64,0x37,0x28,1,0x66,0x2b,0x76,0x2c,0x10,0x74,0x2f,
+0x13,0x74,0x68,0x65,0x72,0x21,0x63,0x4c,0x65,0x64,0x67,1,0x61,0x3a,0x6c,0x19,
+0x75,0x65,0x61,0x66,0x74,0x65,0x72,0x7a,0x77,0x6a,0x41,0x10,0x7a,0x41,2,0x6e,
+0x23,0x6f,0x24,0x72,0x25,0x14,0x6e,0x74,0x72,0x6f,0x6c,0x23,2,0x62,0x34,0x6d,
+0x4e,0x78,0x26,0x13,0x74,0x65,0x6e,0x64,0x27,0x3a,1,0x61,0x24,0x67,0x3d,0x11,
+0x73,0x65,0x3a,0x12,0x67,0x61,0x7a,0x3d,0x3e,0x16,0x6f,0x64,0x69,0x66,0x69,0x65,
+0x72,0x3f,9,0x6e,0x4a,0x6e,0x34,0x6f,0x44,0x73,0x60,0x75,0x94,0x78,0x10,0x78,
+0x21,0x10,0x75,0x2a,0x14,0x6d,0x65,0x72,0x69,0x63,0x2b,1,0x6c,0x2c,0x74,0x12,
+0x68,0x65,0x72,0x21,0x14,0x65,0x74,0x74,0x65,0x72,0x2d,3,0x63,0x36,0x65,0x46,
+0x70,0x31,0x74,0x32,0x12,0x65,0x72,0x6d,0x33,0x3c,0x16,0x6f,0x6e,0x74,0x69,0x6e,
+0x75,0x65,0x3d,0x2e,0x10,0x70,0x2f,0x10,0x70,0x34,0x12,0x70,0x65,0x72,0x35,0x61,
+0x46,0x63,0x52,0x65,0x64,0x66,0x72,0x6c,2,0x65,0x2d,0x66,0x3b,0x6f,0x28,0x12,
+0x77,0x65,0x72,0x29,0x10,0x74,0x22,0x12,0x65,0x72,0x6d,0x23,1,0x6c,0x24,0x72,
+0x37,0x24,0x12,0x6f,0x73,0x65,0x25,0x10,0x78,0x38,0x13,0x74,0x65,0x6e,0x64,0x39,
+0x10,0x6f,0x26,0x13,0x72,0x6d,0x61,0x74,0x27,0xf,0x6c,0x7c,0x72,0x34,0x72,0x32,
+0x73,0x5a,0x78,0x76,0x7a,0x11,0x77,0x6a,0x4b,1,0x65,0x24,0x69,0x3b,0x1e,0x67,
+0x69,0x6f,0x6e,0x61,0x6c,0x69,0x6e,0x64,0x69,0x63,0x61,0x74,0x6f,0x72,0x3b,1,
+0x69,0x24,0x71,0x3f,0x18,0x6e,0x67,0x6c,0x65,0x71,0x75,0x6f,0x74,0x65,0x3f,0x10,
+0x78,0x21,0x6c,0x36,0x6d,0x3c,0x6e,0x76,0x6f,0x13,0x74,0x68,0x65,0x72,0x21,1,
+0x65,0x23,0x66,0x35,3,0x62,0x37,0x69,0x28,0x6c,0x29,0x6e,0x2b,0x10,0x64,1,
+0x6c,0x34,0x6e,0x11,0x75,0x6d,0x2a,0x12,0x6c,0x65,0x74,0x37,0x14,0x65,0x74,0x74,
+0x65,0x72,0x29,2,0x65,0x36,0x6c,0x39,0x75,0x2c,0x14,0x6d,0x65,0x72,0x69,0x63,
+0x2d,0x14,0x77,0x6c,0x69,0x6e,0x65,0x39,0x66,0x3f,0x66,0x40,0x67,0x4e,0x68,0x70,
+0x6b,0x10,0x61,0x26,0x15,0x74,0x61,0x6b,0x61,0x6e,0x61,0x27,0x10,0x6f,0x24,0x13,
+0x72,0x6d,0x61,0x74,0x25,1,0x61,0x3a,0x6c,0x19,0x75,0x65,0x61,0x66,0x74,0x65,
+0x72,0x7a,0x77,0x6a,0x49,0x10,0x7a,0x49,1,0x65,0x24,0x6c,0x3d,0x19,0x62,0x72,
+0x65,0x77,0x6c,0x65,0x74,0x74,0x65,0x72,0x3d,0x61,0x86,0x63,0x92,0x64,0x94,0x65,
+2,0x62,0x44,0x6d,0x5e,0x78,0x2e,0x13,0x74,0x65,0x6e,0x64,0x32,0x15,0x6e,0x75,
+0x6d,0x6c,0x65,0x74,0x2f,0x42,1,0x61,0x24,0x67,0x45,0x11,0x73,0x65,0x42,0x12,
+0x67,0x61,0x7a,0x45,0x46,0x16,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,0x47,0x15,0x6c,
+0x65,0x74,0x74,0x65,0x72,0x23,0x10,0x72,0x31,1,0x6f,0x24,0x71,0x41,0x18,0x75,
+0x62,0x6c,0x65,0x71,0x75,0x6f,0x74,0x65,0x41,2,0x63,0x32,0x6e,0x3c,0x6f,0x22,
+0x12,0x70,0x65,0x6e,0x23,0x24,0x13,0x6c,0x6f,0x73,0x65,0x25,0x20,0x12,0x6f,0x6e,
+0x65,0x21,0xd,0x6e,0xc1,0x86,0x73,0xa8,0x73,0x4c,0x74,0xa2,0x76,0x75,0xa2,0x83,
+0x7a,0xd8,0x70,0,2,0x6c,0xd9,0x20,0,0x70,0xd9,0x40,0,0x73,0xc3,0,
+0xfe,0xf,0,0,0,7,0x6f,0x3c,0x6f,0xff,8,0,0,0,0x70,0x3a,
+0x75,0x6e,0x79,0x13,0x6d,0x62,0x6f,0x6c,0xff,0xf,0,0,0,0x11,0x61,0x63,
+1,0x65,0x34,0x69,0x15,0x6e,0x67,0x6d,0x61,0x72,0x6b,0xa5,0,0x18,0x73,0x65,
+0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0xc3,0,0x16,0x72,0x72,0x6f,0x67,0x61,0x74,
+0x65,0xe1,0,0,0x63,0xff,2,0,0,0,0x65,0x38,0x6b,0xff,4,0,
+0,0,0x6d,0xff,1,0,0,0,0x16,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,
+0xd9,0x70,0,0x1d,0x69,0x74,0x6c,0x65,0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74,
+0x65,0x72,0x31,1,0x6e,0x40,0x70,0x1c,0x70,0x65,0x72,0x63,0x61,0x73,0x65,0x6c,
+0x65,0x74,0x74,0x65,0x72,0x25,0x17,0x61,0x73,0x73,0x69,0x67,0x6e,0x65,0x64,0x23,
+0x6e,0xa2,0x69,0x6f,0xa2,0x89,0x70,0xfe,0x30,0xf8,0,0,9,0x69,0x33,0x69,
+0xff,0x10,0,0,0,0x6f,0xfd,0x80,0,0,0x72,0x54,0x73,0xf9,0,0,
+0x75,0x12,0x6e,0x63,0x74,0xfe,0x30,0xf8,0,0,0x15,0x75,0x61,0x74,0x69,0x6f,
+0x6e,0xff,0x30,0xf8,0,0,0x17,0x69,0x76,0x61,0x74,0x65,0x75,0x73,0x65,0xdd,
+0,0,0x61,0x48,0x63,0xfd,0x40,0,0,0x64,0xe9,0,0,0x65,0xfd,0x20,
+0,0,0x66,0xff,0x20,0,0,0,0x1f,0x72,0x61,0x67,0x72,0x61,0x70,0x68,
+0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0xd9,0x40,0,0xbe,0,3,0x64,
+0xa7,0,0x6c,0xab,0,0x6f,0x30,0x75,0x13,0x6d,0x62,0x65,0x72,0xbf,0,0xb2,
+0,0x1b,0x6e,0x73,0x70,0x61,0x63,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0xa1,1,
+0x70,0x92,0x74,0x12,0x68,0x65,0x72,0xe6,0x80,1,3,0x6c,0x40,0x6e,0x4a,0x70,
+0x56,0x73,0x14,0x79,0x6d,0x62,0x6f,0x6c,0xff,8,0,0,0,0x14,0x65,0x74,
+0x74,0x65,0x72,0x61,0x14,0x75,0x6d,0x62,0x65,0x72,0xb3,0,0x19,0x75,0x6e,0x63,
+0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xfd,0x80,0,0,0x1c,0x65,0x6e,0x70,0x75,
+0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xf9,0,0,0x66,0xc0,0xc4,0x66,
+0xa2,0x47,0x69,0xa2,0x64,0x6c,0xa2,0x79,0x6d,0xa4,0xc0,4,0x61,0x6c,0x63,0xa5,
+0,0x65,0xa3,0x80,0x6e,0xa1,0x6f,0x15,0x64,0x69,0x66,0x69,0x65,0x72,1,0x6c,
+0x38,0x73,0x14,0x79,0x6d,0x62,0x6f,0x6c,0xff,4,0,0,0,0x14,0x65,0x74,
+0x74,0x65,0x72,0x41,1,0x72,0x3c,0x74,0x16,0x68,0x73,0x79,0x6d,0x62,0x6f,0x6c,
+0xff,1,0,0,0,0x10,0x6b,0xa5,0xc0,1,0x69,0x32,0x6f,0x13,0x72,0x6d,
+0x61,0x74,0xdb,0,0,0x1d,0x6e,0x61,0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,
+0x74,0x69,0x6f,0x6e,0xff,0x20,0,0,0,0x10,0x6e,0x1f,0x69,0x74,0x69,0x61,
+0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xff,0x10,0,0,
+0,0x9c,7,0x6d,0x18,0x6d,0x41,0x6f,0x28,0x74,0x31,0x75,0x25,0x60,0x1c,0x77,
+0x65,0x72,0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x29,0x63,0x3d,0x65,
+0x28,0x69,0x42,0x6c,0x29,0x13,0x74,0x74,0x65,0x72,0x9c,0x15,0x6e,0x75,0x6d,0x62,
+0x65,0x72,0xab,0,0x1a,0x6e,0x65,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,
+0xd9,0x20,0,0x63,0x46,0x64,0xa2,0x96,0x65,0x1b,0x6e,0x63,0x6c,0x6f,0x73,0x69,
+0x6e,0x67,0x6d,0x61,0x72,0x6b,0xa3,0x80,0xe6,0x80,1,7,0x6e,0x57,0x6e,0x52,
+0x6f,0x5e,0x73,0xe1,0,0,0x75,0x1b,0x72,0x72,0x65,0x6e,0x63,0x79,0x73,0x79,
+0x6d,0x62,0x6f,0x6c,0xff,2,0,0,0,0x22,0x12,0x74,0x72,0x6c,0xd9,0x80,
+0,0xdc,0,0,1,0x6d,0x62,0x6e,1,0x6e,0x30,0x74,0x12,0x72,0x6f,0x6c,
+0xd9,0x80,0,0x1f,0x65,0x63,0x74,0x6f,0x72,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,
+0x74,0x69,0x6f,0x6e,0xfd,0x40,0,0,0x19,0x62,0x69,0x6e,0x69,0x6e,0x67,0x6d,
+0x61,0x72,0x6b,0xa5,0xc0,0x61,0x58,0x63,0xd9,0x80,0,0x66,0xdb,0,0,0x6c,
+0x1d,0x6f,0x73,0x65,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xfd,
+0x20,0,0,0x18,0x73,0x65,0x64,0x6c,0x65,0x74,0x74,0x65,0x72,0x3d,2,0x61,
+0x32,0x65,0x50,0x69,0x12,0x67,0x69,0x74,0xa7,0,0x1c,0x73,0x68,0x70,0x75,0x6e,
+0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xe9,0,0,0x1a,0x63,0x69,0x6d,0x61,
+0x6c,0x6e,0x75,0x6d,0x62,0x65,0x72,0xa7,0
 };
 
-const char PropNameData::nameGroups[18440]={
+const char PropNameData::nameGroups[19082]={
 2,'A','l','p','h','a',0,'A','l','p','h','a','b','e','t','i','c',0,
 4,'N',0,'N','o',0,'F',0,'F','a','l','s','e',0,4,'Y',0,'Y','e','s',0,'T',0,'T','r','u','e',0,
 2,'N','R',0,'N','o','t','_','R','e','o','r','d','e','r','e','d',0,
@@ -1008,7 +1029,11 @@
 't','a','t','i','o','n',0,2,'E','m','o','j','i','_','M','o','d','i','f','i','e','r',0,'E','m','o','j','i','_','M','o','d',
 'i','f','i','e','r',0,2,'E','m','o','j','i','_','M','o','d','i','f','i','e','r','_','B','a','s','e',0,
 'E','m','o','j','i','_','M','o','d','i','f','i','e','r','_','B','a','s','e',0,
-2,'b','c',0,'B','i','d','i','_','C','l','a','s','s',0,2,'L',0,'L','e','f','t','_','T','o','_','R','i','g','h','t',0,
+2,'E','m','o','j','i','_','C','o','m','p','o','n','e','n','t',0,'E','m','o','j','i','_','C','o','m','p','o','n','e','n','t',
+0,2,'R','I',0,'R','e','g','i','o','n','a','l','_','I','n','d','i','c','a','t','o','r',0,
+2,'P','C','M',0,'P','r','e','p','e','n','d','e','d','_','C','o','n','c','a','t','e','n','a','t','i','o','n','_','M','a','r',
+'k',0,2,'b','c',0,'B','i','d','i','_','C','l','a','s','s',0,
+2,'L',0,'L','e','f','t','_','T','o','_','R','i','g','h','t',0,
 2,'R',0,'R','i','g','h','t','_','T','o','_','L','e','f','t',0,
 2,'E','N',0,'E','u','r','o','p','e','a','n','_','N','u','m','b','e','r',0,
 2,'E','S',0,'E','u','r','o','p','e','a','n','_','S','e','p','a','r','a','t','o','r',0,
@@ -1339,8 +1364,15 @@
 'e','n','t',0,2,'N','e','w','a',0,'N','e','w','a',0,2,'O','s','a','g','e',0,'O','s','a','g','e',0,
 2,'T','a','n','g','u','t',0,'T','a','n','g','u','t',0,2,'T','a','n','g','u','t','_','C','o','m','p','o','n','e','n','t',
 's',0,'T','a','n','g','u','t','_','C','o','m','p','o','n','e','n','t','s',0,
-2,'c','c','c',0,'C','a','n','o','n','i','c','a','l','_','C','o','m','b','i','n','i','n','g','_','C','l','a','s','s',0,
-2,'d','t',0,'D','e','c','o','m','p','o','s','i','t','i','o','n','_','T','y','p','e',0,
+2,'C','J','K','_','E','x','t','_','F',0,'C','J','K','_','U','n','i','f','i','e','d','_','I','d','e','o','g','r','a','p','h',
+'s','_','E','x','t','e','n','s','i','o','n','_','F',0,2,'K','a','n','a','_','E','x','t','_','A',0,
+'K','a','n','a','_','E','x','t','e','n','d','e','d','_','A',0,
+2,'M','a','s','a','r','a','m','_','G','o','n','d','i',0,'M','a','s','a','r','a','m','_','G','o','n','d','i',0,
+2,'N','u','s','h','u',0,'N','u','s','h','u',0,2,'S','o','y','o','m','b','o',0,'S','o','y','o','m','b','o',0,
+2,'S','y','r','i','a','c','_','S','u','p',0,'S','y','r','i','a','c','_','S','u','p','p','l','e','m','e','n','t',0,
+2,'Z','a','n','a','b','a','z','a','r','_','S','q','u','a','r','e',0,'Z','a','n','a','b','a','z','a','r','_','S','q','u','a',
+'r','e',0,2,'c','c','c',0,'C','a','n','o','n','i','c','a','l','_','C','o','m','b','i','n','i','n','g','_','C','l','a','s',
+'s',0,2,'d','t',0,'D','e','c','o','m','p','o','s','i','t','i','o','n','_','T','y','p','e',0,
 3,'N','o','n','e',0,'N','o','n','e',0,'n','o','n','e',0,
 3,'C','a','n',0,'C','a','n','o','n','i','c','a','l',0,'c','a','n',0,
 3,'C','o','m',0,'C','o','m','p','a','t',0,'c','o','m',0,
@@ -1460,6 +1492,17 @@
 2,'A','f','r','i','c','a','n','_','F','e','h',0,'A','f','r','i','c','a','n','_','F','e','h',0,
 2,'A','f','r','i','c','a','n','_','N','o','o','n',0,'A','f','r','i','c','a','n','_','N','o','o','n',0,
 2,'A','f','r','i','c','a','n','_','Q','a','f',0,'A','f','r','i','c','a','n','_','Q','a','f',0,
+2,'M','a','l','a','y','a','l','a','m','_','B','h','a',0,'M','a','l','a','y','a','l','a','m','_','B','h','a',0,
+2,'M','a','l','a','y','a','l','a','m','_','J','a',0,'M','a','l','a','y','a','l','a','m','_','J','a',0,
+2,'M','a','l','a','y','a','l','a','m','_','L','l','a',0,'M','a','l','a','y','a','l','a','m','_','L','l','a',0,
+2,'M','a','l','a','y','a','l','a','m','_','L','l','l','a',0,'M','a','l','a','y','a','l','a','m','_','L','l','l','a',0,
+2,'M','a','l','a','y','a','l','a','m','_','N','g','a',0,'M','a','l','a','y','a','l','a','m','_','N','g','a',0,
+2,'M','a','l','a','y','a','l','a','m','_','N','n','a',0,'M','a','l','a','y','a','l','a','m','_','N','n','a',0,
+2,'M','a','l','a','y','a','l','a','m','_','N','n','n','a',0,'M','a','l','a','y','a','l','a','m','_','N','n','n','a',0,
+2,'M','a','l','a','y','a','l','a','m','_','N','y','a',0,'M','a','l','a','y','a','l','a','m','_','N','y','a',0,
+2,'M','a','l','a','y','a','l','a','m','_','R','a',0,'M','a','l','a','y','a','l','a','m','_','R','a',0,
+2,'M','a','l','a','y','a','l','a','m','_','S','s','a',0,'M','a','l','a','y','a','l','a','m','_','S','s','a',0,
+2,'M','a','l','a','y','a','l','a','m','_','T','t','a',0,'M','a','l','a','y','a','l','a','m','_','T','t','a',0,
 2,'j','t',0,'J','o','i','n','i','n','g','_','T','y','p','e',0,
 2,'U',0,'N','o','n','_','J','o','i','n','i','n','g',0,2,'C',0,'J','o','i','n','_','C','a','u','s','i','n','g',0,
 2,'D',0,'D','u','a','l','_','J','o','i','n','i','n','g',0,
@@ -1493,7 +1536,6 @@
 2,'J','T',0,'J','T',0,2,'J','V',0,'J','V',0,2,'C','P',0,'C','l','o','s','e','_','P','a','r','e','n','t','h','e',
 's','i','s',0,2,'C','J',0,'C','o','n','d','i','t','i','o','n','a','l','_','J','a','p','a','n','e','s','e','_','S','t','a',
 'r','t','e','r',0,2,'H','L',0,'H','e','b','r','e','w','_','L','e','t','t','e','r',0,
-2,'R','I',0,'R','e','g','i','o','n','a','l','_','I','n','d','i','c','a','t','o','r',0,
 2,'E','B',0,'E','_','B','a','s','e',0,2,'E','M',0,'E','_','M','o','d','i','f','i','e','r',0,
 2,'Z','W','J',0,'Z','W','J',0,2,'n','t',0,'N','u','m','e','r','i','c','_','T','y','p','e',0,
 2,'N','o','n','e',0,'N','o','n','e',0,2,'D','e',0,'D','e','c','i','m','a','l',0,
@@ -1587,7 +1629,7 @@
 2,'S','i','n','d',0,'K','h','u','d','a','w','a','d','i',0,
 2,'W','a','r','a',0,'W','a','r','a','n','g','_','C','i','t','i',0,
 2,'A','f','a','k',0,'A','f','a','k',0,2,'J','u','r','c',0,'J','u','r','c',0,
-2,'M','r','o','o',0,'M','r','o',0,2,'N','s','h','u',0,'N','s','h','u',0,
+2,'M','r','o','o',0,'M','r','o',0,2,'N','s','h','u',0,'N','u','s','h','u',0,
 2,'S','h','r','d',0,'S','h','a','r','a','d','a',0,2,'S','o','r','a',0,'S','o','r','a','_','S','o','m','p','e','n','g',
 0,2,'T','a','k','r',0,'T','a','k','r','i',0,2,'T','a','n','g',0,'T','a','n','g','u','t',0,
 2,'W','o','l','e',0,'W','o','l','e',0,2,'H','l','u','w',0,'A','n','a','t','o','l','i','a','n','_','H','i','e','r','o',
@@ -1600,8 +1642,10 @@
 2,'B','h','k','s',0,'B','h','a','i','k','s','u','k','i',0,
 2,'M','a','r','c',0,'M','a','r','c','h','e','n',0,2,'O','s','g','e',0,'O','s','a','g','e',0,
 2,'H','a','n','b',0,'H','a','n','b',0,2,'J','a','m','o',0,'J','a','m','o',0,
-2,'Z','s','y','e',0,'Z','s','y','e',0,2,'h','s','t',0,'H','a','n','g','u','l','_','S','y','l','l','a','b','l','e','_',
-'T','y','p','e',0,2,'N','A',0,'N','o','t','_','A','p','p','l','i','c','a','b','l','e',0,
+2,'Z','s','y','e',0,'Z','s','y','e',0,2,'G','o','n','m',0,'M','a','s','a','r','a','m','_','G','o','n','d','i',0,
+2,'S','o','y','o',0,'S','o','y','o','m','b','o',0,2,'Z','a','n','b',0,'Z','a','n','a','b','a','z','a','r','_','S','q',
+'u','a','r','e',0,2,'h','s','t',0,'H','a','n','g','u','l','_','S','y','l','l','a','b','l','e','_','T','y','p','e',0,
+2,'N','A',0,'N','o','t','_','A','p','p','l','i','c','a','b','l','e',0,
 2,'L',0,'L','e','a','d','i','n','g','_','J','a','m','o',0,
 2,'V',0,'V','o','w','e','l','_','J','a','m','o',0,2,'T',0,'T','r','a','i','l','i','n','g','_','J','a','m','o',0,
 2,'L','V',0,'L','V','_','S','y','l','l','a','b','l','e',0,

Deleted: trunk/Build/source/libs/icu/icu-src/source/common/propsvec.c
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/propsvec.c	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/propsvec.c	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,527 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
-*******************************************************************************
-*
-*   Copyright (C) 2002-2011, International Business Machines
-*   Corporation and others.  All Rights Reserved.
-*
-*******************************************************************************
-*   file name:  propsvec.c
-*   encoding:   US-ASCII
-*   tab size:   8 (not used)
-*   indentation:4
-*
-*   created on: 2002feb22
-*   created by: Markus W. Scherer
-*
-*   Store bits (Unicode character properties) in bit set vectors.
-*/
-
-#include <stdlib.h>
-#include "unicode/utypes.h"
-#include "cmemory.h"
-#include "utrie.h"
-#include "utrie2.h"
-#include "uarrsort.h"
-#include "propsvec.h"
-#include "uassert.h"
-
-struct UPropsVectors {
-    uint32_t *v;
-    int32_t columns;  /* number of columns, plus two for start & limit values */
-    int32_t maxRows;
-    int32_t rows;
-    int32_t prevRow;  /* search optimization: remember last row seen */
-    UBool isCompacted;
-};
-
-#define UPVEC_INITIAL_ROWS (1<<12)
-#define UPVEC_MEDIUM_ROWS ((int32_t)1<<16)
-#define UPVEC_MAX_ROWS (UPVEC_MAX_CP+1)
-
-U_CAPI UPropsVectors * U_EXPORT2
-upvec_open(int32_t columns, UErrorCode *pErrorCode) {
-    UPropsVectors *pv;
-    uint32_t *v, *row;
-    uint32_t cp;
-
-    if(U_FAILURE(*pErrorCode)) {
-        return NULL;
-    }
-    if(columns<1) {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return NULL;
-    }
-    columns+=2; /* count range start and limit columns */
-
-    pv=(UPropsVectors *)uprv_malloc(sizeof(UPropsVectors));
-    v=(uint32_t *)uprv_malloc(UPVEC_INITIAL_ROWS*columns*4);
-    if(pv==NULL || v==NULL) {
-        uprv_free(pv);
-        uprv_free(v);
-        *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
-        return NULL;
-    }
-    uprv_memset(pv, 0, sizeof(UPropsVectors));
-    pv->v=v;
-    pv->columns=columns;
-    pv->maxRows=UPVEC_INITIAL_ROWS;
-    pv->rows=2+(UPVEC_MAX_CP-UPVEC_FIRST_SPECIAL_CP);
-
-    /* set the all-Unicode row and the special-value rows */
-    row=pv->v;
-    uprv_memset(row, 0, pv->rows*columns*4);
-    row[0]=0;
-    row[1]=0x110000;
-    row+=columns;
-    for(cp=UPVEC_FIRST_SPECIAL_CP; cp<=UPVEC_MAX_CP; ++cp) {
-        row[0]=cp;
-        row[1]=cp+1;
-        row+=columns;
-    }
-    return pv;
-}
-
-U_CAPI void U_EXPORT2
-upvec_close(UPropsVectors *pv) {
-    if(pv!=NULL) {
-        uprv_free(pv->v);
-        uprv_free(pv);
-    }
-}
-
-static uint32_t *
-_findRow(UPropsVectors *pv, UChar32 rangeStart) {
-    uint32_t *row;
-    int32_t columns, i, start, limit, prevRow;
-
-    columns=pv->columns;
-    limit=pv->rows;
-    prevRow=pv->prevRow;
-
-    /* check the vicinity of the last-seen row (start searching with an unrolled loop) */
-    row=pv->v+prevRow*columns;
-    if(rangeStart>=(UChar32)row[0]) {
-        if(rangeStart<(UChar32)row[1]) {
-            /* same row as last seen */
-            return row;
-        } else if(rangeStart<(UChar32)(row+=columns)[1]) {
-            /* next row after the last one */
-            pv->prevRow=prevRow+1;
-            return row;
-        } else if(rangeStart<(UChar32)(row+=columns)[1]) {
-            /* second row after the last one */
-            pv->prevRow=prevRow+2;
-            return row;
-        } else if((rangeStart-(UChar32)row[1])<10) {
-            /* we are close, continue looping */
-            prevRow+=2;
-            do {
-                ++prevRow;
-                row+=columns;
-            } while(rangeStart>=(UChar32)row[1]);
-            pv->prevRow=prevRow;
-            return row;
-        }
-    } else if(rangeStart<(UChar32)pv->v[1]) {
-        /* the very first row */
-        pv->prevRow=0;
-        return pv->v;
-    }
-
-    /* do a binary search for the start of the range */
-    start=0;
-    while(start<limit-1) {
-        i=(start+limit)/2;
-        row=pv->v+i*columns;
-        if(rangeStart<(UChar32)row[0]) {
-            limit=i;
-        } else if(rangeStart<(UChar32)row[1]) {
-            pv->prevRow=i;
-            return row;
-        } else {
-            start=i;
-        }
-    }
-
-    /* must be found because all ranges together always cover all of Unicode */
-    pv->prevRow=start;
-    return pv->v+start*columns;
-}
-
-U_CAPI void U_EXPORT2
-upvec_setValue(UPropsVectors *pv,
-               UChar32 start, UChar32 end,
-               int32_t column,
-               uint32_t value, uint32_t mask,
-               UErrorCode *pErrorCode) {
-    uint32_t *firstRow, *lastRow;
-    int32_t columns;
-    UChar32 limit;
-    UBool splitFirstRow, splitLastRow;
-
-    /* argument checking */
-    if(U_FAILURE(*pErrorCode)) {
-        return;
-    }
-    if( pv==NULL ||
-        start<0 || start>end || end>UPVEC_MAX_CP ||
-        column<0 || column>=(pv->columns-2)
-    ) {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-    if(pv->isCompacted) {
-        *pErrorCode=U_NO_WRITE_PERMISSION;
-        return;
-    }
-    limit=end+1;
-
-    /* initialize */
-    columns=pv->columns;
-    column+=2; /* skip range start and limit columns */
-    value&=mask;
-
-    /* find the rows whose ranges overlap with the input range */
-
-    /* find the first and last rows, always successful */
-    firstRow=_findRow(pv, start);
-    lastRow=_findRow(pv, end);
-
-    /*
-     * Rows need to be split if they partially overlap with the
-     * input range (only possible for the first and last rows)
-     * and if their value differs from the input value.
-     */
-    splitFirstRow= (UBool)(start!=(UChar32)firstRow[0] && value!=(firstRow[column]&mask));
-    splitLastRow= (UBool)(limit!=(UChar32)lastRow[1] && value!=(lastRow[column]&mask));
-
-    /* split first/last rows if necessary */
-    if(splitFirstRow || splitLastRow) {
-        int32_t count, rows;
-
-        rows=pv->rows;
-        if((rows+splitFirstRow+splitLastRow)>pv->maxRows) {
-            uint32_t *newVectors;
-            int32_t newMaxRows;
-
-            if(pv->maxRows<UPVEC_MEDIUM_ROWS) {
-                newMaxRows=UPVEC_MEDIUM_ROWS;
-            } else if(pv->maxRows<UPVEC_MAX_ROWS) {
-                newMaxRows=UPVEC_MAX_ROWS;
-            } else {
-                /* Implementation bug, or UPVEC_MAX_ROWS too low. */
-                *pErrorCode=U_INTERNAL_PROGRAM_ERROR;
-                return;
-            }
-            newVectors=(uint32_t *)uprv_malloc(newMaxRows*columns*4);
-            if(newVectors==NULL) {
-                *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
-                return;
-            }
-            uprv_memcpy(newVectors, pv->v, (size_t)rows*columns*4);
-            firstRow=newVectors+(firstRow-pv->v);
-            lastRow=newVectors+(lastRow-pv->v);
-            uprv_free(pv->v);
-            pv->v=newVectors;
-            pv->maxRows=newMaxRows;
-        }
-
-        /* count the number of row cells to move after the last row, and move them */
-        count = (int32_t)((pv->v+rows*columns)-(lastRow+columns));
-        if(count>0) {
-            uprv_memmove(
-                lastRow+(1+splitFirstRow+splitLastRow)*columns,
-                lastRow+columns,
-                count*4);
-        }
-        pv->rows=rows+splitFirstRow+splitLastRow;
-
-        /* split the first row, and move the firstRow pointer to the second part */
-        if(splitFirstRow) {
-            /* copy all affected rows up one and move the lastRow pointer */
-            count = (int32_t)((lastRow-firstRow)+columns);
-            uprv_memmove(firstRow+columns, firstRow, (size_t)count*4);
-            lastRow+=columns;
-
-            /* split the range and move the firstRow pointer */
-            firstRow[1]=firstRow[columns]=(uint32_t)start;
-            firstRow+=columns;
-        }
-
-        /* split the last row */
-        if(splitLastRow) {
-            /* copy the last row data */
-            uprv_memcpy(lastRow+columns, lastRow, (size_t)columns*4);
-
-            /* split the range and move the firstRow pointer */
-            lastRow[1]=lastRow[columns]=(uint32_t)limit;
-        }
-    }
-
-    /* set the "row last seen" to the last row for the range */
-    pv->prevRow=(int32_t)((lastRow-(pv->v))/columns);
-
-    /* set the input value in all remaining rows */
-    firstRow+=column;
-    lastRow+=column;
-    mask=~mask;
-    for(;;) {
-        *firstRow=(*firstRow&mask)|value;
-        if(firstRow==lastRow) {
-            break;
-        }
-        firstRow+=columns;
-    }
-}
-
-U_CAPI uint32_t U_EXPORT2
-upvec_getValue(const UPropsVectors *pv, UChar32 c, int32_t column) {
-    uint32_t *row;
-    UPropsVectors *ncpv;
-
-    if(pv->isCompacted || c<0 || c>UPVEC_MAX_CP || column<0 || column>=(pv->columns-2)) {
-        return 0;
-    }
-    ncpv=(UPropsVectors *)pv;
-    row=_findRow(ncpv, c);
-    return row[2+column];
-}
-
-U_CAPI uint32_t * U_EXPORT2
-upvec_getRow(const UPropsVectors *pv, int32_t rowIndex,
-             UChar32 *pRangeStart, UChar32 *pRangeEnd) {
-    uint32_t *row;
-    int32_t columns;
-
-    if(pv->isCompacted || rowIndex<0 || rowIndex>=pv->rows) {
-        return NULL;
-    }
-
-    columns=pv->columns;
-    row=pv->v+rowIndex*columns;
-    if(pRangeStart!=NULL) {
-        *pRangeStart=(UChar32)row[0];
-    }
-    if(pRangeEnd!=NULL) {
-        *pRangeEnd=(UChar32)row[1]-1;
-    }
-    return row+2;
-}
-
-static int32_t U_CALLCONV
-upvec_compareRows(const void *context, const void *l, const void *r) {
-    const uint32_t *left=(const uint32_t *)l, *right=(const uint32_t *)r;
-    const UPropsVectors *pv=(const UPropsVectors *)context;
-    int32_t i, count, columns;
-
-    count=columns=pv->columns; /* includes start/limit columns */
-
-    /* start comparing after start/limit but wrap around to them */
-    i=2;
-    do {
-        if(left[i]!=right[i]) {
-            return left[i]<right[i] ? -1 : 1;
-        }
-        if(++i==columns) {
-            i=0;
-        }
-    } while(--count>0);
-
-    return 0;
-}
-
-U_CAPI void U_EXPORT2
-upvec_compact(UPropsVectors *pv, UPVecCompactHandler *handler, void *context, UErrorCode *pErrorCode) {
-    uint32_t *row;
-    int32_t i, columns, valueColumns, rows, count;
-    UChar32 start, limit;
-
-    /* argument checking */
-    if(U_FAILURE(*pErrorCode)) {
-        return;
-    }
-    if(handler==NULL) {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-    if(pv->isCompacted) {
-        return;
-    }
-
-    /* Set the flag now: Sorting and compacting destroys the builder data structure. */
-    pv->isCompacted=TRUE;
-
-    rows=pv->rows;
-    columns=pv->columns;
-    U_ASSERT(columns>=3); /* upvec_open asserts this */
-    valueColumns=columns-2; /* not counting start & limit */
-
-    /* sort the properties vectors to find unique vector values */
-    uprv_sortArray(pv->v, rows, columns*4,
-                   upvec_compareRows, pv, FALSE, pErrorCode);
-    if(U_FAILURE(*pErrorCode)) {
-        return;
-    }
-
-    /*
-     * Find and set the special values.
-     * This has to do almost the same work as the compaction below,
-     * to find the indexes where the special-value rows will move.
-     */
-    row=pv->v;
-    count=-valueColumns;
-    for(i=0; i<rows; ++i) {
-        start=(UChar32)row[0];
-
-        /* count a new values vector if it is different from the current one */
-        if(count<0 || 0!=uprv_memcmp(row+2, row-valueColumns, valueColumns*4)) {
-            count+=valueColumns;
-        }
-
-        if(start>=UPVEC_FIRST_SPECIAL_CP) {
-            handler(context, start, start, count, row+2, valueColumns, pErrorCode);
-            if(U_FAILURE(*pErrorCode)) {
-                return;
-            }
-        }
-
-        row+=columns;
-    }
-
-    /* count is at the beginning of the last vector, add valueColumns to include that last vector */
-    count+=valueColumns;
-
-    /* Call the handler once more to signal the start of delivering real values. */
-    handler(context, UPVEC_START_REAL_VALUES_CP, UPVEC_START_REAL_VALUES_CP,
-            count, row-valueColumns, valueColumns, pErrorCode);
-    if(U_FAILURE(*pErrorCode)) {
-        return;
-    }
-
-    /*
-     * Move vector contents up to a contiguous array with only unique
-     * vector values, and call the handler function for each vector.
-     *
-     * This destroys the Properties Vector structure and replaces it
-     * with an array of just vector values.
-     */
-    row=pv->v;
-    count=-valueColumns;
-    for(i=0; i<rows; ++i) {
-        /* fetch these first before memmove() may overwrite them */
-        start=(UChar32)row[0];
-        limit=(UChar32)row[1];
-
-        /* add a new values vector if it is different from the current one */
-        if(count<0 || 0!=uprv_memcmp(row+2, pv->v+count, valueColumns*4)) {
-            count+=valueColumns;
-            uprv_memmove(pv->v+count, row+2, (size_t)valueColumns*4);
-        }
-
-        if(start<UPVEC_FIRST_SPECIAL_CP) {
-            handler(context, start, limit-1, count, pv->v+count, valueColumns, pErrorCode);
-            if(U_FAILURE(*pErrorCode)) {
-                return;
-            }
-        }
-
-        row+=columns;
-    }
-
-    /* count is at the beginning of the last vector, add one to include that last vector */
-    pv->rows=count/valueColumns+1;
-}
-
-U_CAPI const uint32_t * U_EXPORT2
-upvec_getArray(const UPropsVectors *pv, int32_t *pRows, int32_t *pColumns) {
-    if(!pv->isCompacted) {
-        return NULL;
-    }
-    if(pRows!=NULL) {
-        *pRows=pv->rows;
-    }
-    if(pColumns!=NULL) {
-        *pColumns=pv->columns-2;
-    }
-    return pv->v;
-}
-
-U_CAPI uint32_t * U_EXPORT2
-upvec_cloneArray(const UPropsVectors *pv,
-                 int32_t *pRows, int32_t *pColumns, UErrorCode *pErrorCode) {
-    uint32_t *clonedArray;
-    int32_t byteLength;
-
-    if(U_FAILURE(*pErrorCode)) {
-        return NULL;
-    }
-    if(!pv->isCompacted) {
-        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
-        return NULL;
-    }
-    byteLength=pv->rows*(pv->columns-2)*4;
-    clonedArray=(uint32_t *)uprv_malloc(byteLength);
-    if(clonedArray==NULL) {
-        *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
-        return NULL;
-    }
-    uprv_memcpy(clonedArray, pv->v, byteLength);
-    if(pRows!=NULL) {
-        *pRows=pv->rows;
-    }
-    if(pColumns!=NULL) {
-        *pColumns=pv->columns-2;
-    }
-    return clonedArray;
-}
-
-U_CAPI UTrie2 * U_EXPORT2
-upvec_compactToUTrie2WithRowIndexes(UPropsVectors *pv, UErrorCode *pErrorCode) {
-    UPVecToUTrie2Context toUTrie2={ NULL, 0, 0, 0 };
-    upvec_compact(pv, upvec_compactToUTrie2Handler, &toUTrie2, pErrorCode);
-    utrie2_freeze(toUTrie2.trie, UTRIE2_16_VALUE_BITS, pErrorCode);
-    if(U_FAILURE(*pErrorCode)) {
-        utrie2_close(toUTrie2.trie);
-        toUTrie2.trie=NULL;
-    }
-    return toUTrie2.trie;
-}
-
-/*
- * TODO(markus): Add upvec_16BitsToUTrie2() function that enumerates all rows, extracts
- * some 16-bit field and builds and returns a UTrie2.
- */
-
-U_CAPI void U_CALLCONV
-upvec_compactToUTrie2Handler(void *context,
-                             UChar32 start, UChar32 end,
-                             int32_t rowIndex, uint32_t *row, int32_t columns,
-                             UErrorCode *pErrorCode) {
-    UPVecToUTrie2Context *toUTrie2=(UPVecToUTrie2Context *)context;
-    if(start<UPVEC_FIRST_SPECIAL_CP) {
-        utrie2_setRange32(toUTrie2->trie, start, end, (uint32_t)rowIndex, TRUE, pErrorCode);
-    } else {
-        switch(start) {
-        case UPVEC_INITIAL_VALUE_CP:
-            toUTrie2->initialValue=rowIndex;
-            break;
-        case UPVEC_ERROR_VALUE_CP:
-            toUTrie2->errorValue=rowIndex;
-            break;
-        case UPVEC_START_REAL_VALUES_CP:
-            toUTrie2->maxValue=rowIndex;
-            if(rowIndex>0xffff) {
-                /* too many rows for a 16-bit trie */
-                *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR;
-            } else {
-                toUTrie2->trie=utrie2_open(toUTrie2->initialValue,
-                                           toUTrie2->errorValue, pErrorCode);
-            }
-            break;
-        default:
-            break;
-        }
-    }
-}

Added: trunk/Build/source/libs/icu/icu-src/source/common/propsvec.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/propsvec.cpp	                        (rev 0)
+++ trunk/Build/source/libs/icu/icu-src/source/common/propsvec.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -0,0 +1,529 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+/*
+*******************************************************************************
+*
+*   Copyright (C) 2002-2011, International Business Machines
+*   Corporation and others.  All Rights Reserved.
+*
+*******************************************************************************
+*   file name:  propsvec.c
+*   encoding:   UTF-8
+*   tab size:   8 (not used)
+*   indentation:4
+*
+*   created on: 2002feb22
+*   created by: Markus W. Scherer
+*
+*   Store bits (Unicode character properties) in bit set vectors.
+*/
+
+#include <stdlib.h>
+#include "unicode/utypes.h"
+#include "cmemory.h"
+#include "utrie.h"
+#include "utrie2.h"
+#include "uarrsort.h"
+#include "propsvec.h"
+#include "uassert.h"
+
+struct UPropsVectors {
+    uint32_t *v;
+    int32_t columns;  /* number of columns, plus two for start & limit values */
+    int32_t maxRows;
+    int32_t rows;
+    int32_t prevRow;  /* search optimization: remember last row seen */
+    UBool isCompacted;
+};
+
+#define UPVEC_INITIAL_ROWS (1<<12)
+#define UPVEC_MEDIUM_ROWS ((int32_t)1<<16)
+#define UPVEC_MAX_ROWS (UPVEC_MAX_CP+1)
+
+U_CAPI UPropsVectors * U_EXPORT2
+upvec_open(int32_t columns, UErrorCode *pErrorCode) {
+    UPropsVectors *pv;
+    uint32_t *v, *row;
+    uint32_t cp;
+
+    if(U_FAILURE(*pErrorCode)) {
+        return NULL;
+    }
+    if(columns<1) {
+        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
+        return NULL;
+    }
+    columns+=2; /* count range start and limit columns */
+
+    pv=(UPropsVectors *)uprv_malloc(sizeof(UPropsVectors));
+    v=(uint32_t *)uprv_malloc(UPVEC_INITIAL_ROWS*columns*4);
+    if(pv==NULL || v==NULL) {
+        uprv_free(pv);
+        uprv_free(v);
+        *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
+        return NULL;
+    }
+    uprv_memset(pv, 0, sizeof(UPropsVectors));
+    pv->v=v;
+    pv->columns=columns;
+    pv->maxRows=UPVEC_INITIAL_ROWS;
+    pv->rows=2+(UPVEC_MAX_CP-UPVEC_FIRST_SPECIAL_CP);
+
+    /* set the all-Unicode row and the special-value rows */
+    row=pv->v;
+    uprv_memset(row, 0, pv->rows*columns*4);
+    row[0]=0;
+    row[1]=0x110000;
+    row+=columns;
+    for(cp=UPVEC_FIRST_SPECIAL_CP; cp<=UPVEC_MAX_CP; ++cp) {
+        row[0]=cp;
+        row[1]=cp+1;
+        row+=columns;
+    }
+    return pv;
+}
+
+U_CAPI void U_EXPORT2
+upvec_close(UPropsVectors *pv) {
+    if(pv!=NULL) {
+        uprv_free(pv->v);
+        uprv_free(pv);
+    }
+}
+
+static uint32_t *
+_findRow(UPropsVectors *pv, UChar32 rangeStart) {
+    uint32_t *row;
+    int32_t columns, i, start, limit, prevRow;
+
+    columns=pv->columns;
+    limit=pv->rows;
+    prevRow=pv->prevRow;
+
+    /* check the vicinity of the last-seen row (start searching with an unrolled loop) */
+    row=pv->v+prevRow*columns;
+    if(rangeStart>=(UChar32)row[0]) {
+        if(rangeStart<(UChar32)row[1]) {
+            /* same row as last seen */
+            return row;
+        } else if(rangeStart<(UChar32)(row+=columns)[1]) {
+            /* next row after the last one */
+            pv->prevRow=prevRow+1;
+            return row;
+        } else if(rangeStart<(UChar32)(row+=columns)[1]) {
+            /* second row after the last one */
+            pv->prevRow=prevRow+2;
+            return row;
+        } else if((rangeStart-(UChar32)row[1])<10) {
+            /* we are close, continue looping */
+            prevRow+=2;
+            do {
+                ++prevRow;
+                row+=columns;
+            } while(rangeStart>=(UChar32)row[1]);
+            pv->prevRow=prevRow;
+            return row;
+        }
+    } else if(rangeStart<(UChar32)pv->v[1]) {
+        /* the very first row */
+        pv->prevRow=0;
+        return pv->v;
+    }
+
+    /* do a binary search for the start of the range */
+    start=0;
+    while(start<limit-1) {
+        i=(start+limit)/2;
+        row=pv->v+i*columns;
+        if(rangeStart<(UChar32)row[0]) {
+            limit=i;
+        } else if(rangeStart<(UChar32)row[1]) {
+            pv->prevRow=i;
+            return row;
+        } else {
+            start=i;
+        }
+    }
+
+    /* must be found because all ranges together always cover all of Unicode */
+    pv->prevRow=start;
+    return pv->v+start*columns;
+}
+
+U_CAPI void U_EXPORT2
+upvec_setValue(UPropsVectors *pv,
+               UChar32 start, UChar32 end,
+               int32_t column,
+               uint32_t value, uint32_t mask,
+               UErrorCode *pErrorCode) {
+    uint32_t *firstRow, *lastRow;
+    int32_t columns;
+    UChar32 limit;
+    UBool splitFirstRow, splitLastRow;
+
+    /* argument checking */
+    if(U_FAILURE(*pErrorCode)) {
+        return;
+    }
+    if( pv==NULL ||
+        start<0 || start>end || end>UPVEC_MAX_CP ||
+        column<0 || column>=(pv->columns-2)
+    ) {
+        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
+        return;
+    }
+    if(pv->isCompacted) {
+        *pErrorCode=U_NO_WRITE_PERMISSION;
+        return;
+    }
+    limit=end+1;
+
+    /* initialize */
+    columns=pv->columns;
+    column+=2; /* skip range start and limit columns */
+    value&=mask;
+
+    /* find the rows whose ranges overlap with the input range */
+
+    /* find the first and last rows, always successful */
+    firstRow=_findRow(pv, start);
+    lastRow=_findRow(pv, end);
+
+    /*
+     * Rows need to be split if they partially overlap with the
+     * input range (only possible for the first and last rows)
+     * and if their value differs from the input value.
+     */
+    splitFirstRow= (UBool)(start!=(UChar32)firstRow[0] && value!=(firstRow[column]&mask));
+    splitLastRow= (UBool)(limit!=(UChar32)lastRow[1] && value!=(lastRow[column]&mask));
+
+    /* split first/last rows if necessary */
+    if(splitFirstRow || splitLastRow) {
+        int32_t count, rows;
+
+        rows=pv->rows;
+        if((rows+splitFirstRow+splitLastRow)>pv->maxRows) {
+            uint32_t *newVectors;
+            int32_t newMaxRows;
+
+            if(pv->maxRows<UPVEC_MEDIUM_ROWS) {
+                newMaxRows=UPVEC_MEDIUM_ROWS;
+            } else if(pv->maxRows<UPVEC_MAX_ROWS) {
+                newMaxRows=UPVEC_MAX_ROWS;
+            } else {
+                /* Implementation bug, or UPVEC_MAX_ROWS too low. */
+                *pErrorCode=U_INTERNAL_PROGRAM_ERROR;
+                return;
+            }
+            newVectors=(uint32_t *)uprv_malloc(newMaxRows*columns*4);
+            if(newVectors==NULL) {
+                *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
+                return;
+            }
+            uprv_memcpy(newVectors, pv->v, (size_t)rows*columns*4);
+            firstRow=newVectors+(firstRow-pv->v);
+            lastRow=newVectors+(lastRow-pv->v);
+            uprv_free(pv->v);
+            pv->v=newVectors;
+            pv->maxRows=newMaxRows;
+        }
+
+        /* count the number of row cells to move after the last row, and move them */
+        count = (int32_t)((pv->v+rows*columns)-(lastRow+columns));
+        if(count>0) {
+            uprv_memmove(
+                lastRow+(1+splitFirstRow+splitLastRow)*columns,
+                lastRow+columns,
+                count*4);
+        }
+        pv->rows=rows+splitFirstRow+splitLastRow;
+
+        /* split the first row, and move the firstRow pointer to the second part */
+        if(splitFirstRow) {
+            /* copy all affected rows up one and move the lastRow pointer */
+            count = (int32_t)((lastRow-firstRow)+columns);
+            uprv_memmove(firstRow+columns, firstRow, (size_t)count*4);
+            lastRow+=columns;
+
+            /* split the range and move the firstRow pointer */
+            firstRow[1]=firstRow[columns]=(uint32_t)start;
+            firstRow+=columns;
+        }
+
+        /* split the last row */
+        if(splitLastRow) {
+            /* copy the last row data */
+            uprv_memcpy(lastRow+columns, lastRow, (size_t)columns*4);
+
+            /* split the range and move the firstRow pointer */
+            lastRow[1]=lastRow[columns]=(uint32_t)limit;
+        }
+    }
+
+    /* set the "row last seen" to the last row for the range */
+    pv->prevRow=(int32_t)((lastRow-(pv->v))/columns);
+
+    /* set the input value in all remaining rows */
+    firstRow+=column;
+    lastRow+=column;
+    mask=~mask;
+    for(;;) {
+        *firstRow=(*firstRow&mask)|value;
+        if(firstRow==lastRow) {
+            break;
+        }
+        firstRow+=columns;
+    }
+}
+
+U_CAPI uint32_t U_EXPORT2
+upvec_getValue(const UPropsVectors *pv, UChar32 c, int32_t column) {
+    uint32_t *row;
+    UPropsVectors *ncpv;
+
+    if(pv->isCompacted || c<0 || c>UPVEC_MAX_CP || column<0 || column>=(pv->columns-2)) {
+        return 0;
+    }
+    ncpv=(UPropsVectors *)pv;
+    row=_findRow(ncpv, c);
+    return row[2+column];
+}
+
+U_CAPI uint32_t * U_EXPORT2
+upvec_getRow(const UPropsVectors *pv, int32_t rowIndex,
+             UChar32 *pRangeStart, UChar32 *pRangeEnd) {
+    uint32_t *row;
+    int32_t columns;
+
+    if(pv->isCompacted || rowIndex<0 || rowIndex>=pv->rows) {
+        return NULL;
+    }
+
+    columns=pv->columns;
+    row=pv->v+rowIndex*columns;
+    if(pRangeStart!=NULL) {
+        *pRangeStart=(UChar32)row[0];
+    }
+    if(pRangeEnd!=NULL) {
+        *pRangeEnd=(UChar32)row[1]-1;
+    }
+    return row+2;
+}
+
+static int32_t U_CALLCONV
+upvec_compareRows(const void *context, const void *l, const void *r) {
+    const uint32_t *left=(const uint32_t *)l, *right=(const uint32_t *)r;
+    const UPropsVectors *pv=(const UPropsVectors *)context;
+    int32_t i, count, columns;
+
+    count=columns=pv->columns; /* includes start/limit columns */
+
+    /* start comparing after start/limit but wrap around to them */
+    i=2;
+    do {
+        if(left[i]!=right[i]) {
+            return left[i]<right[i] ? -1 : 1;
+        }
+        if(++i==columns) {
+            i=0;
+        }
+    } while(--count>0);
+
+    return 0;
+}
+
+U_CAPI void U_EXPORT2
+upvec_compact(UPropsVectors *pv, UPVecCompactHandler *handler, void *context, UErrorCode *pErrorCode) {
+    uint32_t *row;
+    int32_t i, columns, valueColumns, rows, count;
+    UChar32 start, limit;
+
+    /* argument checking */
+    if(U_FAILURE(*pErrorCode)) {
+        return;
+    }
+    if(handler==NULL) {
+        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
+        return;
+    }
+    if(pv->isCompacted) {
+        return;
+    }
+
+    /* Set the flag now: Sorting and compacting destroys the builder data structure. */
+    pv->isCompacted=TRUE;
+
+    rows=pv->rows;
+    columns=pv->columns;
+    U_ASSERT(columns>=3); /* upvec_open asserts this */
+    valueColumns=columns-2; /* not counting start & limit */
+
+    /* sort the properties vectors to find unique vector values */
+    uprv_sortArray(pv->v, rows, columns*4,
+                   upvec_compareRows, pv, FALSE, pErrorCode);
+    if(U_FAILURE(*pErrorCode)) {
+        return;
+    }
+
+    /*
+     * Find and set the special values.
+     * This has to do almost the same work as the compaction below,
+     * to find the indexes where the special-value rows will move.
+     */
+    row=pv->v;
+    count=-valueColumns;
+    for(i=0; i<rows; ++i) {
+        start=(UChar32)row[0];
+
+        /* count a new values vector if it is different from the current one */
+        if(count<0 || 0!=uprv_memcmp(row+2, row-valueColumns, valueColumns*4)) {
+            count+=valueColumns;
+        }
+
+        if(start>=UPVEC_FIRST_SPECIAL_CP) {
+            handler(context, start, start, count, row+2, valueColumns, pErrorCode);
+            if(U_FAILURE(*pErrorCode)) {
+                return;
+            }
+        }
+
+        row+=columns;
+    }
+
+    /* count is at the beginning of the last vector, add valueColumns to include that last vector */
+    count+=valueColumns;
+
+    /* Call the handler once more to signal the start of delivering real values. */
+    handler(context, UPVEC_START_REAL_VALUES_CP, UPVEC_START_REAL_VALUES_CP,
+            count, row-valueColumns, valueColumns, pErrorCode);
+    if(U_FAILURE(*pErrorCode)) {
+        return;
+    }
+
+    /*
+     * Move vector contents up to a contiguous array with only unique
+     * vector values, and call the handler function for each vector.
+     *
+     * This destroys the Properties Vector structure and replaces it
+     * with an array of just vector values.
+     */
+    row=pv->v;
+    count=-valueColumns;
+    for(i=0; i<rows; ++i) {
+        /* fetch these first before memmove() may overwrite them */
+        start=(UChar32)row[0];
+        limit=(UChar32)row[1];
+
+        /* add a new values vector if it is different from the current one */
+        if(count<0 || 0!=uprv_memcmp(row+2, pv->v+count, valueColumns*4)) {
+            count+=valueColumns;
+            uprv_memmove(pv->v+count, row+2, (size_t)valueColumns*4);
+        }
+
+        if(start<UPVEC_FIRST_SPECIAL_CP) {
+            handler(context, start, limit-1, count, pv->v+count, valueColumns, pErrorCode);
+            if(U_FAILURE(*pErrorCode)) {
+                return;
+            }
+        }
+
+        row+=columns;
+    }
+
+    /* count is at the beginning of the last vector, add one to include that last vector */
+    pv->rows=count/valueColumns+1;
+}
+
+U_CAPI const uint32_t * U_EXPORT2
+upvec_getArray(const UPropsVectors *pv, int32_t *pRows, int32_t *pColumns) {
+    if(!pv->isCompacted) {
+        return NULL;
+    }
+    if(pRows!=NULL) {
+        *pRows=pv->rows;
+    }
+    if(pColumns!=NULL) {
+        *pColumns=pv->columns-2;
+    }
+    return pv->v;
+}
+
+U_CAPI uint32_t * U_EXPORT2
+upvec_cloneArray(const UPropsVectors *pv,
+                 int32_t *pRows, int32_t *pColumns, UErrorCode *pErrorCode) {
+    uint32_t *clonedArray;
+    int32_t byteLength;
+
+    if(U_FAILURE(*pErrorCode)) {
+        return NULL;
+    }
+    if(!pv->isCompacted) {
+        *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR;
+        return NULL;
+    }
+    byteLength=pv->rows*(pv->columns-2)*4;
+    clonedArray=(uint32_t *)uprv_malloc(byteLength);
+    if(clonedArray==NULL) {
+        *pErrorCode=U_MEMORY_ALLOCATION_ERROR;
+        return NULL;
+    }
+    uprv_memcpy(clonedArray, pv->v, byteLength);
+    if(pRows!=NULL) {
+        *pRows=pv->rows;
+    }
+    if(pColumns!=NULL) {
+        *pColumns=pv->columns-2;
+    }
+    return clonedArray;
+}
+
+U_CAPI UTrie2 * U_EXPORT2
+upvec_compactToUTrie2WithRowIndexes(UPropsVectors *pv, UErrorCode *pErrorCode) {
+    UPVecToUTrie2Context toUTrie2={ NULL, 0, 0, 0 };
+    upvec_compact(pv, upvec_compactToUTrie2Handler, &toUTrie2, pErrorCode);
+    utrie2_freeze(toUTrie2.trie, UTRIE2_16_VALUE_BITS, pErrorCode);
+    if(U_FAILURE(*pErrorCode)) {
+        utrie2_close(toUTrie2.trie);
+        toUTrie2.trie=NULL;
+    }
+    return toUTrie2.trie;
+}
+
+/*
+ * TODO(markus): Add upvec_16BitsToUTrie2() function that enumerates all rows, extracts
+ * some 16-bit field and builds and returns a UTrie2.
+ */
+
+U_CAPI void U_CALLCONV
+upvec_compactToUTrie2Handler(void *context,
+                             UChar32 start, UChar32 end,
+                             int32_t rowIndex, uint32_t *row, int32_t columns,
+                             UErrorCode *pErrorCode) {
+    (void)row;
+    (void)columns;
+    UPVecToUTrie2Context *toUTrie2=(UPVecToUTrie2Context *)context;
+    if(start<UPVEC_FIRST_SPECIAL_CP) {
+        utrie2_setRange32(toUTrie2->trie, start, end, (uint32_t)rowIndex, TRUE, pErrorCode);
+    } else {
+        switch(start) {
+        case UPVEC_INITIAL_VALUE_CP:
+            toUTrie2->initialValue=rowIndex;
+            break;
+        case UPVEC_ERROR_VALUE_CP:
+            toUTrie2->errorValue=rowIndex;
+            break;
+        case UPVEC_START_REAL_VALUES_CP:
+            toUTrie2->maxValue=rowIndex;
+            if(rowIndex>0xffff) {
+                /* too many rows for a 16-bit trie */
+                *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR;
+            } else {
+                toUTrie2->trie=utrie2_open(toUTrie2->initialValue,
+                                           toUTrie2->errorValue, pErrorCode);
+            }
+            break;
+        default:
+            break;
+        }
+    }
+}


Property changes on: trunk/Build/source/libs/icu/icu-src/source/common/propsvec.cpp
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Build/source/libs/icu/icu-src/source/common/propsvec.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/propsvec.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/propsvec.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 *******************************************************************************
@@ -8,7 +8,7 @@
 *
 *******************************************************************************
 *   file name:  propsvec.h
-*   encoding:   US-ASCII
+*   encoding:   UTF-8
 *   tab size:   8 (not used)
 *   indentation:4
 *

Modified: trunk/Build/source/libs/icu/icu-src/source/common/punycode.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/punycode.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/punycode.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 *******************************************************************************
@@ -8,7 +8,7 @@
 *
 *******************************************************************************
 *   file name:  punycode.cpp
-*   encoding:   US-ASCII
+*   encoding:   UTF-8
 *   tab size:   8 (not used)
 *   indentation:4
 *

Modified: trunk/Build/source/libs/icu/icu-src/source/common/punycode.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/punycode.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/punycode.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 *******************************************************************************
@@ -8,7 +8,7 @@
 *
 *******************************************************************************
 *   file name:  punycode.h
-*   encoding:   US-ASCII
+*   encoding:   UTF-8
 *   tab size:   8 (not used)
 *   indentation:4
 *

Modified: trunk/Build/source/libs/icu/icu-src/source/common/putil.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/putil.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/putil.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 ******************************************************************************
@@ -43,7 +43,10 @@
 // Must be before any other #includes.
 #include "uposixdefs.h"
 
-#if (U_PF_MINGW <= U_PLATFORM && U_PLATFORM <= U_PF_CYGWIN) && defined(__STRICT_ANSI__)
+// First, the platform type. Need this for U_PLATFORM.
+#include "unicode/platform.h"
+
+#if (U_PF_CYGWIN <= U_PLATFORM) && defined(__STRICT_ANSI__)
 /* tzset isn't defined in strict ANSI on Cygwin and MinGW. */
 #undef __STRICT_ANSI__
 #endif
@@ -57,8 +60,7 @@
 #include <sys/time.h>
 #endif
 
-/* include ICU headers */
-#include "unicode/utypes.h"
+/* include the rest of the ICU headers */
 #include "unicode/putil.h"
 #include "unicode/ustring.h"
 #include "putilimp.h"
@@ -90,7 +92,9 @@
      * Should Cygwin be included as well (U_PLATFORM_HAS_WIN32_API)
      * to use native APIs as much as possible?
      */
+#ifndef WIN32_LEAN_AND_MEAN
 #   define WIN32_LEAN_AND_MEAN
+#endif
 #   define VC_EXTRALEAN
 #   define NOUSER
 #   define NOSERVICE
@@ -97,7 +101,20 @@
 #   define NOIME
 #   define NOMCX
 #   include <windows.h>
+#   include "unicode/uloc.h"
+#if U_PLATFORM_HAS_WINUWP_API == 0
 #   include "wintz.h"
+#else // U_PLATFORM_HAS_WINUWP_API
+typedef PVOID LPMSG; // TODO: figure out how to get rid of this typedef
+#include <Windows.Globalization.h>
+#include <windows.system.userprofile.h>
+#include <wrl/wrappers/corewrappers.h>
+#include <wrl/client.h>
+
+using namespace ABI::Windows::Foundation;
+using namespace Microsoft::WRL;
+using namespace Microsoft::WRL::Wrappers;
+#endif
 #elif U_PLATFORM == U_PF_OS400
 #   include <float.h>
 #   include <qusec.h>       /* error code structure */
@@ -651,7 +668,7 @@
 /* Note that U_TZNAME does *not* have to be tzname, but if it is,
    some platforms need to have it declared here. */
 
-#if defined(U_TZNAME) && (U_PLATFORM == U_PF_IRIX || U_PLATFORM_IS_DARWIN_BASED || (U_PLATFORM == U_PF_CYGWIN && !U_PLATFORM_USES_ONLY_WIN32_API))
+#if defined(U_TZNAME) && (U_PLATFORM == U_PF_IRIX || U_PLATFORM_IS_DARWIN_BASED)
 /* RS6000 and others reject char **tzname.  */
 extern U_IMPORT char *U_TZNAME[];
 #endif
@@ -658,6 +675,16 @@
 
 #if !UCONFIG_NO_FILE_IO && ((U_PLATFORM_IS_DARWIN_BASED && (U_PLATFORM != U_PF_IPHONE || defined(U_TIMEZONE))) || U_PLATFORM_IS_LINUX_BASED || U_PLATFORM == U_PF_BSD || U_PLATFORM == U_PF_SOLARIS)
 /* These platforms are likely to use Olson timezone IDs. */
+/* common targets of the symbolic link at TZDEFAULT are:
+ * "/usr/share/zoneinfo/<olsonID>" default, older Linux distros, macOS to 10.12
+ * "../usr/share/zoneinfo/<olsonID>" newer Linux distros: Red Hat Enterprise Linux 7, Ubuntu 16, SuSe Linux 12
+ * "/usr/share/lib/zoneinfo/<olsonID>" Solaris
+ * "../usr/share/lib/zoneinfo/<olsonID>" Solaris
+ * "/var/db/timezone/zoneinfo/<olsonID>" macOS 10.13
+ * To avoid checking lots of paths, just check that the target path
+ * before the <olsonID> ends with "/zoneinfo/", and the <olsonID> is valid.
+ */
+
 #define CHECK_LOCALTIME_LINK 1
 #if U_PLATFORM_IS_DARWIN_BASED
 #include <tzfile.h>
@@ -665,12 +692,12 @@
 #elif U_PLATFORM == U_PF_SOLARIS
 #define TZDEFAULT       "/etc/localtime"
 #define TZZONEINFO      "/usr/share/lib/zoneinfo/"
-#define TZZONEINFO2     "../usr/share/lib/zoneinfo/"
 #define TZ_ENV_CHECK    "localtime"
 #else
 #define TZDEFAULT       "/etc/localtime"
 #define TZZONEINFO      "/usr/share/zoneinfo/"
 #endif
+#define TZZONEINFOTAIL  "/zoneinfo/"
 #if U_HAVE_DIRENT_H
 #define TZFILE_SKIP     "posixrules" /* tz file to skip when searching. */
 /* Some Linux distributions have 'localtime' in /usr/share/zoneinfo
@@ -922,30 +949,30 @@
  * This function is not thread safe - it uses a global, gSearchTZFileResult, to hold its results.
  */
 static char* searchForTZFile(const char* path, DefaultTZInfo* tzInfo) {
-    DIR* dirp = opendir(path);
-    DIR* subDirp = NULL;
+    DIR* dirp = NULL;
     struct dirent* dirEntry = NULL;
+    char* result = NULL;
+    UErrorCode status = U_ZERO_ERROR;
 
-    char* result = NULL;
+    /* Save the current path */
+    CharString curpath(path, -1, status);
+    if (U_FAILURE(status)) {
+        goto cleanupAndReturn;
+    }
+
+    dirp = opendir(path);
     if (dirp == NULL) {
-        return result;
+        goto cleanupAndReturn;
     }
 
     if (gSearchTZFileResult == NULL) {
         gSearchTZFileResult = new CharString;
         if (gSearchTZFileResult == NULL) {
-            return NULL;
+            goto cleanupAndReturn;
         }
         ucln_common_registerCleanup(UCLN_COMMON_PUTIL, putil_cleanup);
     }
 
-    /* Save the current path */
-    UErrorCode status = U_ZERO_ERROR;
-    CharString curpath(path, -1, status);
-    if (U_FAILURE(status)) {
-        return NULL;
-    }
-
     /* Check each entry in the directory. */
     while((dirEntry = readdir(dirp)) != NULL) {
         const char* dirName = dirEntry->d_name;
@@ -954,15 +981,16 @@
             CharString newpath(curpath, status);
             newpath.append(dirName, -1, status);
             if (U_FAILURE(status)) {
-                return NULL;
+                break;
             }
 
+            DIR* subDirp = NULL;
             if ((subDirp = opendir(newpath.data())) != NULL) {
                 /* If this new path is a directory, make a recursive call with the newpath. */
                 closedir(subDirp);
                 newpath.append('/', status);
                 if (U_FAILURE(status)) {
-                    return NULL;
+                    break;
                 }
                 result = searchForTZFile(newpath.data(), tzInfo);
                 /*
@@ -986,7 +1014,7 @@
                     gSearchTZFileResult->clear();
                     gSearchTZFileResult->append(zoneid, -1, status);
                     if (U_FAILURE(status)) {
-                        return NULL;
+                        break;
                     }
                     result = gSearchTZFileResult->data();
                     /* Get out after the first one found. */
@@ -995,7 +1023,11 @@
             }
         }
     }
-    closedir(dirp);
+
+  cleanupAndReturn:
+    if (dirp) {
+        closedir(dirp);
+    }
     return result;
 }
 #endif
@@ -1008,16 +1040,66 @@
 #endif
 }
 
+// With the Universal Windows Platform we can just ask Windows for the name
+#if U_PLATFORM_HAS_WINUWP_API
 U_CAPI const char* U_EXPORT2
+uprv_getWindowsTimeZone()
+{
+    // Get default Windows timezone.   
+    ComPtr<IInspectable> calendar;
+    HRESULT hr = RoActivateInstance(
+        HStringReference(RuntimeClass_Windows_Globalization_Calendar).Get(),
+        &calendar);
+    if (SUCCEEDED(hr))
+    {
+        ComPtr<ABI::Windows::Globalization::ITimeZoneOnCalendar> timezone;
+        hr = calendar.As(&timezone);
+        if (SUCCEEDED(hr))
+        {
+            HString timezoneString;
+            hr = timezone->GetTimeZone(timezoneString.GetAddressOf());
+            if (SUCCEEDED(hr))
+            {
+                int32_t length = static_cast<int32_t>(wcslen(timezoneString.GetRawBuffer(NULL)));
+                char* asciiId = (char*)uprv_calloc(length + 1, sizeof(char));
+                if (asciiId != nullptr)
+                {
+                    u_UCharsToChars((UChar*)timezoneString.GetRawBuffer(NULL), asciiId, length);
+                    return asciiId;
+                }
+            }
+        }
+    }
+
+    // Failed
+    return nullptr;
+}
+#endif
+
+U_CAPI const char* U_EXPORT2
 uprv_tzname(int n)
 {
+    (void)n; // Avoid unreferenced parameter warning.
     const char *tzid = NULL;
 #if U_PLATFORM_USES_ONLY_WIN32_API
+#if U_PLATFORM_HAS_WINUWP_API > 0
+    tzid = uprv_getWindowsTimeZone();
+#else
     tzid = uprv_detectWindowsTimeZone();
+#endif
 
     if (tzid != NULL) {
         return tzid;
     }
+
+#ifndef U_TZNAME
+    // The return value is free'd in timezone.cpp on Windows because
+    // the other code path returns a pointer to a heap location.
+    // If we don't have a name already, then tzname wouldn't be any
+    // better, so just fall back.
+    return uprv_strdup("Etc/UTC");
+#endif // !U_TZNAME
+
 #else
 
 /*#if U_PLATFORM_IS_DARWIN_BASED
@@ -1059,24 +1141,15 @@
         */
         int32_t ret = (int32_t)readlink(TZDEFAULT, gTimeZoneBuffer, sizeof(gTimeZoneBuffer)-1);
         if (0 < ret) {
-            int32_t tzZoneInfoLen = uprv_strlen(TZZONEINFO);
+            int32_t tzZoneInfoTailLen = uprv_strlen(TZZONEINFOTAIL);
             gTimeZoneBuffer[ret] = 0;
-            if (uprv_strncmp(gTimeZoneBuffer, TZZONEINFO, tzZoneInfoLen) == 0
-                && isValidOlsonID(gTimeZoneBuffer + tzZoneInfoLen))
+            char *  tzZoneInfoTailPtr = uprv_strstr(gTimeZoneBuffer, TZZONEINFOTAIL);
+            
+            if (tzZoneInfoTailPtr != NULL
+                && isValidOlsonID(tzZoneInfoTailPtr + tzZoneInfoTailLen))
             {
-                return (gTimeZoneBufferPtr = gTimeZoneBuffer + tzZoneInfoLen);
+                return (gTimeZoneBufferPtr = tzZoneInfoTailPtr + tzZoneInfoTailLen);
             }
-#if U_PLATFORM == U_PF_SOLARIS
-            else
-            {
-                tzZoneInfoLen = uprv_strlen(TZZONEINFO2);
-                if (uprv_strncmp(gTimeZoneBuffer, TZZONEINFO2, tzZoneInfoLen) == 0
-                                && isValidOlsonID(gTimeZoneBuffer + tzZoneInfoLen))
-                {
-                    return (gTimeZoneBufferPtr = gTimeZoneBuffer + tzZoneInfoLen);
-                }
-            }
-#endif
         } else {
 #if defined(SEARCH_TZFILE)
             DefaultTZInfo* tzInfo = (DefaultTZInfo*)uprv_malloc(sizeof(DefaultTZInfo));
@@ -1162,7 +1235,8 @@
 static CharString *gTimeZoneFilesDirectory = NULL;
 
 #if U_POSIX_LOCALE || U_PLATFORM_USES_ONLY_WIN32_API
- static char *gCorrectedPOSIXLocale = NULL; /* Heap allocated */
+ static const char *gCorrectedPOSIXLocale = NULL; /* Sometimes heap allocated */
+ static bool gCorrectedPOSIXLocaleHeapAllocated = false;
 #endif
 
 static UBool U_CALLCONV putil_cleanup(void)
@@ -1183,9 +1257,10 @@
 #endif
 
 #if U_POSIX_LOCALE || U_PLATFORM_USES_ONLY_WIN32_API
-    if (gCorrectedPOSIXLocale) {
-        uprv_free(gCorrectedPOSIXLocale);
+    if (gCorrectedPOSIXLocale && gCorrectedPOSIXLocaleHeapAllocated) {
+        uprv_free(const_cast<char *>(gCorrectedPOSIXLocale));
         gCorrectedPOSIXLocale = NULL;
+        gCorrectedPOSIXLocaleHeapAllocated = false;
     }
 #endif
     return TRUE;
@@ -1219,7 +1294,7 @@
 #if (U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR)
         {
             char *p;
-            while(p = uprv_strchr(newDataDir, U_FILE_ALT_SEP_CHAR)) {
+            while((p = uprv_strchr(newDataDir, U_FILE_ALT_SEP_CHAR)) != NULL) {
                 *p = U_FILE_SEP_CHAR;
             }
         }
@@ -1297,7 +1372,9 @@
     */
 #   if !defined(ICU_NO_USER_DATA_OVERRIDE) && !UCONFIG_NO_FILE_IO
     /* First try to get the environment variable */
-    path=getenv("ICU_DATA");
+#       if U_PLATFORM_HAS_WINUWP_API == 0  // Windows UWP does not support getenv
+        path=getenv("ICU_DATA");
+#       endif
 #   endif
 
     /* ICU_DATA_DIR may be set as a compile option.
@@ -1326,9 +1403,35 @@
     }
 #endif
 
+#if defined(ICU_DATA_DIR_WINDOWS) && U_PLATFORM_HAS_WINUWP_API != 0
+    // Use data from the %windir%\globalization\icu directory
+    // This is only available if ICU is built as a system component
+    char datadir_path_buffer[MAX_PATH];
+    UINT length = GetWindowsDirectoryA(datadir_path_buffer, UPRV_LENGTHOF(datadir_path_buffer));
+    if (length > 0 && length < (UPRV_LENGTHOF(datadir_path_buffer) - sizeof(ICU_DATA_DIR_WINDOWS) - 1))
+    {
+        if (datadir_path_buffer[length - 1] != '\\')
+        {
+            datadir_path_buffer[length++] = '\\';
+            datadir_path_buffer[length] = '\0';
+        }
+
+        if ((length + 1 + sizeof(ICU_DATA_DIR_WINDOWS)) < UPRV_LENGTHOF(datadir_path_buffer))
+        {
+            uprv_strcat(datadir_path_buffer, ICU_DATA_DIR_WINDOWS);
+            path = datadir_path_buffer;
+        }
+    }
+#endif
+
     if(path==NULL) {
         /* It looks really bad, set it to something. */
+#if U_PLATFORM_HAS_WIN32_API
+        // Windows UWP will require icudtl.dat file in same directory as icuuc.dll
+        path = ".\\";
+#else
         path = "";
+#endif
     }
 
     u_setDataDirectory(path);
@@ -1349,7 +1452,7 @@
     gTimeZoneFilesDirectory->append(path, status);
 #if (U_FILE_SEP_CHAR != U_FILE_ALT_SEP_CHAR)
     char *p = gTimeZoneFilesDirectory->data();
-    while (p = uprv_strchr(p, U_FILE_ALT_SEP_CHAR)) {
+    while ((p = uprv_strchr(p, U_FILE_ALT_SEP_CHAR)) != NULL) {
         *p = U_FILE_SEP_CHAR;
     }
 #endif
@@ -1366,7 +1469,12 @@
         status = U_MEMORY_ALLOCATION_ERROR;
         return;
     }
+#if U_PLATFORM_HAS_WINUWP_API == 0
     const char *dir = getenv("ICU_TIMEZONE_FILES_DIR");
+#else
+    // TODO: UWP does not support alternate timezone data directories at this time
+    const char *dir = "";
+#endif // U_PLATFORM_HAS_WINUWP_API
 #if defined(U_TIMEZONE_FILES_DIR)
     if (dir == NULL) {
         dir = TO_STRING(U_TIMEZONE_FILES_DIR);
@@ -1603,6 +1711,7 @@
 
     if (gCorrectedPOSIXLocale == NULL) {
         gCorrectedPOSIXLocale = correctedPOSIXLocale;
+        gCorrectedPOSIXLocaleHeapAllocated = true;
         ucln_common_registerCleanup(UCLN_COMMON_PUTIL, putil_cleanup);
         correctedPOSIXLocale = NULL;
     }
@@ -1618,25 +1727,117 @@
     UErrorCode status = U_ZERO_ERROR;
     char *correctedPOSIXLocale = 0;
 
+    // If we have already figured this out just use the cached value
     if (gCorrectedPOSIXLocale != NULL) {
         return gCorrectedPOSIXLocale;
     }
 
-    LCID id = GetThreadLocale();
-    correctedPOSIXLocale = static_cast<char *>(uprv_malloc(POSIX_LOCALE_CAPACITY + 1));
-    if (correctedPOSIXLocale) {
-        int32_t posixLen = uprv_convertToPosix(id, correctedPOSIXLocale, POSIX_LOCALE_CAPACITY, &status);
-        if (U_SUCCESS(status)) {
-            *(correctedPOSIXLocale + posixLen) = 0;
-            gCorrectedPOSIXLocale = correctedPOSIXLocale;
-            ucln_common_registerCleanup(UCLN_COMMON_PUTIL, putil_cleanup);
-        } else {
-            uprv_free(correctedPOSIXLocale);
+    // No cached value, need to determine the current value
+    static WCHAR windowsLocale[LOCALE_NAME_MAX_LENGTH];
+#if U_PLATFORM_HAS_WINUWP_API == 0 
+    // If not a Universal Windows App, we'll need user default language.
+    // Vista and above should use Locale Names instead of LCIDs
+    int length = GetUserDefaultLocaleName(windowsLocale, UPRV_LENGTHOF(windowsLocale));
+#else
+    // In a UWP app, we want the top language that the application and user agreed upon
+    ComPtr<ABI::Windows::Foundation::Collections::IVectorView<HSTRING>> languageList;
+
+    ComPtr<ABI::Windows::Globalization::IApplicationLanguagesStatics> applicationLanguagesStatics;
+    HRESULT hr = GetActivationFactory(
+        HStringReference(RuntimeClass_Windows_Globalization_ApplicationLanguages).Get(),
+        &applicationLanguagesStatics);
+    if (SUCCEEDED(hr))
+    {
+        hr = applicationLanguagesStatics->get_Languages(&languageList);
+    }
+
+    if (FAILED(hr))
+    {
+        // If there is no application context, then use the top language from the user language profile
+        ComPtr<ABI::Windows::System::UserProfile::IGlobalizationPreferencesStatics> globalizationPreferencesStatics;
+        hr = GetActivationFactory(
+            HStringReference(RuntimeClass_Windows_System_UserProfile_GlobalizationPreferences).Get(),
+            &globalizationPreferencesStatics);
+        if (SUCCEEDED(hr))
+        {
+            hr = globalizationPreferencesStatics->get_Languages(&languageList);
         }
     }
 
+    // We have a list of languages, ICU knows one, so use the top one for our locale
+    HString topLanguage;
+    if (SUCCEEDED(hr))
+    {
+        hr = languageList->GetAt(0, topLanguage.GetAddressOf());
+    }
+
+    if (FAILED(hr))
+    {
+        // Unexpected, use en-US by default
+        if (gCorrectedPOSIXLocale == NULL) {
+            gCorrectedPOSIXLocale = "en_US";
+        }
+
+        return gCorrectedPOSIXLocale;
+    }
+
+    // ResolveLocaleName will get a likely subtags form consistent with Windows behavior.
+    int length = ResolveLocaleName(topLanguage.GetRawBuffer(NULL), windowsLocale, UPRV_LENGTHOF(windowsLocale));
+#endif
+    // Now we should have a Windows locale name that needs converted to the POSIX style,
+    if (length > 0)
+    {
+        // First we need to go from UTF-16 to char (and also convert from _ to - while we're at it.)
+        char modifiedWindowsLocale[LOCALE_NAME_MAX_LENGTH];
+
+        int32_t i;
+        for (i = 0; i < UPRV_LENGTHOF(modifiedWindowsLocale); i++)
+        {
+            if (windowsLocale[i] == '_')
+            {
+                modifiedWindowsLocale[i] = '-';
+            }
+            else
+            {
+                modifiedWindowsLocale[i] = static_cast<char>(windowsLocale[i]);
+            }
+
+            if (modifiedWindowsLocale[i] == '\0')
+            {
+                break;
+            }
+        }
+
+        if (i >= UPRV_LENGTHOF(modifiedWindowsLocale))
+        {
+            // Ran out of room, can't really happen, maybe we'll be lucky about a matching
+            // locale when tags are dropped
+            modifiedWindowsLocale[UPRV_LENGTHOF(modifiedWindowsLocale) - 1] = '\0';
+        }
+
+        // Now normalize the resulting name
+        correctedPOSIXLocale = static_cast<char *>(uprv_malloc(POSIX_LOCALE_CAPACITY + 1));
+        /* TODO: Should we just exit on memory allocation failure? */
+        if (correctedPOSIXLocale)
+        {
+            int32_t posixLen = uloc_canonicalize(modifiedWindowsLocale, correctedPOSIXLocale, POSIX_LOCALE_CAPACITY, &status);
+            if (U_SUCCESS(status))
+            {
+                *(correctedPOSIXLocale + posixLen) = 0;
+                gCorrectedPOSIXLocale = correctedPOSIXLocale;
+                gCorrectedPOSIXLocaleHeapAllocated = true;
+                ucln_common_registerCleanup(UCLN_COMMON_PUTIL, putil_cleanup);
+            }
+            else
+            {
+                uprv_free(correctedPOSIXLocale);
+            }
+        }
+    }
+
+    // If unable to find a locale we can agree upon, use en-US by default
     if (gCorrectedPOSIXLocale == NULL) {
-        return "en_US";
+        gCorrectedPOSIXLocale = "en_US";
     }
     return gCorrectedPOSIXLocale;
 
@@ -1923,9 +2124,35 @@
 
 #elif U_PLATFORM_USES_ONLY_WIN32_API
     static char codepage[64];
-    sprintf(codepage, "windows-%d", GetACP());
-    return codepage;
+    DWORD codepageNumber = 0;
 
+#if U_PLATFORM_HAS_WINUWP_API > 0
+    // UWP doesn't have a direct API to get the default ACP as Microsoft would rather
+    // have folks use Unicode than a "system" code page, however this is the same
+    // codepage as the system default locale codepage.  (FWIW, the system locale is
+    // ONLY used for codepage, it should never be used for anything else)
+    GetLocaleInfoEx(LOCALE_NAME_SYSTEM_DEFAULT, LOCALE_IDEFAULTANSICODEPAGE | LOCALE_RETURN_NUMBER,
+        (LPWSTR)&codepageNumber, sizeof(codepageNumber) / sizeof(WCHAR));
+#else
+    // Win32 apps can call GetACP
+    codepageNumber = GetACP();
+#endif
+    // Special case for UTF-8
+    if (codepageNumber == 65001)
+    { 
+        return "UTF-8";
+    }
+    // Windows codepages can look like windows-1252, so format the found number
+    // the numbers are eclectic, however all valid system code pages, besides UTF-8
+    // are between 3 and 19999
+    if (codepageNumber > 0 && codepageNumber < 20000)
+    {
+        sprintf(codepage, "windows-%ld", codepageNumber);
+        return codepage;
+    }
+    // If the codepage number call failed then return UTF-8
+    return "UTF-8";
+
 #elif U_POSIX_LOCALE
     static char codesetName[100];
     const char *localeName = NULL;
@@ -2108,12 +2335,9 @@
  * icucfg.h dependent code 
  */
 
-#if U_ENABLE_DYLOAD
- 
-#if HAVE_DLOPEN && !U_PLATFORM_USES_ONLY_WIN32_API
+#if U_ENABLE_DYLOAD && HAVE_DLOPEN && !U_PLATFORM_USES_ONLY_WIN32_API
 
 #if HAVE_DLFCN_H
-
 #ifdef __MVS__
 #ifndef __SUSV3
 #define __SUSV3 1
@@ -2120,7 +2344,7 @@
 #endif
 #endif
 #include <dlfcn.h>
-#endif
+#endif /* HAVE_DLFCN_H */
 
 U_INTERNAL void * U_EXPORT2
 uprv_dl_open(const char *libName, UErrorCode *status) {
@@ -2160,41 +2384,13 @@
   return uret.fp;
 }
 
-#else
+#elif U_ENABLE_DYLOAD && U_PLATFORM_USES_ONLY_WIN32_API && !U_PLATFORM_HAS_WINUWP_API
 
-/* null (nonexistent) implementation. */
+/* Windows API implementation. */
+// Note: UWP does not expose/allow these APIs, so the UWP version gets the null implementation. */
 
 U_INTERNAL void * U_EXPORT2
 uprv_dl_open(const char *libName, UErrorCode *status) {
-  if(U_FAILURE(*status)) return NULL;
-  *status = U_UNSUPPORTED_ERROR;
-  return NULL;
-}
-
-U_INTERNAL void U_EXPORT2
-uprv_dl_close(void *lib, UErrorCode *status) {
-  if(U_FAILURE(*status)) return;
-  *status = U_UNSUPPORTED_ERROR;
-  return;
-}
-
-
-U_INTERNAL UVoidFunction* U_EXPORT2
-uprv_dlsym_func(void *lib, const char* sym, UErrorCode *status) {
-  if(U_SUCCESS(*status)) {
-    *status = U_UNSUPPORTED_ERROR;
-  }
-  return (UVoidFunction*)NULL;
-}
-
-
-
-#endif
-
-#elif U_PLATFORM_USES_ONLY_WIN32_API
-
-U_INTERNAL void * U_EXPORT2
-uprv_dl_open(const char *libName, UErrorCode *status) {
   HMODULE lib = NULL;
   
   if(U_FAILURE(*status)) return NULL;
@@ -2218,7 +2414,6 @@
   return;
 }
 
-
 U_INTERNAL UVoidFunction* U_EXPORT2
 uprv_dlsym_func(void *lib, const char* sym, UErrorCode *status) {
   HMODULE handle = (HMODULE)lib;
@@ -2240,10 +2435,9 @@
   return addr;
 }
 
-
 #else
 
-/* No dynamic loading set. */
+/* No dynamic loading, null (nonexistent) implementation. */
 
 U_INTERNAL void * U_EXPORT2
 uprv_dl_open(const char *libName, UErrorCode *status) {
@@ -2261,7 +2455,6 @@
     return;
 }
 
-
 U_INTERNAL UVoidFunction* U_EXPORT2
 uprv_dlsym_func(void *lib, const char* sym, UErrorCode *status) {
   (void)lib;
@@ -2272,7 +2465,7 @@
   return (UVoidFunction*)NULL;
 }
 
-#endif /* U_ENABLE_DYLOAD */
+#endif
 
 /*
  * Hey, Emacs, please set the following:

Modified: trunk/Build/source/libs/icu/icu-src/source/common/putilimp.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/putilimp.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/putilimp.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 ******************************************************************************
@@ -72,15 +72,6 @@
 typedef size_t uintptr_t;
 #endif
 
-/**
- * \def U_HAVE_MSVC_2003_OR_EARLIER
- * Flag for workaround of MSVC 2003 optimization bugs
- * @internal
- */
-#if !defined(U_HAVE_MSVC_2003_OR_EARLIER) && defined(_MSC_VER) && (_MSC_VER < 1400)
-#define U_HAVE_MSVC_2003_OR_EARLIER
-#endif
-
 /*===========================================================================*/
 /** @{ Information about POSIX support                                       */
 /*===========================================================================*/
@@ -87,7 +78,7 @@
 
 #ifdef U_HAVE_NL_LANGINFO_CODESET
     /* Use the predefined value. */
-#elif U_PLATFORM_HAS_WIN32_API || U_PLATFORM == U_PF_ANDROID || U_PLATFORM == U_PF_QNX
+#elif U_PLATFORM_USES_ONLY_WIN32_API || U_PLATFORM == U_PF_ANDROID || U_PLATFORM == U_PF_QNX
 #   define U_HAVE_NL_LANGINFO_CODESET 0
 #else
 #   define U_HAVE_NL_LANGINFO_CODESET 1
@@ -106,7 +97,10 @@
 #ifdef U_TZSET
     /* Use the predefined value. */
 #elif U_PLATFORM_USES_ONLY_WIN32_API
+    // UWP doesn't support tzset or environment variables for tz
+#if U_PLATFORM_HAS_WINUWP_API == 0
 #   define U_TZSET _tzset
+#endif
 #elif U_PLATFORM == U_PF_OS400
    /* not defined */
 #else
@@ -117,15 +111,15 @@
     /* Use the predefined value. */
 #elif U_PLATFORM == U_PF_ANDROID
 #   define U_TIMEZONE timezone
+#elif defined(__UCLIBC__)
+    // uClibc does not have __timezone or _timezone.
+#elif defined(_NEWLIB_VERSION)
+#   define U_TIMEZONE _timezone
+#elif defined(__GLIBC__)
+    // glibc
+#   define U_TIMEZONE __timezone
 #elif U_PLATFORM_IS_LINUX_BASED
-#   if defined(__UCLIBC__)
-       /* uClibc does not have __timezone or _timezone. */
-#   elif defined(_NEWLIB_VERSION)
-#      define U_TIMEZONE      _timezone
-#   elif defined(__GLIBC__)
-       /* glibc */
-#      define U_TIMEZONE      __timezone
-#   endif
+    // not defined
 #elif U_PLATFORM_USES_ONLY_WIN32_API
 #   define U_TIMEZONE _timezone
 #elif U_PLATFORM == U_PF_BSD && !defined(__NetBSD__)
@@ -141,7 +135,10 @@
 #ifdef U_TZNAME
     /* Use the predefined value. */
 #elif U_PLATFORM_USES_ONLY_WIN32_API
+    /* not usable on all windows platforms */
+#if U_PLATFORM_HAS_WINUWP_API == 0
 #   define U_TZNAME _tzname
+#endif
 #elif U_PLATFORM == U_PF_OS400
    /* not defined */
 #else
@@ -208,7 +205,7 @@
 /**
  * \def U_HAVE_STD_ATOMICS
  * Defines whether the standard C++11 <atomic> is available.
- * ICU will use this when avialable,
+ * ICU will use this when available,
  * otherwise will fall back to compiler or platform specific alternatives.
  * @internal
  */
@@ -233,7 +230,7 @@
 
 /**
  *  \def U_HAVE_CLANG_ATOMICS
- *  Defines whether Clang c11 style built-in atomics are avaialable.
+ *  Defines whether Clang c11 style built-in atomics are available.
  *  These are used in preference to gcc atomics when both are available.
  */
 #ifdef U_HAVE_CLANG_ATOMICS
@@ -271,7 +268,7 @@
 
 /**
  * Platform utilities isolates the platform dependencies of the
- * libarary.  For each platform which this code is ported to, these
+ * library.  For each platform which this code is ported to, these
  * functions may have to be re-implemented.
  */
 
@@ -419,7 +416,7 @@
 
 /**
  * Please use uloc_getDefault() instead.
- * Return the default locale ID string by querying ths system, or
+ * Return the default locale ID string by querying the system, or
  *     zero if one cannot be found. 
  * This function can call setlocale() on Unix platforms. Please read the
  * platform documentation on setlocale() before calling this function.

Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbi.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbi.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbi.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 ***************************************************************************
@@ -7,7 +7,7 @@
 ***************************************************************************
 */
 //
-//  file:  rbbi.c    Contains the implementation of the rule based break iterator
+//  file:  rbbi.cpp  Contains the implementation of the rule based break iterator
 //                   runtime engine and the API implementation for
 //                   class RuleBasedBreakIterator
 //
@@ -21,19 +21,20 @@
 #include "unicode/rbbi.h"
 #include "unicode/schriter.h"
 #include "unicode/uchriter.h"
+#include "unicode/uclean.h"
 #include "unicode/udata.h"
-#include "unicode/uclean.h"
+
+#include "brkeng.h"
+#include "ucln_cmn.h"
+#include "cmemory.h"
+#include "cstring.h"
 #include "rbbidata.h"
+#include "rbbi_cache.h"
 #include "rbbirb.h"
-#include "cmemory.h"
-#include "cstring.h"
+#include "uassert.h"
 #include "umutex.h"
-#include "ucln_cmn.h"
-#include "brkeng.h"
+#include "uvectr32.h"
 
-#include "uassert.h"
-#include "uvector.h"
-
 // if U_LOCAL_SERVICE_HOOK is defined, then localsvc.cpp is expected to be included.
 #if U_LOCAL_SERVICE_HOOK
 #include "localsvc.h"
@@ -40,16 +41,16 @@
 #endif
 
 #ifdef RBBI_DEBUG
-static UBool fTrace = FALSE;
+static UBool gTrace = FALSE;
 #endif
 
 U_NAMESPACE_BEGIN
 
 // The state number of the starting state
-#define START_STATE 1
+constexpr int32_t START_STATE = 1;
 
 // The state-transition value indicating "stop"
-#define STOP_STATE  0
+constexpr int32_t STOP_STATE = 0;
 
 
 UOBJECT_DEFINE_RTTI_IMPLEMENTATION(RuleBasedBreakIterator)
@@ -63,9 +64,8 @@
  * Constructs a RuleBasedBreakIterator that uses the already-created
  * tables object that is passed in as a parameter.
  */
-RuleBasedBreakIterator::RuleBasedBreakIterator(RBBIDataHeader* data, UErrorCode &status)
-{
-    init();
+RuleBasedBreakIterator::RuleBasedBreakIterator(RBBIDataHeader* data, UErrorCode &status) {
+    init(status);
     fData = new RBBIDataWrapper(data, status); // status checked in constructor
     if (U_FAILURE(status)) {return;}
     if(fData == 0) {
@@ -81,7 +81,7 @@
 RuleBasedBreakIterator::RuleBasedBreakIterator(const uint8_t *compiledRules,
                        uint32_t       ruleLength,
                        UErrorCode     &status) {
-    init();
+    init(status);
     if (U_FAILURE(status)) {
         return;
     }
@@ -94,13 +94,13 @@
         status = U_ILLEGAL_ARGUMENT_ERROR;
         return;
     }
-    fData = new RBBIDataWrapper(data, RBBIDataWrapper::kDontAdopt, status); 
+    fData = new RBBIDataWrapper(data, RBBIDataWrapper::kDontAdopt, status);
     if (U_FAILURE(status)) {return;}
     if(fData == 0) {
         status = U_MEMORY_ALLOCATION_ERROR;
         return;
     }
-}    
+}
 
 
 //-------------------------------------------------------------------------------
@@ -111,7 +111,7 @@
 //-------------------------------------------------------------------------------
 RuleBasedBreakIterator::RuleBasedBreakIterator(UDataMemory* udm, UErrorCode &status)
 {
-    init();
+    init(status);
     fData = new RBBIDataWrapper(udm, status); // status checked in constructor
     if (U_FAILURE(status)) {return;}
     if(fData == 0) {
@@ -131,7 +131,7 @@
                                                 UParseError          &parseError,
                                                 UErrorCode           &status)
 {
-    init();
+    init(status);
     if (U_FAILURE(status)) {return;}
     RuleBasedBreakIterator *bi = (RuleBasedBreakIterator *)
         RBBIRuleBuilder::createRuleBasedBreakIterator(rules, &parseError, status);
@@ -153,7 +153,8 @@
 //                           of rules.
 //-------------------------------------------------------------------------------
 RuleBasedBreakIterator::RuleBasedBreakIterator() {
-    init();
+    UErrorCode status = U_ZERO_ERROR;
+    init(status);
 }
 
 
@@ -166,7 +167,8 @@
 RuleBasedBreakIterator::RuleBasedBreakIterator(const RuleBasedBreakIterator& other)
 : BreakIterator(other)
 {
-    this->init();
+    UErrorCode status = U_ZERO_ERROR;
+    this->init(status);
     *this = other;
 }
 
@@ -181,10 +183,10 @@
     }
     fCharIter = NULL;
     delete fSCharIter;
-    fCharIter = NULL;
+    fSCharIter = NULL;
     delete fDCharIter;
     fDCharIter = NULL;
-    
+
     utext_close(fText);
 
     if (fData != NULL) {
@@ -191,18 +193,17 @@
         fData->removeReference();
         fData = NULL;
     }
-    if (fCachedBreakPositions) {
-        uprv_free(fCachedBreakPositions);
-        fCachedBreakPositions = NULL;
-    }
-    if (fLanguageBreakEngines) {
-        delete fLanguageBreakEngines;
-        fLanguageBreakEngines = NULL;
-    }
-    if (fUnhandledBreakEngine) {
-        delete fUnhandledBreakEngine;
-        fUnhandledBreakEngine = NULL;
-    }
+    delete fBreakCache;
+    fBreakCache = NULL;
+
+    delete fDictionaryCache;
+    fDictionaryCache = NULL;
+
+    delete fLanguageBreakEngines;
+    fLanguageBreakEngines = NULL;
+
+    delete fUnhandledBreakEngine;
+    fUnhandledBreakEngine = NULL;
 }
 
 /**
@@ -214,7 +215,8 @@
     if (this == &that) {
         return *this;
     }
-    reset();    // Delete break cache information
+    BreakIterator::operator=(that);
+
     fBreakType = that.fBreakType;
     if (fLanguageBreakEngines != NULL) {
         delete fLanguageBreakEngines;
@@ -244,6 +246,17 @@
         fData = that.fData->addReference();
     }
 
+    fPosition = that.fPosition;
+    fRuleStatusIndex = that.fRuleStatusIndex;
+    fDone = that.fDone;
+
+    // TODO: both the dictionary and the main cache need to be copied.
+    //       Current position could be within a dictionary range. Trying to continue
+    //       the iteration without the caches present would go to the rules, with
+    //       the assumption that the current position is on a rule boundary.
+    fBreakCache->reset(fPosition, fRuleStatusIndex);
+    fDictionaryCache->reset();
+
     return *this;
 }
 
@@ -255,15 +268,15 @@
 //                Initializes all fields, leaving the object in a consistent state.
 //
 //-----------------------------------------------------------------------------
-void RuleBasedBreakIterator::init() {
-    UErrorCode  status    = U_ZERO_ERROR;
-    fText                 = utext_openUChars(NULL, NULL, 0, &status);
+void RuleBasedBreakIterator::init(UErrorCode &status) {
+    fText                 = NULL;
     fCharIter             = NULL;
     fSCharIter            = NULL;
     fDCharIter            = NULL;
     fData                 = NULL;
-    fLastRuleStatusIndex  = 0;
-    fLastStatusIndexValid = TRUE;
+    fPosition             = 0;
+    fRuleStatusIndex      = 0;
+    fDone                 = false;
     fDictionaryCharCount  = 0;
     fBreakType            = UBRK_WORD;  // Defaulting BreakType to word gives reasonable
                                         //   dictionary behavior for Break Iterators that are
@@ -270,18 +283,28 @@
                                         //   built from rules.  Even better would be the ability to
                                         //   declare the type in the rules.
 
-    fCachedBreakPositions    = NULL;
-    fLanguageBreakEngines    = NULL;
-    fUnhandledBreakEngine    = NULL;
-    fNumCachedBreakPositions = 0;
-    fPositionInCache         = 0;
+    fLanguageBreakEngines = NULL;
+    fUnhandledBreakEngine = NULL;
+    fBreakCache           = NULL;
+    fDictionaryCache      = NULL;
 
+    if (U_FAILURE(status)) {
+        return;
+    }
+
+    fText            = utext_openUChars(NULL, NULL, 0, &status);
+    fDictionaryCache = new DictionaryCache(this, status);
+    fBreakCache      = new BreakCache(this, status);
+    if (U_SUCCESS(status) && (fText == NULL || fDictionaryCache == NULL || fBreakCache == NULL)) {
+        status = U_MEMORY_ALLOCATION_ERROR;
+    }
+
 #ifdef RBBI_DEBUG
     static UBool debugInitDone = FALSE;
     if (debugInitDone == FALSE) {
         char *debugEnv = getenv("U_RBBIDEBUG");
         if (debugEnv && uprv_strstr(debugEnv, "trace")) {
-            fTrace = TRUE;
+            gTrace = TRUE;
         }
         debugInitDone = TRUE;
     }
@@ -311,16 +334,28 @@
     if (typeid(*this) != typeid(that)) {
         return FALSE;
     }
+    if (this == &that) {
+        return TRUE;
+    }
 
+    // The base class BreakIterator carries no state that participates in equality,
+    // and does not implement an equality function that would otherwise be
+    // checked at this point.
+
     const RuleBasedBreakIterator& that2 = (const RuleBasedBreakIterator&) that;
 
     if (!utext_equals(fText, that2.fText)) {
         // The two break iterators are operating on different text,
-        //   or have a different interation position.
+        //   or have a different iteration position.
+        //   Note that fText's position is always the same as the break iterator's position.
         return FALSE;
     };
 
-    // TODO:  need a check for when in a dictionary region at different offsets.
+    if (!(fPosition == that2.fPosition &&
+            fRuleStatusIndex == that2.fRuleStatusIndex &&
+            fDone == that2.fDone)) {
+        return FALSE;
+    }
 
     if (that2.fData == fData ||
         (fData != NULL && that2.fData != NULL && *that2.fData == *fData)) {
@@ -348,7 +383,8 @@
     if (U_FAILURE(status)) {
         return;
     }
-    reset();
+    fBreakCache->reset();
+    fDictionaryCache->reset();
     fText = utext_clone(fText, ut, FALSE, TRUE, &status);
 
     // Set up a dummy CharacterIterator to be returned if anyone
@@ -377,38 +413,17 @@
 
 
 UText *RuleBasedBreakIterator::getUText(UText *fillIn, UErrorCode &status) const {
-    UText *result = utext_clone(fillIn, fText, FALSE, TRUE, &status);  
+    UText *result = utext_clone(fillIn, fText, FALSE, TRUE, &status);
     return result;
 }
 
 
-
-/**
- * Returns the description used to create this iterator
- */
-const UnicodeString&
-RuleBasedBreakIterator::getRules() const {
-    if (fData != NULL) {
-        return fData->getRuleSourceString();
-    } else {
-        static const UnicodeString *s;
-        if (s == NULL) {
-            // TODO:  something more elegant here.
-            //        perhaps API should return the string by value.
-            //        Note:  thread unsafe init & leak are semi-ok, better than
-            //               what was before.  Sould be cleaned up, though.
-            s = new UnicodeString;
-        }
-        return *s;
-    }
-}
-
 //=======================================================================
 // BreakIterator overrides
 //=======================================================================
 
 /**
- * Return a CharacterIterator over the text being analyzed.  
+ * Return a CharacterIterator over the text being analyzed.
  */
 CharacterIterator&
 RuleBasedBreakIterator::getText() const {
@@ -422,7 +437,7 @@
  */
 void
 RuleBasedBreakIterator::adoptText(CharacterIterator* newText) {
-    // If we are holding a CharacterIterator adopted from a 
+    // If we are holding a CharacterIterator adopted from a
     //   previous call to this function, delete it now.
     if (fCharIter!=fSCharIter && fCharIter!=fDCharIter) {
         delete fCharIter;
@@ -430,8 +445,9 @@
 
     fCharIter = newText;
     UErrorCode status = U_ZERO_ERROR;
-    reset();
-    if (newText==NULL || newText->startIndex() != 0) {   
+    fBreakCache->reset();
+    fDictionaryCache->reset();
+    if (newText==NULL || newText->startIndex() != 0) {
         // startIndex !=0 wants to be an error, but there's no way to report it.
         // Make the iterator text be an empty string.
         fText = utext_openUChars(fText, NULL, 0, &status);
@@ -449,10 +465,11 @@
 void
 RuleBasedBreakIterator::setText(const UnicodeString& newText) {
     UErrorCode status = U_ZERO_ERROR;
-    reset();
+    fBreakCache->reset();
+    fDictionaryCache->reset();
     fText = utext_openConstUnicodeString(fText, &newText, &status);
 
-    // Set up a character iterator on the string.  
+    // Set up a character iterator on the string.
     //   Needed in case someone calls getText().
     //  Can not, unfortunately, do this lazily on the (probably never)
     //  call to getText(), because getText is const.
@@ -509,13 +526,12 @@
  * @return The new iterator position, which is zero.
  */
 int32_t RuleBasedBreakIterator::first(void) {
-    reset();
-    fLastRuleStatusIndex  = 0;
-    fLastStatusIndexValid = TRUE;
-    //if (fText == NULL)
-    //    return BreakIterator::DONE;
-
-    utext_setNativeIndex(fText, 0);
+    UErrorCode status = U_ZERO_ERROR;
+    if (!fBreakCache->seek(0)) {
+        fBreakCache->populateNear(0, status);
+    }
+    fBreakCache->current();
+    U_ASSERT(fPosition == 0);
     return 0;
 }
 
@@ -524,17 +540,12 @@
  * @return The text's past-the-end offset.
  */
 int32_t RuleBasedBreakIterator::last(void) {
-    reset();
-    if (fText == NULL) {
-        fLastRuleStatusIndex  = 0;
-        fLastStatusIndexValid = TRUE;
-        return BreakIterator::DONE;
-    }
-
-    fLastStatusIndexValid = FALSE;
-    int32_t pos = (int32_t)utext_nativeLength(fText);
-    utext_setNativeIndex(fText, pos);
-    return pos;
+    int32_t endPos = (int32_t)utext_nativeLength(fText);
+    UBool endShouldBeBoundary = isBoundary(endPos);      // Has side effect of setting iterator position.
+    (void)endShouldBeBoundary;
+    U_ASSERT(endShouldBeBoundary);
+    U_ASSERT(fPosition == endPos);
+    return endPos;
 }
 
 /**
@@ -547,15 +558,18 @@
  * the current one.
  */
 int32_t RuleBasedBreakIterator::next(int32_t n) {
-    int32_t result = current();
-    while (n > 0) {
-        result = next();
-        --n;
+    int32_t result = 0;
+    if (n > 0) {
+        for (; n > 0 && result != UBRK_DONE; --n) {
+            result = next();
+        }
+    } else if (n < 0) {
+        for (; n < 0 && result != UBRK_DONE; ++n) {
+            result = previous();
+        }
+    } else {
+        result = current();
     }
-    while (n < 0) {
-        result = previous();
-        ++n;
-    }
     return result;
 }
 
@@ -564,346 +578,67 @@
  * @return The position of the first boundary after this one.
  */
 int32_t RuleBasedBreakIterator::next(void) {
-    // if we have cached break positions and we're still in the range
-    // covered by them, just move one step forward in the cache
-    if (fCachedBreakPositions != NULL) {
-        if (fPositionInCache < fNumCachedBreakPositions - 1) {
-            ++fPositionInCache;
-            int32_t pos = fCachedBreakPositions[fPositionInCache];
-            utext_setNativeIndex(fText, pos);
-            return pos;
-        }
-        else {
-            reset();
-        }
-    }
-
-    int32_t startPos = current();
-    fDictionaryCharCount = 0;
-    int32_t result = handleNext(fData->fForwardTable);
-    if (fDictionaryCharCount > 0) {
-        result = checkDictionary(startPos, result, FALSE);
-    }
-    return result;
+    fBreakCache->next();
+    return fDone ? UBRK_DONE : fPosition;
 }
 
 /**
- * Advances the iterator backwards, to the last boundary preceding this one.
- * @return The position of the last boundary position preceding this one.
+ * Move the iterator backwards, to the boundary preceding the current one.
+ *
+ *         Starts from the current position within fText.
+ *         Starting position need not be on a boundary.
+ *
+ * @return The position of the boundary position immediately preceding the starting position.
  */
 int32_t RuleBasedBreakIterator::previous(void) {
-    int32_t result;
-    int32_t startPos;
-
-    // if we have cached break positions and we're still in the range
-    // covered by them, just move one step backward in the cache
-    if (fCachedBreakPositions != NULL) {
-        if (fPositionInCache > 0) {
-            --fPositionInCache;
-            // If we're at the beginning of the cache, need to reevaluate the
-            // rule status
-            if (fPositionInCache <= 0) {
-                fLastStatusIndexValid = FALSE;
-            }
-            int32_t pos = fCachedBreakPositions[fPositionInCache];
-            utext_setNativeIndex(fText, pos);
-            return pos;
-        }
-        else {
-            reset();
-        }
-    }
-
-    // if we're already sitting at the beginning of the text, return DONE
-    if (fText == NULL || (startPos = current()) == 0) {
-        fLastRuleStatusIndex  = 0;
-        fLastStatusIndexValid = TRUE;
-        return BreakIterator::DONE;
-    }
-
-    if (fData->fSafeRevTable != NULL || fData->fSafeFwdTable != NULL) {
-        result = handlePrevious(fData->fReverseTable);
-        if (fDictionaryCharCount > 0) {
-            result = checkDictionary(result, startPos, TRUE);
-        }
-        return result;
-    }
-
-    // old rule syntax
-    // set things up.  handlePrevious() will back us up to some valid
-    // break position before the current position (we back our internal
-    // iterator up one step to prevent handlePrevious() from returning
-    // the current position), but not necessarily the last one before
-    // where we started
-
-    int32_t start = current();
-
-    (void)UTEXT_PREVIOUS32(fText);
-    int32_t lastResult    = handlePrevious(fData->fReverseTable);
-    if (lastResult == UBRK_DONE) {
-        lastResult = 0;
-        utext_setNativeIndex(fText, 0);
-    }
-    result = lastResult;
-    int32_t lastTag       = 0;
-    UBool   breakTagValid = FALSE;
-
-    // iterate forward from the known break position until we pass our
-    // starting point.  The last break position before the starting
-    // point is our return value
-
-    for (;;) {
-        result         = next();
-        if (result == BreakIterator::DONE || result >= start) {
-            break;
-        }
-        lastResult     = result;
-        lastTag        = fLastRuleStatusIndex;
-        breakTagValid  = TRUE;
-    }
-
-    // fLastBreakTag wants to have the value for section of text preceding
-    // the result position that we are to return (in lastResult.)  If
-    // the backwards rules overshot and the above loop had to do two or more
-    // next()s to move up to the desired return position, we will have a valid
-    // tag value. But, if handlePrevious() took us to exactly the correct result position,
-    // we wont have a tag value for that position, which is only set by handleNext().
-
-    // Set the current iteration position to be the last break position
-    // before where we started, and then return that value.
-    utext_setNativeIndex(fText, lastResult);
-    fLastRuleStatusIndex  = lastTag;       // for use by getRuleStatus()
-    fLastStatusIndexValid = breakTagValid;
-
-    // No need to check the dictionary; it will have been handled by
-    // next()
-
-    return lastResult;
+    UErrorCode status = U_ZERO_ERROR;
+    fBreakCache->previous(status);
+    return fDone ? UBRK_DONE : fPosition;
 }
 
 /**
  * Sets the iterator to refer to the first boundary position following
  * the specified position.
- * @offset The position from which to begin searching for a break position.
+ * @param startPos The position from which to begin searching for a break position.
  * @return The position of the first break after the current position.
  */
-int32_t RuleBasedBreakIterator::following(int32_t offset) {
-    // if the offset passed in is already past the end of the text,
-    // just return DONE; if it's before the beginning, return the
+int32_t RuleBasedBreakIterator::following(int32_t startPos) {
+    // if the supplied position is before the beginning, return the
     // text's starting offset
-    if (fText == NULL || offset >= utext_nativeLength(fText)) {
-        last();
-        return next();
-    }
-    else if (offset < 0) {
+    if (startPos < 0) {
         return first();
     }
 
     // Move requested offset to a code point start. It might be on a trail surrogate,
-    // or on a trail byte if the input is UTF-8.
-    utext_setNativeIndex(fText, offset);
-    offset = (int32_t)utext_getNativeIndex(fText);
+    // or on a trail byte if the input is UTF-8. Or it may be beyond the end of the text.
+    utext_setNativeIndex(fText, startPos);
+    startPos = (int32_t)utext_getNativeIndex(fText);
 
-    // if we have cached break positions and offset is in the range
-    // covered by them, use them
-    // TODO: could use binary search
-    // TODO: what if offset is outside range, but break is not?
-    if (fCachedBreakPositions != NULL) {
-        if (offset >= fCachedBreakPositions[0]
-                && offset < fCachedBreakPositions[fNumCachedBreakPositions - 1]) {
-            fPositionInCache = 0;
-            // We are guaranteed not to leave the array due to range test above
-            while (offset >= fCachedBreakPositions[fPositionInCache]) {
-                ++fPositionInCache;
-            }
-            int32_t pos = fCachedBreakPositions[fPositionInCache];
-            utext_setNativeIndex(fText, pos);
-            return pos;
-        }
-        else {
-            reset();
-        }
-    }
-
-    // Set our internal iteration position (temporarily)
-    // to the position passed in.  If this is the _beginning_ position,
-    // then we can just use next() to get our return value
-
-    int32_t result = 0;
-
-    if (fData->fSafeRevTable != NULL) {
-        // new rule syntax
-        utext_setNativeIndex(fText, offset);
-        // move forward one codepoint to prepare for moving back to a
-        // safe point.
-        // this handles offset being between a supplementary character
-        // TODO: is this still needed, with move to code point boundary handled above?
-        (void)UTEXT_NEXT32(fText);
-        // handlePrevious will move most of the time to < 1 boundary away
-        handlePrevious(fData->fSafeRevTable);
-        int32_t result = next();
-        while (result <= offset) {
-            result = next();
-        }
-        return result;
-    }
-    if (fData->fSafeFwdTable != NULL) {
-        // backup plan if forward safe table is not available
-        utext_setNativeIndex(fText, offset);
-        (void)UTEXT_PREVIOUS32(fText);
-        // handle next will give result >= offset
-        handleNext(fData->fSafeFwdTable);
-        // previous will give result 0 or 1 boundary away from offset,
-        // most of the time
-        // we have to
-        int32_t oldresult = previous();
-        while (oldresult > offset) {
-            int32_t result = previous();
-            if (result <= offset) {
-                return oldresult;
-            }
-            oldresult = result;
-        }
-        int32_t result = next();
-        if (result <= offset) {
-            return next();
-        }
-        return result;
-    }
-    // otherwise, we have to sync up first.  Use handlePrevious() to back
-    // up to a known break position before the specified position (if
-    // we can determine that the specified position is a break position,
-    // we don't back up at all).  This may or may not be the last break
-    // position at or before our starting position.  Advance forward
-    // from here until we've passed the starting position.  The position
-    // we stop on will be the first break position after the specified one.
-    // old rule syntax
-
-    utext_setNativeIndex(fText, offset);
-    if (offset==0 || 
-        (offset==1  && utext_getNativeIndex(fText)==0)) {
-        return next();
-    }
-    result = previous();
-
-    while (result != BreakIterator::DONE && result <= offset) {
-        result = next();
-    }
-
-    return result;
+    UErrorCode status = U_ZERO_ERROR;
+    fBreakCache->following(startPos, status);
+    return fDone ? UBRK_DONE : fPosition;
 }
 
 /**
  * Sets the iterator to refer to the last boundary position before the
  * specified position.
- * @offset The position to begin searching for a break from.
+ * @param offset The position to begin searching for a break from.
  * @return The position of the last boundary before the starting position.
  */
 int32_t RuleBasedBreakIterator::preceding(int32_t offset) {
-    // if the offset passed in is already past the end of the text,
-    // just return DONE; if it's before the beginning, return the
-    // text's starting offset
     if (fText == NULL || offset > utext_nativeLength(fText)) {
         return last();
     }
-    else if (offset < 0) {
-        return first();
-    }
 
     // Move requested offset to a code point start. It might be on a trail surrogate,
     // or on a trail byte if the input is UTF-8.
+
     utext_setNativeIndex(fText, offset);
-    offset = (int32_t)utext_getNativeIndex(fText);
+    int32_t adjustedOffset = utext_getNativeIndex(fText);
 
-    // if we have cached break positions and offset is in the range
-    // covered by them, use them
-    if (fCachedBreakPositions != NULL) {
-        // TODO: binary search?
-        // TODO: What if offset is outside range, but break is not?
-        if (offset > fCachedBreakPositions[0]
-                && offset <= fCachedBreakPositions[fNumCachedBreakPositions - 1]) {
-            fPositionInCache = 0;
-            while (fPositionInCache < fNumCachedBreakPositions
-                   && offset > fCachedBreakPositions[fPositionInCache])
-                ++fPositionInCache;
-            --fPositionInCache;
-            // If we're at the beginning of the cache, need to reevaluate the
-            // rule status
-            if (fPositionInCache <= 0) {
-                fLastStatusIndexValid = FALSE;
-            }
-            utext_setNativeIndex(fText, fCachedBreakPositions[fPositionInCache]);
-            return fCachedBreakPositions[fPositionInCache];
-        }
-        else {
-            reset();
-        }
-    }
-
-    // if we start by updating the current iteration position to the
-    // position specified by the caller, we can just use previous()
-    // to carry out this operation
-
-    if (fData->fSafeFwdTable != NULL) {
-        // new rule syntax
-        utext_setNativeIndex(fText, offset);
-        int32_t newOffset = (int32_t)UTEXT_GETNATIVEINDEX(fText);
-        if (newOffset != offset) {
-            // Will come here if specified offset was not a code point boundary AND
-            //   the underlying implmentation is using UText, which snaps any non-code-point-boundary
-            //   indices to the containing code point.
-            // For breakitereator::preceding only, these non-code-point indices need to be moved
-            //   up to refer to the following codepoint.
-            (void)UTEXT_NEXT32(fText);
-            offset = (int32_t)UTEXT_GETNATIVEINDEX(fText);
-        }
-
-        // TODO:  (synwee) would it be better to just check for being in the middle of a surrogate pair,
-        //        rather than adjusting the position unconditionally?
-        //        (Change would interact with safe rules.)
-        // TODO:  change RBBI behavior for off-boundary indices to match that of UText?
-        //        affects only preceding(), seems cleaner, but is slightly different.
-        (void)UTEXT_PREVIOUS32(fText);
-        handleNext(fData->fSafeFwdTable);
-        int32_t result = (int32_t)UTEXT_GETNATIVEINDEX(fText);
-        while (result >= offset) {
-            result = previous();
-        }
-        return result;
-    }
-    if (fData->fSafeRevTable != NULL) {
-        // backup plan if forward safe table is not available
-        //  TODO:  check whether this path can be discarded
-        //         It's probably OK to say that rules must supply both safe tables
-        //            if they use safe tables at all.  We have certainly never described
-        //            to anyone how to work with just one safe table.
-        utext_setNativeIndex(fText, offset);
-        (void)UTEXT_NEXT32(fText);
-        
-        // handle previous will give result <= offset
-        handlePrevious(fData->fSafeRevTable);
-
-        // next will give result 0 or 1 boundary away from offset,
-        // most of the time
-        // we have to
-        int32_t oldresult = next();
-        while (oldresult < offset) {
-            int32_t result = next();
-            if (result >= offset) {
-                return oldresult;
-            }
-            oldresult = result;
-        }
-        int32_t result = previous();
-        if (result >= offset) {
-            return previous();
-        }
-        return result;
-    }
-
-    // old rule syntax
-    utext_setNativeIndex(fText, offset);
-    return previous();
+    UErrorCode status = U_ZERO_ERROR;
+    fBreakCache->preceding(adjustedOffset, status);
+    return fDone ? UBRK_DONE : fPosition;
 }
 
 /**
@@ -910,21 +645,11 @@
  * Returns true if the specfied position is a boundary position.  As a side
  * effect, leaves the iterator pointing to the first boundary position at
  * or after "offset".
+ *
  * @param offset the offset to check.
  * @return True if "offset" is a boundary position.
  */
 UBool RuleBasedBreakIterator::isBoundary(int32_t offset) {
-    // the beginning index of the iterator is always a boundary position by definition
-    if (offset == 0) {
-        first();       // For side effects on current position, tag values.
-        return TRUE;
-    }
-
-    if (offset == (int32_t)utext_nativeLength(fText)) {
-        last();       // For side effects on current position, tag values.
-        return TRUE;
-    }
-
     // out-of-range indexes are never boundary positions
     if (offset < 0) {
         first();       // For side effects on current position, tag values.
@@ -931,29 +656,42 @@
         return FALSE;
     }
 
-    if (offset > utext_nativeLength(fText)) {
-        last();        // For side effects on current position, tag values.
+    // Adjust offset to be on a code point boundary and not beyond the end of the text.
+    // Note that isBoundary() is always be false for offsets that are not on code point boundaries.
+    // But we still need the side effect of leaving iteration at the following boundary.
+
+    utext_setNativeIndex(fText, offset);
+    int32_t adjustedOffset = utext_getNativeIndex(fText);
+
+    bool result = false;
+    UErrorCode status = U_ZERO_ERROR;
+    if (fBreakCache->seek(adjustedOffset) || fBreakCache->populateNear(adjustedOffset, status)) {
+        result = (fBreakCache->current() == offset);
+    }
+
+    if (result && adjustedOffset < offset && utext_char32At(fText, offset) == U_SENTINEL) {
+        // Original offset is beyond the end of the text. Return FALSE, it's not a boundary,
+        // but the iteration position remains set to the end of the text, which is a boundary.
         return FALSE;
     }
-
-    // otherwise, we can use following() on the position before the specified
-    // one and return true if the position we get back is the one the user
-    // specified
-    utext_previous32From(fText, offset);
-    int32_t backOne = (int32_t)UTEXT_GETNATIVEINDEX(fText);
-    UBool    result  = following(backOne) == offset;
+    if (!result) {
+        // Not on a boundary. isBoundary() must leave iterator on the following boundary.
+        // Cache->seek(), above, left us on the preceding boundary, so advance one.
+        next();
+    }
     return result;
 }
 
+
 /**
  * Returns the current iteration position.
  * @return The current iteration position.
  */
 int32_t RuleBasedBreakIterator::current(void) const {
-    int32_t  pos = (int32_t)UTEXT_GETNATIVEINDEX(fText);
-    return pos;
+    return fPosition;
 }
- 
+
+
 //=======================================================================
 // implementation
 //=======================================================================
@@ -1020,43 +758,43 @@
 
 //-----------------------------------------------------------------------------------
 //
-//  handleNext(stateTable)
-//     This method is the actual implementation of the rbbi next() method. 
-//     This method initializes the state machine to state 1
-//     and advances through the text character by character until we reach the end
-//     of the text or the state machine transitions to state 0.  We update our return
-//     value every time the state machine passes through an accepting state.
+//  handleNext()
+//     Run the state machine to find a boundary
 //
 //-----------------------------------------------------------------------------------
-int32_t RuleBasedBreakIterator::handleNext(const RBBIStateTable *statetable) {
+int32_t RuleBasedBreakIterator::handleNext() {
     int32_t             state;
     uint16_t            category        = 0;
     RBBIRunMode         mode;
-    
+
     RBBIStateTableRow  *row;
     UChar32             c;
     LookAheadResults    lookAheadMatches;
     int32_t             result             = 0;
     int32_t             initialPosition    = 0;
+    const RBBIStateTable *statetable       = fData->fForwardTable;
     const char         *tableData          = statetable->fTableData;
     uint32_t            tableRowLen        = statetable->fRowLen;
-
     #ifdef RBBI_DEBUG
-        if (fTrace) {
+        if (gTrace) {
             RBBIDebugPuts("Handle Next   pos   char  state category");
         }
     #endif
 
-    // No matter what, handleNext alway correctly sets the break tag value.
-    fLastStatusIndexValid = TRUE;
-    fLastRuleStatusIndex = 0;
+    // handleNext alway sets the break tag value.
+    // Set the default for it.
+    fRuleStatusIndex = 0;
 
+    fDictionaryCharCount = 0;
+
     // if we're already at the end of the text, return DONE.
-    initialPosition = (int32_t)UTEXT_GETNATIVEINDEX(fText); 
+    initialPosition = fPosition;
+    UTEXT_SETNATIVEINDEX(fText, initialPosition);
     result          = initialPosition;
     c               = UTEXT_NEXT32(fText);
-    if (fData == NULL || c==U_SENTINEL) {
-        return BreakIterator::DONE;
+    if (c==U_SENTINEL) {
+        fDone = TRUE;
+        return UBRK_DONE;
     }
 
     //  Set the initial state for the state machine
@@ -1064,8 +802,8 @@
     row = (RBBIStateTableRow *)
             //(statetable->fTableData + (statetable->fRowLen * state));
             (tableData + tableRowLen * state);
-            
-    
+
+
     mode     = RBBI_RUN;
     if (statetable->fFlags & RBBI_BOF_REQUIRED) {
         category = 2;
@@ -1079,7 +817,7 @@
         if (c == U_SENTINEL) {
             // Reached end of input string.
             if (mode == RBBI_END) {
-                // We have already run the loop one last time with the 
+                // We have already run the loop one last time with the
                 //   character set to the psueudo {eof} value.  Now it is time
                 //   to unconditionally bail out.
                 break;
@@ -1100,10 +838,10 @@
             // Note:  the 16 in UTRIE_GET16 refers to the size of the data being returned,
             //        not the size of the character going in, which is a UChar32.
             //
-            UTRIE_GET16(&fData->fTrie, c, category);
+            category = UTRIE2_GET16(fData->fTrie, c);
 
             // Check the dictionary bit in the character's category.
-            //    Counter is only used by dictionary based iterators (subclasses).
+            //    Counter is only used by dictionary based iteration.
             //    Chars that need to be handled by a dictionary have a flag bit set
             //    in their category values.
             //
@@ -1115,7 +853,7 @@
         }
 
        #ifdef RBBI_DEBUG
-            if (fTrace) {
+            if (gTrace) {
                 RBBIDebugPrintf("             %4ld   ", utext_getNativeIndex(fText));
                 if (0x20<=c && c<0x7f) {
                     RBBIDebugPrintf("\"%c\"  ", c);
@@ -1144,16 +882,16 @@
             if (mode != RBBI_START) {
                 result = (int32_t)UTEXT_GETNATIVEINDEX(fText);
             }
-            fLastRuleStatusIndex = row->fTagIdx;   // Remember the break status (tag) values.
+            fRuleStatusIndex = row->fTagIdx;   // Remember the break status (tag) values.
         }
 
         int16_t completedRule = row->fAccepting;
         if (completedRule > 0) {
-            // Lookahead match is completed.  
+            // Lookahead match is completed.
             int32_t lookaheadResult = lookAheadMatches.getPosition(completedRule);
             if (lookaheadResult >= 0) {
-                fLastRuleStatusIndex = row->fTagIdx;
-                UTEXT_SETNATIVEINDEX(fText, lookaheadResult);
+                fRuleStatusIndex = row->fTagIdx;
+                fPosition = lookaheadResult;
                 return lookaheadResult;
             }
         }
@@ -1170,8 +908,8 @@
             //   longer match is possible, no matter what characters follow.
             break;
         }
-        
-        // Advance to the next character.  
+
+        // Advance to the next character.
         // If this is a beginning-of-input loop iteration, don't advance
         //    the input position.  The next iteration will be processing the
         //    first real input character.
@@ -1182,8 +920,6 @@
                 mode = RBBI_RUN;
             }
         }
-
-
     }
 
     // The state machine is done.  Check whether it found a match...
@@ -1192,15 +928,16 @@
     //   (This really indicates a defect in the break rules.  They should always match
     //    at least one character.)
     if (result == initialPosition) {
-        UTEXT_SETNATIVEINDEX(fText, initialPosition);
-        UTEXT_NEXT32(fText);
-        result = (int32_t)UTEXT_GETNATIVEINDEX(fText);
+        utext_setNativeIndex(fText, initialPosition);
+        utext_next32(fText);
+        result = (int32_t)utext_getNativeIndex(fText);
+        fRuleStatusIndex = 0;
     }
 
     // Leave the iterator at our result position.
-    UTEXT_SETNATIVEINDEX(fText, result);
+    fPosition = result;
     #ifdef RBBI_DEBUG
-        if (fTrace) {
+        if (gTrace) {
             RBBIDebugPrintf("result = %d\n\n", result);
         }
     #endif
@@ -1213,13 +950,11 @@
 //
 //  handlePrevious()
 //
-//      Iterate backwards, according to the logic of the reverse rules.
-//      This version handles the exact style backwards rules.
-//
+//      Iterate backwards using the safe reverse rules.
 //      The logic of this function is very similar to handleNext(), above.
 //
 //-----------------------------------------------------------------------------------
-int32_t RuleBasedBreakIterator::handlePrevious(const RBBIStateTable *statetable) {
+int32_t RuleBasedBreakIterator::handlePrevious(int32_t fromPosition) {
     int32_t             state;
     uint16_t            category        = 0;
     RBBIRunMode         mode;
@@ -1229,19 +964,14 @@
     int32_t             result          = 0;
     int32_t             initialPosition = 0;
 
+    const RBBIStateTable *stateTable = fData->fSafeRevTable;
+    UTEXT_SETNATIVEINDEX(fText, fromPosition);
     #ifdef RBBI_DEBUG
-        if (fTrace) {
+        if (gTrace) {
             RBBIDebugPuts("Handle Previous   pos   char  state category");
         }
     #endif
 
-    // handlePrevious() never gets the rule status.
-    // Flag the status as invalid; if the user ever asks for status, we will need
-    // to back up, then re-find the break position using handleNext(), which does
-    // get the status value.
-    fLastStatusIndexValid = FALSE;
-    fLastRuleStatusIndex = 0;
-
     // if we're already at the start of the text, return DONE.
     if (fText == NULL || fData == NULL || UTEXT_GETNATIVEINDEX(fText)==0) {
         return BreakIterator::DONE;
@@ -1255,10 +985,10 @@
     //  Set the initial state for the state machine
     state = START_STATE;
     row = (RBBIStateTableRow *)
-            (statetable->fTableData + (statetable->fRowLen * state));
+            (stateTable->fTableData + (stateTable->fRowLen * state));
     category = 3;
     mode     = RBBI_RUN;
-    if (statetable->fFlags & RBBI_BOF_REQUIRED) {
+    if (stateTable->fFlags & RBBI_BOF_REQUIRED) {
         category = 2;
         mode     = RBBI_START;
     }
@@ -1270,15 +1000,9 @@
         if (c == U_SENTINEL) {
             // Reached end of input string.
             if (mode == RBBI_END) {
-                // We have already run the loop one last time with the 
+                // We have already run the loop one last time with the
                 //   character set to the psueudo {eof} value.  Now it is time
                 //   to unconditionally bail out.
-                if (result == initialPosition) {
-                    // Ran off start, no match found.
-                    // move one index one (towards the start, since we are doing a previous())
-                    UTEXT_SETNATIVEINDEX(fText, initialPosition);
-                    (void)UTEXT_PREVIOUS32(fText);   // TODO:  shouldn't be necessary.  We're already at beginning.  Check.
-                }
                 break;
             }
             // Run the loop one last time with the fake end-of-input character category.
@@ -1297,22 +1021,13 @@
             // Note:  the 16 in UTRIE_GET16 refers to the size of the data being returned,
             //        not the size of the character going in, which is a UChar32.
             //
-            UTRIE_GET16(&fData->fTrie, c, category);
-
-            // Check the dictionary bit in the character's category.
-            //    Counter is only used by dictionary based iterators (subclasses).
-            //    Chars that need to be handled by a dictionary have a flag bit set
-            //    in their category values.
-            //
-            if ((category & 0x4000) != 0)  {
-                fDictionaryCharCount++;
-                //  And off the dictionary flag bit.
-                category &= ~0x4000;
-            }
+            //  And off the dictionary flag bit. For reverse iteration it is not used.
+            category = UTRIE2_GET16(fData->fTrie, c);
+            category &= ~0x4000;
         }
 
         #ifdef RBBI_DEBUG
-            if (fTrace) {
+            if (gTrace) {
                 RBBIDebugPrintf("             %4d   ", (int32_t)utext_getNativeIndex(fText));
                 if (0x20<=c && c<0x7f) {
                     RBBIDebugPrintf("\"%c\"  ", c);
@@ -1332,7 +1047,7 @@
         U_ASSERT(category<fData->fHeader->fCatCount);
         state = row->fNextState[category];  /*Not accessing beyond memory*/
         row = (RBBIStateTableRow *)
-            (statetable->fTableData + (statetable->fRowLen * state));
+            (stateTable->fTableData + (stateTable->fRowLen * state));
 
         if (row->fAccepting == -1) {
             // Match found, common case.
@@ -1341,7 +1056,7 @@
 
         int16_t completedRule = row->fAccepting;
         if (completedRule > 0) {
-            // Lookahead match is completed.  
+            // Lookahead match is completed.
             int32_t lookaheadResult = lookAheadMatches.getPosition(completedRule);
             if (lookaheadResult >= 0) {
                 UTEXT_SETNATIVEINDEX(fText, lookaheadResult);
@@ -1362,13 +1077,13 @@
             break;
         }
 
-        // Move (backwards) to the next character to process.  
+        // Move (backwards) to the next character to process.
         // If this is a beginning-of-input loop iteration, don't advance
         //    the input position.  The next iteration will be processing the
         //    first real input character.
         if (mode == RBBI_RUN) {
             c = UTEXT_PREVIOUS32(fText);
-        } else {            
+        } else {
             if (mode == RBBI_START) {
                 mode = RBBI_RUN;
             }
@@ -1386,10 +1101,8 @@
         result = (int32_t)UTEXT_GETNATIVEINDEX(fText);
     }
 
-    // Leave the iterator at our result position.
-    UTEXT_SETNATIVEINDEX(fText, result);
     #ifdef RBBI_DEBUG
-        if (fTrace) {
+        if (gTrace) {
             RBBIDebugPrintf("result = %d\n\n", result);
         }
     #endif
@@ -1397,20 +1110,6 @@
 }
 
 
-void
-RuleBasedBreakIterator::reset()
-{
-    if (fCachedBreakPositions) {
-        uprv_free(fCachedBreakPositions);
-    }
-    fCachedBreakPositions = NULL;
-    fNumCachedBreakPositions = 0;
-    fDictionaryCharCount = 0;
-    fPositionInCache = 0;
-}
-
-
-
 //-------------------------------------------------------------------------------
 //
 //   getRuleStatus()   Return the break rule tag associated with the current
@@ -1418,46 +1117,14 @@
 //                     position by iterating forwards, the value will have been
 //                     cached by the handleNext() function.
 //
-//                     If no cached status value is available, the status is
-//                     found by doing a previous() followed by a next(), which
-//                     leaves the iterator where it started, and computes the
-//                     status while doing the next().
-//
 //-------------------------------------------------------------------------------
-void RuleBasedBreakIterator::makeRuleStatusValid() {
-    if (fLastStatusIndexValid == FALSE) {
-        //  No cached status is available.
-        if (fText == NULL || current() == 0) {
-            //  At start of text, or there is no text.  Status is always zero.
-            fLastRuleStatusIndex = 0;
-            fLastStatusIndexValid = TRUE;
-        } else {
-            //  Not at start of text.  Find status the tedious way.
-            int32_t pa = current();
-            previous();
-            if (fNumCachedBreakPositions > 0) {
-                reset();                // Blow off the dictionary cache
-            }
-            int32_t pb = next();
-            if (pa != pb) {
-                // note: the if (pa != pb) test is here only to eliminate warnings for
-                //       unused local variables on gcc.  Logically, it isn't needed.
-                U_ASSERT(pa == pb);
-            }
-        }
-    }
-    U_ASSERT(fLastRuleStatusIndex >= 0  &&  fLastRuleStatusIndex < fData->fStatusMaxIdx);
-}
 
-
 int32_t  RuleBasedBreakIterator::getRuleStatus() const {
-    RuleBasedBreakIterator *nonConstThis  = (RuleBasedBreakIterator *)this;
-    nonConstThis->makeRuleStatusValid();
 
     // fLastRuleStatusIndex indexes to the start of the appropriate status record
     //                                                 (the number of status values.)
     //   This function returns the last (largest) of the array of status values.
-    int32_t  idx = fLastRuleStatusIndex + fData->fRuleStatusTable[fLastRuleStatusIndex];
+    int32_t  idx = fRuleStatusIndex + fData->fRuleStatusTable[fRuleStatusIndex];
     int32_t  tagVal = fData->fRuleStatusTable[idx];
 
     return tagVal;
@@ -1464,18 +1131,13 @@
 }
 
 
-
-
 int32_t RuleBasedBreakIterator::getRuleStatusVec(
-             int32_t *fillInVec, int32_t capacity, UErrorCode &status)
-{
+             int32_t *fillInVec, int32_t capacity, UErrorCode &status) {
     if (U_FAILURE(status)) {
         return 0;
     }
 
-    RuleBasedBreakIterator *nonConstThis  = (RuleBasedBreakIterator *)this;
-    nonConstThis->makeRuleStatusValid();
-    int32_t  numVals = fData->fRuleStatusTable[fLastRuleStatusIndex];
+    int32_t  numVals = fData->fRuleStatusTable[fRuleStatusIndex];
     int32_t  numValsToCopy = numVals;
     if (numVals > capacity) {
         status = U_BUFFER_OVERFLOW_ERROR;
@@ -1483,7 +1145,7 @@
     }
     int i;
     for (i=0; i<numValsToCopy; i++) {
-        fillInVec[i] = fData->fRuleStatusTable[fLastRuleStatusIndex + i + 1];
+        fillInVec[i] = fData->fRuleStatusTable[fRuleStatusIndex + i + 1];
     }
     return numVals;
 }
@@ -1531,205 +1193,25 @@
     return (RuleBasedBreakIterator *)clonedBI;
 }
 
-
-//-------------------------------------------------------------------------------
-//
-//  isDictionaryChar      Return true if the category lookup for this char
-//                        indicates that it is in the set of dictionary lookup
-//                        chars.
-//
-//                        This function is intended for use by dictionary based
-//                        break iterators.
-//
-//-------------------------------------------------------------------------------
-/*UBool RuleBasedBreakIterator::isDictionaryChar(UChar32   c) {
-    if (fData == NULL) {
-        return FALSE;
-    }
-    uint16_t category;
-    UTRIE_GET16(&fData->fTrie, c, category);
-    return (category & 0x4000) != 0;
-}*/
-
-
-//-------------------------------------------------------------------------------
-//
-//  checkDictionary       This function handles all processing of characters in
-//                        the "dictionary" set. It will determine the appropriate
-//                        course of action, and possibly set up a cache in the
-//                        process.
-//
-//-------------------------------------------------------------------------------
-int32_t RuleBasedBreakIterator::checkDictionary(int32_t startPos,
-                            int32_t endPos,
-                            UBool reverse) {
-    // Reset the old break cache first.
-    reset();
-
-    // note: code segment below assumes that dictionary chars are in the 
-    // startPos-endPos range
-    // value returned should be next character in sequence
-    if ((endPos - startPos) <= 1) {
-        return (reverse ? startPos : endPos);
-    }
-    
-    // Starting from the starting point, scan towards the proposed result,
-    // looking for the first dictionary character (which may be the one
-    // we're on, if we're starting in the middle of a range).
-    utext_setNativeIndex(fText, reverse ? endPos : startPos);
-    if (reverse) {
-        UTEXT_PREVIOUS32(fText);
-    }
-    
-    int32_t rangeStart = startPos;
-    int32_t rangeEnd = endPos;
-
-    uint16_t    category;
-    int32_t     current;
-    UErrorCode  status = U_ZERO_ERROR;
-    UStack      breaks(status);
-    int32_t     foundBreakCount = 0;
-    UChar32     c = utext_current32(fText);
-
-    UTRIE_GET16(&fData->fTrie, c, category);
-    
-    // Is the character we're starting on a dictionary character? If so, we
-    // need to back up to include the entire run; otherwise the results of
-    // the break algorithm will differ depending on where we start. Since
-    // the result is cached and there is typically a non-dictionary break
-    // within a small number of words, there should be little performance impact.
-    if (category & 0x4000) {
-        if (reverse) {
-            do {
-                utext_next32(fText);          // TODO:  recast to work directly with postincrement.
-                c = utext_current32(fText);
-                UTRIE_GET16(&fData->fTrie, c, category);
-            } while (c != U_SENTINEL && (category & 0x4000));
-            // Back up to the last dictionary character
-            rangeEnd = (int32_t)UTEXT_GETNATIVEINDEX(fText);
-            if (c == U_SENTINEL) {
-                // c = fText->last32();
-                //   TODO:  why was this if needed?
-                c = UTEXT_PREVIOUS32(fText);
-            }
-            else {
-                c = UTEXT_PREVIOUS32(fText);
-            }
-        }
-        else {
-            do {
-                c = UTEXT_PREVIOUS32(fText);
-                UTRIE_GET16(&fData->fTrie, c, category);
-            }
-            while (c != U_SENTINEL && (category & 0x4000));
-            // Back up to the last dictionary character
-            if (c == U_SENTINEL) {
-                // c = fText->first32();
-                c = utext_current32(fText);
-            }
-            else {
-                utext_next32(fText);
-                c = utext_current32(fText);
-            }
-            rangeStart = (int32_t)UTEXT_GETNATIVEINDEX(fText);;
-        }
-        UTRIE_GET16(&fData->fTrie, c, category);
-    }
-    
-    // Loop through the text, looking for ranges of dictionary characters.
-    // For each span, find the appropriate break engine, and ask it to find
-    // any breaks within the span.
-    // Note: we always do this in the forward direction, so that the break
-    // cache is built in the right order.
-    if (reverse) {
-        utext_setNativeIndex(fText, rangeStart);
-        c = utext_current32(fText);
-        UTRIE_GET16(&fData->fTrie, c, category);
-    }
-    while(U_SUCCESS(status)) {
-        while((current = (int32_t)UTEXT_GETNATIVEINDEX(fText)) < rangeEnd && (category & 0x4000) == 0) {
-            utext_next32(fText);           // TODO:  tweak for post-increment operation
-            c = utext_current32(fText);
-            UTRIE_GET16(&fData->fTrie, c, category);
-        }
-        if (current >= rangeEnd) {
-            break;
-        }
-        
-        // We now have a dictionary character. Get the appropriate language object
-        // to deal with it.
-        const LanguageBreakEngine *lbe = getLanguageBreakEngine(c);
-        
-        // Ask the language object if there are any breaks. It will leave the text
-        // pointer on the other side of its range, ready to search for the next one.
-        if (lbe != NULL) {
-            foundBreakCount += lbe->findBreaks(fText, rangeStart, rangeEnd, FALSE, fBreakType, breaks);
-        }
-        
-        // Reload the loop variables for the next go-round
-        c = utext_current32(fText);
-        UTRIE_GET16(&fData->fTrie, c, category);
-    }
-    
-    // If we found breaks, build a new break cache. The first and last entries must
-    // be the original starting and ending position.
-    if (foundBreakCount > 0) {
-        U_ASSERT(foundBreakCount == breaks.size());
-        int32_t totalBreaks = foundBreakCount;
-        if (startPos < breaks.elementAti(0)) {
-            totalBreaks += 1;
-        }
-        if (endPos > breaks.peeki()) {
-            totalBreaks += 1;
-        }
-        fCachedBreakPositions = (int32_t *)uprv_malloc(totalBreaks * sizeof(int32_t));
-        if (fCachedBreakPositions != NULL) {
-            int32_t out = 0;
-            fNumCachedBreakPositions = totalBreaks;
-            if (startPos < breaks.elementAti(0)) {
-                fCachedBreakPositions[out++] = startPos;
-            }
-            for (int32_t i = 0; i < foundBreakCount; ++i) {
-                fCachedBreakPositions[out++] = breaks.elementAti(i);
-            }
-            if (endPos > fCachedBreakPositions[out-1]) {
-                fCachedBreakPositions[out] = endPos;
-            }
-            // If there are breaks, then by definition, we are replacing the original
-            // proposed break by one of the breaks we found. Use following() and
-            // preceding() to do the work. They should never recurse in this case.
-            if (reverse) {
-                return preceding(endPos);
-            }
-            else {
-                return following(startPos);
-            }
-        }
-        // If the allocation failed, just fall through to the "no breaks found" case.
-    }
-
-    // If we get here, there were no language-based breaks. Set the text pointer
-    // to the original proposed break.
-    utext_setNativeIndex(fText, reverse ? startPos : endPos);
-    return (reverse ? startPos : endPos);
-}
-
 U_NAMESPACE_END
 
 
-static icu::UStack *gLanguageBreakFactories = NULL;
+static icu::UStack *gLanguageBreakFactories = nullptr;
+static const icu::UnicodeString *gEmptyString = nullptr;
 static icu::UInitOnce gLanguageBreakFactoriesInitOnce = U_INITONCE_INITIALIZER;
+static icu::UInitOnce gRBBIInitOnce = U_INITONCE_INITIALIZER;
 
 /**
- * Release all static memory held by breakiterator.  
+ * Release all static memory held by breakiterator.
  */
 U_CDECL_BEGIN
-static UBool U_CALLCONV breakiterator_cleanup_dict(void) {
-    if (gLanguageBreakFactories) {
-        delete gLanguageBreakFactories;
-        gLanguageBreakFactories = NULL;
-    }
+static UBool U_CALLCONV rbbi_cleanup(void) {
+    delete gLanguageBreakFactories;
+    gLanguageBreakFactories = nullptr;
+    delete gEmptyString;
+    gEmptyString = nullptr;
     gLanguageBreakFactoriesInitOnce.reset();
+    gRBBIInitOnce.reset();
     return TRUE;
 }
 U_CDECL_END
@@ -1741,6 +1223,11 @@
 U_CDECL_END
 U_NAMESPACE_BEGIN
 
+static void U_CALLCONV rbbiInit() {
+    gEmptyString = new UnicodeString();
+    ucln_common_registerCleanup(UCLN_COMMON_RBBI, rbbi_cleanup);
+}
+
 static void U_CALLCONV initLanguageFactories() {
     UErrorCode status = U_ZERO_ERROR;
     U_ASSERT(gLanguageBreakFactories == NULL);
@@ -1755,7 +1242,7 @@
         }
 #endif
     }
-    ucln_common_registerCleanup(UCLN_COMMON_BREAKITERATOR_DICT, breakiterator_cleanup_dict);
+    ucln_common_registerCleanup(UCLN_COMMON_RBBI, rbbi_cleanup);
 }
 
 
@@ -1766,7 +1253,7 @@
     if (gLanguageBreakFactories == NULL) {
         return NULL;
     }
-    
+
     int32_t i = gLanguageBreakFactories->size();
     const LanguageBreakEngine *lbe = NULL;
     while (--i >= 0) {
@@ -1790,7 +1277,7 @@
 RuleBasedBreakIterator::getLanguageBreakEngine(UChar32 c) {
     const LanguageBreakEngine *lbe = NULL;
     UErrorCode status = U_ZERO_ERROR;
-    
+
     if (fLanguageBreakEngines == NULL) {
         fLanguageBreakEngines = new UStack(status);
         if (fLanguageBreakEngines == NULL || U_FAILURE(status)) {
@@ -1799,7 +1286,7 @@
             return NULL;
         }
     }
-    
+
     int32_t i = fLanguageBreakEngines->size();
     while (--i >= 0) {
         lbe = (const LanguageBreakEngine *)(fLanguageBreakEngines->elementAt(i));
@@ -1807,11 +1294,11 @@
             return lbe;
         }
     }
-    
+
     // No existing dictionary took the character. See if a factory wants to
     // give us a new LanguageBreakEngine for this character.
     lbe = getLanguageBreakEngineFromFactory(c, fBreakType);
-    
+
     // If we got one, use it and push it on our stack.
     if (lbe != NULL) {
         fLanguageBreakEngines->push((void *)lbe, status);
@@ -1819,7 +1306,7 @@
         // return it even if the push fails.
         return lbe;
     }
-    
+
     // No engine is forthcoming for this character. Add it to the
     // reject set. Create the reject break engine if needed.
     if (fUnhandledBreakEngine == NULL) {
@@ -1837,11 +1324,11 @@
             return NULL;
         }
     }
-    
+
     // Tell the reject engine about the character; at its discretion, it may
     // add more than just the one character.
     fUnhandledBreakEngine->handleCharacter(c, fBreakType);
-        
+
     return fUnhandledBreakEngine;
 }
 
@@ -1853,9 +1340,26 @@
 
 void RuleBasedBreakIterator::setBreakType(int32_t type) {
     fBreakType = type;
-    reset();
 }
 
+void RuleBasedBreakIterator::dumpCache() {
+    fBreakCache->dumpCache();
+}
+
+/**
+ * Returns the description used to create this iterator
+ */
+
+const UnicodeString&
+RuleBasedBreakIterator::getRules() const {
+    if (fData != NULL) {
+        return fData->getRuleSourceString();
+    } else {
+        umtx_initOnce(gRBBIInitOnce, &rbbiInit);
+        return *gEmptyString;
+    }
+}
+
 U_NAMESPACE_END
 
 #endif /* #if !UCONFIG_NO_BREAK_ITERATION */

Added: trunk/Build/source/libs/icu/icu-src/source/common/rbbi_cache.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbi_cache.cpp	                        (rev 0)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbi_cache.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -0,0 +1,630 @@
+// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+// file: rbbi_cache.cpp
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_BREAK_ITERATION
+
+#include "unicode/ubrk.h"
+#include "unicode/rbbi.h"
+
+#include "rbbi_cache.h"
+
+#include "brkeng.h"
+#include "cmemory.h"
+#include "rbbidata.h"
+#include "rbbirb.h"
+#include "uassert.h"
+#include "uvectr32.h"
+
+U_NAMESPACE_BEGIN
+
+/*
+ * DictionaryCache implementation
+ */
+
+RuleBasedBreakIterator::DictionaryCache::DictionaryCache(RuleBasedBreakIterator *bi, UErrorCode &status) :
+        fBI(bi), fBreaks(NULL), fPositionInCache(-1),
+        fStart(0), fLimit(0), fFirstRuleStatusIndex(0), fOtherRuleStatusIndex(0) {
+    fBreaks = new UVector32(status);
+}
+
+RuleBasedBreakIterator::DictionaryCache::~DictionaryCache() {
+    delete fBreaks;
+    fBreaks = NULL;
+}
+
+void RuleBasedBreakIterator::DictionaryCache::reset() {
+    fPositionInCache = -1;
+    fStart = 0;
+    fLimit = 0;
+    fFirstRuleStatusIndex = 0;
+    fOtherRuleStatusIndex = 0;
+    fBreaks->removeAllElements();
+}
+
+UBool RuleBasedBreakIterator::DictionaryCache::following(int32_t fromPos, int32_t *result, int32_t *statusIndex) {
+    if (fromPos >= fLimit || fromPos < fStart) {
+        fPositionInCache = -1;
+        return FALSE;
+    }
+
+    // Sequential iteration, move from previous boundary to the following
+
+    int32_t r = 0;
+    if (fPositionInCache >= 0 && fPositionInCache < fBreaks->size() && fBreaks->elementAti(fPositionInCache) == fromPos) {
+        ++fPositionInCache;
+        if (fPositionInCache >= fBreaks->size()) {
+            fPositionInCache = -1;
+            return FALSE;
+        }
+        r = fBreaks->elementAti(fPositionInCache);
+        U_ASSERT(r > fromPos);
+        *result = r;
+        *statusIndex = fOtherRuleStatusIndex;
+        return TRUE;
+    }
+
+    // Random indexing. Linear search for the boundary following the given position.
+
+    for (fPositionInCache = 0; fPositionInCache < fBreaks->size(); ++fPositionInCache) {
+        r= fBreaks->elementAti(fPositionInCache);
+        if (r > fromPos) {
+            *result = r;
+            *statusIndex = fOtherRuleStatusIndex;
+            return TRUE;
+        }
+    }
+    U_ASSERT(FALSE);
+    fPositionInCache = -1;
+    return FALSE;
+}
+
+
+UBool RuleBasedBreakIterator::DictionaryCache::preceding(int32_t fromPos, int32_t *result, int32_t *statusIndex) {
+    if (fromPos <= fStart || fromPos > fLimit) {
+        fPositionInCache = -1;
+        return FALSE;
+    }
+
+    if (fromPos == fLimit) {
+        fPositionInCache = fBreaks->size() - 1;
+        if (fPositionInCache >= 0) {
+            U_ASSERT(fBreaks->elementAti(fPositionInCache) == fromPos);
+        }
+    }
+
+    int32_t r;
+    if (fPositionInCache > 0 && fPositionInCache < fBreaks->size() && fBreaks->elementAti(fPositionInCache) == fromPos) {
+        --fPositionInCache;
+        r = fBreaks->elementAti(fPositionInCache);
+        U_ASSERT(r < fromPos);
+        *result = r;
+        *statusIndex = ( r== fStart) ? fFirstRuleStatusIndex : fOtherRuleStatusIndex;
+        return TRUE;
+    }
+
+    if (fPositionInCache == 0) {
+        fPositionInCache = -1;
+        return FALSE;
+    }
+
+    for (fPositionInCache = fBreaks->size()-1; fPositionInCache >= 0; --fPositionInCache) {
+        r = fBreaks->elementAti(fPositionInCache);
+        if (r < fromPos) {
+            *result = r;
+            *statusIndex = ( r == fStart) ? fFirstRuleStatusIndex : fOtherRuleStatusIndex;
+            return TRUE;
+        }
+    }
+    U_ASSERT(FALSE);
+    fPositionInCache = -1;
+    return FALSE;
+}
+
+void RuleBasedBreakIterator::DictionaryCache::populateDictionary(int32_t startPos, int32_t endPos,
+                                       int32_t firstRuleStatus, int32_t otherRuleStatus) {
+    if ((endPos - startPos) <= 1) {
+        return;
+    }
+
+    reset();
+    fFirstRuleStatusIndex = firstRuleStatus;
+    fOtherRuleStatusIndex = otherRuleStatus;
+
+    int32_t rangeStart = startPos;
+    int32_t rangeEnd = endPos;
+
+    uint16_t    category;
+    int32_t     current;
+    UErrorCode  status = U_ZERO_ERROR;
+    int32_t     foundBreakCount = 0;
+    UText      *text = fBI->fText;
+
+    // Loop through the text, looking for ranges of dictionary characters.
+    // For each span, find the appropriate break engine, and ask it to find
+    // any breaks within the span.
+
+    utext_setNativeIndex(text, rangeStart);
+    UChar32     c = utext_current32(text);
+    category = UTRIE2_GET16(fBI->fData->fTrie, c);
+
+    while(U_SUCCESS(status)) {
+        while((current = (int32_t)UTEXT_GETNATIVEINDEX(text)) < rangeEnd && (category & 0x4000) == 0) {
+            utext_next32(text);           // TODO: cleaner loop structure.
+            c = utext_current32(text);
+            category = UTRIE2_GET16(fBI->fData->fTrie, c);
+        }
+        if (current >= rangeEnd) {
+            break;
+        }
+
+        // We now have a dictionary character. Get the appropriate language object
+        // to deal with it.
+        const LanguageBreakEngine *lbe = fBI->getLanguageBreakEngine(c);
+
+        // Ask the language object if there are any breaks. It will add them to the cache and
+        // leave the text pointer on the other side of its range, ready to search for the next one.
+        if (lbe != NULL) {
+            foundBreakCount += lbe->findBreaks(text, rangeStart, rangeEnd, fBI->fBreakType, *fBreaks);
+        }
+
+        // Reload the loop variables for the next go-round
+        c = utext_current32(text);
+        category = UTRIE2_GET16(fBI->fData->fTrie, c);
+    }
+
+    // If we found breaks, ensure that the first and last entries are
+    // the original starting and ending position. And initialize the
+    // cache iteration position to the first entry.
+
+    // printf("foundBreakCount = %d\n", foundBreakCount);
+    if (foundBreakCount > 0) {
+        U_ASSERT(foundBreakCount == fBreaks->size());
+        if (startPos < fBreaks->elementAti(0)) {
+            // The dictionary did not place a boundary at the start of the segment of text.
+            // Add one now. This should not commonly happen, but it would be easy for interactions
+            // of the rules for dictionary segments and the break engine implementations to
+            // inadvertently cause it. Cover it here, just in case.
+            fBreaks->insertElementAt(startPos, 0, status);
+        }
+        if (endPos > fBreaks->peeki()) {
+            fBreaks->push(endPos, status);
+        }
+        fPositionInCache = 0;
+        // Note: Dictionary matching may extend beyond the original limit.
+        fStart = fBreaks->elementAti(0);
+        fLimit = fBreaks->peeki();
+    } else {
+        // there were no language-based breaks, even though the segment contained
+        // dictionary characters. Subsequent attempts to fetch boundaries from the dictionary cache
+        // for this range will fail, and the calling code will fall back to the rule based boundaries.
+    }
+}
+
+
+/*
+ *   BreakCache implemetation
+ */
+
+RuleBasedBreakIterator::BreakCache::BreakCache(RuleBasedBreakIterator *bi, UErrorCode &status) : 
+        fBI(bi), fSideBuffer(status) {
+    reset();
+}
+
+
+RuleBasedBreakIterator::BreakCache::~BreakCache() {
+}
+
+
+void RuleBasedBreakIterator::BreakCache::reset(int32_t pos, int32_t ruleStatus) {
+    fStartBufIdx = 0;
+    fEndBufIdx = 0;
+    fTextIdx = pos;
+    fBufIdx = 0;
+    fBoundaries[0] = pos;
+    fStatuses[0] = (uint16_t)ruleStatus;
+}
+
+
+int32_t  RuleBasedBreakIterator::BreakCache::current() {
+    fBI->fPosition = fTextIdx;
+    fBI->fRuleStatusIndex = fStatuses[fBufIdx];
+    fBI->fDone = FALSE;
+    return fTextIdx;
+}
+
+
+void RuleBasedBreakIterator::BreakCache::following(int32_t startPos, UErrorCode &status) {
+    if (U_FAILURE(status)) {
+        return;
+    }
+    if (startPos == fTextIdx || seek(startPos) || populateNear(startPos, status)) {
+        // startPos is in the cache. Do a next() from that position.
+        // TODO: an awkward set of interactions with bi->fDone
+        //       seek() does not clear it; it can't because of interactions with populateNear().
+        //       next() does not clear it in the fast-path case, where everything matters. Maybe it should.
+        //       So clear it here, for the case where seek() succeeded on an iterator that had previously run off the end.
+        fBI->fDone = false;
+        next();
+    }
+    return;
+}
+
+
+void RuleBasedBreakIterator::BreakCache::preceding(int32_t startPos, UErrorCode &status) {
+    if (U_FAILURE(status)) {
+        return;
+    }
+    if (startPos == fTextIdx || seek(startPos) || populateNear(startPos, status)) {
+        if (startPos == fTextIdx) {
+            previous(status);
+        } else {
+            // seek() leaves the BreakCache positioned at the preceding boundary
+            //        if the requested position is between two bounaries.
+            // current() pushes the BreakCache position out to the BreakIterator itself.
+            U_ASSERT(startPos > fTextIdx);
+            current();
+        }
+    }
+    return;
+}
+
+
+/*
+ * Out-of-line code for BreakCache::next().
+ * Cache does not already contain the boundary
+ */
+void RuleBasedBreakIterator::BreakCache::nextOL() {
+    fBI->fDone = !populateFollowing();
+    fBI->fPosition = fTextIdx;
+    fBI->fRuleStatusIndex = fStatuses[fBufIdx];
+    return;
+}
+
+
+void RuleBasedBreakIterator::BreakCache::previous(UErrorCode &status) {
+    if (U_FAILURE(status)) {
+        return;
+    }
+    int32_t initialBufIdx = fBufIdx;
+    if (fBufIdx == fStartBufIdx) {
+        // At start of cache. Prepend to it.
+        populatePreceding(status);
+    } else {
+        // Cache already holds the next boundary
+        fBufIdx = modChunkSize(fBufIdx - 1);
+        fTextIdx = fBoundaries[fBufIdx];
+    }
+    fBI->fDone = (fBufIdx == initialBufIdx);
+    fBI->fPosition = fTextIdx;
+    fBI->fRuleStatusIndex = fStatuses[fBufIdx];
+    return;
+}    
+
+
+UBool RuleBasedBreakIterator::BreakCache::seek(int32_t pos) {
+    if (pos < fBoundaries[fStartBufIdx] || pos > fBoundaries[fEndBufIdx]) {
+        return FALSE;
+    }
+    if (pos == fBoundaries[fStartBufIdx]) {
+        // Common case: seek(0), from BreakIterator::first()
+        fBufIdx = fStartBufIdx;
+        fTextIdx = fBoundaries[fBufIdx];
+        return TRUE;
+    }
+    if (pos == fBoundaries[fEndBufIdx]) {
+        fBufIdx = fEndBufIdx;
+        fTextIdx = fBoundaries[fBufIdx];
+        return TRUE;
+    }
+    
+    int32_t min = fStartBufIdx;
+    int32_t max = fEndBufIdx;
+    while (min != max) {
+        int32_t probe = (min + max + (min>max ? CACHE_SIZE : 0)) / 2;
+        probe = modChunkSize(probe);
+        if (fBoundaries[probe] > pos) {
+            max = probe;
+        } else {
+            min = modChunkSize(probe + 1);
+        }
+    }
+    U_ASSERT(fBoundaries[max] > pos);
+    fBufIdx = modChunkSize(max - 1);
+    fTextIdx = fBoundaries[fBufIdx];
+    U_ASSERT(fTextIdx <= pos);
+    return TRUE;
+}
+
+
+UBool RuleBasedBreakIterator::BreakCache::populateNear(int32_t position, UErrorCode &status) {
+    if (U_FAILURE(status)) {
+        return FALSE;
+    }
+    U_ASSERT(position < fBoundaries[fStartBufIdx] || position > fBoundaries[fEndBufIdx]);
+
+    // Find a boundary somewhere in the vicinity of the requested position.
+    // Depending on the safe rules and the text data, it could be either before, at, or after
+    // the requested position.
+
+
+    // If the requested position is not near already cached positions, clear the existing cache,
+    // find a near-by boundary and begin new cache contents there.
+
+    if ((position < fBoundaries[fStartBufIdx] - 15) || position > (fBoundaries[fEndBufIdx] + 15)) {
+        int32_t aBoundary = 0;
+        int32_t ruleStatusIndex = 0;
+        // TODO: check for position == length of text. Although may still need to back up to get rule status.
+        if (position > 20) {
+            int32_t backupPos = fBI->handlePrevious(position);
+            fBI->fPosition = backupPos;
+            aBoundary = fBI->handleNext();                // Ignore dictionary, just finding a rule based boundary.
+            ruleStatusIndex = fBI->fRuleStatusIndex;
+        }
+        reset(aBoundary, ruleStatusIndex);               // Reset cache to hold aBoundary as a single starting point.
+    }
+    
+    // Fill in boundaries between existing cache content and the new requested position.
+
+    if (fBoundaries[fEndBufIdx] < position) {
+        // The last position in the cache precedes the requested position.
+        // Add following position(s) to the cache.
+        while (fBoundaries[fEndBufIdx] < position) {
+            if (!populateFollowing()) {
+                U_ASSERT(false);
+                return false;
+            }
+        }
+        fBufIdx = fEndBufIdx;                      // Set iterator position to the end of the buffer.
+        fTextIdx = fBoundaries[fBufIdx];           // Required because populateFollowing may add extra boundaries.
+        while (fTextIdx > position) {              // Move backwards to a position at or preceding the requested pos.
+            previous(status);
+        }
+        return true;
+    }
+
+    if (fBoundaries[fStartBufIdx] > position) {
+        // The first position in the cache is beyond the requested position.
+        // back up more until we get a boundary <= the requested position.
+        while (fBoundaries[fStartBufIdx] > position) {
+            populatePreceding(status);
+        }
+        fBufIdx = fStartBufIdx;                    // Set iterator position to the start of the buffer.
+        fTextIdx = fBoundaries[fBufIdx];           // Required because populatePreceding may add extra boundaries.
+        while (fTextIdx < position) {              // Move forwards to a position at or following the requested pos.
+            next();
+        }
+        if (fTextIdx > position) {
+            // If position is not itself a boundary, the next() loop above will overshoot.
+            // Back up one, leaving cache position at the boundary preceding the requested position.
+            previous(status);
+        }
+        return true;
+    }
+
+    U_ASSERT(fTextIdx == position);
+    return true;
+}
+
+
+
+UBool RuleBasedBreakIterator::BreakCache::populateFollowing() {
+    int32_t fromPosition = fBoundaries[fEndBufIdx];
+    int32_t fromRuleStatusIdx = fStatuses[fEndBufIdx];
+    int32_t pos = 0;
+    int32_t ruleStatusIdx = 0;
+
+    if (fBI->fDictionaryCache->following(fromPosition, &pos, &ruleStatusIdx)) {
+        addFollowing(pos, ruleStatusIdx, UpdateCachePosition);
+        return TRUE;
+    }
+
+    fBI->fPosition = fromPosition;
+    pos = fBI->handleNext();
+    if (pos == UBRK_DONE) {
+        return FALSE;
+    }
+
+    ruleStatusIdx = fBI->fRuleStatusIndex;
+    if (fBI->fDictionaryCharCount > 0) {
+        // The text segment obtained from the rules includes dictionary characters.
+        // Subdivide it, with subdivided results going into the dictionary cache.
+        fBI->fDictionaryCache->populateDictionary(fromPosition, pos, fromRuleStatusIdx, ruleStatusIdx);
+        if (fBI->fDictionaryCache->following(fromPosition, &pos, &ruleStatusIdx)) {
+            addFollowing(pos, ruleStatusIdx, UpdateCachePosition);
+            return TRUE;
+            // TODO: may want to move a sizable chunk of dictionary cache to break cache at this point.
+            //       But be careful with interactions with populateNear().
+        }
+    }
+
+    // Rule based segment did not include dictionary characters.
+    // Or, it did contain dictionary chars, but the dictionary segmenter didn't handle them,
+    //    meaning that we didn't take the return, above.
+    // Add its end point to the cache.
+    addFollowing(pos, ruleStatusIdx, UpdateCachePosition);
+
+    // Add several non-dictionary boundaries at this point, to optimize straight forward iteration.
+    //    (subsequent calls to BreakIterator::next() will take the fast path, getting cached results.
+    //
+    for (int count=0; count<6; ++count) {
+        pos = fBI->handleNext();
+        if (pos == UBRK_DONE || fBI->fDictionaryCharCount > 0) {
+            break;
+        }
+        addFollowing(pos, fBI->fRuleStatusIndex, RetainCachePosition);
+    }
+
+    return TRUE;
+}
+
+
+UBool RuleBasedBreakIterator::BreakCache::populatePreceding(UErrorCode &status) {
+    if (U_FAILURE(status)) {
+        return FALSE;
+    }
+
+    int32_t fromPosition = fBoundaries[fStartBufIdx];
+    if (fromPosition == 0) {
+        return FALSE;
+    }
+
+    int32_t position = 0;
+    int32_t positionStatusIdx = 0;
+
+    if (fBI->fDictionaryCache->preceding(fromPosition, &position, &positionStatusIdx)) {
+        addPreceding(position, positionStatusIdx, UpdateCachePosition);
+        return TRUE;
+    }
+
+    int32_t backupPosition = fromPosition;
+
+    // Find a boundary somewhere preceding the first already-cached boundary
+    do {
+        backupPosition = backupPosition - 30;
+        if (backupPosition <= 0) {
+            backupPosition = 0;
+        } else {
+            backupPosition = fBI->handlePrevious(backupPosition);
+        }
+        if (backupPosition == UBRK_DONE || backupPosition == 0) {
+            position = 0;
+            positionStatusIdx = 0;
+        } else {
+            fBI->fPosition = backupPosition;  // TODO: pass starting position in a clearer way.
+            position = fBI->handleNext();
+            positionStatusIdx = fBI->fRuleStatusIndex;
+
+        }
+    } while (position >= fromPosition);
+
+    // Find boundaries between the one we just located and the first already-cached boundary
+    // Put them in a side buffer, because we don't yet know where they will fall in the circular cache buffer..
+
+    fSideBuffer.removeAllElements();
+    fSideBuffer.addElement(position, status);
+    fSideBuffer.addElement(positionStatusIdx, status);
+
+    do {
+        int32_t prevPosition = fBI->fPosition = position;
+        int32_t prevStatusIdx = positionStatusIdx;
+        position = fBI->handleNext();
+        positionStatusIdx = fBI->fRuleStatusIndex;
+        if (position == UBRK_DONE) {
+            break;
+        }
+
+        UBool segmentHandledByDictionary = FALSE;
+        if (fBI->fDictionaryCharCount != 0) {
+            // Segment from the rules includes dictionary characters.
+            // Subdivide it, with subdivided results going into the dictionary cache.
+            int32_t dictSegEndPosition = position;
+            fBI->fDictionaryCache->populateDictionary(prevPosition, dictSegEndPosition, prevStatusIdx, positionStatusIdx);
+            while (fBI->fDictionaryCache->following(prevPosition, &position, &positionStatusIdx)) {
+                segmentHandledByDictionary = true;
+                U_ASSERT(position > prevPosition);
+                if (position >= fromPosition) {
+                    break;
+                }
+                U_ASSERT(position <= dictSegEndPosition);
+                fSideBuffer.addElement(position, status);
+                fSideBuffer.addElement(positionStatusIdx, status);
+                prevPosition = position;
+            }
+            U_ASSERT(position==dictSegEndPosition || position>=fromPosition);
+        }
+            
+        if (!segmentHandledByDictionary && position < fromPosition) {
+            fSideBuffer.addElement(position, status);
+            fSideBuffer.addElement(positionStatusIdx, status);
+        }
+    } while (position < fromPosition);
+
+    // Move boundaries from the side buffer to the main circular buffer.
+    UBool success = FALSE;
+    if (!fSideBuffer.isEmpty()) {
+        positionStatusIdx = fSideBuffer.popi();
+        position = fSideBuffer.popi();
+        addPreceding(position, positionStatusIdx, UpdateCachePosition);
+        success = TRUE;
+    }
+
+    while (!fSideBuffer.isEmpty()) {
+        positionStatusIdx = fSideBuffer.popi();
+        position = fSideBuffer.popi();
+        if (!addPreceding(position, positionStatusIdx, RetainCachePosition)) {
+            // No space in circular buffer to hold a new preceding result while
+            // also retaining the current cache (iteration) position.
+            // Bailing out is safe; the cache will refill again if needed.
+            break;
+        }
+    }
+      
+    return success;
+}
+
+
+void RuleBasedBreakIterator::BreakCache::addFollowing(int32_t position, int32_t ruleStatusIdx, UpdatePositionValues update) {
+    U_ASSERT(position > fBoundaries[fEndBufIdx]);
+    U_ASSERT(ruleStatusIdx <= UINT16_MAX);
+    int32_t nextIdx = modChunkSize(fEndBufIdx + 1);
+    if (nextIdx == fStartBufIdx) {
+        fStartBufIdx = modChunkSize(fStartBufIdx + 6);    // TODO: experiment. Probably revert to 1.
+    }
+    fBoundaries[nextIdx] = position;
+    fStatuses[nextIdx] = ruleStatusIdx;
+    fEndBufIdx = nextIdx;
+    if (update == UpdateCachePosition) {
+        // Set current position to the newly added boundary.
+        fBufIdx = nextIdx;
+        fTextIdx = position;
+    } else {
+        // Retaining the original cache position.
+        // Check if the added boundary wraps around the buffer, and would over-write the original position.
+        // It's the responsibility of callers of this function to not add too many.
+        U_ASSERT(nextIdx != fBufIdx);
+    }
+}
+
+bool RuleBasedBreakIterator::BreakCache::addPreceding(int32_t position, int32_t ruleStatusIdx, UpdatePositionValues update) {
+    U_ASSERT(position < fBoundaries[fStartBufIdx]);
+    U_ASSERT(ruleStatusIdx <= UINT16_MAX);
+    int32_t nextIdx = modChunkSize(fStartBufIdx - 1);
+    if (nextIdx == fEndBufIdx) {
+        if (fBufIdx == fEndBufIdx && update == RetainCachePosition) {
+            // Failure. The insertion of the new boundary would claim the buffer position that is the
+            // current iteration position. And we also want to retain the current iteration position.
+            // (The buffer is already completely full of entries that precede the iteration position.)
+            return false;
+        }
+        fEndBufIdx = modChunkSize(fEndBufIdx - 1);
+    }
+    fBoundaries[nextIdx] = position;
+    fStatuses[nextIdx] = ruleStatusIdx;
+    fStartBufIdx = nextIdx;
+    if (update == UpdateCachePosition) {
+        fBufIdx = nextIdx;
+        fTextIdx = position;
+    }
+    return true;
+}
+
+
+void RuleBasedBreakIterator::BreakCache::dumpCache() {
+#ifdef RBBI_DEBUG
+    RBBIDebugPrintf("fTextIdx:%d   fBufIdx:%d\n", fTextIdx, fBufIdx);
+    for (int32_t i=fStartBufIdx; ; i=modChunkSize(i+1)) {
+        RBBIDebugPrintf("%d  %d\n", i, fBoundaries[i]);
+        if (i == fEndBufIdx) {
+            break;
+        }
+    }
+#endif
+}
+
+U_NAMESPACE_END
+
+#endif // #if !UCONFIG_NO_BREAK_ITERATION


Property changes on: trunk/Build/source/libs/icu/icu-src/source/common/rbbi_cache.cpp
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Build/source/libs/icu/icu-src/source/common/rbbi_cache.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbi_cache.h	                        (rev 0)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbi_cache.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -0,0 +1,203 @@
+// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
+
+// file: rbbi_cache.h
+//
+#ifndef RBBI_CACHE_H
+#define RBBI_CACHE_H
+
+#include "unicode/utypes.h"
+
+#if !UCONFIG_NO_BREAK_ITERATION
+
+#include "unicode/rbbi.h"
+#include "unicode/uobject.h"
+
+#include "uvectr32.h"
+
+U_NAMESPACE_BEGIN
+
+/* DictionaryCache  stores the boundaries obtained from a run of dictionary characters.
+ *                 Dictionary boundaries are moved first to this cache, then from here
+ *                 to the main BreakCache, where they may inter-leave with non-dictionary
+ *                 boundaries. The public BreakIterator API always fetches directly
+ *                 from the main BreakCache, not from here.
+ *
+ *                 In common situations, the number of boundaries in a single dictionary run
+ *                 should be quite small, it will be terminated by punctuation, spaces,
+ *                 or any other non-dictionary characters. The main BreakCache may end
+ *                 up with boundaries from multiple dictionary based runs.
+ *
+ *                 The boundaries are stored in a simple ArrayList (vector), with the
+ *                 assumption that they will be accessed sequentially.
+ */                 
+class RuleBasedBreakIterator::DictionaryCache: public UMemory {
+  public:
+     DictionaryCache(RuleBasedBreakIterator *bi, UErrorCode &status);
+     ~DictionaryCache();
+
+     void reset();
+
+     UBool following(int32_t fromPos, int32_t *pos, int32_t *statusIndex);
+     UBool preceding(int32_t fromPos, int32_t *pos, int32_t *statusIndex);
+
+    /**
+     * Populate the cache with the dictionary based boundaries within a region of text.
+     * @param startPos  The start position of a range of text
+     * @param endPos    The end position of a range of text
+     * @param firstRuleStatus The rule status index that applies to the break at startPos
+     * @param otherRuleStatus The rule status index that applies to boundaries other than startPos
+     * @internal
+     */
+    void populateDictionary(int32_t startPos, int32_t endPos,
+                         int32_t firstRuleStatus, int32_t otherRuleStatus);
+
+
+
+    RuleBasedBreakIterator *fBI;
+    
+    UVector32          *fBreaks;                // A vector containing the boundaries.
+    int32_t             fPositionInCache;       // Index in fBreaks of last boundary returned by following()
+                                                //    or preceding(). Optimizes sequential access.
+    int32_t             fStart;                 // Text position of first boundary in cache.
+    int32_t             fLimit;                 // Last boundary in cache. Which is the limit of the
+                                                //    text segment being handled by the dictionary.
+    int32_t             fFirstRuleStatusIndex;  // Rule status info for first boundary.
+    int32_t             fOtherRuleStatusIndex;  // Rule status info for 2nd through last boundaries.
+};
+
+
+/*
+ * class BreakCache
+ *
+ * Cache of break boundary positions and rule status values.
+ * Break iterator API functions, next(), previous(), etc., will use cached results
+ * when possible, and otherwise cache new results as they are obtained.
+ *
+ * Uniformly caches both dictionary and rule based (non-dictionary) boundaries.
+ *
+ * The cache is implemented as a single circular buffer.
+ */
+
+/*
+ * size of the circular cache buffer.
+ */
+
+class RuleBasedBreakIterator::BreakCache: public UMemory {
+  public:
+                BreakCache(RuleBasedBreakIterator *bi, UErrorCode &status);
+    virtual     ~BreakCache();
+    void        reset(int32_t pos = 0, int32_t ruleStatus = 0);
+    void        next() {    if (fBufIdx == fEndBufIdx) {
+                                nextOL();
+                            } else {
+                                fBufIdx = modChunkSize(fBufIdx + 1);
+                                fTextIdx = fBI->fPosition = fBoundaries[fBufIdx];
+                                fBI->fRuleStatusIndex = fStatuses[fBufIdx];
+                            }
+                };
+
+
+    void        nextOL();
+    void        previous(UErrorCode &status);
+
+    // Move the iteration state to the position following the startPosition.
+    // Input position must be pinned to the input length.
+    void        following(int32_t startPosition, UErrorCode &status);
+
+    void        preceding(int32_t startPosition, UErrorCode &status);
+
+    /*
+     * Update the state of the public BreakIterator (fBI) to reflect the
+     * current state of the break iterator cache (this).
+     */
+    int32_t     current();
+
+    /**
+     * Add boundaries to the cache near the specified position.
+     * The given position need not be a boundary itself.
+     * The input position must be within the range of the text, and
+     * on a code point boundary.
+     * If the requested position is a break boundary, leave the iteration
+     * position on it.
+     * If the requested position is not a boundary, leave the iteration
+     * position on the preceding boundary and include both the
+     * preceding and following boundaries in the cache.
+     * Additional boundaries, either preceding or following, may be added
+     * to the cache as a side effect.
+     *
+     * Return FALSE if the operation failed.
+     */
+    UBool populateNear(int32_t position, UErrorCode &status);
+
+    /**
+     *  Add boundary(s) to the cache following the current last boundary.
+     *  Return FALSE if at the end of the text, and no more boundaries can be added.
+     *  Leave iteration position at the first newly added boundary, or unchanged if no boundary was added.
+     */
+    UBool populateFollowing();
+
+    /**
+     *  Add one or more boundaries to the cache preceding the first currently cached boundary.
+     *  Leave the iteration position on the first added boundary.
+     *  Return false if no boundaries could be added (if at the start of the text.)
+     */
+    UBool populatePreceding(UErrorCode &status);
+
+    enum UpdatePositionValues {
+        RetainCachePosition = 0,
+        UpdateCachePosition = 1
+    };
+
+    /*
+     * Add the boundary following the current position.
+     * The current position can be left as it was, or changed to the newly added boundary,
+     * as specified by the update parameter.
+     */
+    void addFollowing(int32_t position, int32_t ruleStatusIdx, UpdatePositionValues update);
+
+
+    /*
+     * Add the boundary preceding the current position.
+     * The current position can be left as it was, or changed to the newly added boundary,
+     * as specified by the update parameter.
+     */
+    bool addPreceding(int32_t position, int32_t ruleStatusIdx, UpdatePositionValues update);
+
+    /**
+     *  Set the cache position to the specified position, or, if the position
+     *  falls between to cached boundaries, to the preceding boundary.
+     *  Fails if the requested position is outside of the range of boundaries currently held by the cache.
+     *  The startPosition must be on a code point boundary.
+     *
+     *  Return TRUE if successful, FALSE if the specified position is after
+     *  the last cached boundary or before the first.
+     */
+    UBool                   seek(int32_t startPosition);
+
+    void dumpCache();
+
+  private:
+    static inline int32_t   modChunkSize(int index) { return index & (CACHE_SIZE - 1); };
+
+    static constexpr int32_t CACHE_SIZE = 128;
+    static_assert((CACHE_SIZE & (CACHE_SIZE-1)) == 0, "CACHE_SIZE must be power of two.");
+
+    RuleBasedBreakIterator *fBI;
+    int32_t                 fStartBufIdx;
+    int32_t                 fEndBufIdx;    // inclusive
+
+    int32_t                 fTextIdx;
+    int32_t                 fBufIdx;
+
+    int32_t                 fBoundaries[CACHE_SIZE];
+    uint16_t                fStatuses[CACHE_SIZE];
+
+    UVector32               fSideBuffer;
+};
+
+U_NAMESPACE_END
+
+#endif // #if !UCONFIG_NO_BREAK_ITERATION
+
+#endif // RBBI_CACHE_H


Property changes on: trunk/Build/source/libs/icu/icu-src/source/common/rbbi_cache.h
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbidata.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbidata.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbidata.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 ***************************************************************************
@@ -14,7 +14,7 @@
 #include "unicode/utypes.h"
 #include "rbbidata.h"
 #include "rbbirb.h"
-#include "utrie.h"
+#include "utrie2.h"
 #include "udatamem.h"
 #include "cmemory.h"
 #include "cstring.h"
@@ -23,23 +23,6 @@
 #include "uassert.h"
 
 
-//-----------------------------------------------------------------------------------
-//
-//   Trie access folding function.  Copied as-is from properties code in uchar.c
-//
-//-----------------------------------------------------------------------------------
-U_CDECL_BEGIN
-static int32_t U_CALLCONV
-getFoldingOffset(uint32_t data) {
-    /* if bit 15 is set, then the folding offset is in bits 14..0 of the 16-bit trie result */
-    if(data&0x8000) {
-        return (int32_t)(data&0x7fff);
-    } else {
-        return 0;
-    }
-}
-U_CDECL_END
-
 U_NAMESPACE_BEGIN
 
 //-----------------------------------------------------------------------------
@@ -71,9 +54,8 @@
             dh->info.dataFormat[0] == 0x42 &&  // dataFormat="Brk "
             dh->info.dataFormat[1] == 0x72 &&
             dh->info.dataFormat[2] == 0x6b &&
-            dh->info.dataFormat[3] == 0x20)
-            // Note: info.fFormatVersion is duplicated in the RBBIDataHeader, and is
-            //       validated when checking that.
+            dh->info.dataFormat[3] == 0x20 &&
+            isDataVersionAcceptable(dh->info.formatVersion))
         ) {
         status = U_INVALID_FORMAT_ERROR;
         return;
@@ -84,6 +66,11 @@
     fUDataMem = udm;
 }
 
+UBool RBBIDataWrapper::isDataVersionAcceptable(const UVersionInfo version) {
+    return RBBI_DATA_FORMAT_VERSION[0] == version[0];
+}
+
+
 //-----------------------------------------------------------------------------
 //
 //    init().   Does most of the work of construction, shared between the
@@ -96,10 +83,11 @@
     fReverseTable = NULL;
     fSafeFwdTable = NULL;
     fSafeRevTable = NULL;
-    fRuleSource = NULL;
+    fRuleSource   = NULL;
     fRuleStatusTable = NULL;
-    fUDataMem = NULL;
-    fRefCount = 0;
+    fTrie         = NULL;
+    fUDataMem     = NULL;
+    fRefCount     = 0;
     fDontFreeData = TRUE;
 }
 
@@ -108,8 +96,7 @@
         return;
     }
     fHeader = data;
-    if (fHeader->fMagic != 0xb1a0 || fHeader->fFormatVersion[0] != 3) 
-    {
+    if (fHeader->fMagic != 0xb1a0 || !isDataVersionAcceptable(fHeader->fFormatVersion)) {
         status = U_INVALID_FORMAT_ERROR;
         return;
     }
@@ -131,17 +118,24 @@
         fSafeRevTable = (RBBIStateTable *)((char *)data + fHeader->fSRTable);
     }
 
+    // Rule Compatibility Hacks
+    //    If a rule set includes reverse rules but does not explicitly include safe reverse rules,
+    //    the reverse rules are to be treated as safe reverse rules.
 
-    utrie_unserialize(&fTrie,
-                       (uint8_t *)data + fHeader->fTrie,
-                       fHeader->fTrieLen,
-                       &status);
+    if (fSafeRevTable == NULL && fReverseTable != NULL) {
+        fSafeRevTable = fReverseTable;
+        fReverseTable = NULL;
+    }
+
+    fTrie = utrie2_openFromSerialized(UTRIE2_16_VALUE_BITS,
+                                      (uint8_t *)data + fHeader->fTrie,
+                                      fHeader->fTrieLen,
+                                      NULL,           // *actual length
+                                      &status);
     if (U_FAILURE(status)) {
         return;
     }
-    fTrie.getFoldingOffset=getFoldingOffset;
 
-
     fRuleSource   = (UChar *)((char *)data + fHeader->fRuleSource);
     fRuleString.setTo(TRUE, fRuleSource, -1);
     U_ASSERT(data->fRuleSourceLen > 0);
@@ -165,6 +159,8 @@
 //-----------------------------------------------------------------------------
 RBBIDataWrapper::~RBBIDataWrapper() {
     U_ASSERT(fRefCount == 0);
+    utrie2_close(fTrie);
+    fTrie = NULL;
     if (fUDataMem) {
         udata_close(fUDataMem);
     } else if (!fDontFreeData) {
@@ -323,7 +319,7 @@
            pInfo->dataFormat[1]==0x72 &&
            pInfo->dataFormat[2]==0x6b &&
            pInfo->dataFormat[3]==0x20 &&
-           pInfo->formatVersion[0]==3  )) {
+           RBBIDataWrapper::isDataVersionAcceptable(pInfo->formatVersion) )) {
         udata_printError(ds, "ubrk_swap(): data format %02x.%02x.%02x.%02x (format version %02x) is not recognized\n",
                          pInfo->dataFormat[0], pInfo->dataFormat[1],
                          pInfo->dataFormat[2], pInfo->dataFormat[3],
@@ -344,17 +340,11 @@
     //
     // Get the RRBI Data Header, and check that it appears to be OK.
     //
-    //    Note:  ICU 3.2 and earlier, RBBIDataHeader::fDataFormat was actually 
-    //           an int32_t with a value of 1.  Starting with ICU 3.4,
-    //           RBBI's fDataFormat matches the dataFormat field from the
-    //           UDataInfo header, four int8_t bytes.  The value is {3,1,0,0}
-    //
     const uint8_t  *inBytes =(const uint8_t *)inData+headerSize;
     RBBIDataHeader *rbbiDH = (RBBIDataHeader *)inBytes;
     if (ds->readUInt32(rbbiDH->fMagic) != 0xb1a0 || 
-        rbbiDH->fFormatVersion[0] != 3 ||
-        ds->readUInt32(rbbiDH->fLength)  <  sizeof(RBBIDataHeader)) 
-    {
+            !RBBIDataWrapper::isDataVersionAcceptable(rbbiDH->fFormatVersion) ||
+            ds->readUInt32(rbbiDH->fLength)  <  sizeof(RBBIDataHeader)) {
         udata_printError(ds, "ubrk_swap(): RBBI Data header is invalid.\n");
         *status=U_UNSUPPORTED_ERROR;
         return 0;
@@ -451,8 +441,8 @@
     }
 
     // Trie table for character categories
-    utrie_swap(ds, inBytes+ds->readUInt32(rbbiDH->fTrie), ds->readUInt32(rbbiDH->fTrieLen),
-                            outBytes+ds->readUInt32(rbbiDH->fTrie), status);
+    utrie2_swap(ds, inBytes+ds->readUInt32(rbbiDH->fTrie), ds->readUInt32(rbbiDH->fTrieLen),
+                    outBytes+ds->readUInt32(rbbiDH->fTrie), status);
 
     // Source Rules Text.  It's UChar data
     ds->swapArray16(ds, inBytes+ds->readUInt32(rbbiDH->fRuleSource), ds->readUInt32(rbbiDH->fRuleSourceLen),

Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbidata.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbidata.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbidata.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 *******************************************************************************
@@ -8,7 +8,7 @@
 *
 *******************************************************************************
 *   file name:  rbbidata.h
-*   encoding:   US-ASCII
+*   encoding:   UTF-8
 *   tab size:   8 (not used)
 *   indentation:4
 *
@@ -51,22 +51,23 @@
 
 #include "unicode/uobject.h"
 #include "unicode/unistr.h"
+#include "unicode/uversion.h"
 #include "umutex.h"
-#include "utrie.h"
+#include "utrie2.h"
 
 U_NAMESPACE_BEGIN
 
+// The current RBBI data format version.
+static const uint8_t RBBI_DATA_FORMAT_VERSION[] = {4, 0, 0, 0};
+
 /*  
  *   The following structs map exactly onto the raw data from ICU common data file. 
  */
 struct RBBIDataHeader {
     uint32_t         fMagic;           /*  == 0xbla0                                               */
-    uint8_t          fFormatVersion[4]; /* Data Format.  Same as the value in struct UDataInfo      */
+    UVersionInfo     fFormatVersion;   /* Data Format.  Same as the value in struct UDataInfo      */
                                        /*   if there is one associated with this data.             */
                                        /*     (version originates in rbbi, is copied to UDataInfo) */
-                                       /*   For ICU 3.2 and earlier, this field was                */
-                                       /*       uint32_t  fVersion                                 */
-                                       /*   with a value of 1.                                     */
     uint32_t         fLength;          /*  Total length in bytes of this RBBI Data,                */
                                        /*      including all sections, not just the header.        */
     uint32_t         fCatCount;        /*  Number of character categories.                         */
@@ -152,6 +153,8 @@
     RBBIDataWrapper(UDataMemory* udm, UErrorCode &status);
     ~RBBIDataWrapper();
 
+    static UBool          isDataVersionAcceptable(const UVersionInfo version);
+
     void                  init0();
     void                  init(const RBBIDataHeader *data, UErrorCode &status);
     RBBIDataWrapper      *addReference();
@@ -181,11 +184,11 @@
     /* number of int32_t values in the rule status table.   Used to sanity check indexing */
     int32_t             fStatusMaxIdx;
 
-    UTrie               fTrie;
+    UTrie2             *fTrie;
 
 private:
     u_atomic_int32_t    fRefCount;
-    UDataMemory  *fUDataMem;
+    UDataMemory        *fUDataMem;
     UnicodeString       fRuleString;
     UBool               fDontFreeData;
 

Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbinode.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbinode.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbinode.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 ***************************************************************************

Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbinode.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbinode.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbinode.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /********************************************************************
  * COPYRIGHT:

Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbirb.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbirb.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbirb.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 //
 //  file:  rbbirb.cpp
@@ -24,16 +24,16 @@
 #include "unicode/uchriter.h"
 #include "unicode/parsepos.h"
 #include "unicode/parseerr.h"
+
 #include "cmemory.h"
 #include "cstring.h"
-
 #include "rbbirb.h"
 #include "rbbinode.h"
-
 #include "rbbiscan.h"
 #include "rbbisetb.h"
 #include "rbbitblb.h"
 #include "rbbidata.h"
+#include "uassert.h"
 
 
 U_NAMESPACE_BEGIN
@@ -164,8 +164,13 @@
     int32_t statusTableSize   = align8(fRuleStatusVals->size() * sizeof(int32_t));
     int32_t rulesSize         = align8((strippedRules.length()+1) * sizeof(UChar));
 
-    int32_t         totalSize = headerSize + forwardTableSize + reverseTableSize
-                                + safeFwdTableSize + safeRevTableSize 
+    (void)safeFwdTableSize;
+
+    int32_t         totalSize = headerSize
+                                + forwardTableSize 
+                                + /* reverseTableSize */ 0
+                                + /* safeFwdTableSize */ 0
+                                + (safeRevTableSize ? safeRevTableSize : reverseTableSize)
                                 + statusTableSize + trieSize + rulesSize;
 
     RBBIDataHeader  *data     = (RBBIDataHeader *)uprv_malloc(totalSize);
@@ -177,23 +182,45 @@
 
 
     data->fMagic            = 0xb1a0;
-    data->fFormatVersion[0] = 3;
-    data->fFormatVersion[1] = 1;
-    data->fFormatVersion[2] = 0;
-    data->fFormatVersion[3] = 0;
+    data->fFormatVersion[0] = RBBI_DATA_FORMAT_VERSION[0];
+    data->fFormatVersion[1] = RBBI_DATA_FORMAT_VERSION[1];
+    data->fFormatVersion[2] = RBBI_DATA_FORMAT_VERSION[2];
+    data->fFormatVersion[3] = RBBI_DATA_FORMAT_VERSION[3];
     data->fLength           = totalSize;
     data->fCatCount         = fSetBuilder->getNumCharCategories();
 
+    // Only save the forward table and the safe reverse table,
+    // because these are the only ones used at run-time.
+    //
+    // For the moment, we still build the other tables if they are present in the rule source files,
+    // for backwards compatibility. Old rule files need to work, and this is the simplest approach.
+    //
+    // Additional backwards compatibility consideration: if no safe rules are provided, consider the
+    // reverse rules to actually be the safe reverse rules.
+
     data->fFTable        = headerSize;
     data->fFTableLen     = forwardTableSize;
+
+    // Do not save Reverse Table.
     data->fRTable        = data->fFTable  + forwardTableSize;
-    data->fRTableLen     = reverseTableSize;
-    data->fSFTable       = data->fRTable  + reverseTableSize;
-    data->fSFTableLen    = safeFwdTableSize;
-    data->fSRTable       = data->fSFTable + safeFwdTableSize;
-    data->fSRTableLen    = safeRevTableSize;
+    data->fRTableLen     = 0;
 
-    data->fTrie          = data->fSRTable + safeRevTableSize;
+    // Do not save the Safe Forward table.
+    data->fSFTable       = data->fRTable + 0;
+    data->fSFTableLen    = 0;
+
+    data->fSRTable       = data->fSFTable + 0;
+    if (safeRevTableSize > 0) {
+        data->fSRTableLen    = safeRevTableSize;
+    } else if (reverseTableSize > 0) {
+        data->fSRTableLen    = reverseTableSize;
+    } else {
+        U_ASSERT(FALSE);    // Rule build should have failed for lack of a reverse table
+                            // before reaching this point.
+    }
+        
+
+    data->fTrie          = data->fSRTable + data->fSRTableLen;
     data->fTrieLen       = fSetBuilder->getTrieSize();
     data->fStatusTable   = data->fTrie    + trieSize;
     data->fStatusTableLen= statusTableSize;
@@ -203,9 +230,14 @@
     uprv_memset(data->fReserved, 0, sizeof(data->fReserved));
 
     fForwardTables->exportTable((uint8_t *)data + data->fFTable);
-    fReverseTables->exportTable((uint8_t *)data + data->fRTable);
-    fSafeFwdTables->exportTable((uint8_t *)data + data->fSFTable);
-    fSafeRevTables->exportTable((uint8_t *)data + data->fSRTable);
+    // fReverseTables->exportTable((uint8_t *)data + data->fRTable);
+    // fSafeFwdTables->exportTable((uint8_t *)data + data->fSFTable);
+    if (safeRevTableSize > 0) {
+        fSafeRevTables->exportTable((uint8_t *)data + data->fSRTable);
+    } else {
+        fReverseTables->exportTable((uint8_t *)data + data->fSRTable);
+    }
+
     fSetBuilder->serializeTrie ((uint8_t *)data + data->fTrie);
 
     int32_t *ruleStatusTable = (int32_t *)((uint8_t *)data + data->fStatusTable);

Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbirb.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbirb.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbirb.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 //
 //  rbbirb.h
@@ -15,6 +15,9 @@
 #define RBBIRB_H
 
 #include "unicode/utypes.h"
+
+#if !UCONFIG_NO_BREAK_ITERATION
+
 #include "unicode/uobject.h"
 #include "unicode/rbbi.h"
 #include "unicode/uniset.h"
@@ -207,6 +210,9 @@
 #endif
 
 U_NAMESPACE_END
+
+#endif /* #if !UCONFIG_NO_BREAK_ITERATION */
+
 #endif
 
 

Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbirpt.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbirpt.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbirpt.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 //---------------------------------------------------------------------------------
 //

Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbiscan.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbiscan.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbiscan.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 //
 //  file:  rbbiscan.cpp
@@ -47,6 +47,7 @@
 //
 //------------------------------------------------------------------------------
 static const UChar gRuleSet_rule_char_pattern[]       = {
+ // Characters that may appear as literals in patterns without escaping or quoting.
  //   [    ^      [    \     p     {      Z     }     \     u    0      0    2      0
     0x5b, 0x5e, 0x5b, 0x5c, 0x70, 0x7b, 0x5a, 0x7d, 0x5c, 0x75, 0x30, 0x30, 0x32, 0x30,
  //   -    \      u    0     0     7      f     ]     -     [    \      p
@@ -558,6 +559,10 @@
                 fRB->fDefaultTree   = &fRB->fSafeRevTree;
             } else if (opt == UNICODE_STRING("lookAheadHardBreak", 18)) {
                 fRB->fLookAheadHardBreak = TRUE;
+            } else if (opt == UNICODE_STRING("quoted_literals_only", 20)) {
+                fRuleSets[kRuleSet_rule_char-128].clear();
+            } else if (opt == UNICODE_STRING("unquoted_literals",  17)) {
+                fRuleSets[kRuleSet_rule_char-128].applyPattern(UnicodeString(gRuleSet_rule_char_pattern), *fRB->fStatus);
             } else {
                 error(U_BRK_UNRECOGNIZED_OPTION);
             }
@@ -1179,13 +1184,12 @@
     if (U_FAILURE(*fRB->fStatus)) {
         return NULL;
     }
-    fNodeStackPtr++;
-    if (fNodeStackPtr >= kStackSize) {
-        error(U_BRK_INTERNAL_ERROR);
+    if (fNodeStackPtr >= kStackSize - 1) {
+        error(U_BRK_RULE_SYNTAX);
         RBBIDebugPuts("RBBIRuleScanner::pushNewNode - stack overflow.");
-        *fRB->fStatus = U_BRK_INTERNAL_ERROR;
         return NULL;
     }
+    fNodeStackPtr++;
     fNodeStack[fNodeStackPtr] = new RBBINode(t);
     if (fNodeStack[fNodeStackPtr] == NULL) {
         *fRB->fStatus = U_MEMORY_ALLOCATION_ERROR;

Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbiscan.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbiscan.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbiscan.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 //
 //  rbbiscan.h

Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbisetb.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbisetb.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbisetb.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 //
 //  rbbisetb.cpp
@@ -35,7 +35,7 @@
 #if !UCONFIG_NO_BREAK_ITERATION
 
 #include "unicode/uniset.h"
-#include "utrie.h"
+#include "utrie2.h"
 #include "uvector.h"
 #include "uassert.h"
 #include "cmemory.h"
@@ -44,43 +44,6 @@
 #include "rbbisetb.h"
 #include "rbbinode.h"
 
-
-//------------------------------------------------------------------------
-//
-//   getFoldedRBBIValue        Call-back function used during building of Trie table.
-//                             Folding value: just store the offset (16 bits)
-//                             if there is any non-0 entry.
-//                             (It'd really be nice if the Trie builder would provide a
-//                             simple default, so this function could go away from here.)
-//
-//------------------------------------------------------------------------
-/* folding value: just store the offset (16 bits) if there is any non-0 entry */
-U_CDECL_BEGIN
-static uint32_t U_CALLCONV
-getFoldedRBBIValue(UNewTrie *trie, UChar32 start, int32_t offset) {
-    uint32_t value;
-    UChar32 limit;
-    UBool inBlockZero;
-
-    limit=start+0x400;
-    while(start<limit) {
-        value=utrie_get32(trie, start, &inBlockZero);
-        if(inBlockZero) {
-            start+=UTRIE_DATA_BLOCK_LENGTH;
-        } else if(value!=0) {
-            return (uint32_t)(offset|0x8000);
-        } else {
-            ++start;
-        }
-    }
-    return 0;
-}
-
-
-U_CDECL_END
-
-
-
 U_NAMESPACE_BEGIN
 
 //------------------------------------------------------------------------
@@ -116,7 +79,7 @@
         delete r;
     }
 
-    utrie_close(fTrie);
+    utrie2_close(fTrie);
 }
 
 
@@ -287,33 +250,38 @@
     // Build the Trie table for mapping UChar32 values to the corresponding
     //   range group number
     //
-    fTrie = utrie_open(NULL,    //  Pre-existing trie to be filled in
-                      NULL,    //  Data array  (utrie will allocate one)
-                      100000,  //  Max Data Length
-                      0,       //  Initial value for all code points
-                      0,       //  Lead surrogate unit value
-                      TRUE);   //  Keep Latin 1 in separately
+    fTrie = utrie2_open(0,       //  Initial value for all code points.
+                        0,       //  Error value for out-of-range input.
+                        fStatus);
 
-
-    for (rlRange = fRangeList; rlRange!=0; rlRange=rlRange->fNext) {
-        utrie_setRange32(fTrie, rlRange->fStartChar, rlRange->fEndChar+1, rlRange->fNum, TRUE);
+    for (rlRange = fRangeList; rlRange!=0 && U_SUCCESS(*fStatus); rlRange=rlRange->fNext) {
+        utrie2_setRange32(fTrie,
+                          rlRange->fStartChar,     // Range start
+                          rlRange->fEndChar,       // Range end (inclusive)
+                          rlRange->fNum,           // value for range
+                          TRUE,                    // Overwrite previously written values
+                          fStatus);
     }
 }
 
 
-
 //-----------------------------------------------------------------------------------
 //
 //  getTrieSize()    Return the size that will be required to serialize the Trie.
 //
 //-----------------------------------------------------------------------------------
-int32_t RBBISetBuilder::getTrieSize() /*const*/ {
-    fTrieSize  = utrie_serialize(fTrie,
-                                    NULL,                // Buffer
-                                    0,                   // Capacity
-                                    getFoldedRBBIValue,
-                                    TRUE,                // Reduce to 16 bits
-                                    fStatus);
+int32_t RBBISetBuilder::getTrieSize()  {
+    if (U_FAILURE(*fStatus)) {
+        return 0;
+    }
+    utrie2_freeze(fTrie, UTRIE2_16_VALUE_BITS, fStatus);
+    fTrieSize  = utrie2_serialize(fTrie,
+                                  NULL,                // Buffer
+                                  0,                   // Capacity
+                                  fStatus);
+    if (*fStatus == U_BUFFER_OVERFLOW_ERROR) {
+        *fStatus = U_ZERO_ERROR;
+    }
     // RBBIDebugPrintf("Trie table size is %d\n", trieSize);
     return fTrieSize;
 }
@@ -327,12 +295,10 @@
 //
 //-----------------------------------------------------------------------------------
 void RBBISetBuilder::serializeTrie(uint8_t *where) {
-    utrie_serialize(fTrie,
-                    where,                   // Buffer
-                    fTrieSize,               // Capacity
-                    getFoldedRBBIValue,
-                    TRUE,                    // Reduce to 16 bits
-                    fStatus);
+    utrie2_serialize(fTrie,
+                     where,                   // Buffer
+                     fTrieSize,               // Capacity
+                     fStatus);
 }
 
 //------------------------------------------------------------------------

Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbisetb.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbisetb.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbisetb.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 //
 //  rbbisetb.h
@@ -13,12 +13,14 @@
 #define RBBISETB_H
 
 #include "unicode/utypes.h"
+
+#if !UCONFIG_NO_BREAK_ITERATION
+
 #include "unicode/uobject.h"
 #include "rbbirb.h"
+#include "utrie2.h"
 #include "uvector.h"
 
-struct  UNewTrie;
-
 U_NAMESPACE_BEGIN
 
 //
@@ -109,8 +111,8 @@
 
     RangeDescriptor       *fRangeList;      // Head of the linked list of RangeDescriptors
 
-    UNewTrie              *fTrie;           // The mapping TRIE that is the end result of processing
-    uint32_t              fTrieSize;        //  the Unicode Sets.
+    UTrie2                *fTrie;           // The mapping TRIE that is the end result of processing
+    uint32_t               fTrieSize;       //  the Unicode Sets.
 
     // Groups correspond to character categories -
     //       groups of ranges that are in the same original UnicodeSets.
@@ -129,4 +131,7 @@
 
 
 U_NAMESPACE_END
+
+#endif /* #if !UCONFIG_NO_BREAK_ITERATION */
+
 #endif

Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbistbl.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbistbl.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbistbl.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 //
 //  file:  rbbistbl.cpp    Implementation of the ICU RBBISymbolTable class

Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbitblb.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbitblb.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbitblb.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 **********************************************************************

Modified: trunk/Build/source/libs/icu/icu-src/source/common/rbbitblb.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/rbbitblb.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/rbbitblb.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 //
 //  rbbitblb.h

Modified: trunk/Build/source/libs/icu/icu-src/source/common/resbund.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/resbund.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/resbund.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 **********************************************************************

Modified: trunk/Build/source/libs/icu/icu-src/source/common/resbund_cnv.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/resbund_cnv.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/resbund_cnv.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 *******************************************************************************
@@ -8,7 +8,7 @@
 *
 *******************************************************************************
 *   file name:  resbund_cnv.cpp
-*   encoding:   US-ASCII
+*   encoding:   UTF-8
 *   tab size:   8 (not used)
 *   indentation:4
 *

Modified: trunk/Build/source/libs/icu/icu-src/source/common/resource.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/resource.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/resource.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 *******************************************************************************

Modified: trunk/Build/source/libs/icu/icu-src/source/common/resource.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/resource.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/resource.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 *******************************************************************************

Modified: trunk/Build/source/libs/icu/icu-src/source/common/ruleiter.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/ruleiter.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/ruleiter.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 **********************************************************************

Modified: trunk/Build/source/libs/icu/icu-src/source/common/ruleiter.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/ruleiter.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/ruleiter.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 **********************************************************************

Modified: trunk/Build/source/libs/icu/icu-src/source/common/schriter.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/schriter.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/schriter.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /*
 ******************************************************************************

Modified: trunk/Build/source/libs/icu/icu-src/source/common/serv.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/serv.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/serv.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /**
 *******************************************************************************

Modified: trunk/Build/source/libs/icu/icu-src/source/common/serv.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/serv.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/serv.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /**
  *******************************************************************************

Modified: trunk/Build/source/libs/icu/icu-src/source/common/servlk.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/servlk.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/servlk.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /**
  *******************************************************************************

Modified: trunk/Build/source/libs/icu/icu-src/source/common/servlkf.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/servlkf.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/servlkf.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /**
  *******************************************************************************

Modified: trunk/Build/source/libs/icu/icu-src/source/common/servloc.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/servloc.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/servloc.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /**
  *******************************************************************************

Modified: trunk/Build/source/libs/icu/icu-src/source/common/servls.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/servls.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/servls.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /**
  *******************************************************************************

Modified: trunk/Build/source/libs/icu/icu-src/source/common/servnotf.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/servnotf.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/servnotf.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /**
  *******************************************************************************

Modified: trunk/Build/source/libs/icu/icu-src/source/common/servnotf.h
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/servnotf.h	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/servnotf.h	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /**
  *******************************************************************************

Modified: trunk/Build/source/libs/icu/icu-src/source/common/servrbf.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/servrbf.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/servrbf.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /**
  *******************************************************************************

Modified: trunk/Build/source/libs/icu/icu-src/source/common/servslkf.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/servslkf.cpp	2018-01-12 01:23:08 UTC (rev 46289)
+++ trunk/Build/source/libs/icu/icu-src/source/common/servslkf.cpp	2018-01-12 18:35:28 UTC (rev 46290)
@@ -1,4 +1,4 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
+// © 2016 and later: Unicode, Inc. and others.
 // License & terms of use: http://www.unicode.org/copyright.html
 /**
  *******************************************************************************

Modified: trunk/Build/source/libs/icu/icu-src/source/common/sharedobject.cpp
===================================================================
--- trunk/Build/source/libs/icu/icu-src/source/common/sharedobject.cpp	2018-01-12 01:23:08 UTC (rev 46289)

@@ Diff output truncated at 1234567 characters. @@


More information about the tex-live-commits mailing list