]> granicus.if.org Git - icu/commitdiff
ICU-12708 bye bye layout engine
authorSteven R. Loomis <srl@icu-project.org>
Fri, 9 Sep 2016 21:28:18 +0000 (21:28 +0000)
committerSteven R. Loomis <srl@icu-project.org>
Fri, 9 Sep 2016 21:28:18 +0000 (21:28 +0000)
X-SVN-Rev: 39176

211 files changed:
.gitignore
icu4c/readme.html
icu4c/source/Makefile.in
icu4c/source/aclocal.m4
icu4c/source/allinone/allinone.sln
icu4c/source/allinone/icucheck.bat
icu4c/source/config/Makefile.inc.in
icu4c/source/config/icu-config-bottom
icu4c/source/config/icu-config.1.in
icu4c/source/config/mh-cygwin-msvc
icu4c/source/config/mh-msys-msvc
icu4c/source/config/mh-os390
icu4c/source/config/test-icu-config.sh
icu4c/source/configure
icu4c/source/configure.ac
icu4c/source/data/makedata.vcxproj
icu4c/source/icudefs.mk.in
icu4c/source/layout/AlternateSubstSubtables.cpp [deleted file]
icu4c/source/layout/AlternateSubstSubtables.h [deleted file]
icu4c/source/layout/AnchorTables.cpp [deleted file]
icu4c/source/layout/AnchorTables.h [deleted file]
icu4c/source/layout/ArabicLayoutEngine.cpp [deleted file]
icu4c/source/layout/ArabicLayoutEngine.h [deleted file]
icu4c/source/layout/ArabicShaping.cpp [deleted file]
icu4c/source/layout/ArabicShaping.h [deleted file]
icu4c/source/layout/AttachmentPosnSubtables.h [deleted file]
icu4c/source/layout/CanonData.cpp [deleted file]
icu4c/source/layout/CanonShaping.cpp [deleted file]
icu4c/source/layout/CanonShaping.h [deleted file]
icu4c/source/layout/CharSubstitutionFilter.h [deleted file]
icu4c/source/layout/ClassDefinitionTables.cpp [deleted file]
icu4c/source/layout/ClassDefinitionTables.h [deleted file]
icu4c/source/layout/ContextualGlyphInsertion.h [deleted file]
icu4c/source/layout/ContextualGlyphInsertionProc2.cpp [deleted file]
icu4c/source/layout/ContextualGlyphInsertionProc2.h [deleted file]
icu4c/source/layout/ContextualGlyphSubstProc.cpp [deleted file]
icu4c/source/layout/ContextualGlyphSubstProc.h [deleted file]
icu4c/source/layout/ContextualGlyphSubstProc2.cpp [deleted file]
icu4c/source/layout/ContextualGlyphSubstProc2.h [deleted file]
icu4c/source/layout/ContextualGlyphSubstitution.h [deleted file]
icu4c/source/layout/ContextualSubstSubtables.cpp [deleted file]
icu4c/source/layout/ContextualSubstSubtables.h [deleted file]
icu4c/source/layout/CoverageTables.cpp [deleted file]
icu4c/source/layout/CoverageTables.h [deleted file]
icu4c/source/layout/CursiveAttachmentSubtables.cpp [deleted file]
icu4c/source/layout/CursiveAttachmentSubtables.h [deleted file]
icu4c/source/layout/DefaultCharMapper.h [deleted file]
icu4c/source/layout/DeviceTables.cpp [deleted file]
icu4c/source/layout/DeviceTables.h [deleted file]
icu4c/source/layout/ExtensionSubtables.cpp [deleted file]
icu4c/source/layout/ExtensionSubtables.h [deleted file]
icu4c/source/layout/Features.cpp [deleted file]
icu4c/source/layout/GDEFMarkFilter.cpp [deleted file]
icu4c/source/layout/GDEFMarkFilter.h [deleted file]
icu4c/source/layout/GXLayoutEngine.cpp [deleted file]
icu4c/source/layout/GXLayoutEngine.h [deleted file]
icu4c/source/layout/GXLayoutEngine2.cpp [deleted file]
icu4c/source/layout/GXLayoutEngine2.h [deleted file]
icu4c/source/layout/GlyphDefinitionTables.cpp [deleted file]
icu4c/source/layout/GlyphDefinitionTables.h [deleted file]
icu4c/source/layout/GlyphIterator.cpp [deleted file]
icu4c/source/layout/GlyphIterator.h [deleted file]
icu4c/source/layout/GlyphLookupTables.cpp [deleted file]
icu4c/source/layout/GlyphLookupTables.h [deleted file]
icu4c/source/layout/GlyphPositionAdjustments.cpp [deleted file]
icu4c/source/layout/GlyphPositionAdjustments.h [deleted file]
icu4c/source/layout/GlyphPositioningTables.cpp [deleted file]
icu4c/source/layout/GlyphPositioningTables.h [deleted file]
icu4c/source/layout/GlyphPosnLookupProc.cpp [deleted file]
icu4c/source/layout/GlyphPosnLookupProc.h [deleted file]
icu4c/source/layout/GlyphSubstLookupProc.cpp [deleted file]
icu4c/source/layout/GlyphSubstLookupProc.h [deleted file]
icu4c/source/layout/GlyphSubstitutionTables.cpp [deleted file]
icu4c/source/layout/GlyphSubstitutionTables.h [deleted file]
icu4c/source/layout/HanLayoutEngine.cpp [deleted file]
icu4c/source/layout/HanLayoutEngine.h [deleted file]
icu4c/source/layout/HangulLayoutEngine.cpp [deleted file]
icu4c/source/layout/HangulLayoutEngine.h [deleted file]
icu4c/source/layout/ICUFeatures.h [deleted file]
icu4c/source/layout/IndicClassTables.cpp [deleted file]
icu4c/source/layout/IndicLayoutEngine.cpp [deleted file]
icu4c/source/layout/IndicLayoutEngine.h [deleted file]
icu4c/source/layout/IndicRearrangement.h [deleted file]
icu4c/source/layout/IndicRearrangementProcessor.cpp [deleted file]
icu4c/source/layout/IndicRearrangementProcessor.h [deleted file]
icu4c/source/layout/IndicRearrangementProcessor2.cpp [deleted file]
icu4c/source/layout/IndicRearrangementProcessor2.h [deleted file]
icu4c/source/layout/IndicReordering.cpp [deleted file]
icu4c/source/layout/IndicReordering.h [deleted file]
icu4c/source/layout/KernTable.cpp [deleted file]
icu4c/source/layout/KernTable.h [deleted file]
icu4c/source/layout/KhmerLayoutEngine.cpp [deleted file]
icu4c/source/layout/KhmerLayoutEngine.h [deleted file]
icu4c/source/layout/KhmerReordering.cpp [deleted file]
icu4c/source/layout/KhmerReordering.h [deleted file]
icu4c/source/layout/LEFontInstance.cpp [deleted file]
icu4c/source/layout/LEFontInstance.h [deleted file]
icu4c/source/layout/LEGlyphFilter.h [deleted file]
icu4c/source/layout/LEGlyphStorage.cpp [deleted file]
icu4c/source/layout/LEGlyphStorage.h [deleted file]
icu4c/source/layout/LEInsertionList.cpp [deleted file]
icu4c/source/layout/LEInsertionList.h [deleted file]
icu4c/source/layout/LELanguages.h [deleted file]
icu4c/source/layout/LEScripts.h [deleted file]
icu4c/source/layout/LESwaps.h [deleted file]
icu4c/source/layout/LETableReference.h [deleted file]
icu4c/source/layout/LETypes.h [deleted file]
icu4c/source/layout/LayoutEngine.cpp [deleted file]
icu4c/source/layout/LayoutEngine.h [deleted file]
icu4c/source/layout/LayoutTables.h [deleted file]
icu4c/source/layout/LigatureSubstProc.cpp [deleted file]
icu4c/source/layout/LigatureSubstProc.h [deleted file]
icu4c/source/layout/LigatureSubstProc2.cpp [deleted file]
icu4c/source/layout/LigatureSubstProc2.h [deleted file]
icu4c/source/layout/LigatureSubstSubtables.cpp [deleted file]
icu4c/source/layout/LigatureSubstSubtables.h [deleted file]
icu4c/source/layout/LigatureSubstitution.h [deleted file]
icu4c/source/layout/LookupProcessor.cpp [deleted file]
icu4c/source/layout/LookupProcessor.h [deleted file]
icu4c/source/layout/LookupTables.cpp [deleted file]
icu4c/source/layout/LookupTables.h [deleted file]
icu4c/source/layout/Lookups.cpp [deleted file]
icu4c/source/layout/Lookups.h [deleted file]
icu4c/source/layout/MPreFixups.cpp [deleted file]
icu4c/source/layout/MPreFixups.h [deleted file]
icu4c/source/layout/Makefile.in [deleted file]
icu4c/source/layout/MarkArrays.cpp [deleted file]
icu4c/source/layout/MarkArrays.h [deleted file]
icu4c/source/layout/MarkToBasePosnSubtables.cpp [deleted file]
icu4c/source/layout/MarkToBasePosnSubtables.h [deleted file]
icu4c/source/layout/MarkToLigaturePosnSubtables.cpp [deleted file]
icu4c/source/layout/MarkToLigaturePosnSubtables.h [deleted file]
icu4c/source/layout/MarkToMarkPosnSubtables.cpp [deleted file]
icu4c/source/layout/MarkToMarkPosnSubtables.h [deleted file]
icu4c/source/layout/MirroredCharData.cpp [deleted file]
icu4c/source/layout/MorphStateTables.h [deleted file]
icu4c/source/layout/MorphTables.cpp [deleted file]
icu4c/source/layout/MorphTables.h [deleted file]
icu4c/source/layout/MorphTables2.cpp [deleted file]
icu4c/source/layout/MultipleSubstSubtables.cpp [deleted file]
icu4c/source/layout/MultipleSubstSubtables.h [deleted file]
icu4c/source/layout/NonContextualGlyphSubst.h [deleted file]
icu4c/source/layout/NonContextualGlyphSubstProc.cpp [deleted file]
icu4c/source/layout/NonContextualGlyphSubstProc.h [deleted file]
icu4c/source/layout/NonContextualGlyphSubstProc2.cpp [deleted file]
icu4c/source/layout/NonContextualGlyphSubstProc2.h [deleted file]
icu4c/source/layout/OpenTypeLayoutEngine.cpp [deleted file]
icu4c/source/layout/OpenTypeLayoutEngine.h [deleted file]
icu4c/source/layout/OpenTypeTables.h [deleted file]
icu4c/source/layout/OpenTypeUtilities.cpp [deleted file]
icu4c/source/layout/OpenTypeUtilities.h [deleted file]
icu4c/source/layout/PairPositioningSubtables.cpp [deleted file]
icu4c/source/layout/PairPositioningSubtables.h [deleted file]
icu4c/source/layout/ScriptAndLanguage.cpp [deleted file]
icu4c/source/layout/ScriptAndLanguage.h [deleted file]
icu4c/source/layout/ScriptAndLanguageTags.cpp [deleted file]
icu4c/source/layout/ScriptAndLanguageTags.h [deleted file]
icu4c/source/layout/SegmentArrayProcessor.cpp [deleted file]
icu4c/source/layout/SegmentArrayProcessor.h [deleted file]
icu4c/source/layout/SegmentArrayProcessor2.cpp [deleted file]
icu4c/source/layout/SegmentArrayProcessor2.h [deleted file]
icu4c/source/layout/SegmentSingleProcessor.cpp [deleted file]
icu4c/source/layout/SegmentSingleProcessor.h [deleted file]
icu4c/source/layout/SegmentSingleProcessor2.cpp [deleted file]
icu4c/source/layout/SegmentSingleProcessor2.h [deleted file]
icu4c/source/layout/ShapingTypeData.cpp [deleted file]
icu4c/source/layout/SimpleArrayProcessor.cpp [deleted file]
icu4c/source/layout/SimpleArrayProcessor.h [deleted file]
icu4c/source/layout/SimpleArrayProcessor2.cpp [deleted file]
icu4c/source/layout/SimpleArrayProcessor2.h [deleted file]
icu4c/source/layout/SinglePositioningSubtables.cpp [deleted file]
icu4c/source/layout/SinglePositioningSubtables.h [deleted file]
icu4c/source/layout/SingleSubstitutionSubtables.cpp [deleted file]
icu4c/source/layout/SingleSubstitutionSubtables.h [deleted file]
icu4c/source/layout/SingleTableProcessor.cpp [deleted file]
icu4c/source/layout/SingleTableProcessor.h [deleted file]
icu4c/source/layout/SingleTableProcessor2.cpp [deleted file]
icu4c/source/layout/SingleTableProcessor2.h [deleted file]
icu4c/source/layout/StateTableProcessor.cpp [deleted file]
icu4c/source/layout/StateTableProcessor.h [deleted file]
icu4c/source/layout/StateTableProcessor2.cpp [deleted file]
icu4c/source/layout/StateTableProcessor2.h [deleted file]
icu4c/source/layout/StateTables.h [deleted file]
icu4c/source/layout/SubstitutionLookups.cpp [deleted file]
icu4c/source/layout/SubstitutionLookups.h [deleted file]
icu4c/source/layout/SubtableProcessor.cpp [deleted file]
icu4c/source/layout/SubtableProcessor.h [deleted file]
icu4c/source/layout/SubtableProcessor2.cpp [deleted file]
icu4c/source/layout/SubtableProcessor2.h [deleted file]
icu4c/source/layout/ThaiLayoutEngine.cpp [deleted file]
icu4c/source/layout/ThaiLayoutEngine.h [deleted file]
icu4c/source/layout/ThaiShaping.cpp [deleted file]
icu4c/source/layout/ThaiShaping.h [deleted file]
icu4c/source/layout/ThaiStateTables.cpp [deleted file]
icu4c/source/layout/TibetanLayoutEngine.cpp [deleted file]
icu4c/source/layout/TibetanLayoutEngine.h [deleted file]
icu4c/source/layout/TibetanReordering.cpp [deleted file]
icu4c/source/layout/TibetanReordering.h [deleted file]
icu4c/source/layout/TrimmedArrayProcessor.cpp [deleted file]
icu4c/source/layout/TrimmedArrayProcessor.h [deleted file]
icu4c/source/layout/TrimmedArrayProcessor2.cpp [deleted file]
icu4c/source/layout/TrimmedArrayProcessor2.h [deleted file]
icu4c/source/layout/ValueRecords.cpp [deleted file]
icu4c/source/layout/ValueRecords.h [deleted file]
icu4c/source/layout/layout.rc [deleted file]
icu4c/source/layout/layout.vcxproj [deleted file]
icu4c/source/layout/layout.vcxproj.filters [deleted file]
icu4c/source/layout/loengine.cpp [deleted file]
icu4c/source/layout/loengine.h [deleted file]
icu4c/source/test/letest/Makefile.in
icu4c/source/test/letest/letsutil.cpp

index 23bd593b58a49a0fc76dfbbe988b3bd277e11e70..541ac6fb1dfcfb8f081d0ab9d647ae9705fe5f11 100644 (file)
@@ -125,20 +125,6 @@ icu4c/source/io/io.vcproj.*.*.user
 icu4c/source/io/release
 icu4c/source/io/x64
 icu4c/source/io/x86
-icu4c/source/layout/*.ao
-icu4c/source/layout/*.d
-icu4c/source/layout/*.o
-icu4c/source/layout/*.pdb
-icu4c/source/layout/*.vcxproj.user
-icu4c/source/layout/Debug
-icu4c/source/layout/Makefile
-icu4c/source/layout/Release
-icu4c/source/layout/debug
-icu4c/source/layout/layout.res
-icu4c/source/layout/layout.vcproj.*.*.user
-icu4c/source/layout/release
-icu4c/source/layout/x64
-icu4c/source/layout/x86
 icu4c/source/layoutex/*.ao
 icu4c/source/layoutex/*.d
 icu4c/source/layoutex/*.o
index 677f1bd4877f3a1b7f6dd17421a6442189192d61..e0bef728ab7091ebcc34c96fc09e7bb1e063d535 100644 (file)
 
       <li>Calendar specific date and time manipulation</li>
 
-      <li>Complex text layout for Arabic, Hebrew, Indic and Thai</li>
-
       <li>Text boundary analysis for finding characters, word and sentence
       boundaries</li>
     </ul>
     <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>
+
     <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>
       <tt>#define UCONFIG_ENABLE_PLUGINS</tt>.
        </p>
 
-    <!-- ICU 55 items -->
-    <h3>ICU 55: Layout Engine breaking API change</h3>
-    <p>The LayoutEngine (already deprecated) has had the function
-      <tt>LEFontInstance::getFontTable(LETag, size_t &amp;length)</tt>
-      since ICU 52. Its implementation was optional. In ICU 55, this
-      version
-      of <tt>getFontTable</tt> has been made pure virtual, and the
-      version without a length (<tt>getFontTable(LETag)</tt>) has been
-      completely removed. This is a breaking change for users who have
-      not implemented the two-argument <tt>getFontTable()</tt>
-      function in their <tt>LEFontInstance</tt> subclasses.
-      The break is intentional, as the one-argument version cannot be
-      made secure. See <tt>LEFontInstance</tt> api docs for more detail.
-    </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
       <li><tt>uidna_toUnicode</tt></li>
     </ul>
 
-    <!-- ICU 54 items -->
-    <h3>ICU 54: Deprecation of Layout Engine</h3>
-    <p>The LayoutEngine is now deprecated. Please
-    see <a href='http://userguide.icu-project.org/layoutengine'>the
-    User's Guide</a> for more details and migration recommendations.
-      In the future, passing "<tt>--enable-layout</tt>" to configure
-      will be required to
-     enable the layout engine.</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>
     <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", &amp;errorCode)</code>
         analysis, and transliteration.</td>
       </tr>
 
-      <tr>
-        <td><i>&lt;ICU&gt;</i>/source/<b>layout</b>/</td>
-
-        <td>Contains the ICU complex text layout engine. (Deprecated)</td>
-      </tr>
       <tr>
         <td><i>&lt;ICU&gt;</i>/source/<b>layoutex</b>/</td>
 
@@ -1512,16 +1493,6 @@ gnumake</pre>
         functions.</td>
       </tr>
 
-      <tr>
-        <td>Layout Engine</td>
-
-        <td>icule<i>XY</i>.dll</td>
-
-        <td>libicule.so.<i>XY</i>.<i>Z</i></td>
-
-        <td>An optional engine for doing font layout.</td>
-      </tr>
-
       <tr>
         <td>Layout Extensions Engine</td>
 
@@ -1529,7 +1500,9 @@ gnumake</pre>
 
         <td>libiculx.so.<i>XY</i>.<i>Z</i></td>
 
-        <td>An optional engine for doing font layout that uses parts of ICU.</td>
+        <td>An optional engine for doing paragraph layout that uses
+        parts of ICU.
+        HarfBuzz is required.</td>
       </tr>
 
       <tr>
index 66bcf487d539295c50ac1eb54379777a4f9d8a75..bd5b117cb7de846db406ec16934252370ec2a19c 100644 (file)
@@ -31,7 +31,6 @@ subdir = .
 #AUTOCONF = @AUTOCONF@
 
 ## Optional directory setup
-@LAYOUT_TRUE@LAYOUT = layout
 @LAYOUTEX_TRUE@LAYOUTEX = layoutex
 @ICUIO_TRUE@ICUIO = io
 @EXTRAS_TRUE@EXTRA = extra
@@ -41,7 +40,6 @@ subdir = .
 
 ## pkgconfig setup. Always have uc and i18n. Others are optional.
 ALL_PKGCONFIG_SUFFIX=uc i18n
-@LAYOUT_TRUE@ALL_PKGCONFIG_SUFFIX+= le
 @LAYOUTEX_TRUE@ALL_PKGCONFIG_SUFFIX+= lx
 @ICUIO_TRUE@ALL_PKGCONFIG_SUFFIX+= io
 
@@ -60,7 +58,7 @@ INSTALLED_BUILT_FILES = $(top_builddir)/config/Makefile.inc $(top_builddir)/conf
 LOCAL_BUILT_FILES = icudefs.mk config/icucross.mk config/icucross.inc
 
 DOCDIRS = common i18n
-SUBDIRS =  stubdata common i18n $(LAYOUT) $(LAYOUTEX) $(ICUIO) $(TOOLS) data $(EXTRA) $(SAMPLE) $(TEST)
+SUBDIRS =  stubdata common i18n $(LAYOUTEX) $(ICUIO) $(TOOLS) data $(EXTRA) $(SAMPLE) $(TEST)
 
 SECTION = 1
 
@@ -115,13 +113,13 @@ doc doc-searchengine:
 else
 doc: doc/html/index.html
 
-doc-searchengine: Doxyfile $(wildcard ./common/unicode/platform.h $(srcdir)/common/unicode/*.h $(srcdir)/i18n/unicode/*.h $(srcdir)/layout/unicode/*.h $(srcdir)/io/unicode/*.h)
+doc-searchengine: Doxyfile $(wildcard ./common/unicode/platform.h $(srcdir)/common/unicode/*.h $(srcdir)/i18n/unicode/*.h $(srcdir)/io/unicode/*.h)
        sed < Doxyfile -e 's%[^#]*SEARCHENGINE.*%SEARCHENGINE=YES%' | $(DOXYGEN) -
        @echo adding links from non-namespaced class files
        find doc/html -name 'classicu_1_1*' -print | sed -e 's%^\(.*class\)icu_1_1\(.*\)$$%ln & \1\2%' | sh
        @echo Docs created - WARNING, probably contains non-GPL .js files
 
-doc/html/index.html: Doxyfile $(wildcard ./common/unicode/platform.h $(srcdir)/common/unicode/*.h $(srcdir)/i18n/unicode/*.h $(srcdir)/layout/unicode/*.h $(srcdir)/io/unicode/*.h)
+doc/html/index.html: Doxyfile $(wildcard ./common/unicode/platform.h $(srcdir)/common/unicode/*.h $(srcdir)/i18n/unicode/*.h $(srcdir)/io/unicode/*.h)
        $(DOXYGEN)
        @echo adding links from non-namespaced class files
        find doc/html -name 'classicu_1_1*' -print | sed -e 's%^\(.*class\)icu_1_1\(.*\)$$%ln & \1\2%' | sh
@@ -285,14 +283,6 @@ config/icu-io.pc: config/icu.pc Makefile icudefs.mk
        @echo "Libs:" "${ICULIBS_IO}" >> $@
        @echo $@ updated.
 
-config/icu-le.pc: config/icu.pc Makefile icudefs.mk
-       @cat config/icu.pc > $@
-       @echo "Description: $(PACKAGE_ICU_DESCRIPTION): Layout library" >> $@
-       @echo "Name: $(PACKAGE)-le" >> $@
-       @echo "Requires: icu-uc" >> $@
-       @echo "Libs:" "${ICULIBS_LE}" >> $@
-       @echo $@ updated.
-
 ICULEHB_LIBS=@ICULEHB_LIBS@
 USING_HB=
 ifneq ($(ICULEHB_LIBS),)
index f0ae29f5a81ccd90dc9def422ece39e26a56b93f..1b2e030310147ef6ac2452c5c6f812e3e6c25df1 100644 (file)
@@ -1,6 +1,6 @@
-# generated automatically by aclocal 1.15 -*- Autoconf -*-
+# generated automatically by aclocal 1.14.1 -*- Autoconf -*-
 
-# Copyright (C) 1996-2014 Free Software Foundation, Inc.
+# Copyright (C) 1996-2013 Free Software Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # PARTICULAR PURPOSE.
 
 m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
-# pkg.m4 - Macros to locate and utilise pkg-config.            -*- Autoconf -*-
-# serial 1 (pkg-config-0.24)
-# 
-# Copyright Â© 2004 Scott James Remnant <scott@netsplit.com>.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# PKG_PROG_PKG_CONFIG([MIN-VERSION])
-# ----------------------------------
+dnl pkg.m4 - Macros to locate and utilise pkg-config.   -*- Autoconf -*-
+dnl serial 11 (pkg-config-0.29.1)
+dnl
+dnl Copyright Â© 2004 Scott James Remnant <scott@netsplit.com>.
+dnl Copyright Â© 2012-2015 Dan Nicholson <dbn.lists@gmail.com>
+dnl
+dnl This program is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 2 of the License, or
+dnl (at your option) any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful, but
+dnl WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+dnl General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program; if not, write to the Free Software
+dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+dnl 02111-1307, USA.
+dnl
+dnl As a special exception to the GNU General Public License, if you
+dnl distribute this file as part of a program that contains a
+dnl configuration script generated by Autoconf, you may include it under
+dnl the same distribution terms that you use for the rest of that
+dnl program.
+
+dnl PKG_PREREQ(MIN-VERSION)
+dnl -----------------------
+dnl Since: 0.29
+dnl
+dnl Verify that the version of the pkg-config macros are at least
+dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's
+dnl installed version of pkg-config, this checks the developer's version
+dnl of pkg.m4 when generating configure.
+dnl
+dnl To ensure that this macro is defined, also add:
+dnl m4_ifndef([PKG_PREREQ],
+dnl     [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])])
+dnl
+dnl See the "Since" comment for each macro you use to see what version
+dnl of the macros you require.
+m4_defun([PKG_PREREQ],
+[m4_define([PKG_MACROS_VERSION], [0.29.1])
+m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1,
+    [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])])
+])dnl PKG_PREREQ
+
+dnl PKG_PROG_PKG_CONFIG([MIN-VERSION])
+dnl ----------------------------------
+dnl Since: 0.16
+dnl
+dnl Search for the pkg-config tool and set the PKG_CONFIG variable to
+dnl first found in the path. Checks that the version of pkg-config found
+dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is
+dnl used since that's the first version where most current features of
+dnl pkg-config existed.
 AC_DEFUN([PKG_PROG_PKG_CONFIG],
 [m4_pattern_forbid([^_?PKG_[A-Z_]+$])
 m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])
@@ -59,18 +90,19 @@ if test -n "$PKG_CONFIG"; then
                PKG_CONFIG=""
        fi
 fi[]dnl
-])# PKG_PROG_PKG_CONFIG
-
-# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
-#
-# Check to see whether a particular set of modules exists.  Similar
-# to PKG_CHECK_MODULES(), but does not set variables or print errors.
-#
-# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
-# only at the first occurence in configure.ac, so if the first place
-# it's called might be skipped (such as if it is within an "if", you
-# have to call PKG_CHECK_EXISTS manually
-# --------------------------------------------------------------
+])dnl PKG_PROG_PKG_CONFIG
+
+dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+dnl -------------------------------------------------------------------
+dnl Since: 0.18
+dnl
+dnl Check to see whether a particular set of modules exists. Similar to
+dnl PKG_CHECK_MODULES(), but does not set variables or print errors.
+dnl
+dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+dnl only at the first occurence in configure.ac, so if the first place
+dnl it's called might be skipped (such as if it is within an "if", you
+dnl have to call PKG_CHECK_EXISTS manually
 AC_DEFUN([PKG_CHECK_EXISTS],
 [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
 if test -n "$PKG_CONFIG" && \
@@ -80,8 +112,10 @@ m4_ifvaln([$3], [else
   $3])dnl
 fi])
 
-# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
-# ---------------------------------------------
+dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+dnl ---------------------------------------------
+dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting
+dnl pkg_failed based on the result.
 m4_define([_PKG_CONFIG],
 [if test -n "$$1"; then
     pkg_cv_[]$1="$$1"
@@ -93,10 +127,11 @@ m4_define([_PKG_CONFIG],
  else
     pkg_failed=untried
 fi[]dnl
-])# _PKG_CONFIG
+])dnl _PKG_CONFIG
 
-# _PKG_SHORT_ERRORS_SUPPORTED
-# -----------------------------
+dnl _PKG_SHORT_ERRORS_SUPPORTED
+dnl ---------------------------
+dnl Internal check to see if pkg-config supports short errors.
 AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
 [AC_REQUIRE([PKG_PROG_PKG_CONFIG])
 if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
@@ -104,19 +139,17 @@ if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
 else
         _pkg_short_errors_supported=no
 fi[]dnl
-])# _PKG_SHORT_ERRORS_SUPPORTED
-
-
-# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
-# [ACTION-IF-NOT-FOUND])
-#
-#
-# Note that if there is a possibility the first call to
-# PKG_CHECK_MODULES might not happen, you should be sure to include an
-# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
-#
-#
-# --------------------------------------------------------------
+])dnl _PKG_SHORT_ERRORS_SUPPORTED
+
+
+dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+dnl   [ACTION-IF-NOT-FOUND])
+dnl --------------------------------------------------------------
+dnl Since: 0.4.0
+dnl
+dnl Note that if there is a possibility the first call to
+dnl PKG_CHECK_MODULES might not happen, you should be sure to include an
+dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
 AC_DEFUN([PKG_CHECK_MODULES],
 [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
 AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
@@ -170,16 +203,40 @@ else
         AC_MSG_RESULT([yes])
        $3
 fi[]dnl
-])# PKG_CHECK_MODULES
+])dnl PKG_CHECK_MODULES
+
+
+dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+dnl   [ACTION-IF-NOT-FOUND])
+dnl ---------------------------------------------------------------------
+dnl Since: 0.29
+dnl
+dnl Checks for existence of MODULES and gathers its build flags with
+dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags
+dnl and VARIABLE-PREFIX_LIBS from --libs.
+dnl
+dnl Note that if there is a possibility the first call to
+dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to
+dnl include an explicit call to PKG_PROG_PKG_CONFIG in your
+dnl configure.ac.
+AC_DEFUN([PKG_CHECK_MODULES_STATIC],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+_save_PKG_CONFIG=$PKG_CONFIG
+PKG_CONFIG="$PKG_CONFIG --static"
+PKG_CHECK_MODULES($@)
+PKG_CONFIG=$_save_PKG_CONFIG[]dnl
+])dnl PKG_CHECK_MODULES_STATIC
 
 
-# PKG_INSTALLDIR(DIRECTORY)
-# -------------------------
-# Substitutes the variable pkgconfigdir as the location where a module
-# should install pkg-config .pc files. By default the directory is
-# $libdir/pkgconfig, but the default can be changed by passing
-# DIRECTORY. The user can override through the --with-pkgconfigdir
-# parameter.
+dnl PKG_INSTALLDIR([DIRECTORY])
+dnl -------------------------
+dnl Since: 0.27
+dnl
+dnl Substitutes the variable pkgconfigdir as the location where a module
+dnl should install pkg-config .pc files. By default the directory is
+dnl $libdir/pkgconfig, but the default can be changed by passing
+dnl DIRECTORY. The user can override through the --with-pkgconfigdir
+dnl parameter.
 AC_DEFUN([PKG_INSTALLDIR],
 [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])])
 m4_pushdef([pkg_description],
@@ -190,16 +247,18 @@ AC_ARG_WITH([pkgconfigdir],
 AC_SUBST([pkgconfigdir], [$with_pkgconfigdir])
 m4_popdef([pkg_default])
 m4_popdef([pkg_description])
-]) dnl PKG_INSTALLDIR
+])dnl PKG_INSTALLDIR
 
 
-# PKG_NOARCH_INSTALLDIR(DIRECTORY)
-# -------------------------
-# Substitutes the variable noarch_pkgconfigdir as the location where a
-# module should install arch-independent pkg-config .pc files. By
-# default the directory is $datadir/pkgconfig, but the default can be
-# changed by passing DIRECTORY. The user can override through the
-# --with-noarch-pkgconfigdir parameter.
+dnl PKG_NOARCH_INSTALLDIR([DIRECTORY])
+dnl --------------------------------
+dnl Since: 0.27
+dnl
+dnl Substitutes the variable noarch_pkgconfigdir as the location where a
+dnl module should install arch-independent pkg-config .pc files. By
+dnl default the directory is $datadir/pkgconfig, but the default can be
+dnl changed by passing DIRECTORY. The user can override through the
+dnl --with-noarch-pkgconfigdir parameter.
 AC_DEFUN([PKG_NOARCH_INSTALLDIR],
 [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])])
 m4_pushdef([pkg_description],
@@ -210,13 +269,15 @@ AC_ARG_WITH([noarch-pkgconfigdir],
 AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir])
 m4_popdef([pkg_default])
 m4_popdef([pkg_description])
-]) dnl PKG_NOARCH_INSTALLDIR
+])dnl PKG_NOARCH_INSTALLDIR
 
 
-# PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE,
-# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
-# -------------------------------------------
-# Retrieves the value of the pkg-config variable for the given module.
+dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE,
+dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+dnl -------------------------------------------
+dnl Since: 0.28
+dnl
+dnl Retrieves the value of the pkg-config variable for the given module.
 AC_DEFUN([PKG_CHECK_VAR],
 [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
 AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl
@@ -225,7 +286,7 @@ _PKG_CONFIG([$1], [variable="][$3]["], [$2])
 AS_VAR_COPY([$1], [pkg_cv_][$1])
 
 AS_VAR_IF([$1], [""], [$5], [$4])dnl
-])# PKG_CHECK_VAR
+])dnl PKG_CHECK_VAR
 
 m4_include([config/m4/icu-conditional.m4])
 m4_include([acinclude.m4])
index cf01180d20b9134ccff5decc4d8e6ff15b55ed04..fdaaea9c6815a333c57aa39c275929263f42340a 100644 (file)
@@ -31,10 +31,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "i18n", "..\i18n\i18n.vcxpro
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "intltest", "..\test\intltest\intltest.vcxproj", "{73632960-B3A6-464D-83A3-4B43365F19B8}"
 EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "layout", "..\layout\layout.vcxproj", "{C920062A-0647-4553-A3B2-37C58065664B}"
-EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "layoutex", "..\layoutex\layoutex.vcxproj", "{37FC2C7F-1904-4811-8955-2F478830EAD1}"
-EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "makeconv", "..\tools\makeconv\makeconv.vcxproj", "{F5AD9738-1A3D-4906-B9C4-A7D9CE33DC2C}"
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "makedata", "..\data\makedata.vcxproj", "{D9DF7F2F-93B7-4810-B5CD-96F4F33C079B}"
@@ -57,8 +53,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "icupkg", "..\tools\icupkg\i
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gendict", "..\tools\gendict\gendict.vcxproj", "{9D4211F7-2C77-439C-82F0-30A4E43BA569}"
 EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "letest", "..\test\letest\letest.vcxproj", "{67351485-4D18-4245-BE39-A7EF0675ACD2}"
-EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gencfu", "..\tools\gencfu\gencfu.vcxproj", "{691EE0C0-DC57-4A48-8AEE-8ED75EB3A057}"
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gennorm2", "..\tools\gennorm2\gennorm2.vcxproj", "{C7891A65-80AB-4245-912E-5F1E17B0E6C4}"
@@ -295,14 +289,6 @@ Global
                {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
-               {67351485-4D18-4245-BE39-A7EF0675ACD2}.Debug|Win32.ActiveCfg = Debug|Win32
-               {67351485-4D18-4245-BE39-A7EF0675ACD2}.Debug|Win32.Build.0 = Debug|Win32
-               {67351485-4D18-4245-BE39-A7EF0675ACD2}.Debug|x64.ActiveCfg = Debug|x64
-               {67351485-4D18-4245-BE39-A7EF0675ACD2}.Debug|x64.Build.0 = Debug|x64
-               {67351485-4D18-4245-BE39-A7EF0675ACD2}.Release|Win32.ActiveCfg = Release|Win32
-               {67351485-4D18-4245-BE39-A7EF0675ACD2}.Release|Win32.Build.0 = Release|Win32
-               {67351485-4D18-4245-BE39-A7EF0675ACD2}.Release|x64.ActiveCfg = Release|x64
-               {67351485-4D18-4245-BE39-A7EF0675ACD2}.Release|x64.Build.0 = Release|x64
                {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
index 237e4c593c2266d518a3ddafc38ee32240cfeeff..f8331a0122bc52f536fdefbcf52fd73bd1119c1e 100644 (file)
@@ -91,7 +91,7 @@ set ICUFAILCNT=0
 :OK_cintltst\r
 @set ICURUN=%ICURUN% %THT%\r
 \r
-@REM  (Layout is deprecated)\r
+@REM  (Layout is deprecated - this would require HarfBuzz)\r
 @REM  @set THT=letest\r
 @REM  @echo ==== %THT% =========================================================================\r
 @REM  @cd %ICU_ICUDIR%\source\test\letest\r
index 26594acaa994a584fbc1b981c9976378f603ce44..83da082ab27efedf297b9dc9fe0dbc1e18061131 100644 (file)
@@ -92,7 +92,6 @@ endif
 DATA_STUBNAME = data
 COMMON_STUBNAME = uc
 I18N_STUBNAME = i18n
-LAYOUT_STUBNAME = le
 LAYOUTEX_STUBNAME = lx
 IO_STUBNAME = io
 TOOLUTIL_STUBNAME = tu
@@ -105,7 +104,6 @@ CTESTFW_STUBNAME = test
 # 2. link with $(ICULIBS)
 # 3. optionally, add one or more of:
 #    - $(ICULIBS_I18N)    - i18n library, formatting, etc.
-#    - $(ICULIBS_LAYOUT)  - ICU layout library. 
 #    - $(ICULIBS_ICUIO)   - ICU stdio equivalent library
 
 ICULIBS_COMMON = -l$(ICUPREFIX)uc$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)
@@ -115,7 +113,6 @@ ICULIBS_TOOLUTIL = -l$(ICUPREFIX)tu$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)
 ICULIBS_CTESTFW = -l$(ICUPREFIX)ctestfw$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)
 ICULIBS_ICUIO = -l$(ICUPREFIX)io$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)
 ICULIBS_OBSOLETE = -l$(ICUPREFIX)obsolete$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)
-ICULIBS_LAYOUT = -l$(ICUPREFIX)le$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)
 ICULIBS_LAYOUTEX = -l$(ICUPREFIX)lx$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)
 ICULIBS_BASE = -L$(libdir)
 
index cd49a6658636e13b000d10816f9eb42eca0ebbd8..20d0cdd8b6400cf956cdaba849d07dab8975ffe9 100644 (file)
@@ -46,7 +46,6 @@ allflags()
     echo "  --invoke               Print commands to invoke an ICU program"
     echo "  --invoke=<prog>        Print commands to invoke an ICU program named <prog> (ex: genrb)"
     echo "  --ldflags              Print -L search path and -l libraries to link with ICU [LDFLAGS].  This is for the data, uc (common), and i18n libraries only.  "
-    echo "  --ldflags-layout       Print ICU layout engine link directive. Use in addition to --ldflags"
     echo "  --ldflags-libsonly     Same as --ldflags, but only the -l directives"
     echo "  --ldflags-searchpath   Print only -L (search path) directive"
     echo "  --ldflags-system       Print only system libs ICU links with (-lpthread, -lm)"
@@ -281,7 +280,8 @@ do
            ;;
 
        --ldflags-layout)
-           echo $ECHO_N "${ICULIBS_LAYOUT} ${ICULIBS_LAYOUTEX} ${ECHO_C}"
+            echo ${ME}: ERROR: the old layout engine has been removed. use HarfBuzz.
+            exit 1
            ;;
 
        --ldflags-searchpath)
index eefa4c9b69000113f2055a02f8200389ed02411e..55b8e3f31ac7555ec1542e6ab9a9a042174b12d6 100644 (file)
@@ -76,9 +76,6 @@
 .BI "\-\-ldflags"
 ]
 [
-.BI "\-\-ldflags\-layout"
-]
-[
 .BI "\-\-ldflags\-libsonly"
 ]
 [
index 99491ef888e9f636f23a05b9b54b162207bf24ca..01003acfd926c595326f08be1d45cdeef9c088f0 100644 (file)
@@ -120,7 +120,6 @@ LDFLAGSICUDT+=      -base:"0x4ad00000" -NOENTRY# The NOENTRY option is required for c
 LDFLAGSICUUC=  -base:"0x4a800000"# in-uc = 1MB
 LDFLAGSICUI18N=        -base:"0x4a900000"# io-in = 2MB
 LDFLAGSICUIO=  -base:"0x4ab00000"# le-io = 1MB
-LDFLAGSICULE=  -base:"0x4ac00000"# lx-le = 512KB
 LDFLAGSICULX=  -base:"0x4ac80000"
 LDFLAGSCTESTFW=# Unused for now.
 LDFLAGSICUTOOLUTIL=    -base:"0x4ac00000"# Same as layout. Layout and tools probably won't mix.
index 501dd02baceee8c71e659a2e87487db246e8b8f3..6b57c26927eb73aac02a0d398a5a6547b01029be 100644 (file)
@@ -125,7 +125,6 @@ LDFLAGSICUDT+=      -base:"0x4ad00000" -NOENTRY# The NOENTRY option is required for c
 LDFLAGSICUUC=  -base:"0x4a800000"# in-uc = 1MB
 LDFLAGSICUI18N=        -base:"0x4a900000"# io-in = 2MB
 LDFLAGSICUIO=  -base:"0x4ab00000"# le-io = 1MB
-LDFLAGSICULE=  -base:"0x4ac00000"# lx-le = 512KB
 LDFLAGSICULX=  -base:"0x4ac80000"
 LDFLAGSCTESTFW=# Unused for now.
 LDFLAGSICUTOOLUTIL=    -base:"0x4ac00000"# Same as layout. Layout and tools probably won't mix.
index 68928e3ecf48837fa7a1bb24a176881c6f66def2..dbc3a3a5a7a4f470ac1fc8ac3350a27e7024db5d 100644 (file)
@@ -177,7 +177,6 @@ endif
 LIBICUDT=      $(top_builddir)/stubdata/$(LIBICU)data$(ICULIBSUFFIX)$(STUB_SUFFIX)$(SO_TARGET_VERSION).x
 LIBICUUC=      $(top_builddir)/common/$(LIBICU)uc$(ICULIBSUFFIX)$(SO_TARGET_VERSION).x
 LIBICUI18N=    $(top_builddir)/i18n/$(LIBICU)i18n$(ICULIBSUFFIX)$(SO_TARGET_VERSION).x
-LIBICULE=      $(top_builddir)/layout/$(LIBICU)le$(ICULIBSUFFIX)$(SO_TARGET_VERSION).x
 LIBICULX=      $(top_builddir)/layoutex/$(LIBICU)lx$(ICULIBSUFFIX)$(SO_TARGET_VERSION).x
 LIBICUIO=      $(top_builddir)/io/$(LIBICU)io$(ICULIBSUFFIX)$(SO_TARGET_VERSION).x
 LIBCTESTFW=    $(top_builddir)/tools/ctestfw/$(LIBICU)test$(ICULIBSUFFIX)$(SO_TARGET_VERSION).x
index 3114d6433feb8505062eb84c2c268bf361d0035d..0f22484e160007f7df88d9763ee00e6a75442e4c 100755 (executable)
@@ -26,7 +26,6 @@ icu-config --invoke=genrb
 icu-config --invoke=./myapp
 icu-config --invoke=/path/to/myapp
 icu-config --ldflags                 
-icu-config --ldflags-layout          
 icu-config --ldflags-searchpath
 icu-config --ldflags-libsonly
 icu-config --ldflags-system          
@@ -47,5 +46,5 @@ icu-config --version
 icu-config --prefix=/tmp --bindir
 # following needs to point to an alternate path that will work 
 icu-config --prefix=/Users/srl/II --cflags
-icu-config --detect-prefix --ldflags --ldflags-layout
+icu-config --detect-prefix --ldflags 
 
index d764fce787aeb3dd8dba630e13a353e21e03945e..777cca895fbafbd266529b0fdbfb70cf37421808 100755 (executable)
@@ -649,8 +649,6 @@ U_HAVE_TOOLS
 TOOLS_TRUE
 U_HAVE_LAYOUTEX
 LAYOUTEX_TRUE
-U_HAVE_LAYOUT
-LAYOUT_TRUE
 U_HAVE_ICUIO
 ICUIO_TRUE
 U_HAVE_EXTRAS
@@ -754,7 +752,6 @@ infodir
 docdir
 oldincludedir
 includedir
-runstatedir
 localstatedir
 sharedstatedir
 sysconfdir
@@ -795,8 +792,8 @@ enable_rpath
 enable_weak_threads
 enable_extras
 enable_icuio
-enable_layout
 enable_layoutex
+enable_layout
 enable_tools
 with_data_packaging
 with_library_suffix
@@ -858,7 +855,6 @@ datadir='${datarootdir}'
 sysconfdir='${prefix}/etc'
 sharedstatedir='${prefix}/com'
 localstatedir='${prefix}/var'
-runstatedir='${localstatedir}/run'
 includedir='${prefix}/include'
 oldincludedir='/usr/include'
 docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
@@ -1111,15 +1107,6 @@ do
   | -silent | --silent | --silen | --sile | --sil)
     silent=yes ;;
 
-  -runstatedir | --runstatedir | --runstatedi | --runstated \
-  | --runstate | --runstat | --runsta | --runst | --runs \
-  | --run | --ru | --r)
-    ac_prev=runstatedir ;;
-  -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
-  | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
-  | --run=* | --ru=* | --r=*)
-    runstatedir=$ac_optarg ;;
-
   -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
     ac_prev=sbindir ;;
   -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
@@ -1257,7 +1244,7 @@ fi
 for ac_var in  exec_prefix prefix bindir sbindir libexecdir datarootdir \
                datadir sysconfdir sharedstatedir localstatedir includedir \
                oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
-               libdir localedir mandir runstatedir
+               libdir localedir mandir
 do
   eval ac_val=\$$ac_var
   # Remove trailing slashes.
@@ -1410,7 +1397,6 @@ Fine tuning of the installation directories:
   --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
   --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
   --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
-  --runstatedir=DIR       modifiable per-process data [LOCALSTATEDIR/run]
   --libdir=DIR            object code libraries [EPREFIX/lib]
   --includedir=DIR        C header files [PREFIX/include]
   --oldincludedir=DIR     C header files for non-gcc [/usr/include]
@@ -1461,10 +1447,9 @@ Optional Features:
   --enable-weak-threads   weakly reference the threading library default=no
   --enable-extras         build ICU extras default=yes
   --enable-icuio          build ICU's icuio library default=yes
-  --enable-layout         build ICU's DEPRECATED layout library default=yes
-  --enable-layoutex         build ICU's Paragraph Layout library default=same-as-layout.
-            If not building with the ICU Layout library, then icu-le-hb must be installed via pkg-config.
-            See http://harfbuzz.org
+  --enable-layoutex         build ICU's Paragraph Layout library default=yes.
+            icu-le-hb must be installed via pkg-config. See http://harfbuzz.org
+
   --enable-tools         build ICU's tools default=yes
   --enable-tests          build ICU tests default=yes
   --enable-samples        build ICU samples default=yes
@@ -7545,38 +7530,16 @@ else
   U_HAVE_ICUIO=0
 fi
 
-# Enable/disable layout
-# Check whether --enable-layout was given.
-if test "${enable_layout+set}" = set; then :
-  enableval=$enable_layout; case "${enableval}" in
-               yes) layout=true ;;
-               no)  layout=false ;;
-               *) as_fn_error $? "bad value ${enableval} for --enable-layout" "$LINENO" 5 ;;
-               esac
-else
-  layout=true
-fi
-
-
-
-if test "$layout" = true; then
-  LAYOUT_TRUE=
-  U_HAVE_LAYOUT=1
-else
-  LAYOUT_TRUE='#'
-  U_HAVE_LAYOUT=0
-fi
-
 # Enable/disable layoutex
 # Check whether --enable-layoutex was given.
 if test "${enable_layoutex+set}" = set; then :
   enableval=$enable_layoutex; case "${enableval}" in
-               yes) layoutex=true ;;
+               yes) layoutex=$have_icu_le_hb ;;
                no)  layoutex=false ;;
                *) as_fn_error $? "bad value ${enableval} for --enable-layoutex" "$LINENO" 5 ;;
                esac
 else
-  layoutex=$layout
+  layoutex=$have_icu_le_hb
 fi
 
 
@@ -7589,6 +7552,17 @@ else
   U_HAVE_LAYOUTEX=0
 fi
 
+# Enable/disable layoutex
+# Check whether --enable-layout was given.
+if test "${enable_layout+set}" = set; then :
+  enableval=$enable_layout; case "${enableval}" in
+               yes) as_fn_error $? "The ICU Layout Engine has been removed." "$LINENO" 5 ;;
+               no)   ;;
+               *) ;;
+               esac
+fi
+
+
 # Enable/disable tools
 # Check whether --enable-tools was given.
 if test "${enable_tools+set}" = set; then :
@@ -7829,7 +7803,7 @@ echo "CXXFLAGS=$CXXFLAGS"
 
 
 # output the Makefiles
-ac_config_files="$ac_config_files icudefs.mk Makefile data/pkgdataMakefile config/Makefile.inc config/icu.pc config/pkgdataMakefile data/Makefile stubdata/Makefile common/Makefile i18n/Makefile layout/Makefile layoutex/Makefile io/Makefile extra/Makefile extra/uconv/Makefile extra/uconv/pkgdataMakefile extra/scrptrun/Makefile tools/Makefile tools/ctestfw/Makefile tools/toolutil/Makefile tools/makeconv/Makefile tools/genrb/Makefile tools/genccode/Makefile tools/gencmn/Makefile tools/gencnval/Makefile tools/gendict/Makefile tools/gentest/Makefile tools/gennorm2/Makefile tools/genbrk/Makefile tools/gensprep/Makefile tools/icuinfo/Makefile tools/icupkg/Makefile tools/icuswap/Makefile tools/pkgdata/Makefile tools/tzcode/Makefile tools/gencfu/Makefile test/Makefile test/compat/Makefile test/testdata/Makefile test/testdata/pkgdataMakefile test/hdrtst/Makefile test/intltest/Makefile test/cintltst/Makefile test/iotest/Makefile test/letest/Makefile test/perf/Makefile test/perf/collationperf/Makefile test/perf/collperf/Makefile test/perf/collperf2/Makefile test/perf/dicttrieperf/Makefile test/perf/ubrkperf/Makefile test/perf/charperf/Makefile test/perf/convperf/Makefile test/perf/normperf/Makefile test/perf/DateFmtPerf/Makefile test/perf/howExpensiveIs/Makefile test/perf/strsrchperf/Makefile test/perf/unisetperf/Makefile test/perf/usetperf/Makefile test/perf/ustrperf/Makefile test/perf/utfperf/Makefile test/perf/utrie2perf/Makefile test/perf/leperf/Makefile samples/Makefile samples/date/Makefile samples/cal/Makefile samples/layout/Makefile"
+ac_config_files="$ac_config_files icudefs.mk Makefile data/pkgdataMakefile config/Makefile.inc config/icu.pc config/pkgdataMakefile data/Makefile stubdata/Makefile common/Makefile i18n/Makefile layoutex/Makefile io/Makefile extra/Makefile extra/uconv/Makefile extra/uconv/pkgdataMakefile extra/scrptrun/Makefile tools/Makefile tools/ctestfw/Makefile tools/toolutil/Makefile tools/makeconv/Makefile tools/genrb/Makefile tools/genccode/Makefile tools/gencmn/Makefile tools/gencnval/Makefile tools/gendict/Makefile tools/gentest/Makefile tools/gennorm2/Makefile tools/genbrk/Makefile tools/gensprep/Makefile tools/icuinfo/Makefile tools/icupkg/Makefile tools/icuswap/Makefile tools/pkgdata/Makefile tools/tzcode/Makefile tools/gencfu/Makefile test/Makefile test/compat/Makefile test/testdata/Makefile test/testdata/pkgdataMakefile test/hdrtst/Makefile test/intltest/Makefile test/cintltst/Makefile test/iotest/Makefile test/letest/Makefile test/perf/Makefile test/perf/collationperf/Makefile test/perf/collperf/Makefile test/perf/collperf2/Makefile test/perf/dicttrieperf/Makefile test/perf/ubrkperf/Makefile test/perf/charperf/Makefile test/perf/convperf/Makefile test/perf/normperf/Makefile test/perf/DateFmtPerf/Makefile test/perf/howExpensiveIs/Makefile test/perf/strsrchperf/Makefile test/perf/unisetperf/Makefile test/perf/usetperf/Makefile test/perf/ustrperf/Makefile test/perf/utfperf/Makefile test/perf/utrie2perf/Makefile test/perf/leperf/Makefile samples/Makefile samples/date/Makefile samples/cal/Makefile samples/layout/Makefile"
 
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
@@ -8549,7 +8523,6 @@ do
     "stubdata/Makefile") CONFIG_FILES="$CONFIG_FILES stubdata/Makefile" ;;
     "common/Makefile") CONFIG_FILES="$CONFIG_FILES common/Makefile" ;;
     "i18n/Makefile") CONFIG_FILES="$CONFIG_FILES i18n/Makefile" ;;
-    "layout/Makefile") CONFIG_FILES="$CONFIG_FILES layout/Makefile" ;;
     "layoutex/Makefile") CONFIG_FILES="$CONFIG_FILES layoutex/Makefile" ;;
     "io/Makefile") CONFIG_FILES="$CONFIG_FILES io/Makefile" ;;
     "extra/Makefile") CONFIG_FILES="$CONFIG_FILES extra/Makefile" ;;
index 0ac7b54d1e18122edc22ec849b988b73b426e0f5..44503623fbd4f082069c1741cdba1092fce6a452 100644 (file)
@@ -1097,30 +1097,28 @@ AC_ARG_ENABLE(icuio,
        icuio=true)
 ICU_CONDITIONAL(ICUIO, test "$icuio" = true)
 
-# Enable/disable layout
-AC_ARG_ENABLE(layout,
-       [  --enable-layout         build ICU's DEPRECATED layout library [default=yes]],
-       [case "${enableval}" in
-               yes) layout=true ;;
-               no)  layout=false ;;
-               *) AC_MSG_ERROR(bad value ${enableval} for --enable-layout) ;;
-               esac],
-       layout=true)
-ICU_CONDITIONAL(LAYOUT, test "$layout" = true)
-
 # Enable/disable layoutex
 AC_ARG_ENABLE(layoutex,
-       [  --enable-layoutex         build ICU's Paragraph Layout library [default=same-as-layout].
-            If not building with the ICU Layout library, then icu-le-hb must be installed via pkg-config.
-            See http://harfbuzz.org],
+       [  --enable-layoutex         build ICU's Paragraph Layout library [default=yes].
+            icu-le-hb must be installed via pkg-config. See http://harfbuzz.org],
        [case "${enableval}" in
-               yes) layoutex=true ;;
+               yes) layoutex=$have_icu_le_hb ;;
                no)  layoutex=false ;;
                *) AC_MSG_ERROR(bad value ${enableval} for --enable-layoutex) ;;
                esac],
-       layoutex=$layout)
+       layoutex=$have_icu_le_hb)
 ICU_CONDITIONAL(LAYOUTEX, test "$layoutex" = true)
 
+# Enable/disable layout
+AC_ARG_ENABLE(layout,
+       [],
+       [case "${enableval}" in
+               yes) AC_MSG_ERROR(The ICU Layout Engine has been removed.) ;;
+               no)   ;;
+               *) ;;
+               esac],
+       )
+
 # Enable/disable tools
 AC_ARG_ENABLE(tools,
        [  --enable-tools         build ICU's tools [default=yes]],
@@ -1342,7 +1340,6 @@ AC_CONFIG_FILES([icudefs.mk \
                stubdata/Makefile \
                common/Makefile \
                i18n/Makefile \
-               layout/Makefile \
                layoutex/Makefile \
                io/Makefile \
                extra/Makefile \
index ae88f33ce7e82a680af2dd880f841941a7a15a7a..198ecf108c3a23381887a9a6810269a0be10f642 100644 (file)
       <Project>{c2b04507-2521-4801-bf0d-5fd79d6d518c}</Project>\r
       <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\r
     </ProjectReference>\r
-    <ProjectReference Include="..\layoutex\layoutex.vcxproj">\r
-      <Project>{37fc2c7f-1904-4811-8955-2f478830ead1}</Project>\r
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\r
-    </ProjectReference>\r
-    <ProjectReference Include="..\layout\layout.vcxproj">\r
-      <Project>{c920062a-0647-4553-a3b2-37c58065664b}</Project>\r
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\r
-    </ProjectReference>\r
     <ProjectReference Include="..\stubdata\stubdata.vcxproj">\r
       <Project>{203ec78a-0531-43f0-a636-285439bde025}</Project>\r
       <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\r
       <Project>{e4993e82-d68a-46ca-bae0-9d35e172e46f}</Project>\r
       <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\r
     </ProjectReference>\r
-    <ProjectReference Include="..\test\letest\letest.vcxproj">\r
-      <Project>{67351485-4d18-4245-be39-a7ef0675acd2}</Project>\r
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\r
-    </ProjectReference>\r
     <ProjectReference Include="..\tools\ctestfw\ctestfw.vcxproj">\r
       <Project>{eca6b435-b4fa-4f9f-bf95-f451d078fc47}</Project>\r
       <ReferenceOutputAssembly>false</ReferenceOutputAssembly>\r
index 333c593e7bb093063f5d70d13c75e542a0710eaa..46568f30766aadc305a7a06e2989fe2d66d8d567 100644 (file)
@@ -245,7 +245,6 @@ TOOLLIBDIR=$(LIBDIR)
 DATA_STUBNAME = data
 COMMON_STUBNAME = uc
 I18N_STUBNAME = i18n
-LAYOUT_STUBNAME = le
 LAYOUTEX_STUBNAME = lx
 IO_STUBNAME = io
 TOOLUTIL_STUBNAME = tu
@@ -264,8 +263,6 @@ else
 USING_ICULEHB=no
 ICULEHB_TRUE=#
 ICULEHB_FALSE=
-ICULIBS_LE     = -l$(STATIC_PREFIX_WHEN_USED)$(ICUPREFIX)$(LAYOUT_STUBNAME)$(ICULIBSUFFIX)$(SO_TARGET_VERSION_SUFFIX)
-ICULE_CFLAGS=-I$(top_srcdir)
 endif
 
 # Just the libs.
diff --git a/icu4c/source/layout/AlternateSubstSubtables.cpp b/icu4c/source/layout/AlternateSubstSubtables.cpp
deleted file mode 100644 (file)
index 91f51ad..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEGlyphFilter.h"
-#include "OpenTypeTables.h"
-#include "GlyphSubstitutionTables.h"
-#include "AlternateSubstSubtables.h"
-#include "GlyphIterator.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-le_uint32 AlternateSubstitutionSubtable::process(const LEReferenceTo<AlternateSubstitutionSubtable> &base,
-                                       GlyphIterator *glyphIterator, LEErrorCode &success, const LEGlyphFilter *filter) const
-{
-    // NOTE: For now, we'll just pick the first alternative...
-    LEGlyphID glyph = glyphIterator->getCurrGlyphID();
-    le_int32 coverageIndex = getGlyphCoverage(base, glyph, success);
-
-    if (coverageIndex >= 0 && LE_SUCCESS(success)) {
-        le_uint16 altSetCount = SWAPW(alternateSetCount);
-
-        if (coverageIndex < altSetCount) {
-            Offset alternateSetTableOffset = SWAPW(alternateSetTableOffsetArray[coverageIndex]);
-            const LEReferenceTo<AlternateSetTable> alternateSetTable(base, success,
-                                  (const AlternateSetTable *) ((char *) this + alternateSetTableOffset));
-            TTGlyphID alternate = SWAPW(alternateSetTable->alternateArray[0]);
-
-            if (filter == NULL || filter->accept(LE_SET_GLYPH(glyph, alternate))) {
-                glyphIterator->setCurrGlyphID(SWAPW(alternateSetTable->alternateArray[0]));
-            }
-
-            return 1;
-        }
-
-        // XXXX If we get here, the table's mal-formed...
-    }
-
-    return 0;
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/AlternateSubstSubtables.h b/icu4c/source/layout/AlternateSubstSubtables.h
deleted file mode 100644 (file)
index f1f7528..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __ALTERNATESUBSTITUTIONSUBTABLES_H
-#define __ALTERNATESUBSTITUTIONSUBTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEGlyphFilter.h"
-#include "OpenTypeTables.h"
-#include "GlyphSubstitutionTables.h"
-#include "GlyphIterator.h"
-
-U_NAMESPACE_BEGIN
-
-struct AlternateSetTable
-{
-    le_uint16 glyphCount;
-    TTGlyphID alternateArray[ANY_NUMBER];
-};
-
-LE_VAR_ARRAY(AlternateSetTable, alternateArray)
-
-struct AlternateSubstitutionSubtable : GlyphSubstitutionSubtable
-{
-    le_uint16 alternateSetCount;
-    Offset    alternateSetTableOffsetArray[ANY_NUMBER];
-
-    le_uint32 process(const LEReferenceTo<AlternateSubstitutionSubtable> &base, GlyphIterator *glyphIterator, LEErrorCode &success, const LEGlyphFilter *filter = NULL) const;
-};
-
-LE_VAR_ARRAY(AlternateSubstitutionSubtable, alternateSetTableOffsetArray)
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/AnchorTables.cpp b/icu4c/source/layout/AnchorTables.cpp
deleted file mode 100644 (file)
index b58ea24..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "DeviceTables.h"
-#include "AnchorTables.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-void AnchorTable::getAnchor(LEGlyphID glyphID, const LEFontInstance *fontInstance,
-                            LEPoint &anchor) const
-{
-    switch(SWAPW(anchorFormat)) {
-    case 1:
-    {
-        const Format1AnchorTable *f1 = (const Format1AnchorTable *) this;
-
-        f1->getAnchor(fontInstance, anchor);
-        break;
-    }
-
-    case 2:
-    {
-        const Format2AnchorTable *f2 = (const Format2AnchorTable *) this;
-
-        f2->getAnchor(glyphID, fontInstance, anchor);
-        break;
-    }
-
-    case 3:
-    {
-        const Format3AnchorTable *f3 = (const Format3AnchorTable *) this;
-
-        f3->getAnchor(fontInstance, anchor);
-        break;
-    }
-
-    default:
-        // unknown format: just use x, y coordinate, like format 1...
-        const Format1AnchorTable *f1 = (const Format1AnchorTable *) this;
-
-        f1->getAnchor(fontInstance, anchor);
-        break;
-    }
-}
-
-void Format1AnchorTable::getAnchor(const LEFontInstance *fontInstance, LEPoint &anchor) const
-{
-    le_int16 x = SWAPW(xCoordinate);
-    le_int16 y = SWAPW(yCoordinate);
-    LEPoint pixels;
-
-    fontInstance->transformFunits(x, y, pixels);
-
-    fontInstance->pixelsToUnits(pixels, anchor);
-}
-
-void Format2AnchorTable::getAnchor(LEGlyphID glyphID, const LEFontInstance *fontInstance, LEPoint &anchor) const
-{
-    LEPoint point;
-
-    if (! fontInstance->getGlyphPoint(glyphID, SWAPW(anchorPoint), point)) {
-        le_int16 x = SWAPW(xCoordinate);
-        le_int16 y = SWAPW(yCoordinate);
-
-        fontInstance->transformFunits(x, y, point);
-    }
-
-
-    fontInstance->pixelsToUnits(point, anchor);
-}
-
-void Format3AnchorTable::getAnchor(const LEFontInstance *fontInstance, LEPoint &anchor) const
-{
-    le_int16 x = SWAPW(xCoordinate);
-    le_int16 y = SWAPW(yCoordinate);
-    LEPoint pixels;
-    Offset dtxOffset = SWAPW(xDeviceTableOffset);
-    Offset dtyOffset = SWAPW(yDeviceTableOffset);
-
-    fontInstance->transformFunits(x, y, pixels);
-
-    if (dtxOffset != 0) {
-        const DeviceTable *dtx = (const DeviceTable *) ((char *) this + dtxOffset);
-        le_int16 adjx = dtx->getAdjustment((le_int16) fontInstance->getXPixelsPerEm());
-
-        pixels.fX += adjx;
-    }
-
-    if (dtyOffset != 0) {
-        const DeviceTable *dty = (const DeviceTable *) ((char *) this + dtyOffset);
-        le_int16 adjy = dty->getAdjustment((le_int16) fontInstance->getYPixelsPerEm());
-
-        pixels.fY += adjy;
-    }
-
-    fontInstance->pixelsToUnits(pixels, anchor);
-}
-
-U_NAMESPACE_END
-
diff --git a/icu4c/source/layout/AnchorTables.h b/icu4c/source/layout/AnchorTables.h
deleted file mode 100644 (file)
index c57d633..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __ANCHORTABLES_H
-#define __ANCHORTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-
-U_NAMESPACE_BEGIN
-
-struct AnchorTable
-{
-    le_uint16  anchorFormat;
-    le_int16   xCoordinate;
-    le_int16   yCoordinate;
-
-    void    getAnchor(LEGlyphID glyphID, const LEFontInstance *fontInstance,
-                      LEPoint &anchor) const;
-};
-
-struct Format1AnchorTable : AnchorTable
-{
-    void getAnchor(const LEFontInstance *fontInstance, LEPoint &anchor) const;
-};
-
-struct Format2AnchorTable : AnchorTable
-{
-    le_uint16  anchorPoint;
-
-    void getAnchor(LEGlyphID glyphID, const LEFontInstance *fontInstance, LEPoint &anchor) const;
-};
-
-struct Format3AnchorTable : AnchorTable
-{
-    Offset  xDeviceTableOffset;
-    Offset  yDeviceTableOffset;
-
-    void getAnchor(const LEFontInstance *fontInstance, LEPoint &anchor) const;
-};
-
-U_NAMESPACE_END
-#endif
-
-
diff --git a/icu4c/source/layout/ArabicLayoutEngine.cpp b/icu4c/source/layout/ArabicLayoutEngine.cpp
deleted file mode 100644 (file)
index 2d3ed2a..0000000
+++ /dev/null
@@ -1,221 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEScripts.h"
-#include "LEGlyphFilter.h"
-#include "LEGlyphStorage.h"
-#include "LayoutEngine.h"
-#include "OpenTypeLayoutEngine.h"
-#include "ArabicLayoutEngine.h"
-#include "ScriptAndLanguageTags.h"
-#include "CharSubstitutionFilter.h"
-
-#include "GlyphSubstitutionTables.h"
-#include "GlyphDefinitionTables.h"
-#include "GlyphPositioningTables.h"
-
-#include "GDEFMarkFilter.h"
-
-#include "ArabicShaping.h"
-#include "CanonShaping.h"
-
-U_NAMESPACE_BEGIN
-
-le_bool CharSubstitutionFilter::accept(LEGlyphID glyph) const
-{
-    return fFontInstance->canDisplay((LEUnicode) glyph);
-}
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ArabicOpenTypeLayoutEngine)
-
-ArabicOpenTypeLayoutEngine::ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, 
-                                                       le_int32 languageCode, le_int32 typoFlags,
-                                                       const LEReferenceTo<GlyphSubstitutionTableHeader> &gsubTable,
-                                                       LEErrorCode &success)
-    : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success)
-{
-    fFeatureMap = ArabicShaping::getFeatureMap(fFeatureMapCount);
-    fFeatureOrder = TRUE;
-}
-
-ArabicOpenTypeLayoutEngine::ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode,
-                                                       le_int32 languageCode,
-                                                      le_int32 typoFlags, LEErrorCode &success)
-    : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success)
-{
-    fFeatureMap = ArabicShaping::getFeatureMap(fFeatureMapCount);
-
-    // NOTE: We don't need to set fFeatureOrder to TRUE here
-    // because this constructor is only called by the constructor
-    // for UnicodeArabicOpenTypeLayoutEngine, which uses a pre-built
-    // GSUB table that has the features in the correct order.
-
-    //fFeatureOrder = TRUE;
-}
-
-ArabicOpenTypeLayoutEngine::~ArabicOpenTypeLayoutEngine()
-{
-    // nothing to do
-}
-
-// Input: characters
-// Output: characters, char indices, tags
-// Returns: output character count
-le_int32 ArabicOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count,
-                                                         le_int32 max, le_bool rightToLeft, LEUnicode *&outChars, 
-                                                         LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    outChars = LE_NEW_ARRAY(LEUnicode, count);
-
-    if (outChars == NULL) {
-        success = LE_MEMORY_ALLOCATION_ERROR;
-        return 0;
-    }
-
-    glyphStorage.allocateGlyphArray(count, rightToLeft, success);
-    glyphStorage.allocateAuxData(success);
-
-    if (LE_FAILURE(success)) {
-        LE_DELETE_ARRAY(outChars);
-        return 0;
-    }
-
-    CanonShaping::reorderMarks(&chars[offset], count, rightToLeft, outChars, glyphStorage);
-
-    // Note: This processes the *original* character array so we can get context
-    // for the first and last characters. This is OK because only the marks
-    // will have been reordered, and they don't contribute to shaping.
-    ArabicShaping::shape(chars, offset, count, max, rightToLeft, glyphStorage);
-
-    return count;
-}
-
-void ArabicOpenTypeLayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse,
-                                                      LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-
-    if (!fGPOSTable.isEmpty()) {
-        OpenTypeLayoutEngine::adjustGlyphPositions(chars, offset, count, reverse, glyphStorage, success);
-    } else if (!fGDEFTable.isEmpty()) {
-        GDEFMarkFilter filter(fGDEFTable, success);
-        adjustMarkGlyphs(glyphStorage, &filter, success);
-    } else {
-        LEReferenceTo<GlyphDefinitionTableHeader> gdefTable(CanonShaping::glyphDefinitionTable, CanonShaping::glyphDefinitionTableLen);
-        GDEFMarkFilter filter(gdefTable, success);
-
-        adjustMarkGlyphs(&chars[offset], count, reverse, glyphStorage, &filter, success);
-    }
-}
-
-UnicodeArabicOpenTypeLayoutEngine::UnicodeArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags, LEErrorCode &success)
-  : ArabicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags | LE_CHAR_FILTER_FEATURE_FLAG, success)
-{
-    fGSUBTable = (const GlyphSubstitutionTableHeader *) CanonShaping::glyphSubstitutionTable;
-    fGDEFTable = (const GlyphDefinitionTableHeader *) CanonShaping::glyphDefinitionTable;
-    /* OpenTypeLayoutEngine will allocate a substitution filter */
-}
-
-UnicodeArabicOpenTypeLayoutEngine::~UnicodeArabicOpenTypeLayoutEngine()
-{
-    /* OpenTypeLayoutEngine will cleanup the substitution filter */
-}
-
-// "glyphs", "indices" -> glyphs, indices
-le_int32 UnicodeArabicOpenTypeLayoutEngine::glyphPostProcessing(LEGlyphStorage &tempGlyphStorage, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    // FIXME: we could avoid the memory allocation and copy if we
-    // made a clone of mapCharsToGlyphs which took the fake glyphs
-    // directly.
-    le_int32 tempGlyphCount = tempGlyphStorage.getGlyphCount();
-    LEUnicode *tempChars = LE_NEW_ARRAY(LEUnicode, tempGlyphCount);
-
-    if (tempChars == NULL) {
-        success = LE_MEMORY_ALLOCATION_ERROR;
-        return 0;
-    }
-
-    for (le_int32 i = 0; i < tempGlyphCount; i += 1) {
-        tempChars[i] = (LEUnicode) LE_GET_GLYPH(tempGlyphStorage[i]);
-    }
-
-    glyphStorage.adoptCharIndicesArray(tempGlyphStorage);
-
-    ArabicOpenTypeLayoutEngine::mapCharsToGlyphs(tempChars, 0, tempGlyphCount, FALSE, TRUE, glyphStorage, success);
-
-    LE_DELETE_ARRAY(tempChars);
-
-    return tempGlyphCount;
-}
-
-void UnicodeArabicOpenTypeLayoutEngine::mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, le_bool /*mirror*/, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-
-    le_int32 i, dir = 1, out = 0;
-
-    if (reverse) {
-        out = count - 1;
-        dir = -1;
-    }
-
-    glyphStorage.allocateGlyphArray(count, reverse, success);
-
-    for (i = 0; i < count; i += 1, out += dir) {
-        glyphStorage[out] = (LEGlyphID) chars[offset + i];
-    }
-}
-
-void UnicodeArabicOpenTypeLayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse,
-                                                      LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-
-    GDEFMarkFilter filter(fGDEFTable, success);
-
-    adjustMarkGlyphs(&chars[offset], count, reverse, glyphStorage, &filter, success);
-}
-
-U_NAMESPACE_END
-
diff --git a/icu4c/source/layout/ArabicLayoutEngine.h b/icu4c/source/layout/ArabicLayoutEngine.h
deleted file mode 100644 (file)
index dc06982..0000000
+++ /dev/null
@@ -1,243 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2014 - All Rights Reserved
- *
- */
-
-#ifndef __ARABICLAYOUTENGINE_H
-#define __ARABICLAYOUTENGINE_H
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "LEGlyphFilter.h"
-#include "LayoutEngine.h"
-#include "OpenTypeLayoutEngine.h"
-
-#include "GlyphSubstitutionTables.h"
-#include "GlyphDefinitionTables.h"
-#include "GlyphPositioningTables.h"
-
-U_NAMESPACE_BEGIN
-
-/**
- * This class implements OpenType layout for Arabic fonts. It overrides
- * the characerProcessing method to assign the correct OpenType feature
- * tags for the Arabic contextual forms. It also overrides the adjustGlyphPositions
- * method to guarantee that all vowel and accent glyphs have zero advance width.
- *
- * @internal
- */
-class ArabicOpenTypeLayoutEngine : public OpenTypeLayoutEngine
-{
-public:
-    /**
-     * This is the main constructor. It constructs an instance of ArabicOpenTypeLayoutEngine for
-     * a particular font, script and language. It takes the GSUB table as a parameter since
-     * LayoutEngine::layoutEngineFactory has to read the GSUB table to know that it has an
-     * Indic OpenType font.
-     *
-     * @param fontInstance - the font
-     * @param scriptCode - the script
-     * @param langaugeCode - the language
-     * @param gsubTable - the GSUB table
-     * @param success - set to an error code if the operation fails
-     *
-     * @see LayoutEngine::layoutEngineFactory
-     * @see OpenTypeLayoutEngine
-     * @see ScriptAndLanguageTags.h for script and language codes
-     *
-     * @internal
-     */
-    ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                            le_int32 typoFlags, const LEReferenceTo<GlyphSubstitutionTableHeader> &gsubTable, LEErrorCode &success);
-
-    /**
-     * This constructor is used when the font requires a "canned" GSUB table which can't be known
-     * until after this constructor has been invoked.
-     *
-     * @param fontInstance - the font
-     * @param scriptCode - the script
-     * @param langaugeCode - the language
-     * @param success - set to an error code if the operation fails
-     *
-     * @see OpenTypeLayoutEngine
-     * @see ScriptAndLanguageTags.h for script and language codes
-     *
-     * @internal
-     */
-    ArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                              le_int32 typoFlags, LEErrorCode &success);
-
-    /**
-     * The destructor, virtual for correct polymorphic invocation.
-     *
-     * @internal
-     */
-    virtual ~ArabicOpenTypeLayoutEngine();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    static UClassID getStaticClassID();
-
-protected:
-
-    /**
-     * This method does Arabic OpenType character processing. It assigns the OpenType feature
-     * tags to the characters to generate the correct contextual forms and ligatures.
-     *
-     * Input parameters:
-     * @param chars - the input character context
-     * @param offset - the index of the first character to process
-     * @param count - the number of characters to process
-     * @param max - the number of characters in the input context
-     * @param rightToLeft - <code>TRUE</code> if the characters are in a right to left directional run
-     *
-     * Output parameters:
-     * @param outChars - the output character arrayt
-     * @param charIndices - the output character index array
-     * @param featureTags - the output feature tag array
-     * @param success - set to an error code if the operation fails
-     *
-     * @return the output character count
-     *
-     * @internal
-     */
-    virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-            LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    /**
-     * This method applies the GPOS table if it is present, otherwise it ensures that all vowel
-     * and accent glyphs have a zero advance width by calling the adjustMarkGlyphs method.
-     * If the font contains a GDEF table, that is used to identify voewls and accents. Otherwise
-     * the character codes are used.
-     *
-     * @param chars - the input character context
-     * @param offset - the offset of the first character to process
-     * @param count - the number of characters to process
-     * @param reverse - <code>TRUE</code> if the glyphs in the glyph array have been reordered
-     * @param glyphs - the input glyph array
-     * @param glyphCount - the number of glyphs
-     * @param positions - the position array, will be updated as needed
-     * @param success - output parameter set to an error code if the operation fails
-     *
-     * @internal
-     */
-    virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    // static void adjustMarkGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-};
-
-/**
- * The class implements OpenType layout for Arabic fonts which don't
- * contain a GSUB table, using a canned GSUB table based on Unicode
- * Arabic Presentation Forms. It overrides the mapCharsToGlyphs method
- * to use the Presentation Forms as logical glyph indices. It overrides the
- * glyphPostProcessing method to convert the Presentation Forms to actual
- * glyph indices.
- *
- * @see ArabicOpenTypeLayoutEngine
- *
- * @internal
- */
-class UnicodeArabicOpenTypeLayoutEngine : public ArabicOpenTypeLayoutEngine
-{
-public:
-    /**
-     * This constructs an instance of UnicodeArabicOpenTypeLayoutEngine for a specific font,
-     * script and language.
-     *
-     * @param fontInstance - the font
-     * @param scriptCode - the script
-     * @param languageCode - the language
-     * @param success - set to an error code if the operation fails
-     *
-     * @see LEFontInstance
-     * @see ScriptAndLanguageTags.h for script and language codes
-     *
-     * @internal
-     */
-    UnicodeArabicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-               le_int32 typoFlags, LEErrorCode &success);
-
-    /**
-     * The destructor, virtual for correct polymorphic invocation.
-     *
-     * @internal
-     */
-    virtual ~UnicodeArabicOpenTypeLayoutEngine();
-
-protected:
-
-    /**
-     * This method converts the Arabic Presentation Forms in the temp glyph array
-     * into actual glyph indices using ArabicOpenTypeLayoutEngine::mapCharsToGlyps.
-     *
-     * Input paramters:
-     * @param tempGlyphs - the input presentation forms
-     * @param tempCharIndices - the input character index array
-     * @param tempGlyphCount - the number of Presentation Froms
-     *
-     * Output parameters:
-     * @param glyphs - the output glyph index array
-     * @param charIndices - the output character index array
-     * @param success - set to an error code if the operation fails
-     *
-     * @return the number of glyph indices in the output glyph index array
-     *
-     * @internal
-     */
-    virtual le_int32 glyphPostProcessing(LEGlyphStorage &tempGlyphStorage, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    /**
-     * This method copies the input characters into the output glyph index array,
-     * for use by the canned GSUB table. It also generates the character index array.
-     *
-     * Input parameters:
-     * @param chars - the input character context
-     * @param offset - the offset of the first character to be mapped
-     * @param count - the number of characters to be mapped
-     * @param reverse - if <code>TRUE</code>, the output will be in reverse order
-     * @param mirror - if <code>TRUE</code>, do character mirroring
-     * @param glyphStorage - the glyph storage object. Glyph and char index arrays will be updated.
-     *
-     * @param success - set to an error code if the operation fails
-     *
-     * @internal
-     */
-    virtual void mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, le_bool mirror,
-        LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    /**
-     * This method ensures that all vowel and accent glyphs have a zero advance width by calling
-     * the adjustMarkGlyphs method. The character codes are used to identify the vowel and mark
-     * glyphs.
-     *
-     * @param chars - the input character context
-     * @param offset - the offset of the first character to process
-     * @param count - the number of characters to process
-     * @param reverse - <code>TRUE</code> if the glyphs in the glyph array have been reordered
-     * @param glyphStorage - the glyph storage object. The glyph positions will be updated as needed.
-     * @param success - output parameter set to an error code if the operation fails
-     *
-     * @internal
-     */
-    virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-};
-
-U_NAMESPACE_END
-#endif
-
diff --git a/icu4c/source/layout/ArabicShaping.cpp b/icu4c/source/layout/ArabicShaping.cpp
deleted file mode 100644 (file)
index 62e76ee..0000000
+++ /dev/null
@@ -1,214 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "ArabicShaping.h"
-#include "LEGlyphStorage.h"
-#include "ClassDefinitionTables.h"
-
-U_NAMESPACE_BEGIN
-
-// This table maps Unicode joining types to
-// ShapeTypes.
-const ArabicShaping::ShapeType ArabicShaping::shapeTypes[] =
-{
-    ArabicShaping::ST_NOSHAPE_NONE, // [U]
-    ArabicShaping::ST_NOSHAPE_DUAL, // [C]
-    ArabicShaping::ST_DUAL,         // [D]
-    ArabicShaping::ST_LEFT,         // [L]
-    ArabicShaping::ST_RIGHT,        // [R]
-    ArabicShaping::ST_TRANSPARENT   // [T]
-};
-
-/*
-    shaping array holds types for Arabic chars between 0610 and 0700
-    other values are either unshaped, or transparent if a mark or format
-    code, except for format codes 200c (zero-width non-joiner) and 200d
-    (dual-width joiner) which are both unshaped and non_joining or
-    dual-joining, respectively.
-*/
-ArabicShaping::ShapeType ArabicShaping::getShapeType(LEUnicode c)
-{
-  LEErrorCode success = LE_NO_ERROR;
-  const LEReferenceTo<ClassDefinitionTable> joiningTypes((const ClassDefinitionTable *) ArabicShaping::shapingTypeTable,
-                                                         ArabicShaping::shapingTypeTableLen);
-  le_int32 joiningType = joiningTypes->getGlyphClass(joiningTypes, c, success);
-
-  if (joiningType >= 0 && joiningType < ArabicShaping::JT_COUNT && LE_SUCCESS(success)) {
-    return ArabicShaping::shapeTypes[joiningType];
-  }
-
-  return ArabicShaping::ST_NOSHAPE_NONE;
-}
-
-#define isolFeatureTag LE_ISOL_FEATURE_TAG
-#define initFeatureTag LE_INIT_FEATURE_TAG
-#define mediFeatureTag LE_MEDI_FEATURE_TAG
-#define finaFeatureTag LE_FINA_FEATURE_TAG
-#define ligaFeatureTag LE_LIGA_FEATURE_TAG
-#define msetFeatureTag LE_MSET_FEATURE_TAG
-#define markFeatureTag LE_MARK_FEATURE_TAG
-#define ccmpFeatureTag LE_CCMP_FEATURE_TAG
-#define rligFeatureTag LE_RLIG_FEATURE_TAG
-#define caltFeatureTag LE_CALT_FEATURE_TAG
-#define dligFeatureTag LE_DLIG_FEATURE_TAG
-#define cswhFeatureTag LE_CSWH_FEATURE_TAG
-#define cursFeatureTag LE_CURS_FEATURE_TAG
-#define kernFeatureTag LE_KERN_FEATURE_TAG
-#define mkmkFeatureTag LE_MKMK_FEATURE_TAG
-
-// NOTE:
-// The isol, fina, init and medi features must be
-// defined in the above order, and have masks that
-// are all in the same nibble.
-#define isolFeatureMask 0x80000000UL
-#define finaFeatureMask 0x40000000UL
-#define initFeatureMask 0x20000000UL
-#define mediFeatureMask 0x10000000UL
-#define ccmpFeatureMask 0x08000000UL
-#define rligFeatureMask 0x04000000UL
-#define caltFeatureMask 0x02000000UL
-#define ligaFeatureMask 0x01000000UL
-#define dligFeatureMask 0x00800000UL
-#define cswhFeatureMask 0x00400000UL
-#define msetFeatureMask 0x00200000UL
-#define cursFeatureMask 0x00100000UL
-#define kernFeatureMask 0x00080000UL
-#define markFeatureMask 0x00040000UL
-#define mkmkFeatureMask 0x00020000UL
-
-#define NO_FEATURES   0
-#define ISOL_FEATURES (isolFeatureMask | ligaFeatureMask | msetFeatureMask | markFeatureMask | ccmpFeatureMask | rligFeatureMask | caltFeatureMask | dligFeatureMask | cswhFeatureMask | cursFeatureMask | kernFeatureMask | mkmkFeatureMask)
-
-#define SHAPE_MASK 0xF0000000UL
-
-static const FeatureMap featureMap[] = {
-    {ccmpFeatureTag, ccmpFeatureMask},
-    {isolFeatureTag, isolFeatureMask},
-    {finaFeatureTag, finaFeatureMask},
-    {mediFeatureTag, mediFeatureMask},
-    {initFeatureTag, initFeatureMask},
-    {rligFeatureTag, rligFeatureMask},
-    {caltFeatureTag, caltFeatureMask},
-    {ligaFeatureTag, ligaFeatureMask},
-    {dligFeatureTag, dligFeatureMask},
-    {cswhFeatureTag, cswhFeatureMask},
-    {msetFeatureTag, msetFeatureMask},
-    {cursFeatureTag, cursFeatureMask},
-    {kernFeatureTag, kernFeatureMask},
-    {markFeatureTag, markFeatureMask},
-    {mkmkFeatureTag, mkmkFeatureMask}
-};
-
-const FeatureMap *ArabicShaping::getFeatureMap(le_int32 &count)
-{
-    count = LE_ARRAY_SIZE(featureMap);
-
-    return featureMap;
-}
-
-void ArabicShaping::adjustTags(le_int32 outIndex, le_int32 shapeOffset, LEGlyphStorage &glyphStorage)
-{
-    LEErrorCode success = LE_NO_ERROR;
-    FeatureMask featureMask = (FeatureMask) glyphStorage.getAuxData(outIndex, success);
-    FeatureMask shape = featureMask & SHAPE_MASK;
-
-    shape >>= shapeOffset;
-
-    glyphStorage.setAuxData(outIndex, ((featureMask & ~SHAPE_MASK) | shape), success);
-}
-
-void ArabicShaping::shape(const LEUnicode *chars, le_int32 offset, le_int32 charCount, le_int32 charMax,
-                          le_bool rightToLeft, LEGlyphStorage &glyphStorage)
-{
-    // iterate in logical order, store tags in visible order
-    //
-    // the effective right char is the most recently encountered
-    // non-transparent char
-    //
-    // four boolean states:
-    //   the effective right char shapes
-    //   the effective right char causes left shaping
-    //   the current char shapes
-    //   the current char causes right shaping
-    //
-    // if both cause shaping, then
-    //   shaper.shape(errout, 2) (isolate to initial, or final to medial)
-    //   shaper.shape(out, 1) (isolate to final)
-
-    ShapeType rightType = ST_NOSHAPE_NONE, leftType = ST_NOSHAPE_NONE;
-    LEErrorCode success = LE_NO_ERROR;
-    le_int32 i;
-
-    for (i = offset - 1; i >= 0; i -= 1) {
-        rightType = getShapeType(chars[i]);
-
-        if (rightType != ST_TRANSPARENT) {
-            break;
-        }
-    }
-
-    for (i = offset + charCount; i < charMax; i += 1) {
-        leftType = getShapeType(chars[i]);
-
-        if (leftType != ST_TRANSPARENT) {
-            break;
-        }
-    }
-
-    // erout is effective right logical index
-    le_int32 erout = -1;
-    le_bool rightShapes = FALSE;
-    le_bool rightCauses = (rightType & MASK_SHAPE_LEFT) != 0;
-    le_int32 in, e, out = 0, dir = 1;
-
-    if (rightToLeft) {
-        out = charCount - 1;
-        erout = charCount;
-        dir = -1;
-    }
-
-    for (in = offset, e = offset + charCount; in < e; in += 1, out += dir) {
-        LEUnicode c = chars[in];
-        ShapeType t = getShapeType(c);
-
-        if (t == ST_NOSHAPE_NONE) {
-            glyphStorage.setAuxData(out, NO_FEATURES, success);
-        } else {
-            glyphStorage.setAuxData(out, ISOL_FEATURES, success);
-        }
-
-        if ((t & MASK_TRANSPARENT) != 0) {
-            continue;
-        }
-
-        le_bool curShapes = (t & MASK_NOSHAPE) == 0;
-        le_bool curCauses = (t & MASK_SHAPE_RIGHT) != 0;
-
-        if (rightCauses && curCauses) {
-            if (rightShapes) {
-                adjustTags(erout, 2, glyphStorage);
-            }
-
-            if (curShapes) {
-                adjustTags(out, 1, glyphStorage);
-            }
-        }
-
-        rightShapes = curShapes;
-        rightCauses = (t & MASK_SHAPE_LEFT) != 0;
-        erout = out;
-    }
-
-    if (rightShapes && rightCauses && (leftType & MASK_SHAPE_RIGHT) != 0) {
-        adjustTags(erout, 2, glyphStorage);
-    }
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/ArabicShaping.h b/icu4c/source/layout/ArabicShaping.h
deleted file mode 100644 (file)
index 24246ff..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __ARABICSHAPING_H
-#define __ARABICSHAPING_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class ArabicShaping /* not : public UObject because all methods are static */ {
-public:
-    // Joining types
-    enum JoiningTypes
-    {
-        JT_NON_JOINING   = 0,
-        JT_JOIN_CAUSING  = 1,
-        JT_DUAL_JOINING  = 2,
-        JT_LEFT_JOINING  = 3,
-        JT_RIGHT_JOINING = 4,
-        JT_TRANSPARENT   = 5,
-        JT_COUNT         = 6
-    };
-
-    // shaping bit masks
-    enum ShapingBitMasks
-    {
-        MASK_SHAPE_RIGHT    = 1, // if this bit set, shapes to right
-        MASK_SHAPE_LEFT     = 2, // if this bit set, shapes to left
-        MASK_TRANSPARENT    = 4, // if this bit set, is transparent (ignore other bits)
-        MASK_NOSHAPE        = 8  // if this bit set, don't shape this char, i.e. tatweel
-    };
-
-    // shaping values
-    enum ShapeTypeValues
-    {
-        ST_NONE         = 0,
-        ST_RIGHT        = MASK_SHAPE_RIGHT,
-        ST_LEFT         = MASK_SHAPE_LEFT,
-        ST_DUAL         = MASK_SHAPE_RIGHT | MASK_SHAPE_LEFT,
-        ST_TRANSPARENT  = MASK_TRANSPARENT,
-        ST_NOSHAPE_DUAL = MASK_NOSHAPE | ST_DUAL,
-        ST_NOSHAPE_NONE = MASK_NOSHAPE
-    };
-
-    typedef le_int32 ShapeType;
-
-    static void shape(const LEUnicode *chars, le_int32 offset, le_int32 charCount, le_int32 charMax,
-                      le_bool rightToLeft, LEGlyphStorage &glyphStorage);
-
-    static const FeatureMap *getFeatureMap(le_int32 &count);
-
-private:
-    // forbid instantiation
-    ArabicShaping();
-
-    static ShapeType getShapeType(LEUnicode c);
-
-    static const le_uint8 shapingTypeTable[];
-    static const size_t   shapingTypeTableLen;
-
-    static const ShapeType shapeTypes[];
-
-    static void adjustTags(le_int32 outIndex, le_int32 shapeOffset, LEGlyphStorage &glyphStorage);
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/AttachmentPosnSubtables.h b/icu4c/source/layout/AttachmentPosnSubtables.h
deleted file mode 100644 (file)
index 83864ca..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __ATTACHMENTPOSITIONINGSUBTABLES_H
-#define __ATTACHMENTPOSITIONINGSUBTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "GlyphPositioningTables.h"
-#include "ValueRecords.h"
-#include "GlyphIterator.h"
-
-U_NAMESPACE_BEGIN
-
-struct AttachmentPositioningSubtable : GlyphPositioningSubtable
-{
-    Offset    baseCoverageTableOffset;
-    le_uint16 classCount;
-    Offset    markArrayOffset;
-    Offset    baseArrayOffset;
-
-    inline le_int32  getBaseCoverage(const LETableReference &base, LEGlyphID baseGlyphId, LEErrorCode &success) const;
-
-    le_uint32 process(GlyphIterator *glyphIterator) const;
-};
-
-inline le_int32 AttachmentPositioningSubtable::getBaseCoverage(const LETableReference &base, LEGlyphID baseGlyphID, LEErrorCode &success) const
-{
-  return getGlyphCoverage(base, baseCoverageTableOffset, baseGlyphID, success);
-}
-
-U_NAMESPACE_END
-#endif
-
diff --git a/icu4c/source/layout/CanonData.cpp b/icu4c/source/layout/CanonData.cpp
deleted file mode 100644 (file)
index 728b87e..0000000
+++ /dev/null
@@ -1,3626 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013. All Rights Reserved.
- *
- * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS
- * YOU REALLY KNOW WHAT YOU'RE DOING.
- *
- * Generated on: 03/12/2008 03:14:34 PM HST
- */
-
-#include "LETypes.h"
-#include "CanonShaping.h"
-
-U_NAMESPACE_BEGIN
-
-const le_uint8 CanonShaping::glyphSubstitutionTable[] = {
-    0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x01, 0x34, 0x02, 0x46, 0x00, 0x10, 0x61, 0x72, 0x61, 0x62,
-    0x00, 0x62, 0x62, 0x61, 0x6C, 0x69, 0x00, 0x76, 0x62, 0x65, 0x6E, 0x67, 0x00, 0x82, 0x63, 0x79,
-    0x72, 0x6C, 0x00, 0x8E, 0x64, 0x65, 0x76, 0x61, 0x00, 0x9A, 0x67, 0x72, 0x65, 0x6B, 0x00, 0xA6,
-    0x68, 0x69, 0x72, 0x61, 0x00, 0xB2, 0x6B, 0x61, 0x6E, 0x61, 0x00, 0xBE, 0x6B, 0x6E, 0x64, 0x61,
-    0x00, 0xCA, 0x6C, 0x61, 0x74, 0x6E, 0x00, 0xD6, 0x6D, 0x6C, 0x79, 0x6D, 0x00, 0xE2, 0x6D, 0x79,
-    0x6D, 0x72, 0x00, 0xEE, 0x6F, 0x72, 0x79, 0x61, 0x00, 0xFA, 0x73, 0x69, 0x6E, 0x68, 0x01, 0x06,
-    0x74, 0x61, 0x6D, 0x6C, 0x01, 0x12, 0x74, 0x65, 0x6C, 0x75, 0x01, 0x1E, 0x00, 0x04, 0x00, 0x00,
-    0x00, 0x00, 0xFF, 0xFF, 0x00, 0x05, 0x00, 0x00, 0x00, 0x11, 0x00, 0x13, 0x00, 0x10, 0x00, 0x12,
-    0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x0F, 0x00, 0x04, 0x00, 0x00,
-    0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
-    0x00, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x03,
-    0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00,
-    0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x05, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
-    0x00, 0x01, 0x00, 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x06,
-    0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00,
-    0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x09, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
-    0x00, 0x01, 0x00, 0x0A, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x0B,
-    0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x0C, 0x00, 0x04, 0x00, 0x00,
-    0x00, 0x00, 0xFF, 0xFF, 0x00, 0x01, 0x00, 0x0D, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
-    0x00, 0x01, 0x00, 0x0E, 0x00, 0x14, 0x63, 0x63, 0x6D, 0x70, 0x00, 0x7A, 0x63, 0x63, 0x6D, 0x70,
-    0x00, 0x82, 0x63, 0x63, 0x6D, 0x70, 0x00, 0x8A, 0x63, 0x63, 0x6D, 0x70, 0x00, 0x92, 0x63, 0x63,
-    0x6D, 0x70, 0x00, 0x9A, 0x63, 0x63, 0x6D, 0x70, 0x00, 0xA2, 0x63, 0x63, 0x6D, 0x70, 0x00, 0xAA,
-    0x63, 0x63, 0x6D, 0x70, 0x00, 0xB2, 0x63, 0x63, 0x6D, 0x70, 0x00, 0xBA, 0x63, 0x63, 0x6D, 0x70,
-    0x00, 0xC2, 0x63, 0x63, 0x6D, 0x70, 0x00, 0xCA, 0x63, 0x63, 0x6D, 0x70, 0x00, 0xD2, 0x63, 0x63,
-    0x6D, 0x70, 0x00, 0xDA, 0x63, 0x63, 0x6D, 0x70, 0x00, 0xE2, 0x63, 0x63, 0x6D, 0x70, 0x00, 0xEA,
-    0x63, 0x63, 0x6D, 0x70, 0x00, 0xF2, 0x66, 0x69, 0x6E, 0x61, 0x00, 0xFA, 0x69, 0x6E, 0x69, 0x74,
-    0x01, 0x00, 0x6C, 0x69, 0x67, 0x61, 0x01, 0x06, 0x6D, 0x65, 0x64, 0x69, 0x01, 0x0C, 0x00, 0x00,
-    0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, 0x00, 0x07, 0x00, 0x00,
-    0x00, 0x02, 0x00, 0x08, 0x00, 0x09, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x0B, 0x00, 0x00,
-    0x00, 0x02, 0x00, 0x0C, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0E, 0x00, 0x0F, 0x00, 0x00,
-    0x00, 0x02, 0x00, 0x10, 0x00, 0x11, 0x00, 0x00, 0x00, 0x02, 0x00, 0x12, 0x00, 0x13, 0x00, 0x00,
-    0x00, 0x02, 0x00, 0x14, 0x00, 0x15, 0x00, 0x00, 0x00, 0x02, 0x00, 0x16, 0x00, 0x17, 0x00, 0x00,
-    0x00, 0x02, 0x00, 0x18, 0x00, 0x19, 0x00, 0x00, 0x00, 0x02, 0x00, 0x1A, 0x00, 0x1B, 0x00, 0x00,
-    0x00, 0x02, 0x00, 0x1C, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x02, 0x00, 0x1E, 0x00, 0x1F, 0x00, 0x00,
-    0x00, 0x02, 0x00, 0x20, 0x00, 0x21, 0x00, 0x00, 0x00, 0x02, 0x00, 0x22, 0x00, 0x23, 0x00, 0x00,
-    0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x05,
-    0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x24, 0x00, 0x4A, 0x00, 0xC0, 0x01, 0x22, 0x01, 0xEC,
-    0x02, 0xB6, 0x03, 0xF0, 0x14, 0xFE, 0x15, 0x26, 0x15, 0x4C, 0x17, 0xFE, 0x1A, 0x74, 0x1A, 0xB0,
-    0x1A, 0xE0, 0x4E, 0xDA, 0x8B, 0xBC, 0x8D, 0x2A, 0x8E, 0x4A, 0x8E, 0xA0, 0x8E, 0xFC, 0x90, 0xA2,
-    0x91, 0xEA, 0xB1, 0xA2, 0xD5, 0x1E, 0xD5, 0x54, 0xD5, 0x84, 0xD5, 0xA4, 0xD5, 0xC0, 0xD5, 0xF0,
-    0xD6, 0x20, 0xD6, 0x68, 0xD6, 0xBA, 0xD6, 0xFE, 0xD7, 0x38, 0xD7, 0x58, 0xD7, 0x74, 0xD8, 0x20,
-    0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x5E, 0x00, 0x06, 0x00, 0x12,
-    0x00, 0x2C, 0x00, 0x36, 0x00, 0x40, 0x00, 0x4A, 0x00, 0x54, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E,
-    0x00, 0x14, 0x06, 0x22, 0x00, 0x02, 0x06, 0x53, 0x06, 0x23, 0x00, 0x02, 0x06, 0x54, 0x06, 0x25,
-    0x00, 0x02, 0x06, 0x55, 0x00, 0x01, 0x00, 0x04, 0x06, 0x24, 0x00, 0x02, 0x06, 0x54, 0x00, 0x01,
-    0x00, 0x04, 0x06, 0x26, 0x00, 0x02, 0x06, 0x54, 0x00, 0x01, 0x00, 0x04, 0x06, 0xC2, 0x00, 0x02,
-    0x06, 0x54, 0x00, 0x01, 0x00, 0x04, 0x06, 0xD3, 0x00, 0x02, 0x06, 0x54, 0x00, 0x01, 0x00, 0x04,
-    0x06, 0xC0, 0x00, 0x02, 0x06, 0x54, 0x00, 0x01, 0x00, 0x06, 0x06, 0x27, 0x06, 0x48, 0x06, 0x4A,
-    0x06, 0xC1, 0x06, 0xD2, 0x06, 0xD5, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
-    0x00, 0x46, 0x00, 0x08, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34,
-    0x00, 0x3A, 0x00, 0x40, 0x00, 0x02, 0x06, 0x27, 0x06, 0x53, 0x00, 0x02, 0x06, 0x27, 0x06, 0x54,
-    0x00, 0x02, 0x06, 0x48, 0x06, 0x54, 0x00, 0x02, 0x06, 0x27, 0x06, 0x55, 0x00, 0x02, 0x06, 0x4A,
-    0x06, 0x54, 0x00, 0x02, 0x06, 0xD5, 0x06, 0x54, 0x00, 0x02, 0x06, 0xC1, 0x06, 0x54, 0x00, 0x02,
-    0x06, 0xD2, 0x06, 0x54, 0x00, 0x01, 0x00, 0x08, 0x06, 0x22, 0x06, 0x23, 0x06, 0x24, 0x06, 0x25,
-    0x06, 0x26, 0x06, 0xC0, 0x06, 0xC2, 0x06, 0xD3, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08,
-    0x00, 0x02, 0x00, 0x62, 0x00, 0x2E, 0xFE, 0x8B, 0xFE, 0x91, 0xFE, 0x97, 0xFE, 0x9B, 0xFE, 0x9F,
-    0xFE, 0xA3, 0xFE, 0xA7, 0xFE, 0xB3, 0xFE, 0xB7, 0xFE, 0xBB, 0xFE, 0xBF, 0xFE, 0xC3, 0xFE, 0xC7,
-    0xFE, 0xCB, 0xFE, 0xCF, 0xFE, 0xD3, 0xFE, 0xD7, 0xFE, 0xDB, 0xFE, 0xDF, 0xFE, 0xE3, 0xFE, 0xE7,
-    0xFE, 0xEB, 0xFB, 0xE8, 0xFE, 0xF3, 0xFB, 0x68, 0xFB, 0x60, 0xFB, 0x54, 0xFB, 0x58, 0xFB, 0x64,
-    0xFB, 0x5C, 0xFB, 0x78, 0xFB, 0x74, 0xFB, 0x7C, 0xFB, 0x80, 0xFB, 0x6C, 0xFB, 0x70, 0xFB, 0x90,
-    0xFB, 0xD5, 0xFB, 0x94, 0xFB, 0x9C, 0xFB, 0x98, 0xFB, 0xA2, 0xFB, 0xAC, 0xFB, 0xA8, 0xFB, 0xFE,
-    0xFB, 0xE6, 0x00, 0x01, 0x00, 0x2E, 0x06, 0x26, 0x06, 0x28, 0x06, 0x2A, 0x06, 0x2B, 0x06, 0x2C,
-    0x06, 0x2D, 0x06, 0x2E, 0x06, 0x33, 0x06, 0x34, 0x06, 0x35, 0x06, 0x36, 0x06, 0x37, 0x06, 0x38,
-    0x06, 0x39, 0x06, 0x3A, 0x06, 0x41, 0x06, 0x42, 0x06, 0x43, 0x06, 0x44, 0x06, 0x45, 0x06, 0x46,
-    0x06, 0x47, 0x06, 0x49, 0x06, 0x4A, 0x06, 0x79, 0x06, 0x7A, 0x06, 0x7B, 0x06, 0x7E, 0x06, 0x7F,
-    0x06, 0x80, 0x06, 0x83, 0x06, 0x84, 0x06, 0x86, 0x06, 0x87, 0x06, 0xA4, 0x06, 0xA6, 0x06, 0xA9,
-    0x06, 0xAD, 0x06, 0xAF, 0x06, 0xB1, 0x06, 0xB3, 0x06, 0xBB, 0x06, 0xBE, 0x06, 0xC1, 0x06, 0xCC,
-    0x06, 0xD0, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x02, 0x00, 0x62, 0x00, 0x2E,
-    0xFE, 0x8C, 0xFE, 0x92, 0xFE, 0x98, 0xFE, 0x9C, 0xFE, 0xA0, 0xFE, 0xA4, 0xFE, 0xA8, 0xFE, 0xB4,
-    0xFE, 0xB8, 0xFE, 0xBC, 0xFE, 0xC0, 0xFE, 0xC4, 0xFE, 0xC8, 0xFE, 0xCC, 0xFE, 0xD0, 0xFE, 0xD4,
-    0xFE, 0xD8, 0xFE, 0xDC, 0xFE, 0xE0, 0xFE, 0xE4, 0xFE, 0xE8, 0xFE, 0xEC, 0xFB, 0xE9, 0xFE, 0xF4,
-    0xFB, 0x69, 0xFB, 0x61, 0xFB, 0x55, 0xFB, 0x59, 0xFB, 0x65, 0xFB, 0x5D, 0xFB, 0x79, 0xFB, 0x75,
-    0xFB, 0x7D, 0xFB, 0x81, 0xFB, 0x6D, 0xFB, 0x71, 0xFB, 0x91, 0xFB, 0xD6, 0xFB, 0x95, 0xFB, 0x9D,
-    0xFB, 0x99, 0xFB, 0xA3, 0xFB, 0xAD, 0xFB, 0xA9, 0xFB, 0xFF, 0xFB, 0xE7, 0x00, 0x01, 0x00, 0x2E,
-    0x06, 0x26, 0x06, 0x28, 0x06, 0x2A, 0x06, 0x2B, 0x06, 0x2C, 0x06, 0x2D, 0x06, 0x2E, 0x06, 0x33,
-    0x06, 0x34, 0x06, 0x35, 0x06, 0x36, 0x06, 0x37, 0x06, 0x38, 0x06, 0x39, 0x06, 0x3A, 0x06, 0x41,
-    0x06, 0x42, 0x06, 0x43, 0x06, 0x44, 0x06, 0x45, 0x06, 0x46, 0x06, 0x47, 0x06, 0x49, 0x06, 0x4A,
-    0x06, 0x79, 0x06, 0x7A, 0x06, 0x7B, 0x06, 0x7E, 0x06, 0x7F, 0x06, 0x80, 0x06, 0x83, 0x06, 0x84,
-    0x06, 0x86, 0x06, 0x87, 0x06, 0xA4, 0x06, 0xA6, 0x06, 0xA9, 0x06, 0xAD, 0x06, 0xAF, 0x06, 0xB1,
-    0x06, 0xB3, 0x06, 0xBB, 0x06, 0xBE, 0x06, 0xC1, 0x06, 0xCC, 0x06, 0xD0, 0x00, 0x01, 0x00, 0x00,
-    0x00, 0x01, 0x00, 0x08, 0x00, 0x02, 0x00, 0x9A, 0x00, 0x4A, 0xFE, 0x82, 0xFE, 0x84, 0xFE, 0x86,
-    0xFE, 0x88, 0xFE, 0x8A, 0xFE, 0x8E, 0xFE, 0x90, 0xFE, 0x94, 0xFE, 0x96, 0xFE, 0x9A, 0xFE, 0x9E,
-    0xFE, 0xA2, 0xFE, 0xA6, 0xFE, 0xAA, 0xFE, 0xAC, 0xFE, 0xAE, 0xFE, 0xB0, 0xFE, 0xB2, 0xFE, 0xB6,
-    0xFE, 0xBA, 0xFE, 0xBE, 0xFE, 0xC2, 0xFE, 0xC6, 0xFE, 0xCA, 0xFE, 0xCE, 0xFE, 0xD2, 0xFE, 0xD6,
-    0xFE, 0xDA, 0xFE, 0xDE, 0xFE, 0xE2, 0xFE, 0xE6, 0xFE, 0xEA, 0xFE, 0xEE, 0xFE, 0xF0, 0xFE, 0xF2,
-    0xFB, 0x51, 0xFB, 0x67, 0xFB, 0x5F, 0xFB, 0x53, 0xFB, 0x57, 0xFB, 0x63, 0xFB, 0x5B, 0xFB, 0x77,
-    0xFB, 0x73, 0xFB, 0x7B, 0xFB, 0x7F, 0xFB, 0x89, 0xFB, 0x85, 0xFB, 0x83, 0xFB, 0x87, 0xFB, 0x8D,
-    0xFB, 0x8B, 0xFB, 0x6B, 0xFB, 0x6F, 0xFB, 0x8F, 0xFB, 0xD4, 0xFB, 0x93, 0xFB, 0x9B, 0xFB, 0x97,
-    0xFB, 0x9F, 0xFB, 0xA1, 0xFB, 0xAB, 0xFB, 0xA5, 0xFB, 0xA7, 0xFB, 0xE1, 0xFB, 0xDA, 0xFB, 0xD8,
-    0xFB, 0xDC, 0xFB, 0xE3, 0xFB, 0xDF, 0xFB, 0xFD, 0xFB, 0xE5, 0xFB, 0xAF, 0xFB, 0xB1, 0x00, 0x01,
-    0x00, 0x4A, 0x06, 0x22, 0x06, 0x23, 0x06, 0x24, 0x06, 0x25, 0x06, 0x26, 0x06, 0x27, 0x06, 0x28,
-    0x06, 0x29, 0x06, 0x2A, 0x06, 0x2B, 0x06, 0x2C, 0x06, 0x2D, 0x06, 0x2E, 0x06, 0x2F, 0x06, 0x30,
-    0x06, 0x31, 0x06, 0x32, 0x06, 0x33, 0x06, 0x34, 0x06, 0x35, 0x06, 0x36, 0x06, 0x37, 0x06, 0x38,
-    0x06, 0x39, 0x06, 0x3A, 0x06, 0x41, 0x06, 0x42, 0x06, 0x43, 0x06, 0x44, 0x06, 0x45, 0x06, 0x46,
-    0x06, 0x47, 0x06, 0x48, 0x06, 0x49, 0x06, 0x4A, 0x06, 0x71, 0x06, 0x79, 0x06, 0x7A, 0x06, 0x7B,
-    0x06, 0x7E, 0x06, 0x7F, 0x06, 0x80, 0x06, 0x83, 0x06, 0x84, 0x06, 0x86, 0x06, 0x87, 0x06, 0x88,
-    0x06, 0x8C, 0x06, 0x8D, 0x06, 0x8E, 0x06, 0x91, 0x06, 0x98, 0x06, 0xA4, 0x06, 0xA6, 0x06, 0xA9,
-    0x06, 0xAD, 0x06, 0xAF, 0x06, 0xB1, 0x06, 0xB3, 0x06, 0xBA, 0x06, 0xBB, 0x06, 0xBE, 0x06, 0xC0,
-    0x06, 0xC1, 0x06, 0xC5, 0x06, 0xC6, 0x06, 0xC7, 0x06, 0xC8, 0x06, 0xC9, 0x06, 0xCB, 0x06, 0xCC,
-    0x06, 0xD0, 0x06, 0xD2, 0x06, 0xD3, 0x00, 0x04, 0x00, 0x08, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
-    0x10, 0x98, 0x00, 0x35, 0x00, 0x70, 0x00, 0x7A, 0x01, 0x0C, 0x01, 0x86, 0x01, 0xA8, 0x01, 0xB2,
-    0x02, 0x0C, 0x02, 0x62, 0x03, 0x02, 0x03, 0x8A, 0x03, 0xB4, 0x03, 0xF6, 0x04, 0x46, 0x04, 0x8A,
-    0x04, 0xBC, 0x04, 0xEC, 0x05, 0x26, 0x05, 0x38, 0x05, 0x42, 0x05, 0x64, 0x05, 0xF8, 0x06, 0x6C,
-    0x06, 0xEC, 0x07, 0x80, 0x08, 0x1E, 0x08, 0x56, 0x08, 0xBA, 0x08, 0xF2, 0x09, 0x38, 0x09, 0x66,
-    0x09, 0x78, 0x09, 0x82, 0x09, 0xD4, 0x0A, 0x0E, 0x0A, 0x40, 0x0A, 0x70, 0x0A, 0xCC, 0x0A, 0xF2,
-    0x0B, 0x38, 0x0B, 0x68, 0x0B, 0xDC, 0x0C, 0x2A, 0x0C, 0xD6, 0x0D, 0x72, 0x0E, 0x16, 0x0E, 0x50,
-    0x0E, 0xC8, 0x0F, 0x5A, 0x0F, 0xA8, 0x0F, 0xB6, 0x0F, 0xC0, 0x0F, 0xCA, 0x10, 0x2E, 0x00, 0x01,
-    0x00, 0x04, 0xFB, 0xDD, 0x00, 0x02, 0x06, 0x74, 0x00, 0x12, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x32,
-    0x00, 0x38, 0x00, 0x3E, 0x00, 0x44, 0x00, 0x4A, 0x00, 0x50, 0x00, 0x56, 0x00, 0x5C, 0x00, 0x62,
-    0x00, 0x68, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x7A, 0x00, 0x80, 0x00, 0x86, 0x00, 0x8C, 0xFB, 0xEC,
-    0x00, 0x02, 0x00, 0x01, 0xFB, 0xF0, 0x00, 0x02, 0xFB, 0xD8, 0xFB, 0xF2, 0x00, 0x02, 0xFB, 0xDA,
-    0xFB, 0xF4, 0x00, 0x02, 0xFB, 0xDC, 0xFB, 0xF6, 0x00, 0x02, 0xFB, 0xE5, 0xFB, 0xF8, 0x00, 0x02,
-    0xFB, 0xE7, 0xFB, 0xEA, 0x00, 0x02, 0xFE, 0x8E, 0xFC, 0x00, 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0x97,
-    0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x01, 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0x98, 0x00, 0x02, 0xFE, 0xA4,
-    0xFC, 0x99, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x02, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0x9A, 0x00, 0x02,
-    0xFE, 0xE4, 0xFC, 0x9B, 0x00, 0x02, 0xFE, 0xEC, 0xFB, 0xEE, 0x00, 0x02, 0xFE, 0xEE, 0xFB, 0xF9,
-    0x00, 0x02, 0xFE, 0xF0, 0xFB, 0xFB, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0F, 0x00, 0x20, 0x00, 0x26,
-    0x00, 0x2C, 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x44, 0x00, 0x4A, 0x00, 0x50, 0x00, 0x56,
-    0x00, 0x5C, 0x00, 0x62, 0x00, 0x68, 0x00, 0x6E, 0x00, 0x74, 0xFB, 0xED, 0x00, 0x02, 0x00, 0x01,
-    0xFB, 0xF1, 0x00, 0x02, 0xFB, 0xD8, 0xFB, 0xF3, 0x00, 0x02, 0xFB, 0xDA, 0xFB, 0xF5, 0x00, 0x02,
-    0xFB, 0xDC, 0xFB, 0xF7, 0x00, 0x02, 0xFB, 0xE5, 0xFB, 0xEB, 0x00, 0x02, 0xFE, 0x8E, 0xFC, 0x64,
-    0x00, 0x02, 0xFE, 0xAE, 0xFC, 0x65, 0x00, 0x02, 0xFE, 0xB0, 0xFC, 0x66, 0x00, 0x02, 0xFE, 0xE2,
-    0xFC, 0xDF, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x67, 0x00, 0x02, 0xFE, 0xE6, 0xFC, 0xE0, 0x00, 0x02,
-    0xFE, 0xEC, 0xFB, 0xEF, 0x00, 0x02, 0xFE, 0xEE, 0xFB, 0xFA, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x69,
-    0x00, 0x02, 0xFE, 0xF2, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x18, 0xFD, 0x3D, 0x00, 0x02,
-    0x06, 0x4B, 0xFD, 0xF3, 0x00, 0x04, 0xFE, 0xDB, 0xFE, 0x92, 0xFE, 0xAE, 0xFD, 0xF2, 0x00, 0x04,
-    0xFE, 0xDF, 0xFE, 0xE0, 0xFE, 0xEA, 0x00, 0x01, 0x00, 0x04, 0xFD, 0x3C, 0x00, 0x02, 0x06, 0x4B,
-    0x00, 0x0B, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C,
-    0x00, 0x42, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54, 0xFC, 0x05, 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0x9C,
-    0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x06, 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0x9D, 0x00, 0x02, 0xFE, 0xA4,
-    0xFC, 0x07, 0x00, 0x02, 0xFE, 0xA6, 0xFC, 0x9E, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x08, 0x00, 0x02,
-    0xFE, 0xE2, 0xFC, 0x9F, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xA0, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x09,
-    0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x0A, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0A, 0x00, 0x16, 0x00, 0x1E,
-    0x00, 0x26, 0x00, 0x2C, 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x44, 0x00, 0x4A, 0x00, 0x50,
-    0xFD, 0xC2, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2, 0xFD, 0x9E, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xF2,
-    0xFC, 0x6A, 0x00, 0x02, 0xFE, 0xAE, 0xFC, 0x6B, 0x00, 0x02, 0xFE, 0xB0, 0xFC, 0x6C, 0x00, 0x02,
-    0xFE, 0xE2, 0xFC, 0xE1, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x6D, 0x00, 0x02, 0xFE, 0xE6, 0xFC, 0xE2,
-    0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x6E, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x6F, 0x00, 0x02, 0xFE, 0xF2,
-    0x00, 0x12, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x34, 0x00, 0x3A, 0x00, 0x40, 0x00, 0x48, 0x00, 0x50,
-    0x00, 0x56, 0x00, 0x5C, 0x00, 0x64, 0x00, 0x6A, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88,
-    0x00, 0x8E, 0x00, 0x94, 0x00, 0x9A, 0xFC, 0x0B, 0x00, 0x02, 0xFE, 0x9E, 0xFD, 0x50, 0x00, 0x03,
-    0xFE, 0xA0, 0xFE, 0xE4, 0xFC, 0xA1, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x0C, 0x00, 0x02, 0xFE, 0xA2,
-    0xFD, 0x52, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xA0, 0xFD, 0x53, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xE4,
-    0xFC, 0xA2, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x0D, 0x00, 0x02, 0xFE, 0xA6, 0xFD, 0x54, 0x00, 0x03,
-    0xFE, 0xA8, 0xFE, 0xE4, 0xFC, 0xA3, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x0E, 0x00, 0x02, 0xFE, 0xE2,
-    0xFD, 0x55, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA0, 0xFD, 0x56, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA4,
-    0xFD, 0x57, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA8, 0xFC, 0xA4, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xA5,
-    0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x0F, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x10, 0x00, 0x02, 0xFE, 0xF2,
-    0x00, 0x0F, 0x00, 0x20, 0x00, 0x28, 0x00, 0x30, 0x00, 0x38, 0x00, 0x40, 0x00, 0x48, 0x00, 0x4E,
-    0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x70, 0x00, 0x76, 0x00, 0x7C, 0x00, 0x82,
-    0xFD, 0xA0, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF0, 0xFD, 0x9F, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF2,
-    0xFD, 0x51, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0x9E, 0xFD, 0xA2, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xF0,
-    0xFD, 0xA1, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xF2, 0xFC, 0x70, 0x00, 0x02, 0xFE, 0xAE, 0xFC, 0x71,
-    0x00, 0x02, 0xFE, 0xB0, 0xFC, 0x72, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0xA4, 0x00, 0x03, 0xFE, 0xE4,
-    0xFE, 0xF0, 0xFD, 0xA3, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFC, 0xE3, 0x00, 0x02, 0xFE, 0xE4,
-    0xFC, 0x73, 0x00, 0x02, 0xFE, 0xE6, 0xFC, 0xE4, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x74, 0x00, 0x02,
-    0xFE, 0xF0, 0xFC, 0x75, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18,
-    0x00, 0x1E, 0x00, 0x24, 0xFC, 0x11, 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0x12, 0x00, 0x02, 0xFE, 0xE2,
-    0xFC, 0xA6, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x13, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x14, 0x00, 0x02,
-    0xFE, 0xF2, 0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30,
-    0x00, 0x36, 0x00, 0x3C, 0xFC, 0x76, 0x00, 0x02, 0xFE, 0xAE, 0xFC, 0x77, 0x00, 0x02, 0xFE, 0xB0,
-    0xFC, 0x78, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0xE5, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x79, 0x00, 0x02,
-    0xFE, 0xE6, 0xFC, 0xE6, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x7A, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x7B,
-    0x00, 0x02, 0xFE, 0xF2, 0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x30, 0x00, 0x36,
-    0x00, 0x3E, 0x00, 0x44, 0x00, 0x4A, 0xFC, 0x15, 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0xA7, 0x00, 0x02,
-    0xFE, 0xA4, 0xFD, 0xFB, 0x00, 0x08, 0xFE, 0xDE, 0x00, 0x20, 0xFE, 0x9F, 0xFE, 0xE0, 0xFE, 0x8E,
-    0xFE, 0xDF, 0xFE, 0xEA, 0xFC, 0x16, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x59, 0x00, 0x03, 0xFE, 0xE4,
-    0xFE, 0xA4, 0xFC, 0xA8, 0x00, 0x02, 0xFE, 0xE4, 0xFD, 0x01, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x02,
-    0x00, 0x02, 0xFE, 0xF2, 0x00, 0x07, 0x00, 0x10, 0x00, 0x18, 0x00, 0x20, 0x00, 0x28, 0x00, 0x30,
-    0x00, 0x38, 0x00, 0x3E, 0xFD, 0xA6, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF0, 0xFD, 0xBE, 0x00, 0x03,
-    0xFE, 0xA4, 0xFE, 0xF2, 0xFD, 0x58, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA2, 0xFD, 0xA7, 0x00, 0x03,
-    0xFE, 0xE4, 0xFE, 0xF0, 0xFD, 0xA5, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFD, 0x1D, 0x00, 0x02,
-    0xFE, 0xF0, 0xFD, 0x1E, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x14, 0x00, 0x1A,
-    0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0xFC, 0x17, 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0xA9, 0x00, 0x02,
-    0xFE, 0xA0, 0xFC, 0x18, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0xAA, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xFF,
-    0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x00, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x14,
-    0x00, 0x1C, 0x00, 0x24, 0x00, 0x2A, 0xFD, 0xBF, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF2, 0xFD, 0x5B,
-    0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF0, 0xFD, 0x5A, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFD, 0x1B,
-    0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x1C, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16,
-    0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0xFC, 0x19, 0x00, 0x02, 0xFE, 0x9E,
-    0xFC, 0xAB, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x1A, 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0x1B, 0x00, 0x02,
-    0xFE, 0xE2, 0xFC, 0xAC, 0x00, 0x02, 0xFE, 0xE4, 0xFD, 0x03, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x04,
-    0x00, 0x02, 0xFE, 0xF2, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0xFD, 0x1F, 0x00, 0x02, 0xFE, 0xF0,
-    0xFD, 0x20, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x01, 0x00, 0x04, 0xFC, 0x5B, 0x00, 0x02, 0x06, 0x70,
-    0x00, 0x03, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x18, 0xFC, 0x5C, 0x00, 0x02, 0x06, 0x70, 0xFD, 0xFC,
-    0x00, 0x04, 0xFB, 0xFE, 0xFE, 0x8E, 0xFE, 0xDD, 0xFD, 0xF6, 0x00, 0x04, 0xFE, 0xB3, 0xFE, 0xEE,
-    0xFE, 0xDD, 0x00, 0x11, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46,
-    0x00, 0x4C, 0x00, 0x52, 0x00, 0x58, 0x00, 0x5E, 0x00, 0x64, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x7C,
-    0x00, 0x82, 0x00, 0x88, 0x00, 0x8E, 0xFC, 0x1C, 0x00, 0x02, 0xFE, 0x9E, 0xFD, 0x5D, 0x00, 0x03,
-    0xFE, 0xA0, 0xFE, 0xA4, 0xFC, 0xAD, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x1D, 0x00, 0x02, 0xFE, 0xA2,
-    0xFD, 0x5C, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xA0, 0xFC, 0xAE, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x1E,
-    0x00, 0x02, 0xFE, 0xA6, 0xFC, 0xAF, 0x00, 0x02, 0xFE, 0xA8, 0xFD, 0x0E, 0x00, 0x02, 0xFE, 0xAE,
-    0xFC, 0x1F, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x61, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA0, 0xFD, 0x60,
-    0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA4, 0xFD, 0x63, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE4, 0xFC, 0xB0,
-    0x00, 0x02, 0xFE, 0xE4, 0xFD, 0x31, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0xFB, 0x00, 0x02, 0xFE, 0xF0,
-    0xFC, 0xFC, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0D, 0x00, 0x1C, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30,
-    0x00, 0x38, 0x00, 0x40, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x68,
-    0x00, 0x6E, 0xFD, 0x5E, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF0, 0xFD, 0x34, 0x00, 0x02, 0xFE, 0xA0,
-    0xFD, 0x35, 0x00, 0x02, 0xFE, 0xA4, 0xFD, 0xA8, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xF0, 0xFD, 0xC6,
-    0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xF2, 0xFD, 0x36, 0x00, 0x02, 0xFE, 0xA8, 0xFD, 0x2A, 0x00, 0x02,
-    0xFE, 0xAE, 0xFD, 0x5F, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA2, 0xFD, 0x62, 0x00, 0x03, 0xFE, 0xE4,
-    0xFE, 0xE2, 0xFC, 0xE7, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xE8, 0x00, 0x02, 0xFE, 0xEC, 0xFD, 0x17,
-    0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x18, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0F, 0x00, 0x20, 0x00, 0x26,
-    0x00, 0x2C, 0x00, 0x32, 0x00, 0x3A, 0x00, 0x40, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x52, 0x00, 0x58,
-    0x00, 0x60, 0x00, 0x68, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x7A, 0xFD, 0x09, 0x00, 0x02, 0xFE, 0x9E,
-    0xFD, 0x2D, 0x00, 0x02, 0xFE, 0xA0, 0xFD, 0x0A, 0x00, 0x02, 0xFE, 0xA2, 0xFD, 0x68, 0x00, 0x03,
-    0xFE, 0xA4, 0xFE, 0xE4, 0xFD, 0x2E, 0x00, 0x02, 0xFE, 0xA4, 0xFD, 0x0B, 0x00, 0x02, 0xFE, 0xA6,
-    0xFD, 0x2F, 0x00, 0x02, 0xFE, 0xA8, 0xFD, 0x0D, 0x00, 0x02, 0xFE, 0xAE, 0xFD, 0x0C, 0x00, 0x02,
-    0xFE, 0xE2, 0xFD, 0x6B, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA8, 0xFD, 0x6D, 0x00, 0x03, 0xFE, 0xE4,
-    0xFE, 0xE4, 0xFD, 0x30, 0x00, 0x02, 0xFE, 0xE4, 0xFD, 0x32, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0xFD,
-    0x00, 0x02, 0xFE, 0xF0, 0xFC, 0xFE, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x11, 0x00, 0x24, 0x00, 0x2A,
-    0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x60,
-    0x00, 0x66, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x7C, 0x00, 0x82, 0x00, 0x88, 0x00, 0x8E, 0xFD, 0x25,
-    0x00, 0x02, 0xFE, 0x9E, 0xFD, 0x69, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF2, 0xFD, 0x37, 0x00, 0x02,
-    0xFE, 0xA0, 0xFD, 0x26, 0x00, 0x02, 0xFE, 0xA2, 0xFD, 0x67, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xE2,
-    0xFD, 0xAA, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2, 0xFD, 0x38, 0x00, 0x02, 0xFE, 0xA4, 0xFD, 0x27,
-    0x00, 0x02, 0xFE, 0xA6, 0xFD, 0x39, 0x00, 0x02, 0xFE, 0xA8, 0xFD, 0x29, 0x00, 0x02, 0xFE, 0xAE,
-    0xFD, 0x28, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x6A, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA6, 0xFD, 0x6C,
-    0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE2, 0xFC, 0xE9, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xEA, 0x00, 0x02,
-    0xFE, 0xEC, 0xFD, 0x19, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x1A, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0E,
-    0x00, 0x1E, 0x00, 0x24, 0x00, 0x2C, 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x50,
-    0x00, 0x76, 0x00, 0x7E, 0x00, 0x84, 0x00, 0x8C, 0x00, 0x92, 0x00, 0x98, 0xFC, 0x20, 0x00, 0x02,
-    0xFE, 0xA2, 0xFD, 0x65, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xA4, 0xFC, 0xB1, 0x00, 0x02, 0xFE, 0xA4,
-    0xFC, 0xB2, 0x00, 0x02, 0xFE, 0xA8, 0xFD, 0x0F, 0x00, 0x02, 0xFE, 0xAE, 0xFD, 0xF0, 0x00, 0x03,
-    0xFE, 0xE0, 0xFB, 0xAF, 0xFD, 0xF5, 0x00, 0x04, 0xFE, 0xE0, 0xFE, 0xCC, 0xFE, 0xE2, 0xFD, 0xFA,
-    0x00, 0x12, 0xFE, 0xE0, 0xFE, 0xF0, 0x00, 0x20, 0xFE, 0x8D, 0xFE, 0xDF, 0xFE, 0xE0, 0xFE, 0xEA,
-    0x00, 0x20, 0xFE, 0xCB, 0xFE, 0xE0, 0xFE, 0xF4, 0xFE, 0xEA, 0x00, 0x20, 0xFE, 0xED, 0xFE, 0xB3,
-    0xFE, 0xE0, 0xFE, 0xE2, 0xFD, 0xF9, 0x00, 0x03, 0xFE, 0xE0, 0xFE, 0xF0, 0xFC, 0x21, 0x00, 0x02,
-    0xFE, 0xE2, 0xFD, 0xC5, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE4, 0xFC, 0xB3, 0x00, 0x02, 0xFE, 0xE4,
-    0xFD, 0x05, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x06, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x06, 0x00, 0x0E,
-    0x00, 0x16, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2C, 0x00, 0x32, 0xFD, 0x64, 0x00, 0x03, 0xFE, 0xA4,
-    0xFE, 0xA2, 0xFD, 0xA9, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2, 0xFD, 0x2B, 0x00, 0x02, 0xFE, 0xAE,
-    0xFD, 0x66, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE2, 0xFD, 0x21, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x22,
-    0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0C, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x32,
-    0x00, 0x38, 0x00, 0x40, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x52, 0x00, 0x58, 0x00, 0x5E, 0xFC, 0x22,
-    0x00, 0x02, 0xFE, 0x9E, 0xFC, 0xB4, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x23, 0x00, 0x02, 0xFE, 0xA2,
-    0xFC, 0xB5, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x24, 0x00, 0x02, 0xFE, 0xA6, 0xFD, 0x70, 0x00, 0x03,
-    0xFE, 0xA8, 0xFE, 0xE4, 0xFC, 0xB6, 0x00, 0x02, 0xFE, 0xA8, 0xFD, 0x10, 0x00, 0x02, 0xFE, 0xAE,
-    0xFC, 0x25, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0xB7, 0x00, 0x02, 0xFE, 0xE4, 0xFD, 0x07, 0x00, 0x02,
-    0xFE, 0xF0, 0xFD, 0x08, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x16, 0x00, 0x1E,
-    0x00, 0x26, 0x00, 0x2C, 0x00, 0x32, 0xFD, 0x6E, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF0, 0xFD, 0xAB,
-    0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2, 0xFD, 0x6F, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xE2, 0xFD, 0x2C,
-    0x00, 0x02, 0xFE, 0xAE, 0xFD, 0x23, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x24, 0x00, 0x02, 0xFE, 0xF2,
-    0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2C, 0x00, 0x34, 0x00, 0x3A,
-    0x00, 0x40, 0xFC, 0x26, 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0xB8, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x27,
-    0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x72, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA4, 0xFD, 0x73, 0x00, 0x03,
-    0xFE, 0xE4, 0xFE, 0xE4, 0xFD, 0x33, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xF5, 0x00, 0x02, 0xFE, 0xF0,
-    0xFC, 0xF6, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x14, 0x00, 0x1C, 0x00, 0x22,
-    0x00, 0x28, 0xFD, 0x71, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA2, 0xFD, 0x74, 0x00, 0x03, 0xFE, 0xE4,
-    0xFE, 0xF2, 0xFD, 0x3A, 0x00, 0x02, 0xFE, 0xE4, 0xFD, 0x11, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x12,
-    0x00, 0x02, 0xFE, 0xF2, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0xFC, 0x28, 0x00, 0x02, 0xFE, 0xE2,
-    0xFC, 0xB9, 0x00, 0x02, 0xFE, 0xE4, 0x00, 0x01, 0x00, 0x04, 0xFD, 0x3B, 0x00, 0x02, 0xFE, 0xE4,
-    0x00, 0x09, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x22, 0x00, 0x28, 0x00, 0x32, 0x00, 0x38, 0x00, 0x40,
-    0x00, 0x46, 0x00, 0x4C, 0xFC, 0x29, 0x00, 0x02, 0xFE, 0x9E, 0xFD, 0xC4, 0x00, 0x03, 0xFE, 0xA0,
-    0xFE, 0xE4, 0xFC, 0xBA, 0x00, 0x02, 0xFE, 0xA0, 0xFD, 0xF7, 0x00, 0x04, 0xFE, 0xE0, 0xFE, 0xF4,
-    0xFE, 0xEA, 0xFC, 0x2A, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x77, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE4,
-    0xFC, 0xBB, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xF7, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0xF8, 0x00, 0x02,
-    0xFE, 0xF2, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x16, 0x00, 0x1E, 0x00, 0x26, 0x00, 0x2E, 0x00, 0x34,
-    0xFD, 0x75, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xE2, 0xFD, 0x76, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE2,
-    0xFD, 0x78, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF0, 0xFD, 0xB6, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2,
-    0xFD, 0x13, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x14, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x06, 0x00, 0x0E,
-    0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0xFC, 0x2B, 0x00, 0x02, 0xFE, 0x9E,
-    0xFC, 0xBC, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x2C, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0xBD, 0x00, 0x02,
-    0xFE, 0xE4, 0xFC, 0xF9, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0xFA, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x05,
-    0x00, 0x0C, 0x00, 0x14, 0x00, 0x1C, 0x00, 0x24, 0x00, 0x2A, 0xFD, 0x79, 0x00, 0x03, 0xFE, 0xE4,
-    0xFE, 0xE2, 0xFD, 0x7B, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF0, 0xFD, 0x7A, 0x00, 0x03, 0xFE, 0xE4,
-    0xFE, 0xF2, 0xFD, 0x15, 0x00, 0x02, 0xFE, 0xF0, 0xFD, 0x16, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0B,
-    0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3E, 0x00, 0x44,
-    0x00, 0x4A, 0x00, 0x50, 0x00, 0x56, 0xFC, 0x2D, 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0xBE, 0x00, 0x02,
-    0xFE, 0xA0, 0xFC, 0x2E, 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0xBF, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x2F,
-    0x00, 0x02, 0xFE, 0xA6, 0xFD, 0x7D, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xE4, 0xFC, 0xC0, 0x00, 0x02,
-    0xFE, 0xA8, 0xFC, 0x30, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0xC1, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x31,
-    0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x32, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x12,
-    0x00, 0x1A, 0x00, 0x20, 0xFD, 0x7C, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xE2, 0xFD, 0xC1, 0x00, 0x03,
-    0xFE, 0xE4, 0xFE, 0xF2, 0xFC, 0x7C, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x7D, 0x00, 0x02, 0xFE, 0xF2,
-    0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x34, 0x00, 0x3A,
-    0x00, 0x40, 0xFC, 0x33, 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0xC2, 0x00, 0x02, 0xFE, 0xA4, 0xFD, 0xF1,
-    0x00, 0x03, 0xFE, 0xE0, 0xFB, 0xAF, 0xFC, 0x34, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0xB4, 0x00, 0x03,
-    0xFE, 0xE4, 0xFE, 0xA4, 0xFC, 0xC3, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x35, 0x00, 0x02, 0xFE, 0xF0,
-    0xFC, 0x36, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x14, 0x00, 0x1C, 0x00, 0x24,
-    0x00, 0x2A, 0xFD, 0x7E, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA2, 0xFD, 0x7F, 0x00, 0x03, 0xFE, 0xE4,
-    0xFE, 0xE2, 0xFD, 0xB2, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFC, 0x7E, 0x00, 0x02, 0xFE, 0xF0,
-    0xFC, 0x7F, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0E, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30,
-    0x00, 0x36, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62,
-    0x00, 0x68, 0x00, 0x6E, 0xFC, 0x37, 0x00, 0x02, 0xFE, 0x8E, 0xFC, 0x38, 0x00, 0x02, 0xFE, 0x9E,
-    0xFC, 0xC4, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x39, 0x00, 0x02, 0xFE, 0xA2, 0xFC, 0xC5, 0x00, 0x02,
-    0xFE, 0xA4, 0xFC, 0x3A, 0x00, 0x02, 0xFE, 0xA6, 0xFC, 0xC6, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x3B,
-    0x00, 0x02, 0xFE, 0xDE, 0xFC, 0xC7, 0x00, 0x02, 0xFE, 0xE0, 0xFC, 0x3C, 0x00, 0x02, 0xFE, 0xE2,
-    0xFD, 0xC3, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE4, 0xFC, 0xC8, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x3D,
-    0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x3E, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x09, 0x00, 0x14, 0x00, 0x1A,
-    0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x34, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48, 0xFC, 0x80,
-    0x00, 0x02, 0xFE, 0x8E, 0xFC, 0x81, 0x00, 0x02, 0xFE, 0xDE, 0xFC, 0xEB, 0x00, 0x02, 0xFE, 0xE0,
-    0xFC, 0x82, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0xBB, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE2, 0xFD, 0xB7,
-    0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFC, 0xEC, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x83, 0x00, 0x02,
-    0xFE, 0xF0, 0xFC, 0x84, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x14, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36,
-    0x00, 0x3C, 0x00, 0x42, 0x00, 0x48, 0x00, 0x50, 0x00, 0x58, 0x00, 0x5E, 0x00, 0x64, 0x00, 0x6C,
-    0x00, 0x72, 0x00, 0x78, 0x00, 0x80, 0x00, 0x86, 0x00, 0x8C, 0x00, 0x94, 0x00, 0x9A, 0x00, 0xA0,
-    0x00, 0xA6, 0xFE, 0xF5, 0x00, 0x02, 0xFE, 0x82, 0xFE, 0xF7, 0x00, 0x02, 0xFE, 0x84, 0xFE, 0xF9,
-    0x00, 0x02, 0xFE, 0x88, 0xFE, 0xFB, 0x00, 0x02, 0xFE, 0x8E, 0xFC, 0x3F, 0x00, 0x02, 0xFE, 0x9E,
-    0xFD, 0x83, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xA0, 0xFD, 0xBA, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xE4,
-    0xFC, 0xC9, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x40, 0x00, 0x02, 0xFE, 0xA2, 0xFD, 0xB5, 0x00, 0x03,
-    0xFE, 0xA4, 0xFE, 0xE4, 0xFC, 0xCA, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x41, 0x00, 0x02, 0xFE, 0xA6,
-    0xFD, 0x86, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xE4, 0xFC, 0xCB, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x42,
-    0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x88, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA4, 0xFC, 0xCC, 0x00, 0x02,
-    0xFE, 0xE4, 0xFC, 0xCD, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x43, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x44,
-    0x00, 0x02, 0xFE, 0xF2, 0x00, 0x11, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C,
-    0x00, 0x44, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5C, 0x00, 0x64, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x7A,
-    0x00, 0x82, 0x00, 0x8A, 0x00, 0x90, 0x00, 0x96, 0xFE, 0xF6, 0x00, 0x02, 0xFE, 0x82, 0xFE, 0xF8,
-    0x00, 0x02, 0xFE, 0x84, 0xFE, 0xFA, 0x00, 0x02, 0xFE, 0x88, 0xFE, 0xFC, 0x00, 0x02, 0xFE, 0x8E,
-    0xFD, 0x84, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0x9E, 0xFD, 0xBC, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xE2,
-    0xFD, 0xAC, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF2, 0xFD, 0x80, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xE2,
-    0xFD, 0x82, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF0, 0xFD, 0x81, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2,
-    0xFD, 0x85, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xE2, 0xFC, 0x85, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x87,
-    0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA2, 0xFD, 0xAD, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFC, 0xED,
-    0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x86, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x87, 0x00, 0x02, 0xFE, 0xF2,
-    0x00, 0x12, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x34, 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4A, 0x00, 0x50,
-    0x00, 0x58, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x70, 0x00, 0x76, 0x00, 0x7E, 0x00, 0x86, 0x00, 0x8C,
-    0x00, 0x92, 0x00, 0x98, 0x00, 0x9E, 0xFC, 0x45, 0x00, 0x02, 0xFE, 0x9E, 0xFD, 0x8C, 0x00, 0x03,
-    0xFE, 0xA0, 0xFE, 0xA4, 0xFD, 0x92, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xA8, 0xFD, 0x8D, 0x00, 0x03,
-    0xFE, 0xA0, 0xFE, 0xE4, 0xFC, 0xCE, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x46, 0x00, 0x02, 0xFE, 0xA2,
-    0xFD, 0x89, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xA0, 0xFD, 0xF4, 0x00, 0x04, 0xFE, 0xA4, 0xFE, 0xE4,
-    0xFE, 0xAA, 0xFD, 0x8A, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xE4, 0xFC, 0xCF, 0x00, 0x02, 0xFE, 0xA4,
-    0xFC, 0x47, 0x00, 0x02, 0xFE, 0xA6, 0xFD, 0x8E, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xA0, 0xFD, 0x8F,
-    0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xE4, 0xFC, 0xD0, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x48, 0x00, 0x02,
-    0xFE, 0xE2, 0xFC, 0xD1, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x49, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x4A,
-    0x00, 0x02, 0xFE, 0xF2, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x14, 0x00, 0x1C, 0x00, 0x24, 0x00, 0x2C,
-    0x00, 0x32, 0xFC, 0x88, 0x00, 0x02, 0xFE, 0x8E, 0xFD, 0xC0, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF2,
-    0xFD, 0x8B, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2, 0xFD, 0xB9, 0x00, 0x03, 0xFE, 0xA8, 0xFE, 0xF2,
-    0xFC, 0x89, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0xB1, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0x00, 0x0E,
-    0x00, 0x1E, 0x00, 0x24, 0x00, 0x2C, 0x00, 0x34, 0x00, 0x3A, 0x00, 0x40, 0x00, 0x48, 0x00, 0x4E,
-    0x00, 0x54, 0x00, 0x5A, 0x00, 0x60, 0x00, 0x66, 0x00, 0x6C, 0x00, 0x72, 0xFC, 0x4B, 0x00, 0x02,
-    0xFE, 0x9E, 0xFD, 0xB8, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xA4, 0xFD, 0x98, 0x00, 0x03, 0xFE, 0xA0,
-    0xFE, 0xE4, 0xFC, 0xD2, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x4C, 0x00, 0x02, 0xFE, 0xA2, 0xFD, 0x95,
-    0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xE4, 0xFC, 0xD3, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x4D, 0x00, 0x02,
-    0xFE, 0xA6, 0xFC, 0xD4, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x4E, 0x00, 0x02, 0xFE, 0xE2, 0xFC, 0xD5,
-    0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xD6, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x4F, 0x00, 0x02, 0xFE, 0xF0,
-    0xFC, 0x50, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x10, 0x00, 0x22, 0x00, 0x2A, 0x00, 0x32, 0x00, 0x3A,
-    0x00, 0x42, 0x00, 0x4A, 0x00, 0x52, 0x00, 0x58, 0x00, 0x5E, 0x00, 0x64, 0x00, 0x6C, 0x00, 0x74,
-    0x00, 0x7A, 0x00, 0x80, 0x00, 0x86, 0x00, 0x8C, 0xFD, 0xBD, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xA2,
-    0xFD, 0x97, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xE2, 0xFD, 0x99, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF0,
-    0xFD, 0xC7, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF2, 0xFD, 0x96, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF0,
-    0xFD, 0xB3, 0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2, 0xFC, 0x8A, 0x00, 0x02, 0xFE, 0xAE, 0xFC, 0x8B,
-    0x00, 0x02, 0xFE, 0xB0, 0xFC, 0x8C, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x9B, 0x00, 0x03, 0xFE, 0xE4,
-    0xFE, 0xF0, 0xFD, 0x9A, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFC, 0xEE, 0x00, 0x02, 0xFE, 0xE4,
-    0xFC, 0x8D, 0x00, 0x02, 0xFE, 0xE6, 0xFC, 0xEF, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x8E, 0x00, 0x02,
-    0xFE, 0xF0, 0xFC, 0x8F, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x09, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20,
-    0x00, 0x26, 0x00, 0x2C, 0x00, 0x34, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48, 0xFC, 0xD9, 0x00, 0x02,
-    0x06, 0x70, 0xFC, 0x51, 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0xD7, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x52,
-    0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x93, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xA0, 0xFD, 0x94, 0x00, 0x03,
-    0xFE, 0xE4, 0xFE, 0xE4, 0xFC, 0xD8, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x53, 0x00, 0x02, 0xFE, 0xF0,
-    0xFC, 0x54, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x01, 0x00, 0x04, 0xFD, 0xF8, 0x00, 0x04, 0xFE, 0xB3,
-    0xFE, 0xE0, 0xFE, 0xE2, 0x00, 0x01, 0x00, 0x04, 0xFC, 0x5D, 0x00, 0x02, 0x06, 0x70, 0x00, 0x01,
-    0x00, 0x04, 0xFC, 0x90, 0x00, 0x02, 0x06, 0x70, 0x00, 0x0C, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26,
-    0x00, 0x2C, 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x44, 0x00, 0x4C, 0x00, 0x52, 0x00, 0x58,
-    0x00, 0x5E, 0xFC, 0x55, 0x00, 0x02, 0xFE, 0x9E, 0xFC, 0xDA, 0x00, 0x02, 0xFE, 0xA0, 0xFC, 0x56,
-    0x00, 0x02, 0xFE, 0xA2, 0xFC, 0xDB, 0x00, 0x02, 0xFE, 0xA4, 0xFC, 0x57, 0x00, 0x02, 0xFE, 0xA6,
-    0xFC, 0xDC, 0x00, 0x02, 0xFE, 0xA8, 0xFC, 0x58, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x9D, 0x00, 0x03,
-    0xFE, 0xE4, 0xFE, 0xE4, 0xFC, 0xDD, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0xDE, 0x00, 0x02, 0xFE, 0xEC,
-    0xFC, 0x59, 0x00, 0x02, 0xFE, 0xF0, 0xFC, 0x5A, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x0C, 0x00, 0x1A,
-    0x00, 0x22, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4C, 0x00, 0x52,
-    0x00, 0x58, 0x00, 0x5E, 0x00, 0x64, 0xFD, 0xAF, 0x00, 0x03, 0xFE, 0xA0, 0xFE, 0xF2, 0xFD, 0xAE,
-    0x00, 0x03, 0xFE, 0xA4, 0xFE, 0xF2, 0xFC, 0x91, 0x00, 0x02, 0xFE, 0xAE, 0xFC, 0x92, 0x00, 0x02,
-    0xFE, 0xB0, 0xFC, 0x93, 0x00, 0x02, 0xFE, 0xE2, 0xFD, 0x9C, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xE2,
-    0xFD, 0xB0, 0x00, 0x03, 0xFE, 0xE4, 0xFE, 0xF2, 0xFC, 0xF0, 0x00, 0x02, 0xFE, 0xE4, 0xFC, 0x94,
-    0x00, 0x02, 0xFE, 0xE6, 0xFC, 0xF1, 0x00, 0x02, 0xFE, 0xEC, 0xFC, 0x95, 0x00, 0x02, 0xFE, 0xF0,
-    0xFC, 0x96, 0x00, 0x02, 0xFE, 0xF2, 0x00, 0x01, 0x00, 0x35, 0xFB, 0xD7, 0xFE, 0x8B, 0xFE, 0x8C,
-    0xFE, 0x8D, 0xFE, 0x8E, 0xFE, 0x91, 0xFE, 0x92, 0xFE, 0x97, 0xFE, 0x98, 0xFE, 0x9B, 0xFE, 0x9C,
-    0xFE, 0x9F, 0xFE, 0xA0, 0xFE, 0xA3, 0xFE, 0xA4, 0xFE, 0xA7, 0xFE, 0xA8, 0xFE, 0xAB, 0xFE, 0xAD,
-    0xFE, 0xB3, 0xFE, 0xB4, 0xFE, 0xB7, 0xFE, 0xB8, 0xFE, 0xBB, 0xFE, 0xBC, 0xFE, 0xBF, 0xFE, 0xC0,
-    0xFE, 0xC3, 0xFE, 0xC4, 0xFE, 0xC7, 0xFE, 0xC8, 0xFE, 0xCB, 0xFE, 0xCC, 0xFE, 0xCF, 0xFE, 0xD0,
-    0xFE, 0xD3, 0xFE, 0xD4, 0xFE, 0xD7, 0xFE, 0xD8, 0xFE, 0xDB, 0xFE, 0xDC, 0xFE, 0xDF, 0xFE, 0xE0,
-    0xFE, 0xE3, 0xFE, 0xE4, 0xFE, 0xE7, 0xFE, 0xE8, 0xFE, 0xEB, 0xFE, 0xED, 0xFE, 0xEF, 0xFE, 0xF0,
-    0xFE, 0xF3, 0xFE, 0xF4, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x1A,
-    0x00, 0x01, 0x00, 0x08, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x09, 0xCB, 0x00, 0x02, 0x09, 0xBE,
-    0x09, 0xCC, 0x00, 0x02, 0x09, 0xD7, 0x00, 0x01, 0x00, 0x01, 0x09, 0xC7, 0x00, 0x02, 0x00, 0x00,
-    0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x16, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x02,
-    0x09, 0xC7, 0x09, 0xBE, 0x00, 0x02, 0x09, 0xC7, 0x09, 0xD7, 0x00, 0x01, 0x00, 0x02, 0x09, 0xCB,
-    0x09, 0xCC, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x02, 0x66, 0x00, 0x20,
-    0x00, 0x46, 0x00, 0x50, 0x00, 0x62, 0x00, 0x74, 0x00, 0x96, 0x00, 0xA8, 0x00, 0xB2, 0x00, 0xDC,
-    0x00, 0xEE, 0x00, 0xF8, 0x01, 0x1A, 0x01, 0x24, 0x01, 0x2E, 0x01, 0x38, 0x01, 0x4A, 0x01, 0x5C,
-    0x01, 0x7E, 0x01, 0x90, 0x01, 0x9A, 0x01, 0xC4, 0x01, 0xD6, 0x01, 0xE0, 0x02, 0x02, 0x02, 0x0C,
-    0x02, 0x16, 0x02, 0x20, 0x02, 0x2A, 0x02, 0x34, 0x02, 0x3E, 0x02, 0x48, 0x02, 0x52, 0x02, 0x5C,
-    0x00, 0x01, 0x00, 0x04, 0x04, 0x07, 0x00, 0x02, 0x03, 0x08, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C,
-    0x04, 0xD0, 0x00, 0x02, 0x03, 0x06, 0x04, 0xD2, 0x00, 0x02, 0x03, 0x08, 0x00, 0x02, 0x00, 0x06,
-    0x00, 0x0C, 0x04, 0x03, 0x00, 0x02, 0x03, 0x01, 0x04, 0x03, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04,
-    0x00, 0x0A, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x04, 0x00, 0x00, 0x02, 0x03, 0x00, 0x04, 0xD6,
-    0x00, 0x02, 0x03, 0x06, 0x04, 0x01, 0x00, 0x02, 0x03, 0x08, 0x04, 0x00, 0x00, 0x02, 0x03, 0x40,
-    0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x04, 0xC1, 0x00, 0x02, 0x03, 0x06, 0x04, 0xDC, 0x00, 0x02,
-    0x03, 0x08, 0x00, 0x01, 0x00, 0x04, 0x04, 0xDE, 0x00, 0x02, 0x03, 0x08, 0x00, 0x05, 0x00, 0x0C,
-    0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x04, 0x0D, 0x00, 0x02, 0x03, 0x00, 0x04, 0xE2,
-    0x00, 0x02, 0x03, 0x04, 0x04, 0x19, 0x00, 0x02, 0x03, 0x06, 0x04, 0xE4, 0x00, 0x02, 0x03, 0x08,
-    0x04, 0x0D, 0x00, 0x02, 0x03, 0x40, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x04, 0x0C, 0x00, 0x02,
-    0x03, 0x01, 0x04, 0x0C, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x04, 0xE6, 0x00, 0x02,
-    0x03, 0x08, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x04, 0xEE, 0x00, 0x02,
-    0x03, 0x04, 0x04, 0x0E, 0x00, 0x02, 0x03, 0x06, 0x04, 0xF0, 0x00, 0x02, 0x03, 0x08, 0x04, 0xF2,
-    0x00, 0x02, 0x03, 0x0B, 0x00, 0x01, 0x00, 0x04, 0x04, 0xF4, 0x00, 0x02, 0x03, 0x08, 0x00, 0x01,
-    0x00, 0x04, 0x04, 0xF8, 0x00, 0x02, 0x03, 0x08, 0x00, 0x01, 0x00, 0x04, 0x04, 0xEC, 0x00, 0x02,
-    0x03, 0x08, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x04, 0xD1, 0x00, 0x02, 0x03, 0x06, 0x04, 0xD3,
-    0x00, 0x02, 0x03, 0x08, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x04, 0x53, 0x00, 0x02, 0x03, 0x01,
-    0x04, 0x53, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C,
-    0x04, 0x50, 0x00, 0x02, 0x03, 0x00, 0x04, 0xD7, 0x00, 0x02, 0x03, 0x06, 0x04, 0x51, 0x00, 0x02,
-    0x03, 0x08, 0x04, 0x50, 0x00, 0x02, 0x03, 0x40, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x04, 0xC2,
-    0x00, 0x02, 0x03, 0x06, 0x04, 0xDD, 0x00, 0x02, 0x03, 0x08, 0x00, 0x01, 0x00, 0x04, 0x04, 0xDF,
-    0x00, 0x02, 0x03, 0x08, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24,
-    0x04, 0x5D, 0x00, 0x02, 0x03, 0x00, 0x04, 0xE3, 0x00, 0x02, 0x03, 0x04, 0x04, 0x39, 0x00, 0x02,
-    0x03, 0x06, 0x04, 0xE5, 0x00, 0x02, 0x03, 0x08, 0x04, 0x5D, 0x00, 0x02, 0x03, 0x40, 0x00, 0x02,
-    0x00, 0x06, 0x00, 0x0C, 0x04, 0x5C, 0x00, 0x02, 0x03, 0x01, 0x04, 0x5C, 0x00, 0x02, 0x03, 0x41,
-    0x00, 0x01, 0x00, 0x04, 0x04, 0xE7, 0x00, 0x02, 0x03, 0x08, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10,
-    0x00, 0x16, 0x00, 0x1C, 0x04, 0xEF, 0x00, 0x02, 0x03, 0x04, 0x04, 0x5E, 0x00, 0x02, 0x03, 0x06,
-    0x04, 0xF1, 0x00, 0x02, 0x03, 0x08, 0x04, 0xF3, 0x00, 0x02, 0x03, 0x0B, 0x00, 0x01, 0x00, 0x04,
-    0x04, 0xF5, 0x00, 0x02, 0x03, 0x08, 0x00, 0x01, 0x00, 0x04, 0x04, 0xF9, 0x00, 0x02, 0x03, 0x08,
-    0x00, 0x01, 0x00, 0x04, 0x04, 0xED, 0x00, 0x02, 0x03, 0x08, 0x00, 0x01, 0x00, 0x04, 0x04, 0x57,
-    0x00, 0x02, 0x03, 0x08, 0x00, 0x01, 0x00, 0x04, 0x04, 0x76, 0x00, 0x02, 0x03, 0x0F, 0x00, 0x01,
-    0x00, 0x04, 0x04, 0x77, 0x00, 0x02, 0x03, 0x0F, 0x00, 0x01, 0x00, 0x04, 0x04, 0xDA, 0x00, 0x02,
-    0x03, 0x08, 0x00, 0x01, 0x00, 0x04, 0x04, 0xDB, 0x00, 0x02, 0x03, 0x08, 0x00, 0x01, 0x00, 0x04,
-    0x04, 0xEA, 0x00, 0x02, 0x03, 0x08, 0x00, 0x01, 0x00, 0x04, 0x04, 0xEB, 0x00, 0x02, 0x03, 0x08,
-    0x00, 0x01, 0x00, 0x20, 0x04, 0x06, 0x04, 0x10, 0x04, 0x13, 0x04, 0x15, 0x04, 0x16, 0x04, 0x17,
-    0x04, 0x18, 0x04, 0x1A, 0x04, 0x1E, 0x04, 0x23, 0x04, 0x27, 0x04, 0x2B, 0x04, 0x2D, 0x04, 0x30,
-    0x04, 0x33, 0x04, 0x35, 0x04, 0x36, 0x04, 0x37, 0x04, 0x38, 0x04, 0x3A, 0x04, 0x3E, 0x04, 0x43,
-    0x04, 0x47, 0x04, 0x4B, 0x04, 0x4D, 0x04, 0x56, 0x04, 0x74, 0x04, 0x75, 0x04, 0xD8, 0x04, 0xD9,
-    0x04, 0xE8, 0x04, 0xE9, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0A, 0x02, 0x1C, 0x00, 0x01,
-    0x01, 0xA6, 0x00, 0x34, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x7A, 0x00, 0x80, 0x00, 0x86, 0x00, 0x8C,
-    0x00, 0x92, 0x00, 0x98, 0x00, 0x9E, 0x00, 0xA4, 0x00, 0xAA, 0x00, 0xB0, 0x00, 0xB6, 0x00, 0xBC,
-    0x00, 0xC2, 0x00, 0xC8, 0x00, 0xCE, 0x00, 0xD4, 0x00, 0xDA, 0x00, 0xE0, 0x00, 0xE6, 0x00, 0xEC,
-    0x00, 0xF2, 0x00, 0xF8, 0x00, 0xFE, 0x01, 0x04, 0x01, 0x0A, 0x01, 0x10, 0x01, 0x16, 0x01, 0x1C,
-    0x01, 0x22, 0x01, 0x28, 0x01, 0x2E, 0x01, 0x34, 0x01, 0x3A, 0x01, 0x40, 0x01, 0x46, 0x01, 0x4C,
-    0x01, 0x52, 0x01, 0x58, 0x01, 0x5E, 0x01, 0x64, 0x01, 0x6A, 0x01, 0x70, 0x01, 0x76, 0x01, 0x7C,
-    0x01, 0x82, 0x01, 0x88, 0x01, 0x8E, 0x01, 0x94, 0x01, 0x9A, 0x01, 0xA0, 0x00, 0x02, 0x04, 0x15,
-    0x03, 0x00, 0x00, 0x02, 0x04, 0x15, 0x03, 0x08, 0x00, 0x02, 0x04, 0x13, 0x03, 0x01, 0x00, 0x02,
-    0x04, 0x06, 0x03, 0x08, 0x00, 0x02, 0x04, 0x1A, 0x03, 0x01, 0x00, 0x02, 0x04, 0x18, 0x03, 0x00,
-    0x00, 0x02, 0x04, 0x23, 0x03, 0x06, 0x00, 0x02, 0x04, 0x18, 0x03, 0x06, 0x00, 0x02, 0x04, 0x38,
-    0x03, 0x06, 0x00, 0x02, 0x04, 0x35, 0x03, 0x00, 0x00, 0x02, 0x04, 0x35, 0x03, 0x08, 0x00, 0x02,
-    0x04, 0x33, 0x03, 0x01, 0x00, 0x02, 0x04, 0x56, 0x03, 0x08, 0x00, 0x02, 0x04, 0x3A, 0x03, 0x01,
-    0x00, 0x02, 0x04, 0x38, 0x03, 0x00, 0x00, 0x02, 0x04, 0x43, 0x03, 0x06, 0x00, 0x02, 0x04, 0x74,
-    0x03, 0x0F, 0x00, 0x02, 0x04, 0x75, 0x03, 0x0F, 0x00, 0x02, 0x04, 0x16, 0x03, 0x06, 0x00, 0x02,
-    0x04, 0x36, 0x03, 0x06, 0x00, 0x02, 0x04, 0x10, 0x03, 0x06, 0x00, 0x02, 0x04, 0x30, 0x03, 0x06,
-    0x00, 0x02, 0x04, 0x10, 0x03, 0x08, 0x00, 0x02, 0x04, 0x30, 0x03, 0x08, 0x00, 0x02, 0x04, 0x15,
-    0x03, 0x06, 0x00, 0x02, 0x04, 0x35, 0x03, 0x06, 0x00, 0x02, 0x04, 0xD8, 0x03, 0x08, 0x00, 0x02,
-    0x04, 0xD9, 0x03, 0x08, 0x00, 0x02, 0x04, 0x16, 0x03, 0x08, 0x00, 0x02, 0x04, 0x36, 0x03, 0x08,
-    0x00, 0x02, 0x04, 0x17, 0x03, 0x08, 0x00, 0x02, 0x04, 0x37, 0x03, 0x08, 0x00, 0x02, 0x04, 0x18,
-    0x03, 0x04, 0x00, 0x02, 0x04, 0x38, 0x03, 0x04, 0x00, 0x02, 0x04, 0x18, 0x03, 0x08, 0x00, 0x02,
-    0x04, 0x38, 0x03, 0x08, 0x00, 0x02, 0x04, 0x1E, 0x03, 0x08, 0x00, 0x02, 0x04, 0x3E, 0x03, 0x08,
-    0x00, 0x02, 0x04, 0xE8, 0x03, 0x08, 0x00, 0x02, 0x04, 0xE9, 0x03, 0x08, 0x00, 0x02, 0x04, 0x2D,
-    0x03, 0x08, 0x00, 0x02, 0x04, 0x4D, 0x03, 0x08, 0x00, 0x02, 0x04, 0x23, 0x03, 0x04, 0x00, 0x02,
-    0x04, 0x43, 0x03, 0x04, 0x00, 0x02, 0x04, 0x23, 0x03, 0x08, 0x00, 0x02, 0x04, 0x43, 0x03, 0x08,
-    0x00, 0x02, 0x04, 0x23, 0x03, 0x0B, 0x00, 0x02, 0x04, 0x43, 0x03, 0x0B, 0x00, 0x02, 0x04, 0x27,
-    0x03, 0x08, 0x00, 0x02, 0x04, 0x47, 0x03, 0x08, 0x00, 0x02, 0x04, 0x2B, 0x03, 0x08, 0x00, 0x02,
-    0x04, 0x4B, 0x03, 0x08, 0x00, 0x01, 0x00, 0x34, 0x04, 0x00, 0x04, 0x01, 0x04, 0x03, 0x04, 0x07,
-    0x04, 0x0C, 0x04, 0x0D, 0x04, 0x0E, 0x04, 0x19, 0x04, 0x39, 0x04, 0x50, 0x04, 0x51, 0x04, 0x53,
-    0x04, 0x57, 0x04, 0x5C, 0x04, 0x5D, 0x04, 0x5E, 0x04, 0x76, 0x04, 0x77, 0x04, 0xC1, 0x04, 0xC2,
-    0x04, 0xD0, 0x04, 0xD1, 0x04, 0xD2, 0x04, 0xD3, 0x04, 0xD6, 0x04, 0xD7, 0x04, 0xDA, 0x04, 0xDB,
-    0x04, 0xDC, 0x04, 0xDD, 0x04, 0xDE, 0x04, 0xDF, 0x04, 0xE2, 0x04, 0xE3, 0x04, 0xE4, 0x04, 0xE5,
-    0x04, 0xE6, 0x04, 0xE7, 0x04, 0xEA, 0x04, 0xEB, 0x04, 0xEC, 0x04, 0xED, 0x04, 0xEE, 0x04, 0xEF,
-    0x04, 0xF0, 0x04, 0xF1, 0x04, 0xF2, 0x04, 0xF3, 0x04, 0xF4, 0x04, 0xF5, 0x04, 0xF8, 0x04, 0xF9,
-    0x00, 0x01, 0x00, 0x46, 0x00, 0x08, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E,
-    0x00, 0x34, 0x00, 0x3A, 0x00, 0x40, 0x00, 0x02, 0x04, 0x15, 0x03, 0x40, 0x00, 0x02, 0x04, 0x13,
-    0x03, 0x41, 0x00, 0x02, 0x04, 0x1A, 0x03, 0x41, 0x00, 0x02, 0x04, 0x18, 0x03, 0x40, 0x00, 0x02,
-    0x04, 0x35, 0x03, 0x40, 0x00, 0x02, 0x04, 0x33, 0x03, 0x41, 0x00, 0x02, 0x04, 0x3A, 0x03, 0x41,
-    0x00, 0x02, 0x04, 0x38, 0x03, 0x40, 0x00, 0x01, 0x00, 0x08, 0x04, 0x00, 0x04, 0x03, 0x04, 0x0C,
-    0x04, 0x0D, 0x04, 0x50, 0x04, 0x53, 0x04, 0x5C, 0x04, 0x5D, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01,
-    0x00, 0x08, 0x00, 0x01, 0x00, 0x2A, 0x00, 0x03, 0x00, 0x0C, 0x00, 0x16, 0x00, 0x20, 0x00, 0x01,
-    0x00, 0x04, 0x09, 0x29, 0x00, 0x02, 0x09, 0x3C, 0x00, 0x01, 0x00, 0x04, 0x09, 0x31, 0x00, 0x02,
-    0x09, 0x3C, 0x00, 0x01, 0x00, 0x04, 0x09, 0x34, 0x00, 0x02, 0x09, 0x3C, 0x00, 0x01, 0x00, 0x03,
-    0x09, 0x28, 0x09, 0x30, 0x09, 0x33, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
-    0x00, 0x1E, 0x00, 0x03, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x02, 0x09, 0x28, 0x09, 0x3C,
-    0x00, 0x02, 0x09, 0x30, 0x09, 0x3C, 0x00, 0x02, 0x09, 0x33, 0x09, 0x3C, 0x00, 0x01, 0x00, 0x03,
-    0x09, 0x29, 0x09, 0x31, 0x09, 0x34, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
-    0x33, 0x04, 0x00, 0x75, 0x00, 0xF0, 0x01, 0x1A, 0x04, 0x5A, 0x05, 0x0C, 0x08, 0x3C, 0x09, 0x24,
-    0x09, 0xD6, 0x09, 0xE0, 0x0A, 0x54, 0x0D, 0x84, 0x0D, 0x8E, 0x0D, 0x98, 0x11, 0x44, 0x11, 0xF6,
-    0x15, 0x92, 0x16, 0xBC, 0x17, 0x6E, 0x17, 0x88, 0x18, 0xB2, 0x1C, 0x4E, 0x1C, 0x78, 0x1C, 0xA2,
-    0x1C, 0xAC, 0x1C, 0xC6, 0x1D, 0x5C, 0x1D, 0xF2, 0x1D, 0xFC, 0x1E, 0x06, 0x1E, 0x10, 0x1E, 0x1A,
-    0x1E, 0x24, 0x1E, 0x2E, 0x1E, 0xC4, 0x1F, 0x5A, 0x1F, 0x64, 0x1F, 0x6E, 0x1F, 0x78, 0x1F, 0x82,
-    0x1F, 0x8C, 0x1F, 0x96, 0x1F, 0xB8, 0x1F, 0xDA, 0x1F, 0xFC, 0x20, 0x1E, 0x20, 0xB4, 0x21, 0x4A,
-    0x21, 0x54, 0x21, 0x5E, 0x21, 0x68, 0x21, 0x72, 0x21, 0x7C, 0x21, 0x86, 0x22, 0x1C, 0x22, 0xB2,
-    0x22, 0xBC, 0x22, 0xC6, 0x22, 0xD0, 0x22, 0xDA, 0x22, 0xE4, 0x22, 0xEE, 0x23, 0x18, 0x23, 0x42,
-    0x23, 0x6C, 0x23, 0x96, 0x23, 0xB8, 0x23, 0xDA, 0x23, 0xFC, 0x24, 0x1E, 0x24, 0x48, 0x24, 0x72,
-    0x24, 0x9C, 0x25, 0x32, 0x25, 0xC8, 0x25, 0xD2, 0x25, 0xDC, 0x25, 0xE6, 0x25, 0xF0, 0x25, 0xFA,
-    0x26, 0x04, 0x26, 0x9A, 0x27, 0x30, 0x27, 0x3A, 0x27, 0x44, 0x27, 0x4E, 0x27, 0x58, 0x27, 0x62,
-    0x27, 0x6C, 0x27, 0x76, 0x27, 0x80, 0x27, 0x8A, 0x27, 0x94, 0x27, 0x9E, 0x27, 0xA8, 0x27, 0xD2,
-    0x27, 0xFC, 0x28, 0x26, 0x28, 0x50, 0x28, 0x7A, 0x28, 0xA4, 0x28, 0xCE, 0x28, 0xF8, 0x29, 0x22,
-    0x29, 0x4C, 0x29, 0x76, 0x29, 0xA0, 0x2A, 0x78, 0x2A, 0x82, 0x2B, 0x32, 0x2C, 0x5C, 0x2C, 0x86,
-    0x2D, 0x5E, 0x2D, 0x68, 0x2E, 0x18, 0x2E, 0xF0, 0x2E, 0xFA, 0x2F, 0xAA, 0x2F, 0xD4, 0x00, 0x05,
-    0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0xED, 0x00, 0x02, 0x03, 0x00,
-    0x03, 0x85, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xED, 0x00, 0x02, 0x03, 0x40, 0x03, 0x85, 0x00, 0x02,
-    0x03, 0x41, 0x1F, 0xC1, 0x00, 0x02, 0x03, 0x42, 0x00, 0x4C, 0x00, 0x9A, 0x00, 0xA0, 0x00, 0xA6,
-    0x00, 0xAC, 0x00, 0xB2, 0x00, 0xBC, 0x00, 0xC4, 0x00, 0xCE, 0x00, 0xD6, 0x00, 0xE0, 0x00, 0xE8,
-    0x00, 0xF2, 0x00, 0xFA, 0x01, 0x04, 0x01, 0x0C, 0x01, 0x16, 0x01, 0x20, 0x01, 0x2A, 0x01, 0x34,
-    0x01, 0x3E, 0x01, 0x46, 0x01, 0x4C, 0x01, 0x56, 0x01, 0x5E, 0x01, 0x68, 0x01, 0x70, 0x01, 0x7A,
-    0x01, 0x82, 0x01, 0x8C, 0x01, 0x94, 0x01, 0x9E, 0x01, 0xA6, 0x01, 0xB0, 0x01, 0xBA, 0x01, 0xC4,
-    0x01, 0xCE, 0x01, 0xD8, 0x01, 0xE0, 0x01, 0xE6, 0x01, 0xEC, 0x01, 0xF2, 0x01, 0xFC, 0x02, 0x04,
-    0x02, 0x0E, 0x02, 0x16, 0x02, 0x20, 0x02, 0x28, 0x02, 0x32, 0x02, 0x3A, 0x02, 0x44, 0x02, 0x4C,
-    0x02, 0x56, 0x02, 0x60, 0x02, 0x6A, 0x02, 0x74, 0x02, 0x7E, 0x02, 0x86, 0x02, 0x8C, 0x02, 0x96,
-    0x02, 0xA0, 0x02, 0xAA, 0x02, 0xB4, 0x02, 0xBE, 0x02, 0xC6, 0x02, 0xD0, 0x02, 0xDA, 0x02, 0xE4,
-    0x02, 0xEE, 0x02, 0xF8, 0x03, 0x00, 0x03, 0x0A, 0x03, 0x14, 0x03, 0x1E, 0x03, 0x28, 0x03, 0x32,
-    0x03, 0x3A, 0x1F, 0xBA, 0x00, 0x02, 0x03, 0x00, 0x03, 0x86, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xB9,
-    0x00, 0x02, 0x03, 0x04, 0x1F, 0xB8, 0x00, 0x02, 0x03, 0x06, 0x1F, 0x8A, 0x00, 0x04, 0x03, 0x13,
-    0x03, 0x00, 0x03, 0x45, 0x1F, 0x0A, 0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0x8C, 0x00, 0x04,
-    0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x0C, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x8A,
-    0x00, 0x04, 0x03, 0x13, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x0A, 0x00, 0x03, 0x03, 0x13, 0x03, 0x40,
-    0x1F, 0x8C, 0x00, 0x04, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x0C, 0x00, 0x03, 0x03, 0x13,
-    0x03, 0x41, 0x1F, 0x8E, 0x00, 0x04, 0x03, 0x13, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x0E, 0x00, 0x03,
-    0x03, 0x13, 0x03, 0x42, 0x1F, 0x8A, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00, 0x1F, 0x8C,
-    0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x8A, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45,
-    0x03, 0x40, 0x1F, 0x8C, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x8E, 0x00, 0x04,
-    0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x1F, 0x88, 0x00, 0x03, 0x03, 0x13, 0x03, 0x45, 0x1F, 0x08,
-    0x00, 0x02, 0x03, 0x13, 0x1F, 0x8B, 0x00, 0x04, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x0B,
-    0x00, 0x03, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x8D, 0x00, 0x04, 0x03, 0x14, 0x03, 0x01, 0x03, 0x45,
-    0x1F, 0x0D, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x8B, 0x00, 0x04, 0x03, 0x14, 0x03, 0x40,
-    0x03, 0x45, 0x1F, 0x0B, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x8D, 0x00, 0x04, 0x03, 0x14,
-    0x03, 0x41, 0x03, 0x45, 0x1F, 0x0D, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x8F, 0x00, 0x04,
-    0x03, 0x14, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x0F, 0x00, 0x03, 0x03, 0x14, 0x03, 0x42, 0x1F, 0x8B,
-    0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x1F, 0x8D, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45,
-    0x03, 0x01, 0x1F, 0x8B, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x1F, 0x8D, 0x00, 0x04,
-    0x03, 0x14, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x8F, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x42,
-    0x1F, 0x89, 0x00, 0x03, 0x03, 0x14, 0x03, 0x45, 0x1F, 0x09, 0x00, 0x02, 0x03, 0x14, 0x1F, 0xBA,
-    0x00, 0x02, 0x03, 0x40, 0x03, 0x86, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x8A, 0x00, 0x04, 0x03, 0x43,
-    0x03, 0x00, 0x03, 0x45, 0x1F, 0x0A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x8C, 0x00, 0x04,
-    0x03, 0x43, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x0C, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x8A,
-    0x00, 0x04, 0x03, 0x43, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x0A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40,
-    0x1F, 0x8C, 0x00, 0x04, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x0C, 0x00, 0x03, 0x03, 0x43,
-    0x03, 0x41, 0x1F, 0x8E, 0x00, 0x04, 0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x0E, 0x00, 0x03,
-    0x03, 0x43, 0x03, 0x42, 0x1F, 0x8A, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00, 0x1F, 0x8C,
-    0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x8A, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45,
-    0x03, 0x40, 0x1F, 0x8C, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x8E, 0x00, 0x04,
-    0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x1F, 0x88, 0x00, 0x03, 0x03, 0x43, 0x03, 0x45, 0x1F, 0x08,
-    0x00, 0x02, 0x03, 0x43, 0x1F, 0x8A, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x1F, 0x8C,
-    0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x8A, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13,
-    0x03, 0x40, 0x1F, 0x8C, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x8E, 0x00, 0x04,
-    0x03, 0x45, 0x03, 0x13, 0x03, 0x42, 0x1F, 0x88, 0x00, 0x03, 0x03, 0x45, 0x03, 0x13, 0x1F, 0x8B,
-    0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x8D, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14,
-    0x03, 0x01, 0x1F, 0x8B, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x8D, 0x00, 0x04,
-    0x03, 0x45, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x8F, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42,
-    0x1F, 0x89, 0x00, 0x03, 0x03, 0x45, 0x03, 0x14, 0x1F, 0x8A, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43,
-    0x03, 0x00, 0x1F, 0x8C, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x8A, 0x00, 0x04,
-    0x03, 0x45, 0x03, 0x43, 0x03, 0x40, 0x1F, 0x8C, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41,
-    0x1F, 0x8E, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x1F, 0x88, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x43, 0x1F, 0xBC, 0x00, 0x02, 0x03, 0x45, 0x00, 0x13, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34,
-    0x00, 0x3C, 0x00, 0x44, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x72,
-    0x00, 0x7A, 0x00, 0x80, 0x00, 0x86, 0x00, 0x8C, 0x00, 0x94, 0x00, 0x9C, 0x00, 0xA4, 0x00, 0xAC,
-    0x1F, 0xC8, 0x00, 0x02, 0x03, 0x00, 0x03, 0x88, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x1A, 0x00, 0x03,
-    0x03, 0x13, 0x03, 0x00, 0x1F, 0x1C, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x1A, 0x00, 0x03,
-    0x03, 0x13, 0x03, 0x40, 0x1F, 0x1C, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x18, 0x00, 0x02,
-    0x03, 0x13, 0x1F, 0x1B, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x1D, 0x00, 0x03, 0x03, 0x14,
-    0x03, 0x01, 0x1F, 0x1B, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x1D, 0x00, 0x03, 0x03, 0x14,
-    0x03, 0x41, 0x1F, 0x19, 0x00, 0x02, 0x03, 0x14, 0x1F, 0xC8, 0x00, 0x02, 0x03, 0x40, 0x03, 0x88,
-    0x00, 0x02, 0x03, 0x41, 0x1F, 0x1A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x1C, 0x00, 0x03,
-    0x03, 0x43, 0x03, 0x01, 0x1F, 0x1A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0x1C, 0x00, 0x03,
-    0x03, 0x43, 0x03, 0x41, 0x1F, 0x18, 0x00, 0x02, 0x03, 0x43, 0x00, 0x4A, 0x00, 0x96, 0x00, 0x9C,
-    0x00, 0xA2, 0x00, 0xAC, 0x00, 0xB4, 0x00, 0xBE, 0x00, 0xC6, 0x00, 0xD0, 0x00, 0xD8, 0x00, 0xE2,
-    0x00, 0xEA, 0x00, 0xF4, 0x00, 0xFC, 0x01, 0x06, 0x01, 0x10, 0x01, 0x1A, 0x01, 0x24, 0x01, 0x2E,
-    0x01, 0x36, 0x01, 0x3C, 0x01, 0x46, 0x01, 0x4E, 0x01, 0x58, 0x01, 0x60, 0x01, 0x6A, 0x01, 0x72,
-    0x01, 0x7C, 0x01, 0x84, 0x01, 0x8E, 0x01, 0x96, 0x01, 0xA0, 0x01, 0xAA, 0x01, 0xB4, 0x01, 0xBE,
-    0x01, 0xC8, 0x01, 0xD0, 0x01, 0xD6, 0x01, 0xDC, 0x01, 0xE2, 0x01, 0xEC, 0x01, 0xF4, 0x01, 0xFE,
-    0x02, 0x06, 0x02, 0x10, 0x02, 0x18, 0x02, 0x22, 0x02, 0x2A, 0x02, 0x34, 0x02, 0x3C, 0x02, 0x46,
-    0x02, 0x50, 0x02, 0x5A, 0x02, 0x64, 0x02, 0x6E, 0x02, 0x76, 0x02, 0x7C, 0x02, 0x86, 0x02, 0x90,
-    0x02, 0x9A, 0x02, 0xA4, 0x02, 0xAE, 0x02, 0xB6, 0x02, 0xC0, 0x02, 0xCA, 0x02, 0xD4, 0x02, 0xDE,
-    0x02, 0xE8, 0x02, 0xF0, 0x02, 0xFA, 0x03, 0x04, 0x03, 0x0E, 0x03, 0x18, 0x03, 0x22, 0x03, 0x2A,
-    0x1F, 0xCA, 0x00, 0x02, 0x03, 0x00, 0x03, 0x89, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x9A, 0x00, 0x04,
-    0x03, 0x13, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x2A, 0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0x9C,
-    0x00, 0x04, 0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x2C, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01,
-    0x1F, 0x9A, 0x00, 0x04, 0x03, 0x13, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x2A, 0x00, 0x03, 0x03, 0x13,
-    0x03, 0x40, 0x1F, 0x9C, 0x00, 0x04, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x2C, 0x00, 0x03,
-    0x03, 0x13, 0x03, 0x41, 0x1F, 0x9E, 0x00, 0x04, 0x03, 0x13, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x2E,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x42, 0x1F, 0x9A, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00,
-    0x1F, 0x9C, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x9A, 0x00, 0x04, 0x03, 0x13,
-    0x03, 0x45, 0x03, 0x40, 0x1F, 0x9C, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x9E,
-    0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x1F, 0x98, 0x00, 0x03, 0x03, 0x13, 0x03, 0x45,
-    0x1F, 0x28, 0x00, 0x02, 0x03, 0x13, 0x1F, 0x9B, 0x00, 0x04, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45,
-    0x1F, 0x2B, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x9D, 0x00, 0x04, 0x03, 0x14, 0x03, 0x01,
-    0x03, 0x45, 0x1F, 0x2D, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x9B, 0x00, 0x04, 0x03, 0x14,
-    0x03, 0x40, 0x03, 0x45, 0x1F, 0x2B, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x9D, 0x00, 0x04,
-    0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x2D, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x9F,
-    0x00, 0x04, 0x03, 0x14, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x2F, 0x00, 0x03, 0x03, 0x14, 0x03, 0x42,
-    0x1F, 0x9B, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x1F, 0x9D, 0x00, 0x04, 0x03, 0x14,
-    0x03, 0x45, 0x03, 0x01, 0x1F, 0x9B, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x1F, 0x9D,
-    0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x9F, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45,
-    0x03, 0x42, 0x1F, 0x99, 0x00, 0x03, 0x03, 0x14, 0x03, 0x45, 0x1F, 0x29, 0x00, 0x02, 0x03, 0x14,
-    0x1F, 0xCA, 0x00, 0x02, 0x03, 0x40, 0x03, 0x89, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x9A, 0x00, 0x04,
-    0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x2A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x9C,
-    0x00, 0x04, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x2C, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01,
-    0x1F, 0x9A, 0x00, 0x04, 0x03, 0x43, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x2A, 0x00, 0x03, 0x03, 0x43,
-    0x03, 0x40, 0x1F, 0x9C, 0x00, 0x04, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x2C, 0x00, 0x03,
-    0x03, 0x43, 0x03, 0x41, 0x1F, 0x9E, 0x00, 0x04, 0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x2E,
-    0x00, 0x03, 0x03, 0x43, 0x03, 0x42, 0x1F, 0x9A, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00,
-    0x1F, 0x9C, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x9A, 0x00, 0x04, 0x03, 0x43,
-    0x03, 0x45, 0x03, 0x40, 0x1F, 0x9C, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x9E,
-    0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x1F, 0x98, 0x00, 0x03, 0x03, 0x43, 0x03, 0x45,
-    0x1F, 0x28, 0x00, 0x02, 0x03, 0x43, 0x1F, 0x9A, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00,
-    0x1F, 0x9C, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x9A, 0x00, 0x04, 0x03, 0x45,
-    0x03, 0x13, 0x03, 0x40, 0x1F, 0x9C, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x9E,
-    0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x42, 0x1F, 0x98, 0x00, 0x03, 0x03, 0x45, 0x03, 0x13,
-    0x1F, 0x9B, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x9D, 0x00, 0x04, 0x03, 0x45,
-    0x03, 0x14, 0x03, 0x01, 0x1F, 0x9B, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x9D,
-    0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x9F, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14,
-    0x03, 0x42, 0x1F, 0x99, 0x00, 0x03, 0x03, 0x45, 0x03, 0x14, 0x1F, 0x9A, 0x00, 0x04, 0x03, 0x45,
-    0x03, 0x43, 0x03, 0x00, 0x1F, 0x9C, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x9A,
-    0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40, 0x1F, 0x9C, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43,
-    0x03, 0x41, 0x1F, 0x9E, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x1F, 0x98, 0x00, 0x03,
-    0x03, 0x45, 0x03, 0x43, 0x1F, 0xCC, 0x00, 0x02, 0x03, 0x45, 0x00, 0x19, 0x00, 0x34, 0x00, 0x3A,
-    0x00, 0x40, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x52, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x72,
-    0x00, 0x7A, 0x00, 0x80, 0x00, 0x88, 0x00, 0x90, 0x00, 0x98, 0x00, 0xA0, 0x00, 0xA8, 0x00, 0xAE,
-    0x00, 0xB4, 0x00, 0xBA, 0x00, 0xC2, 0x00, 0xCA, 0x00, 0xD2, 0x00, 0xDA, 0x00, 0xE2, 0x1F, 0xDA,
-    0x00, 0x02, 0x03, 0x00, 0x03, 0x8A, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xD9, 0x00, 0x02, 0x03, 0x04,
-    0x1F, 0xD8, 0x00, 0x02, 0x03, 0x06, 0x03, 0xAA, 0x00, 0x02, 0x03, 0x08, 0x1F, 0x3A, 0x00, 0x03,
-    0x03, 0x13, 0x03, 0x00, 0x1F, 0x3C, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x3A, 0x00, 0x03,
-    0x03, 0x13, 0x03, 0x40, 0x1F, 0x3C, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x3E, 0x00, 0x03,
-    0x03, 0x13, 0x03, 0x42, 0x1F, 0x38, 0x00, 0x02, 0x03, 0x13, 0x1F, 0x3B, 0x00, 0x03, 0x03, 0x14,
-    0x03, 0x00, 0x1F, 0x3D, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x3B, 0x00, 0x03, 0x03, 0x14,
-    0x03, 0x40, 0x1F, 0x3D, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x3F, 0x00, 0x03, 0x03, 0x14,
-    0x03, 0x42, 0x1F, 0x39, 0x00, 0x02, 0x03, 0x14, 0x1F, 0xDA, 0x00, 0x02, 0x03, 0x40, 0x03, 0x8A,
-    0x00, 0x02, 0x03, 0x41, 0x1F, 0x3A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x3C, 0x00, 0x03,
-    0x03, 0x43, 0x03, 0x01, 0x1F, 0x3A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0x3C, 0x00, 0x03,
-    0x03, 0x43, 0x03, 0x41, 0x1F, 0x3E, 0x00, 0x03, 0x03, 0x43, 0x03, 0x42, 0x1F, 0x38, 0x00, 0x02,
-    0x03, 0x43, 0x00, 0x13, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4C,
-    0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x7A, 0x00, 0x80, 0x00, 0x86,
-    0x00, 0x8C, 0x00, 0x94, 0x00, 0x9C, 0x00, 0xA4, 0x00, 0xAC, 0x1F, 0xF8, 0x00, 0x02, 0x03, 0x00,
-    0x03, 0x8C, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x4A, 0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0x4C,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x4A, 0x00, 0x03, 0x03, 0x13, 0x03, 0x40, 0x1F, 0x4C,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x48, 0x00, 0x02, 0x03, 0x13, 0x1F, 0x4B, 0x00, 0x03,
-    0x03, 0x14, 0x03, 0x00, 0x1F, 0x4D, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x4B, 0x00, 0x03,
-    0x03, 0x14, 0x03, 0x40, 0x1F, 0x4D, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x49, 0x00, 0x02,
-    0x03, 0x14, 0x1F, 0xF8, 0x00, 0x02, 0x03, 0x40, 0x03, 0x8C, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x4A,
-    0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x4C, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x4A,
-    0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0x4C, 0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0x48,
-    0x00, 0x02, 0x03, 0x43, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xEC, 0x00, 0x02, 0x03, 0x14, 0x00, 0x0D,
-    0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x00, 0x3A, 0x00, 0x42, 0x00, 0x4A,
-    0x00, 0x52, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x68, 0x00, 0x6E, 0x1F, 0xEA, 0x00, 0x02, 0x03, 0x00,
-    0x03, 0x8E, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xE9, 0x00, 0x02, 0x03, 0x04, 0x1F, 0xE8, 0x00, 0x02,
-    0x03, 0x06, 0x03, 0xAB, 0x00, 0x02, 0x03, 0x08, 0x1F, 0x5B, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00,
-    0x1F, 0x5D, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x5B, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40,
-    0x1F, 0x5D, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x5F, 0x00, 0x03, 0x03, 0x14, 0x03, 0x42,
-    0x1F, 0x59, 0x00, 0x02, 0x03, 0x14, 0x1F, 0xEA, 0x00, 0x02, 0x03, 0x40, 0x03, 0x8E, 0x00, 0x02,
-    0x03, 0x41, 0x00, 0x4A, 0x00, 0x96, 0x00, 0x9C, 0x00, 0xA2, 0x00, 0xAC, 0x00, 0xB4, 0x00, 0xBE,
-    0x00, 0xC6, 0x00, 0xD0, 0x00, 0xD8, 0x00, 0xE2, 0x00, 0xEA, 0x00, 0xF4, 0x00, 0xFC, 0x01, 0x06,
-    0x01, 0x10, 0x01, 0x1A, 0x01, 0x24, 0x01, 0x2E, 0x01, 0x36, 0x01, 0x3C, 0x01, 0x46, 0x01, 0x4E,
-    0x01, 0x58, 0x01, 0x60, 0x01, 0x6A, 0x01, 0x72, 0x01, 0x7C, 0x01, 0x84, 0x01, 0x8E, 0x01, 0x96,
-    0x01, 0xA0, 0x01, 0xAA, 0x01, 0xB4, 0x01, 0xBE, 0x01, 0xC8, 0x01, 0xD0, 0x01, 0xD6, 0x01, 0xDC,
-    0x01, 0xE2, 0x01, 0xEC, 0x01, 0xF4, 0x01, 0xFE, 0x02, 0x06, 0x02, 0x10, 0x02, 0x18, 0x02, 0x22,
-    0x02, 0x2A, 0x02, 0x34, 0x02, 0x3C, 0x02, 0x46, 0x02, 0x50, 0x02, 0x5A, 0x02, 0x64, 0x02, 0x6E,
-    0x02, 0x76, 0x02, 0x7C, 0x02, 0x86, 0x02, 0x90, 0x02, 0x9A, 0x02, 0xA4, 0x02, 0xAE, 0x02, 0xB6,
-    0x02, 0xC0, 0x02, 0xCA, 0x02, 0xD4, 0x02, 0xDE, 0x02, 0xE8, 0x02, 0xF0, 0x02, 0xFA, 0x03, 0x04,
-    0x03, 0x0E, 0x03, 0x18, 0x03, 0x22, 0x03, 0x2A, 0x1F, 0xFA, 0x00, 0x02, 0x03, 0x00, 0x03, 0x8F,
-    0x00, 0x02, 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x13, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x6A,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x13, 0x03, 0x01, 0x03, 0x45,
-    0x1F, 0x6C, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x13, 0x03, 0x40,
-    0x03, 0x45, 0x1F, 0x6A, 0x00, 0x03, 0x03, 0x13, 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x13,
-    0x03, 0x41, 0x03, 0x45, 0x1F, 0x6C, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x04,
-    0x03, 0x13, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x6E, 0x00, 0x03, 0x03, 0x13, 0x03, 0x42, 0x1F, 0xAA,
-    0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45,
-    0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x04,
-    0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42,
-    0x1F, 0xA8, 0x00, 0x03, 0x03, 0x13, 0x03, 0x45, 0x1F, 0x68, 0x00, 0x02, 0x03, 0x13, 0x1F, 0xAB,
-    0x00, 0x04, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x6B, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00,
-    0x1F, 0xAD, 0x00, 0x04, 0x03, 0x14, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x6D, 0x00, 0x03, 0x03, 0x14,
-    0x03, 0x01, 0x1F, 0xAB, 0x00, 0x04, 0x03, 0x14, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x6B, 0x00, 0x03,
-    0x03, 0x14, 0x03, 0x40, 0x1F, 0xAD, 0x00, 0x04, 0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x6D,
-    0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0xAF, 0x00, 0x04, 0x03, 0x14, 0x03, 0x42, 0x03, 0x45,
-    0x1F, 0x6F, 0x00, 0x03, 0x03, 0x14, 0x03, 0x42, 0x1F, 0xAB, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45,
-    0x03, 0x00, 0x1F, 0xAD, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x01, 0x1F, 0xAB, 0x00, 0x04,
-    0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x1F, 0xAD, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41,
-    0x1F, 0xAF, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x42, 0x1F, 0xA9, 0x00, 0x03, 0x03, 0x14,
-    0x03, 0x45, 0x1F, 0x69, 0x00, 0x02, 0x03, 0x14, 0x1F, 0xFA, 0x00, 0x02, 0x03, 0x40, 0x03, 0x8F,
-    0x00, 0x02, 0x03, 0x41, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x6A,
-    0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45,
-    0x1F, 0x6C, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x43, 0x03, 0x40,
-    0x03, 0x45, 0x1F, 0x6A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x43,
-    0x03, 0x41, 0x03, 0x45, 0x1F, 0x6C, 0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x04,
-    0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x6E, 0x00, 0x03, 0x03, 0x43, 0x03, 0x42, 0x1F, 0xAA,
-    0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45,
-    0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x04,
-    0x03, 0x43, 0x03, 0x45, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42,
-    0x1F, 0xA8, 0x00, 0x03, 0x03, 0x43, 0x03, 0x45, 0x1F, 0x68, 0x00, 0x02, 0x03, 0x43, 0x1F, 0xAA,
-    0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13,
-    0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x04,
-    0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x42,
-    0x1F, 0xA8, 0x00, 0x03, 0x03, 0x45, 0x03, 0x13, 0x1F, 0xAB, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14,
-    0x03, 0x00, 0x1F, 0xAD, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01, 0x1F, 0xAB, 0x00, 0x04,
-    0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x1F, 0xAD, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41,
-    0x1F, 0xAF, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42, 0x1F, 0xA9, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x14, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x04,
-    0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40,
-    0x1F, 0xAC, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x04, 0x03, 0x45,
-    0x03, 0x43, 0x03, 0x42, 0x1F, 0xA8, 0x00, 0x03, 0x03, 0x45, 0x03, 0x43, 0x1F, 0xFC, 0x00, 0x02,
-    0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xB4, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04,
-    0x1F, 0xC4, 0x00, 0x02, 0x03, 0x45, 0x00, 0x57, 0x00, 0xB0, 0x00, 0xB8, 0x00, 0xBE, 0x00, 0xC6,
-    0x00, 0xCC, 0x00, 0xD2, 0x00, 0xD8, 0x00, 0xE2, 0x00, 0xEA, 0x00, 0xF4, 0x00, 0xFC, 0x01, 0x06,
-    0x01, 0x0E, 0x01, 0x18, 0x01, 0x20, 0x01, 0x2A, 0x01, 0x32, 0x01, 0x3C, 0x01, 0x46, 0x01, 0x50,
-    0x01, 0x5A, 0x01, 0x64, 0x01, 0x6C, 0x01, 0x72, 0x01, 0x7C, 0x01, 0x84, 0x01, 0x8E, 0x01, 0x96,
-    0x01, 0xA0, 0x01, 0xA8, 0x01, 0xB2, 0x01, 0xBA, 0x01, 0xC4, 0x01, 0xCC, 0x01, 0xD6, 0x01, 0xE0,
-    0x01, 0xEA, 0x01, 0xF4, 0x01, 0xFE, 0x02, 0x06, 0x02, 0x0C, 0x02, 0x14, 0x02, 0x1A, 0x02, 0x22,
-    0x02, 0x28, 0x02, 0x30, 0x02, 0x36, 0x02, 0x40, 0x02, 0x48, 0x02, 0x52, 0x02, 0x5A, 0x02, 0x64,
-    0x02, 0x6C, 0x02, 0x76, 0x02, 0x7E, 0x02, 0x88, 0x02, 0x90, 0x02, 0x9A, 0x02, 0xA4, 0x02, 0xAE,
-    0x02, 0xB8, 0x02, 0xC2, 0x02, 0xCA, 0x02, 0xD0, 0x02, 0xD8, 0x02, 0xE0, 0x02, 0xEA, 0x02, 0xF4,
-    0x02, 0xFE, 0x03, 0x08, 0x03, 0x12, 0x03, 0x1A, 0x03, 0x24, 0x03, 0x2E, 0x03, 0x38, 0x03, 0x42,
-    0x03, 0x4C, 0x03, 0x54, 0x03, 0x5C, 0x03, 0x64, 0x03, 0x6C, 0x03, 0x76, 0x03, 0x80, 0x03, 0x8A,
-    0x03, 0x94, 0x03, 0x9E, 0x03, 0xA6, 0x1F, 0xB2, 0x00, 0x03, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x70,
-    0x00, 0x02, 0x03, 0x00, 0x1F, 0xB4, 0x00, 0x03, 0x03, 0x01, 0x03, 0x45, 0x03, 0xAC, 0x00, 0x02,
-    0x03, 0x01, 0x1F, 0xB1, 0x00, 0x02, 0x03, 0x04, 0x1F, 0xB0, 0x00, 0x02, 0x03, 0x06, 0x1F, 0x82,
-    0x00, 0x04, 0x03, 0x13, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x02, 0x00, 0x03, 0x03, 0x13, 0x03, 0x00,
-    0x1F, 0x84, 0x00, 0x04, 0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x04, 0x00, 0x03, 0x03, 0x13,
-    0x03, 0x01, 0x1F, 0x82, 0x00, 0x04, 0x03, 0x13, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x02, 0x00, 0x03,
-    0x03, 0x13, 0x03, 0x40, 0x1F, 0x84, 0x00, 0x04, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x04,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x86, 0x00, 0x04, 0x03, 0x13, 0x03, 0x42, 0x03, 0x45,
-    0x1F, 0x06, 0x00, 0x03, 0x03, 0x13, 0x03, 0x42, 0x1F, 0x82, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45,
-    0x03, 0x00, 0x1F, 0x84, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x82, 0x00, 0x04,
-    0x03, 0x13, 0x03, 0x45, 0x03, 0x40, 0x1F, 0x84, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41,
-    0x1F, 0x86, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x1F, 0x80, 0x00, 0x03, 0x03, 0x13,
-    0x03, 0x45, 0x1F, 0x00, 0x00, 0x02, 0x03, 0x13, 0x1F, 0x83, 0x00, 0x04, 0x03, 0x14, 0x03, 0x00,
-    0x03, 0x45, 0x1F, 0x03, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x85, 0x00, 0x04, 0x03, 0x14,
-    0x03, 0x01, 0x03, 0x45, 0x1F, 0x05, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x83, 0x00, 0x04,
-    0x03, 0x14, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x03, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x85,
-    0x00, 0x04, 0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x05, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41,
-    0x1F, 0x87, 0x00, 0x04, 0x03, 0x14, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x07, 0x00, 0x03, 0x03, 0x14,
-    0x03, 0x42, 0x1F, 0x83, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x1F, 0x85, 0x00, 0x04,
-    0x03, 0x14, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x83, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x40,
-    0x1F, 0x85, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x87, 0x00, 0x04, 0x03, 0x14,
-    0x03, 0x45, 0x03, 0x42, 0x1F, 0x81, 0x00, 0x03, 0x03, 0x14, 0x03, 0x45, 0x1F, 0x01, 0x00, 0x02,
-    0x03, 0x14, 0x1F, 0xB2, 0x00, 0x03, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x70, 0x00, 0x02, 0x03, 0x40,
-    0x1F, 0xB4, 0x00, 0x03, 0x03, 0x41, 0x03, 0x45, 0x03, 0xAC, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xB7,
-    0x00, 0x03, 0x03, 0x42, 0x03, 0x45, 0x1F, 0xB6, 0x00, 0x02, 0x03, 0x42, 0x1F, 0x82, 0x00, 0x04,
-    0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x02, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x84,
-    0x00, 0x04, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x04, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01,
-    0x1F, 0x82, 0x00, 0x04, 0x03, 0x43, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x02, 0x00, 0x03, 0x03, 0x43,
-    0x03, 0x40, 0x1F, 0x84, 0x00, 0x04, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x04, 0x00, 0x03,
-    0x03, 0x43, 0x03, 0x41, 0x1F, 0x86, 0x00, 0x04, 0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x06,
-    0x00, 0x03, 0x03, 0x43, 0x03, 0x42, 0x1F, 0x82, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00,
-    0x1F, 0x84, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x82, 0x00, 0x04, 0x03, 0x43,
-    0x03, 0x45, 0x03, 0x40, 0x1F, 0x84, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x86,
-    0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x1F, 0x80, 0x00, 0x03, 0x03, 0x43, 0x03, 0x45,
-    0x1F, 0x00, 0x00, 0x02, 0x03, 0x43, 0x1F, 0xB2, 0x00, 0x03, 0x03, 0x45, 0x03, 0x00, 0x1F, 0xB4,
-    0x00, 0x03, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x82, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00,
-    0x1F, 0x84, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x82, 0x00, 0x04, 0x03, 0x45,
-    0x03, 0x13, 0x03, 0x40, 0x1F, 0x84, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x86,
-    0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x42, 0x1F, 0x80, 0x00, 0x03, 0x03, 0x45, 0x03, 0x13,
-    0x1F, 0x83, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x85, 0x00, 0x04, 0x03, 0x45,
-    0x03, 0x14, 0x03, 0x01, 0x1F, 0x83, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x85,
-    0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x87, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14,
-    0x03, 0x42, 0x1F, 0x81, 0x00, 0x03, 0x03, 0x45, 0x03, 0x14, 0x1F, 0xB2, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x40, 0x1F, 0xB4, 0x00, 0x03, 0x03, 0x45, 0x03, 0x41, 0x1F, 0xB7, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x42, 0x1F, 0x82, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x84, 0x00, 0x04,
-    0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x82, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40,
-    0x1F, 0x84, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x1F, 0x86, 0x00, 0x04, 0x03, 0x45,
-    0x03, 0x43, 0x03, 0x42, 0x1F, 0x80, 0x00, 0x03, 0x03, 0x45, 0x03, 0x43, 0x1F, 0xB3, 0x00, 0x02,
-    0x03, 0x45, 0x00, 0x13, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4C,
-    0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x7A, 0x00, 0x80, 0x00, 0x86,
-    0x00, 0x8C, 0x00, 0x94, 0x00, 0x9C, 0x00, 0xA4, 0x00, 0xAC, 0x1F, 0x72, 0x00, 0x02, 0x03, 0x00,
-    0x03, 0xAD, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x12, 0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0x14,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x12, 0x00, 0x03, 0x03, 0x13, 0x03, 0x40, 0x1F, 0x14,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x10, 0x00, 0x02, 0x03, 0x13, 0x1F, 0x13, 0x00, 0x03,
-    0x03, 0x14, 0x03, 0x00, 0x1F, 0x15, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x13, 0x00, 0x03,
-    0x03, 0x14, 0x03, 0x40, 0x1F, 0x15, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x11, 0x00, 0x02,
-    0x03, 0x14, 0x1F, 0x72, 0x00, 0x02, 0x03, 0x40, 0x03, 0xAD, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x12,
-    0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x14, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x12,
-    0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0x14, 0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0x10,
-    0x00, 0x02, 0x03, 0x43, 0x00, 0x55, 0x00, 0xAC, 0x00, 0xB4, 0x00, 0xBA, 0x00, 0xC2, 0x00, 0xC8,
-    0x00, 0xD2, 0x00, 0xDA, 0x00, 0xE4, 0x00, 0xEC, 0x00, 0xF6, 0x00, 0xFE, 0x01, 0x08, 0x01, 0x10,
-    0x01, 0x1A, 0x01, 0x22, 0x01, 0x2C, 0x01, 0x36, 0x01, 0x40, 0x01, 0x4A, 0x01, 0x54, 0x01, 0x5C,
-    0x01, 0x62, 0x01, 0x6C, 0x01, 0x74, 0x01, 0x7E, 0x01, 0x86, 0x01, 0x90, 0x01, 0x98, 0x01, 0xA2,
-    0x01, 0xAA, 0x01, 0xB4, 0x01, 0xBC, 0x01, 0xC6, 0x01, 0xD0, 0x01, 0xDA, 0x01, 0xE4, 0x01, 0xEE,
-    0x01, 0xF6, 0x01, 0xFC, 0x02, 0x04, 0x02, 0x0A, 0x02, 0x12, 0x02, 0x18, 0x02, 0x20, 0x02, 0x26,
-    0x02, 0x30, 0x02, 0x38, 0x02, 0x42, 0x02, 0x4A, 0x02, 0x54, 0x02, 0x5C, 0x02, 0x66, 0x02, 0x6E,
-    0x02, 0x78, 0x02, 0x80, 0x02, 0x8A, 0x02, 0x94, 0x02, 0x9E, 0x02, 0xA8, 0x02, 0xB2, 0x02, 0xBA,
-    0x02, 0xC0, 0x02, 0xC8, 0x02, 0xD0, 0x02, 0xDA, 0x02, 0xE4, 0x02, 0xEE, 0x02, 0xF8, 0x03, 0x02,
-    0x03, 0x0A, 0x03, 0x14, 0x03, 0x1E, 0x03, 0x28, 0x03, 0x32, 0x03, 0x3C, 0x03, 0x44, 0x03, 0x4C,
-    0x03, 0x54, 0x03, 0x5C, 0x03, 0x66, 0x03, 0x70, 0x03, 0x7A, 0x03, 0x84, 0x03, 0x8E, 0x03, 0x96,
-    0x1F, 0xC2, 0x00, 0x03, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x74, 0x00, 0x02, 0x03, 0x00, 0x1F, 0xC4,
-    0x00, 0x03, 0x03, 0x01, 0x03, 0x45, 0x03, 0xAE, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x92, 0x00, 0x04,
-    0x03, 0x13, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x22, 0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0x94,
-    0x00, 0x04, 0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x24, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01,
-    0x1F, 0x92, 0x00, 0x04, 0x03, 0x13, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x22, 0x00, 0x03, 0x03, 0x13,
-    0x03, 0x40, 0x1F, 0x94, 0x00, 0x04, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x24, 0x00, 0x03,
-    0x03, 0x13, 0x03, 0x41, 0x1F, 0x96, 0x00, 0x04, 0x03, 0x13, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x26,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x42, 0x1F, 0x92, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00,
-    0x1F, 0x94, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x92, 0x00, 0x04, 0x03, 0x13,
-    0x03, 0x45, 0x03, 0x40, 0x1F, 0x94, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x96,
-    0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x1F, 0x90, 0x00, 0x03, 0x03, 0x13, 0x03, 0x45,
-    0x1F, 0x20, 0x00, 0x02, 0x03, 0x13, 0x1F, 0x93, 0x00, 0x04, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45,
-    0x1F, 0x23, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x95, 0x00, 0x04, 0x03, 0x14, 0x03, 0x01,
-    0x03, 0x45, 0x1F, 0x25, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x93, 0x00, 0x04, 0x03, 0x14,
-    0x03, 0x40, 0x03, 0x45, 0x1F, 0x23, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x95, 0x00, 0x04,
-    0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x25, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x97,
-    0x00, 0x04, 0x03, 0x14, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x27, 0x00, 0x03, 0x03, 0x14, 0x03, 0x42,
-    0x1F, 0x93, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x1F, 0x95, 0x00, 0x04, 0x03, 0x14,
-    0x03, 0x45, 0x03, 0x01, 0x1F, 0x93, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x1F, 0x95,
-    0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x97, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45,
-    0x03, 0x42, 0x1F, 0x91, 0x00, 0x03, 0x03, 0x14, 0x03, 0x45, 0x1F, 0x21, 0x00, 0x02, 0x03, 0x14,
-    0x1F, 0xC2, 0x00, 0x03, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x74, 0x00, 0x02, 0x03, 0x40, 0x1F, 0xC4,
-    0x00, 0x03, 0x03, 0x41, 0x03, 0x45, 0x03, 0xAE, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xC7, 0x00, 0x03,
-    0x03, 0x42, 0x03, 0x45, 0x1F, 0xC6, 0x00, 0x02, 0x03, 0x42, 0x1F, 0x92, 0x00, 0x04, 0x03, 0x43,
-    0x03, 0x00, 0x03, 0x45, 0x1F, 0x22, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x94, 0x00, 0x04,
-    0x03, 0x43, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x24, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x92,
-    0x00, 0x04, 0x03, 0x43, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x22, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40,
-    0x1F, 0x94, 0x00, 0x04, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x24, 0x00, 0x03, 0x03, 0x43,
-    0x03, 0x41, 0x1F, 0x96, 0x00, 0x04, 0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x26, 0x00, 0x03,
-    0x03, 0x43, 0x03, 0x42, 0x1F, 0x92, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00, 0x1F, 0x94,
-    0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x92, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45,
-    0x03, 0x40, 0x1F, 0x94, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x96, 0x00, 0x04,
-    0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x1F, 0x90, 0x00, 0x03, 0x03, 0x43, 0x03, 0x45, 0x1F, 0x20,
-    0x00, 0x02, 0x03, 0x43, 0x1F, 0xC2, 0x00, 0x03, 0x03, 0x45, 0x03, 0x00, 0x1F, 0xC4, 0x00, 0x03,
-    0x03, 0x45, 0x03, 0x01, 0x1F, 0x92, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x1F, 0x94,
-    0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x92, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13,
-    0x03, 0x40, 0x1F, 0x94, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x96, 0x00, 0x04,
-    0x03, 0x45, 0x03, 0x13, 0x03, 0x42, 0x1F, 0x90, 0x00, 0x03, 0x03, 0x45, 0x03, 0x13, 0x1F, 0x93,
-    0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x95, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14,
-    0x03, 0x01, 0x1F, 0x93, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x95, 0x00, 0x04,
-    0x03, 0x45, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x97, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42,
-    0x1F, 0x91, 0x00, 0x03, 0x03, 0x45, 0x03, 0x14, 0x1F, 0xC2, 0x00, 0x03, 0x03, 0x45, 0x03, 0x40,
-    0x1F, 0xC4, 0x00, 0x03, 0x03, 0x45, 0x03, 0x41, 0x1F, 0xC7, 0x00, 0x03, 0x03, 0x45, 0x03, 0x42,
-    0x1F, 0x92, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x94, 0x00, 0x04, 0x03, 0x45,
-    0x03, 0x43, 0x03, 0x01, 0x1F, 0x92, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40, 0x1F, 0x94,
-    0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x1F, 0x96, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43,
-    0x03, 0x42, 0x1F, 0x90, 0x00, 0x03, 0x03, 0x45, 0x03, 0x43, 0x1F, 0xC3, 0x00, 0x02, 0x03, 0x45,
-    0x00, 0x20, 0x00, 0x42, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x6A,
-    0x00, 0x72, 0x00, 0x7A, 0x00, 0x82, 0x00, 0x88, 0x00, 0x90, 0x00, 0x98, 0x00, 0xA0, 0x00, 0xA8,
-    0x00, 0xB0, 0x00, 0xB6, 0x00, 0xBE, 0x00, 0xC6, 0x00, 0xCE, 0x00, 0xD6, 0x00, 0xDE, 0x00, 0xE4,
-    0x00, 0xEA, 0x00, 0xF0, 0x00, 0xF6, 0x00, 0xFE, 0x01, 0x06, 0x01, 0x0E, 0x01, 0x16, 0x01, 0x1E,
-    0x01, 0x24, 0x1F, 0x76, 0x00, 0x02, 0x03, 0x00, 0x03, 0xAF, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xD1,
-    0x00, 0x02, 0x03, 0x04, 0x1F, 0xD0, 0x00, 0x02, 0x03, 0x06, 0x1F, 0xD2, 0x00, 0x03, 0x03, 0x08,
-    0x03, 0x00, 0x03, 0x90, 0x00, 0x03, 0x03, 0x08, 0x03, 0x01, 0x1F, 0xD2, 0x00, 0x03, 0x03, 0x08,
-    0x03, 0x40, 0x03, 0x90, 0x00, 0x03, 0x03, 0x08, 0x03, 0x41, 0x1F, 0xD7, 0x00, 0x03, 0x03, 0x08,
-    0x03, 0x42, 0x03, 0xCA, 0x00, 0x02, 0x03, 0x08, 0x1F, 0x32, 0x00, 0x03, 0x03, 0x13, 0x03, 0x00,
-    0x1F, 0x34, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x32, 0x00, 0x03, 0x03, 0x13, 0x03, 0x40,
-    0x1F, 0x34, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x36, 0x00, 0x03, 0x03, 0x13, 0x03, 0x42,
-    0x1F, 0x30, 0x00, 0x02, 0x03, 0x13, 0x1F, 0x33, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x35,
-    0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x33, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x35,
-    0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x37, 0x00, 0x03, 0x03, 0x14, 0x03, 0x42, 0x1F, 0x31,
-    0x00, 0x02, 0x03, 0x14, 0x1F, 0x76, 0x00, 0x02, 0x03, 0x40, 0x03, 0xAF, 0x00, 0x02, 0x03, 0x41,
-    0x1F, 0xD6, 0x00, 0x02, 0x03, 0x42, 0x1F, 0x32, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x34,
-    0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x32, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0x34,
-    0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0x36, 0x00, 0x03, 0x03, 0x43, 0x03, 0x42, 0x1F, 0x30,
-    0x00, 0x02, 0x03, 0x43, 0x03, 0x90, 0x00, 0x02, 0x03, 0x44, 0x00, 0x13, 0x00, 0x28, 0x00, 0x2E,
-    0x00, 0x34, 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x6A,
-    0x00, 0x72, 0x00, 0x7A, 0x00, 0x80, 0x00, 0x86, 0x00, 0x8C, 0x00, 0x94, 0x00, 0x9C, 0x00, 0xA4,
-    0x00, 0xAC, 0x1F, 0x78, 0x00, 0x02, 0x03, 0x00, 0x03, 0xCC, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x42,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0x44, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x42,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x40, 0x1F, 0x44, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x40,
-    0x00, 0x02, 0x03, 0x13, 0x1F, 0x43, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x45, 0x00, 0x03,
-    0x03, 0x14, 0x03, 0x01, 0x1F, 0x43, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x45, 0x00, 0x03,
-    0x03, 0x14, 0x03, 0x41, 0x1F, 0x41, 0x00, 0x02, 0x03, 0x14, 0x1F, 0x78, 0x00, 0x02, 0x03, 0x40,
-    0x03, 0xCC, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x42, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x44,
-    0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x42, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0x44,
-    0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0x40, 0x00, 0x02, 0x03, 0x43, 0x00, 0x03, 0x00, 0x08,
-    0x00, 0x0E, 0x00, 0x14, 0x1F, 0xE4, 0x00, 0x02, 0x03, 0x13, 0x1F, 0xE5, 0x00, 0x02, 0x03, 0x14,
-    0x1F, 0xE4, 0x00, 0x02, 0x03, 0x43, 0x00, 0x20, 0x00, 0x42, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54,
-    0x00, 0x5A, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x7A, 0x00, 0x82, 0x00, 0x88, 0x00, 0x90,
-    0x00, 0x98, 0x00, 0xA0, 0x00, 0xA8, 0x00, 0xB0, 0x00, 0xB6, 0x00, 0xBE, 0x00, 0xC6, 0x00, 0xCE,
-    0x00, 0xD6, 0x00, 0xDE, 0x00, 0xE4, 0x00, 0xEA, 0x00, 0xF0, 0x00, 0xF6, 0x00, 0xFE, 0x01, 0x06,
-    0x01, 0x0E, 0x01, 0x16, 0x01, 0x1E, 0x01, 0x24, 0x1F, 0x7A, 0x00, 0x02, 0x03, 0x00, 0x03, 0xCD,
-    0x00, 0x02, 0x03, 0x01, 0x1F, 0xE1, 0x00, 0x02, 0x03, 0x04, 0x1F, 0xE0, 0x00, 0x02, 0x03, 0x06,
-    0x1F, 0xE2, 0x00, 0x03, 0x03, 0x08, 0x03, 0x00, 0x03, 0xB0, 0x00, 0x03, 0x03, 0x08, 0x03, 0x01,
-    0x1F, 0xE2, 0x00, 0x03, 0x03, 0x08, 0x03, 0x40, 0x03, 0xB0, 0x00, 0x03, 0x03, 0x08, 0x03, 0x41,
-    0x1F, 0xE7, 0x00, 0x03, 0x03, 0x08, 0x03, 0x42, 0x03, 0xCB, 0x00, 0x02, 0x03, 0x08, 0x1F, 0x52,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0x54, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x52,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x40, 0x1F, 0x54, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x56,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x42, 0x1F, 0x50, 0x00, 0x02, 0x03, 0x13, 0x1F, 0x53, 0x00, 0x03,
-    0x03, 0x14, 0x03, 0x00, 0x1F, 0x55, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x53, 0x00, 0x03,
-    0x03, 0x14, 0x03, 0x40, 0x1F, 0x55, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x57, 0x00, 0x03,
-    0x03, 0x14, 0x03, 0x42, 0x1F, 0x51, 0x00, 0x02, 0x03, 0x14, 0x1F, 0x7A, 0x00, 0x02, 0x03, 0x40,
-    0x03, 0xCD, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xE6, 0x00, 0x02, 0x03, 0x42, 0x1F, 0x52, 0x00, 0x03,
-    0x03, 0x43, 0x03, 0x00, 0x1F, 0x54, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x52, 0x00, 0x03,
-    0x03, 0x43, 0x03, 0x40, 0x1F, 0x54, 0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0x56, 0x00, 0x03,
-    0x03, 0x43, 0x03, 0x42, 0x1F, 0x50, 0x00, 0x02, 0x03, 0x43, 0x03, 0xB0, 0x00, 0x02, 0x03, 0x44,
-    0x00, 0x55, 0x00, 0xAC, 0x00, 0xB4, 0x00, 0xBA, 0x00, 0xC2, 0x00, 0xC8, 0x00, 0xD2, 0x00, 0xDA,
-    0x00, 0xE4, 0x00, 0xEC, 0x00, 0xF6, 0x00, 0xFE, 0x01, 0x08, 0x01, 0x10, 0x01, 0x1A, 0x01, 0x22,
-    0x01, 0x2C, 0x01, 0x36, 0x01, 0x40, 0x01, 0x4A, 0x01, 0x54, 0x01, 0x5C, 0x01, 0x62, 0x01, 0x6C,
-    0x01, 0x74, 0x01, 0x7E, 0x01, 0x86, 0x01, 0x90, 0x01, 0x98, 0x01, 0xA2, 0x01, 0xAA, 0x01, 0xB4,
-    0x01, 0xBC, 0x01, 0xC6, 0x01, 0xD0, 0x01, 0xDA, 0x01, 0xE4, 0x01, 0xEE, 0x01, 0xF6, 0x01, 0xFC,
-    0x02, 0x04, 0x02, 0x0A, 0x02, 0x12, 0x02, 0x18, 0x02, 0x20, 0x02, 0x26, 0x02, 0x30, 0x02, 0x38,
-    0x02, 0x42, 0x02, 0x4A, 0x02, 0x54, 0x02, 0x5C, 0x02, 0x66, 0x02, 0x6E, 0x02, 0x78, 0x02, 0x80,
-    0x02, 0x8A, 0x02, 0x94, 0x02, 0x9E, 0x02, 0xA8, 0x02, 0xB2, 0x02, 0xBA, 0x02, 0xC0, 0x02, 0xC8,
-    0x02, 0xD0, 0x02, 0xDA, 0x02, 0xE4, 0x02, 0xEE, 0x02, 0xF8, 0x03, 0x02, 0x03, 0x0A, 0x03, 0x14,
-    0x03, 0x1E, 0x03, 0x28, 0x03, 0x32, 0x03, 0x3C, 0x03, 0x44, 0x03, 0x4C, 0x03, 0x54, 0x03, 0x5C,
-    0x03, 0x66, 0x03, 0x70, 0x03, 0x7A, 0x03, 0x84, 0x03, 0x8E, 0x03, 0x96, 0x1F, 0xF2, 0x00, 0x03,
-    0x03, 0x00, 0x03, 0x45, 0x1F, 0x7C, 0x00, 0x02, 0x03, 0x00, 0x1F, 0xF4, 0x00, 0x03, 0x03, 0x01,
-    0x03, 0x45, 0x03, 0xCE, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xA2, 0x00, 0x04, 0x03, 0x13, 0x03, 0x00,
-    0x03, 0x45, 0x1F, 0x62, 0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0xA4, 0x00, 0x04, 0x03, 0x13,
-    0x03, 0x01, 0x03, 0x45, 0x1F, 0x64, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0xA2, 0x00, 0x04,
-    0x03, 0x13, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x62, 0x00, 0x03, 0x03, 0x13, 0x03, 0x40, 0x1F, 0xA4,
-    0x00, 0x04, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x64, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41,
-    0x1F, 0xA6, 0x00, 0x04, 0x03, 0x13, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x66, 0x00, 0x03, 0x03, 0x13,
-    0x03, 0x42, 0x1F, 0xA2, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00, 0x1F, 0xA4, 0x00, 0x04,
-    0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x1F, 0xA2, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x40,
-    0x1F, 0xA4, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x1F, 0xA6, 0x00, 0x04, 0x03, 0x13,
-    0x03, 0x45, 0x03, 0x42, 0x1F, 0xA0, 0x00, 0x03, 0x03, 0x13, 0x03, 0x45, 0x1F, 0x60, 0x00, 0x02,
-    0x03, 0x13, 0x1F, 0xA3, 0x00, 0x04, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x63, 0x00, 0x03,
-    0x03, 0x14, 0x03, 0x00, 0x1F, 0xA5, 0x00, 0x04, 0x03, 0x14, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x65,
-    0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0xA3, 0x00, 0x04, 0x03, 0x14, 0x03, 0x40, 0x03, 0x45,
-    0x1F, 0x63, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40, 0x1F, 0xA5, 0x00, 0x04, 0x03, 0x14, 0x03, 0x41,
-    0x03, 0x45, 0x1F, 0x65, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0xA7, 0x00, 0x04, 0x03, 0x14,
-    0x03, 0x42, 0x03, 0x45, 0x1F, 0x67, 0x00, 0x03, 0x03, 0x14, 0x03, 0x42, 0x1F, 0xA3, 0x00, 0x04,
-    0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x1F, 0xA5, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x01,
-    0x1F, 0xA3, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x1F, 0xA5, 0x00, 0x04, 0x03, 0x14,
-    0x03, 0x45, 0x03, 0x41, 0x1F, 0xA7, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x42, 0x1F, 0xA1,
-    0x00, 0x03, 0x03, 0x14, 0x03, 0x45, 0x1F, 0x61, 0x00, 0x02, 0x03, 0x14, 0x1F, 0xF2, 0x00, 0x03,
-    0x03, 0x40, 0x03, 0x45, 0x1F, 0x7C, 0x00, 0x02, 0x03, 0x40, 0x1F, 0xF4, 0x00, 0x03, 0x03, 0x41,
-    0x03, 0x45, 0x03, 0xCE, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xF7, 0x00, 0x03, 0x03, 0x42, 0x03, 0x45,
-    0x1F, 0xF6, 0x00, 0x02, 0x03, 0x42, 0x1F, 0xA2, 0x00, 0x04, 0x03, 0x43, 0x03, 0x00, 0x03, 0x45,
-    0x1F, 0x62, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0xA4, 0x00, 0x04, 0x03, 0x43, 0x03, 0x01,
-    0x03, 0x45, 0x1F, 0x64, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0xA2, 0x00, 0x04, 0x03, 0x43,
-    0x03, 0x40, 0x03, 0x45, 0x1F, 0x62, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0xA4, 0x00, 0x04,
-    0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x64, 0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0xA6,
-    0x00, 0x04, 0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x66, 0x00, 0x03, 0x03, 0x43, 0x03, 0x42,
-    0x1F, 0xA2, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00, 0x1F, 0xA4, 0x00, 0x04, 0x03, 0x43,
-    0x03, 0x45, 0x03, 0x01, 0x1F, 0xA2, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40, 0x1F, 0xA4,
-    0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x41, 0x1F, 0xA6, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45,
-    0x03, 0x42, 0x1F, 0xA0, 0x00, 0x03, 0x03, 0x43, 0x03, 0x45, 0x1F, 0x60, 0x00, 0x02, 0x03, 0x43,
-    0x1F, 0xF2, 0x00, 0x03, 0x03, 0x45, 0x03, 0x00, 0x1F, 0xF4, 0x00, 0x03, 0x03, 0x45, 0x03, 0x01,
-    0x1F, 0xA2, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x1F, 0xA4, 0x00, 0x04, 0x03, 0x45,
-    0x03, 0x13, 0x03, 0x01, 0x1F, 0xA2, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x40, 0x1F, 0xA4,
-    0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x1F, 0xA6, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13,
-    0x03, 0x42, 0x1F, 0xA0, 0x00, 0x03, 0x03, 0x45, 0x03, 0x13, 0x1F, 0xA3, 0x00, 0x04, 0x03, 0x45,
-    0x03, 0x14, 0x03, 0x00, 0x1F, 0xA5, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01, 0x1F, 0xA3,
-    0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x1F, 0xA5, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14,
-    0x03, 0x41, 0x1F, 0xA7, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42, 0x1F, 0xA1, 0x00, 0x03,
-    0x03, 0x45, 0x03, 0x14, 0x1F, 0xF2, 0x00, 0x03, 0x03, 0x45, 0x03, 0x40, 0x1F, 0xF4, 0x00, 0x03,
-    0x03, 0x45, 0x03, 0x41, 0x1F, 0xF7, 0x00, 0x03, 0x03, 0x45, 0x03, 0x42, 0x1F, 0xA2, 0x00, 0x04,
-    0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x1F, 0xA4, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x01,
-    0x1F, 0xA2, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40, 0x1F, 0xA4, 0x00, 0x04, 0x03, 0x45,
-    0x03, 0x43, 0x03, 0x41, 0x1F, 0xA6, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x1F, 0xA0,
-    0x00, 0x03, 0x03, 0x45, 0x03, 0x43, 0x1F, 0xF3, 0x00, 0x02, 0x03, 0x45, 0x00, 0x05, 0x00, 0x0C,
-    0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0xD2, 0x00, 0x02, 0x03, 0x00, 0x03, 0x90,
-    0x00, 0x02, 0x03, 0x01, 0x1F, 0xD2, 0x00, 0x02, 0x03, 0x40, 0x03, 0x90, 0x00, 0x02, 0x03, 0x41,
-    0x1F, 0xD7, 0x00, 0x02, 0x03, 0x42, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E,
-    0x00, 0x24, 0x1F, 0xE2, 0x00, 0x02, 0x03, 0x00, 0x03, 0xB0, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xE2,
-    0x00, 0x02, 0x03, 0x40, 0x03, 0xB0, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xE7, 0x00, 0x02, 0x03, 0x42,
-    0x00, 0x01, 0x00, 0x04, 0x1F, 0xF4, 0x00, 0x02, 0x03, 0x45, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E,
-    0x00, 0x14, 0x03, 0xD3, 0x00, 0x02, 0x03, 0x01, 0x03, 0xD4, 0x00, 0x02, 0x03, 0x08, 0x03, 0xD3,
-    0x00, 0x02, 0x03, 0x41, 0x00, 0x10, 0x00, 0x22, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x38, 0x00, 0x3E,
-    0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x68, 0x00, 0x70, 0x00, 0x78,
-    0x00, 0x80, 0x00, 0x88, 0x00, 0x90, 0x1F, 0x82, 0x00, 0x03, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x02,
-    0x00, 0x02, 0x03, 0x00, 0x1F, 0x84, 0x00, 0x03, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x04, 0x00, 0x02,
-    0x03, 0x01, 0x1F, 0x82, 0x00, 0x03, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x02, 0x00, 0x02, 0x03, 0x40,
-    0x1F, 0x84, 0x00, 0x03, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x04, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x86,
-    0x00, 0x03, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x06, 0x00, 0x02, 0x03, 0x42, 0x1F, 0x82, 0x00, 0x03,
-    0x03, 0x45, 0x03, 0x00, 0x1F, 0x84, 0x00, 0x03, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x82, 0x00, 0x03,
-    0x03, 0x45, 0x03, 0x40, 0x1F, 0x84, 0x00, 0x03, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x86, 0x00, 0x03,
-    0x03, 0x45, 0x03, 0x42, 0x1F, 0x80, 0x00, 0x02, 0x03, 0x45, 0x00, 0x10, 0x00, 0x22, 0x00, 0x2A,
-    0x00, 0x30, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62,
-    0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00, 0x90, 0x1F, 0x83, 0x00, 0x03,
-    0x03, 0x00, 0x03, 0x45, 0x1F, 0x03, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x85, 0x00, 0x03, 0x03, 0x01,
-    0x03, 0x45, 0x1F, 0x05, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x83, 0x00, 0x03, 0x03, 0x40, 0x03, 0x45,
-    0x1F, 0x03, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x85, 0x00, 0x03, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x05,
-    0x00, 0x02, 0x03, 0x41, 0x1F, 0x87, 0x00, 0x03, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x07, 0x00, 0x02,
-    0x03, 0x42, 0x1F, 0x83, 0x00, 0x03, 0x03, 0x45, 0x03, 0x00, 0x1F, 0x85, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x01, 0x1F, 0x83, 0x00, 0x03, 0x03, 0x45, 0x03, 0x40, 0x1F, 0x85, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x41, 0x1F, 0x87, 0x00, 0x03, 0x03, 0x45, 0x03, 0x42, 0x1F, 0x81, 0x00, 0x02, 0x03, 0x45,
-    0x00, 0x01, 0x00, 0x04, 0x1F, 0x82, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x83,
-    0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x84, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01,
-    0x00, 0x04, 0x1F, 0x85, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x86, 0x00, 0x02,
-    0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x87, 0x00, 0x02, 0x03, 0x45, 0x00, 0x10, 0x00, 0x22,
-    0x00, 0x2A, 0x00, 0x30, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A,
-    0x00, 0x62, 0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00, 0x90, 0x1F, 0x8A,
-    0x00, 0x03, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x0A, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x8C, 0x00, 0x03,
-    0x03, 0x01, 0x03, 0x45, 0x1F, 0x0C, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x8A, 0x00, 0x03, 0x03, 0x40,
-    0x03, 0x45, 0x1F, 0x0A, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x8C, 0x00, 0x03, 0x03, 0x41, 0x03, 0x45,
-    0x1F, 0x0C, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x8E, 0x00, 0x03, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x0E,
-    0x00, 0x02, 0x03, 0x42, 0x1F, 0x8A, 0x00, 0x03, 0x03, 0x45, 0x03, 0x00, 0x1F, 0x8C, 0x00, 0x03,
-    0x03, 0x45, 0x03, 0x01, 0x1F, 0x8A, 0x00, 0x03, 0x03, 0x45, 0x03, 0x40, 0x1F, 0x8C, 0x00, 0x03,
-    0x03, 0x45, 0x03, 0x41, 0x1F, 0x8E, 0x00, 0x03, 0x03, 0x45, 0x03, 0x42, 0x1F, 0x88, 0x00, 0x02,
-    0x03, 0x45, 0x00, 0x10, 0x00, 0x22, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46,
-    0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80,
-    0x00, 0x88, 0x00, 0x90, 0x1F, 0x8B, 0x00, 0x03, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x0B, 0x00, 0x02,
-    0x03, 0x00, 0x1F, 0x8D, 0x00, 0x03, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x0D, 0x00, 0x02, 0x03, 0x01,
-    0x1F, 0x8B, 0x00, 0x03, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x0B, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x8D,
-    0x00, 0x03, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x0D, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x8F, 0x00, 0x03,
-    0x03, 0x42, 0x03, 0x45, 0x1F, 0x0F, 0x00, 0x02, 0x03, 0x42, 0x1F, 0x8B, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x00, 0x1F, 0x8D, 0x00, 0x03, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x8B, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x40, 0x1F, 0x8D, 0x00, 0x03, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x8F, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x42, 0x1F, 0x89, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x8A, 0x00, 0x02,
-    0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x8B, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04,
-    0x1F, 0x8C, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x8D, 0x00, 0x02, 0x03, 0x45,
-    0x00, 0x01, 0x00, 0x04, 0x1F, 0x8E, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x8F,
-    0x00, 0x02, 0x03, 0x45, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x1F, 0x12,
-    0x00, 0x02, 0x03, 0x00, 0x1F, 0x14, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x12, 0x00, 0x02, 0x03, 0x40,
-    0x1F, 0x14, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C,
-    0x1F, 0x13, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x15, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x13, 0x00, 0x02,
-    0x03, 0x40, 0x1F, 0x15, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16,
-    0x00, 0x1C, 0x1F, 0x1A, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x1C, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x1A,
-    0x00, 0x02, 0x03, 0x40, 0x1F, 0x1C, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10,
-    0x00, 0x16, 0x00, 0x1C, 0x1F, 0x1B, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x1D, 0x00, 0x02, 0x03, 0x01,
-    0x1F, 0x1B, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x1D, 0x00, 0x02, 0x03, 0x41, 0x00, 0x10, 0x00, 0x22,
-    0x00, 0x2A, 0x00, 0x30, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A,
-    0x00, 0x62, 0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00, 0x90, 0x1F, 0x92,
-    0x00, 0x03, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x22, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x94, 0x00, 0x03,
-    0x03, 0x01, 0x03, 0x45, 0x1F, 0x24, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x92, 0x00, 0x03, 0x03, 0x40,
-    0x03, 0x45, 0x1F, 0x22, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x94, 0x00, 0x03, 0x03, 0x41, 0x03, 0x45,
-    0x1F, 0x24, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x96, 0x00, 0x03, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x26,
-    0x00, 0x02, 0x03, 0x42, 0x1F, 0x92, 0x00, 0x03, 0x03, 0x45, 0x03, 0x00, 0x1F, 0x94, 0x00, 0x03,
-    0x03, 0x45, 0x03, 0x01, 0x1F, 0x92, 0x00, 0x03, 0x03, 0x45, 0x03, 0x40, 0x1F, 0x94, 0x00, 0x03,
-    0x03, 0x45, 0x03, 0x41, 0x1F, 0x96, 0x00, 0x03, 0x03, 0x45, 0x03, 0x42, 0x1F, 0x90, 0x00, 0x02,
-    0x03, 0x45, 0x00, 0x10, 0x00, 0x22, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46,
-    0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80,
-    0x00, 0x88, 0x00, 0x90, 0x1F, 0x93, 0x00, 0x03, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x23, 0x00, 0x02,
-    0x03, 0x00, 0x1F, 0x95, 0x00, 0x03, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x25, 0x00, 0x02, 0x03, 0x01,
-    0x1F, 0x93, 0x00, 0x03, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x23, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x95,
-    0x00, 0x03, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x25, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x97, 0x00, 0x03,
-    0x03, 0x42, 0x03, 0x45, 0x1F, 0x27, 0x00, 0x02, 0x03, 0x42, 0x1F, 0x93, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x00, 0x1F, 0x95, 0x00, 0x03, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x93, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x40, 0x1F, 0x95, 0x00, 0x03, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x97, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x42, 0x1F, 0x91, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x92, 0x00, 0x02,
-    0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x93, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04,
-    0x1F, 0x94, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x95, 0x00, 0x02, 0x03, 0x45,
-    0x00, 0x01, 0x00, 0x04, 0x1F, 0x96, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x97,
-    0x00, 0x02, 0x03, 0x45, 0x00, 0x10, 0x00, 0x22, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x38, 0x00, 0x3E,
-    0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x68, 0x00, 0x70, 0x00, 0x78,
-    0x00, 0x80, 0x00, 0x88, 0x00, 0x90, 0x1F, 0x9A, 0x00, 0x03, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x2A,
-    0x00, 0x02, 0x03, 0x00, 0x1F, 0x9C, 0x00, 0x03, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x2C, 0x00, 0x02,
-    0x03, 0x01, 0x1F, 0x9A, 0x00, 0x03, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x2A, 0x00, 0x02, 0x03, 0x40,
-    0x1F, 0x9C, 0x00, 0x03, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x2C, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x9E,
-    0x00, 0x03, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x2E, 0x00, 0x02, 0x03, 0x42, 0x1F, 0x9A, 0x00, 0x03,
-    0x03, 0x45, 0x03, 0x00, 0x1F, 0x9C, 0x00, 0x03, 0x03, 0x45, 0x03, 0x01, 0x1F, 0x9A, 0x00, 0x03,
-    0x03, 0x45, 0x03, 0x40, 0x1F, 0x9C, 0x00, 0x03, 0x03, 0x45, 0x03, 0x41, 0x1F, 0x9E, 0x00, 0x03,
-    0x03, 0x45, 0x03, 0x42, 0x1F, 0x98, 0x00, 0x02, 0x03, 0x45, 0x00, 0x10, 0x00, 0x22, 0x00, 0x2A,
-    0x00, 0x30, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62,
-    0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00, 0x90, 0x1F, 0x9B, 0x00, 0x03,
-    0x03, 0x00, 0x03, 0x45, 0x1F, 0x2B, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x9D, 0x00, 0x03, 0x03, 0x01,
-    0x03, 0x45, 0x1F, 0x2D, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x9B, 0x00, 0x03, 0x03, 0x40, 0x03, 0x45,
-    0x1F, 0x2B, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x9D, 0x00, 0x03, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x2D,
-    0x00, 0x02, 0x03, 0x41, 0x1F, 0x9F, 0x00, 0x03, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x2F, 0x00, 0x02,
-    0x03, 0x42, 0x1F, 0x9B, 0x00, 0x03, 0x03, 0x45, 0x03, 0x00, 0x1F, 0x9D, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x01, 0x1F, 0x9B, 0x00, 0x03, 0x03, 0x45, 0x03, 0x40, 0x1F, 0x9D, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x41, 0x1F, 0x9F, 0x00, 0x03, 0x03, 0x45, 0x03, 0x42, 0x1F, 0x99, 0x00, 0x02, 0x03, 0x45,
-    0x00, 0x01, 0x00, 0x04, 0x1F, 0x9A, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x9B,
-    0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x9C, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01,
-    0x00, 0x04, 0x1F, 0x9D, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x9E, 0x00, 0x02,
-    0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0x9F, 0x00, 0x02, 0x03, 0x45, 0x00, 0x05, 0x00, 0x0C,
-    0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0x32, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x34,
-    0x00, 0x02, 0x03, 0x01, 0x1F, 0x32, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x34, 0x00, 0x02, 0x03, 0x41,
-    0x1F, 0x36, 0x00, 0x02, 0x03, 0x42, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E,
-    0x00, 0x24, 0x1F, 0x33, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x35, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x33,
-    0x00, 0x02, 0x03, 0x40, 0x1F, 0x35, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x37, 0x00, 0x02, 0x03, 0x42,
-    0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0x3A, 0x00, 0x02,
-    0x03, 0x00, 0x1F, 0x3C, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x3A, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x3C,
-    0x00, 0x02, 0x03, 0x41, 0x1F, 0x3E, 0x00, 0x02, 0x03, 0x42, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12,
-    0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0x3B, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x3D, 0x00, 0x02,
-    0x03, 0x01, 0x1F, 0x3B, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x3D, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x3F,
-    0x00, 0x02, 0x03, 0x42, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x1F, 0x42,
-    0x00, 0x02, 0x03, 0x00, 0x1F, 0x44, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x42, 0x00, 0x02, 0x03, 0x40,
-    0x1F, 0x44, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C,
-    0x1F, 0x43, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x45, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x43, 0x00, 0x02,
-    0x03, 0x40, 0x1F, 0x45, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16,
-    0x00, 0x1C, 0x1F, 0x4A, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x4C, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x4A,
-    0x00, 0x02, 0x03, 0x40, 0x1F, 0x4C, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10,
-    0x00, 0x16, 0x00, 0x1C, 0x1F, 0x4B, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x4D, 0x00, 0x02, 0x03, 0x01,
-    0x1F, 0x4B, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x4D, 0x00, 0x02, 0x03, 0x41, 0x00, 0x05, 0x00, 0x0C,
-    0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0x52, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x54,
-    0x00, 0x02, 0x03, 0x01, 0x1F, 0x52, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x54, 0x00, 0x02, 0x03, 0x41,
-    0x1F, 0x56, 0x00, 0x02, 0x03, 0x42, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E,
-    0x00, 0x24, 0x1F, 0x53, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x55, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x53,
-    0x00, 0x02, 0x03, 0x40, 0x1F, 0x55, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x57, 0x00, 0x02, 0x03, 0x42,
-    0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0x5B, 0x00, 0x02,
-    0x03, 0x00, 0x1F, 0x5D, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x5B, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x5D,
-    0x00, 0x02, 0x03, 0x41, 0x1F, 0x5F, 0x00, 0x02, 0x03, 0x42, 0x00, 0x10, 0x00, 0x22, 0x00, 0x2A,
-    0x00, 0x30, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62,
-    0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00, 0x90, 0x1F, 0xA2, 0x00, 0x03,
-    0x03, 0x00, 0x03, 0x45, 0x1F, 0x62, 0x00, 0x02, 0x03, 0x00, 0x1F, 0xA4, 0x00, 0x03, 0x03, 0x01,
-    0x03, 0x45, 0x1F, 0x64, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xA2, 0x00, 0x03, 0x03, 0x40, 0x03, 0x45,
-    0x1F, 0x62, 0x00, 0x02, 0x03, 0x40, 0x1F, 0xA4, 0x00, 0x03, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x64,
-    0x00, 0x02, 0x03, 0x41, 0x1F, 0xA6, 0x00, 0x03, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x66, 0x00, 0x02,
-    0x03, 0x42, 0x1F, 0xA2, 0x00, 0x03, 0x03, 0x45, 0x03, 0x00, 0x1F, 0xA4, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x01, 0x1F, 0xA2, 0x00, 0x03, 0x03, 0x45, 0x03, 0x40, 0x1F, 0xA4, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x41, 0x1F, 0xA6, 0x00, 0x03, 0x03, 0x45, 0x03, 0x42, 0x1F, 0xA0, 0x00, 0x02, 0x03, 0x45,
-    0x00, 0x10, 0x00, 0x22, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C,
-    0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88,
-    0x00, 0x90, 0x1F, 0xA3, 0x00, 0x03, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x63, 0x00, 0x02, 0x03, 0x00,
-    0x1F, 0xA5, 0x00, 0x03, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x65, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xA3,
-    0x00, 0x03, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x63, 0x00, 0x02, 0x03, 0x40, 0x1F, 0xA5, 0x00, 0x03,
-    0x03, 0x41, 0x03, 0x45, 0x1F, 0x65, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xA7, 0x00, 0x03, 0x03, 0x42,
-    0x03, 0x45, 0x1F, 0x67, 0x00, 0x02, 0x03, 0x42, 0x1F, 0xA3, 0x00, 0x03, 0x03, 0x45, 0x03, 0x00,
-    0x1F, 0xA5, 0x00, 0x03, 0x03, 0x45, 0x03, 0x01, 0x1F, 0xA3, 0x00, 0x03, 0x03, 0x45, 0x03, 0x40,
-    0x1F, 0xA5, 0x00, 0x03, 0x03, 0x45, 0x03, 0x41, 0x1F, 0xA7, 0x00, 0x03, 0x03, 0x45, 0x03, 0x42,
-    0x1F, 0xA1, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xA2, 0x00, 0x02, 0x03, 0x45,
-    0x00, 0x01, 0x00, 0x04, 0x1F, 0xA3, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xA4,
-    0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xA5, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01,
-    0x00, 0x04, 0x1F, 0xA6, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xA7, 0x00, 0x02,
-    0x03, 0x45, 0x00, 0x10, 0x00, 0x22, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46,
-    0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80,
-    0x00, 0x88, 0x00, 0x90, 0x1F, 0xAA, 0x00, 0x03, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x6A, 0x00, 0x02,
-    0x03, 0x00, 0x1F, 0xAC, 0x00, 0x03, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x6C, 0x00, 0x02, 0x03, 0x01,
-    0x1F, 0xAA, 0x00, 0x03, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x6A, 0x00, 0x02, 0x03, 0x40, 0x1F, 0xAC,
-    0x00, 0x03, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x6C, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x03,
-    0x03, 0x42, 0x03, 0x45, 0x1F, 0x6E, 0x00, 0x02, 0x03, 0x42, 0x1F, 0xAA, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x00, 0x1F, 0xAC, 0x00, 0x03, 0x03, 0x45, 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x40, 0x1F, 0xAC, 0x00, 0x03, 0x03, 0x45, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x42, 0x1F, 0xA8, 0x00, 0x02, 0x03, 0x45, 0x00, 0x10, 0x00, 0x22, 0x00, 0x2A, 0x00, 0x30,
-    0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x68,
-    0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00, 0x90, 0x1F, 0xAB, 0x00, 0x03, 0x03, 0x00,
-    0x03, 0x45, 0x1F, 0x6B, 0x00, 0x02, 0x03, 0x00, 0x1F, 0xAD, 0x00, 0x03, 0x03, 0x01, 0x03, 0x45,
-    0x1F, 0x6D, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xAB, 0x00, 0x03, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x6B,
-    0x00, 0x02, 0x03, 0x40, 0x1F, 0xAD, 0x00, 0x03, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x6D, 0x00, 0x02,
-    0x03, 0x41, 0x1F, 0xAF, 0x00, 0x03, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x6F, 0x00, 0x02, 0x03, 0x42,
-    0x1F, 0xAB, 0x00, 0x03, 0x03, 0x45, 0x03, 0x00, 0x1F, 0xAD, 0x00, 0x03, 0x03, 0x45, 0x03, 0x01,
-    0x1F, 0xAB, 0x00, 0x03, 0x03, 0x45, 0x03, 0x40, 0x1F, 0xAD, 0x00, 0x03, 0x03, 0x45, 0x03, 0x41,
-    0x1F, 0xAF, 0x00, 0x03, 0x03, 0x45, 0x03, 0x42, 0x1F, 0xA9, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01,
-    0x00, 0x04, 0x1F, 0xAA, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xAB, 0x00, 0x02,
-    0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xAC, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04,
-    0x1F, 0xAD, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xAE, 0x00, 0x02, 0x03, 0x45,
-    0x00, 0x01, 0x00, 0x04, 0x1F, 0xAF, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xB2,
-    0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xB4, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01,
-    0x00, 0x04, 0x1F, 0xC2, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xC4, 0x00, 0x02,
-    0x03, 0x45, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xF2, 0x00, 0x02, 0x03, 0x45, 0x00, 0x01, 0x00, 0x04,
-    0x1F, 0xF4, 0x00, 0x02, 0x03, 0x45, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E,
-    0x00, 0x24, 0x1F, 0x82, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x84, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x82,
-    0x00, 0x02, 0x03, 0x40, 0x1F, 0x84, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x86, 0x00, 0x02, 0x03, 0x42,
-    0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0x83, 0x00, 0x02,
-    0x03, 0x00, 0x1F, 0x85, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x83, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x85,
-    0x00, 0x02, 0x03, 0x41, 0x1F, 0x87, 0x00, 0x02, 0x03, 0x42, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12,
-    0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0x8A, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x8C, 0x00, 0x02,
-    0x03, 0x01, 0x1F, 0x8A, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x8C, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x8E,
-    0x00, 0x02, 0x03, 0x42, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24,
-    0x1F, 0x8B, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x8D, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x8B, 0x00, 0x02,
-    0x03, 0x40, 0x1F, 0x8D, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x8F, 0x00, 0x02, 0x03, 0x42, 0x00, 0x05,
-    0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0x92, 0x00, 0x02, 0x03, 0x00,
-    0x1F, 0x94, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x92, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x94, 0x00, 0x02,
-    0x03, 0x41, 0x1F, 0x96, 0x00, 0x02, 0x03, 0x42, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18,
-    0x00, 0x1E, 0x00, 0x24, 0x1F, 0x93, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x95, 0x00, 0x02, 0x03, 0x01,
-    0x1F, 0x93, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x95, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x97, 0x00, 0x02,
-    0x03, 0x42, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0x9A,
-    0x00, 0x02, 0x03, 0x00, 0x1F, 0x9C, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x9A, 0x00, 0x02, 0x03, 0x40,
-    0x1F, 0x9C, 0x00, 0x02, 0x03, 0x41, 0x1F, 0x9E, 0x00, 0x02, 0x03, 0x42, 0x00, 0x05, 0x00, 0x0C,
-    0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0x9B, 0x00, 0x02, 0x03, 0x00, 0x1F, 0x9D,
-    0x00, 0x02, 0x03, 0x01, 0x1F, 0x9B, 0x00, 0x02, 0x03, 0x40, 0x1F, 0x9D, 0x00, 0x02, 0x03, 0x41,
-    0x1F, 0x9F, 0x00, 0x02, 0x03, 0x42, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E,
-    0x00, 0x24, 0x1F, 0xA2, 0x00, 0x02, 0x03, 0x00, 0x1F, 0xA4, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xA2,
-    0x00, 0x02, 0x03, 0x40, 0x1F, 0xA4, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xA6, 0x00, 0x02, 0x03, 0x42,
-    0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0xA3, 0x00, 0x02,
-    0x03, 0x00, 0x1F, 0xA5, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xA3, 0x00, 0x02, 0x03, 0x40, 0x1F, 0xA5,
-    0x00, 0x02, 0x03, 0x41, 0x1F, 0xA7, 0x00, 0x02, 0x03, 0x42, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12,
-    0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0xAA, 0x00, 0x02, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x02,
-    0x03, 0x01, 0x1F, 0xAA, 0x00, 0x02, 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xAE,
-    0x00, 0x02, 0x03, 0x42, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24,
-    0x1F, 0xAB, 0x00, 0x02, 0x03, 0x00, 0x1F, 0xAD, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xAB, 0x00, 0x02,
-    0x03, 0x40, 0x1F, 0xAD, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xAF, 0x00, 0x02, 0x03, 0x42, 0x00, 0x17,
-    0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5C, 0x00, 0x64,
-    0x00, 0x6A, 0x00, 0x72, 0x00, 0x7A, 0x00, 0x82, 0x00, 0x8A, 0x00, 0x92, 0x00, 0x98, 0x00, 0x9E,
-    0x00, 0xA4, 0x00, 0xAA, 0x00, 0xB2, 0x00, 0xBA, 0x00, 0xC2, 0x00, 0xCA, 0x00, 0xD2, 0x1F, 0xB2,
-    0x00, 0x02, 0x03, 0x00, 0x1F, 0xB4, 0x00, 0x02, 0x03, 0x01, 0x1F, 0x82, 0x00, 0x03, 0x03, 0x13,
-    0x03, 0x00, 0x1F, 0x84, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x82, 0x00, 0x03, 0x03, 0x13,
-    0x03, 0x40, 0x1F, 0x84, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x86, 0x00, 0x03, 0x03, 0x13,
-    0x03, 0x42, 0x1F, 0x80, 0x00, 0x02, 0x03, 0x13, 0x1F, 0x83, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00,
-    0x1F, 0x85, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x83, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40,
-    0x1F, 0x85, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x87, 0x00, 0x03, 0x03, 0x14, 0x03, 0x42,
-    0x1F, 0x81, 0x00, 0x02, 0x03, 0x14, 0x1F, 0xB2, 0x00, 0x02, 0x03, 0x40, 0x1F, 0xB4, 0x00, 0x02,
-    0x03, 0x41, 0x1F, 0xB7, 0x00, 0x02, 0x03, 0x42, 0x1F, 0x82, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00,
-    0x1F, 0x84, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x82, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40,
-    0x1F, 0x84, 0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0x86, 0x00, 0x03, 0x03, 0x43, 0x03, 0x42,
-    0x1F, 0x80, 0x00, 0x02, 0x03, 0x43, 0x00, 0x01, 0x00, 0x04, 0x1F, 0xB7, 0x00, 0x02, 0x03, 0x45,
-    0x00, 0x12, 0x00, 0x26, 0x00, 0x2E, 0x00, 0x36, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4E, 0x00, 0x54,
-    0x00, 0x5C, 0x00, 0x64, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x7C, 0x00, 0x82, 0x00, 0x8A, 0x00, 0x92,
-    0x00, 0x9A, 0x00, 0xA2, 0x00, 0xAA, 0x1F, 0x8A, 0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0x8C,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x8A, 0x00, 0x03, 0x03, 0x13, 0x03, 0x40, 0x1F, 0x8C,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x8E, 0x00, 0x03, 0x03, 0x13, 0x03, 0x42, 0x1F, 0x88,
-    0x00, 0x02, 0x03, 0x13, 0x1F, 0x8B, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x8D, 0x00, 0x03,
-    0x03, 0x14, 0x03, 0x01, 0x1F, 0x8B, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x8D, 0x00, 0x03,
-    0x03, 0x14, 0x03, 0x41, 0x1F, 0x8F, 0x00, 0x03, 0x03, 0x14, 0x03, 0x42, 0x1F, 0x89, 0x00, 0x02,
-    0x03, 0x14, 0x1F, 0x8A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x8C, 0x00, 0x03, 0x03, 0x43,
-    0x03, 0x01, 0x1F, 0x8A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0x8C, 0x00, 0x03, 0x03, 0x43,
-    0x03, 0x41, 0x1F, 0x8E, 0x00, 0x03, 0x03, 0x43, 0x03, 0x42, 0x1F, 0x88, 0x00, 0x02, 0x03, 0x43,
-    0x00, 0x20, 0x00, 0x42, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x6A,
-    0x00, 0x72, 0x00, 0x7A, 0x00, 0x82, 0x00, 0x88, 0x00, 0x90, 0x00, 0x98, 0x00, 0xA0, 0x00, 0xA8,
-    0x00, 0xB0, 0x00, 0xB6, 0x00, 0xBE, 0x00, 0xC6, 0x00, 0xCE, 0x00, 0xD6, 0x00, 0xDE, 0x00, 0xE4,
-    0x00, 0xEA, 0x00, 0xF0, 0x00, 0xF6, 0x00, 0xFE, 0x01, 0x06, 0x01, 0x0E, 0x01, 0x16, 0x01, 0x1E,
-    0x01, 0x24, 0x1F, 0x76, 0x00, 0x02, 0x03, 0x00, 0x03, 0xAF, 0x00, 0x02, 0x03, 0x01, 0x1F, 0xD1,
-    0x00, 0x02, 0x03, 0x04, 0x1F, 0xD0, 0x00, 0x02, 0x03, 0x06, 0x1F, 0xD2, 0x00, 0x03, 0x03, 0x08,
-    0x03, 0x00, 0x03, 0x90, 0x00, 0x03, 0x03, 0x08, 0x03, 0x01, 0x1F, 0xD2, 0x00, 0x03, 0x03, 0x08,
-    0x03, 0x40, 0x03, 0x90, 0x00, 0x03, 0x03, 0x08, 0x03, 0x41, 0x1F, 0xD7, 0x00, 0x03, 0x03, 0x08,
-    0x03, 0x42, 0x03, 0xCA, 0x00, 0x02, 0x03, 0x08, 0x1F, 0x32, 0x00, 0x03, 0x03, 0x13, 0x03, 0x00,
-    0x1F, 0x34, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x32, 0x00, 0x03, 0x03, 0x13, 0x03, 0x40,
-    0x1F, 0x34, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x36, 0x00, 0x03, 0x03, 0x13, 0x03, 0x42,
-    0x1F, 0x30, 0x00, 0x02, 0x03, 0x13, 0x1F, 0x33, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x35,
-    0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x33, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x35,
-    0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x37, 0x00, 0x03, 0x03, 0x14, 0x03, 0x42, 0x1F, 0x31,
-    0x00, 0x02, 0x03, 0x14, 0x1F, 0x76, 0x00, 0x02, 0x03, 0x40, 0x03, 0xAF, 0x00, 0x02, 0x03, 0x41,
-    0x1F, 0xD6, 0x00, 0x02, 0x03, 0x42, 0x1F, 0x32, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x34,
-    0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x32, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0x34,
-    0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0x36, 0x00, 0x03, 0x03, 0x43, 0x03, 0x42, 0x1F, 0x30,
-    0x00, 0x02, 0x03, 0x43, 0x03, 0x90, 0x00, 0x02, 0x03, 0x44, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12,
-    0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1F, 0xCD, 0x00, 0x02, 0x03, 0x00, 0x1F, 0xCE, 0x00, 0x02,
-    0x03, 0x01, 0x1F, 0xCD, 0x00, 0x02, 0x03, 0x40, 0x1F, 0xCE, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xCF,
-    0x00, 0x02, 0x03, 0x42, 0x00, 0x17, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4C,
-    0x00, 0x54, 0x00, 0x5C, 0x00, 0x64, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x7A, 0x00, 0x82, 0x00, 0x8A,
-    0x00, 0x92, 0x00, 0x98, 0x00, 0x9E, 0x00, 0xA4, 0x00, 0xAA, 0x00, 0xB2, 0x00, 0xBA, 0x00, 0xC2,
-    0x00, 0xCA, 0x00, 0xD2, 0x1F, 0xC2, 0x00, 0x02, 0x03, 0x00, 0x1F, 0xC4, 0x00, 0x02, 0x03, 0x01,
-    0x1F, 0x92, 0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0x94, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01,
-    0x1F, 0x92, 0x00, 0x03, 0x03, 0x13, 0x03, 0x40, 0x1F, 0x94, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41,
-    0x1F, 0x96, 0x00, 0x03, 0x03, 0x13, 0x03, 0x42, 0x1F, 0x90, 0x00, 0x02, 0x03, 0x13, 0x1F, 0x93,
-    0x00, 0x03, 0x03, 0x14, 0x03, 0x00, 0x1F, 0x95, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x93,
-    0x00, 0x03, 0x03, 0x14, 0x03, 0x40, 0x1F, 0x95, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x97,
-    0x00, 0x03, 0x03, 0x14, 0x03, 0x42, 0x1F, 0x91, 0x00, 0x02, 0x03, 0x14, 0x1F, 0xC2, 0x00, 0x02,
-    0x03, 0x40, 0x1F, 0xC4, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xC7, 0x00, 0x02, 0x03, 0x42, 0x1F, 0x92,
-    0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0x94, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x92,
-    0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0x94, 0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0x96,
-    0x00, 0x03, 0x03, 0x43, 0x03, 0x42, 0x1F, 0x90, 0x00, 0x02, 0x03, 0x43, 0x00, 0x01, 0x00, 0x04,
-    0x1F, 0xC7, 0x00, 0x02, 0x03, 0x45, 0x00, 0x12, 0x00, 0x26, 0x00, 0x2E, 0x00, 0x36, 0x00, 0x3E,
-    0x00, 0x46, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5C, 0x00, 0x64, 0x00, 0x6C, 0x00, 0x74, 0x00, 0x7C,
-    0x00, 0x82, 0x00, 0x8A, 0x00, 0x92, 0x00, 0x9A, 0x00, 0xA2, 0x00, 0xAA, 0x1F, 0x9A, 0x00, 0x03,
-    0x03, 0x13, 0x03, 0x00, 0x1F, 0x9C, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0x9A, 0x00, 0x03,
-    0x03, 0x13, 0x03, 0x40, 0x1F, 0x9C, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0x9E, 0x00, 0x03,
-    0x03, 0x13, 0x03, 0x42, 0x1F, 0x98, 0x00, 0x02, 0x03, 0x13, 0x1F, 0x9B, 0x00, 0x03, 0x03, 0x14,
-    0x03, 0x00, 0x1F, 0x9D, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0x9B, 0x00, 0x03, 0x03, 0x14,
-    0x03, 0x40, 0x1F, 0x9D, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0x9F, 0x00, 0x03, 0x03, 0x14,
-    0x03, 0x42, 0x1F, 0x99, 0x00, 0x02, 0x03, 0x14, 0x1F, 0x9A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00,
-    0x1F, 0x9C, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0x9A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40,
-    0x1F, 0x9C, 0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0x9E, 0x00, 0x03, 0x03, 0x43, 0x03, 0x42,
-    0x1F, 0x98, 0x00, 0x02, 0x03, 0x43, 0x00, 0x17, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x44,
-    0x00, 0x4C, 0x00, 0x54, 0x00, 0x5C, 0x00, 0x64, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x7A, 0x00, 0x82,
-    0x00, 0x8A, 0x00, 0x92, 0x00, 0x98, 0x00, 0x9E, 0x00, 0xA4, 0x00, 0xAA, 0x00, 0xB2, 0x00, 0xBA,
-    0x00, 0xC2, 0x00, 0xCA, 0x00, 0xD2, 0x1F, 0xF2, 0x00, 0x02, 0x03, 0x00, 0x1F, 0xF4, 0x00, 0x02,
-    0x03, 0x01, 0x1F, 0xA2, 0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0xA4, 0x00, 0x03, 0x03, 0x13,
-    0x03, 0x01, 0x1F, 0xA2, 0x00, 0x03, 0x03, 0x13, 0x03, 0x40, 0x1F, 0xA4, 0x00, 0x03, 0x03, 0x13,
-    0x03, 0x41, 0x1F, 0xA6, 0x00, 0x03, 0x03, 0x13, 0x03, 0x42, 0x1F, 0xA0, 0x00, 0x02, 0x03, 0x13,
-    0x1F, 0xA3, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00, 0x1F, 0xA5, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01,
-    0x1F, 0xA3, 0x00, 0x03, 0x03, 0x14, 0x03, 0x40, 0x1F, 0xA5, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41,
-    0x1F, 0xA7, 0x00, 0x03, 0x03, 0x14, 0x03, 0x42, 0x1F, 0xA1, 0x00, 0x02, 0x03, 0x14, 0x1F, 0xF2,
-    0x00, 0x02, 0x03, 0x40, 0x1F, 0xF4, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xF7, 0x00, 0x02, 0x03, 0x42,
-    0x1F, 0xA2, 0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0xA4, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01,
-    0x1F, 0xA2, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0xA4, 0x00, 0x03, 0x03, 0x43, 0x03, 0x41,
-    0x1F, 0xA6, 0x00, 0x03, 0x03, 0x43, 0x03, 0x42, 0x1F, 0xA0, 0x00, 0x02, 0x03, 0x43, 0x00, 0x01,
-    0x00, 0x04, 0x1F, 0xF7, 0x00, 0x02, 0x03, 0x45, 0x00, 0x12, 0x00, 0x26, 0x00, 0x2E, 0x00, 0x36,
-    0x00, 0x3E, 0x00, 0x46, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5C, 0x00, 0x64, 0x00, 0x6C, 0x00, 0x74,
-    0x00, 0x7C, 0x00, 0x82, 0x00, 0x8A, 0x00, 0x92, 0x00, 0x9A, 0x00, 0xA2, 0x00, 0xAA, 0x1F, 0xAA,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0xAA,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0xAE,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x42, 0x1F, 0xA8, 0x00, 0x02, 0x03, 0x13, 0x1F, 0xAB, 0x00, 0x03,
-    0x03, 0x14, 0x03, 0x00, 0x1F, 0xAD, 0x00, 0x03, 0x03, 0x14, 0x03, 0x01, 0x1F, 0xAB, 0x00, 0x03,
-    0x03, 0x14, 0x03, 0x40, 0x1F, 0xAD, 0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0xAF, 0x00, 0x03,
-    0x03, 0x14, 0x03, 0x42, 0x1F, 0xA9, 0x00, 0x02, 0x03, 0x14, 0x1F, 0xAA, 0x00, 0x03, 0x03, 0x43,
-    0x03, 0x00, 0x1F, 0xAC, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x03, 0x03, 0x43,
-    0x03, 0x40, 0x1F, 0xAC, 0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x03, 0x03, 0x43,
-    0x03, 0x42, 0x1F, 0xA8, 0x00, 0x02, 0x03, 0x43, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18,
-    0x00, 0x1E, 0x00, 0x24, 0x1F, 0xDD, 0x00, 0x02, 0x03, 0x00, 0x1F, 0xDE, 0x00, 0x02, 0x03, 0x01,
-    0x1F, 0xDD, 0x00, 0x02, 0x03, 0x40, 0x1F, 0xDE, 0x00, 0x02, 0x03, 0x41, 0x1F, 0xDF, 0x00, 0x02,
-    0x03, 0x42, 0x00, 0x4A, 0x00, 0x96, 0x00, 0x9C, 0x00, 0xA2, 0x00, 0xAC, 0x00, 0xB4, 0x00, 0xBE,
-    0x00, 0xC6, 0x00, 0xD0, 0x00, 0xD8, 0x00, 0xE2, 0x00, 0xEA, 0x00, 0xF4, 0x00, 0xFC, 0x01, 0x06,
-    0x01, 0x10, 0x01, 0x1A, 0x01, 0x24, 0x01, 0x2E, 0x01, 0x36, 0x01, 0x3C, 0x01, 0x46, 0x01, 0x4E,
-    0x01, 0x58, 0x01, 0x60, 0x01, 0x6A, 0x01, 0x72, 0x01, 0x7C, 0x01, 0x84, 0x01, 0x8E, 0x01, 0x96,
-    0x01, 0xA0, 0x01, 0xAA, 0x01, 0xB4, 0x01, 0xBE, 0x01, 0xC8, 0x01, 0xD0, 0x01, 0xD6, 0x01, 0xDC,
-    0x01, 0xE2, 0x01, 0xEC, 0x01, 0xF4, 0x01, 0xFE, 0x02, 0x06, 0x02, 0x10, 0x02, 0x18, 0x02, 0x22,
-    0x02, 0x2A, 0x02, 0x34, 0x02, 0x3C, 0x02, 0x46, 0x02, 0x50, 0x02, 0x5A, 0x02, 0x64, 0x02, 0x6E,
-    0x02, 0x76, 0x02, 0x7C, 0x02, 0x86, 0x02, 0x90, 0x02, 0x9A, 0x02, 0xA4, 0x02, 0xAE, 0x02, 0xB6,
-    0x02, 0xC0, 0x02, 0xCA, 0x02, 0xD4, 0x02, 0xDE, 0x02, 0xE8, 0x02, 0xF0, 0x02, 0xFA, 0x03, 0x04,
-    0x03, 0x0E, 0x03, 0x18, 0x03, 0x22, 0x03, 0x2A, 0x1F, 0xFA, 0x00, 0x02, 0x03, 0x00, 0x03, 0x8F,
-    0x00, 0x02, 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x13, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x6A,
-    0x00, 0x03, 0x03, 0x13, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x13, 0x03, 0x01, 0x03, 0x45,
-    0x1F, 0x6C, 0x00, 0x03, 0x03, 0x13, 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x13, 0x03, 0x40,
-    0x03, 0x45, 0x1F, 0x6A, 0x00, 0x03, 0x03, 0x13, 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x13,
-    0x03, 0x41, 0x03, 0x45, 0x1F, 0x6C, 0x00, 0x03, 0x03, 0x13, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x04,
-    0x03, 0x13, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x6E, 0x00, 0x03, 0x03, 0x13, 0x03, 0x42, 0x1F, 0xAA,
-    0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45,
-    0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x04,
-    0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x04, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42,
-    0x1F, 0xA8, 0x00, 0x03, 0x03, 0x13, 0x03, 0x45, 0x1F, 0x68, 0x00, 0x02, 0x03, 0x13, 0x1F, 0xAB,
-    0x00, 0x04, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x6B, 0x00, 0x03, 0x03, 0x14, 0x03, 0x00,
-    0x1F, 0xAD, 0x00, 0x04, 0x03, 0x14, 0x03, 0x01, 0x03, 0x45, 0x1F, 0x6D, 0x00, 0x03, 0x03, 0x14,
-    0x03, 0x01, 0x1F, 0xAB, 0x00, 0x04, 0x03, 0x14, 0x03, 0x40, 0x03, 0x45, 0x1F, 0x6B, 0x00, 0x03,
-    0x03, 0x14, 0x03, 0x40, 0x1F, 0xAD, 0x00, 0x04, 0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x1F, 0x6D,
-    0x00, 0x03, 0x03, 0x14, 0x03, 0x41, 0x1F, 0xAF, 0x00, 0x04, 0x03, 0x14, 0x03, 0x42, 0x03, 0x45,
-    0x1F, 0x6F, 0x00, 0x03, 0x03, 0x14, 0x03, 0x42, 0x1F, 0xAB, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45,
-    0x03, 0x00, 0x1F, 0xAD, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x01, 0x1F, 0xAB, 0x00, 0x04,
-    0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x1F, 0xAD, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41,
-    0x1F, 0xAF, 0x00, 0x04, 0x03, 0x14, 0x03, 0x45, 0x03, 0x42, 0x1F, 0xA9, 0x00, 0x03, 0x03, 0x14,
-    0x03, 0x45, 0x1F, 0x69, 0x00, 0x02, 0x03, 0x14, 0x1F, 0xFA, 0x00, 0x02, 0x03, 0x40, 0x03, 0x8F,
-    0x00, 0x02, 0x03, 0x41, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x1F, 0x6A,
-    0x00, 0x03, 0x03, 0x43, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45,
-    0x1F, 0x6C, 0x00, 0x03, 0x03, 0x43, 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x43, 0x03, 0x40,
-    0x03, 0x45, 0x1F, 0x6A, 0x00, 0x03, 0x03, 0x43, 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x43,
-    0x03, 0x41, 0x03, 0x45, 0x1F, 0x6C, 0x00, 0x03, 0x03, 0x43, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x04,
-    0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x1F, 0x6E, 0x00, 0x03, 0x03, 0x43, 0x03, 0x42, 0x1F, 0xAA,
-    0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45,
-    0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x04,
-    0x03, 0x43, 0x03, 0x45, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x04, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42,
-    0x1F, 0xA8, 0x00, 0x03, 0x03, 0x43, 0x03, 0x45, 0x1F, 0x68, 0x00, 0x02, 0x03, 0x43, 0x1F, 0xAA,
-    0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13,
-    0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x40, 0x1F, 0xAC, 0x00, 0x04,
-    0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x04, 0x03, 0x45, 0x03, 0x13, 0x03, 0x42,
-    0x1F, 0xA8, 0x00, 0x03, 0x03, 0x45, 0x03, 0x13, 0x1F, 0xAB, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14,
-    0x03, 0x00, 0x1F, 0xAD, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01, 0x1F, 0xAB, 0x00, 0x04,
-    0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x1F, 0xAD, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41,
-    0x1F, 0xAF, 0x00, 0x04, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42, 0x1F, 0xA9, 0x00, 0x03, 0x03, 0x45,
-    0x03, 0x14, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x1F, 0xAC, 0x00, 0x04,
-    0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x1F, 0xAA, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40,
-    0x1F, 0xAC, 0x00, 0x04, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x1F, 0xAE, 0x00, 0x04, 0x03, 0x45,
-    0x03, 0x43, 0x03, 0x42, 0x1F, 0xA8, 0x00, 0x03, 0x03, 0x45, 0x03, 0x43, 0x1F, 0xFC, 0x00, 0x02,
-    0x03, 0x45, 0x00, 0x01, 0x00, 0x75, 0x00, 0xA8, 0x03, 0x91, 0x03, 0x95, 0x03, 0x97, 0x03, 0x99,
-    0x03, 0x9F, 0x03, 0xA1, 0x03, 0xA5, 0x03, 0xA9, 0x03, 0xAC, 0x03, 0xAE, 0x03, 0xB1, 0x03, 0xB5,
-    0x03, 0xB7, 0x03, 0xB9, 0x03, 0xBF, 0x03, 0xC1, 0x03, 0xC5, 0x03, 0xC9, 0x03, 0xCA, 0x03, 0xCB,
-    0x03, 0xCE, 0x03, 0xD2, 0x1F, 0x00, 0x1F, 0x01, 0x1F, 0x02, 0x1F, 0x03, 0x1F, 0x04, 0x1F, 0x05,
-    0x1F, 0x06, 0x1F, 0x07, 0x1F, 0x08, 0x1F, 0x09, 0x1F, 0x0A, 0x1F, 0x0B, 0x1F, 0x0C, 0x1F, 0x0D,
-    0x1F, 0x0E, 0x1F, 0x0F, 0x1F, 0x10, 0x1F, 0x11, 0x1F, 0x18, 0x1F, 0x19, 0x1F, 0x20, 0x1F, 0x21,
-    0x1F, 0x22, 0x1F, 0x23, 0x1F, 0x24, 0x1F, 0x25, 0x1F, 0x26, 0x1F, 0x27, 0x1F, 0x28, 0x1F, 0x29,
-    0x1F, 0x2A, 0x1F, 0x2B, 0x1F, 0x2C, 0x1F, 0x2D, 0x1F, 0x2E, 0x1F, 0x2F, 0x1F, 0x30, 0x1F, 0x31,
-    0x1F, 0x38, 0x1F, 0x39, 0x1F, 0x40, 0x1F, 0x41, 0x1F, 0x48, 0x1F, 0x49, 0x1F, 0x50, 0x1F, 0x51,
-    0x1F, 0x59, 0x1F, 0x60, 0x1F, 0x61, 0x1F, 0x62, 0x1F, 0x63, 0x1F, 0x64, 0x1F, 0x65, 0x1F, 0x66,
-    0x1F, 0x67, 0x1F, 0x68, 0x1F, 0x69, 0x1F, 0x6A, 0x1F, 0x6B, 0x1F, 0x6C, 0x1F, 0x6D, 0x1F, 0x6E,
-    0x1F, 0x6F, 0x1F, 0x70, 0x1F, 0x71, 0x1F, 0x74, 0x1F, 0x75, 0x1F, 0x7C, 0x1F, 0x7D, 0x1F, 0x80,
-    0x1F, 0x81, 0x1F, 0x88, 0x1F, 0x89, 0x1F, 0x90, 0x1F, 0x91, 0x1F, 0x98, 0x1F, 0x99, 0x1F, 0xA0,
-    0x1F, 0xA1, 0x1F, 0xA8, 0x1F, 0xA9, 0x1F, 0xB3, 0x1F, 0xB6, 0x1F, 0xBC, 0x1F, 0xBE, 0x1F, 0xBF,
-    0x1F, 0xC3, 0x1F, 0xC6, 0x1F, 0xCC, 0x1F, 0xF3, 0x1F, 0xF6, 0x1F, 0xFC, 0x1F, 0xFE, 0x21, 0x26,
-    0x00, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, 0x4C, 0x09, 0x66, 0x11, 0x1A, 0x17, 0x08, 0x1C, 0xC2,
-    0x20, 0xBC, 0x24, 0x9E, 0x27, 0x3C, 0x29, 0x7A, 0x2B, 0x42, 0x2D, 0x22, 0x2E, 0xD2, 0x30, 0x80,
-    0x31, 0xE8, 0x33, 0x50, 0x34, 0xB8, 0x35, 0x94, 0x36, 0x70, 0x37, 0x4C, 0x38, 0x1A, 0x38, 0xE8,
-    0x39, 0xB6, 0x3A, 0x68, 0x3B, 0x1A, 0x3B, 0x40, 0x3B, 0x66, 0x3B, 0x8C, 0x3B, 0xB2, 0x3B, 0xD8,
-    0x3B, 0xFE, 0x3C, 0x24, 0x3C, 0x4A, 0x3C, 0x70, 0x3C, 0x96, 0x3C, 0xBC, 0x00, 0x01, 0x07, 0x46,
-    0x00, 0xE8, 0x01, 0xD6, 0x01, 0xDC, 0x01, 0xE2, 0x01, 0xE8, 0x01, 0xEE, 0x01, 0xF4, 0x01, 0xFA,
-    0x02, 0x00, 0x02, 0x06, 0x02, 0x0C, 0x02, 0x12, 0x02, 0x18, 0x02, 0x1E, 0x02, 0x24, 0x02, 0x2A,
-    0x02, 0x30, 0x02, 0x36, 0x02, 0x3C, 0x02, 0x42, 0x02, 0x48, 0x02, 0x4E, 0x02, 0x54, 0x02, 0x5A,
-    0x02, 0x60, 0x02, 0x66, 0x02, 0x6C, 0x02, 0x72, 0x02, 0x78, 0x02, 0x7E, 0x02, 0x84, 0x02, 0x8A,
-    0x02, 0x90, 0x02, 0x96, 0x02, 0x9C, 0x02, 0xA2, 0x02, 0xA8, 0x02, 0xAE, 0x02, 0xB4, 0x02, 0xBA,
-    0x02, 0xC0, 0x02, 0xC6, 0x02, 0xCC, 0x02, 0xD2, 0x02, 0xD8, 0x02, 0xDE, 0x02, 0xE4, 0x02, 0xEA,
-    0x02, 0xF0, 0x02, 0xF6, 0x02, 0xFC, 0x03, 0x02, 0x03, 0x08, 0x03, 0x0E, 0x03, 0x14, 0x03, 0x1A,
-    0x03, 0x20, 0x03, 0x26, 0x03, 0x2C, 0x03, 0x32, 0x03, 0x38, 0x03, 0x3E, 0x03, 0x44, 0x03, 0x4A,
-    0x03, 0x50, 0x03, 0x56, 0x03, 0x5C, 0x03, 0x62, 0x03, 0x68, 0x03, 0x6E, 0x03, 0x74, 0x03, 0x7A,
-    0x03, 0x80, 0x03, 0x86, 0x03, 0x8C, 0x03, 0x92, 0x03, 0x98, 0x03, 0x9E, 0x03, 0xA4, 0x03, 0xAA,
-    0x03, 0xB0, 0x03, 0xB6, 0x03, 0xBC, 0x03, 0xC2, 0x03, 0xC8, 0x03, 0xCE, 0x03, 0xD4, 0x03, 0xDA,
-    0x03, 0xE0, 0x03, 0xE6, 0x03, 0xEC, 0x03, 0xF2, 0x03, 0xF8, 0x03, 0xFE, 0x04, 0x04, 0x04, 0x0A,
-    0x04, 0x10, 0x04, 0x16, 0x04, 0x1C, 0x04, 0x22, 0x04, 0x28, 0x04, 0x2E, 0x04, 0x34, 0x04, 0x3A,
-    0x04, 0x40, 0x04, 0x46, 0x04, 0x4C, 0x04, 0x52, 0x04, 0x58, 0x04, 0x5E, 0x04, 0x64, 0x04, 0x6A,
-    0x04, 0x70, 0x04, 0x76, 0x04, 0x7C, 0x04, 0x82, 0x04, 0x88, 0x04, 0x8E, 0x04, 0x94, 0x04, 0x9A,
-    0x04, 0xA0, 0x04, 0xA6, 0x04, 0xAC, 0x04, 0xB2, 0x04, 0xB8, 0x04, 0xBE, 0x04, 0xC4, 0x04, 0xCA,
-    0x04, 0xD0, 0x04, 0xD6, 0x04, 0xDC, 0x04, 0xE2, 0x04, 0xE8, 0x04, 0xEE, 0x04, 0xF4, 0x04, 0xFA,
-    0x05, 0x00, 0x05, 0x06, 0x05, 0x0C, 0x05, 0x12, 0x05, 0x18, 0x05, 0x1E, 0x05, 0x24, 0x05, 0x2A,
-    0x05, 0x30, 0x05, 0x36, 0x05, 0x3C, 0x05, 0x42, 0x05, 0x48, 0x05, 0x4E, 0x05, 0x54, 0x05, 0x5A,
-    0x05, 0x60, 0x05, 0x66, 0x05, 0x6C, 0x05, 0x72, 0x05, 0x78, 0x05, 0x7E, 0x05, 0x84, 0x05, 0x8A,
-    0x05, 0x90, 0x05, 0x96, 0x05, 0x9C, 0x05, 0xA2, 0x05, 0xA8, 0x05, 0xAE, 0x05, 0xB4, 0x05, 0xBA,
-    0x05, 0xC0, 0x05, 0xC6, 0x05, 0xCC, 0x05, 0xD2, 0x05, 0xD8, 0x05, 0xDE, 0x05, 0xE4, 0x05, 0xEA,
-    0x05, 0xF0, 0x05, 0xF6, 0x05, 0xFC, 0x06, 0x02, 0x06, 0x08, 0x06, 0x0E, 0x06, 0x14, 0x06, 0x1A,
-    0x06, 0x20, 0x06, 0x26, 0x06, 0x2C, 0x06, 0x32, 0x06, 0x38, 0x06, 0x3E, 0x06, 0x44, 0x06, 0x4A,
-    0x06, 0x50, 0x06, 0x56, 0x06, 0x5C, 0x06, 0x62, 0x06, 0x68, 0x06, 0x6E, 0x06, 0x74, 0x06, 0x7A,
-    0x06, 0x80, 0x06, 0x86, 0x06, 0x8C, 0x06, 0x92, 0x06, 0x98, 0x06, 0x9E, 0x06, 0xA4, 0x06, 0xAA,
-    0x06, 0xB0, 0x06, 0xB6, 0x06, 0xBC, 0x06, 0xC2, 0x06, 0xC8, 0x06, 0xCE, 0x06, 0xD4, 0x06, 0xDA,
-    0x06, 0xE0, 0x06, 0xE6, 0x06, 0xEC, 0x06, 0xF2, 0x06, 0xF8, 0x06, 0xFE, 0x07, 0x04, 0x07, 0x0A,
-    0x07, 0x10, 0x07, 0x16, 0x07, 0x1C, 0x07, 0x22, 0x07, 0x28, 0x07, 0x2E, 0x07, 0x34, 0x07, 0x3A,
-    0x07, 0x40, 0x00, 0x02, 0x00, 0xA8, 0x03, 0x01, 0x00, 0x02, 0x03, 0x91, 0x03, 0x01, 0x00, 0x02,
-    0x03, 0x95, 0x03, 0x01, 0x00, 0x02, 0x03, 0x97, 0x03, 0x01, 0x00, 0x02, 0x03, 0x99, 0x03, 0x01,
-    0x00, 0x02, 0x03, 0x9F, 0x03, 0x01, 0x00, 0x02, 0x03, 0xA5, 0x03, 0x01, 0x00, 0x02, 0x03, 0xA9,
-    0x03, 0x01, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x44, 0x00, 0x02, 0x03, 0x99, 0x03, 0x08, 0x00, 0x02,
-    0x03, 0xA5, 0x03, 0x08, 0x00, 0x02, 0x03, 0xB1, 0x03, 0x01, 0x00, 0x02, 0x03, 0xB5, 0x03, 0x01,
-    0x00, 0x02, 0x03, 0xB7, 0x03, 0x01, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x01, 0x00, 0x02, 0x03, 0xC5,
-    0x03, 0x44, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x08, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x08, 0x00, 0x02,
-    0x03, 0xBF, 0x03, 0x01, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x01, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x01,
-    0x00, 0x02, 0x03, 0xD2, 0x03, 0x01, 0x00, 0x02, 0x03, 0xD2, 0x03, 0x08, 0x00, 0x02, 0x03, 0xB1,
-    0x03, 0x13, 0x00, 0x02, 0x03, 0xB1, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x00, 0x03, 0x00, 0x00, 0x02,
-    0x1F, 0x01, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x00, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x01, 0x03, 0x01,
-    0x00, 0x02, 0x1F, 0x00, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x01, 0x03, 0x42, 0x00, 0x02, 0x03, 0x91,
-    0x03, 0x13, 0x00, 0x02, 0x03, 0x91, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x08, 0x03, 0x00, 0x00, 0x02,
-    0x1F, 0x09, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x08, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x09, 0x03, 0x01,
-    0x00, 0x02, 0x1F, 0x08, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x09, 0x03, 0x42, 0x00, 0x02, 0x03, 0xB5,
-    0x03, 0x13, 0x00, 0x02, 0x03, 0xB5, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x10, 0x03, 0x00, 0x00, 0x02,
-    0x1F, 0x11, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x10, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x11, 0x03, 0x01,
-    0x00, 0x02, 0x03, 0x95, 0x03, 0x13, 0x00, 0x02, 0x03, 0x95, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x18,
-    0x03, 0x00, 0x00, 0x02, 0x1F, 0x19, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x18, 0x03, 0x01, 0x00, 0x02,
-    0x1F, 0x19, 0x03, 0x01, 0x00, 0x02, 0x03, 0xB7, 0x03, 0x13, 0x00, 0x02, 0x03, 0xB7, 0x03, 0x14,
-    0x00, 0x02, 0x1F, 0x20, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x21, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x20,
-    0x03, 0x01, 0x00, 0x02, 0x1F, 0x21, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x20, 0x03, 0x42, 0x00, 0x02,
-    0x1F, 0x21, 0x03, 0x42, 0x00, 0x02, 0x03, 0x97, 0x03, 0x13, 0x00, 0x02, 0x03, 0x97, 0x03, 0x14,
-    0x00, 0x02, 0x1F, 0x28, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x29, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x28,
-    0x03, 0x01, 0x00, 0x02, 0x1F, 0x29, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x28, 0x03, 0x42, 0x00, 0x02,
-    0x1F, 0x29, 0x03, 0x42, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x13, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x14,
-    0x00, 0x02, 0x1F, 0x30, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x31, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x30,
-    0x03, 0x01, 0x00, 0x02, 0x1F, 0x31, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x30, 0x03, 0x42, 0x00, 0x02,
-    0x1F, 0x31, 0x03, 0x42, 0x00, 0x02, 0x03, 0x99, 0x03, 0x13, 0x00, 0x02, 0x03, 0x99, 0x03, 0x14,
-    0x00, 0x02, 0x1F, 0x38, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x39, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x38,
-    0x03, 0x01, 0x00, 0x02, 0x1F, 0x39, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x38, 0x03, 0x42, 0x00, 0x02,
-    0x1F, 0x39, 0x03, 0x42, 0x00, 0x02, 0x03, 0xBF, 0x03, 0x13, 0x00, 0x02, 0x03, 0xBF, 0x03, 0x14,
-    0x00, 0x02, 0x1F, 0x40, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x41, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x40,
-    0x03, 0x01, 0x00, 0x02, 0x1F, 0x41, 0x03, 0x01, 0x00, 0x02, 0x03, 0x9F, 0x03, 0x13, 0x00, 0x02,
-    0x03, 0x9F, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x48, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x49, 0x03, 0x00,
-    0x00, 0x02, 0x1F, 0x48, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x49, 0x03, 0x01, 0x00, 0x02, 0x03, 0xC5,
-    0x03, 0x13, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x50, 0x03, 0x00, 0x00, 0x02,
-    0x1F, 0x51, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x50, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x51, 0x03, 0x01,
-    0x00, 0x02, 0x1F, 0x50, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x51, 0x03, 0x42, 0x00, 0x02, 0x03, 0xA5,
-    0x03, 0x14, 0x00, 0x02, 0x1F, 0x59, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x59, 0x03, 0x01, 0x00, 0x02,
-    0x1F, 0x59, 0x03, 0x42, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x13, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x14,
-    0x00, 0x02, 0x1F, 0x60, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x61, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x60,
-    0x03, 0x01, 0x00, 0x02, 0x1F, 0x61, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x60, 0x03, 0x42, 0x00, 0x02,
-    0x1F, 0x61, 0x03, 0x42, 0x00, 0x02, 0x03, 0xA9, 0x03, 0x13, 0x00, 0x02, 0x03, 0xA9, 0x03, 0x14,
-    0x00, 0x02, 0x1F, 0x68, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x69, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x68,
-    0x03, 0x01, 0x00, 0x02, 0x1F, 0x69, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x68, 0x03, 0x42, 0x00, 0x02,
-    0x1F, 0x69, 0x03, 0x42, 0x00, 0x02, 0x03, 0xB1, 0x03, 0x00, 0x00, 0x02, 0x03, 0xB5, 0x03, 0x00,
-    0x00, 0x02, 0x03, 0xB7, 0x03, 0x00, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x00, 0x00, 0x02, 0x03, 0xBF,
-    0x03, 0x00, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x00, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x00, 0x00, 0x02,
-    0x1F, 0x00, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x01, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x02, 0x03, 0x45,
-    0x00, 0x02, 0x1F, 0x03, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x04, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x05,
-    0x03, 0x45, 0x00, 0x02, 0x1F, 0x06, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x07, 0x03, 0x45, 0x00, 0x02,
-    0x1F, 0x08, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x09, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x0A, 0x03, 0x45,
-    0x00, 0x02, 0x1F, 0x0B, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x0C, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x0D,
-    0x03, 0x45, 0x00, 0x02, 0x1F, 0x0E, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x0F, 0x03, 0x45, 0x00, 0x02,
-    0x1F, 0x20, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x21, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x22, 0x03, 0x45,
-    0x00, 0x02, 0x1F, 0x23, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x24, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x25,
-    0x03, 0x45, 0x00, 0x02, 0x1F, 0x26, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x27, 0x03, 0x45, 0x00, 0x02,
-    0x1F, 0x28, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x29, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x2A, 0x03, 0x45,
-    0x00, 0x02, 0x1F, 0x2B, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x2C, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x2D,
-    0x03, 0x45, 0x00, 0x02, 0x1F, 0x2E, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x2F, 0x03, 0x45, 0x00, 0x02,
-    0x1F, 0x60, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x61, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x62, 0x03, 0x45,
-    0x00, 0x02, 0x1F, 0x63, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x64, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x65,
-    0x03, 0x45, 0x00, 0x02, 0x1F, 0x66, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x67, 0x03, 0x45, 0x00, 0x02,
-    0x1F, 0x68, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x69, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x6A, 0x03, 0x45,
-    0x00, 0x02, 0x1F, 0x6B, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x6C, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x6D,
-    0x03, 0x45, 0x00, 0x02, 0x1F, 0x6E, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x6F, 0x03, 0x45, 0x00, 0x02,
-    0x03, 0xB1, 0x03, 0x06, 0x00, 0x02, 0x03, 0xB1, 0x03, 0x04, 0x00, 0x02, 0x1F, 0x70, 0x03, 0x45,
-    0x00, 0x02, 0x03, 0xB1, 0x03, 0x45, 0x00, 0x02, 0x03, 0xAC, 0x03, 0x45, 0x00, 0x02, 0x03, 0xB1,
-    0x03, 0x42, 0x00, 0x02, 0x1F, 0xB3, 0x03, 0x42, 0x00, 0x02, 0x03, 0x91, 0x03, 0x06, 0x00, 0x02,
-    0x03, 0x91, 0x03, 0x04, 0x00, 0x02, 0x03, 0x91, 0x03, 0x00, 0x00, 0x02, 0x03, 0x91, 0x03, 0x45,
-    0x00, 0x02, 0x00, 0xA8, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x74, 0x03, 0x45, 0x00, 0x02, 0x03, 0xB7,
-    0x03, 0x45, 0x00, 0x02, 0x03, 0xAE, 0x03, 0x45, 0x00, 0x02, 0x03, 0xB7, 0x03, 0x42, 0x00, 0x02,
-    0x1F, 0xC3, 0x03, 0x42, 0x00, 0x02, 0x03, 0x95, 0x03, 0x00, 0x00, 0x02, 0x03, 0x97, 0x03, 0x00,
-    0x00, 0x02, 0x03, 0x97, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xBF, 0x03, 0x00, 0x00, 0x02, 0x1F, 0xBF,
-    0x03, 0x01, 0x00, 0x02, 0x1F, 0xBF, 0x03, 0x42, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x06, 0x00, 0x02,
-    0x03, 0xB9, 0x03, 0x04, 0x00, 0x02, 0x03, 0xCA, 0x03, 0x00, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x42,
-    0x00, 0x02, 0x03, 0xCA, 0x03, 0x42, 0x00, 0x02, 0x03, 0x99, 0x03, 0x06, 0x00, 0x02, 0x03, 0x99,
-    0x03, 0x04, 0x00, 0x02, 0x03, 0x99, 0x03, 0x00, 0x00, 0x02, 0x1F, 0xFE, 0x03, 0x00, 0x00, 0x02,
-    0x1F, 0xFE, 0x03, 0x01, 0x00, 0x02, 0x1F, 0xFE, 0x03, 0x42, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x06,
-    0x00, 0x02, 0x03, 0xC5, 0x03, 0x04, 0x00, 0x02, 0x03, 0xCB, 0x03, 0x00, 0x00, 0x02, 0x03, 0xC1,
-    0x03, 0x13, 0x00, 0x02, 0x03, 0xC1, 0x03, 0x14, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x42, 0x00, 0x02,
-    0x03, 0xCB, 0x03, 0x42, 0x00, 0x02, 0x03, 0xA5, 0x03, 0x06, 0x00, 0x02, 0x03, 0xA5, 0x03, 0x04,
-    0x00, 0x02, 0x03, 0xA5, 0x03, 0x00, 0x00, 0x02, 0x03, 0xA1, 0x03, 0x14, 0x00, 0x02, 0x00, 0xA8,
-    0x03, 0x00, 0x00, 0x02, 0x1F, 0x7C, 0x03, 0x45, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x45, 0x00, 0x02,
-    0x03, 0xCE, 0x03, 0x45, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x42, 0x00, 0x02, 0x1F, 0xF3, 0x03, 0x42,
-    0x00, 0x02, 0x03, 0x9F, 0x03, 0x00, 0x00, 0x02, 0x03, 0xA9, 0x03, 0x00, 0x00, 0x02, 0x03, 0xA9,
-    0x03, 0x45, 0x00, 0x01, 0x00, 0xE8, 0x03, 0x85, 0x03, 0x86, 0x03, 0x88, 0x03, 0x89, 0x03, 0x8A,
-    0x03, 0x8C, 0x03, 0x8E, 0x03, 0x8F, 0x03, 0x90, 0x03, 0xAA, 0x03, 0xAB, 0x03, 0xAC, 0x03, 0xAD,
-    0x03, 0xAE, 0x03, 0xAF, 0x03, 0xB0, 0x03, 0xCA, 0x03, 0xCB, 0x03, 0xCC, 0x03, 0xCD, 0x03, 0xCE,
-    0x03, 0xD3, 0x03, 0xD4, 0x1F, 0x00, 0x1F, 0x01, 0x1F, 0x02, 0x1F, 0x03, 0x1F, 0x04, 0x1F, 0x05,
-    0x1F, 0x06, 0x1F, 0x07, 0x1F, 0x08, 0x1F, 0x09, 0x1F, 0x0A, 0x1F, 0x0B, 0x1F, 0x0C, 0x1F, 0x0D,
-    0x1F, 0x0E, 0x1F, 0x0F, 0x1F, 0x10, 0x1F, 0x11, 0x1F, 0x12, 0x1F, 0x13, 0x1F, 0x14, 0x1F, 0x15,
-    0x1F, 0x18, 0x1F, 0x19, 0x1F, 0x1A, 0x1F, 0x1B, 0x1F, 0x1C, 0x1F, 0x1D, 0x1F, 0x20, 0x1F, 0x21,
-    0x1F, 0x22, 0x1F, 0x23, 0x1F, 0x24, 0x1F, 0x25, 0x1F, 0x26, 0x1F, 0x27, 0x1F, 0x28, 0x1F, 0x29,
-    0x1F, 0x2A, 0x1F, 0x2B, 0x1F, 0x2C, 0x1F, 0x2D, 0x1F, 0x2E, 0x1F, 0x2F, 0x1F, 0x30, 0x1F, 0x31,
-    0x1F, 0x32, 0x1F, 0x33, 0x1F, 0x34, 0x1F, 0x35, 0x1F, 0x36, 0x1F, 0x37, 0x1F, 0x38, 0x1F, 0x39,
-    0x1F, 0x3A, 0x1F, 0x3B, 0x1F, 0x3C, 0x1F, 0x3D, 0x1F, 0x3E, 0x1F, 0x3F, 0x1F, 0x40, 0x1F, 0x41,
-    0x1F, 0x42, 0x1F, 0x43, 0x1F, 0x44, 0x1F, 0x45, 0x1F, 0x48, 0x1F, 0x49, 0x1F, 0x4A, 0x1F, 0x4B,
-    0x1F, 0x4C, 0x1F, 0x4D, 0x1F, 0x50, 0x1F, 0x51, 0x1F, 0x52, 0x1F, 0x53, 0x1F, 0x54, 0x1F, 0x55,
-    0x1F, 0x56, 0x1F, 0x57, 0x1F, 0x59, 0x1F, 0x5B, 0x1F, 0x5D, 0x1F, 0x5F, 0x1F, 0x60, 0x1F, 0x61,
-    0x1F, 0x62, 0x1F, 0x63, 0x1F, 0x64, 0x1F, 0x65, 0x1F, 0x66, 0x1F, 0x67, 0x1F, 0x68, 0x1F, 0x69,
-    0x1F, 0x6A, 0x1F, 0x6B, 0x1F, 0x6C, 0x1F, 0x6D, 0x1F, 0x6E, 0x1F, 0x6F, 0x1F, 0x70, 0x1F, 0x72,
-    0x1F, 0x74, 0x1F, 0x76, 0x1F, 0x78, 0x1F, 0x7A, 0x1F, 0x7C, 0x1F, 0x80, 0x1F, 0x81, 0x1F, 0x82,
-    0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x87, 0x1F, 0x88, 0x1F, 0x89, 0x1F, 0x8A,
-    0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x8F, 0x1F, 0x90, 0x1F, 0x91, 0x1F, 0x92,
-    0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96, 0x1F, 0x97, 0x1F, 0x98, 0x1F, 0x99, 0x1F, 0x9A,
-    0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0x9F, 0x1F, 0xA0, 0x1F, 0xA1, 0x1F, 0xA2,
-    0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA7, 0x1F, 0xA8, 0x1F, 0xA9, 0x1F, 0xAA,
-    0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x1F, 0xAF, 0x1F, 0xB0, 0x1F, 0xB1, 0x1F, 0xB2,
-    0x1F, 0xB3, 0x1F, 0xB4, 0x1F, 0xB6, 0x1F, 0xB7, 0x1F, 0xB8, 0x1F, 0xB9, 0x1F, 0xBA, 0x1F, 0xBC,
-    0x1F, 0xC1, 0x1F, 0xC2, 0x1F, 0xC3, 0x1F, 0xC4, 0x1F, 0xC6, 0x1F, 0xC7, 0x1F, 0xC8, 0x1F, 0xCA,
-    0x1F, 0xCC, 0x1F, 0xCD, 0x1F, 0xCE, 0x1F, 0xCF, 0x1F, 0xD0, 0x1F, 0xD1, 0x1F, 0xD2, 0x1F, 0xD6,
-    0x1F, 0xD7, 0x1F, 0xD8, 0x1F, 0xD9, 0x1F, 0xDA, 0x1F, 0xDD, 0x1F, 0xDE, 0x1F, 0xDF, 0x1F, 0xE0,
-    0x1F, 0xE1, 0x1F, 0xE2, 0x1F, 0xE4, 0x1F, 0xE5, 0x1F, 0xE6, 0x1F, 0xE7, 0x1F, 0xE8, 0x1F, 0xE9,
-    0x1F, 0xEA, 0x1F, 0xEC, 0x1F, 0xED, 0x1F, 0xF2, 0x1F, 0xF3, 0x1F, 0xF4, 0x1F, 0xF6, 0x1F, 0xF7,
-    0x1F, 0xF8, 0x1F, 0xFA, 0x1F, 0xFC, 0x00, 0x01, 0x06, 0x30, 0x00, 0xC0, 0x01, 0x86, 0x01, 0x8C,
-    0x01, 0x92, 0x01, 0x98, 0x01, 0x9E, 0x01, 0xA4, 0x01, 0xAA, 0x01, 0xB0, 0x01, 0xB6, 0x01, 0xBC,
-    0x01, 0xC2, 0x01, 0xC8, 0x01, 0xCE, 0x01, 0xD4, 0x01, 0xDA, 0x01, 0xE0, 0x01, 0xE6, 0x01, 0xEC,
-    0x01, 0xF2, 0x01, 0xF8, 0x01, 0xFE, 0x02, 0x04, 0x02, 0x0A, 0x02, 0x10, 0x02, 0x16, 0x02, 0x1E,
-    0x02, 0x26, 0x02, 0x2C, 0x02, 0x32, 0x02, 0x38, 0x02, 0x3E, 0x02, 0x44, 0x02, 0x4C, 0x02, 0x54,
-    0x02, 0x5A, 0x02, 0x60, 0x02, 0x66, 0x02, 0x6C, 0x02, 0x72, 0x02, 0x78, 0x02, 0x7E, 0x02, 0x84,
-    0x02, 0x8A, 0x02, 0x90, 0x02, 0x96, 0x02, 0x9C, 0x02, 0xA2, 0x02, 0xA8, 0x02, 0xAE, 0x02, 0xB6,
-    0x02, 0xBE, 0x02, 0xC4, 0x02, 0xCA, 0x02, 0xD0, 0x02, 0xD6, 0x02, 0xDC, 0x02, 0xE4, 0x02, 0xEC,
-    0x02, 0xF2, 0x02, 0xF8, 0x02, 0xFE, 0x03, 0x04, 0x03, 0x0A, 0x03, 0x10, 0x03, 0x18, 0x03, 0x20,
-    0x03, 0x26, 0x03, 0x2C, 0x03, 0x32, 0x03, 0x38, 0x03, 0x3E, 0x03, 0x46, 0x03, 0x4E, 0x03, 0x54,
-    0x03, 0x5A, 0x03, 0x60, 0x03, 0x66, 0x03, 0x6C, 0x03, 0x72, 0x03, 0x78, 0x03, 0x7E, 0x03, 0x84,
-    0x03, 0x8A, 0x03, 0x90, 0x03, 0x96, 0x03, 0x9C, 0x03, 0xA2, 0x03, 0xA8, 0x03, 0xB0, 0x03, 0xB8,
-    0x03, 0xBE, 0x03, 0xC4, 0x03, 0xCC, 0x03, 0xD2, 0x03, 0xD8, 0x03, 0xDE, 0x03, 0xE4, 0x03, 0xEA,
-    0x03, 0xF2, 0x03, 0xFA, 0x04, 0x00, 0x04, 0x06, 0x04, 0x0C, 0x04, 0x12, 0x04, 0x18, 0x04, 0x1E,
-    0x04, 0x26, 0x04, 0x2E, 0x04, 0x34, 0x04, 0x3A, 0x04, 0x40, 0x04, 0x46, 0x04, 0x4C, 0x04, 0x52,
-    0x04, 0x58, 0x04, 0x5E, 0x04, 0x64, 0x04, 0x6A, 0x04, 0x70, 0x04, 0x76, 0x04, 0x7C, 0x04, 0x82,
-    0x04, 0x88, 0x04, 0x8E, 0x04, 0x94, 0x04, 0x9A, 0x04, 0xA0, 0x04, 0xA6, 0x04, 0xAC, 0x04, 0xB2,
-    0x04, 0xB8, 0x04, 0xBE, 0x04, 0xC4, 0x04, 0xCA, 0x04, 0xD0, 0x04, 0xD6, 0x04, 0xDC, 0x04, 0xE2,
-    0x04, 0xE8, 0x04, 0xEE, 0x04, 0xF4, 0x04, 0xFA, 0x05, 0x00, 0x05, 0x06, 0x05, 0x0C, 0x05, 0x12,
-    0x05, 0x18, 0x05, 0x1E, 0x05, 0x24, 0x05, 0x2A, 0x05, 0x30, 0x05, 0x36, 0x05, 0x3C, 0x05, 0x42,
-    0x05, 0x48, 0x05, 0x4E, 0x05, 0x54, 0x05, 0x5A, 0x05, 0x60, 0x05, 0x66, 0x05, 0x6C, 0x05, 0x72,
-    0x05, 0x78, 0x05, 0x7E, 0x05, 0x84, 0x05, 0x8A, 0x05, 0x90, 0x05, 0x96, 0x05, 0x9C, 0x05, 0xA2,
-    0x05, 0xA8, 0x05, 0xAE, 0x05, 0xB4, 0x05, 0xBA, 0x05, 0xC0, 0x05, 0xC6, 0x05, 0xCC, 0x05, 0xD2,
-    0x05, 0xDA, 0x05, 0xE0, 0x05, 0xE6, 0x05, 0xEC, 0x05, 0xF2, 0x05, 0xF8, 0x06, 0x00, 0x06, 0x06,
-    0x06, 0x0C, 0x06, 0x12, 0x06, 0x18, 0x06, 0x1E, 0x06, 0x24, 0x06, 0x2A, 0x00, 0x02, 0x00, 0xA8,
-    0x03, 0x41, 0x00, 0x02, 0x03, 0x91, 0x03, 0x41, 0x00, 0x02, 0x03, 0x95, 0x03, 0x41, 0x00, 0x02,
-    0x03, 0x97, 0x03, 0x41, 0x00, 0x02, 0x03, 0x99, 0x03, 0x41, 0x00, 0x02, 0x03, 0x9F, 0x03, 0x41,
-    0x00, 0x02, 0x03, 0xA5, 0x03, 0x41, 0x00, 0x02, 0x03, 0xA9, 0x03, 0x41, 0x00, 0x02, 0x03, 0xCA,
-    0x03, 0x01, 0x00, 0x02, 0x03, 0xB1, 0x03, 0x41, 0x00, 0x02, 0x03, 0xB5, 0x03, 0x41, 0x00, 0x02,
-    0x03, 0xB7, 0x03, 0x41, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x41, 0x00, 0x02, 0x03, 0xCB, 0x03, 0x01,
-    0x00, 0x02, 0x1F, 0xBE, 0x03, 0x08, 0x00, 0x02, 0x03, 0xBF, 0x03, 0x41, 0x00, 0x02, 0x03, 0xC5,
-    0x03, 0x41, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x41, 0x00, 0x02, 0x03, 0xD2, 0x03, 0x41, 0x00, 0x02,
-    0x03, 0xB1, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x00, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x01, 0x03, 0x40,
-    0x00, 0x02, 0x1F, 0x00, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x01, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB1,
-    0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x42, 0x00, 0x02, 0x03, 0x91,
-    0x03, 0x43, 0x00, 0x02, 0x1F, 0x08, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x09, 0x03, 0x40, 0x00, 0x02,
-    0x1F, 0x08, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x09, 0x03, 0x41, 0x00, 0x03, 0x03, 0x91, 0x03, 0x13,
-    0x03, 0x42, 0x00, 0x03, 0x03, 0x91, 0x03, 0x14, 0x03, 0x42, 0x00, 0x02, 0x03, 0xB5, 0x03, 0x43,
-    0x00, 0x02, 0x1F, 0x10, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x11, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x10,
-    0x03, 0x41, 0x00, 0x02, 0x1F, 0x11, 0x03, 0x41, 0x00, 0x02, 0x03, 0x95, 0x03, 0x43, 0x00, 0x02,
-    0x1F, 0x18, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x19, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x18, 0x03, 0x41,
-    0x00, 0x02, 0x1F, 0x19, 0x03, 0x41, 0x00, 0x02, 0x03, 0xB7, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x20,
-    0x03, 0x40, 0x00, 0x02, 0x1F, 0x21, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x20, 0x03, 0x41, 0x00, 0x02,
-    0x1F, 0x21, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB7,
-    0x03, 0x14, 0x03, 0x42, 0x00, 0x02, 0x03, 0x97, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x28, 0x03, 0x40,
-    0x00, 0x02, 0x1F, 0x29, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x28, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x29,
-    0x03, 0x41, 0x00, 0x03, 0x03, 0x97, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0x97, 0x03, 0x14,
-    0x03, 0x42, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x43, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x14, 0x00, 0x02,
-    0x1F, 0x30, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x31, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x30, 0x03, 0x41,
-    0x00, 0x02, 0x1F, 0x31, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03,
-    0x03, 0xB9, 0x03, 0x14, 0x03, 0x42, 0x00, 0x02, 0x03, 0x99, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x38,
-    0x03, 0x40, 0x00, 0x02, 0x1F, 0x39, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x38, 0x03, 0x41, 0x00, 0x02,
-    0x1F, 0x39, 0x03, 0x41, 0x00, 0x03, 0x03, 0x99, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0x99,
-    0x03, 0x14, 0x03, 0x42, 0x00, 0x02, 0x03, 0xBF, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x40, 0x03, 0x40,
-    0x00, 0x02, 0x1F, 0x41, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x40, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x41,
-    0x03, 0x41, 0x00, 0x02, 0x03, 0x9F, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x48, 0x03, 0x40, 0x00, 0x02,
-    0x1F, 0x49, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x48, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x49, 0x03, 0x41,
-    0x00, 0x02, 0x03, 0xC5, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x50, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x51,
-    0x03, 0x40, 0x00, 0x02, 0x1F, 0x50, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x51, 0x03, 0x41, 0x00, 0x03,
-    0x03, 0xC5, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x14, 0x03, 0x42, 0x00, 0x02,
-    0x1F, 0x59, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x59, 0x03, 0x41, 0x00, 0x03, 0x03, 0xA5, 0x03, 0x14,
-    0x03, 0x42, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x43, 0x00, 0x02, 0x1F, 0x60, 0x03, 0x40, 0x00, 0x02,
-    0x1F, 0x61, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x60, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x61, 0x03, 0x41,
-    0x00, 0x03, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x42,
-    0x00, 0x02, 0x03, 0xA9, 0x03, 0x43, 0x00, 0x02, 0x21, 0x26, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x68,
-    0x03, 0x40, 0x00, 0x02, 0x1F, 0x69, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x68, 0x03, 0x41, 0x00, 0x02,
-    0x1F, 0x69, 0x03, 0x41, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0xA9,
-    0x03, 0x14, 0x03, 0x42, 0x00, 0x02, 0x03, 0xB1, 0x03, 0x40, 0x00, 0x02, 0x03, 0xB5, 0x03, 0x40,
-    0x00, 0x02, 0x03, 0xB7, 0x03, 0x40, 0x00, 0x02, 0x03, 0xB9, 0x03, 0x40, 0x00, 0x02, 0x03, 0xBF,
-    0x03, 0x40, 0x00, 0x02, 0x03, 0xC5, 0x03, 0x40, 0x00, 0x02, 0x03, 0xC9, 0x03, 0x40, 0x00, 0x02,
-    0x1F, 0xB3, 0x03, 0x13, 0x00, 0x02, 0x1F, 0xB3, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x80, 0x03, 0x00,
-    0x00, 0x02, 0x1F, 0x81, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x80, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x81,
-    0x03, 0x01, 0x00, 0x02, 0x1F, 0x80, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x81, 0x03, 0x42, 0x00, 0x02,
-    0x1F, 0xBC, 0x03, 0x13, 0x00, 0x02, 0x1F, 0xBC, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x88, 0x03, 0x00,
-    0x00, 0x02, 0x1F, 0x89, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x88, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x89,
-    0x03, 0x01, 0x00, 0x02, 0x1F, 0x88, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x89, 0x03, 0x42, 0x00, 0x02,
-    0x1F, 0xC3, 0x03, 0x13, 0x00, 0x02, 0x1F, 0xC3, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x90, 0x03, 0x00,
-    0x00, 0x02, 0x1F, 0x91, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x90, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x91,
-    0x03, 0x01, 0x00, 0x02, 0x1F, 0x90, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x91, 0x03, 0x42, 0x00, 0x02,
-    0x1F, 0xCC, 0x03, 0x13, 0x00, 0x02, 0x1F, 0xCC, 0x03, 0x14, 0x00, 0x02, 0x1F, 0x98, 0x03, 0x00,
-    0x00, 0x02, 0x1F, 0x99, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x98, 0x03, 0x01, 0x00, 0x02, 0x1F, 0x99,
-    0x03, 0x01, 0x00, 0x02, 0x1F, 0x98, 0x03, 0x42, 0x00, 0x02, 0x1F, 0x99, 0x03, 0x42, 0x00, 0x02,
-    0x1F, 0xF3, 0x03, 0x13, 0x00, 0x02, 0x1F, 0xF3, 0x03, 0x14, 0x00, 0x02, 0x1F, 0xA0, 0x03, 0x00,
-    0x00, 0x02, 0x1F, 0xA1, 0x03, 0x00, 0x00, 0x02, 0x1F, 0xA0, 0x03, 0x01, 0x00, 0x02, 0x1F, 0xA1,
-    0x03, 0x01, 0x00, 0x02, 0x1F, 0xA0, 0x03, 0x42, 0x00, 0x02, 0x1F, 0xA1, 0x03, 0x42, 0x00, 0x02,
-    0x1F, 0xFC, 0x03, 0x13, 0x00, 0x02, 0x1F, 0xFC, 0x03, 0x14, 0x00, 0x02, 0x1F, 0xA8, 0x03, 0x00,
-    0x00, 0x02, 0x1F, 0xA9, 0x03, 0x00, 0x00, 0x02, 0x1F, 0xA8, 0x03, 0x01, 0x00, 0x02, 0x1F, 0xA9,
-    0x03, 0x01, 0x00, 0x02, 0x1F, 0xA8, 0x03, 0x42, 0x00, 0x02, 0x1F, 0xA9, 0x03, 0x42, 0x00, 0x02,
-    0x1F, 0xB3, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x71, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xB6, 0x03, 0x45,
-    0x00, 0x02, 0x03, 0x91, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xC3, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x75,
-    0x03, 0x45, 0x00, 0x02, 0x1F, 0xC6, 0x03, 0x45, 0x00, 0x02, 0x03, 0x95, 0x03, 0x40, 0x00, 0x02,
-    0x03, 0x97, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xBF, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xBF, 0x03, 0x41,
-    0x00, 0x02, 0x1F, 0xBE, 0x03, 0x06, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x04, 0x00, 0x02, 0x03, 0xCA,
-    0x03, 0x40, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x08, 0x03, 0x42,
-    0x00, 0x02, 0x03, 0x99, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xFE, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xFE,
-    0x03, 0x41, 0x00, 0x02, 0x03, 0xCB, 0x03, 0x40, 0x00, 0x02, 0x03, 0xC1, 0x03, 0x43, 0x00, 0x03,
-    0x03, 0xC5, 0x03, 0x08, 0x03, 0x42, 0x00, 0x02, 0x03, 0xA5, 0x03, 0x40, 0x00, 0x02, 0x00, 0xA8,
-    0x03, 0x40, 0x00, 0x02, 0x1F, 0xF3, 0x03, 0x00, 0x00, 0x02, 0x1F, 0x7D, 0x03, 0x45, 0x00, 0x02,
-    0x1F, 0xF6, 0x03, 0x45, 0x00, 0x02, 0x03, 0x9F, 0x03, 0x40, 0x00, 0x02, 0x03, 0xA9, 0x03, 0x40,
-    0x00, 0x02, 0x21, 0x26, 0x03, 0x45, 0x00, 0x01, 0x00, 0xC0, 0x03, 0x85, 0x03, 0x86, 0x03, 0x88,
-    0x03, 0x89, 0x03, 0x8A, 0x03, 0x8C, 0x03, 0x8E, 0x03, 0x8F, 0x03, 0x90, 0x03, 0xAC, 0x03, 0xAD,
-    0x03, 0xAE, 0x03, 0xAF, 0x03, 0xB0, 0x03, 0xCA, 0x03, 0xCC, 0x03, 0xCD, 0x03, 0xCE, 0x03, 0xD3,
-    0x1F, 0x00, 0x1F, 0x02, 0x1F, 0x03, 0x1F, 0x04, 0x1F, 0x05, 0x1F, 0x06, 0x1F, 0x07, 0x1F, 0x08,
-    0x1F, 0x0A, 0x1F, 0x0B, 0x1F, 0x0C, 0x1F, 0x0D, 0x1F, 0x0E, 0x1F, 0x0F, 0x1F, 0x10, 0x1F, 0x12,
-    0x1F, 0x13, 0x1F, 0x14, 0x1F, 0x15, 0x1F, 0x18, 0x1F, 0x1A, 0x1F, 0x1B, 0x1F, 0x1C, 0x1F, 0x1D,
-    0x1F, 0x20, 0x1F, 0x22, 0x1F, 0x23, 0x1F, 0x24, 0x1F, 0x25, 0x1F, 0x26, 0x1F, 0x27, 0x1F, 0x28,
-    0x1F, 0x2A, 0x1F, 0x2B, 0x1F, 0x2C, 0x1F, 0x2D, 0x1F, 0x2E, 0x1F, 0x2F, 0x1F, 0x30, 0x1F, 0x31,
-    0x1F, 0x32, 0x1F, 0x33, 0x1F, 0x34, 0x1F, 0x35, 0x1F, 0x36, 0x1F, 0x37, 0x1F, 0x38, 0x1F, 0x3A,
-    0x1F, 0x3B, 0x1F, 0x3C, 0x1F, 0x3D, 0x1F, 0x3E, 0x1F, 0x3F, 0x1F, 0x40, 0x1F, 0x42, 0x1F, 0x43,
-    0x1F, 0x44, 0x1F, 0x45, 0x1F, 0x48, 0x1F, 0x4A, 0x1F, 0x4B, 0x1F, 0x4C, 0x1F, 0x4D, 0x1F, 0x50,
-    0x1F, 0x52, 0x1F, 0x53, 0x1F, 0x54, 0x1F, 0x55, 0x1F, 0x56, 0x1F, 0x57, 0x1F, 0x5B, 0x1F, 0x5D,
-    0x1F, 0x5F, 0x1F, 0x60, 0x1F, 0x62, 0x1F, 0x63, 0x1F, 0x64, 0x1F, 0x65, 0x1F, 0x66, 0x1F, 0x67,
-    0x1F, 0x68, 0x1F, 0x69, 0x1F, 0x6A, 0x1F, 0x6B, 0x1F, 0x6C, 0x1F, 0x6D, 0x1F, 0x6E, 0x1F, 0x6F,
-    0x1F, 0x70, 0x1F, 0x72, 0x1F, 0x74, 0x1F, 0x76, 0x1F, 0x78, 0x1F, 0x7A, 0x1F, 0x7C, 0x1F, 0x80,
-    0x1F, 0x81, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x87, 0x1F, 0x88,
-    0x1F, 0x89, 0x1F, 0x8A, 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x8F, 0x1F, 0x90,
-    0x1F, 0x91, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96, 0x1F, 0x97, 0x1F, 0x98,
-    0x1F, 0x99, 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0x9F, 0x1F, 0xA0,
-    0x1F, 0xA1, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA7, 0x1F, 0xA8,
-    0x1F, 0xA9, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x1F, 0xAF, 0x1F, 0xB2,
-    0x1F, 0xB4, 0x1F, 0xB7, 0x1F, 0xBA, 0x1F, 0xC2, 0x1F, 0xC4, 0x1F, 0xC7, 0x1F, 0xC8, 0x1F, 0xCA,
-    0x1F, 0xCD, 0x1F, 0xCE, 0x1F, 0xD0, 0x1F, 0xD1, 0x1F, 0xD2, 0x1F, 0xD6, 0x1F, 0xD7, 0x1F, 0xDA,
-    0x1F, 0xDD, 0x1F, 0xDE, 0x1F, 0xE2, 0x1F, 0xE4, 0x1F, 0xE7, 0x1F, 0xEA, 0x1F, 0xED, 0x1F, 0xF2,
-    0x1F, 0xF4, 0x1F, 0xF7, 0x1F, 0xF8, 0x1F, 0xFA, 0x1F, 0xFC, 0x00, 0x01, 0x04, 0xE0, 0x00, 0x85,
-    0x01, 0x10, 0x01, 0x16, 0x01, 0x1C, 0x01, 0x22, 0x01, 0x28, 0x01, 0x30, 0x01, 0x38, 0x01, 0x40,
-    0x01, 0x48, 0x01, 0x50, 0x01, 0x58, 0x01, 0x60, 0x01, 0x68, 0x01, 0x70, 0x01, 0x78, 0x01, 0x80,
-    0x01, 0x88, 0x01, 0x90, 0x01, 0x98, 0x01, 0xA0, 0x01, 0xA8, 0x01, 0xB0, 0x01, 0xB8, 0x01, 0xC0,
-    0x01, 0xC8, 0x01, 0xD0, 0x01, 0xD8, 0x01, 0xE0, 0x01, 0xE8, 0x01, 0xF0, 0x01, 0xF8, 0x02, 0x00,
-    0x02, 0x08, 0x02, 0x0E, 0x02, 0x16, 0x02, 0x1E, 0x02, 0x26, 0x02, 0x2E, 0x02, 0x36, 0x02, 0x3E,
-    0x02, 0x46, 0x02, 0x4E, 0x02, 0x56, 0x02, 0x5E, 0x02, 0x66, 0x02, 0x6E, 0x02, 0x76, 0x02, 0x7E,
-    0x02, 0x86, 0x02, 0x8E, 0x02, 0x96, 0x02, 0x9E, 0x02, 0xA6, 0x02, 0xAE, 0x02, 0xB6, 0x02, 0xBE,
-    0x02, 0xC6, 0x02, 0xCE, 0x02, 0xD6, 0x02, 0xDE, 0x02, 0xE6, 0x02, 0xEE, 0x02, 0xF6, 0x02, 0xFE,
-    0x03, 0x06, 0x03, 0x0C, 0x03, 0x14, 0x03, 0x1C, 0x03, 0x24, 0x03, 0x2C, 0x03, 0x34, 0x03, 0x3C,
-    0x03, 0x42, 0x03, 0x48, 0x03, 0x50, 0x03, 0x56, 0x03, 0x5C, 0x03, 0x62, 0x03, 0x68, 0x03, 0x70,
-    0x03, 0x78, 0x03, 0x7E, 0x03, 0x86, 0x03, 0x8C, 0x03, 0x92, 0x03, 0x98, 0x03, 0x9E, 0x03, 0xA6,
-    0x03, 0xAE, 0x03, 0xB4, 0x03, 0xBC, 0x03, 0xC2, 0x03, 0xC8, 0x03, 0xCE, 0x03, 0xD4, 0x03, 0xDC,
-    0x03, 0xE4, 0x03, 0xEA, 0x03, 0xF2, 0x03, 0xF8, 0x03, 0xFE, 0x04, 0x04, 0x04, 0x0A, 0x04, 0x12,
-    0x04, 0x1A, 0x04, 0x20, 0x04, 0x28, 0x04, 0x2E, 0x04, 0x34, 0x04, 0x3A, 0x04, 0x40, 0x04, 0x48,
-    0x04, 0x50, 0x04, 0x56, 0x04, 0x5E, 0x04, 0x64, 0x04, 0x6A, 0x04, 0x70, 0x04, 0x76, 0x04, 0x7E,
-    0x04, 0x86, 0x04, 0x8C, 0x04, 0x92, 0x04, 0x9A, 0x04, 0xA0, 0x04, 0xA6, 0x04, 0xAE, 0x04, 0xB6,
-    0x04, 0xBE, 0x04, 0xC6, 0x04, 0xCC, 0x04, 0xD2, 0x04, 0xDA, 0x00, 0x02, 0x21, 0x26, 0x03, 0x01,
-    0x00, 0x02, 0x03, 0xCA, 0x03, 0x41, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x01, 0x00, 0x02, 0x03, 0xCB,
-    0x03, 0x41, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x14,
-    0x03, 0x00, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x14,
-    0x03, 0x01, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x42, 0x00, 0x03, 0x03, 0x91, 0x03, 0x13,
-    0x03, 0x00, 0x00, 0x03, 0x03, 0x91, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0x91, 0x03, 0x13,
-    0x03, 0x01, 0x00, 0x03, 0x03, 0x91, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0x91, 0x03, 0x43,
-    0x03, 0x42, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x14,
-    0x03, 0x00, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x14,
-    0x03, 0x01, 0x00, 0x03, 0x03, 0x95, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0x95, 0x03, 0x14,
-    0x03, 0x00, 0x00, 0x03, 0x03, 0x95, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0x95, 0x03, 0x14,
-    0x03, 0x01, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x14,
-    0x03, 0x00, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x14,
-    0x03, 0x01, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x42, 0x00, 0x03, 0x03, 0x97, 0x03, 0x13,
-    0x03, 0x00, 0x00, 0x03, 0x03, 0x97, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0x97, 0x03, 0x13,
-    0x03, 0x01, 0x00, 0x03, 0x03, 0x97, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0x97, 0x03, 0x43,
-    0x03, 0x42, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x13, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x13, 0x03, 0x00,
-    0x00, 0x03, 0x03, 0xB9, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x13, 0x03, 0x01,
-    0x00, 0x03, 0x03, 0xB9, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x43, 0x03, 0x42,
-    0x00, 0x03, 0x1F, 0xBE, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x03, 0x99, 0x03, 0x13, 0x03, 0x00,
-    0x00, 0x03, 0x03, 0x99, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0x99, 0x03, 0x13, 0x03, 0x01,
-    0x00, 0x03, 0x03, 0x99, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0x99, 0x03, 0x43, 0x03, 0x42,
-    0x00, 0x03, 0x03, 0xBF, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0xBF, 0x03, 0x14, 0x03, 0x00,
-    0x00, 0x03, 0x03, 0xBF, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0xBF, 0x03, 0x14, 0x03, 0x01,
-    0x00, 0x03, 0x03, 0x9F, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0x9F, 0x03, 0x14, 0x03, 0x00,
-    0x00, 0x03, 0x03, 0x9F, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0x9F, 0x03, 0x14, 0x03, 0x01,
-    0x00, 0x03, 0x03, 0xC5, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x14, 0x03, 0x00,
-    0x00, 0x03, 0x03, 0xC5, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x14, 0x03, 0x01,
-    0x00, 0x03, 0x03, 0xC5, 0x03, 0x43, 0x03, 0x42, 0x00, 0x03, 0x03, 0xA5, 0x03, 0x14, 0x03, 0x00,
-    0x00, 0x03, 0x03, 0xA5, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x00,
-    0x00, 0x03, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x01,
-    0x00, 0x03, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x42,
-    0x00, 0x02, 0x21, 0x26, 0x03, 0x13, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03,
-    0x03, 0xA9, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03,
-    0x03, 0xA9, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x42, 0x00, 0x03,
-    0x21, 0x26, 0x03, 0x14, 0x03, 0x42, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x00, 0x00, 0x02, 0x1F, 0xB3,
-    0x03, 0x43, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x80, 0x03, 0x40,
-    0x00, 0x02, 0x1F, 0x81, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x80, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x81,
-    0x03, 0x41, 0x00, 0x03, 0x1F, 0x00, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x01, 0x03, 0x42,
-    0x03, 0x45, 0x00, 0x02, 0x1F, 0xBC, 0x03, 0x43, 0x00, 0x03, 0x03, 0x91, 0x03, 0x14, 0x03, 0x45,
-    0x00, 0x02, 0x1F, 0x88, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x89, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x88,
-    0x03, 0x41, 0x00, 0x02, 0x1F, 0x89, 0x03, 0x41, 0x00, 0x03, 0x1F, 0x08, 0x03, 0x42, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x09, 0x03, 0x42, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xC3, 0x03, 0x43, 0x00, 0x03,
-    0x03, 0xB7, 0x03, 0x14, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x90, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x91,
-    0x03, 0x40, 0x00, 0x02, 0x1F, 0x90, 0x03, 0x41, 0x00, 0x02, 0x1F, 0x91, 0x03, 0x41, 0x00, 0x03,
-    0x1F, 0x20, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x21, 0x03, 0x42, 0x03, 0x45, 0x00, 0x02,
-    0x1F, 0xCC, 0x03, 0x43, 0x00, 0x03, 0x03, 0x97, 0x03, 0x14, 0x03, 0x45, 0x00, 0x02, 0x1F, 0x98,
-    0x03, 0x40, 0x00, 0x02, 0x1F, 0x99, 0x03, 0x40, 0x00, 0x02, 0x1F, 0x98, 0x03, 0x41, 0x00, 0x02,
-    0x1F, 0x99, 0x03, 0x41, 0x00, 0x03, 0x1F, 0x28, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x29,
-    0x03, 0x42, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xF3, 0x03, 0x43, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x14,
-    0x03, 0x45, 0x00, 0x02, 0x1F, 0xA0, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xA1, 0x03, 0x40, 0x00, 0x02,
-    0x1F, 0xA0, 0x03, 0x41, 0x00, 0x02, 0x1F, 0xA1, 0x03, 0x41, 0x00, 0x03, 0x1F, 0x60, 0x03, 0x42,
-    0x03, 0x45, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x42, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xFC, 0x03, 0x43,
-    0x00, 0x03, 0x03, 0xA9, 0x03, 0x14, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xA8, 0x03, 0x40, 0x00, 0x02,
-    0x1F, 0xA9, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xA8, 0x03, 0x41, 0x00, 0x02, 0x1F, 0xA9, 0x03, 0x41,
-    0x00, 0x03, 0x1F, 0x68, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x69, 0x03, 0x42, 0x03, 0x45,
-    0x00, 0x02, 0x1F, 0xB3, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xB3, 0x03, 0x01, 0x00, 0x03, 0x03, 0xB1,
-    0x03, 0x42, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xC3, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xC3, 0x03, 0x01,
-    0x00, 0x03, 0x03, 0xB7, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x08, 0x03, 0x00,
-    0x00, 0x03, 0x1F, 0xBE, 0x03, 0x08, 0x03, 0x42, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x08, 0x03, 0x00,
-    0x00, 0x02, 0x1F, 0xF3, 0x03, 0x40, 0x00, 0x02, 0x1F, 0xF3, 0x03, 0x01, 0x00, 0x03, 0x03, 0xC9,
-    0x03, 0x42, 0x03, 0x45, 0x00, 0x02, 0x21, 0x26, 0x03, 0x00, 0x00, 0x01, 0x00, 0x85, 0x03, 0x8F,
-    0x03, 0x90, 0x03, 0xAF, 0x03, 0xB0, 0x1F, 0x02, 0x1F, 0x03, 0x1F, 0x04, 0x1F, 0x05, 0x1F, 0x06,
-    0x1F, 0x0A, 0x1F, 0x0B, 0x1F, 0x0C, 0x1F, 0x0D, 0x1F, 0x0E, 0x1F, 0x12, 0x1F, 0x13, 0x1F, 0x14,
-    0x1F, 0x15, 0x1F, 0x1A, 0x1F, 0x1B, 0x1F, 0x1C, 0x1F, 0x1D, 0x1F, 0x22, 0x1F, 0x23, 0x1F, 0x24,
-    0x1F, 0x25, 0x1F, 0x26, 0x1F, 0x2A, 0x1F, 0x2B, 0x1F, 0x2C, 0x1F, 0x2D, 0x1F, 0x2E, 0x1F, 0x30,
-    0x1F, 0x32, 0x1F, 0x33, 0x1F, 0x34, 0x1F, 0x35, 0x1F, 0x36, 0x1F, 0x37, 0x1F, 0x3A, 0x1F, 0x3B,
-    0x1F, 0x3C, 0x1F, 0x3D, 0x1F, 0x3E, 0x1F, 0x42, 0x1F, 0x43, 0x1F, 0x44, 0x1F, 0x45, 0x1F, 0x4A,
-    0x1F, 0x4B, 0x1F, 0x4C, 0x1F, 0x4D, 0x1F, 0x52, 0x1F, 0x53, 0x1F, 0x54, 0x1F, 0x55, 0x1F, 0x56,
-    0x1F, 0x5B, 0x1F, 0x5D, 0x1F, 0x62, 0x1F, 0x63, 0x1F, 0x64, 0x1F, 0x65, 0x1F, 0x66, 0x1F, 0x68,
-    0x1F, 0x6A, 0x1F, 0x6B, 0x1F, 0x6C, 0x1F, 0x6D, 0x1F, 0x6E, 0x1F, 0x6F, 0x1F, 0x76, 0x1F, 0x80,
-    0x1F, 0x81, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x87, 0x1F, 0x88,
-    0x1F, 0x89, 0x1F, 0x8A, 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x8F, 0x1F, 0x90,
-    0x1F, 0x91, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96, 0x1F, 0x97, 0x1F, 0x98,
-    0x1F, 0x99, 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0x9F, 0x1F, 0xA0,
-    0x1F, 0xA1, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA7, 0x1F, 0xA8,
-    0x1F, 0xA9, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x1F, 0xAF, 0x1F, 0xB2,
-    0x1F, 0xB4, 0x1F, 0xB7, 0x1F, 0xC2, 0x1F, 0xC4, 0x1F, 0xC7, 0x1F, 0xD2, 0x1F, 0xD7, 0x1F, 0xE2,
-    0x1F, 0xF2, 0x1F, 0xF4, 0x1F, 0xF7, 0x1F, 0xFA, 0x00, 0x01, 0x04, 0xC0, 0x00, 0x7B, 0x00, 0xFC,
-    0x01, 0x02, 0x01, 0x08, 0x01, 0x0E, 0x01, 0x16, 0x01, 0x1E, 0x01, 0x26, 0x01, 0x2E, 0x01, 0x36,
-    0x01, 0x3E, 0x01, 0x46, 0x01, 0x4E, 0x01, 0x56, 0x01, 0x5E, 0x01, 0x66, 0x01, 0x6E, 0x01, 0x76,
-    0x01, 0x7E, 0x01, 0x86, 0x01, 0x8E, 0x01, 0x96, 0x01, 0x9E, 0x01, 0xA6, 0x01, 0xAE, 0x01, 0xB6,
-    0x01, 0xBE, 0x01, 0xC6, 0x01, 0xCE, 0x01, 0xD6, 0x01, 0xDC, 0x01, 0xE4, 0x01, 0xEC, 0x01, 0xF4,
-    0x01, 0xFC, 0x02, 0x04, 0x02, 0x0C, 0x02, 0x14, 0x02, 0x1C, 0x02, 0x24, 0x02, 0x2C, 0x02, 0x34,
-    0x02, 0x3C, 0x02, 0x44, 0x02, 0x4C, 0x02, 0x54, 0x02, 0x5C, 0x02, 0x64, 0x02, 0x6C, 0x02, 0x74,
-    0x02, 0x7C, 0x02, 0x84, 0x02, 0x8C, 0x02, 0x94, 0x02, 0x9C, 0x02, 0xA4, 0x02, 0xAC, 0x02, 0xB4,
-    0x02, 0xBA, 0x02, 0xC2, 0x02, 0xCA, 0x02, 0xD2, 0x02, 0xDA, 0x02, 0xE2, 0x02, 0xE8, 0x02, 0xF0,
-    0x02, 0xF8, 0x03, 0x00, 0x03, 0x08, 0x03, 0x10, 0x03, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x30,
-    0x03, 0x38, 0x03, 0x40, 0x03, 0x48, 0x03, 0x50, 0x03, 0x58, 0x03, 0x60, 0x03, 0x68, 0x03, 0x70,
-    0x03, 0x78, 0x03, 0x80, 0x03, 0x88, 0x03, 0x90, 0x03, 0x98, 0x03, 0xA0, 0x03, 0xA8, 0x03, 0xB0,
-    0x03, 0xB8, 0x03, 0xC0, 0x03, 0xC8, 0x03, 0xD0, 0x03, 0xD8, 0x03, 0xE0, 0x03, 0xE8, 0x03, 0xF0,
-    0x03, 0xF8, 0x04, 0x00, 0x04, 0x08, 0x04, 0x10, 0x04, 0x18, 0x04, 0x20, 0x04, 0x28, 0x04, 0x30,
-    0x04, 0x38, 0x04, 0x40, 0x04, 0x48, 0x04, 0x50, 0x04, 0x58, 0x04, 0x60, 0x04, 0x68, 0x04, 0x70,
-    0x04, 0x76, 0x04, 0x7E, 0x04, 0x86, 0x04, 0x8C, 0x04, 0x94, 0x04, 0x9C, 0x04, 0xA4, 0x04, 0xAC,
-    0x04, 0xB2, 0x04, 0xBA, 0x00, 0x02, 0x21, 0x26, 0x03, 0x41, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x44,
-    0x00, 0x02, 0x1F, 0xBE, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x08, 0x03, 0x01, 0x00, 0x03,
-    0x03, 0xB1, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03,
-    0x03, 0xB1, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03,
-    0x03, 0x91, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0x91, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03,
-    0x03, 0x91, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0x91, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03,
-    0x03, 0xB5, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03,
-    0x03, 0xB5, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03,
-    0x03, 0x95, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0x95, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03,
-    0x03, 0x95, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0x95, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03,
-    0x03, 0xB7, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03,
-    0x03, 0xB7, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03,
-    0x03, 0x97, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0x97, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03,
-    0x03, 0x97, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0x97, 0x03, 0x14, 0x03, 0x41, 0x00, 0x02,
-    0x1F, 0xBE, 0x03, 0x43, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB9,
-    0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB9,
-    0x03, 0x14, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x03, 0x99,
-    0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0x99, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0x99,
-    0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0x99, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03, 0x03, 0xBF,
-    0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xBF, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0xBF,
-    0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xBF, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03, 0x03, 0x9F,
-    0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0x9F, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0x9F,
-    0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0x9F, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC5,
-    0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC5,
-    0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03, 0x03, 0xA5,
-    0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0xA5, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC9,
-    0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC9,
-    0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x41, 0x00, 0x02, 0x21, 0x26,
-    0x03, 0x43, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x14,
-    0x03, 0x40, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x14,
-    0x03, 0x41, 0x00, 0x03, 0x21, 0x26, 0x03, 0x13, 0x03, 0x42, 0x00, 0x02, 0x1F, 0xBE, 0x03, 0x40,
-    0x00, 0x03, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x45, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x14,
-    0x00, 0x03, 0x1F, 0x00, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x01, 0x03, 0x00, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x00, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x01, 0x03, 0x01, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x00, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0x01, 0x03, 0x45, 0x03, 0x42,
-    0x00, 0x03, 0x03, 0x91, 0x03, 0x13, 0x03, 0x45, 0x00, 0x03, 0x03, 0x91, 0x03, 0x45, 0x03, 0x14,
-    0x00, 0x03, 0x1F, 0x08, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x00, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x08, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x01, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x08, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x45, 0x03, 0x42,
-    0x00, 0x03, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x45, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x14,
-    0x00, 0x03, 0x1F, 0x20, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x21, 0x03, 0x00, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x20, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x21, 0x03, 0x01, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x20, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0x21, 0x03, 0x45, 0x03, 0x42,
-    0x00, 0x03, 0x03, 0x97, 0x03, 0x13, 0x03, 0x45, 0x00, 0x03, 0x03, 0x97, 0x03, 0x45, 0x03, 0x14,
-    0x00, 0x03, 0x1F, 0x28, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x00, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x28, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x01, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x28, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x45, 0x03, 0x42,
-    0x00, 0x03, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x45, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x14,
-    0x00, 0x03, 0x1F, 0x60, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x00, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x60, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x01, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x60, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x45, 0x03, 0x42,
-    0x00, 0x03, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x45, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x14,
-    0x00, 0x03, 0x1F, 0x68, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x69, 0x03, 0x00, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x68, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x69, 0x03, 0x01, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x68, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0x69, 0x03, 0x45, 0x03, 0x42,
-    0x00, 0x03, 0x03, 0xB1, 0x03, 0x00, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xB3, 0x03, 0x41, 0x00, 0x03,
-    0x03, 0xB1, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x00, 0x03, 0x45, 0x00, 0x02,
-    0x1F, 0xC3, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB9,
-    0x03, 0x08, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x08, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC9,
-    0x03, 0x00, 0x03, 0x45, 0x00, 0x02, 0x1F, 0xF3, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x45,
-    0x03, 0x42, 0x00, 0x02, 0x21, 0x26, 0x03, 0x40, 0x00, 0x01, 0x00, 0x7B, 0x03, 0x8F, 0x03, 0x90,
-    0x03, 0xAF, 0x03, 0xB0, 0x1F, 0x02, 0x1F, 0x03, 0x1F, 0x04, 0x1F, 0x05, 0x1F, 0x0A, 0x1F, 0x0B,
-    0x1F, 0x0C, 0x1F, 0x0D, 0x1F, 0x12, 0x1F, 0x13, 0x1F, 0x14, 0x1F, 0x15, 0x1F, 0x1A, 0x1F, 0x1B,
-    0x1F, 0x1C, 0x1F, 0x1D, 0x1F, 0x22, 0x1F, 0x23, 0x1F, 0x24, 0x1F, 0x25, 0x1F, 0x2A, 0x1F, 0x2B,
-    0x1F, 0x2C, 0x1F, 0x2D, 0x1F, 0x30, 0x1F, 0x32, 0x1F, 0x33, 0x1F, 0x34, 0x1F, 0x35, 0x1F, 0x36,
-    0x1F, 0x3A, 0x1F, 0x3B, 0x1F, 0x3C, 0x1F, 0x3D, 0x1F, 0x42, 0x1F, 0x43, 0x1F, 0x44, 0x1F, 0x45,
-    0x1F, 0x4A, 0x1F, 0x4B, 0x1F, 0x4C, 0x1F, 0x4D, 0x1F, 0x52, 0x1F, 0x53, 0x1F, 0x54, 0x1F, 0x55,
-    0x1F, 0x5B, 0x1F, 0x5D, 0x1F, 0x62, 0x1F, 0x63, 0x1F, 0x64, 0x1F, 0x65, 0x1F, 0x68, 0x1F, 0x6A,
-    0x1F, 0x6B, 0x1F, 0x6C, 0x1F, 0x6D, 0x1F, 0x6E, 0x1F, 0x76, 0x1F, 0x80, 0x1F, 0x81, 0x1F, 0x82,
-    0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x87, 0x1F, 0x88, 0x1F, 0x89, 0x1F, 0x8A,
-    0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x8F, 0x1F, 0x90, 0x1F, 0x91, 0x1F, 0x92,
-    0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96, 0x1F, 0x97, 0x1F, 0x98, 0x1F, 0x99, 0x1F, 0x9A,
-    0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0x9F, 0x1F, 0xA0, 0x1F, 0xA1, 0x1F, 0xA2,
-    0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA7, 0x1F, 0xA8, 0x1F, 0xA9, 0x1F, 0xAA,
-    0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x1F, 0xAF, 0x1F, 0xB2, 0x1F, 0xB4, 0x1F, 0xB7,
-    0x1F, 0xC2, 0x1F, 0xC4, 0x1F, 0xC7, 0x1F, 0xD2, 0x1F, 0xE2, 0x1F, 0xF2, 0x1F, 0xF4, 0x1F, 0xF7,
-    0x1F, 0xFA, 0x00, 0x01, 0x03, 0x4E, 0x00, 0x54, 0x00, 0xAE, 0x00, 0xB6, 0x00, 0xBE, 0x00, 0xC6,
-    0x00, 0xCE, 0x00, 0xD6, 0x00, 0xDE, 0x00, 0xE6, 0x00, 0xEE, 0x00, 0xF6, 0x00, 0xFE, 0x01, 0x06,
-    0x01, 0x0E, 0x01, 0x16, 0x01, 0x1E, 0x01, 0x26, 0x01, 0x2E, 0x01, 0x36, 0x01, 0x3E, 0x01, 0x46,
-    0x01, 0x4E, 0x01, 0x56, 0x01, 0x5E, 0x01, 0x66, 0x01, 0x6E, 0x01, 0x76, 0x01, 0x7E, 0x01, 0x86,
-    0x01, 0x8E, 0x01, 0x96, 0x01, 0x9E, 0x01, 0xA6, 0x01, 0xAE, 0x01, 0xB6, 0x01, 0xBE, 0x01, 0xC6,
-    0x01, 0xCE, 0x01, 0xD6, 0x01, 0xDE, 0x01, 0xE6, 0x01, 0xEE, 0x01, 0xF6, 0x01, 0xFE, 0x02, 0x06,
-    0x02, 0x0E, 0x02, 0x16, 0x02, 0x1E, 0x02, 0x26, 0x02, 0x2E, 0x02, 0x36, 0x02, 0x3E, 0x02, 0x46,
-    0x02, 0x4E, 0x02, 0x56, 0x02, 0x5E, 0x02, 0x66, 0x02, 0x6E, 0x02, 0x76, 0x02, 0x7E, 0x02, 0x86,
-    0x02, 0x8E, 0x02, 0x96, 0x02, 0x9E, 0x02, 0xA6, 0x02, 0xAE, 0x02, 0xB6, 0x02, 0xBE, 0x02, 0xC6,
-    0x02, 0xCE, 0x02, 0xD6, 0x02, 0xDE, 0x02, 0xE6, 0x02, 0xEE, 0x02, 0xF6, 0x02, 0xFE, 0x03, 0x06,
-    0x03, 0x0E, 0x03, 0x16, 0x03, 0x1E, 0x03, 0x26, 0x03, 0x2E, 0x03, 0x36, 0x03, 0x3E, 0x03, 0x46,
-    0x00, 0x03, 0x03, 0xB9, 0x03, 0x08, 0x03, 0x01, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x08, 0x03, 0x41,
-    0x00, 0x03, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x01,
-    0x00, 0x03, 0x03, 0x91, 0x03, 0x43, 0x03, 0x00, 0x00, 0x03, 0x03, 0x91, 0x03, 0x43, 0x03, 0x01,
-    0x00, 0x03, 0x03, 0xB5, 0x03, 0x43, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x43, 0x03, 0x01,
-    0x00, 0x03, 0x03, 0x95, 0x03, 0x43, 0x03, 0x00, 0x00, 0x03, 0x03, 0x95, 0x03, 0x43, 0x03, 0x01,
-    0x00, 0x03, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x01,
-    0x00, 0x03, 0x03, 0x97, 0x03, 0x43, 0x03, 0x00, 0x00, 0x03, 0x03, 0x97, 0x03, 0x43, 0x03, 0x01,
-    0x00, 0x03, 0x03, 0xB9, 0x03, 0x43, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x14, 0x03, 0x00,
-    0x00, 0x03, 0x03, 0xB9, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x14, 0x03, 0x01,
-    0x00, 0x03, 0x1F, 0xBE, 0x03, 0x43, 0x03, 0x42, 0x00, 0x03, 0x03, 0x99, 0x03, 0x43, 0x03, 0x00,
-    0x00, 0x03, 0x03, 0x99, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x03, 0xBF, 0x03, 0x43, 0x03, 0x00,
-    0x00, 0x03, 0x03, 0xBF, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x03, 0x9F, 0x03, 0x43, 0x03, 0x00,
-    0x00, 0x03, 0x03, 0x9F, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x43, 0x03, 0x00,
-    0x00, 0x03, 0x03, 0xC5, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x00,
-    0x00, 0x03, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x00,
-    0x00, 0x03, 0x21, 0x26, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x01,
-    0x00, 0x03, 0x21, 0x26, 0x03, 0x14, 0x03, 0x01, 0x00, 0x03, 0x21, 0x26, 0x03, 0x43, 0x03, 0x42,
-    0x00, 0x03, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x00, 0x03, 0x40, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x01, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x00, 0x03, 0x41, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x01, 0x03, 0x41, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x13, 0x03, 0x42,
-    0x00, 0x03, 0x1F, 0xB3, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x03, 0x91, 0x03, 0x43, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x08, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x40, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x08, 0x03, 0x41, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x41, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0xBC, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x14, 0x03, 0x42,
-    0x00, 0x03, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x20, 0x03, 0x40, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x21, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x20, 0x03, 0x41, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x21, 0x03, 0x41, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x13, 0x03, 0x42,
-    0x00, 0x03, 0x1F, 0xC3, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x03, 0x97, 0x03, 0x43, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x28, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x40, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x28, 0x03, 0x41, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x41, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0xCC, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x14, 0x03, 0x42,
-    0x00, 0x03, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x60, 0x03, 0x40, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x61, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x60, 0x03, 0x41, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x61, 0x03, 0x41, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x13, 0x03, 0x42,
-    0x00, 0x03, 0x1F, 0xF3, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x45,
-    0x00, 0x03, 0x21, 0x26, 0x03, 0x14, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x68, 0x03, 0x40, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x69, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0x68, 0x03, 0x41, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0x69, 0x03, 0x41, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x13, 0x03, 0x42,
-    0x00, 0x03, 0x1F, 0xFC, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x40, 0x03, 0x45,
-    0x00, 0x03, 0x03, 0xB1, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x40, 0x03, 0x45,
-    0x00, 0x03, 0x03, 0xB7, 0x03, 0x01, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x08, 0x03, 0x00,
-    0x00, 0x03, 0x03, 0xC9, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x01, 0x03, 0x45,
-    0x00, 0x01, 0x00, 0x54, 0x03, 0x90, 0x03, 0xB0, 0x1F, 0x02, 0x1F, 0x04, 0x1F, 0x0A, 0x1F, 0x0C,
-    0x1F, 0x12, 0x1F, 0x14, 0x1F, 0x1A, 0x1F, 0x1C, 0x1F, 0x22, 0x1F, 0x24, 0x1F, 0x2A, 0x1F, 0x2C,
-    0x1F, 0x32, 0x1F, 0x33, 0x1F, 0x34, 0x1F, 0x35, 0x1F, 0x36, 0x1F, 0x3A, 0x1F, 0x3C, 0x1F, 0x42,
-    0x1F, 0x44, 0x1F, 0x4A, 0x1F, 0x4C, 0x1F, 0x52, 0x1F, 0x54, 0x1F, 0x62, 0x1F, 0x64, 0x1F, 0x6A,
-    0x1F, 0x6B, 0x1F, 0x6C, 0x1F, 0x6D, 0x1F, 0x6E, 0x1F, 0x80, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84,
-    0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x87, 0x1F, 0x88, 0x1F, 0x8A, 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D,
-    0x1F, 0x8E, 0x1F, 0x8F, 0x1F, 0x90, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96,
-    0x1F, 0x97, 0x1F, 0x98, 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0x9F,
-    0x1F, 0xA0, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA7, 0x1F, 0xA8,
-    0x1F, 0xA9, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x1F, 0xAF, 0x1F, 0xB2,
-    0x1F, 0xB4, 0x1F, 0xC2, 0x1F, 0xC4, 0x1F, 0xD2, 0x1F, 0xF2, 0x1F, 0xF4, 0x00, 0x01, 0x03, 0x3C,
-    0x00, 0x51, 0x00, 0xA8, 0x00, 0xB0, 0x00, 0xB8, 0x00, 0xC0, 0x00, 0xC8, 0x00, 0xD0, 0x00, 0xD8,
-    0x00, 0xE0, 0x00, 0xE8, 0x00, 0xF0, 0x00, 0xF8, 0x01, 0x00, 0x01, 0x08, 0x01, 0x10, 0x01, 0x18,
-    0x01, 0x20, 0x01, 0x28, 0x01, 0x30, 0x01, 0x38, 0x01, 0x40, 0x01, 0x48, 0x01, 0x50, 0x01, 0x58,
-    0x01, 0x60, 0x01, 0x68, 0x01, 0x70, 0x01, 0x78, 0x01, 0x80, 0x01, 0x88, 0x01, 0x90, 0x01, 0x98,
-    0x01, 0xA0, 0x01, 0xA8, 0x01, 0xB0, 0x01, 0xB8, 0x01, 0xC0, 0x01, 0xC8, 0x01, 0xD0, 0x01, 0xDA,
-    0x01, 0xE2, 0x01, 0xEA, 0x01, 0xF2, 0x01, 0xFA, 0x02, 0x02, 0x02, 0x0A, 0x02, 0x14, 0x02, 0x1C,
-    0x02, 0x24, 0x02, 0x2C, 0x02, 0x34, 0x02, 0x3C, 0x02, 0x44, 0x02, 0x4E, 0x02, 0x56, 0x02, 0x5E,
-    0x02, 0x66, 0x02, 0x6E, 0x02, 0x76, 0x02, 0x7E, 0x02, 0x88, 0x02, 0x90, 0x02, 0x98, 0x02, 0xA0,
-    0x02, 0xA8, 0x02, 0xB0, 0x02, 0xB8, 0x02, 0xC2, 0x02, 0xCA, 0x02, 0xD2, 0x02, 0xDA, 0x02, 0xE2,
-    0x02, 0xEA, 0x02, 0xF2, 0x02, 0xFA, 0x03, 0x04, 0x03, 0x0C, 0x03, 0x14, 0x03, 0x1C, 0x03, 0x24,
-    0x03, 0x2C, 0x03, 0x34, 0x00, 0x03, 0x03, 0xB9, 0x03, 0x08, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB1,
-    0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x03, 0x91,
-    0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x03, 0x91, 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB5,
-    0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB5, 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x03, 0x95,
-    0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x03, 0x95, 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB7,
-    0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x03, 0x97,
-    0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x03, 0x97, 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB9,
-    0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB9,
-    0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03, 0x03, 0x99,
-    0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x03, 0x99, 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x03, 0xBF,
-    0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x03, 0xBF, 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x03, 0x9F,
-    0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x03, 0x9F, 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC5,
-    0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC5, 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC9,
-    0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x03, 0xA9,
-    0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x21, 0x26, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x03, 0xA9,
-    0x03, 0x43, 0x03, 0x41, 0x00, 0x03, 0x21, 0x26, 0x03, 0x14, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB1,
-    0x03, 0x45, 0x03, 0x13, 0x00, 0x03, 0x1F, 0x00, 0x03, 0x45, 0x03, 0x00, 0x00, 0x03, 0x1F, 0x01,
-    0x03, 0x45, 0x03, 0x00, 0x00, 0x03, 0x1F, 0x00, 0x03, 0x45, 0x03, 0x01, 0x00, 0x03, 0x1F, 0x01,
-    0x03, 0x45, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04, 0x03, 0xB1,
-    0x03, 0x14, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x03, 0x91, 0x03, 0x45, 0x03, 0x13, 0x00, 0x03,
-    0x1F, 0x08, 0x03, 0x45, 0x03, 0x00, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x45, 0x03, 0x00, 0x00, 0x03,
-    0x1F, 0x08, 0x03, 0x45, 0x03, 0x01, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x45, 0x03, 0x01, 0x00, 0x03,
-    0x1F, 0xBC, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04, 0x03, 0x91, 0x03, 0x14, 0x03, 0x42, 0x03, 0x45,
-    0x00, 0x03, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x13, 0x00, 0x03, 0x1F, 0x20, 0x03, 0x45, 0x03, 0x00,
-    0x00, 0x03, 0x1F, 0x21, 0x03, 0x45, 0x03, 0x00, 0x00, 0x03, 0x1F, 0x20, 0x03, 0x45, 0x03, 0x01,
-    0x00, 0x03, 0x1F, 0x21, 0x03, 0x45, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x43, 0x03, 0x42,
-    0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x03, 0x97, 0x03, 0x45,
-    0x03, 0x13, 0x00, 0x03, 0x1F, 0x28, 0x03, 0x45, 0x03, 0x00, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x45,
-    0x03, 0x00, 0x00, 0x03, 0x1F, 0x28, 0x03, 0x45, 0x03, 0x01, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x45,
-    0x03, 0x01, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04, 0x03, 0x97, 0x03, 0x14,
-    0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x13, 0x00, 0x03, 0x1F, 0x60,
-    0x03, 0x45, 0x03, 0x00, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x45, 0x03, 0x00, 0x00, 0x03, 0x1F, 0x60,
-    0x03, 0x45, 0x03, 0x01, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x45, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xF3,
-    0x03, 0x43, 0x03, 0x42, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03,
-    0x03, 0xA9, 0x03, 0x45, 0x03, 0x13, 0x00, 0x03, 0x21, 0x26, 0x03, 0x45, 0x03, 0x14, 0x00, 0x03,
-    0x1F, 0x68, 0x03, 0x45, 0x03, 0x00, 0x00, 0x03, 0x1F, 0x69, 0x03, 0x45, 0x03, 0x00, 0x00, 0x03,
-    0x1F, 0x68, 0x03, 0x45, 0x03, 0x01, 0x00, 0x03, 0x1F, 0x69, 0x03, 0x45, 0x03, 0x01, 0x00, 0x03,
-    0x1F, 0xFC, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x14, 0x03, 0x42, 0x03, 0x45,
-    0x00, 0x03, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x41, 0x03, 0x45,
-    0x00, 0x03, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x00, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x41, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0xBE, 0x03, 0x08, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x00,
-    0x00, 0x03, 0x03, 0xC9, 0x03, 0x41, 0x03, 0x45, 0x00, 0x01, 0x00, 0x51, 0x03, 0x90, 0x1F, 0x02,
-    0x1F, 0x04, 0x1F, 0x0A, 0x1F, 0x0C, 0x1F, 0x12, 0x1F, 0x14, 0x1F, 0x1A, 0x1F, 0x1C, 0x1F, 0x22,
-    0x1F, 0x24, 0x1F, 0x2A, 0x1F, 0x2C, 0x1F, 0x32, 0x1F, 0x33, 0x1F, 0x34, 0x1F, 0x35, 0x1F, 0x3A,
-    0x1F, 0x3C, 0x1F, 0x42, 0x1F, 0x44, 0x1F, 0x4A, 0x1F, 0x4C, 0x1F, 0x52, 0x1F, 0x54, 0x1F, 0x62,
-    0x1F, 0x64, 0x1F, 0x6A, 0x1F, 0x6B, 0x1F, 0x6C, 0x1F, 0x6D, 0x1F, 0x80, 0x1F, 0x82, 0x1F, 0x83,
-    0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x87, 0x1F, 0x88, 0x1F, 0x8A, 0x1F, 0x8B, 0x1F, 0x8C,
-    0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x8F, 0x1F, 0x90, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95,
-    0x1F, 0x96, 0x1F, 0x97, 0x1F, 0x98, 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E,
-    0x1F, 0x9F, 0x1F, 0xA0, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA7,
-    0x1F, 0xA8, 0x1F, 0xA9, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x1F, 0xAF,
-    0x1F, 0xB2, 0x1F, 0xB4, 0x1F, 0xC2, 0x1F, 0xC4, 0x1F, 0xD2, 0x1F, 0xF2, 0x1F, 0xF4, 0x00, 0x01,
-    0x02, 0x30, 0x00, 0x35, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00, 0x90, 0x00, 0x98,
-    0x00, 0xA0, 0x00, 0xA8, 0x00, 0xB0, 0x00, 0xB8, 0x00, 0xC0, 0x00, 0xCA, 0x00, 0xD4, 0x00, 0xDC,
-    0x00, 0xE4, 0x00, 0xEC, 0x00, 0xF4, 0x00, 0xFC, 0x01, 0x06, 0x01, 0x10, 0x01, 0x18, 0x01, 0x20,
-    0x01, 0x28, 0x01, 0x30, 0x01, 0x38, 0x01, 0x42, 0x01, 0x4C, 0x01, 0x54, 0x01, 0x5C, 0x01, 0x64,
-    0x01, 0x6C, 0x01, 0x74, 0x01, 0x7E, 0x01, 0x88, 0x01, 0x90, 0x01, 0x98, 0x01, 0xA0, 0x01, 0xA8,
-    0x01, 0xB0, 0x01, 0xBA, 0x01, 0xC4, 0x01, 0xCC, 0x01, 0xD4, 0x01, 0xDC, 0x01, 0xE4, 0x01, 0xEC,
-    0x01, 0xF6, 0x02, 0x00, 0x02, 0x08, 0x02, 0x10, 0x02, 0x18, 0x02, 0x20, 0x02, 0x28, 0x00, 0x03,
-    0x1F, 0xBE, 0x03, 0x08, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03,
-    0x1F, 0xBE, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x21, 0x26, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03,
-    0x21, 0x26, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x43, 0x00, 0x03,
-    0x1F, 0x00, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x1F, 0x01, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03,
-    0x1F, 0x00, 0x03, 0x45, 0x03, 0x41, 0x00, 0x03, 0x1F, 0x01, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04,
-    0x03, 0xB1, 0x03, 0x13, 0x03, 0x42, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x45,
-    0x03, 0x42, 0x00, 0x03, 0x03, 0x91, 0x03, 0x45, 0x03, 0x43, 0x00, 0x03, 0x1F, 0x08, 0x03, 0x45,
-    0x03, 0x40, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x1F, 0x08, 0x03, 0x45,
-    0x03, 0x41, 0x00, 0x03, 0x1F, 0x09, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0x91, 0x03, 0x13,
-    0x03, 0x42, 0x03, 0x45, 0x00, 0x04, 0x03, 0x91, 0x03, 0x14, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03,
-    0x03, 0xB7, 0x03, 0x45, 0x03, 0x43, 0x00, 0x03, 0x1F, 0x20, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03,
-    0x1F, 0x21, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x1F, 0x20, 0x03, 0x45, 0x03, 0x41, 0x00, 0x03,
-    0x1F, 0x21, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x42, 0x03, 0x45,
-    0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x03, 0x97, 0x03, 0x45,
-    0x03, 0x43, 0x00, 0x03, 0x1F, 0x28, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x45,
-    0x03, 0x40, 0x00, 0x03, 0x1F, 0x28, 0x03, 0x45, 0x03, 0x41, 0x00, 0x03, 0x1F, 0x29, 0x03, 0x45,
-    0x03, 0x41, 0x00, 0x04, 0x03, 0x97, 0x03, 0x13, 0x03, 0x42, 0x03, 0x45, 0x00, 0x04, 0x03, 0x97,
-    0x03, 0x14, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x43, 0x00, 0x03,
-    0x1F, 0x60, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03,
-    0x1F, 0x60, 0x03, 0x45, 0x03, 0x41, 0x00, 0x03, 0x1F, 0x61, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04,
-    0x03, 0xC9, 0x03, 0x13, 0x03, 0x42, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x45,
-    0x03, 0x42, 0x00, 0x03, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x43, 0x00, 0x03, 0x1F, 0x68, 0x03, 0x45,
-    0x03, 0x40, 0x00, 0x03, 0x1F, 0x69, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x1F, 0x68, 0x03, 0x45,
-    0x03, 0x41, 0x00, 0x03, 0x1F, 0x69, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x13,
-    0x03, 0x42, 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x14, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03,
-    0x03, 0xB1, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x01, 0x00, 0x03,
-    0x03, 0xB7, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x01, 0x00, 0x03,
-    0x03, 0xC9, 0x03, 0x45, 0x03, 0x40, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x01, 0x00, 0x01,
-    0x00, 0x35, 0x03, 0x90, 0x1F, 0x32, 0x1F, 0x34, 0x1F, 0x6A, 0x1F, 0x6C, 0x1F, 0x80, 0x1F, 0x82,
-    0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x87, 0x1F, 0x88, 0x1F, 0x8A, 0x1F, 0x8B,
-    0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x8F, 0x1F, 0x90, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94,
-    0x1F, 0x95, 0x1F, 0x96, 0x1F, 0x97, 0x1F, 0x98, 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D,
-    0x1F, 0x9E, 0x1F, 0x9F, 0x1F, 0xA0, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6,
-    0x1F, 0xA7, 0x1F, 0xA8, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x1F, 0xAF,
-    0x1F, 0xB2, 0x1F, 0xB4, 0x1F, 0xC2, 0x1F, 0xC4, 0x1F, 0xF2, 0x1F, 0xF4, 0x00, 0x01, 0x01, 0xE0,
-    0x00, 0x2D, 0x00, 0x60, 0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00, 0x90,
-    0x00, 0x98, 0x00, 0xA0, 0x00, 0xA8, 0x00, 0xB2, 0x00, 0xBC, 0x00, 0xC4, 0x00, 0xCC, 0x00, 0xD4,
-    0x00, 0xDC, 0x00, 0xE6, 0x00, 0xF0, 0x00, 0xF8, 0x01, 0x00, 0x01, 0x08, 0x01, 0x10, 0x01, 0x1A,
-    0x01, 0x24, 0x01, 0x2C, 0x01, 0x34, 0x01, 0x3C, 0x01, 0x44, 0x01, 0x4E, 0x01, 0x58, 0x01, 0x60,
-    0x01, 0x68, 0x01, 0x70, 0x01, 0x78, 0x01, 0x82, 0x01, 0x8C, 0x01, 0x94, 0x01, 0x9C, 0x01, 0xA4,
-    0x01, 0xAC, 0x01, 0xB4, 0x01, 0xBE, 0x01, 0xC8, 0x01, 0xD0, 0x01, 0xD8, 0x00, 0x03, 0x1F, 0xBE,
-    0x03, 0x08, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xBE,
-    0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x21, 0x26, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x21, 0x26,
-    0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xB3,
-    0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xB3,
-    0x03, 0x14, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x00, 0x04,
-    0x03, 0xB1, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x13, 0x03, 0x00,
-    0x00, 0x03, 0x1F, 0xBC, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x13, 0x03, 0x01,
-    0x00, 0x03, 0x1F, 0xBC, 0x03, 0x14, 0x03, 0x01, 0x00, 0x04, 0x03, 0x91, 0x03, 0x13, 0x03, 0x45,
-    0x03, 0x42, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xC3,
-    0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xC3,
-    0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x14, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB7,
-    0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42,
-    0x00, 0x03, 0x1F, 0xCC, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x14, 0x03, 0x00,
-    0x00, 0x03, 0x1F, 0xCC, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x14, 0x03, 0x01,
-    0x00, 0x04, 0x03, 0x97, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45,
-    0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xF3,
-    0x03, 0x14, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xF3,
-    0x03, 0x14, 0x03, 0x01, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x00, 0x04,
-    0x03, 0xC9, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x21, 0x26, 0x03, 0x13, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0xFC, 0x03, 0x13, 0x03, 0x00, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x14, 0x03, 0x00,
-    0x00, 0x03, 0x1F, 0xFC, 0x03, 0x13, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x14, 0x03, 0x01,
-    0x00, 0x04, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45,
-    0x03, 0x14, 0x03, 0x42, 0x00, 0x03, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x41, 0x00, 0x03, 0x03, 0xB7,
-    0x03, 0x45, 0x03, 0x41, 0x00, 0x03, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x41, 0x00, 0x01, 0x00, 0x2D,
-    0x03, 0x90, 0x1F, 0x32, 0x1F, 0x34, 0x1F, 0x6A, 0x1F, 0x6C, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84,
-    0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x87, 0x1F, 0x8A, 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E,
-    0x1F, 0x8F, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96, 0x1F, 0x97, 0x1F, 0x9A,
-    0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0x9F, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4,
-    0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA7, 0x1F, 0xA8, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD,
-    0x1F, 0xAE, 0x1F, 0xAF, 0x1F, 0xB4, 0x1F, 0xC4, 0x1F, 0xF4, 0x00, 0x01, 0x01, 0x7C, 0x00, 0x24,
-    0x00, 0x4E, 0x00, 0x56, 0x00, 0x5E, 0x00, 0x66, 0x00, 0x6E, 0x00, 0x76, 0x00, 0x7E, 0x00, 0x86,
-    0x00, 0x8E, 0x00, 0x98, 0x00, 0xA0, 0x00, 0xA8, 0x00, 0xB0, 0x00, 0xB8, 0x00, 0xC2, 0x00, 0xCA,
-    0x00, 0xD2, 0x00, 0xDA, 0x00, 0xE2, 0x00, 0xEC, 0x00, 0xF4, 0x00, 0xFC, 0x01, 0x04, 0x01, 0x0C,
-    0x01, 0x16, 0x01, 0x1E, 0x01, 0x26, 0x01, 0x2E, 0x01, 0x36, 0x01, 0x40, 0x01, 0x48, 0x01, 0x50,
-    0x01, 0x58, 0x01, 0x60, 0x01, 0x68, 0x01, 0x72, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x43, 0x03, 0x00,
-    0x00, 0x03, 0x1F, 0xBE, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x21, 0x26, 0x03, 0x43, 0x03, 0x00,
-    0x00, 0x03, 0x21, 0x26, 0x03, 0x43, 0x03, 0x01, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x13, 0x03, 0x40,
-    0x00, 0x03, 0x1F, 0xB3, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x13, 0x03, 0x41,
-    0x00, 0x03, 0x1F, 0xB3, 0x03, 0x14, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x42,
-    0x03, 0x45, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x14,
-    0x03, 0x40, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x14,
-    0x03, 0x41, 0x00, 0x04, 0x03, 0x91, 0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xC3,
-    0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xC3,
-    0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x14, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB7,
-    0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03,
-    0x1F, 0xCC, 0x03, 0x14, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03,
-    0x1F, 0xCC, 0x03, 0x14, 0x03, 0x41, 0x00, 0x04, 0x03, 0x97, 0x03, 0x43, 0x03, 0x42, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0xF3, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x14, 0x03, 0x40,
-    0x00, 0x03, 0x1F, 0xF3, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x14, 0x03, 0x41,
-    0x00, 0x04, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x00, 0x03, 0x21, 0x26, 0x03, 0x43,
-    0x03, 0x45, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x13, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x14,
-    0x03, 0x40, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x13, 0x03, 0x41, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x14,
-    0x03, 0x41, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x42, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26,
-    0x03, 0x14, 0x03, 0x42, 0x03, 0x45, 0x00, 0x01, 0x00, 0x24, 0x1F, 0x32, 0x1F, 0x34, 0x1F, 0x6A,
-    0x1F, 0x6C, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x8A, 0x1F, 0x8B,
-    0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96,
-    0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4,
-    0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA8, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE,
-    0x1F, 0xAF, 0x00, 0x01, 0x01, 0x94, 0x00, 0x24, 0x00, 0x4E, 0x00, 0x56, 0x00, 0x5E, 0x00, 0x66,
-    0x00, 0x6E, 0x00, 0x76, 0x00, 0x80, 0x00, 0x88, 0x00, 0x92, 0x00, 0x9C, 0x00, 0xA4, 0x00, 0xAE,
-    0x00, 0xB6, 0x00, 0xC0, 0x00, 0xCA, 0x00, 0xD2, 0x00, 0xDC, 0x00, 0xE4, 0x00, 0xEE, 0x00, 0xF8,
-    0x01, 0x00, 0x01, 0x0A, 0x01, 0x12, 0x01, 0x1C, 0x01, 0x26, 0x01, 0x2E, 0x01, 0x38, 0x01, 0x40,
-    0x01, 0x4A, 0x01, 0x54, 0x01, 0x5C, 0x01, 0x64, 0x01, 0x6E, 0x01, 0x76, 0x01, 0x80, 0x01, 0x8A,
-    0x00, 0x03, 0x1F, 0xBE, 0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x1F, 0xBE, 0x03, 0x43, 0x03, 0x41,
-    0x00, 0x03, 0x21, 0x26, 0x03, 0x43, 0x03, 0x40, 0x00, 0x03, 0x21, 0x26, 0x03, 0x43, 0x03, 0x41,
-    0x00, 0x03, 0x1F, 0xB3, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x00,
-    0x03, 0x45, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14,
-    0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03,
-    0x1F, 0xBC, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x03, 0x91, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0xBC, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0x91, 0x03, 0x14, 0x03, 0x01,
-    0x03, 0x45, 0x00, 0x04, 0x03, 0x91, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xC3,
-    0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03,
-    0x1F, 0xC3, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x01, 0x03, 0x45,
-    0x00, 0x04, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x43,
-    0x03, 0x00, 0x00, 0x04, 0x03, 0x97, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xCC,
-    0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0x97, 0x03, 0x14, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04,
-    0x03, 0x97, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x43, 0x03, 0x00,
-    0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x43,
-    0x03, 0x01, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9,
-    0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x00, 0x03, 0x21, 0x26, 0x03, 0x45, 0x03, 0x13, 0x00, 0x03,
-    0x1F, 0xFC, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x14, 0x03, 0x00, 0x03, 0x45,
-    0x00, 0x03, 0x1F, 0xFC, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x14, 0x03, 0x01,
-    0x03, 0x45, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x45, 0x03, 0x42, 0x00, 0x04, 0x21, 0x26,
-    0x03, 0x14, 0x03, 0x45, 0x03, 0x42, 0x00, 0x01, 0x00, 0x24, 0x1F, 0x32, 0x1F, 0x34, 0x1F, 0x6A,
-    0x1F, 0x6C, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x8A, 0x1F, 0x8B,
-    0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96,
-    0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4,
-    0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA8, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE,
-    0x1F, 0xAF, 0x00, 0x01, 0x01, 0x6C, 0x00, 0x20, 0x00, 0x46, 0x00, 0x4E, 0x00, 0x58, 0x00, 0x60,
-    0x00, 0x6A, 0x00, 0x74, 0x00, 0x7C, 0x00, 0x86, 0x00, 0x8E, 0x00, 0x98, 0x00, 0xA2, 0x00, 0xAA,
-    0x00, 0xB4, 0x00, 0xBC, 0x00, 0xC6, 0x00, 0xD0, 0x00, 0xD8, 0x00, 0xE2, 0x00, 0xEA, 0x00, 0xF4,
-    0x00, 0xFE, 0x01, 0x06, 0x01, 0x10, 0x01, 0x18, 0x01, 0x22, 0x01, 0x2C, 0x01, 0x34, 0x01, 0x3C,
-    0x01, 0x46, 0x01, 0x4E, 0x01, 0x58, 0x01, 0x62, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x43, 0x03, 0x40,
-    0x00, 0x04, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xB3, 0x03, 0x43,
-    0x03, 0x41, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB1,
-    0x03, 0x45, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x43, 0x03, 0x40, 0x00, 0x04,
-    0x03, 0x91, 0x03, 0x14, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xBC, 0x03, 0x43, 0x03, 0x41,
-    0x00, 0x04, 0x03, 0x91, 0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45,
-    0x03, 0x13, 0x03, 0x42, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x43, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB7,
-    0x03, 0x14, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xC3, 0x03, 0x43, 0x03, 0x41, 0x00, 0x04,
-    0x03, 0xB7, 0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x13,
-    0x03, 0x42, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x43, 0x03, 0x40, 0x00, 0x04, 0x03, 0x97, 0x03, 0x14,
-    0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xCC, 0x03, 0x43, 0x03, 0x41, 0x00, 0x04, 0x03, 0x97,
-    0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x13, 0x03, 0x42,
-    0x00, 0x03, 0x1F, 0xF3, 0x03, 0x43, 0x03, 0x40, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x40,
-    0x03, 0x45, 0x00, 0x03, 0x1F, 0xF3, 0x03, 0x43, 0x03, 0x41, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14,
-    0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x13, 0x03, 0x42, 0x00, 0x03,
-    0x21, 0x26, 0x03, 0x45, 0x03, 0x43, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x43, 0x03, 0x40, 0x00, 0x04,
-    0x03, 0xA9, 0x03, 0x14, 0x03, 0x40, 0x03, 0x45, 0x00, 0x03, 0x1F, 0xFC, 0x03, 0x43, 0x03, 0x41,
-    0x00, 0x04, 0x03, 0xA9, 0x03, 0x14, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45,
-    0x03, 0x13, 0x03, 0x42, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x14, 0x03, 0x42, 0x00, 0x01,
-    0x00, 0x20, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x8A, 0x1F, 0x8B,
-    0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x96,
-    0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4,
-    0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xA8, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE,
-    0x1F, 0xAF, 0x00, 0x01, 0x01, 0x6E, 0x00, 0x1E, 0x00, 0x42, 0x00, 0x4C, 0x00, 0x56, 0x00, 0x60,
-    0x00, 0x6A, 0x00, 0x74, 0x00, 0x7E, 0x00, 0x88, 0x00, 0x92, 0x00, 0x9C, 0x00, 0xA6, 0x00, 0xB0,
-    0x00, 0xBA, 0x00, 0xC4, 0x00, 0xCE, 0x00, 0xD8, 0x00, 0xE2, 0x00, 0xEC, 0x00, 0xF6, 0x01, 0x00,
-    0x01, 0x0A, 0x01, 0x14, 0x01, 0x1E, 0x01, 0x28, 0x01, 0x32, 0x01, 0x3C, 0x01, 0x46, 0x01, 0x50,
-    0x01, 0x5A, 0x01, 0x64, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04,
-    0x03, 0xB1, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x01,
-    0x03, 0x45, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB1,
-    0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04, 0x03, 0x91, 0x03, 0x13, 0x03, 0x00, 0x03, 0x45,
-    0x00, 0x04, 0x03, 0x91, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0x91, 0x03, 0x13,
-    0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0x91, 0x03, 0x14, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04,
-    0x03, 0x91, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x00,
-    0x03, 0x45, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB7,
-    0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x45, 0x03, 0x01,
-    0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04, 0x03, 0x97, 0x03, 0x13,
-    0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0x97, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04,
-    0x03, 0x97, 0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0x97, 0x03, 0x14, 0x03, 0x45,
-    0x03, 0x01, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04, 0x03, 0xC9,
-    0x03, 0x13, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00,
-    0x00, 0x04, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14,
-    0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x00, 0x04,
-    0x03, 0xA9, 0x03, 0x13, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x14, 0x03, 0x45,
-    0x03, 0x00, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9,
-    0x03, 0x14, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42,
-    0x00, 0x01, 0x00, 0x1E, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x86, 0x1F, 0x8A,
-    0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x8E, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95,
-    0x1F, 0x96, 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0x9E, 0x1F, 0xA2, 0x1F, 0xA3,
-    0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xA6, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE,
-    0x00, 0x01, 0x01, 0x32, 0x00, 0x19, 0x00, 0x38, 0x00, 0x42, 0x00, 0x4C, 0x00, 0x56, 0x00, 0x60,
-    0x00, 0x6A, 0x00, 0x74, 0x00, 0x7E, 0x00, 0x88, 0x00, 0x92, 0x00, 0x9C, 0x00, 0xA6, 0x00, 0xB0,
-    0x00, 0xBA, 0x00, 0xC4, 0x00, 0xCE, 0x00, 0xD8, 0x00, 0xE2, 0x00, 0xEC, 0x00, 0xF6, 0x01, 0x00,
-    0x01, 0x0A, 0x01, 0x14, 0x01, 0x1E, 0x01, 0x28, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x40,
-    0x03, 0x45, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB1,
-    0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41,
-    0x00, 0x04, 0x03, 0x91, 0x03, 0x13, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x03, 0x91, 0x03, 0x14,
-    0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0x91, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04,
-    0x03, 0x91, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x40,
-    0x03, 0x45, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB7,
-    0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41,
-    0x00, 0x04, 0x03, 0x97, 0x03, 0x13, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x03, 0x97, 0x03, 0x14,
-    0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0x97, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04,
-    0x03, 0x97, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x40,
-    0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xC9,
-    0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41,
-    0x00, 0x04, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x14,
-    0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04,
-    0x03, 0xA9, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x21, 0x26, 0x03, 0x13, 0x03, 0x42,
-    0x03, 0x45, 0x00, 0x01, 0x00, 0x19, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x8A,
-    0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x9A,
-    0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xAA,
-    0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x00, 0x01, 0x01, 0x32, 0x00, 0x19, 0x00, 0x38,
-    0x00, 0x42, 0x00, 0x4C, 0x00, 0x56, 0x00, 0x60, 0x00, 0x6A, 0x00, 0x74, 0x00, 0x7E, 0x00, 0x88,
-    0x00, 0x92, 0x00, 0x9C, 0x00, 0xA6, 0x00, 0xB0, 0x00, 0xBA, 0x00, 0xC4, 0x00, 0xCE, 0x00, 0xD8,
-    0x00, 0xE2, 0x00, 0xEC, 0x00, 0xF6, 0x01, 0x00, 0x01, 0x0A, 0x01, 0x14, 0x01, 0x1E, 0x01, 0x28,
-    0x00, 0x04, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45,
-    0x03, 0x14, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04,
-    0x03, 0xB1, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01, 0x00, 0x04, 0x03, 0x91, 0x03, 0x13, 0x03, 0x45,
-    0x03, 0x00, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x14, 0x03, 0x00, 0x00, 0x04, 0x03, 0x91,
-    0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01,
-    0x00, 0x04, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45,
-    0x03, 0x14, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04,
-    0x03, 0xB7, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01, 0x00, 0x04, 0x03, 0x97, 0x03, 0x13, 0x03, 0x45,
-    0x03, 0x00, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x14, 0x03, 0x00, 0x00, 0x04, 0x03, 0x97,
-    0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01,
-    0x00, 0x04, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45,
-    0x03, 0x14, 0x03, 0x00, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04,
-    0x03, 0xC9, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x45,
-    0x03, 0x00, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x14, 0x03, 0x00, 0x00, 0x04, 0x03, 0xA9,
-    0x03, 0x13, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01,
-    0x00, 0x04, 0x21, 0x26, 0x03, 0x13, 0x03, 0x45, 0x03, 0x42, 0x00, 0x01, 0x00, 0x19, 0x1F, 0x82,
-    0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x8A, 0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x92,
-    0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x9A, 0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0xA2,
-    0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE,
-    0x00, 0x01, 0x01, 0x32, 0x00, 0x19, 0x00, 0x38, 0x00, 0x42, 0x00, 0x4C, 0x00, 0x56, 0x00, 0x60,
-    0x00, 0x6A, 0x00, 0x74, 0x00, 0x7E, 0x00, 0x88, 0x00, 0x92, 0x00, 0x9C, 0x00, 0xA6, 0x00, 0xB0,
-    0x00, 0xBA, 0x00, 0xC4, 0x00, 0xCE, 0x00, 0xD8, 0x00, 0xE2, 0x00, 0xEC, 0x00, 0xF6, 0x01, 0x00,
-    0x01, 0x0A, 0x01, 0x14, 0x01, 0x1E, 0x01, 0x28, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x13, 0x03, 0x45,
-    0x03, 0x40, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB1,
-    0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41,
-    0x00, 0x04, 0x03, 0x91, 0x03, 0x13, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45,
-    0x03, 0x14, 0x03, 0x40, 0x00, 0x04, 0x03, 0x91, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04,
-    0x03, 0x91, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x13, 0x03, 0x45,
-    0x03, 0x40, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB7,
-    0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41,
-    0x00, 0x04, 0x03, 0x97, 0x03, 0x13, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45,
-    0x03, 0x14, 0x03, 0x40, 0x00, 0x04, 0x03, 0x97, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04,
-    0x03, 0x97, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x13, 0x03, 0x45,
-    0x03, 0x40, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x14, 0x03, 0x40, 0x00, 0x04, 0x03, 0xC9,
-    0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41,
-    0x00, 0x04, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45,
-    0x03, 0x14, 0x03, 0x40, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04,
-    0x03, 0xA9, 0x03, 0x45, 0x03, 0x14, 0x03, 0x41, 0x00, 0x04, 0x21, 0x26, 0x03, 0x43, 0x03, 0x42,
-    0x03, 0x45, 0x00, 0x01, 0x00, 0x19, 0x1F, 0x82, 0x1F, 0x83, 0x1F, 0x84, 0x1F, 0x85, 0x1F, 0x8A,
-    0x1F, 0x8B, 0x1F, 0x8C, 0x1F, 0x8D, 0x1F, 0x92, 0x1F, 0x93, 0x1F, 0x94, 0x1F, 0x95, 0x1F, 0x9A,
-    0x1F, 0x9B, 0x1F, 0x9C, 0x1F, 0x9D, 0x1F, 0xA2, 0x1F, 0xA3, 0x1F, 0xA4, 0x1F, 0xA5, 0x1F, 0xAA,
-    0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x00, 0x01, 0x00, 0xBA, 0x00, 0x0F, 0x00, 0x24,
-    0x00, 0x2E, 0x00, 0x38, 0x00, 0x42, 0x00, 0x4C, 0x00, 0x56, 0x00, 0x60, 0x00, 0x6A, 0x00, 0x74,
-    0x00, 0x7E, 0x00, 0x88, 0x00, 0x92, 0x00, 0x9C, 0x00, 0xA6, 0x00, 0xB0, 0x00, 0x04, 0x03, 0xB1,
-    0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45,
-    0x00, 0x04, 0x03, 0x91, 0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0x91, 0x03, 0x43,
-    0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04,
-    0x03, 0xB7, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0x97, 0x03, 0x43, 0x03, 0x00,
-    0x03, 0x45, 0x00, 0x04, 0x03, 0x97, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9,
-    0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45,
-    0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26, 0x03, 0x14,
-    0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04,
-    0x21, 0x26, 0x03, 0x14, 0x03, 0x01, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26, 0x03, 0x43, 0x03, 0x45,
-    0x03, 0x42, 0x00, 0x01, 0x00, 0x0F, 0x1F, 0x82, 0x1F, 0x84, 0x1F, 0x8A, 0x1F, 0x8C, 0x1F, 0x92,
-    0x1F, 0x94, 0x1F, 0x9A, 0x1F, 0x9C, 0x1F, 0xA2, 0x1F, 0xA4, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC,
-    0x1F, 0xAD, 0x1F, 0xAE, 0x00, 0x01, 0x00, 0xBA, 0x00, 0x0F, 0x00, 0x24, 0x00, 0x2E, 0x00, 0x38,
-    0x00, 0x42, 0x00, 0x4C, 0x00, 0x56, 0x00, 0x60, 0x00, 0x6A, 0x00, 0x74, 0x00, 0x7E, 0x00, 0x88,
-    0x00, 0x92, 0x00, 0x9C, 0x00, 0xA6, 0x00, 0xB0, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x40,
-    0x03, 0x45, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0x91,
-    0x03, 0x43, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x03, 0x91, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45,
-    0x00, 0x04, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x43,
-    0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0x97, 0x03, 0x43, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04,
-    0x03, 0x97, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x40,
-    0x03, 0x45, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x03, 0xA9,
-    0x03, 0x43, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26, 0x03, 0x14, 0x03, 0x40, 0x03, 0x45,
-    0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26, 0x03, 0x14,
-    0x03, 0x41, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x13, 0x03, 0x42, 0x00, 0x01,
-    0x00, 0x0F, 0x1F, 0x82, 0x1F, 0x84, 0x1F, 0x8A, 0x1F, 0x8C, 0x1F, 0x92, 0x1F, 0x94, 0x1F, 0x9A,
-    0x1F, 0x9C, 0x1F, 0xA2, 0x1F, 0xA4, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE,
-    0x00, 0x01, 0x00, 0xBA, 0x00, 0x0F, 0x00, 0x24, 0x00, 0x2E, 0x00, 0x38, 0x00, 0x42, 0x00, 0x4C,
-    0x00, 0x56, 0x00, 0x60, 0x00, 0x6A, 0x00, 0x74, 0x00, 0x7E, 0x00, 0x88, 0x00, 0x92, 0x00, 0x9C,
-    0x00, 0xA6, 0x00, 0xB0, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04,
-    0x03, 0xB1, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0x91, 0x03, 0x43, 0x03, 0x45,
-    0x03, 0x00, 0x00, 0x04, 0x03, 0x91, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB7,
-    0x03, 0x43, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01,
-    0x00, 0x04, 0x03, 0x97, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0x97, 0x03, 0x43,
-    0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04,
-    0x03, 0xC9, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x45,
-    0x03, 0x00, 0x00, 0x04, 0x21, 0x26, 0x03, 0x14, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x03, 0xA9,
-    0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x00, 0x04, 0x21, 0x26, 0x03, 0x14, 0x03, 0x45, 0x03, 0x01,
-    0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x43, 0x03, 0x42, 0x00, 0x01, 0x00, 0x0F, 0x1F, 0x82,
-    0x1F, 0x84, 0x1F, 0x8A, 0x1F, 0x8C, 0x1F, 0x92, 0x1F, 0x94, 0x1F, 0x9A, 0x1F, 0x9C, 0x1F, 0xA2,
-    0x1F, 0xA4, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x1F, 0xAE, 0x00, 0x01, 0x00, 0xAE,
-    0x00, 0x0E, 0x00, 0x22, 0x00, 0x2C, 0x00, 0x36, 0x00, 0x40, 0x00, 0x4A, 0x00, 0x54, 0x00, 0x5E,
-    0x00, 0x68, 0x00, 0x72, 0x00, 0x7C, 0x00, 0x86, 0x00, 0x90, 0x00, 0x9A, 0x00, 0xA4, 0x00, 0x04,
-    0x03, 0xB1, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x43, 0x03, 0x45,
-    0x03, 0x41, 0x00, 0x04, 0x03, 0x91, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0x91,
-    0x03, 0x43, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40,
-    0x00, 0x04, 0x03, 0xB7, 0x03, 0x43, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04, 0x03, 0x97, 0x03, 0x43,
-    0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0x97, 0x03, 0x43, 0x03, 0x45, 0x03, 0x41, 0x00, 0x04,
-    0x03, 0xC9, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x43, 0x03, 0x45,
-    0x03, 0x41, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x21, 0x26,
-    0x03, 0x14, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x43, 0x03, 0x45, 0x03, 0x41,
-    0x00, 0x04, 0x21, 0x26, 0x03, 0x14, 0x03, 0x45, 0x03, 0x41, 0x00, 0x01, 0x00, 0x0E, 0x1F, 0x82,
-    0x1F, 0x84, 0x1F, 0x8A, 0x1F, 0x8C, 0x1F, 0x92, 0x1F, 0x94, 0x1F, 0x9A, 0x1F, 0x9C, 0x1F, 0xA2,
-    0x1F, 0xA4, 0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x00, 0x01, 0x00, 0xAE, 0x00, 0x0E,
-    0x00, 0x22, 0x00, 0x2C, 0x00, 0x36, 0x00, 0x40, 0x00, 0x4A, 0x00, 0x54, 0x00, 0x5E, 0x00, 0x68,
-    0x00, 0x72, 0x00, 0x7C, 0x00, 0x86, 0x00, 0x90, 0x00, 0x9A, 0x00, 0xA4, 0x00, 0x04, 0x03, 0xB1,
-    0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01,
-    0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45,
-    0x03, 0x13, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x00, 0x04,
-    0x03, 0xB7, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x13,
-    0x03, 0x00, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01, 0x00, 0x04, 0x03, 0xC9,
-    0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01,
-    0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45,
-    0x03, 0x14, 0x03, 0x00, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01, 0x00, 0x04,
-    0x21, 0x26, 0x03, 0x45, 0x03, 0x14, 0x03, 0x01, 0x00, 0x01, 0x00, 0x0E, 0x1F, 0x82, 0x1F, 0x84,
-    0x1F, 0x8A, 0x1F, 0x8C, 0x1F, 0x92, 0x1F, 0x94, 0x1F, 0x9A, 0x1F, 0x9C, 0x1F, 0xA2, 0x1F, 0xA4,
-    0x1F, 0xAA, 0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x00, 0x01, 0x00, 0xAE, 0x00, 0x0E, 0x00, 0x22,
-    0x00, 0x2C, 0x00, 0x36, 0x00, 0x40, 0x00, 0x4A, 0x00, 0x54, 0x00, 0x5E, 0x00, 0x68, 0x00, 0x72,
-    0x00, 0x7C, 0x00, 0x86, 0x00, 0x90, 0x00, 0x9A, 0x00, 0xA4, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45,
-    0x03, 0x13, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x00, 0x04,
-    0x03, 0x91, 0x03, 0x45, 0x03, 0x13, 0x03, 0x40, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x13,
-    0x03, 0x41, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x13, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB7,
-    0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x13, 0x03, 0x40,
-    0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45,
-    0x03, 0x13, 0x03, 0x40, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x00, 0x04,
-    0x03, 0xA9, 0x03, 0x45, 0x03, 0x13, 0x03, 0x40, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x14,
-    0x03, 0x40, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x00, 0x04, 0x21, 0x26,
-    0x03, 0x45, 0x03, 0x14, 0x03, 0x41, 0x00, 0x01, 0x00, 0x0E, 0x1F, 0x82, 0x1F, 0x84, 0x1F, 0x8A,
-    0x1F, 0x8C, 0x1F, 0x92, 0x1F, 0x94, 0x1F, 0x9A, 0x1F, 0x9C, 0x1F, 0xA2, 0x1F, 0xA4, 0x1F, 0xAA,
-    0x1F, 0xAB, 0x1F, 0xAC, 0x1F, 0xAD, 0x00, 0x01, 0x00, 0x96, 0x00, 0x0C, 0x00, 0x1E, 0x00, 0x28,
-    0x00, 0x32, 0x00, 0x3C, 0x00, 0x46, 0x00, 0x50, 0x00, 0x5A, 0x00, 0x64, 0x00, 0x6E, 0x00, 0x78,
-    0x00, 0x82, 0x00, 0x8C, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04,
-    0x03, 0xB1, 0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x43,
-    0x03, 0x00, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0xB7,
-    0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x43, 0x03, 0x01,
-    0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45,
-    0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04,
-    0x03, 0xC9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x43,
-    0x03, 0x00, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x01, 0x00, 0x01, 0x00, 0x0C,
-    0x1F, 0x82, 0x1F, 0x84, 0x1F, 0x8A, 0x1F, 0x8C, 0x1F, 0x92, 0x1F, 0x94, 0x1F, 0x9A, 0x1F, 0x9C,
-    0x1F, 0xA2, 0x1F, 0xA4, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x96, 0x00, 0x0C, 0x00, 0x1E,
-    0x00, 0x28, 0x00, 0x32, 0x00, 0x3C, 0x00, 0x46, 0x00, 0x50, 0x00, 0x5A, 0x00, 0x64, 0x00, 0x6E,
-    0x00, 0x78, 0x00, 0x82, 0x00, 0x8C, 0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40,
-    0x00, 0x04, 0x03, 0xB1, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45,
-    0x03, 0x43, 0x03, 0x40, 0x00, 0x04, 0x03, 0x91, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x00, 0x04,
-    0x03, 0xB7, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40, 0x00, 0x04, 0x03, 0xB7, 0x03, 0x45, 0x03, 0x43,
-    0x03, 0x41, 0x00, 0x04, 0x03, 0x97, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40, 0x00, 0x04, 0x03, 0x97,
-    0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40,
-    0x00, 0x04, 0x03, 0xC9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45,
-    0x03, 0x43, 0x03, 0x40, 0x00, 0x04, 0x03, 0xA9, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x00, 0x01,
-    0x00, 0x0C, 0x1F, 0x82, 0x1F, 0x84, 0x1F, 0x8A, 0x1F, 0x8C, 0x1F, 0x92, 0x1F, 0x94, 0x1F, 0x9A,
-    0x1F, 0x9C, 0x1F, 0xA2, 0x1F, 0xA4, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x02,
-    0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x13, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04,
-    0x21, 0x26, 0x03, 0x13, 0x03, 0x01, 0x03, 0x45, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC,
-    0x00, 0x01, 0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x13,
-    0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26, 0x03, 0x13, 0x03, 0x41, 0x03, 0x45, 0x00, 0x01,
-    0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14,
-    0x00, 0x04, 0x21, 0x26, 0x03, 0x13, 0x03, 0x45, 0x03, 0x00, 0x00, 0x04, 0x21, 0x26, 0x03, 0x13,
-    0x03, 0x45, 0x03, 0x01, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E,
-    0x00, 0x02, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x13, 0x03, 0x45, 0x03, 0x40,
-    0x00, 0x04, 0x21, 0x26, 0x03, 0x13, 0x03, 0x45, 0x03, 0x41, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA,
-    0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26,
-    0x03, 0x43, 0x03, 0x00, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26, 0x03, 0x43, 0x03, 0x01, 0x03, 0x45,
-    0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A,
-    0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x43, 0x03, 0x40, 0x03, 0x45, 0x00, 0x04, 0x21, 0x26,
-    0x03, 0x43, 0x03, 0x41, 0x03, 0x45, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01,
-    0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x43, 0x03, 0x45,
-    0x03, 0x00, 0x00, 0x04, 0x21, 0x26, 0x03, 0x43, 0x03, 0x45, 0x03, 0x01, 0x00, 0x01, 0x00, 0x02,
-    0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04,
-    0x21, 0x26, 0x03, 0x43, 0x03, 0x45, 0x03, 0x40, 0x00, 0x04, 0x21, 0x26, 0x03, 0x43, 0x03, 0x45,
-    0x03, 0x41, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x02,
-    0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x13, 0x03, 0x00, 0x00, 0x04,
-    0x21, 0x26, 0x03, 0x45, 0x03, 0x13, 0x03, 0x01, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC,
-    0x00, 0x01, 0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45,
-    0x03, 0x13, 0x03, 0x40, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x13, 0x03, 0x41, 0x00, 0x01,
-    0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x14,
-    0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x43, 0x03, 0x00, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45,
-    0x03, 0x43, 0x03, 0x01, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA, 0x1F, 0xAC, 0x00, 0x01, 0x00, 0x1E,
-    0x00, 0x02, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x43, 0x03, 0x40,
-    0x00, 0x04, 0x21, 0x26, 0x03, 0x45, 0x03, 0x43, 0x03, 0x41, 0x00, 0x01, 0x00, 0x02, 0x1F, 0xAA,
-    0x1F, 0xAC, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x01, 0x36, 0x00, 0x16,
-    0x00, 0x32, 0x00, 0x3C, 0x00, 0x46, 0x00, 0x50, 0x00, 0x5A, 0x00, 0x64, 0x00, 0x6E, 0x00, 0x78,
-    0x00, 0x82, 0x00, 0x8C, 0x00, 0x96, 0x00, 0xA0, 0x00, 0xAA, 0x00, 0xB4, 0x00, 0xBE, 0x00, 0xC8,
-    0x00, 0xD2, 0x00, 0xE4, 0x00, 0xF6, 0x01, 0x08, 0x01, 0x1A, 0x01, 0x2C, 0x00, 0x01, 0x00, 0x04,
-    0x30, 0x94, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x4C, 0x00, 0x02, 0x30, 0x99,
-    0x00, 0x01, 0x00, 0x04, 0x30, 0x4E, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x50,
-    0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x52, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01,
-    0x00, 0x04, 0x30, 0x54, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x56, 0x00, 0x02,
-    0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x58, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04,
-    0x30, 0x5A, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x5C, 0x00, 0x02, 0x30, 0x99,
-    0x00, 0x01, 0x00, 0x04, 0x30, 0x5E, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x60,
-    0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x62, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01,
-    0x00, 0x04, 0x30, 0x65, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x67, 0x00, 0x02,
-    0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0x69, 0x00, 0x02, 0x30, 0x99, 0x00, 0x02, 0x00, 0x06,
-    0x00, 0x0C, 0x30, 0x70, 0x00, 0x02, 0x30, 0x99, 0x30, 0x71, 0x00, 0x02, 0x30, 0x9A, 0x00, 0x02,
-    0x00, 0x06, 0x00, 0x0C, 0x30, 0x73, 0x00, 0x02, 0x30, 0x99, 0x30, 0x74, 0x00, 0x02, 0x30, 0x9A,
-    0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x30, 0x76, 0x00, 0x02, 0x30, 0x99, 0x30, 0x77, 0x00, 0x02,
-    0x30, 0x9A, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x30, 0x79, 0x00, 0x02, 0x30, 0x99, 0x30, 0x7A,
-    0x00, 0x02, 0x30, 0x9A, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x30, 0x7C, 0x00, 0x02, 0x30, 0x99,
-    0x30, 0x7D, 0x00, 0x02, 0x30, 0x9A, 0x00, 0x01, 0x00, 0x04, 0x30, 0x9E, 0x00, 0x02, 0x30, 0x99,
-    0x00, 0x01, 0x00, 0x16, 0x30, 0x46, 0x30, 0x4B, 0x30, 0x4D, 0x30, 0x4F, 0x30, 0x51, 0x30, 0x53,
-    0x30, 0x55, 0x30, 0x57, 0x30, 0x59, 0x30, 0x5B, 0x30, 0x5D, 0x30, 0x5F, 0x30, 0x61, 0x30, 0x64,
-    0x30, 0x66, 0x30, 0x68, 0x30, 0x6F, 0x30, 0x72, 0x30, 0x75, 0x30, 0x78, 0x30, 0x7B, 0x30, 0x9D,
-    0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0xDE, 0x00, 0x1B, 0x00, 0x3C,
-    0x00, 0x42, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x60, 0x00, 0x66, 0x00, 0x6C,
-    0x00, 0x72, 0x00, 0x78, 0x00, 0x7E, 0x00, 0x84, 0x00, 0x8A, 0x00, 0x90, 0x00, 0x96, 0x00, 0x9C,
-    0x00, 0xA2, 0x00, 0xA8, 0x00, 0xAE, 0x00, 0xB4, 0x00, 0xBA, 0x00, 0xC0, 0x00, 0xC6, 0x00, 0xCC,
-    0x00, 0xD2, 0x00, 0xD8, 0x00, 0x02, 0x30, 0x4B, 0x30, 0x99, 0x00, 0x02, 0x30, 0x4D, 0x30, 0x99,
-    0x00, 0x02, 0x30, 0x4F, 0x30, 0x99, 0x00, 0x02, 0x30, 0x51, 0x30, 0x99, 0x00, 0x02, 0x30, 0x53,
-    0x30, 0x99, 0x00, 0x02, 0x30, 0x55, 0x30, 0x99, 0x00, 0x02, 0x30, 0x57, 0x30, 0x99, 0x00, 0x02,
-    0x30, 0x59, 0x30, 0x99, 0x00, 0x02, 0x30, 0x5B, 0x30, 0x99, 0x00, 0x02, 0x30, 0x5D, 0x30, 0x99,
-    0x00, 0x02, 0x30, 0x5F, 0x30, 0x99, 0x00, 0x02, 0x30, 0x61, 0x30, 0x99, 0x00, 0x02, 0x30, 0x64,
-    0x30, 0x99, 0x00, 0x02, 0x30, 0x66, 0x30, 0x99, 0x00, 0x02, 0x30, 0x68, 0x30, 0x99, 0x00, 0x02,
-    0x30, 0x6F, 0x30, 0x99, 0x00, 0x02, 0x30, 0x6F, 0x30, 0x9A, 0x00, 0x02, 0x30, 0x72, 0x30, 0x99,
-    0x00, 0x02, 0x30, 0x72, 0x30, 0x9A, 0x00, 0x02, 0x30, 0x75, 0x30, 0x99, 0x00, 0x02, 0x30, 0x75,
-    0x30, 0x9A, 0x00, 0x02, 0x30, 0x78, 0x30, 0x99, 0x00, 0x02, 0x30, 0x78, 0x30, 0x9A, 0x00, 0x02,
-    0x30, 0x7B, 0x30, 0x99, 0x00, 0x02, 0x30, 0x7B, 0x30, 0x9A, 0x00, 0x02, 0x30, 0x46, 0x30, 0x99,
-    0x00, 0x02, 0x30, 0x9D, 0x30, 0x99, 0x00, 0x01, 0x00, 0x1B, 0x30, 0x4C, 0x30, 0x4E, 0x30, 0x50,
-    0x30, 0x52, 0x30, 0x54, 0x30, 0x56, 0x30, 0x58, 0x30, 0x5A, 0x30, 0x5C, 0x30, 0x5E, 0x30, 0x60,
-    0x30, 0x62, 0x30, 0x65, 0x30, 0x67, 0x30, 0x69, 0x30, 0x70, 0x30, 0x71, 0x30, 0x73, 0x30, 0x74,
-    0x30, 0x76, 0x30, 0x77, 0x30, 0x79, 0x30, 0x7A, 0x30, 0x7C, 0x30, 0x7D, 0x30, 0x94, 0x30, 0x9E,
-    0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x44, 0x00, 0x03, 0x00, 0x0C,
-    0x00, 0x16, 0x00, 0x3A, 0x00, 0x01, 0x00, 0x04, 0x0C, 0xC0, 0x00, 0x02, 0x0C, 0xD5, 0x00, 0x04,
-    0x00, 0x0A, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x0C, 0xCB, 0x00, 0x03, 0x0C, 0xC2, 0x0C, 0xD5,
-    0x0C, 0xCA, 0x00, 0x02, 0x0C, 0xC2, 0x0C, 0xC7, 0x00, 0x02, 0x0C, 0xD5, 0x0C, 0xC8, 0x00, 0x02,
-    0x0C, 0xD6, 0x00, 0x01, 0x00, 0x04, 0x0C, 0xCB, 0x00, 0x02, 0x0C, 0xD5, 0x00, 0x01, 0x00, 0x03,
-    0x0C, 0xBF, 0x0C, 0xC6, 0x0C, 0xCA, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x46,
-    0x00, 0x01, 0x00, 0x2E, 0x00, 0x05, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28,
-    0x00, 0x02, 0x0C, 0xBF, 0x0C, 0xD5, 0x00, 0x02, 0x0C, 0xC6, 0x0C, 0xD5, 0x00, 0x02, 0x0C, 0xC6,
-    0x0C, 0xD6, 0x00, 0x02, 0x0C, 0xC6, 0x0C, 0xC2, 0x00, 0x02, 0x0C, 0xCA, 0x0C, 0xD5, 0x00, 0x01,
-    0x00, 0x05, 0x0C, 0xC0, 0x0C, 0xC7, 0x0C, 0xC8, 0x0C, 0xCA, 0x0C, 0xCB, 0x00, 0x01, 0x00, 0x10,
-    0x00, 0x01, 0x00, 0x08, 0x00, 0x03, 0x0C, 0xC6, 0x0C, 0xC2, 0x0C, 0xD5, 0x00, 0x01, 0x00, 0x01,
-    0x0C, 0xCB, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x01, 0x66, 0x00, 0x1A,
-    0x00, 0x3A, 0x00, 0x44, 0x00, 0x4E, 0x00, 0x58, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x80,
-    0x00, 0x8A, 0x00, 0x94, 0x00, 0x9E, 0x00, 0xA8, 0x00, 0xB2, 0x00, 0xBC, 0x00, 0xC6, 0x00, 0xD0,
-    0x00, 0xDA, 0x00, 0xEC, 0x00, 0xFE, 0x01, 0x10, 0x01, 0x22, 0x01, 0x34, 0x01, 0x3E, 0x01, 0x48,
-    0x01, 0x52, 0x01, 0x5C, 0x00, 0x01, 0x00, 0x04, 0x30, 0xF4, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01,
-    0x00, 0x04, 0x30, 0xAC, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xAE, 0x00, 0x02,
-    0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xB0, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04,
-    0x30, 0xB2, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xB4, 0x00, 0x02, 0x30, 0x99,
-    0x00, 0x01, 0x00, 0x04, 0x30, 0xB6, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xB8,
-    0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xBA, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01,
-    0x00, 0x04, 0x30, 0xBC, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xBE, 0x00, 0x02,
-    0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xC0, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04,
-    0x30, 0xC2, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xC5, 0x00, 0x02, 0x30, 0x99,
-    0x00, 0x01, 0x00, 0x04, 0x30, 0xC7, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xC9,
-    0x00, 0x02, 0x30, 0x99, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x30, 0xD0, 0x00, 0x02, 0x30, 0x99,
-    0x30, 0xD1, 0x00, 0x02, 0x30, 0x9A, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x30, 0xD3, 0x00, 0x02,
-    0x30, 0x99, 0x30, 0xD4, 0x00, 0x02, 0x30, 0x9A, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x30, 0xD6,
-    0x00, 0x02, 0x30, 0x99, 0x30, 0xD7, 0x00, 0x02, 0x30, 0x9A, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C,
-    0x30, 0xD9, 0x00, 0x02, 0x30, 0x99, 0x30, 0xDA, 0x00, 0x02, 0x30, 0x9A, 0x00, 0x02, 0x00, 0x06,
-    0x00, 0x0C, 0x30, 0xDC, 0x00, 0x02, 0x30, 0x99, 0x30, 0xDD, 0x00, 0x02, 0x30, 0x9A, 0x00, 0x01,
-    0x00, 0x04, 0x30, 0xF7, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xF8, 0x00, 0x02,
-    0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xF9, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04,
-    0x30, 0xFA, 0x00, 0x02, 0x30, 0x99, 0x00, 0x01, 0x00, 0x04, 0x30, 0xFE, 0x00, 0x02, 0x30, 0x99,
-    0x00, 0x01, 0x00, 0x1A, 0x30, 0xA6, 0x30, 0xAB, 0x30, 0xAD, 0x30, 0xAF, 0x30, 0xB1, 0x30, 0xB3,
-    0x30, 0xB5, 0x30, 0xB7, 0x30, 0xB9, 0x30, 0xBB, 0x30, 0xBD, 0x30, 0xBF, 0x30, 0xC1, 0x30, 0xC4,
-    0x30, 0xC6, 0x30, 0xC8, 0x30, 0xCF, 0x30, 0xD2, 0x30, 0xD5, 0x30, 0xD8, 0x30, 0xDB, 0x30, 0xEF,
-    0x30, 0xF0, 0x30, 0xF1, 0x30, 0xF2, 0x30, 0xFD, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08,
-    0x00, 0x01, 0x00, 0xFE, 0x00, 0x1F, 0x00, 0x44, 0x00, 0x4A, 0x00, 0x50, 0x00, 0x56, 0x00, 0x5C,
-    0x00, 0x62, 0x00, 0x68, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x7A, 0x00, 0x80, 0x00, 0x86, 0x00, 0x8C,
-    0x00, 0x92, 0x00, 0x98, 0x00, 0x9E, 0x00, 0xA4, 0x00, 0xAA, 0x00, 0xB0, 0x00, 0xB6, 0x00, 0xBC,
-    0x00, 0xC2, 0x00, 0xC8, 0x00, 0xCE, 0x00, 0xD4, 0x00, 0xDA, 0x00, 0xE0, 0x00, 0xE6, 0x00, 0xEC,
-    0x00, 0xF2, 0x00, 0xF8, 0x00, 0x02, 0x30, 0xAB, 0x30, 0x99, 0x00, 0x02, 0x30, 0xAD, 0x30, 0x99,
-    0x00, 0x02, 0x30, 0xAF, 0x30, 0x99, 0x00, 0x02, 0x30, 0xB1, 0x30, 0x99, 0x00, 0x02, 0x30, 0xB3,
-    0x30, 0x99, 0x00, 0x02, 0x30, 0xB5, 0x30, 0x99, 0x00, 0x02, 0x30, 0xB7, 0x30, 0x99, 0x00, 0x02,
-    0x30, 0xB9, 0x30, 0x99, 0x00, 0x02, 0x30, 0xBB, 0x30, 0x99, 0x00, 0x02, 0x30, 0xBD, 0x30, 0x99,
-    0x00, 0x02, 0x30, 0xBF, 0x30, 0x99, 0x00, 0x02, 0x30, 0xC1, 0x30, 0x99, 0x00, 0x02, 0x30, 0xC4,
-    0x30, 0x99, 0x00, 0x02, 0x30, 0xC6, 0x30, 0x99, 0x00, 0x02, 0x30, 0xC8, 0x30, 0x99, 0x00, 0x02,
-    0x30, 0xCF, 0x30, 0x99, 0x00, 0x02, 0x30, 0xCF, 0x30, 0x9A, 0x00, 0x02, 0x30, 0xD2, 0x30, 0x99,
-    0x00, 0x02, 0x30, 0xD2, 0x30, 0x9A, 0x00, 0x02, 0x30, 0xD5, 0x30, 0x99, 0x00, 0x02, 0x30, 0xD5,
-    0x30, 0x9A, 0x00, 0x02, 0x30, 0xD8, 0x30, 0x99, 0x00, 0x02, 0x30, 0xD8, 0x30, 0x9A, 0x00, 0x02,
-    0x30, 0xDB, 0x30, 0x99, 0x00, 0x02, 0x30, 0xDB, 0x30, 0x9A, 0x00, 0x02, 0x30, 0xA6, 0x30, 0x99,
-    0x00, 0x02, 0x30, 0xEF, 0x30, 0x99, 0x00, 0x02, 0x30, 0xF0, 0x30, 0x99, 0x00, 0x02, 0x30, 0xF1,
-    0x30, 0x99, 0x00, 0x02, 0x30, 0xF2, 0x30, 0x99, 0x00, 0x02, 0x30, 0xFD, 0x30, 0x99, 0x00, 0x01,
-    0x00, 0x1F, 0x30, 0xAC, 0x30, 0xAE, 0x30, 0xB0, 0x30, 0xB2, 0x30, 0xB4, 0x30, 0xB6, 0x30, 0xB8,
-    0x30, 0xBA, 0x30, 0xBC, 0x30, 0xBE, 0x30, 0xC0, 0x30, 0xC2, 0x30, 0xC5, 0x30, 0xC7, 0x30, 0xC9,
-    0x30, 0xD0, 0x30, 0xD1, 0x30, 0xD3, 0x30, 0xD4, 0x30, 0xD6, 0x30, 0xD7, 0x30, 0xD9, 0x30, 0xDA,
-    0x30, 0xDC, 0x30, 0xDD, 0x30, 0xF4, 0x30, 0xF7, 0x30, 0xF8, 0x30, 0xF9, 0x30, 0xFA, 0x30, 0xFE,
-    0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x1E, 0x9A, 0x00, 0x89, 0x01, 0x18,
-    0x02, 0x72, 0x02, 0x8C, 0x02, 0xE6, 0x03, 0x18, 0x04, 0x3E, 0x04, 0x48, 0x04, 0x8A, 0x04, 0xC4,
-    0x05, 0x6A, 0x05, 0x74, 0x05, 0xA6, 0x05, 0xF4, 0x06, 0x16, 0x06, 0x70, 0x08, 0x56, 0x08, 0x70,
-    0x08, 0xCE, 0x09, 0x42, 0x09, 0x7C, 0x0B, 0x14, 0x0B, 0x26, 0x0B, 0x68, 0x0B, 0x7A, 0x0B, 0xD4,
-    0x0C, 0x0E, 0x0D, 0x68, 0x0D, 0x82, 0x0D, 0xDC, 0x0E, 0x0E, 0x0F, 0x34, 0x0F, 0x3E, 0x0F, 0x80,
-    0x0F, 0xC2, 0x10, 0x60, 0x10, 0x72, 0x10, 0xA4, 0x10, 0xF2, 0x11, 0x14, 0x11, 0x6E, 0x13, 0x54,
-    0x13, 0x6E, 0x13, 0xCC, 0x14, 0x40, 0x14, 0x82, 0x16, 0x1A, 0x16, 0x2C, 0x16, 0x76, 0x16, 0x88,
-    0x16, 0xEA, 0x17, 0x24, 0x17, 0x5E, 0x17, 0x68, 0x17, 0x7A, 0x17, 0x94, 0x17, 0xA6, 0x17, 0xE0,
-    0x17, 0xF2, 0x17, 0xFC, 0x18, 0x06, 0x18, 0x40, 0x18, 0x6A, 0x18, 0x74, 0x18, 0x86, 0x18, 0x90,
-    0x18, 0x9A, 0x18, 0xCC, 0x19, 0x06, 0x19, 0x10, 0x19, 0x22, 0x19, 0x3C, 0x19, 0x4E, 0x19, 0x88,
-    0x19, 0x9A, 0x19, 0xA4, 0x19, 0xAE, 0x19, 0xE8, 0x1A, 0x12, 0x1A, 0x1C, 0x1A, 0x2E, 0x1A, 0x38,
-    0x1A, 0x42, 0x1A, 0x74, 0x1A, 0xAE, 0x1A, 0xE8, 0x1A, 0xF2, 0x1A, 0xFC, 0x1B, 0x1E, 0x1B, 0x40,
-    0x1B, 0x4A, 0x1B, 0x54, 0x1B, 0x7E, 0x1B, 0xA8, 0x1B, 0xB2, 0x1B, 0xBC, 0x1B, 0xC6, 0x1B, 0xD0,
-    0x1B, 0xEA, 0x1C, 0x04, 0x1C, 0x0E, 0x1C, 0x18, 0x1C, 0x22, 0x1C, 0x5C, 0x1C, 0x96, 0x1C, 0xD0,
-    0x1D, 0x0A, 0x1D, 0x14, 0x1D, 0x1E, 0x1D, 0x28, 0x1D, 0x32, 0x1D, 0x3C, 0x1D, 0x46, 0x1D, 0x50,
-    0x1D, 0x5A, 0x1D, 0x64, 0x1D, 0x6E, 0x1D, 0x78, 0x1D, 0x82, 0x1D, 0x8C, 0x1D, 0x96, 0x1D, 0xA0,
-    0x1D, 0xAA, 0x1D, 0xB4, 0x1D, 0xBE, 0x1D, 0xD0, 0x1D, 0xE2, 0x1D, 0xEC, 0x1D, 0xF6, 0x1E, 0x08,
-    0x1E, 0x1A, 0x1E, 0x24, 0x1E, 0x2E, 0x1E, 0x38, 0x1E, 0x42, 0x1E, 0x4C, 0x1E, 0x56, 0x1E, 0x88,
-    0x00, 0x26, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x7A,
-    0x00, 0x82, 0x00, 0x8A, 0x00, 0x92, 0x00, 0x98, 0x00, 0x9E, 0x00, 0xA4, 0x00, 0xAC, 0x00, 0xB4,
-    0x00, 0xBC, 0x00, 0xC4, 0x00, 0xCC, 0x00, 0xD4, 0x00, 0xDC, 0x00, 0xE2, 0x00, 0xEA, 0x00, 0xF0,
-    0x00, 0xF8, 0x00, 0xFE, 0x01, 0x04, 0x01, 0x0C, 0x01, 0x14, 0x01, 0x1A, 0x01, 0x20, 0x01, 0x26,
-    0x01, 0x2C, 0x01, 0x34, 0x01, 0x3C, 0x01, 0x42, 0x01, 0x48, 0x01, 0x4E, 0x01, 0x54, 0x00, 0xC0,
-    0x00, 0x02, 0x03, 0x00, 0x00, 0xC1, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xA6, 0x00, 0x03, 0x03, 0x02,
-    0x03, 0x00, 0x1E, 0xA4, 0x00, 0x03, 0x03, 0x02, 0x03, 0x01, 0x1E, 0xAA, 0x00, 0x03, 0x03, 0x02,
-    0x03, 0x03, 0x1E, 0xA8, 0x00, 0x03, 0x03, 0x02, 0x03, 0x09, 0x1E, 0xAC, 0x00, 0x03, 0x03, 0x02,
-    0x03, 0x23, 0x1E, 0xA6, 0x00, 0x03, 0x03, 0x02, 0x03, 0x40, 0x1E, 0xA4, 0x00, 0x03, 0x03, 0x02,
-    0x03, 0x41, 0x00, 0xC2, 0x00, 0x02, 0x03, 0x02, 0x00, 0xC3, 0x00, 0x02, 0x03, 0x03, 0x01, 0x00,
-    0x00, 0x02, 0x03, 0x04, 0x1E, 0xB0, 0x00, 0x03, 0x03, 0x06, 0x03, 0x00, 0x1E, 0xAE, 0x00, 0x03,
-    0x03, 0x06, 0x03, 0x01, 0x1E, 0xB4, 0x00, 0x03, 0x03, 0x06, 0x03, 0x03, 0x1E, 0xB2, 0x00, 0x03,
-    0x03, 0x06, 0x03, 0x09, 0x1E, 0xB6, 0x00, 0x03, 0x03, 0x06, 0x03, 0x23, 0x1E, 0xB0, 0x00, 0x03,
-    0x03, 0x06, 0x03, 0x40, 0x1E, 0xAE, 0x00, 0x03, 0x03, 0x06, 0x03, 0x41, 0x01, 0x02, 0x00, 0x02,
-    0x03, 0x06, 0x01, 0xE0, 0x00, 0x03, 0x03, 0x07, 0x03, 0x04, 0x02, 0x26, 0x00, 0x02, 0x03, 0x07,
-    0x01, 0xDE, 0x00, 0x03, 0x03, 0x08, 0x03, 0x04, 0x00, 0xC4, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xA2,
-    0x00, 0x02, 0x03, 0x09, 0x01, 0xFA, 0x00, 0x03, 0x03, 0x0A, 0x03, 0x01, 0x01, 0xFA, 0x00, 0x03,
-    0x03, 0x0A, 0x03, 0x41, 0x00, 0xC5, 0x00, 0x02, 0x03, 0x0A, 0x01, 0xCD, 0x00, 0x02, 0x03, 0x0C,
-    0x02, 0x00, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x02, 0x00, 0x02, 0x03, 0x11, 0x1E, 0xAC, 0x00, 0x03,
-    0x03, 0x23, 0x03, 0x02, 0x1E, 0xB6, 0x00, 0x03, 0x03, 0x23, 0x03, 0x06, 0x1E, 0xA0, 0x00, 0x02,
-    0x03, 0x23, 0x1E, 0x00, 0x00, 0x02, 0x03, 0x25, 0x01, 0x04, 0x00, 0x02, 0x03, 0x28, 0x00, 0xC0,
-    0x00, 0x02, 0x03, 0x40, 0x00, 0xC1, 0x00, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E,
-    0x00, 0x14, 0x1E, 0x02, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x04, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x06,
-    0x00, 0x02, 0x03, 0x31, 0x00, 0x0A, 0x00, 0x16, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30,
-    0x00, 0x36, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x1E, 0x08, 0x00, 0x03, 0x03, 0x01,
-    0x03, 0x27, 0x01, 0x06, 0x00, 0x02, 0x03, 0x01, 0x01, 0x08, 0x00, 0x02, 0x03, 0x02, 0x01, 0x0A,
-    0x00, 0x02, 0x03, 0x07, 0x01, 0x0C, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x08, 0x00, 0x03, 0x03, 0x27,
-    0x03, 0x01, 0x1E, 0x08, 0x00, 0x03, 0x03, 0x27, 0x03, 0x41, 0x00, 0xC7, 0x00, 0x02, 0x03, 0x27,
-    0x1E, 0x08, 0x00, 0x03, 0x03, 0x41, 0x03, 0x27, 0x01, 0x06, 0x00, 0x02, 0x03, 0x41, 0x00, 0x06,
-    0x00, 0x0E, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x1E, 0x0A, 0x00, 0x02,
-    0x03, 0x07, 0x01, 0x0E, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x0C, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x10,
-    0x00, 0x02, 0x03, 0x27, 0x1E, 0x12, 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x0E, 0x00, 0x02, 0x03, 0x31,
-    0x00, 0x21, 0x00, 0x44, 0x00, 0x4A, 0x00, 0x50, 0x00, 0x58, 0x00, 0x60, 0x00, 0x68, 0x00, 0x70,
-    0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00, 0x8E, 0x00, 0x94, 0x00, 0x9C, 0x00, 0xA4, 0x00, 0xAC,
-    0x00, 0xB4, 0x00, 0xBA, 0x00, 0xC2, 0x00, 0xC8, 0x00, 0xCE, 0x00, 0xD4, 0x00, 0xDA, 0x00, 0xE0,
-    0x00, 0xE6, 0x00, 0xEC, 0x00, 0xF4, 0x00, 0xFA, 0x01, 0x02, 0x01, 0x08, 0x01, 0x0E, 0x01, 0x14,
-    0x01, 0x1A, 0x01, 0x20, 0x00, 0xC8, 0x00, 0x02, 0x03, 0x00, 0x00, 0xC9, 0x00, 0x02, 0x03, 0x01,
-    0x1E, 0xC0, 0x00, 0x03, 0x03, 0x02, 0x03, 0x00, 0x1E, 0xBE, 0x00, 0x03, 0x03, 0x02, 0x03, 0x01,
-    0x1E, 0xC4, 0x00, 0x03, 0x03, 0x02, 0x03, 0x03, 0x1E, 0xC2, 0x00, 0x03, 0x03, 0x02, 0x03, 0x09,
-    0x1E, 0xC6, 0x00, 0x03, 0x03, 0x02, 0x03, 0x23, 0x1E, 0xC0, 0x00, 0x03, 0x03, 0x02, 0x03, 0x40,
-    0x1E, 0xBE, 0x00, 0x03, 0x03, 0x02, 0x03, 0x41, 0x00, 0xCA, 0x00, 0x02, 0x03, 0x02, 0x1E, 0xBC,
-    0x00, 0x02, 0x03, 0x03, 0x1E, 0x14, 0x00, 0x03, 0x03, 0x04, 0x03, 0x00, 0x1E, 0x16, 0x00, 0x03,
-    0x03, 0x04, 0x03, 0x01, 0x1E, 0x14, 0x00, 0x03, 0x03, 0x04, 0x03, 0x40, 0x1E, 0x16, 0x00, 0x03,
-    0x03, 0x04, 0x03, 0x41, 0x01, 0x12, 0x00, 0x02, 0x03, 0x04, 0x1E, 0x1C, 0x00, 0x03, 0x03, 0x06,
-    0x03, 0x27, 0x01, 0x14, 0x00, 0x02, 0x03, 0x06, 0x01, 0x16, 0x00, 0x02, 0x03, 0x07, 0x00, 0xCB,
-    0x00, 0x02, 0x03, 0x08, 0x1E, 0xBA, 0x00, 0x02, 0x03, 0x09, 0x01, 0x1A, 0x00, 0x02, 0x03, 0x0C,
-    0x02, 0x04, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x06, 0x00, 0x02, 0x03, 0x11, 0x1E, 0xC6, 0x00, 0x03,
-    0x03, 0x23, 0x03, 0x02, 0x1E, 0xB8, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x1C, 0x00, 0x03, 0x03, 0x27,
-    0x03, 0x06, 0x02, 0x28, 0x00, 0x02, 0x03, 0x27, 0x01, 0x18, 0x00, 0x02, 0x03, 0x28, 0x1E, 0x18,
-    0x00, 0x02, 0x03, 0x2D, 0x1E, 0x1A, 0x00, 0x02, 0x03, 0x30, 0x00, 0xC8, 0x00, 0x02, 0x03, 0x40,
-    0x00, 0xC9, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x1E, 0x00, 0x02, 0x03, 0x07,
-    0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36,
-    0x00, 0x3C, 0x01, 0xF4, 0x00, 0x02, 0x03, 0x01, 0x01, 0x1C, 0x00, 0x02, 0x03, 0x02, 0x1E, 0x20,
-    0x00, 0x02, 0x03, 0x04, 0x01, 0x1E, 0x00, 0x02, 0x03, 0x06, 0x01, 0x20, 0x00, 0x02, 0x03, 0x07,
-    0x01, 0xE6, 0x00, 0x02, 0x03, 0x0C, 0x01, 0x22, 0x00, 0x02, 0x03, 0x27, 0x01, 0xF4, 0x00, 0x02,
-    0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E,
-    0x00, 0x34, 0x01, 0x24, 0x00, 0x02, 0x03, 0x02, 0x1E, 0x22, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x26,
-    0x00, 0x02, 0x03, 0x08, 0x02, 0x1E, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x24, 0x00, 0x02, 0x03, 0x23,
-    0x1E, 0x28, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x2A, 0x00, 0x02, 0x03, 0x2E, 0x00, 0x14, 0x00, 0x2A,
-    0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5C,
-    0x00, 0x64, 0x00, 0x6A, 0x00, 0x70, 0x00, 0x76, 0x00, 0x7C, 0x00, 0x82, 0x00, 0x88, 0x00, 0x8E,
-    0x00, 0x94, 0x00, 0x9A, 0x00, 0xA0, 0x00, 0xCC, 0x00, 0x02, 0x03, 0x00, 0x00, 0xCD, 0x00, 0x02,
-    0x03, 0x01, 0x00, 0xCE, 0x00, 0x02, 0x03, 0x02, 0x01, 0x28, 0x00, 0x02, 0x03, 0x03, 0x01, 0x2A,
-    0x00, 0x02, 0x03, 0x04, 0x01, 0x2C, 0x00, 0x02, 0x03, 0x06, 0x01, 0x30, 0x00, 0x02, 0x03, 0x07,
-    0x1E, 0x2E, 0x00, 0x03, 0x03, 0x08, 0x03, 0x01, 0x1E, 0x2E, 0x00, 0x03, 0x03, 0x08, 0x03, 0x41,
-    0x00, 0xCF, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xC8, 0x00, 0x02, 0x03, 0x09, 0x01, 0xCF, 0x00, 0x02,
-    0x03, 0x0C, 0x02, 0x08, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x0A, 0x00, 0x02, 0x03, 0x11, 0x1E, 0xCA,
-    0x00, 0x02, 0x03, 0x23, 0x01, 0x2E, 0x00, 0x02, 0x03, 0x28, 0x1E, 0x2C, 0x00, 0x02, 0x03, 0x30,
-    0x00, 0xCC, 0x00, 0x02, 0x03, 0x40, 0x00, 0xCD, 0x00, 0x02, 0x03, 0x41, 0x1E, 0x2E, 0x00, 0x02,
-    0x03, 0x44, 0x00, 0x01, 0x00, 0x04, 0x01, 0x34, 0x00, 0x02, 0x03, 0x02, 0x00, 0x06, 0x00, 0x0E,
-    0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x1E, 0x30, 0x00, 0x02, 0x03, 0x01,
-    0x01, 0xE8, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x32, 0x00, 0x02, 0x03, 0x23, 0x01, 0x36, 0x00, 0x02,
-    0x03, 0x27, 0x1E, 0x34, 0x00, 0x02, 0x03, 0x31, 0x1E, 0x30, 0x00, 0x02, 0x03, 0x41, 0x00, 0x09,
-    0x00, 0x14, 0x00, 0x1A, 0x00, 0x22, 0x00, 0x28, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x42,
-    0x00, 0x48, 0x01, 0x39, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x38, 0x00, 0x03, 0x03, 0x04, 0x03, 0x23,
-    0x01, 0x3D, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x38, 0x00, 0x03, 0x03, 0x23, 0x03, 0x04, 0x1E, 0x36,
-    0x00, 0x02, 0x03, 0x23, 0x01, 0x3B, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x3C, 0x00, 0x02, 0x03, 0x2D,
-    0x1E, 0x3A, 0x00, 0x02, 0x03, 0x31, 0x01, 0x39, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04, 0x00, 0x0A,
-    0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x1E, 0x3E, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x40, 0x00, 0x02,
-    0x03, 0x07, 0x1E, 0x42, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x3E, 0x00, 0x02, 0x03, 0x41, 0x00, 0x0B,
-    0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x42,
-    0x00, 0x48, 0x00, 0x4E, 0x00, 0x54, 0x01, 0xF8, 0x00, 0x02, 0x03, 0x00, 0x01, 0x43, 0x00, 0x02,
-    0x03, 0x01, 0x00, 0xD1, 0x00, 0x02, 0x03, 0x03, 0x1E, 0x44, 0x00, 0x02, 0x03, 0x07, 0x01, 0x47,
-    0x00, 0x02, 0x03, 0x0C, 0x1E, 0x46, 0x00, 0x02, 0x03, 0x23, 0x01, 0x45, 0x00, 0x02, 0x03, 0x27,
-    0x1E, 0x4A, 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x48, 0x00, 0x02, 0x03, 0x31, 0x01, 0xF8, 0x00, 0x02,
-    0x03, 0x40, 0x01, 0x43, 0x00, 0x02, 0x03, 0x41, 0x00, 0x34, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x78,
-    0x00, 0x80, 0x00, 0x86, 0x00, 0x8E, 0x00, 0x96, 0x00, 0x9E, 0x00, 0xA6, 0x00, 0xAE, 0x00, 0xB6,
-    0x00, 0xBE, 0x00, 0xC4, 0x00, 0xCC, 0x00, 0xD4, 0x00, 0xDC, 0x00, 0xE4, 0x00, 0xEC, 0x00, 0xF2,
-    0x00, 0xFA, 0x01, 0x02, 0x01, 0x0A, 0x01, 0x12, 0x01, 0x1A, 0x01, 0x20, 0x01, 0x26, 0x01, 0x2E,
-    0x01, 0x34, 0x01, 0x3C, 0x01, 0x42, 0x01, 0x4A, 0x01, 0x50, 0x01, 0x56, 0x01, 0x5C, 0x01, 0x62,
-    0x01, 0x68, 0x01, 0x70, 0x01, 0x78, 0x01, 0x80, 0x01, 0x88, 0x01, 0x90, 0x01, 0x98, 0x01, 0xA0,
-    0x01, 0xA6, 0x01, 0xAE, 0x01, 0xB6, 0x01, 0xBC, 0x01, 0xC4, 0x01, 0xCA, 0x01, 0xD2, 0x01, 0xD8,
-    0x01, 0xE0, 0x1E, 0xDC, 0x00, 0x03, 0x03, 0x00, 0x03, 0x1B, 0x00, 0xD2, 0x00, 0x02, 0x03, 0x00,
-    0x1E, 0xDA, 0x00, 0x03, 0x03, 0x01, 0x03, 0x1B, 0x00, 0xD3, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xD2,
-    0x00, 0x03, 0x03, 0x02, 0x03, 0x00, 0x1E, 0xD0, 0x00, 0x03, 0x03, 0x02, 0x03, 0x01, 0x1E, 0xD6,
-    0x00, 0x03, 0x03, 0x02, 0x03, 0x03, 0x1E, 0xD4, 0x00, 0x03, 0x03, 0x02, 0x03, 0x09, 0x1E, 0xD8,
-    0x00, 0x03, 0x03, 0x02, 0x03, 0x23, 0x1E, 0xD2, 0x00, 0x03, 0x03, 0x02, 0x03, 0x40, 0x1E, 0xD0,
-    0x00, 0x03, 0x03, 0x02, 0x03, 0x41, 0x00, 0xD4, 0x00, 0x02, 0x03, 0x02, 0x1E, 0x4C, 0x00, 0x03,
-    0x03, 0x03, 0x03, 0x01, 0x02, 0x2C, 0x00, 0x03, 0x03, 0x03, 0x03, 0x04, 0x1E, 0x4E, 0x00, 0x03,
-    0x03, 0x03, 0x03, 0x08, 0x1E, 0xE0, 0x00, 0x03, 0x03, 0x03, 0x03, 0x1B, 0x1E, 0x4C, 0x00, 0x03,
-    0x03, 0x03, 0x03, 0x41, 0x00, 0xD5, 0x00, 0x02, 0x03, 0x03, 0x1E, 0x50, 0x00, 0x03, 0x03, 0x04,
-    0x03, 0x00, 0x1E, 0x52, 0x00, 0x03, 0x03, 0x04, 0x03, 0x01, 0x01, 0xEC, 0x00, 0x03, 0x03, 0x04,
-    0x03, 0x28, 0x1E, 0x50, 0x00, 0x03, 0x03, 0x04, 0x03, 0x40, 0x1E, 0x52, 0x00, 0x03, 0x03, 0x04,
-    0x03, 0x41, 0x01, 0x4C, 0x00, 0x02, 0x03, 0x04, 0x01, 0x4E, 0x00, 0x02, 0x03, 0x06, 0x02, 0x30,
-    0x00, 0x03, 0x03, 0x07, 0x03, 0x04, 0x02, 0x2E, 0x00, 0x02, 0x03, 0x07, 0x02, 0x2A, 0x00, 0x03,
-    0x03, 0x08, 0x03, 0x04, 0x00, 0xD6, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xDE, 0x00, 0x03, 0x03, 0x09,
-    0x03, 0x1B, 0x1E, 0xCE, 0x00, 0x02, 0x03, 0x09, 0x01, 0x50, 0x00, 0x02, 0x03, 0x0B, 0x01, 0xD1,
-    0x00, 0x02, 0x03, 0x0C, 0x02, 0x0C, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x0E, 0x00, 0x02, 0x03, 0x11,
-    0x1E, 0xDC, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x00, 0x1E, 0xDA, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x01,
-    0x1E, 0xE0, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x03, 0x1E, 0xDE, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x09,
-    0x1E, 0xE2, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x23, 0x1E, 0xDC, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x40,
-    0x1E, 0xDA, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x41, 0x01, 0xA0, 0x00, 0x02, 0x03, 0x1B, 0x1E, 0xD8,
-    0x00, 0x03, 0x03, 0x23, 0x03, 0x02, 0x1E, 0xE2, 0x00, 0x03, 0x03, 0x23, 0x03, 0x1B, 0x1E, 0xCC,
-    0x00, 0x02, 0x03, 0x23, 0x01, 0xEC, 0x00, 0x03, 0x03, 0x28, 0x03, 0x04, 0x01, 0xEA, 0x00, 0x02,
-    0x03, 0x28, 0x1E, 0xDC, 0x00, 0x03, 0x03, 0x40, 0x03, 0x1B, 0x00, 0xD2, 0x00, 0x02, 0x03, 0x40,
-    0x1E, 0xDA, 0x00, 0x03, 0x03, 0x41, 0x03, 0x1B, 0x00, 0xD3, 0x00, 0x02, 0x03, 0x41, 0x00, 0x03,
-    0x00, 0x08, 0x00, 0x0E, 0x00, 0x14, 0x1E, 0x54, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x56, 0x00, 0x02,
-    0x03, 0x07, 0x1E, 0x54, 0x00, 0x02, 0x03, 0x41, 0x00, 0x0B, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x26,
-    0x00, 0x2C, 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x52, 0x00, 0x58,
-    0x01, 0x54, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x5C, 0x00, 0x03, 0x03, 0x04, 0x03, 0x23, 0x1E, 0x58,
-    0x00, 0x02, 0x03, 0x07, 0x01, 0x58, 0x00, 0x02, 0x03, 0x0C, 0x02, 0x10, 0x00, 0x02, 0x03, 0x0F,
-    0x02, 0x12, 0x00, 0x02, 0x03, 0x11, 0x1E, 0x5C, 0x00, 0x03, 0x03, 0x23, 0x03, 0x04, 0x1E, 0x5A,
-    0x00, 0x02, 0x03, 0x23, 0x01, 0x56, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x5E, 0x00, 0x02, 0x03, 0x31,
-    0x01, 0x54, 0x00, 0x02, 0x03, 0x41, 0x00, 0x0D, 0x00, 0x1C, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30,
-    0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x60, 0x00, 0x66,
-    0x00, 0x6E, 0x1E, 0x64, 0x00, 0x03, 0x03, 0x01, 0x03, 0x07, 0x01, 0x5A, 0x00, 0x02, 0x03, 0x01,
-    0x01, 0x5C, 0x00, 0x02, 0x03, 0x02, 0x1E, 0x68, 0x00, 0x03, 0x03, 0x07, 0x03, 0x23, 0x1E, 0x60,
-    0x00, 0x02, 0x03, 0x07, 0x1E, 0x66, 0x00, 0x03, 0x03, 0x0C, 0x03, 0x07, 0x01, 0x60, 0x00, 0x02,
-    0x03, 0x0C, 0x1E, 0x68, 0x00, 0x03, 0x03, 0x23, 0x03, 0x07, 0x1E, 0x62, 0x00, 0x02, 0x03, 0x23,
-    0x02, 0x18, 0x00, 0x02, 0x03, 0x26, 0x01, 0x5E, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x64, 0x00, 0x03,
-    0x03, 0x41, 0x03, 0x07, 0x01, 0x5A, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16,
-    0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0x6A, 0x00, 0x02, 0x03, 0x07,
-    0x01, 0x64, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x6C, 0x00, 0x02, 0x03, 0x23, 0x02, 0x1A, 0x00, 0x02,
-    0x03, 0x26, 0x01, 0x62, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x70, 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x6E,
-    0x00, 0x02, 0x03, 0x31, 0x00, 0x2D, 0x00, 0x5C, 0x00, 0x64, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x78,
-    0x00, 0x7E, 0x00, 0x86, 0x00, 0x8E, 0x00, 0x96, 0x00, 0x9C, 0x00, 0xA4, 0x00, 0xAA, 0x00, 0xB0,
-    0x00, 0xB8, 0x00, 0xC0, 0x00, 0xC8, 0x00, 0xD0, 0x00, 0xD8, 0x00, 0xE0, 0x00, 0xE6, 0x00, 0xEE,
-    0x00, 0xF4, 0x00, 0xFA, 0x01, 0x00, 0x01, 0x06, 0x01, 0x0C, 0x01, 0x12, 0x01, 0x1A, 0x01, 0x22,
-    0x01, 0x2A, 0x01, 0x32, 0x01, 0x3A, 0x01, 0x42, 0x01, 0x4A, 0x01, 0x50, 0x01, 0x58, 0x01, 0x5E,
-    0x01, 0x64, 0x01, 0x6A, 0x01, 0x70, 0x01, 0x76, 0x01, 0x7E, 0x01, 0x84, 0x01, 0x8C, 0x01, 0x92,
-    0x1E, 0xEA, 0x00, 0x03, 0x03, 0x00, 0x03, 0x1B, 0x00, 0xD9, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xE8,
-    0x00, 0x03, 0x03, 0x01, 0x03, 0x1B, 0x00, 0xDA, 0x00, 0x02, 0x03, 0x01, 0x00, 0xDB, 0x00, 0x02,
-    0x03, 0x02, 0x1E, 0x78, 0x00, 0x03, 0x03, 0x03, 0x03, 0x01, 0x1E, 0xEE, 0x00, 0x03, 0x03, 0x03,
-    0x03, 0x1B, 0x1E, 0x78, 0x00, 0x03, 0x03, 0x03, 0x03, 0x41, 0x01, 0x68, 0x00, 0x02, 0x03, 0x03,
-    0x1E, 0x7A, 0x00, 0x03, 0x03, 0x04, 0x03, 0x08, 0x01, 0x6A, 0x00, 0x02, 0x03, 0x04, 0x01, 0x6C,
-    0x00, 0x02, 0x03, 0x06, 0x01, 0xDB, 0x00, 0x03, 0x03, 0x08, 0x03, 0x00, 0x01, 0xD7, 0x00, 0x03,
-    0x03, 0x08, 0x03, 0x01, 0x01, 0xD5, 0x00, 0x03, 0x03, 0x08, 0x03, 0x04, 0x01, 0xD9, 0x00, 0x03,
-    0x03, 0x08, 0x03, 0x0C, 0x01, 0xDB, 0x00, 0x03, 0x03, 0x08, 0x03, 0x40, 0x01, 0xD7, 0x00, 0x03,
-    0x03, 0x08, 0x03, 0x41, 0x00, 0xDC, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xEC, 0x00, 0x03, 0x03, 0x09,
-    0x03, 0x1B, 0x1E, 0xE6, 0x00, 0x02, 0x03, 0x09, 0x01, 0x6E, 0x00, 0x02, 0x03, 0x0A, 0x01, 0x70,
-    0x00, 0x02, 0x03, 0x0B, 0x01, 0xD3, 0x00, 0x02, 0x03, 0x0C, 0x02, 0x14, 0x00, 0x02, 0x03, 0x0F,
-    0x02, 0x16, 0x00, 0x02, 0x03, 0x11, 0x1E, 0xEA, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x00, 0x1E, 0xE8,
-    0x00, 0x03, 0x03, 0x1B, 0x03, 0x01, 0x1E, 0xEE, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x03, 0x1E, 0xEC,
-    0x00, 0x03, 0x03, 0x1B, 0x03, 0x09, 0x1E, 0xF0, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x23, 0x1E, 0xEA,
-    0x00, 0x03, 0x03, 0x1B, 0x03, 0x40, 0x1E, 0xE8, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x41, 0x01, 0xAF,
-    0x00, 0x02, 0x03, 0x1B, 0x1E, 0xF0, 0x00, 0x03, 0x03, 0x23, 0x03, 0x1B, 0x1E, 0xE4, 0x00, 0x02,
-    0x03, 0x23, 0x1E, 0x72, 0x00, 0x02, 0x03, 0x24, 0x01, 0x72, 0x00, 0x02, 0x03, 0x28, 0x1E, 0x76,
-    0x00, 0x02, 0x03, 0x2D, 0x1E, 0x74, 0x00, 0x02, 0x03, 0x30, 0x1E, 0xEA, 0x00, 0x03, 0x03, 0x40,
-    0x03, 0x1B, 0x00, 0xD9, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xE8, 0x00, 0x03, 0x03, 0x41, 0x03, 0x1B,
-    0x00, 0xDA, 0x00, 0x02, 0x03, 0x41, 0x01, 0xD7, 0x00, 0x02, 0x03, 0x44, 0x00, 0x02, 0x00, 0x06,
-    0x00, 0x0C, 0x1E, 0x7C, 0x00, 0x02, 0x03, 0x03, 0x1E, 0x7E, 0x00, 0x02, 0x03, 0x23, 0x00, 0x08,
-    0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C,
-    0x1E, 0x80, 0x00, 0x02, 0x03, 0x00, 0x1E, 0x82, 0x00, 0x02, 0x03, 0x01, 0x01, 0x74, 0x00, 0x02,
-    0x03, 0x02, 0x1E, 0x86, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x84, 0x00, 0x02, 0x03, 0x08, 0x1E, 0x88,
-    0x00, 0x02, 0x03, 0x23, 0x1E, 0x80, 0x00, 0x02, 0x03, 0x40, 0x1E, 0x82, 0x00, 0x02, 0x03, 0x41,
-    0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0x8A, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x8C, 0x00, 0x02,
-    0x03, 0x08, 0x00, 0x0B, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36,
-    0x00, 0x3C, 0x00, 0x42, 0x00, 0x48, 0x00, 0x4E, 0x00, 0x54, 0x1E, 0xF2, 0x00, 0x02, 0x03, 0x00,
-    0x00, 0xDD, 0x00, 0x02, 0x03, 0x01, 0x01, 0x76, 0x00, 0x02, 0x03, 0x02, 0x1E, 0xF8, 0x00, 0x02,
-    0x03, 0x03, 0x02, 0x32, 0x00, 0x02, 0x03, 0x04, 0x1E, 0x8E, 0x00, 0x02, 0x03, 0x07, 0x01, 0x78,
-    0x00, 0x02, 0x03, 0x08, 0x1E, 0xF6, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xF4, 0x00, 0x02, 0x03, 0x23,
-    0x1E, 0xF2, 0x00, 0x02, 0x03, 0x40, 0x00, 0xDD, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10,
-    0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x01, 0x79, 0x00, 0x02,
-    0x03, 0x01, 0x1E, 0x90, 0x00, 0x02, 0x03, 0x02, 0x01, 0x7B, 0x00, 0x02, 0x03, 0x07, 0x01, 0x7D,
-    0x00, 0x02, 0x03, 0x0C, 0x1E, 0x92, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x94, 0x00, 0x02, 0x03, 0x31,
-    0x01, 0x79, 0x00, 0x02, 0x03, 0x41, 0x00, 0x26, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x62,
-    0x00, 0x6A, 0x00, 0x72, 0x00, 0x7A, 0x00, 0x82, 0x00, 0x8A, 0x00, 0x92, 0x00, 0x98, 0x00, 0x9E,
-    0x00, 0xA4, 0x00, 0xAC, 0x00, 0xB4, 0x00, 0xBC, 0x00, 0xC4, 0x00, 0xCC, 0x00, 0xD4, 0x00, 0xDC,
-    0x00, 0xE2, 0x00, 0xEA, 0x00, 0xF0, 0x00, 0xF8, 0x00, 0xFE, 0x01, 0x04, 0x01, 0x0C, 0x01, 0x14,
-    0x01, 0x1A, 0x01, 0x20, 0x01, 0x26, 0x01, 0x2C, 0x01, 0x34, 0x01, 0x3C, 0x01, 0x42, 0x01, 0x48,
-    0x01, 0x4E, 0x01, 0x54, 0x00, 0xE0, 0x00, 0x02, 0x03, 0x00, 0x00, 0xE1, 0x00, 0x02, 0x03, 0x01,
-    0x1E, 0xA7, 0x00, 0x03, 0x03, 0x02, 0x03, 0x00, 0x1E, 0xA5, 0x00, 0x03, 0x03, 0x02, 0x03, 0x01,
-    0x1E, 0xAB, 0x00, 0x03, 0x03, 0x02, 0x03, 0x03, 0x1E, 0xA9, 0x00, 0x03, 0x03, 0x02, 0x03, 0x09,
-    0x1E, 0xAD, 0x00, 0x03, 0x03, 0x02, 0x03, 0x23, 0x1E, 0xA7, 0x00, 0x03, 0x03, 0x02, 0x03, 0x40,
-    0x1E, 0xA5, 0x00, 0x03, 0x03, 0x02, 0x03, 0x41, 0x00, 0xE2, 0x00, 0x02, 0x03, 0x02, 0x00, 0xE3,
-    0x00, 0x02, 0x03, 0x03, 0x01, 0x01, 0x00, 0x02, 0x03, 0x04, 0x1E, 0xB1, 0x00, 0x03, 0x03, 0x06,
-    0x03, 0x00, 0x1E, 0xAF, 0x00, 0x03, 0x03, 0x06, 0x03, 0x01, 0x1E, 0xB5, 0x00, 0x03, 0x03, 0x06,
-    0x03, 0x03, 0x1E, 0xB3, 0x00, 0x03, 0x03, 0x06, 0x03, 0x09, 0x1E, 0xB7, 0x00, 0x03, 0x03, 0x06,
-    0x03, 0x23, 0x1E, 0xB1, 0x00, 0x03, 0x03, 0x06, 0x03, 0x40, 0x1E, 0xAF, 0x00, 0x03, 0x03, 0x06,
-    0x03, 0x41, 0x01, 0x03, 0x00, 0x02, 0x03, 0x06, 0x01, 0xE1, 0x00, 0x03, 0x03, 0x07, 0x03, 0x04,
-    0x02, 0x27, 0x00, 0x02, 0x03, 0x07, 0x01, 0xDF, 0x00, 0x03, 0x03, 0x08, 0x03, 0x04, 0x00, 0xE4,
-    0x00, 0x02, 0x03, 0x08, 0x1E, 0xA3, 0x00, 0x02, 0x03, 0x09, 0x01, 0xFB, 0x00, 0x03, 0x03, 0x0A,
-    0x03, 0x01, 0x01, 0xFB, 0x00, 0x03, 0x03, 0x0A, 0x03, 0x41, 0x00, 0xE5, 0x00, 0x02, 0x03, 0x0A,
-    0x01, 0xCE, 0x00, 0x02, 0x03, 0x0C, 0x02, 0x01, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x03, 0x00, 0x02,
-    0x03, 0x11, 0x1E, 0xAD, 0x00, 0x03, 0x03, 0x23, 0x03, 0x02, 0x1E, 0xB7, 0x00, 0x03, 0x03, 0x23,
-    0x03, 0x06, 0x1E, 0xA1, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x01, 0x00, 0x02, 0x03, 0x25, 0x01, 0x05,
-    0x00, 0x02, 0x03, 0x28, 0x00, 0xE0, 0x00, 0x02, 0x03, 0x40, 0x00, 0xE1, 0x00, 0x02, 0x03, 0x41,
-    0x00, 0x03, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x14, 0x1E, 0x03, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x05,
-    0x00, 0x02, 0x03, 0x23, 0x1E, 0x07, 0x00, 0x02, 0x03, 0x31, 0x00, 0x0A, 0x00, 0x16, 0x00, 0x1E,
-    0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54,
-    0x1E, 0x09, 0x00, 0x03, 0x03, 0x01, 0x03, 0x27, 0x01, 0x07, 0x00, 0x02, 0x03, 0x01, 0x01, 0x09,
-    0x00, 0x02, 0x03, 0x02, 0x01, 0x0B, 0x00, 0x02, 0x03, 0x07, 0x01, 0x0D, 0x00, 0x02, 0x03, 0x0C,
-    0x1E, 0x09, 0x00, 0x03, 0x03, 0x27, 0x03, 0x01, 0x1E, 0x09, 0x00, 0x03, 0x03, 0x27, 0x03, 0x41,
-    0x00, 0xE7, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x09, 0x00, 0x03, 0x03, 0x41, 0x03, 0x27, 0x01, 0x07,
-    0x00, 0x02, 0x03, 0x41, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26,
-    0x00, 0x2C, 0x1E, 0x0B, 0x00, 0x02, 0x03, 0x07, 0x01, 0x0F, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x0D,
-    0x00, 0x02, 0x03, 0x23, 0x1E, 0x11, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x13, 0x00, 0x02, 0x03, 0x2D,
-    0x1E, 0x0F, 0x00, 0x02, 0x03, 0x31, 0x00, 0x21, 0x00, 0x44, 0x00, 0x4A, 0x00, 0x50, 0x00, 0x58,
-    0x00, 0x60, 0x00, 0x68, 0x00, 0x70, 0x00, 0x78, 0x00, 0x80, 0x00, 0x88, 0x00, 0x8E, 0x00, 0x94,
-    0x00, 0x9C, 0x00, 0xA4, 0x00, 0xAC, 0x00, 0xB4, 0x00, 0xBA, 0x00, 0xC2, 0x00, 0xC8, 0x00, 0xCE,
-    0x00, 0xD4, 0x00, 0xDA, 0x00, 0xE0, 0x00, 0xE6, 0x00, 0xEC, 0x00, 0xF4, 0x00, 0xFA, 0x01, 0x02,
-    0x01, 0x08, 0x01, 0x0E, 0x01, 0x14, 0x01, 0x1A, 0x01, 0x20, 0x00, 0xE8, 0x00, 0x02, 0x03, 0x00,
-    0x00, 0xE9, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xC1, 0x00, 0x03, 0x03, 0x02, 0x03, 0x00, 0x1E, 0xBF,
-    0x00, 0x03, 0x03, 0x02, 0x03, 0x01, 0x1E, 0xC5, 0x00, 0x03, 0x03, 0x02, 0x03, 0x03, 0x1E, 0xC3,
-    0x00, 0x03, 0x03, 0x02, 0x03, 0x09, 0x1E, 0xC7, 0x00, 0x03, 0x03, 0x02, 0x03, 0x23, 0x1E, 0xC1,
-    0x00, 0x03, 0x03, 0x02, 0x03, 0x40, 0x1E, 0xBF, 0x00, 0x03, 0x03, 0x02, 0x03, 0x41, 0x00, 0xEA,
-    0x00, 0x02, 0x03, 0x02, 0x1E, 0xBD, 0x00, 0x02, 0x03, 0x03, 0x1E, 0x15, 0x00, 0x03, 0x03, 0x04,
-    0x03, 0x00, 0x1E, 0x17, 0x00, 0x03, 0x03, 0x04, 0x03, 0x01, 0x1E, 0x15, 0x00, 0x03, 0x03, 0x04,
-    0x03, 0x40, 0x1E, 0x17, 0x00, 0x03, 0x03, 0x04, 0x03, 0x41, 0x01, 0x13, 0x00, 0x02, 0x03, 0x04,
-    0x1E, 0x1D, 0x00, 0x03, 0x03, 0x06, 0x03, 0x27, 0x01, 0x15, 0x00, 0x02, 0x03, 0x06, 0x01, 0x17,
-    0x00, 0x02, 0x03, 0x07, 0x00, 0xEB, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xBB, 0x00, 0x02, 0x03, 0x09,
-    0x01, 0x1B, 0x00, 0x02, 0x03, 0x0C, 0x02, 0x05, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x07, 0x00, 0x02,
-    0x03, 0x11, 0x1E, 0xC7, 0x00, 0x03, 0x03, 0x23, 0x03, 0x02, 0x1E, 0xB9, 0x00, 0x02, 0x03, 0x23,
-    0x1E, 0x1D, 0x00, 0x03, 0x03, 0x27, 0x03, 0x06, 0x02, 0x29, 0x00, 0x02, 0x03, 0x27, 0x01, 0x19,
-    0x00, 0x02, 0x03, 0x28, 0x1E, 0x19, 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x1B, 0x00, 0x02, 0x03, 0x30,
-    0x00, 0xE8, 0x00, 0x02, 0x03, 0x40, 0x00, 0xE9, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04,
-    0x1E, 0x1F, 0x00, 0x02, 0x03, 0x07, 0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24,
-    0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x01, 0xF5, 0x00, 0x02, 0x03, 0x01, 0x01, 0x1D,
-    0x00, 0x02, 0x03, 0x02, 0x1E, 0x21, 0x00, 0x02, 0x03, 0x04, 0x01, 0x1F, 0x00, 0x02, 0x03, 0x06,
-    0x01, 0x21, 0x00, 0x02, 0x03, 0x07, 0x01, 0xE7, 0x00, 0x02, 0x03, 0x0C, 0x01, 0x23, 0x00, 0x02,
-    0x03, 0x27, 0x01, 0xF5, 0x00, 0x02, 0x03, 0x41, 0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E,
-    0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x01, 0x25, 0x00, 0x02, 0x03, 0x02,
-    0x1E, 0x23, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x27, 0x00, 0x02, 0x03, 0x08, 0x02, 0x1F, 0x00, 0x02,
-    0x03, 0x0C, 0x1E, 0x25, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x29, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x2B,
-    0x00, 0x02, 0x03, 0x2E, 0x1E, 0x96, 0x00, 0x02, 0x03, 0x31, 0x00, 0x13, 0x00, 0x28, 0x00, 0x2E,
-    0x00, 0x34, 0x00, 0x3A, 0x00, 0x40, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5C, 0x00, 0x62,
-    0x00, 0x68, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x7A, 0x00, 0x80, 0x00, 0x86, 0x00, 0x8C, 0x00, 0x92,
-    0x00, 0x98, 0x00, 0xEC, 0x00, 0x02, 0x03, 0x00, 0x00, 0xED, 0x00, 0x02, 0x03, 0x01, 0x00, 0xEE,
-    0x00, 0x02, 0x03, 0x02, 0x01, 0x29, 0x00, 0x02, 0x03, 0x03, 0x01, 0x2B, 0x00, 0x02, 0x03, 0x04,
-    0x01, 0x2D, 0x00, 0x02, 0x03, 0x06, 0x1E, 0x2F, 0x00, 0x03, 0x03, 0x08, 0x03, 0x01, 0x1E, 0x2F,
-    0x00, 0x03, 0x03, 0x08, 0x03, 0x41, 0x00, 0xEF, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xC9, 0x00, 0x02,
-    0x03, 0x09, 0x01, 0xD0, 0x00, 0x02, 0x03, 0x0C, 0x02, 0x09, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x0B,
-    0x00, 0x02, 0x03, 0x11, 0x1E, 0xCB, 0x00, 0x02, 0x03, 0x23, 0x01, 0x2F, 0x00, 0x02, 0x03, 0x28,
-    0x1E, 0x2D, 0x00, 0x02, 0x03, 0x30, 0x00, 0xEC, 0x00, 0x02, 0x03, 0x40, 0x00, 0xED, 0x00, 0x02,
-    0x03, 0x41, 0x1E, 0x2F, 0x00, 0x02, 0x03, 0x44, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x01, 0x35,
-    0x00, 0x02, 0x03, 0x02, 0x01, 0xF0, 0x00, 0x02, 0x03, 0x0C, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x14,
-    0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x1E, 0x31, 0x00, 0x02, 0x03, 0x01, 0x01, 0xE9,
-    0x00, 0x02, 0x03, 0x0C, 0x1E, 0x33, 0x00, 0x02, 0x03, 0x23, 0x01, 0x37, 0x00, 0x02, 0x03, 0x27,
-    0x1E, 0x35, 0x00, 0x02, 0x03, 0x31, 0x1E, 0x31, 0x00, 0x02, 0x03, 0x41, 0x00, 0x09, 0x00, 0x14,
-    0x00, 0x1A, 0x00, 0x22, 0x00, 0x28, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48,
-    0x01, 0x3A, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x39, 0x00, 0x03, 0x03, 0x04, 0x03, 0x23, 0x01, 0x3E,
-    0x00, 0x02, 0x03, 0x0C, 0x1E, 0x39, 0x00, 0x03, 0x03, 0x23, 0x03, 0x04, 0x1E, 0x37, 0x00, 0x02,
-    0x03, 0x23, 0x01, 0x3C, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x3D, 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x3B,
-    0x00, 0x02, 0x03, 0x31, 0x01, 0x3A, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10,
-    0x00, 0x16, 0x00, 0x1C, 0x1E, 0x3F, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x41, 0x00, 0x02, 0x03, 0x07,
-    0x1E, 0x43, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x3F, 0x00, 0x02, 0x03, 0x41, 0x00, 0x0B, 0x00, 0x18,
-    0x00, 0x1E, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x00, 0x42, 0x00, 0x48,
-    0x00, 0x4E, 0x00, 0x54, 0x01, 0xF9, 0x00, 0x02, 0x03, 0x00, 0x01, 0x44, 0x00, 0x02, 0x03, 0x01,
-    0x00, 0xF1, 0x00, 0x02, 0x03, 0x03, 0x1E, 0x45, 0x00, 0x02, 0x03, 0x07, 0x01, 0x48, 0x00, 0x02,
-    0x03, 0x0C, 0x1E, 0x47, 0x00, 0x02, 0x03, 0x23, 0x01, 0x46, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x4B,
-    0x00, 0x02, 0x03, 0x2D, 0x1E, 0x49, 0x00, 0x02, 0x03, 0x31, 0x01, 0xF9, 0x00, 0x02, 0x03, 0x40,
-    0x01, 0x44, 0x00, 0x02, 0x03, 0x41, 0x00, 0x34, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x78, 0x00, 0x80,
-    0x00, 0x86, 0x00, 0x8E, 0x00, 0x96, 0x00, 0x9E, 0x00, 0xA6, 0x00, 0xAE, 0x00, 0xB6, 0x00, 0xBE,
-    0x00, 0xC4, 0x00, 0xCC, 0x00, 0xD4, 0x00, 0xDC, 0x00, 0xE4, 0x00, 0xEC, 0x00, 0xF2, 0x00, 0xFA,
-    0x01, 0x02, 0x01, 0x0A, 0x01, 0x12, 0x01, 0x1A, 0x01, 0x20, 0x01, 0x26, 0x01, 0x2E, 0x01, 0x34,
-    0x01, 0x3C, 0x01, 0x42, 0x01, 0x4A, 0x01, 0x50, 0x01, 0x56, 0x01, 0x5C, 0x01, 0x62, 0x01, 0x68,
-    0x01, 0x70, 0x01, 0x78, 0x01, 0x80, 0x01, 0x88, 0x01, 0x90, 0x01, 0x98, 0x01, 0xA0, 0x01, 0xA6,
-    0x01, 0xAE, 0x01, 0xB6, 0x01, 0xBC, 0x01, 0xC4, 0x01, 0xCA, 0x01, 0xD2, 0x01, 0xD8, 0x01, 0xE0,
-    0x1E, 0xDD, 0x00, 0x03, 0x03, 0x00, 0x03, 0x1B, 0x00, 0xF2, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xDB,
-    0x00, 0x03, 0x03, 0x01, 0x03, 0x1B, 0x00, 0xF3, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xD3, 0x00, 0x03,
-    0x03, 0x02, 0x03, 0x00, 0x1E, 0xD1, 0x00, 0x03, 0x03, 0x02, 0x03, 0x01, 0x1E, 0xD7, 0x00, 0x03,
-    0x03, 0x02, 0x03, 0x03, 0x1E, 0xD5, 0x00, 0x03, 0x03, 0x02, 0x03, 0x09, 0x1E, 0xD9, 0x00, 0x03,
-    0x03, 0x02, 0x03, 0x23, 0x1E, 0xD3, 0x00, 0x03, 0x03, 0x02, 0x03, 0x40, 0x1E, 0xD1, 0x00, 0x03,
-    0x03, 0x02, 0x03, 0x41, 0x00, 0xF4, 0x00, 0x02, 0x03, 0x02, 0x1E, 0x4D, 0x00, 0x03, 0x03, 0x03,
-    0x03, 0x01, 0x02, 0x2D, 0x00, 0x03, 0x03, 0x03, 0x03, 0x04, 0x1E, 0x4F, 0x00, 0x03, 0x03, 0x03,
-    0x03, 0x08, 0x1E, 0xE1, 0x00, 0x03, 0x03, 0x03, 0x03, 0x1B, 0x1E, 0x4D, 0x00, 0x03, 0x03, 0x03,
-    0x03, 0x41, 0x00, 0xF5, 0x00, 0x02, 0x03, 0x03, 0x1E, 0x51, 0x00, 0x03, 0x03, 0x04, 0x03, 0x00,
-    0x1E, 0x53, 0x00, 0x03, 0x03, 0x04, 0x03, 0x01, 0x01, 0xED, 0x00, 0x03, 0x03, 0x04, 0x03, 0x28,
-    0x1E, 0x51, 0x00, 0x03, 0x03, 0x04, 0x03, 0x40, 0x1E, 0x53, 0x00, 0x03, 0x03, 0x04, 0x03, 0x41,
-    0x01, 0x4D, 0x00, 0x02, 0x03, 0x04, 0x01, 0x4F, 0x00, 0x02, 0x03, 0x06, 0x02, 0x31, 0x00, 0x03,
-    0x03, 0x07, 0x03, 0x04, 0x02, 0x2F, 0x00, 0x02, 0x03, 0x07, 0x02, 0x2B, 0x00, 0x03, 0x03, 0x08,
-    0x03, 0x04, 0x00, 0xF6, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xDF, 0x00, 0x03, 0x03, 0x09, 0x03, 0x1B,
-    0x1E, 0xCF, 0x00, 0x02, 0x03, 0x09, 0x01, 0x51, 0x00, 0x02, 0x03, 0x0B, 0x01, 0xD2, 0x00, 0x02,
-    0x03, 0x0C, 0x02, 0x0D, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x0F, 0x00, 0x02, 0x03, 0x11, 0x1E, 0xDD,
-    0x00, 0x03, 0x03, 0x1B, 0x03, 0x00, 0x1E, 0xDB, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x01, 0x1E, 0xE1,
-    0x00, 0x03, 0x03, 0x1B, 0x03, 0x03, 0x1E, 0xDF, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x09, 0x1E, 0xE3,
-    0x00, 0x03, 0x03, 0x1B, 0x03, 0x23, 0x1E, 0xDD, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x40, 0x1E, 0xDB,
-    0x00, 0x03, 0x03, 0x1B, 0x03, 0x41, 0x01, 0xA1, 0x00, 0x02, 0x03, 0x1B, 0x1E, 0xD9, 0x00, 0x03,
-    0x03, 0x23, 0x03, 0x02, 0x1E, 0xE3, 0x00, 0x03, 0x03, 0x23, 0x03, 0x1B, 0x1E, 0xCD, 0x00, 0x02,
-    0x03, 0x23, 0x01, 0xED, 0x00, 0x03, 0x03, 0x28, 0x03, 0x04, 0x01, 0xEB, 0x00, 0x02, 0x03, 0x28,
-    0x1E, 0xDD, 0x00, 0x03, 0x03, 0x40, 0x03, 0x1B, 0x00, 0xF2, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xDB,
-    0x00, 0x03, 0x03, 0x41, 0x03, 0x1B, 0x00, 0xF3, 0x00, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x08,
-    0x00, 0x0E, 0x00, 0x14, 0x1E, 0x55, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x57, 0x00, 0x02, 0x03, 0x07,
-    0x1E, 0x55, 0x00, 0x02, 0x03, 0x41, 0x00, 0x0B, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x26, 0x00, 0x2C,
-    0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x52, 0x00, 0x58, 0x01, 0x55,
-    0x00, 0x02, 0x03, 0x01, 0x1E, 0x5D, 0x00, 0x03, 0x03, 0x04, 0x03, 0x23, 0x1E, 0x59, 0x00, 0x02,
-    0x03, 0x07, 0x01, 0x59, 0x00, 0x02, 0x03, 0x0C, 0x02, 0x11, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x13,
-    0x00, 0x02, 0x03, 0x11, 0x1E, 0x5D, 0x00, 0x03, 0x03, 0x23, 0x03, 0x04, 0x1E, 0x5B, 0x00, 0x02,
-    0x03, 0x23, 0x01, 0x57, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x5F, 0x00, 0x02, 0x03, 0x31, 0x01, 0x55,
-    0x00, 0x02, 0x03, 0x41, 0x00, 0x0D, 0x00, 0x1C, 0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x38,
-    0x00, 0x3E, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5A, 0x00, 0x60, 0x00, 0x66, 0x00, 0x6E,
-    0x1E, 0x65, 0x00, 0x03, 0x03, 0x01, 0x03, 0x07, 0x01, 0x5B, 0x00, 0x02, 0x03, 0x01, 0x01, 0x5D,
-    0x00, 0x02, 0x03, 0x02, 0x1E, 0x69, 0x00, 0x03, 0x03, 0x07, 0x03, 0x23, 0x1E, 0x61, 0x00, 0x02,
-    0x03, 0x07, 0x1E, 0x67, 0x00, 0x03, 0x03, 0x0C, 0x03, 0x07, 0x01, 0x61, 0x00, 0x02, 0x03, 0x0C,
-    0x1E, 0x69, 0x00, 0x03, 0x03, 0x23, 0x03, 0x07, 0x1E, 0x63, 0x00, 0x02, 0x03, 0x23, 0x02, 0x19,
-    0x00, 0x02, 0x03, 0x26, 0x01, 0x5F, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x65, 0x00, 0x03, 0x03, 0x41,
-    0x03, 0x07, 0x01, 0x5B, 0x00, 0x02, 0x03, 0x41, 0x00, 0x08, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E,
-    0x00, 0x24, 0x00, 0x2A, 0x00, 0x30, 0x00, 0x36, 0x00, 0x3C, 0x1E, 0x6B, 0x00, 0x02, 0x03, 0x07,
-    0x1E, 0x97, 0x00, 0x02, 0x03, 0x08, 0x01, 0x65, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x6D, 0x00, 0x02,
-    0x03, 0x23, 0x02, 0x1B, 0x00, 0x02, 0x03, 0x26, 0x01, 0x63, 0x00, 0x02, 0x03, 0x27, 0x1E, 0x71,
-    0x00, 0x02, 0x03, 0x2D, 0x1E, 0x6F, 0x00, 0x02, 0x03, 0x31, 0x00, 0x2D, 0x00, 0x5C, 0x00, 0x64,
-    0x00, 0x6A, 0x00, 0x72, 0x00, 0x78, 0x00, 0x7E, 0x00, 0x86, 0x00, 0x8E, 0x00, 0x96, 0x00, 0x9C,
-    0x00, 0xA4, 0x00, 0xAA, 0x00, 0xB0, 0x00, 0xB8, 0x00, 0xC0, 0x00, 0xC8, 0x00, 0xD0, 0x00, 0xD8,
-    0x00, 0xE0, 0x00, 0xE6, 0x00, 0xEE, 0x00, 0xF4, 0x00, 0xFA, 0x01, 0x00, 0x01, 0x06, 0x01, 0x0C,
-    0x01, 0x12, 0x01, 0x1A, 0x01, 0x22, 0x01, 0x2A, 0x01, 0x32, 0x01, 0x3A, 0x01, 0x42, 0x01, 0x4A,
-    0x01, 0x50, 0x01, 0x58, 0x01, 0x5E, 0x01, 0x64, 0x01, 0x6A, 0x01, 0x70, 0x01, 0x76, 0x01, 0x7E,
-    0x01, 0x84, 0x01, 0x8C, 0x01, 0x92, 0x1E, 0xEB, 0x00, 0x03, 0x03, 0x00, 0x03, 0x1B, 0x00, 0xF9,
-    0x00, 0x02, 0x03, 0x00, 0x1E, 0xE9, 0x00, 0x03, 0x03, 0x01, 0x03, 0x1B, 0x00, 0xFA, 0x00, 0x02,
-    0x03, 0x01, 0x00, 0xFB, 0x00, 0x02, 0x03, 0x02, 0x1E, 0x79, 0x00, 0x03, 0x03, 0x03, 0x03, 0x01,
-    0x1E, 0xEF, 0x00, 0x03, 0x03, 0x03, 0x03, 0x1B, 0x1E, 0x79, 0x00, 0x03, 0x03, 0x03, 0x03, 0x41,
-    0x01, 0x69, 0x00, 0x02, 0x03, 0x03, 0x1E, 0x7B, 0x00, 0x03, 0x03, 0x04, 0x03, 0x08, 0x01, 0x6B,
-    0x00, 0x02, 0x03, 0x04, 0x01, 0x6D, 0x00, 0x02, 0x03, 0x06, 0x01, 0xDC, 0x00, 0x03, 0x03, 0x08,
-    0x03, 0x00, 0x01, 0xD8, 0x00, 0x03, 0x03, 0x08, 0x03, 0x01, 0x01, 0xD6, 0x00, 0x03, 0x03, 0x08,
-    0x03, 0x04, 0x01, 0xDA, 0x00, 0x03, 0x03, 0x08, 0x03, 0x0C, 0x01, 0xDC, 0x00, 0x03, 0x03, 0x08,
-    0x03, 0x40, 0x01, 0xD8, 0x00, 0x03, 0x03, 0x08, 0x03, 0x41, 0x00, 0xFC, 0x00, 0x02, 0x03, 0x08,
-    0x1E, 0xED, 0x00, 0x03, 0x03, 0x09, 0x03, 0x1B, 0x1E, 0xE7, 0x00, 0x02, 0x03, 0x09, 0x01, 0x6F,
-    0x00, 0x02, 0x03, 0x0A, 0x01, 0x71, 0x00, 0x02, 0x03, 0x0B, 0x01, 0xD4, 0x00, 0x02, 0x03, 0x0C,
-    0x02, 0x15, 0x00, 0x02, 0x03, 0x0F, 0x02, 0x17, 0x00, 0x02, 0x03, 0x11, 0x1E, 0xEB, 0x00, 0x03,
-    0x03, 0x1B, 0x03, 0x00, 0x1E, 0xE9, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x01, 0x1E, 0xEF, 0x00, 0x03,
-    0x03, 0x1B, 0x03, 0x03, 0x1E, 0xED, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x09, 0x1E, 0xF1, 0x00, 0x03,
-    0x03, 0x1B, 0x03, 0x23, 0x1E, 0xEB, 0x00, 0x03, 0x03, 0x1B, 0x03, 0x40, 0x1E, 0xE9, 0x00, 0x03,
-    0x03, 0x1B, 0x03, 0x41, 0x01, 0xB0, 0x00, 0x02, 0x03, 0x1B, 0x1E, 0xF1, 0x00, 0x03, 0x03, 0x23,
-    0x03, 0x1B, 0x1E, 0xE5, 0x00, 0x02, 0x03, 0x23, 0x1E, 0x73, 0x00, 0x02, 0x03, 0x24, 0x01, 0x73,
-    0x00, 0x02, 0x03, 0x28, 0x1E, 0x77, 0x00, 0x02, 0x03, 0x2D, 0x1E, 0x75, 0x00, 0x02, 0x03, 0x30,
-    0x1E, 0xEB, 0x00, 0x03, 0x03, 0x40, 0x03, 0x1B, 0x00, 0xF9, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xE9,
-    0x00, 0x03, 0x03, 0x41, 0x03, 0x1B, 0x00, 0xFA, 0x00, 0x02, 0x03, 0x41, 0x01, 0xD8, 0x00, 0x02,
-    0x03, 0x44, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0x7D, 0x00, 0x02, 0x03, 0x03, 0x1E, 0x7F,
-    0x00, 0x02, 0x03, 0x23, 0x00, 0x09, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C,
-    0x00, 0x32, 0x00, 0x38, 0x00, 0x3E, 0x00, 0x44, 0x1E, 0x81, 0x00, 0x02, 0x03, 0x00, 0x1E, 0x83,
-    0x00, 0x02, 0x03, 0x01, 0x01, 0x75, 0x00, 0x02, 0x03, 0x02, 0x1E, 0x87, 0x00, 0x02, 0x03, 0x07,
-    0x1E, 0x85, 0x00, 0x02, 0x03, 0x08, 0x1E, 0x98, 0x00, 0x02, 0x03, 0x0A, 0x1E, 0x89, 0x00, 0x02,
-    0x03, 0x23, 0x1E, 0x81, 0x00, 0x02, 0x03, 0x40, 0x1E, 0x83, 0x00, 0x02, 0x03, 0x41, 0x00, 0x02,
-    0x00, 0x06, 0x00, 0x0C, 0x1E, 0x8B, 0x00, 0x02, 0x03, 0x07, 0x1E, 0x8D, 0x00, 0x02, 0x03, 0x08,
-    0x00, 0x0C, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x00, 0x32, 0x00, 0x38, 0x00, 0x3E,
-    0x00, 0x44, 0x00, 0x4A, 0x00, 0x50, 0x00, 0x56, 0x00, 0x5C, 0x1E, 0xF3, 0x00, 0x02, 0x03, 0x00,
-    0x00, 0xFD, 0x00, 0x02, 0x03, 0x01, 0x01, 0x77, 0x00, 0x02, 0x03, 0x02, 0x1E, 0xF9, 0x00, 0x02,
-    0x03, 0x03, 0x02, 0x33, 0x00, 0x02, 0x03, 0x04, 0x1E, 0x8F, 0x00, 0x02, 0x03, 0x07, 0x00, 0xFF,
-    0x00, 0x02, 0x03, 0x08, 0x1E, 0xF7, 0x00, 0x02, 0x03, 0x09, 0x1E, 0x99, 0x00, 0x02, 0x03, 0x0A,
-    0x1E, 0xF5, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xF3, 0x00, 0x02, 0x03, 0x40, 0x00, 0xFD, 0x00, 0x02,
-    0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E,
-    0x00, 0x34, 0x01, 0x7A, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x91, 0x00, 0x02, 0x03, 0x02, 0x01, 0x7C,
-    0x00, 0x02, 0x03, 0x07, 0x01, 0x7E, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x93, 0x00, 0x02, 0x03, 0x23,
-    0x1E, 0x95, 0x00, 0x02, 0x03, 0x31, 0x01, 0x7A, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10,
-    0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xA6, 0x00, 0x02,
-    0x03, 0x00, 0x1E, 0xA4, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xAA, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xA8,
-    0x00, 0x02, 0x03, 0x09, 0x1E, 0xAC, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xA6, 0x00, 0x02, 0x03, 0x40,
-    0x1E, 0xA4, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x01, 0xDE, 0x00, 0x02, 0x03, 0x04,
-    0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x01, 0xFA, 0x00, 0x02, 0x03, 0x01, 0x01, 0xFA, 0x00, 0x02,
-    0x03, 0x41, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x14, 0x01, 0xFC, 0x00, 0x02, 0x03, 0x01,
-    0x01, 0xE2, 0x00, 0x02, 0x03, 0x04, 0x01, 0xFC, 0x00, 0x02, 0x03, 0x41, 0x00, 0x02, 0x00, 0x06,
-    0x00, 0x0C, 0x1E, 0x08, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x08, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07,
-    0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xC0,
-    0x00, 0x02, 0x03, 0x00, 0x1E, 0xBE, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xC4, 0x00, 0x02, 0x03, 0x03,
-    0x1E, 0xC2, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xC6, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xC0, 0x00, 0x02,
-    0x03, 0x40, 0x1E, 0xBE, 0x00, 0x02, 0x03, 0x41, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0x2E,
-    0x00, 0x02, 0x03, 0x01, 0x1E, 0x2E, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xDC,
-    0x00, 0x02, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xDA, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x07,
-    0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xD2,
-    0x00, 0x02, 0x03, 0x00, 0x1E, 0xD0, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xD6, 0x00, 0x02, 0x03, 0x03,
-    0x1E, 0xD4, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xD8, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xD2, 0x00, 0x02,
-    0x03, 0x40, 0x1E, 0xD0, 0x00, 0x02, 0x03, 0x41, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18,
-    0x00, 0x1E, 0x00, 0x24, 0x1E, 0x4C, 0x00, 0x02, 0x03, 0x01, 0x02, 0x2C, 0x00, 0x02, 0x03, 0x04,
-    0x1E, 0x4E, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xE0, 0x00, 0x02, 0x03, 0x1B, 0x1E, 0x4C, 0x00, 0x02,
-    0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x02, 0x2A, 0x00, 0x02, 0x03, 0x04, 0x00, 0x02, 0x00, 0x06,
-    0x00, 0x0C, 0x01, 0xFE, 0x00, 0x02, 0x03, 0x01, 0x01, 0xFE, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01,
-    0x00, 0x04, 0x1E, 0xEA, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xE8, 0x00, 0x02,
-    0x03, 0x1B, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C,
-    0x01, 0xDB, 0x00, 0x02, 0x03, 0x00, 0x01, 0xD7, 0x00, 0x02, 0x03, 0x01, 0x01, 0xD5, 0x00, 0x02,
-    0x03, 0x04, 0x01, 0xD9, 0x00, 0x02, 0x03, 0x0C, 0x01, 0xDB, 0x00, 0x02, 0x03, 0x40, 0x01, 0xD7,
-    0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28,
-    0x00, 0x2E, 0x00, 0x34, 0x1E, 0xA7, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xA5, 0x00, 0x02, 0x03, 0x01,
-    0x1E, 0xAB, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xA9, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xAD, 0x00, 0x02,
-    0x03, 0x23, 0x1E, 0xA7, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xA5, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01,
-    0x00, 0x04, 0x01, 0xDF, 0x00, 0x02, 0x03, 0x04, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x01, 0xFB,
-    0x00, 0x02, 0x03, 0x01, 0x01, 0xFB, 0x00, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E,
-    0x00, 0x14, 0x01, 0xFD, 0x00, 0x02, 0x03, 0x01, 0x01, 0xE3, 0x00, 0x02, 0x03, 0x04, 0x01, 0xFD,
-    0x00, 0x02, 0x03, 0x41, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0x09, 0x00, 0x02, 0x03, 0x01,
-    0x1E, 0x09, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22,
-    0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xC1, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xBF, 0x00, 0x02,
-    0x03, 0x01, 0x1E, 0xC5, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xC3, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xC7,
-    0x00, 0x02, 0x03, 0x23, 0x1E, 0xC1, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xBF, 0x00, 0x02, 0x03, 0x41,
-    0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0x2F, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x2F, 0x00, 0x02,
-    0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xDD, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04,
-    0x1E, 0xDB, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22,
-    0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xD3, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xD1, 0x00, 0x02,
-    0x03, 0x01, 0x1E, 0xD7, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xD5, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xD9,
-    0x00, 0x02, 0x03, 0x23, 0x1E, 0xD3, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xD1, 0x00, 0x02, 0x03, 0x41,
-    0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1E, 0x4D, 0x00, 0x02,
-    0x03, 0x01, 0x02, 0x2D, 0x00, 0x02, 0x03, 0x04, 0x1E, 0x4F, 0x00, 0x02, 0x03, 0x08, 0x1E, 0xE1,
-    0x00, 0x02, 0x03, 0x1B, 0x1E, 0x4D, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x02, 0x2B,
-    0x00, 0x02, 0x03, 0x04, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x01, 0xFF, 0x00, 0x02, 0x03, 0x01,
-    0x01, 0xFF, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xEB, 0x00, 0x02, 0x03, 0x1B,
-    0x00, 0x01, 0x00, 0x04, 0x1E, 0xE9, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x06, 0x00, 0x0E, 0x00, 0x14,
-    0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x01, 0xDC, 0x00, 0x02, 0x03, 0x00, 0x01, 0xD8,
-    0x00, 0x02, 0x03, 0x01, 0x01, 0xD6, 0x00, 0x02, 0x03, 0x04, 0x01, 0xDA, 0x00, 0x02, 0x03, 0x0C,
-    0x01, 0xDC, 0x00, 0x02, 0x03, 0x40, 0x01, 0xD8, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10,
-    0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xB0, 0x00, 0x02,
-    0x03, 0x00, 0x1E, 0xAE, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xB4, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xB2,
-    0x00, 0x02, 0x03, 0x09, 0x1E, 0xB6, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xB0, 0x00, 0x02, 0x03, 0x40,
-    0x1E, 0xAE, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22,
-    0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xB1, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xAF, 0x00, 0x02,
-    0x03, 0x01, 0x1E, 0xB5, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xB3, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xB7,
-    0x00, 0x02, 0x03, 0x23, 0x1E, 0xB1, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xAF, 0x00, 0x02, 0x03, 0x41,
-    0x00, 0x01, 0x00, 0x04, 0x1E, 0x08, 0x00, 0x02, 0x03, 0x27, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x09,
-    0x00, 0x02, 0x03, 0x27, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x1E, 0x14,
-    0x00, 0x02, 0x03, 0x00, 0x1E, 0x16, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x14, 0x00, 0x02, 0x03, 0x40,
-    0x1E, 0x16, 0x00, 0x02, 0x03, 0x41, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C,
-    0x1E, 0x15, 0x00, 0x02, 0x03, 0x00, 0x1E, 0x17, 0x00, 0x02, 0x03, 0x01, 0x1E, 0x15, 0x00, 0x02,
-    0x03, 0x40, 0x1E, 0x17, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x1C, 0x00, 0x02,
-    0x03, 0x27, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x1D, 0x00, 0x02, 0x03, 0x27, 0x00, 0x05, 0x00, 0x0C,
-    0x00, 0x12, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x24, 0x1E, 0x50, 0x00, 0x02, 0x03, 0x00, 0x1E, 0x52,
-    0x00, 0x02, 0x03, 0x01, 0x01, 0xEC, 0x00, 0x02, 0x03, 0x28, 0x1E, 0x50, 0x00, 0x02, 0x03, 0x40,
-    0x1E, 0x52, 0x00, 0x02, 0x03, 0x41, 0x00, 0x05, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x1E,
-    0x00, 0x24, 0x1E, 0x51, 0x00, 0x02, 0x03, 0x00, 0x1E, 0x53, 0x00, 0x02, 0x03, 0x01, 0x01, 0xED,
-    0x00, 0x02, 0x03, 0x28, 0x1E, 0x51, 0x00, 0x02, 0x03, 0x40, 0x1E, 0x53, 0x00, 0x02, 0x03, 0x41,
-    0x00, 0x01, 0x00, 0x04, 0x1E, 0x64, 0x00, 0x02, 0x03, 0x07, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x65,
-    0x00, 0x02, 0x03, 0x07, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x66, 0x00, 0x02, 0x03, 0x07, 0x00, 0x01,
-    0x00, 0x04, 0x1E, 0x67, 0x00, 0x02, 0x03, 0x07, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x14,
-    0x1E, 0x78, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xEE, 0x00, 0x02, 0x03, 0x1B, 0x1E, 0x78, 0x00, 0x02,
-    0x03, 0x41, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x14, 0x1E, 0x79, 0x00, 0x02, 0x03, 0x01,
-    0x1E, 0xEF, 0x00, 0x02, 0x03, 0x1B, 0x1E, 0x79, 0x00, 0x02, 0x03, 0x41, 0x00, 0x01, 0x00, 0x04,
-    0x1E, 0x7A, 0x00, 0x02, 0x03, 0x08, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x7B, 0x00, 0x02, 0x03, 0x08,
-    0x00, 0x01, 0x00, 0x04, 0x1E, 0x9B, 0x00, 0x02, 0x03, 0x07, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16,
-    0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xDC, 0x00, 0x02, 0x03, 0x00,
-    0x1E, 0xDA, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xE0, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xDE, 0x00, 0x02,
-    0x03, 0x09, 0x1E, 0xE2, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xDC, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xDA,
-    0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28,
-    0x00, 0x2E, 0x00, 0x34, 0x1E, 0xDD, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xDB, 0x00, 0x02, 0x03, 0x01,
-    0x1E, 0xE1, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xDF, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xE3, 0x00, 0x02,
-    0x03, 0x23, 0x1E, 0xDD, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xDB, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07,
-    0x00, 0x10, 0x00, 0x16, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xEA,
-    0x00, 0x02, 0x03, 0x00, 0x1E, 0xE8, 0x00, 0x02, 0x03, 0x01, 0x1E, 0xEE, 0x00, 0x02, 0x03, 0x03,
-    0x1E, 0xEC, 0x00, 0x02, 0x03, 0x09, 0x1E, 0xF0, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xEA, 0x00, 0x02,
-    0x03, 0x40, 0x1E, 0xE8, 0x00, 0x02, 0x03, 0x41, 0x00, 0x07, 0x00, 0x10, 0x00, 0x16, 0x00, 0x1C,
-    0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x1E, 0xEB, 0x00, 0x02, 0x03, 0x00, 0x1E, 0xE9,
-    0x00, 0x02, 0x03, 0x01, 0x1E, 0xEF, 0x00, 0x02, 0x03, 0x03, 0x1E, 0xED, 0x00, 0x02, 0x03, 0x09,
-    0x1E, 0xF1, 0x00, 0x02, 0x03, 0x23, 0x1E, 0xEB, 0x00, 0x02, 0x03, 0x40, 0x1E, 0xE9, 0x00, 0x02,
-    0x03, 0x41, 0x00, 0x01, 0x00, 0x04, 0x01, 0xEE, 0x00, 0x02, 0x03, 0x0C, 0x00, 0x01, 0x00, 0x04,
-    0x01, 0xEC, 0x00, 0x02, 0x03, 0x04, 0x00, 0x01, 0x00, 0x04, 0x01, 0xED, 0x00, 0x02, 0x03, 0x04,
-    0x00, 0x01, 0x00, 0x04, 0x01, 0xE0, 0x00, 0x02, 0x03, 0x04, 0x00, 0x01, 0x00, 0x04, 0x01, 0xE1,
-    0x00, 0x02, 0x03, 0x04, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x1C, 0x00, 0x02, 0x03, 0x06, 0x00, 0x01,
-    0x00, 0x04, 0x1E, 0x1D, 0x00, 0x02, 0x03, 0x06, 0x00, 0x01, 0x00, 0x04, 0x02, 0x30, 0x00, 0x02,
-    0x03, 0x04, 0x00, 0x01, 0x00, 0x04, 0x02, 0x31, 0x00, 0x02, 0x03, 0x04, 0x00, 0x01, 0x00, 0x04,
-    0x01, 0xEF, 0x00, 0x02, 0x03, 0x0C, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x38, 0x00, 0x02, 0x03, 0x04,
-    0x00, 0x01, 0x00, 0x04, 0x1E, 0x39, 0x00, 0x02, 0x03, 0x04, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x5C,
-    0x00, 0x02, 0x03, 0x04, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x5D, 0x00, 0x02, 0x03, 0x04, 0x00, 0x01,
-    0x00, 0x04, 0x1E, 0x68, 0x00, 0x02, 0x03, 0x23, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x69, 0x00, 0x02,
-    0x03, 0x23, 0x00, 0x01, 0x00, 0x04, 0x1E, 0x68, 0x00, 0x02, 0x03, 0x07, 0x00, 0x01, 0x00, 0x04,
-    0x1E, 0x69, 0x00, 0x02, 0x03, 0x07, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0xAC, 0x00, 0x02,
-    0x03, 0x02, 0x1E, 0xB6, 0x00, 0x02, 0x03, 0x06, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0xAD,
-    0x00, 0x02, 0x03, 0x02, 0x1E, 0xB7, 0x00, 0x02, 0x03, 0x06, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xC6,
-    0x00, 0x02, 0x03, 0x02, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xC7, 0x00, 0x02, 0x03, 0x02, 0x00, 0x02,
-    0x00, 0x06, 0x00, 0x0C, 0x1E, 0xD8, 0x00, 0x02, 0x03, 0x02, 0x1E, 0xE2, 0x00, 0x02, 0x03, 0x1B,
-    0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x1E, 0xD9, 0x00, 0x02, 0x03, 0x02, 0x1E, 0xE3, 0x00, 0x02,
-    0x03, 0x1B, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xDE, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04,
-    0x1E, 0xDF, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xF0, 0x00, 0x02, 0x03, 0x1B,
-    0x00, 0x01, 0x00, 0x04, 0x1E, 0xF1, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xEC,
-    0x00, 0x02, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x04, 0x1E, 0xED, 0x00, 0x02, 0x03, 0x1B, 0x00, 0x06,
-    0x00, 0x0E, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2C, 0x1E, 0x30, 0x00, 0x02,
-    0x03, 0x01, 0x01, 0xE8, 0x00, 0x02, 0x03, 0x0C, 0x1E, 0x32, 0x00, 0x02, 0x03, 0x23, 0x01, 0x36,
-    0x00, 0x02, 0x03, 0x27, 0x1E, 0x34, 0x00, 0x02, 0x03, 0x31, 0x1E, 0x30, 0x00, 0x02, 0x03, 0x41,
-    0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x01, 0xFA, 0x00, 0x02, 0x03, 0x01, 0x01, 0xFA, 0x00, 0x02,
-    0x03, 0x41, 0x00, 0x01, 0x00, 0x89, 0x00, 0x41, 0x00, 0x42, 0x00, 0x43, 0x00, 0x44, 0x00, 0x45,
-    0x00, 0x46, 0x00, 0x47, 0x00, 0x48, 0x00, 0x49, 0x00, 0x4A, 0x00, 0x4B, 0x00, 0x4C, 0x00, 0x4D,
-    0x00, 0x4E, 0x00, 0x4F, 0x00, 0x50, 0x00, 0x52, 0x00, 0x53, 0x00, 0x54, 0x00, 0x55, 0x00, 0x56,
-    0x00, 0x57, 0x00, 0x58, 0x00, 0x59, 0x00, 0x5A, 0x00, 0x61, 0x00, 0x62, 0x00, 0x63, 0x00, 0x64,
-    0x00, 0x65, 0x00, 0x66, 0x00, 0x67, 0x00, 0x68, 0x00, 0x69, 0x00, 0x6A, 0x00, 0x6B, 0x00, 0x6C,
-    0x00, 0x6D, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x72, 0x00, 0x73, 0x00, 0x74, 0x00, 0x75,
-    0x00, 0x76, 0x00, 0x77, 0x00, 0x78, 0x00, 0x79, 0x00, 0x7A, 0x00, 0xC2, 0x00, 0xC4, 0x00, 0xC5,
-    0x00, 0xC6, 0x00, 0xC7, 0x00, 0xCA, 0x00, 0xCF, 0x00, 0xD2, 0x00, 0xD3, 0x00, 0xD4, 0x00, 0xD5,
-    0x00, 0xD6, 0x00, 0xD8, 0x00, 0xD9, 0x00, 0xDA, 0x00, 0xDC, 0x00, 0xE2, 0x00, 0xE4, 0x00, 0xE5,
-    0x00, 0xE6, 0x00, 0xE7, 0x00, 0xEA, 0x00, 0xEF, 0x00, 0xF2, 0x00, 0xF3, 0x00, 0xF4, 0x00, 0xF5,
-    0x00, 0xF6, 0x00, 0xF8, 0x00, 0xF9, 0x00, 0xFA, 0x00, 0xFC, 0x01, 0x02, 0x01, 0x03, 0x01, 0x06,
-    0x01, 0x07, 0x01, 0x12, 0x01, 0x13, 0x01, 0x14, 0x01, 0x15, 0x01, 0x4C, 0x01, 0x4D, 0x01, 0x5A,
-    0x01, 0x5B, 0x01, 0x60, 0x01, 0x61, 0x01, 0x68, 0x01, 0x69, 0x01, 0x6A, 0x01, 0x6B, 0x01, 0x7F,
-    0x01, 0xA0, 0x01, 0xA1, 0x01, 0xAF, 0x01, 0xB0, 0x01, 0xB7, 0x01, 0xEA, 0x01, 0xEB, 0x02, 0x26,
-    0x02, 0x27, 0x02, 0x28, 0x02, 0x29, 0x02, 0x2E, 0x02, 0x2F, 0x02, 0x92, 0x1E, 0x36, 0x1E, 0x37,
-    0x1E, 0x5A, 0x1E, 0x5B, 0x1E, 0x60, 0x1E, 0x61, 0x1E, 0x62, 0x1E, 0x63, 0x1E, 0xA0, 0x1E, 0xA1,
-    0x1E, 0xB8, 0x1E, 0xB9, 0x1E, 0xCC, 0x1E, 0xCD, 0x1E, 0xCE, 0x1E, 0xCF, 0x1E, 0xE4, 0x1E, 0xE5,
-    0x1E, 0xE6, 0x1E, 0xE7, 0x21, 0x2A, 0x21, 0x2B, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x14,
-    0x13, 0x88, 0x1A, 0x9E, 0x1E, 0x3C, 0x21, 0xAE, 0x22, 0x6C, 0x22, 0xFA, 0x00, 0x01, 0x0F, 0x8E,
-    0x01, 0xF1, 0x03, 0xE8, 0x03, 0xEE, 0x03, 0xF4, 0x03, 0xFA, 0x04, 0x00, 0x04, 0x06, 0x04, 0x0C,
-    0x04, 0x12, 0x04, 0x18, 0x04, 0x1E, 0x04, 0x24, 0x04, 0x2A, 0x04, 0x30, 0x04, 0x36, 0x04, 0x3C,
-    0x04, 0x42, 0x04, 0x48, 0x04, 0x4E, 0x04, 0x54, 0x04, 0x5A, 0x04, 0x60, 0x04, 0x66, 0x04, 0x6C,
-    0x04, 0x72, 0x04, 0x78, 0x04, 0x7E, 0x04, 0x84, 0x04, 0x8A, 0x04, 0x90, 0x04, 0x96, 0x04, 0x9C,
-    0x04, 0xA2, 0x04, 0xA8, 0x04, 0xAE, 0x04, 0xB4, 0x04, 0xBA, 0x04, 0xC0, 0x04, 0xC6, 0x04, 0xCC,
-    0x04, 0xD2, 0x04, 0xD8, 0x04, 0xDE, 0x04, 0xE4, 0x04, 0xEA, 0x04, 0xF0, 0x04, 0xF6, 0x04, 0xFC,
-    0x05, 0x02, 0x05, 0x08, 0x05, 0x0E, 0x05, 0x14, 0x05, 0x1A, 0x05, 0x20, 0x05, 0x26, 0x05, 0x2C,
-    0x05, 0x32, 0x05, 0x38, 0x05, 0x3E, 0x05, 0x44, 0x05, 0x4A, 0x05, 0x50, 0x05, 0x56, 0x05, 0x5C,
-    0x05, 0x62, 0x05, 0x68, 0x05, 0x6E, 0x05, 0x74, 0x05, 0x7A, 0x05, 0x80, 0x05, 0x86, 0x05, 0x8C,
-    0x05, 0x92, 0x05, 0x98, 0x05, 0x9E, 0x05, 0xA4, 0x05, 0xAA, 0x05, 0xB0, 0x05, 0xB6, 0x05, 0xBC,
-    0x05, 0xC2, 0x05, 0xC8, 0x05, 0xCE, 0x05, 0xD4, 0x05, 0xDA, 0x05, 0xE0, 0x05, 0xE6, 0x05, 0xEC,
-    0x05, 0xF2, 0x05, 0xF8, 0x05, 0xFE, 0x06, 0x04, 0x06, 0x0A, 0x06, 0x10, 0x06, 0x16, 0x06, 0x1C,
-    0x06, 0x22, 0x06, 0x28, 0x06, 0x2E, 0x06, 0x34, 0x06, 0x3A, 0x06, 0x40, 0x06, 0x46, 0x06, 0x4C,
-    0x06, 0x52, 0x06, 0x58, 0x06, 0x5E, 0x06, 0x64, 0x06, 0x6A, 0x06, 0x70, 0x06, 0x76, 0x06, 0x7C,
-    0x06, 0x82, 0x06, 0x88, 0x06, 0x8E, 0x06, 0x94, 0x06, 0x9A, 0x06, 0xA0, 0x06, 0xA6, 0x06, 0xAC,
-    0x06, 0xB2, 0x06, 0xB8, 0x06, 0xBE, 0x06, 0xC4, 0x06, 0xCA, 0x06, 0xD0, 0x06, 0xD6, 0x06, 0xDC,
-    0x06, 0xE2, 0x06, 0xE8, 0x06, 0xEE, 0x06, 0xF4, 0x06, 0xFA, 0x07, 0x00, 0x07, 0x06, 0x07, 0x0C,
-    0x07, 0x12, 0x07, 0x18, 0x07, 0x1E, 0x07, 0x24, 0x07, 0x2A, 0x07, 0x30, 0x07, 0x36, 0x07, 0x3C,
-    0x07, 0x42, 0x07, 0x48, 0x07, 0x4E, 0x07, 0x54, 0x07, 0x5A, 0x07, 0x60, 0x07, 0x66, 0x07, 0x6C,
-    0x07, 0x72, 0x07, 0x78, 0x07, 0x7E, 0x07, 0x84, 0x07, 0x8A, 0x07, 0x90, 0x07, 0x96, 0x07, 0x9C,
-    0x07, 0xA2, 0x07, 0xA8, 0x07, 0xAE, 0x07, 0xB4, 0x07, 0xBA, 0x07, 0xC0, 0x07, 0xC6, 0x07, 0xCC,
-    0x07, 0xD2, 0x07, 0xD8, 0x07, 0xDE, 0x07, 0xE4, 0x07, 0xEA, 0x07, 0xF0, 0x07, 0xF6, 0x07, 0xFC,
-    0x08, 0x02, 0x08, 0x08, 0x08, 0x0E, 0x08, 0x14, 0x08, 0x1A, 0x08, 0x20, 0x08, 0x26, 0x08, 0x2C,
-    0x08, 0x32, 0x08, 0x38, 0x08, 0x3E, 0x08, 0x44, 0x08, 0x4A, 0x08, 0x50, 0x08, 0x56, 0x08, 0x5C,
-    0x08, 0x62, 0x08, 0x68, 0x08, 0x6E, 0x08, 0x74, 0x08, 0x7A, 0x08, 0x80, 0x08, 0x86, 0x08, 0x8C,
-    0x08, 0x92, 0x08, 0x98, 0x08, 0x9E, 0x08, 0xA4, 0x08, 0xAA, 0x08, 0xB0, 0x08, 0xB6, 0x08, 0xBC,
-    0x08, 0xC2, 0x08, 0xC8, 0x08, 0xCE, 0x08, 0xD4, 0x08, 0xDA, 0x08, 0xE0, 0x08, 0xE6, 0x08, 0xEC,
-    0x08, 0xF2, 0x08, 0xF8, 0x08, 0xFE, 0x09, 0x04, 0x09, 0x0A, 0x09, 0x10, 0x09, 0x16, 0x09, 0x1C,
-    0x09, 0x22, 0x09, 0x28, 0x09, 0x2E, 0x09, 0x34, 0x09, 0x3A, 0x09, 0x40, 0x09, 0x46, 0x09, 0x4C,
-    0x09, 0x52, 0x09, 0x58, 0x09, 0x5E, 0x09, 0x64, 0x09, 0x6A, 0x09, 0x70, 0x09, 0x76, 0x09, 0x7C,
-    0x09, 0x82, 0x09, 0x88, 0x09, 0x8E, 0x09, 0x94, 0x09, 0x9A, 0x09, 0xA0, 0x09, 0xA6, 0x09, 0xAC,
-    0x09, 0xB2, 0x09, 0xB8, 0x09, 0xBE, 0x09, 0xC4, 0x09, 0xCA, 0x09, 0xD0, 0x09, 0xD6, 0x09, 0xDC,
-    0x09, 0xE2, 0x09, 0xE8, 0x09, 0xEE, 0x09, 0xF4, 0x09, 0xFA, 0x0A, 0x00, 0x0A, 0x06, 0x0A, 0x0C,
-    0x0A, 0x12, 0x0A, 0x18, 0x0A, 0x1E, 0x0A, 0x24, 0x0A, 0x2A, 0x0A, 0x30, 0x0A, 0x36, 0x0A, 0x3C,
-    0x0A, 0x42, 0x0A, 0x48, 0x0A, 0x4E, 0x0A, 0x54, 0x0A, 0x5A, 0x0A, 0x60, 0x0A, 0x66, 0x0A, 0x6C,
-    0x0A, 0x72, 0x0A, 0x78, 0x0A, 0x7E, 0x0A, 0x84, 0x0A, 0x8A, 0x0A, 0x90, 0x0A, 0x96, 0x0A, 0x9C,
-    0x0A, 0xA2, 0x0A, 0xA8, 0x0A, 0xAE, 0x0A, 0xB4, 0x0A, 0xBA, 0x0A, 0xC0, 0x0A, 0xC6, 0x0A, 0xCC,
-    0x0A, 0xD2, 0x0A, 0xD8, 0x0A, 0xDE, 0x0A, 0xE4, 0x0A, 0xEA, 0x0A, 0xF0, 0x0A, 0xF6, 0x0A, 0xFC,
-    0x0B, 0x02, 0x0B, 0x08, 0x0B, 0x0E, 0x0B, 0x14, 0x0B, 0x1A, 0x0B, 0x20, 0x0B, 0x26, 0x0B, 0x2C,
-    0x0B, 0x32, 0x0B, 0x38, 0x0B, 0x3E, 0x0B, 0x44, 0x0B, 0x4A, 0x0B, 0x50, 0x0B, 0x56, 0x0B, 0x5C,
-    0x0B, 0x62, 0x0B, 0x68, 0x0B, 0x6E, 0x0B, 0x74, 0x0B, 0x7A, 0x0B, 0x80, 0x0B, 0x86, 0x0B, 0x8C,
-    0x0B, 0x92, 0x0B, 0x98, 0x0B, 0x9E, 0x0B, 0xA4, 0x0B, 0xAA, 0x0B, 0xB0, 0x0B, 0xB6, 0x0B, 0xBC,
-    0x0B, 0xC2, 0x0B, 0xC8, 0x0B, 0xCE, 0x0B, 0xD4, 0x0B, 0xDA, 0x0B, 0xE0, 0x0B, 0xE6, 0x0B, 0xEC,
-    0x0B, 0xF2, 0x0B, 0xF8, 0x0B, 0xFE, 0x0C, 0x04, 0x0C, 0x0A, 0x0C, 0x10, 0x0C, 0x16, 0x0C, 0x1C,
-    0x0C, 0x22, 0x0C, 0x28, 0x0C, 0x2E, 0x0C, 0x34, 0x0C, 0x3A, 0x0C, 0x40, 0x0C, 0x46, 0x0C, 0x4C,
-    0x0C, 0x52, 0x0C, 0x58, 0x0C, 0x5E, 0x0C, 0x64, 0x0C, 0x6A, 0x0C, 0x70, 0x0C, 0x76, 0x0C, 0x7C,
-    0x0C, 0x82, 0x0C, 0x88, 0x0C, 0x8E, 0x0C, 0x94, 0x0C, 0x9A, 0x0C, 0xA0, 0x0C, 0xA6, 0x0C, 0xAC,
-    0x0C, 0xB2, 0x0C, 0xB8, 0x0C, 0xBE, 0x0C, 0xC4, 0x0C, 0xCA, 0x0C, 0xD0, 0x0C, 0xD6, 0x0C, 0xDC,
-    0x0C, 0xE2, 0x0C, 0xE8, 0x0C, 0xEE, 0x0C, 0xF4, 0x0C, 0xFA, 0x0D, 0x00, 0x0D, 0x06, 0x0D, 0x0C,
-    0x0D, 0x12, 0x0D, 0x18, 0x0D, 0x1E, 0x0D, 0x24, 0x0D, 0x2A, 0x0D, 0x30, 0x0D, 0x36, 0x0D, 0x3C,
-    0x0D, 0x42, 0x0D, 0x48, 0x0D, 0x4E, 0x0D, 0x54, 0x0D, 0x5A, 0x0D, 0x60, 0x0D, 0x66, 0x0D, 0x6C,
-    0x0D, 0x72, 0x0D, 0x78, 0x0D, 0x7E, 0x0D, 0x84, 0x0D, 0x8A, 0x0D, 0x90, 0x0D, 0x96, 0x0D, 0x9C,
-    0x0D, 0xA2, 0x0D, 0xA8, 0x0D, 0xAE, 0x0D, 0xB4, 0x0D, 0xBA, 0x0D, 0xC0, 0x0D, 0xC6, 0x0D, 0xCC,
-    0x0D, 0xD2, 0x0D, 0xD8, 0x0D, 0xDE, 0x0D, 0xE4, 0x0D, 0xEA, 0x0D, 0xF0, 0x0D, 0xF6, 0x0D, 0xFC,
-    0x0E, 0x02, 0x0E, 0x08, 0x0E, 0x0E, 0x0E, 0x14, 0x0E, 0x1A, 0x0E, 0x20, 0x0E, 0x26, 0x0E, 0x2C,
-    0x0E, 0x32, 0x0E, 0x38, 0x0E, 0x3E, 0x0E, 0x44, 0x0E, 0x4A, 0x0E, 0x50, 0x0E, 0x56, 0x0E, 0x5C,
-    0x0E, 0x62, 0x0E, 0x68, 0x0E, 0x6E, 0x0E, 0x74, 0x0E, 0x7A, 0x0E, 0x80, 0x0E, 0x86, 0x0E, 0x8C,
-    0x0E, 0x92, 0x0E, 0x98, 0x0E, 0x9E, 0x0E, 0xA4, 0x0E, 0xAA, 0x0E, 0xB0, 0x0E, 0xB6, 0x0E, 0xBC,
-    0x0E, 0xC2, 0x0E, 0xC8, 0x0E, 0xCE, 0x0E, 0xD4, 0x0E, 0xDA, 0x0E, 0xE0, 0x0E, 0xE6, 0x0E, 0xEC,
-    0x0E, 0xF2, 0x0E, 0xF8, 0x0E, 0xFE, 0x0F, 0x04, 0x0F, 0x0A, 0x0F, 0x10, 0x0F, 0x16, 0x0F, 0x1C,
-    0x0F, 0x22, 0x0F, 0x28, 0x0F, 0x2E, 0x0F, 0x34, 0x0F, 0x3A, 0x0F, 0x40, 0x0F, 0x46, 0x0F, 0x4C,
-    0x0F, 0x52, 0x0F, 0x58, 0x0F, 0x5E, 0x0F, 0x64, 0x0F, 0x6A, 0x0F, 0x70, 0x0F, 0x76, 0x0F, 0x7C,
-    0x0F, 0x82, 0x0F, 0x88, 0x00, 0x02, 0x00, 0x41, 0x03, 0x00, 0x00, 0x02, 0x00, 0x41, 0x03, 0x01,
-    0x00, 0x02, 0x00, 0x41, 0x03, 0x02, 0x00, 0x02, 0x00, 0x41, 0x03, 0x03, 0x00, 0x02, 0x00, 0x41,
-    0x03, 0x08, 0x00, 0x02, 0x00, 0x41, 0x03, 0x0A, 0x00, 0x02, 0x00, 0x43, 0x03, 0x27, 0x00, 0x02,
-    0x00, 0x45, 0x03, 0x00, 0x00, 0x02, 0x00, 0x45, 0x03, 0x01, 0x00, 0x02, 0x00, 0x45, 0x03, 0x02,
-    0x00, 0x02, 0x00, 0x45, 0x03, 0x08, 0x00, 0x02, 0x00, 0x49, 0x03, 0x00, 0x00, 0x02, 0x00, 0x49,
-    0x03, 0x01, 0x00, 0x02, 0x00, 0x49, 0x03, 0x02, 0x00, 0x02, 0x00, 0x49, 0x03, 0x08, 0x00, 0x02,
-    0x00, 0x4E, 0x03, 0x03, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x00, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x01,
-    0x00, 0x02, 0x00, 0x4F, 0x03, 0x02, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x03, 0x00, 0x02, 0x00, 0x4F,
-    0x03, 0x08, 0x00, 0x02, 0x00, 0x55, 0x03, 0x00, 0x00, 0x02, 0x00, 0x55, 0x03, 0x01, 0x00, 0x02,
-    0x00, 0x55, 0x03, 0x02, 0x00, 0x02, 0x00, 0x55, 0x03, 0x08, 0x00, 0x02, 0x00, 0x59, 0x03, 0x01,
-    0x00, 0x02, 0x00, 0x61, 0x03, 0x00, 0x00, 0x02, 0x00, 0x61, 0x03, 0x01, 0x00, 0x02, 0x00, 0x61,
-    0x03, 0x02, 0x00, 0x02, 0x00, 0x61, 0x03, 0x03, 0x00, 0x02, 0x00, 0x61, 0x03, 0x08, 0x00, 0x02,
-    0x00, 0x61, 0x03, 0x0A, 0x00, 0x02, 0x00, 0x63, 0x03, 0x27, 0x00, 0x02, 0x00, 0x65, 0x03, 0x00,
-    0x00, 0x02, 0x00, 0x65, 0x03, 0x01, 0x00, 0x02, 0x00, 0x65, 0x03, 0x02, 0x00, 0x02, 0x00, 0x65,
-    0x03, 0x08, 0x00, 0x02, 0x00, 0x69, 0x03, 0x00, 0x00, 0x02, 0x00, 0x69, 0x03, 0x01, 0x00, 0x02,
-    0x00, 0x69, 0x03, 0x02, 0x00, 0x02, 0x00, 0x69, 0x03, 0x08, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x03,
-    0x00, 0x02, 0x00, 0x6F, 0x03, 0x00, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x01, 0x00, 0x02, 0x00, 0x6F,
-    0x03, 0x02, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x03, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x08, 0x00, 0x02,
-    0x00, 0x75, 0x03, 0x00, 0x00, 0x02, 0x00, 0x75, 0x03, 0x01, 0x00, 0x02, 0x00, 0x75, 0x03, 0x02,
-    0x00, 0x02, 0x00, 0x75, 0x03, 0x08, 0x00, 0x02, 0x00, 0x79, 0x03, 0x01, 0x00, 0x02, 0x00, 0x79,
-    0x03, 0x08, 0x00, 0x02, 0x00, 0x41, 0x03, 0x04, 0x00, 0x02, 0x00, 0x61, 0x03, 0x04, 0x00, 0x02,
-    0x00, 0x41, 0x03, 0x06, 0x00, 0x02, 0x00, 0x61, 0x03, 0x06, 0x00, 0x02, 0x00, 0x41, 0x03, 0x28,
-    0x00, 0x02, 0x00, 0x61, 0x03, 0x28, 0x00, 0x02, 0x00, 0x43, 0x03, 0x01, 0x00, 0x02, 0x00, 0x63,
-    0x03, 0x01, 0x00, 0x02, 0x00, 0x43, 0x03, 0x02, 0x00, 0x02, 0x00, 0x63, 0x03, 0x02, 0x00, 0x02,
-    0x00, 0x43, 0x03, 0x07, 0x00, 0x02, 0x00, 0x63, 0x03, 0x07, 0x00, 0x02, 0x00, 0x43, 0x03, 0x0C,
-    0x00, 0x02, 0x00, 0x63, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x44, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x64,
-    0x03, 0x0C, 0x00, 0x02, 0x00, 0x45, 0x03, 0x04, 0x00, 0x02, 0x00, 0x65, 0x03, 0x04, 0x00, 0x02,
-    0x00, 0x45, 0x03, 0x06, 0x00, 0x02, 0x00, 0x65, 0x03, 0x06, 0x00, 0x02, 0x00, 0x45, 0x03, 0x07,
-    0x00, 0x02, 0x00, 0x65, 0x03, 0x07, 0x00, 0x02, 0x00, 0x45, 0x03, 0x28, 0x00, 0x02, 0x00, 0x65,
-    0x03, 0x28, 0x00, 0x02, 0x00, 0x45, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x65, 0x03, 0x0C, 0x00, 0x02,
-    0x00, 0x47, 0x03, 0x02, 0x00, 0x02, 0x00, 0x67, 0x03, 0x02, 0x00, 0x02, 0x00, 0x47, 0x03, 0x06,
-    0x00, 0x02, 0x00, 0x67, 0x03, 0x06, 0x00, 0x02, 0x00, 0x47, 0x03, 0x07, 0x00, 0x02, 0x00, 0x67,
-    0x03, 0x07, 0x00, 0x02, 0x00, 0x47, 0x03, 0x27, 0x00, 0x02, 0x00, 0x67, 0x03, 0x27, 0x00, 0x02,
-    0x00, 0x48, 0x03, 0x02, 0x00, 0x02, 0x00, 0x68, 0x03, 0x02, 0x00, 0x02, 0x00, 0x49, 0x03, 0x03,
-    0x00, 0x02, 0x00, 0x69, 0x03, 0x03, 0x00, 0x02, 0x00, 0x49, 0x03, 0x04, 0x00, 0x02, 0x00, 0x69,
-    0x03, 0x04, 0x00, 0x02, 0x00, 0x49, 0x03, 0x06, 0x00, 0x02, 0x00, 0x69, 0x03, 0x06, 0x00, 0x02,
-    0x00, 0x49, 0x03, 0x28, 0x00, 0x02, 0x00, 0x69, 0x03, 0x28, 0x00, 0x02, 0x00, 0x49, 0x03, 0x07,
-    0x00, 0x02, 0x00, 0x4A, 0x03, 0x02, 0x00, 0x02, 0x00, 0x6A, 0x03, 0x02, 0x00, 0x02, 0x00, 0x4B,
-    0x03, 0x27, 0x00, 0x02, 0x00, 0x6B, 0x03, 0x27, 0x00, 0x02, 0x00, 0x4C, 0x03, 0x01, 0x00, 0x02,
-    0x00, 0x6C, 0x03, 0x01, 0x00, 0x02, 0x00, 0x4C, 0x03, 0x27, 0x00, 0x02, 0x00, 0x6C, 0x03, 0x27,
-    0x00, 0x02, 0x00, 0x4C, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x6C, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x4E,
-    0x03, 0x01, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x01, 0x00, 0x02, 0x00, 0x4E, 0x03, 0x27, 0x00, 0x02,
-    0x00, 0x6E, 0x03, 0x27, 0x00, 0x02, 0x00, 0x4E, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x0C,
-    0x00, 0x02, 0x00, 0x4F, 0x03, 0x04, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x04, 0x00, 0x02, 0x00, 0x4F,
-    0x03, 0x06, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x06, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x0B, 0x00, 0x02,
-    0x00, 0x6F, 0x03, 0x0B, 0x00, 0x02, 0x00, 0x52, 0x03, 0x01, 0x00, 0x02, 0x00, 0x72, 0x03, 0x01,
-    0x00, 0x02, 0x00, 0x52, 0x03, 0x27, 0x00, 0x02, 0x00, 0x72, 0x03, 0x27, 0x00, 0x02, 0x00, 0x52,
-    0x03, 0x0C, 0x00, 0x02, 0x00, 0x72, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x53, 0x03, 0x01, 0x00, 0x02,
-    0x00, 0x73, 0x03, 0x01, 0x00, 0x02, 0x00, 0x53, 0x03, 0x02, 0x00, 0x02, 0x00, 0x73, 0x03, 0x02,
-    0x00, 0x02, 0x00, 0x53, 0x03, 0x27, 0x00, 0x02, 0x00, 0x73, 0x03, 0x27, 0x00, 0x02, 0x00, 0x53,
-    0x03, 0x0C, 0x00, 0x02, 0x00, 0x73, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x54, 0x03, 0x27, 0x00, 0x02,
-    0x00, 0x74, 0x03, 0x27, 0x00, 0x02, 0x00, 0x54, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x74, 0x03, 0x0C,
-    0x00, 0x02, 0x00, 0x55, 0x03, 0x03, 0x00, 0x02, 0x00, 0x75, 0x03, 0x03, 0x00, 0x02, 0x00, 0x55,
-    0x03, 0x04, 0x00, 0x02, 0x00, 0x75, 0x03, 0x04, 0x00, 0x02, 0x00, 0x55, 0x03, 0x06, 0x00, 0x02,
-    0x00, 0x75, 0x03, 0x06, 0x00, 0x02, 0x00, 0x55, 0x03, 0x0A, 0x00, 0x02, 0x00, 0x75, 0x03, 0x0A,
-    0x00, 0x02, 0x00, 0x55, 0x03, 0x0B, 0x00, 0x02, 0x00, 0x75, 0x03, 0x0B, 0x00, 0x02, 0x00, 0x55,
-    0x03, 0x28, 0x00, 0x02, 0x00, 0x75, 0x03, 0x28, 0x00, 0x02, 0x00, 0x57, 0x03, 0x02, 0x00, 0x02,
-    0x00, 0x77, 0x03, 0x02, 0x00, 0x02, 0x00, 0x59, 0x03, 0x02, 0x00, 0x02, 0x00, 0x79, 0x03, 0x02,
-    0x00, 0x02, 0x00, 0x59, 0x03, 0x08, 0x00, 0x02, 0x00, 0x5A, 0x03, 0x01, 0x00, 0x02, 0x00, 0x7A,
-    0x03, 0x01, 0x00, 0x02, 0x00, 0x5A, 0x03, 0x07, 0x00, 0x02, 0x00, 0x7A, 0x03, 0x07, 0x00, 0x02,
-    0x00, 0x5A, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x7A, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x1B,
-    0x00, 0x02, 0x00, 0x6F, 0x03, 0x1B, 0x00, 0x02, 0x00, 0x55, 0x03, 0x1B, 0x00, 0x02, 0x00, 0x75,
-    0x03, 0x1B, 0x00, 0x02, 0x00, 0x41, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x61, 0x03, 0x0C, 0x00, 0x02,
-    0x00, 0x49, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x69, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x0C,
-    0x00, 0x02, 0x00, 0x6F, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x55, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x75,
-    0x03, 0x0C, 0x00, 0x02, 0x00, 0xDC, 0x03, 0x04, 0x00, 0x02, 0x00, 0xFC, 0x03, 0x04, 0x00, 0x02,
-    0x00, 0x55, 0x03, 0x44, 0x00, 0x02, 0x00, 0x75, 0x03, 0x44, 0x00, 0x02, 0x00, 0xDC, 0x03, 0x0C,
-    0x00, 0x02, 0x00, 0xFC, 0x03, 0x0C, 0x00, 0x02, 0x00, 0xDC, 0x03, 0x00, 0x00, 0x02, 0x00, 0xFC,
-    0x03, 0x00, 0x00, 0x02, 0x00, 0xC4, 0x03, 0x04, 0x00, 0x02, 0x00, 0xE4, 0x03, 0x04, 0x00, 0x02,
-    0x02, 0x26, 0x03, 0x04, 0x00, 0x02, 0x02, 0x27, 0x03, 0x04, 0x00, 0x02, 0x00, 0xC6, 0x03, 0x04,
-    0x00, 0x02, 0x00, 0xE6, 0x03, 0x04, 0x00, 0x02, 0x00, 0x47, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x67,
-    0x03, 0x0C, 0x00, 0x02, 0x00, 0x4B, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x6B, 0x03, 0x0C, 0x00, 0x02,
-    0x00, 0x4F, 0x03, 0x28, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x28, 0x00, 0x02, 0x01, 0x4C, 0x03, 0x28,
-    0x00, 0x02, 0x01, 0x4D, 0x03, 0x28, 0x00, 0x02, 0x01, 0xB7, 0x03, 0x0C, 0x00, 0x02, 0x02, 0x92,
-    0x03, 0x0C, 0x00, 0x02, 0x00, 0x6A, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x47, 0x03, 0x01, 0x00, 0x02,
-    0x00, 0x67, 0x03, 0x01, 0x00, 0x02, 0x00, 0x4E, 0x03, 0x00, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x00,
-    0x00, 0x02, 0x00, 0xC5, 0x03, 0x01, 0x00, 0x02, 0x00, 0xE5, 0x03, 0x01, 0x00, 0x02, 0x00, 0xC6,
-    0x03, 0x01, 0x00, 0x02, 0x00, 0xE6, 0x03, 0x01, 0x00, 0x02, 0x00, 0xD8, 0x03, 0x01, 0x00, 0x02,
-    0x00, 0xF8, 0x03, 0x01, 0x00, 0x02, 0x00, 0x41, 0x03, 0x0F, 0x00, 0x02, 0x00, 0x61, 0x03, 0x0F,
-    0x00, 0x02, 0x00, 0x41, 0x03, 0x11, 0x00, 0x02, 0x00, 0x61, 0x03, 0x11, 0x00, 0x02, 0x00, 0x45,
-    0x03, 0x0F, 0x00, 0x02, 0x00, 0x65, 0x03, 0x0F, 0x00, 0x02, 0x00, 0x45, 0x03, 0x11, 0x00, 0x02,
-    0x00, 0x65, 0x03, 0x11, 0x00, 0x02, 0x00, 0x49, 0x03, 0x0F, 0x00, 0x02, 0x00, 0x69, 0x03, 0x0F,
-    0x00, 0x02, 0x00, 0x49, 0x03, 0x11, 0x00, 0x02, 0x00, 0x69, 0x03, 0x11, 0x00, 0x02, 0x00, 0x4F,
-    0x03, 0x0F, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x0F, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x11, 0x00, 0x02,
-    0x00, 0x6F, 0x03, 0x11, 0x00, 0x02, 0x00, 0x52, 0x03, 0x0F, 0x00, 0x02, 0x00, 0x72, 0x03, 0x0F,
-    0x00, 0x02, 0x00, 0x52, 0x03, 0x11, 0x00, 0x02, 0x00, 0x72, 0x03, 0x11, 0x00, 0x02, 0x00, 0x55,
-    0x03, 0x0F, 0x00, 0x02, 0x00, 0x75, 0x03, 0x0F, 0x00, 0x02, 0x00, 0x55, 0x03, 0x11, 0x00, 0x02,
-    0x00, 0x75, 0x03, 0x11, 0x00, 0x02, 0x00, 0x53, 0x03, 0x26, 0x00, 0x02, 0x00, 0x73, 0x03, 0x26,
-    0x00, 0x02, 0x00, 0x54, 0x03, 0x26, 0x00, 0x02, 0x00, 0x74, 0x03, 0x26, 0x00, 0x02, 0x00, 0x48,
-    0x03, 0x0C, 0x00, 0x02, 0x00, 0x68, 0x03, 0x0C, 0x00, 0x02, 0x00, 0x41, 0x03, 0x07, 0x00, 0x02,
-    0x00, 0x61, 0x03, 0x07, 0x00, 0x02, 0x00, 0x45, 0x03, 0x27, 0x00, 0x02, 0x00, 0x65, 0x03, 0x27,
-    0x00, 0x02, 0x00, 0xD6, 0x03, 0x04, 0x00, 0x02, 0x00, 0xF6, 0x03, 0x04, 0x00, 0x02, 0x00, 0xD5,
-    0x03, 0x04, 0x00, 0x02, 0x00, 0xF5, 0x03, 0x04, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x07, 0x00, 0x02,
-    0x00, 0x6F, 0x03, 0x07, 0x00, 0x02, 0x02, 0x2E, 0x03, 0x04, 0x00, 0x02, 0x02, 0x2F, 0x03, 0x04,
-    0x00, 0x02, 0x00, 0x59, 0x03, 0x04, 0x00, 0x02, 0x00, 0x79, 0x03, 0x04, 0x00, 0x02, 0x00, 0x41,
-    0x03, 0x25, 0x00, 0x02, 0x00, 0x61, 0x03, 0x25, 0x00, 0x02, 0x00, 0x42, 0x03, 0x07, 0x00, 0x02,
-    0x00, 0x62, 0x03, 0x07, 0x00, 0x02, 0x00, 0x42, 0x03, 0x23, 0x00, 0x02, 0x00, 0x62, 0x03, 0x23,
-    0x00, 0x02, 0x00, 0x42, 0x03, 0x31, 0x00, 0x02, 0x00, 0x62, 0x03, 0x31, 0x00, 0x02, 0x00, 0xC7,
-    0x03, 0x01, 0x00, 0x02, 0x00, 0xE7, 0x03, 0x01, 0x00, 0x02, 0x00, 0x44, 0x03, 0x07, 0x00, 0x02,
-    0x00, 0x64, 0x03, 0x07, 0x00, 0x02, 0x00, 0x44, 0x03, 0x23, 0x00, 0x02, 0x00, 0x64, 0x03, 0x23,
-    0x00, 0x02, 0x00, 0x44, 0x03, 0x31, 0x00, 0x02, 0x00, 0x64, 0x03, 0x31, 0x00, 0x02, 0x00, 0x44,
-    0x03, 0x27, 0x00, 0x02, 0x00, 0x64, 0x03, 0x27, 0x00, 0x02, 0x00, 0x44, 0x03, 0x2D, 0x00, 0x02,
-    0x00, 0x64, 0x03, 0x2D, 0x00, 0x02, 0x01, 0x12, 0x03, 0x00, 0x00, 0x02, 0x01, 0x13, 0x03, 0x00,
-    0x00, 0x02, 0x01, 0x12, 0x03, 0x01, 0x00, 0x02, 0x01, 0x13, 0x03, 0x01, 0x00, 0x02, 0x00, 0x45,
-    0x03, 0x2D, 0x00, 0x02, 0x00, 0x65, 0x03, 0x2D, 0x00, 0x02, 0x00, 0x45, 0x03, 0x30, 0x00, 0x02,
-    0x00, 0x65, 0x03, 0x30, 0x00, 0x02, 0x01, 0x14, 0x03, 0x27, 0x00, 0x02, 0x01, 0x15, 0x03, 0x27,
-    0x00, 0x02, 0x00, 0x46, 0x03, 0x07, 0x00, 0x02, 0x00, 0x66, 0x03, 0x07, 0x00, 0x02, 0x00, 0x47,
-    0x03, 0x04, 0x00, 0x02, 0x00, 0x67, 0x03, 0x04, 0x00, 0x02, 0x00, 0x48, 0x03, 0x07, 0x00, 0x02,
-    0x00, 0x68, 0x03, 0x07, 0x00, 0x02, 0x00, 0x48, 0x03, 0x23, 0x00, 0x02, 0x00, 0x68, 0x03, 0x23,
-    0x00, 0x02, 0x00, 0x48, 0x03, 0x08, 0x00, 0x02, 0x00, 0x68, 0x03, 0x08, 0x00, 0x02, 0x00, 0x48,
-    0x03, 0x27, 0x00, 0x02, 0x00, 0x68, 0x03, 0x27, 0x00, 0x02, 0x00, 0x48, 0x03, 0x2E, 0x00, 0x02,
-    0x00, 0x68, 0x03, 0x2E, 0x00, 0x02, 0x00, 0x49, 0x03, 0x30, 0x00, 0x02, 0x00, 0x69, 0x03, 0x30,
-    0x00, 0x02, 0x00, 0x49, 0x03, 0x44, 0x00, 0x02, 0x00, 0x69, 0x03, 0x44, 0x00, 0x02, 0x00, 0x4B,
-    0x03, 0x01, 0x00, 0x02, 0x00, 0x6B, 0x03, 0x01, 0x00, 0x02, 0x00, 0x4B, 0x03, 0x23, 0x00, 0x02,
-    0x00, 0x6B, 0x03, 0x23, 0x00, 0x02, 0x00, 0x4B, 0x03, 0x31, 0x00, 0x02, 0x00, 0x6B, 0x03, 0x31,
-    0x00, 0x02, 0x00, 0x4C, 0x03, 0x23, 0x00, 0x02, 0x00, 0x6C, 0x03, 0x23, 0x00, 0x02, 0x1E, 0x36,
-    0x03, 0x04, 0x00, 0x02, 0x1E, 0x37, 0x03, 0x04, 0x00, 0x02, 0x00, 0x4C, 0x03, 0x31, 0x00, 0x02,
-    0x00, 0x6C, 0x03, 0x31, 0x00, 0x02, 0x00, 0x4C, 0x03, 0x2D, 0x00, 0x02, 0x00, 0x6C, 0x03, 0x2D,
-    0x00, 0x02, 0x00, 0x4D, 0x03, 0x01, 0x00, 0x02, 0x00, 0x6D, 0x03, 0x01, 0x00, 0x02, 0x00, 0x4D,
-    0x03, 0x07, 0x00, 0x02, 0x00, 0x6D, 0x03, 0x07, 0x00, 0x02, 0x00, 0x4D, 0x03, 0x23, 0x00, 0x02,
-    0x00, 0x6D, 0x03, 0x23, 0x00, 0x02, 0x00, 0x4E, 0x03, 0x07, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x07,
-    0x00, 0x02, 0x00, 0x4E, 0x03, 0x23, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x23, 0x00, 0x02, 0x00, 0x4E,
-    0x03, 0x31, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x31, 0x00, 0x02, 0x00, 0x4E, 0x03, 0x2D, 0x00, 0x02,
-    0x00, 0x6E, 0x03, 0x2D, 0x00, 0x02, 0x00, 0xD5, 0x03, 0x01, 0x00, 0x02, 0x00, 0xF5, 0x03, 0x01,
-    0x00, 0x02, 0x00, 0xD5, 0x03, 0x08, 0x00, 0x02, 0x00, 0xF5, 0x03, 0x08, 0x00, 0x02, 0x01, 0x4C,
-    0x03, 0x00, 0x00, 0x02, 0x01, 0x4D, 0x03, 0x00, 0x00, 0x02, 0x01, 0x4C, 0x03, 0x01, 0x00, 0x02,
-    0x01, 0x4D, 0x03, 0x01, 0x00, 0x02, 0x00, 0x50, 0x03, 0x01, 0x00, 0x02, 0x00, 0x70, 0x03, 0x01,
-    0x00, 0x02, 0x00, 0x50, 0x03, 0x07, 0x00, 0x02, 0x00, 0x70, 0x03, 0x07, 0x00, 0x02, 0x00, 0x52,
-    0x03, 0x07, 0x00, 0x02, 0x00, 0x72, 0x03, 0x07, 0x00, 0x02, 0x00, 0x52, 0x03, 0x23, 0x00, 0x02,
-    0x00, 0x72, 0x03, 0x23, 0x00, 0x02, 0x1E, 0x5A, 0x03, 0x04, 0x00, 0x02, 0x1E, 0x5B, 0x03, 0x04,
-    0x00, 0x02, 0x00, 0x52, 0x03, 0x31, 0x00, 0x02, 0x00, 0x72, 0x03, 0x31, 0x00, 0x02, 0x00, 0x53,
-    0x03, 0x07, 0x00, 0x02, 0x00, 0x73, 0x03, 0x07, 0x00, 0x02, 0x00, 0x53, 0x03, 0x23, 0x00, 0x02,
-    0x00, 0x73, 0x03, 0x23, 0x00, 0x02, 0x01, 0x5A, 0x03, 0x07, 0x00, 0x02, 0x01, 0x5B, 0x03, 0x07,
-    0x00, 0x02, 0x01, 0x60, 0x03, 0x07, 0x00, 0x02, 0x01, 0x61, 0x03, 0x07, 0x00, 0x02, 0x1E, 0x60,
-    0x03, 0x23, 0x00, 0x02, 0x1E, 0x61, 0x03, 0x23, 0x00, 0x02, 0x00, 0x54, 0x03, 0x07, 0x00, 0x02,
-    0x00, 0x74, 0x03, 0x07, 0x00, 0x02, 0x00, 0x54, 0x03, 0x23, 0x00, 0x02, 0x00, 0x74, 0x03, 0x23,
-    0x00, 0x02, 0x00, 0x54, 0x03, 0x31, 0x00, 0x02, 0x00, 0x74, 0x03, 0x31, 0x00, 0x02, 0x00, 0x54,
-    0x03, 0x2D, 0x00, 0x02, 0x00, 0x74, 0x03, 0x2D, 0x00, 0x02, 0x00, 0x55, 0x03, 0x24, 0x00, 0x02,
-    0x00, 0x75, 0x03, 0x24, 0x00, 0x02, 0x00, 0x55, 0x03, 0x30, 0x00, 0x02, 0x00, 0x75, 0x03, 0x30,
-    0x00, 0x02, 0x00, 0x55, 0x03, 0x2D, 0x00, 0x02, 0x00, 0x75, 0x03, 0x2D, 0x00, 0x02, 0x01, 0x68,
-    0x03, 0x01, 0x00, 0x02, 0x01, 0x69, 0x03, 0x01, 0x00, 0x02, 0x01, 0x6A, 0x03, 0x08, 0x00, 0x02,
-    0x01, 0x6B, 0x03, 0x08, 0x00, 0x02, 0x00, 0x56, 0x03, 0x03, 0x00, 0x02, 0x00, 0x76, 0x03, 0x03,
-    0x00, 0x02, 0x00, 0x56, 0x03, 0x23, 0x00, 0x02, 0x00, 0x76, 0x03, 0x23, 0x00, 0x02, 0x00, 0x57,
-    0x03, 0x00, 0x00, 0x02, 0x00, 0x77, 0x03, 0x00, 0x00, 0x02, 0x00, 0x57, 0x03, 0x01, 0x00, 0x02,
-    0x00, 0x77, 0x03, 0x01, 0x00, 0x02, 0x00, 0x57, 0x03, 0x08, 0x00, 0x02, 0x00, 0x77, 0x03, 0x08,
-    0x00, 0x02, 0x00, 0x57, 0x03, 0x07, 0x00, 0x02, 0x00, 0x77, 0x03, 0x07, 0x00, 0x02, 0x00, 0x57,
-    0x03, 0x23, 0x00, 0x02, 0x00, 0x77, 0x03, 0x23, 0x00, 0x02, 0x00, 0x58, 0x03, 0x07, 0x00, 0x02,
-    0x00, 0x78, 0x03, 0x07, 0x00, 0x02, 0x00, 0x58, 0x03, 0x08, 0x00, 0x02, 0x00, 0x78, 0x03, 0x08,
-    0x00, 0x02, 0x00, 0x59, 0x03, 0x07, 0x00, 0x02, 0x00, 0x79, 0x03, 0x07, 0x00, 0x02, 0x00, 0x5A,
-    0x03, 0x02, 0x00, 0x02, 0x00, 0x7A, 0x03, 0x02, 0x00, 0x02, 0x00, 0x5A, 0x03, 0x23, 0x00, 0x02,
-    0x00, 0x7A, 0x03, 0x23, 0x00, 0x02, 0x00, 0x5A, 0x03, 0x31, 0x00, 0x02, 0x00, 0x7A, 0x03, 0x31,
-    0x00, 0x02, 0x00, 0x68, 0x03, 0x31, 0x00, 0x02, 0x00, 0x74, 0x03, 0x08, 0x00, 0x02, 0x00, 0x77,
-    0x03, 0x0A, 0x00, 0x02, 0x00, 0x79, 0x03, 0x0A, 0x00, 0x02, 0x01, 0x7F, 0x03, 0x07, 0x00, 0x02,
-    0x00, 0x41, 0x03, 0x23, 0x00, 0x02, 0x00, 0x61, 0x03, 0x23, 0x00, 0x02, 0x00, 0x41, 0x03, 0x09,
-    0x00, 0x02, 0x00, 0x61, 0x03, 0x09, 0x00, 0x02, 0x00, 0xC2, 0x03, 0x01, 0x00, 0x02, 0x00, 0xE2,
-    0x03, 0x01, 0x00, 0x02, 0x00, 0xC2, 0x03, 0x00, 0x00, 0x02, 0x00, 0xE2, 0x03, 0x00, 0x00, 0x02,
-    0x00, 0xC2, 0x03, 0x09, 0x00, 0x02, 0x00, 0xE2, 0x03, 0x09, 0x00, 0x02, 0x00, 0xC2, 0x03, 0x03,
-    0x00, 0x02, 0x00, 0xE2, 0x03, 0x03, 0x00, 0x02, 0x00, 0xC2, 0x03, 0x23, 0x00, 0x02, 0x00, 0xE2,
-    0x03, 0x23, 0x00, 0x02, 0x01, 0x02, 0x03, 0x01, 0x00, 0x02, 0x01, 0x03, 0x03, 0x01, 0x00, 0x02,
-    0x01, 0x02, 0x03, 0x00, 0x00, 0x02, 0x01, 0x03, 0x03, 0x00, 0x00, 0x02, 0x01, 0x02, 0x03, 0x09,
-    0x00, 0x02, 0x01, 0x03, 0x03, 0x09, 0x00, 0x02, 0x01, 0x02, 0x03, 0x03, 0x00, 0x02, 0x01, 0x03,
-    0x03, 0x03, 0x00, 0x02, 0x01, 0x02, 0x03, 0x23, 0x00, 0x02, 0x01, 0x03, 0x03, 0x23, 0x00, 0x02,
-    0x00, 0x45, 0x03, 0x23, 0x00, 0x02, 0x00, 0x65, 0x03, 0x23, 0x00, 0x02, 0x00, 0x45, 0x03, 0x09,
-    0x00, 0x02, 0x00, 0x65, 0x03, 0x09, 0x00, 0x02, 0x00, 0x45, 0x03, 0x03, 0x00, 0x02, 0x00, 0x65,
-    0x03, 0x03, 0x00, 0x02, 0x00, 0xCA, 0x03, 0x01, 0x00, 0x02, 0x00, 0xEA, 0x03, 0x01, 0x00, 0x02,
-    0x00, 0xCA, 0x03, 0x00, 0x00, 0x02, 0x00, 0xEA, 0x03, 0x00, 0x00, 0x02, 0x00, 0xCA, 0x03, 0x09,
-    0x00, 0x02, 0x00, 0xEA, 0x03, 0x09, 0x00, 0x02, 0x00, 0xCA, 0x03, 0x03, 0x00, 0x02, 0x00, 0xEA,
-    0x03, 0x03, 0x00, 0x02, 0x00, 0xCA, 0x03, 0x23, 0x00, 0x02, 0x00, 0xEA, 0x03, 0x23, 0x00, 0x02,
-    0x00, 0x49, 0x03, 0x09, 0x00, 0x02, 0x00, 0x69, 0x03, 0x09, 0x00, 0x02, 0x00, 0x49, 0x03, 0x23,
-    0x00, 0x02, 0x00, 0x69, 0x03, 0x23, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x23, 0x00, 0x02, 0x00, 0x6F,
-    0x03, 0x23, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x09, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x09, 0x00, 0x02,
-    0x00, 0xD4, 0x03, 0x01, 0x00, 0x02, 0x00, 0xF4, 0x03, 0x01, 0x00, 0x02, 0x00, 0xD4, 0x03, 0x00,
-    0x00, 0x02, 0x00, 0xF4, 0x03, 0x00, 0x00, 0x02, 0x00, 0xD4, 0x03, 0x09, 0x00, 0x02, 0x00, 0xF4,
-    0x03, 0x09, 0x00, 0x02, 0x00, 0xD4, 0x03, 0x03, 0x00, 0x02, 0x00, 0xF4, 0x03, 0x03, 0x00, 0x02,
-    0x00, 0xD4, 0x03, 0x23, 0x00, 0x02, 0x00, 0xF4, 0x03, 0x23, 0x00, 0x02, 0x00, 0xD3, 0x03, 0x1B,
-    0x00, 0x02, 0x00, 0xF3, 0x03, 0x1B, 0x00, 0x02, 0x00, 0xD2, 0x03, 0x1B, 0x00, 0x02, 0x00, 0xF2,
-    0x03, 0x1B, 0x00, 0x02, 0x01, 0xA0, 0x03, 0x09, 0x00, 0x02, 0x01, 0xA1, 0x03, 0x09, 0x00, 0x02,
-    0x00, 0xD5, 0x03, 0x1B, 0x00, 0x02, 0x00, 0xF5, 0x03, 0x1B, 0x00, 0x02, 0x01, 0xA0, 0x03, 0x23,
-    0x00, 0x02, 0x01, 0xA1, 0x03, 0x23, 0x00, 0x02, 0x00, 0x55, 0x03, 0x23, 0x00, 0x02, 0x00, 0x75,
-    0x03, 0x23, 0x00, 0x02, 0x00, 0x55, 0x03, 0x09, 0x00, 0x02, 0x00, 0x75, 0x03, 0x09, 0x00, 0x02,
-    0x00, 0xDA, 0x03, 0x1B, 0x00, 0x02, 0x00, 0xFA, 0x03, 0x1B, 0x00, 0x02, 0x00, 0xD9, 0x03, 0x1B,
-    0x00, 0x02, 0x00, 0xF9, 0x03, 0x1B, 0x00, 0x02, 0x01, 0xAF, 0x03, 0x09, 0x00, 0x02, 0x01, 0xB0,
-    0x03, 0x09, 0x00, 0x02, 0x01, 0x68, 0x03, 0x1B, 0x00, 0x02, 0x01, 0x69, 0x03, 0x1B, 0x00, 0x02,
-    0x01, 0xAF, 0x03, 0x23, 0x00, 0x02, 0x01, 0xB0, 0x03, 0x23, 0x00, 0x02, 0x00, 0x59, 0x03, 0x00,
-    0x00, 0x02, 0x00, 0x79, 0x03, 0x00, 0x00, 0x02, 0x00, 0x59, 0x03, 0x23, 0x00, 0x02, 0x00, 0x79,
-    0x03, 0x23, 0x00, 0x02, 0x00, 0x59, 0x03, 0x09, 0x00, 0x02, 0x00, 0x79, 0x03, 0x09, 0x00, 0x02,
-    0x00, 0x59, 0x03, 0x03, 0x00, 0x02, 0x00, 0x79, 0x03, 0x03, 0x00, 0x01, 0x01, 0xF1, 0x00, 0xC0,
-    0x00, 0xC1, 0x00, 0xC2, 0x00, 0xC3, 0x00, 0xC4, 0x00, 0xC5, 0x00, 0xC7, 0x00, 0xC8, 0x00, 0xC9,
-    0x00, 0xCA, 0x00, 0xCB, 0x00, 0xCC, 0x00, 0xCD, 0x00, 0xCE, 0x00, 0xCF, 0x00, 0xD1, 0x00, 0xD2,
-    0x00, 0xD3, 0x00, 0xD4, 0x00, 0xD5, 0x00, 0xD6, 0x00, 0xD9, 0x00, 0xDA, 0x00, 0xDB, 0x00, 0xDC,
-    0x00, 0xDD, 0x00, 0xE0, 0x00, 0xE1, 0x00, 0xE2, 0x00, 0xE3, 0x00, 0xE4, 0x00, 0xE5, 0x00, 0xE7,
-    0x00, 0xE8, 0x00, 0xE9, 0x00, 0xEA, 0x00, 0xEB, 0x00, 0xEC, 0x00, 0xED, 0x00, 0xEE, 0x00, 0xEF,
-    0x00, 0xF1, 0x00, 0xF2, 0x00, 0xF3, 0x00, 0xF4, 0x00, 0xF5, 0x00, 0xF6, 0x00, 0xF9, 0x00, 0xFA,
-    0x00, 0xFB, 0x00, 0xFC, 0x00, 0xFD, 0x00, 0xFF, 0x01, 0x00, 0x01, 0x01, 0x01, 0x02, 0x01, 0x03,
-    0x01, 0x04, 0x01, 0x05, 0x01, 0x06, 0x01, 0x07, 0x01, 0x08, 0x01, 0x09, 0x01, 0x0A, 0x01, 0x0B,
-    0x01, 0x0C, 0x01, 0x0D, 0x01, 0x0E, 0x01, 0x0F, 0x01, 0x12, 0x01, 0x13, 0x01, 0x14, 0x01, 0x15,
-    0x01, 0x16, 0x01, 0x17, 0x01, 0x18, 0x01, 0x19, 0x01, 0x1A, 0x01, 0x1B, 0x01, 0x1C, 0x01, 0x1D,
-    0x01, 0x1E, 0x01, 0x1F, 0x01, 0x20, 0x01, 0x21, 0x01, 0x22, 0x01, 0x23, 0x01, 0x24, 0x01, 0x25,
-    0x01, 0x28, 0x01, 0x29, 0x01, 0x2A, 0x01, 0x2B, 0x01, 0x2C, 0x01, 0x2D, 0x01, 0x2E, 0x01, 0x2F,
-    0x01, 0x30, 0x01, 0x34, 0x01, 0x35, 0x01, 0x36, 0x01, 0x37, 0x01, 0x39, 0x01, 0x3A, 0x01, 0x3B,
-    0x01, 0x3C, 0x01, 0x3D, 0x01, 0x3E, 0x01, 0x43, 0x01, 0x44, 0x01, 0x45, 0x01, 0x46, 0x01, 0x47,
-    0x01, 0x48, 0x01, 0x4C, 0x01, 0x4D, 0x01, 0x4E, 0x01, 0x4F, 0x01, 0x50, 0x01, 0x51, 0x01, 0x54,
-    0x01, 0x55, 0x01, 0x56, 0x01, 0x57, 0x01, 0x58, 0x01, 0x59, 0x01, 0x5A, 0x01, 0x5B, 0x01, 0x5C,
-    0x01, 0x5D, 0x01, 0x5E, 0x01, 0x5F, 0x01, 0x60, 0x01, 0x61, 0x01, 0x62, 0x01, 0x63, 0x01, 0x64,
-    0x01, 0x65, 0x01, 0x68, 0x01, 0x69, 0x01, 0x6A, 0x01, 0x6B, 0x01, 0x6C, 0x01, 0x6D, 0x01, 0x6E,
-    0x01, 0x6F, 0x01, 0x70, 0x01, 0x71, 0x01, 0x72, 0x01, 0x73, 0x01, 0x74, 0x01, 0x75, 0x01, 0x76,
-    0x01, 0x77, 0x01, 0x78, 0x01, 0x79, 0x01, 0x7A, 0x01, 0x7B, 0x01, 0x7C, 0x01, 0x7D, 0x01, 0x7E,
-    0x01, 0xA0, 0x01, 0xA1, 0x01, 0xAF, 0x01, 0xB0, 0x01, 0xCD, 0x01, 0xCE, 0x01, 0xCF, 0x01, 0xD0,
-    0x01, 0xD1, 0x01, 0xD2, 0x01, 0xD3, 0x01, 0xD4, 0x01, 0xD5, 0x01, 0xD6, 0x01, 0xD7, 0x01, 0xD8,
-    0x01, 0xD9, 0x01, 0xDA, 0x01, 0xDB, 0x01, 0xDC, 0x01, 0xDE, 0x01, 0xDF, 0x01, 0xE0, 0x01, 0xE1,
-    0x01, 0xE2, 0x01, 0xE3, 0x01, 0xE6, 0x01, 0xE7, 0x01, 0xE8, 0x01, 0xE9, 0x01, 0xEA, 0x01, 0xEB,
-    0x01, 0xEC, 0x01, 0xED, 0x01, 0xEE, 0x01, 0xEF, 0x01, 0xF0, 0x01, 0xF4, 0x01, 0xF5, 0x01, 0xF8,
-    0x01, 0xF9, 0x01, 0xFA, 0x01, 0xFB, 0x01, 0xFC, 0x01, 0xFD, 0x01, 0xFE, 0x01, 0xFF, 0x02, 0x00,
-    0x02, 0x01, 0x02, 0x02, 0x02, 0x03, 0x02, 0x04, 0x02, 0x05, 0x02, 0x06, 0x02, 0x07, 0x02, 0x08,
-    0x02, 0x09, 0x02, 0x0A, 0x02, 0x0B, 0x02, 0x0C, 0x02, 0x0D, 0x02, 0x0E, 0x02, 0x0F, 0x02, 0x10,
-    0x02, 0x11, 0x02, 0x12, 0x02, 0x13, 0x02, 0x14, 0x02, 0x15, 0x02, 0x16, 0x02, 0x17, 0x02, 0x18,
-    0x02, 0x19, 0x02, 0x1A, 0x02, 0x1B, 0x02, 0x1E, 0x02, 0x1F, 0x02, 0x26, 0x02, 0x27, 0x02, 0x28,
-    0x02, 0x29, 0x02, 0x2A, 0x02, 0x2B, 0x02, 0x2C, 0x02, 0x2D, 0x02, 0x2E, 0x02, 0x2F, 0x02, 0x30,
-    0x02, 0x31, 0x02, 0x32, 0x02, 0x33, 0x1E, 0x00, 0x1E, 0x01, 0x1E, 0x02, 0x1E, 0x03, 0x1E, 0x04,
-    0x1E, 0x05, 0x1E, 0x06, 0x1E, 0x07, 0x1E, 0x08, 0x1E, 0x09, 0x1E, 0x0A, 0x1E, 0x0B, 0x1E, 0x0C,
-    0x1E, 0x0D, 0x1E, 0x0E, 0x1E, 0x0F, 0x1E, 0x10, 0x1E, 0x11, 0x1E, 0x12, 0x1E, 0x13, 0x1E, 0x14,
-    0x1E, 0x15, 0x1E, 0x16, 0x1E, 0x17, 0x1E, 0x18, 0x1E, 0x19, 0x1E, 0x1A, 0x1E, 0x1B, 0x1E, 0x1C,
-    0x1E, 0x1D, 0x1E, 0x1E, 0x1E, 0x1F, 0x1E, 0x20, 0x1E, 0x21, 0x1E, 0x22, 0x1E, 0x23, 0x1E, 0x24,
-    0x1E, 0x25, 0x1E, 0x26, 0x1E, 0x27, 0x1E, 0x28, 0x1E, 0x29, 0x1E, 0x2A, 0x1E, 0x2B, 0x1E, 0x2C,
-    0x1E, 0x2D, 0x1E, 0x2E, 0x1E, 0x2F, 0x1E, 0x30, 0x1E, 0x31, 0x1E, 0x32, 0x1E, 0x33, 0x1E, 0x34,
-    0x1E, 0x35, 0x1E, 0x36, 0x1E, 0x37, 0x1E, 0x38, 0x1E, 0x39, 0x1E, 0x3A, 0x1E, 0x3B, 0x1E, 0x3C,
-    0x1E, 0x3D, 0x1E, 0x3E, 0x1E, 0x3F, 0x1E, 0x40, 0x1E, 0x41, 0x1E, 0x42, 0x1E, 0x43, 0x1E, 0x44,
-    0x1E, 0x45, 0x1E, 0x46, 0x1E, 0x47, 0x1E, 0x48, 0x1E, 0x49, 0x1E, 0x4A, 0x1E, 0x4B, 0x1E, 0x4C,
-    0x1E, 0x4D, 0x1E, 0x4E, 0x1E, 0x4F, 0x1E, 0x50, 0x1E, 0x51, 0x1E, 0x52, 0x1E, 0x53, 0x1E, 0x54,
-    0x1E, 0x55, 0x1E, 0x56, 0x1E, 0x57, 0x1E, 0x58, 0x1E, 0x59, 0x1E, 0x5A, 0x1E, 0x5B, 0x1E, 0x5C,
-    0x1E, 0x5D, 0x1E, 0x5E, 0x1E, 0x5F, 0x1E, 0x60, 0x1E, 0x61, 0x1E, 0x62, 0x1E, 0x63, 0x1E, 0x64,
-    0x1E, 0x65, 0x1E, 0x66, 0x1E, 0x67, 0x1E, 0x68, 0x1E, 0x69, 0x1E, 0x6A, 0x1E, 0x6B, 0x1E, 0x6C,
-    0x1E, 0x6D, 0x1E, 0x6E, 0x1E, 0x6F, 0x1E, 0x70, 0x1E, 0x71, 0x1E, 0x72, 0x1E, 0x73, 0x1E, 0x74,
-    0x1E, 0x75, 0x1E, 0x76, 0x1E, 0x77, 0x1E, 0x78, 0x1E, 0x79, 0x1E, 0x7A, 0x1E, 0x7B, 0x1E, 0x7C,
-    0x1E, 0x7D, 0x1E, 0x7E, 0x1E, 0x7F, 0x1E, 0x80, 0x1E, 0x81, 0x1E, 0x82, 0x1E, 0x83, 0x1E, 0x84,
-    0x1E, 0x85, 0x1E, 0x86, 0x1E, 0x87, 0x1E, 0x88, 0x1E, 0x89, 0x1E, 0x8A, 0x1E, 0x8B, 0x1E, 0x8C,
-    0x1E, 0x8D, 0x1E, 0x8E, 0x1E, 0x8F, 0x1E, 0x90, 0x1E, 0x91, 0x1E, 0x92, 0x1E, 0x93, 0x1E, 0x94,
-    0x1E, 0x95, 0x1E, 0x96, 0x1E, 0x97, 0x1E, 0x98, 0x1E, 0x99, 0x1E, 0x9B, 0x1E, 0xA0, 0x1E, 0xA1,
-    0x1E, 0xA2, 0x1E, 0xA3, 0x1E, 0xA4, 0x1E, 0xA5, 0x1E, 0xA6, 0x1E, 0xA7, 0x1E, 0xA8, 0x1E, 0xA9,
-    0x1E, 0xAA, 0x1E, 0xAB, 0x1E, 0xAC, 0x1E, 0xAD, 0x1E, 0xAE, 0x1E, 0xAF, 0x1E, 0xB0, 0x1E, 0xB1,
-    0x1E, 0xB2, 0x1E, 0xB3, 0x1E, 0xB4, 0x1E, 0xB5, 0x1E, 0xB6, 0x1E, 0xB7, 0x1E, 0xB8, 0x1E, 0xB9,
-    0x1E, 0xBA, 0x1E, 0xBB, 0x1E, 0xBC, 0x1E, 0xBD, 0x1E, 0xBE, 0x1E, 0xBF, 0x1E, 0xC0, 0x1E, 0xC1,
-    0x1E, 0xC2, 0x1E, 0xC3, 0x1E, 0xC4, 0x1E, 0xC5, 0x1E, 0xC6, 0x1E, 0xC7, 0x1E, 0xC8, 0x1E, 0xC9,
-    0x1E, 0xCA, 0x1E, 0xCB, 0x1E, 0xCC, 0x1E, 0xCD, 0x1E, 0xCE, 0x1E, 0xCF, 0x1E, 0xD0, 0x1E, 0xD1,
-    0x1E, 0xD2, 0x1E, 0xD3, 0x1E, 0xD4, 0x1E, 0xD5, 0x1E, 0xD6, 0x1E, 0xD7, 0x1E, 0xD8, 0x1E, 0xD9,
-    0x1E, 0xDA, 0x1E, 0xDB, 0x1E, 0xDC, 0x1E, 0xDD, 0x1E, 0xDE, 0x1E, 0xDF, 0x1E, 0xE0, 0x1E, 0xE1,
-    0x1E, 0xE2, 0x1E, 0xE3, 0x1E, 0xE4, 0x1E, 0xE5, 0x1E, 0xE6, 0x1E, 0xE7, 0x1E, 0xE8, 0x1E, 0xE9,
-    0x1E, 0xEA, 0x1E, 0xEB, 0x1E, 0xEC, 0x1E, 0xED, 0x1E, 0xEE, 0x1E, 0xEF, 0x1E, 0xF0, 0x1E, 0xF1,
-    0x1E, 0xF2, 0x1E, 0xF3, 0x1E, 0xF4, 0x1E, 0xF5, 0x1E, 0xF6, 0x1E, 0xF7, 0x1E, 0xF8, 0x1E, 0xF9,
-    0x00, 0x01, 0x05, 0xBA, 0x00, 0xAC, 0x01, 0x5E, 0x01, 0x64, 0x01, 0x6A, 0x01, 0x70, 0x01, 0x76,
-    0x01, 0x7C, 0x01, 0x82, 0x01, 0x88, 0x01, 0x8E, 0x01, 0x94, 0x01, 0x9A, 0x01, 0xA0, 0x01, 0xA6,
-    0x01, 0xAC, 0x01, 0xB2, 0x01, 0xB8, 0x01, 0xBE, 0x01, 0xC4, 0x01, 0xCA, 0x01, 0xD0, 0x01, 0xD6,
-    0x01, 0xDC, 0x01, 0xE2, 0x01, 0xE8, 0x01, 0xEE, 0x01, 0xF4, 0x01, 0xFA, 0x02, 0x00, 0x02, 0x06,
-    0x02, 0x0C, 0x02, 0x12, 0x02, 0x18, 0x02, 0x1E, 0x02, 0x24, 0x02, 0x2A, 0x02, 0x30, 0x02, 0x38,
-    0x02, 0x40, 0x02, 0x46, 0x02, 0x4C, 0x02, 0x54, 0x02, 0x5C, 0x02, 0x62, 0x02, 0x68, 0x02, 0x70,
-    0x02, 0x78, 0x02, 0x80, 0x02, 0x88, 0x02, 0x8E, 0x02, 0x94, 0x02, 0x9A, 0x02, 0xA0, 0x02, 0xA6,
-    0x02, 0xAC, 0x02, 0xB2, 0x02, 0xB8, 0x02, 0xBE, 0x02, 0xC4, 0x02, 0xCA, 0x02, 0xD0, 0x02, 0xD6,
-    0x02, 0xDE, 0x02, 0xE6, 0x02, 0xEE, 0x02, 0xF6, 0x02, 0xFE, 0x03, 0x06, 0x03, 0x0C, 0x03, 0x12,
-    0x03, 0x18, 0x03, 0x1E, 0x03, 0x24, 0x03, 0x2A, 0x03, 0x30, 0x03, 0x36, 0x03, 0x3C, 0x03, 0x42,
-    0x03, 0x48, 0x03, 0x4E, 0x03, 0x54, 0x03, 0x5A, 0x03, 0x62, 0x03, 0x6A, 0x03, 0x70, 0x03, 0x76,
-    0x03, 0x7C, 0x03, 0x82, 0x03, 0x8A, 0x03, 0x92, 0x03, 0x98, 0x03, 0x9E, 0x03, 0xA4, 0x03, 0xAA,
-    0x03, 0xB0, 0x03, 0xB6, 0x03, 0xBE, 0x03, 0xC6, 0x03, 0xCE, 0x03, 0xD6, 0x03, 0xDE, 0x03, 0xE6,
-    0x03, 0xEC, 0x03, 0xF2, 0x03, 0xF8, 0x03, 0xFE, 0x04, 0x06, 0x04, 0x0E, 0x04, 0x14, 0x04, 0x1A,
-    0x04, 0x20, 0x04, 0x26, 0x04, 0x2C, 0x04, 0x32, 0x04, 0x38, 0x04, 0x3E, 0x04, 0x46, 0x04, 0x4E,
-    0x04, 0x56, 0x04, 0x5E, 0x04, 0x64, 0x04, 0x6A, 0x04, 0x70, 0x04, 0x76, 0x04, 0x7C, 0x04, 0x82,
-    0x04, 0x8A, 0x04, 0x92, 0x04, 0x9A, 0x04, 0xA2, 0x04, 0xA8, 0x04, 0xAE, 0x04, 0xB4, 0x04, 0xBA,
-    0x04, 0xC0, 0x04, 0xC6, 0x04, 0xCE, 0x04, 0xD6, 0x04, 0xDE, 0x04, 0xE6, 0x04, 0xEC, 0x04, 0xF2,
-    0x04, 0xF8, 0x04, 0xFE, 0x05, 0x04, 0x05, 0x0A, 0x05, 0x12, 0x05, 0x1A, 0x05, 0x22, 0x05, 0x2A,
-    0x05, 0x30, 0x05, 0x36, 0x05, 0x3C, 0x05, 0x42, 0x05, 0x48, 0x05, 0x4E, 0x05, 0x54, 0x05, 0x5A,
-    0x05, 0x60, 0x05, 0x66, 0x05, 0x6C, 0x05, 0x72, 0x05, 0x78, 0x05, 0x7E, 0x05, 0x84, 0x05, 0x8A,
-    0x05, 0x90, 0x05, 0x96, 0x05, 0x9C, 0x05, 0xA2, 0x05, 0xA8, 0x05, 0xAE, 0x05, 0xB4, 0x00, 0x02,
-    0x00, 0x41, 0x03, 0x40, 0x00, 0x02, 0x00, 0x41, 0x03, 0x41, 0x00, 0x02, 0x00, 0x45, 0x03, 0x40,
-    0x00, 0x02, 0x00, 0x45, 0x03, 0x41, 0x00, 0x02, 0x00, 0x49, 0x03, 0x40, 0x00, 0x02, 0x00, 0x49,
-    0x03, 0x41, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x40, 0x00, 0x02, 0x00, 0x4F, 0x03, 0x41, 0x00, 0x02,
-    0x00, 0x55, 0x03, 0x40, 0x00, 0x02, 0x00, 0x55, 0x03, 0x41, 0x00, 0x02, 0x00, 0x59, 0x03, 0x41,
-    0x00, 0x02, 0x00, 0x61, 0x03, 0x40, 0x00, 0x02, 0x00, 0x61, 0x03, 0x41, 0x00, 0x02, 0x00, 0x65,
-    0x03, 0x40, 0x00, 0x02, 0x00, 0x65, 0x03, 0x41, 0x00, 0x02, 0x00, 0x69, 0x03, 0x40, 0x00, 0x02,
-    0x00, 0x69, 0x03, 0x41, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x40, 0x00, 0x02, 0x00, 0x6F, 0x03, 0x41,
-    0x00, 0x02, 0x00, 0x75, 0x03, 0x40, 0x00, 0x02, 0x00, 0x75, 0x03, 0x41, 0x00, 0x02, 0x00, 0x79,
-    0x03, 0x41, 0x00, 0x02, 0x00, 0x43, 0x03, 0x41, 0x00, 0x02, 0x00, 0x63, 0x03, 0x41, 0x00, 0x02,
-    0x21, 0x2A, 0x03, 0x27, 0x00, 0x02, 0x00, 0x4C, 0x03, 0x41, 0x00, 0x02, 0x00, 0x6C, 0x03, 0x41,
-    0x00, 0x02, 0x00, 0x4E, 0x03, 0x41, 0x00, 0x02, 0x00, 0x6E, 0x03, 0x41, 0x00, 0x02, 0x00, 0x52,
-    0x03, 0x41, 0x00, 0x02, 0x00, 0x72, 0x03, 0x41, 0x00, 0x02, 0x00, 0x53, 0x03, 0x41, 0x00, 0x02,
-    0x00, 0x73, 0x03, 0x41, 0x00, 0x02, 0x00, 0x5A, 0x03, 0x41, 0x00, 0x02, 0x00, 0x7A, 0x03, 0x41,
-    0x00, 0x03, 0x00, 0x55, 0x03, 0x08, 0x03, 0x04, 0x00, 0x03, 0x00, 0x75, 0x03, 0x08, 0x03, 0x04,
-    0x00, 0x02, 0x00, 0xDC, 0x03, 0x01, 0x00, 0x02, 0x00, 0xFC, 0x03, 0x01, 0x00, 0x03, 0x00, 0x55,
-    0x03, 0x08, 0x03, 0x0C, 0x00, 0x03, 0x00, 0x75, 0x03, 0x08, 0x03, 0x0C, 0x00, 0x02, 0x00, 0xDC,
-    0x03, 0x40, 0x00, 0x02, 0x00, 0xFC, 0x03, 0x40, 0x00, 0x03, 0x00, 0x41, 0x03, 0x08, 0x03, 0x04,
-    0x00, 0x03, 0x00, 0x61, 0x03, 0x08, 0x03, 0x04, 0x00, 0x03, 0x00, 0x41, 0x03, 0x07, 0x03, 0x04,
-    0x00, 0x03, 0x00, 0x61, 0x03, 0x07, 0x03, 0x04, 0x00, 0x02, 0x21, 0x2A, 0x03, 0x0C, 0x00, 0x02,
-    0x01, 0xEA, 0x03, 0x04, 0x00, 0x02, 0x01, 0xEB, 0x03, 0x04, 0x00, 0x02, 0x00, 0x47, 0x03, 0x41,
-    0x00, 0x02, 0x00, 0x67, 0x03, 0x41, 0x00, 0x02, 0x00, 0x4E, 0x03, 0x40, 0x00, 0x02, 0x00, 0x6E,
-    0x03, 0x40, 0x00, 0x02, 0x00, 0xC5, 0x03, 0x41, 0x00, 0x02, 0x00, 0xE5, 0x03, 0x41, 0x00, 0x02,
-    0x00, 0xC6, 0x03, 0x41, 0x00, 0x02, 0x00, 0xE6, 0x03, 0x41, 0x00, 0x02, 0x00, 0xD8, 0x03, 0x41,
-    0x00, 0x02, 0x00, 0xF8, 0x03, 0x41, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x08, 0x03, 0x04, 0x00, 0x03,
-    0x00, 0x6F, 0x03, 0x08, 0x03, 0x04, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x03, 0x03, 0x04, 0x00, 0x03,
-    0x00, 0x6F, 0x03, 0x03, 0x03, 0x04, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x07, 0x03, 0x04, 0x00, 0x03,
-    0x00, 0x6F, 0x03, 0x07, 0x03, 0x04, 0x00, 0x02, 0x00, 0xC7, 0x03, 0x41, 0x00, 0x02, 0x00, 0xE7,
-    0x03, 0x41, 0x00, 0x02, 0x01, 0x12, 0x03, 0x40, 0x00, 0x02, 0x01, 0x13, 0x03, 0x40, 0x00, 0x02,
-    0x01, 0x12, 0x03, 0x41, 0x00, 0x02, 0x01, 0x13, 0x03, 0x41, 0x00, 0x02, 0x02, 0x28, 0x03, 0x06,
-    0x00, 0x02, 0x02, 0x29, 0x03, 0x06, 0x00, 0x02, 0x00, 0xCF, 0x03, 0x01, 0x00, 0x02, 0x00, 0xEF,
-    0x03, 0x01, 0x00, 0x02, 0x00, 0x4B, 0x03, 0x41, 0x00, 0x02, 0x00, 0x6B, 0x03, 0x41, 0x00, 0x02,
-    0x21, 0x2A, 0x03, 0x23, 0x00, 0x02, 0x21, 0x2A, 0x03, 0x31, 0x00, 0x03, 0x00, 0x4C, 0x03, 0x04,
-    0x03, 0x23, 0x00, 0x03, 0x00, 0x6C, 0x03, 0x04, 0x03, 0x23, 0x00, 0x02, 0x00, 0x4D, 0x03, 0x41,
-    0x00, 0x02, 0x00, 0x6D, 0x03, 0x41, 0x00, 0x02, 0x00, 0xD5, 0x03, 0x41, 0x00, 0x02, 0x00, 0xF5,
-    0x03, 0x41, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x03, 0x03, 0x08, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x03,
-    0x03, 0x08, 0x00, 0x02, 0x01, 0x4C, 0x03, 0x40, 0x00, 0x02, 0x01, 0x4D, 0x03, 0x40, 0x00, 0x02,
-    0x01, 0x4C, 0x03, 0x41, 0x00, 0x02, 0x01, 0x4D, 0x03, 0x41, 0x00, 0x02, 0x00, 0x50, 0x03, 0x41,
-    0x00, 0x02, 0x00, 0x70, 0x03, 0x41, 0x00, 0x03, 0x00, 0x52, 0x03, 0x04, 0x03, 0x23, 0x00, 0x03,
-    0x00, 0x72, 0x03, 0x04, 0x03, 0x23, 0x00, 0x03, 0x00, 0x53, 0x03, 0x01, 0x03, 0x07, 0x00, 0x03,
-    0x00, 0x73, 0x03, 0x01, 0x03, 0x07, 0x00, 0x03, 0x00, 0x53, 0x03, 0x0C, 0x03, 0x07, 0x00, 0x03,
-    0x00, 0x73, 0x03, 0x0C, 0x03, 0x07, 0x00, 0x02, 0x1E, 0x62, 0x03, 0x07, 0x00, 0x02, 0x1E, 0x63,
-    0x03, 0x07, 0x00, 0x02, 0x01, 0x68, 0x03, 0x41, 0x00, 0x02, 0x01, 0x69, 0x03, 0x41, 0x00, 0x03,
-    0x00, 0x55, 0x03, 0x04, 0x03, 0x08, 0x00, 0x03, 0x00, 0x75, 0x03, 0x04, 0x03, 0x08, 0x00, 0x02,
-    0x00, 0x57, 0x03, 0x40, 0x00, 0x02, 0x00, 0x77, 0x03, 0x40, 0x00, 0x02, 0x00, 0x57, 0x03, 0x41,
-    0x00, 0x02, 0x00, 0x77, 0x03, 0x41, 0x00, 0x02, 0x00, 0xC2, 0x03, 0x41, 0x00, 0x02, 0x00, 0xE2,
-    0x03, 0x41, 0x00, 0x02, 0x00, 0xC2, 0x03, 0x40, 0x00, 0x02, 0x00, 0xE2, 0x03, 0x40, 0x00, 0x03,
-    0x00, 0x41, 0x03, 0x02, 0x03, 0x09, 0x00, 0x03, 0x00, 0x61, 0x03, 0x02, 0x03, 0x09, 0x00, 0x03,
-    0x00, 0x41, 0x03, 0x02, 0x03, 0x03, 0x00, 0x03, 0x00, 0x61, 0x03, 0x02, 0x03, 0x03, 0x00, 0x02,
-    0x1E, 0xA0, 0x03, 0x02, 0x00, 0x02, 0x1E, 0xA1, 0x03, 0x02, 0x00, 0x02, 0x01, 0x02, 0x03, 0x41,
-    0x00, 0x02, 0x01, 0x03, 0x03, 0x41, 0x00, 0x02, 0x01, 0x02, 0x03, 0x40, 0x00, 0x02, 0x01, 0x03,
-    0x03, 0x40, 0x00, 0x03, 0x00, 0x41, 0x03, 0x06, 0x03, 0x09, 0x00, 0x03, 0x00, 0x61, 0x03, 0x06,
-    0x03, 0x09, 0x00, 0x03, 0x00, 0x41, 0x03, 0x06, 0x03, 0x03, 0x00, 0x03, 0x00, 0x61, 0x03, 0x06,
-    0x03, 0x03, 0x00, 0x02, 0x1E, 0xA0, 0x03, 0x06, 0x00, 0x02, 0x1E, 0xA1, 0x03, 0x06, 0x00, 0x02,
-    0x00, 0xCA, 0x03, 0x41, 0x00, 0x02, 0x00, 0xEA, 0x03, 0x41, 0x00, 0x02, 0x00, 0xCA, 0x03, 0x40,
-    0x00, 0x02, 0x00, 0xEA, 0x03, 0x40, 0x00, 0x03, 0x00, 0x45, 0x03, 0x02, 0x03, 0x09, 0x00, 0x03,
-    0x00, 0x65, 0x03, 0x02, 0x03, 0x09, 0x00, 0x03, 0x00, 0x45, 0x03, 0x02, 0x03, 0x03, 0x00, 0x03,
-    0x00, 0x65, 0x03, 0x02, 0x03, 0x03, 0x00, 0x02, 0x1E, 0xB8, 0x03, 0x02, 0x00, 0x02, 0x1E, 0xB9,
-    0x03, 0x02, 0x00, 0x02, 0x00, 0xD4, 0x03, 0x41, 0x00, 0x02, 0x00, 0xF4, 0x03, 0x41, 0x00, 0x02,
-    0x00, 0xD4, 0x03, 0x40, 0x00, 0x02, 0x00, 0xF4, 0x03, 0x40, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x02,
-    0x03, 0x09, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x02, 0x03, 0x09, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x02,
-    0x03, 0x03, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x02, 0x03, 0x03, 0x00, 0x02, 0x1E, 0xCC, 0x03, 0x02,
-    0x00, 0x02, 0x1E, 0xCD, 0x03, 0x02, 0x00, 0x02, 0x01, 0xA0, 0x03, 0x01, 0x00, 0x02, 0x01, 0xA1,
-    0x03, 0x01, 0x00, 0x02, 0x01, 0xA0, 0x03, 0x00, 0x00, 0x02, 0x01, 0xA1, 0x03, 0x00, 0x00, 0x02,
-    0x1E, 0xCE, 0x03, 0x1B, 0x00, 0x02, 0x1E, 0xCF, 0x03, 0x1B, 0x00, 0x02, 0x01, 0xA0, 0x03, 0x03,
-    0x00, 0x02, 0x01, 0xA1, 0x03, 0x03, 0x00, 0x02, 0x1E, 0xCC, 0x03, 0x1B, 0x00, 0x02, 0x1E, 0xCD,
-    0x03, 0x1B, 0x00, 0x02, 0x01, 0xAF, 0x03, 0x01, 0x00, 0x02, 0x01, 0xB0, 0x03, 0x01, 0x00, 0x02,
-    0x01, 0xAF, 0x03, 0x00, 0x00, 0x02, 0x01, 0xB0, 0x03, 0x00, 0x00, 0x02, 0x1E, 0xE6, 0x03, 0x1B,
-    0x00, 0x02, 0x1E, 0xE7, 0x03, 0x1B, 0x00, 0x02, 0x01, 0xAF, 0x03, 0x03, 0x00, 0x02, 0x01, 0xB0,
-    0x03, 0x03, 0x00, 0x02, 0x1E, 0xE4, 0x03, 0x1B, 0x00, 0x02, 0x1E, 0xE5, 0x03, 0x1B, 0x00, 0x02,
-    0x00, 0x59, 0x03, 0x40, 0x00, 0x02, 0x00, 0x79, 0x03, 0x40, 0x00, 0x01, 0x00, 0xAC, 0x00, 0xC0,
-    0x00, 0xC1, 0x00, 0xC8, 0x00, 0xC9, 0x00, 0xCC, 0x00, 0xCD, 0x00, 0xD2, 0x00, 0xD3, 0x00, 0xD9,
-    0x00, 0xDA, 0x00, 0xDD, 0x00, 0xE0, 0x00, 0xE1, 0x00, 0xE8, 0x00, 0xE9, 0x00, 0xEC, 0x00, 0xED,
-    0x00, 0xF2, 0x00, 0xF3, 0x00, 0xF9, 0x00, 0xFA, 0x00, 0xFD, 0x01, 0x06, 0x01, 0x07, 0x01, 0x36,
-    0x01, 0x39, 0x01, 0x3A, 0x01, 0x43, 0x01, 0x44, 0x01, 0x54, 0x01, 0x55, 0x01, 0x5A, 0x01, 0x5B,
-    0x01, 0x79, 0x01, 0x7A, 0x01, 0xD5, 0x01, 0xD6, 0x01, 0xD7, 0x01, 0xD8, 0x01, 0xD9, 0x01, 0xDA,
-    0x01, 0xDB, 0x01, 0xDC, 0x01, 0xDE, 0x01, 0xDF, 0x01, 0xE0, 0x01, 0xE1, 0x01, 0xE8, 0x01, 0xEC,
-    0x01, 0xED, 0x01, 0xF4, 0x01, 0xF5, 0x01, 0xF8, 0x01, 0xF9, 0x01, 0xFA, 0x01, 0xFB, 0x01, 0xFC,
-    0x01, 0xFD, 0x01, 0xFE, 0x01, 0xFF, 0x02, 0x2A, 0x02, 0x2B, 0x02, 0x2C, 0x02, 0x2D, 0x02, 0x30,
-    0x02, 0x31, 0x1E, 0x08, 0x1E, 0x09, 0x1E, 0x14, 0x1E, 0x15, 0x1E, 0x16, 0x1E, 0x17, 0x1E, 0x1C,
-    0x1E, 0x1D, 0x1E, 0x2E, 0x1E, 0x2F, 0x1E, 0x30, 0x1E, 0x31, 0x1E, 0x32, 0x1E, 0x34, 0x1E, 0x38,
-    0x1E, 0x39, 0x1E, 0x3E, 0x1E, 0x3F, 0x1E, 0x4C, 0x1E, 0x4D, 0x1E, 0x4E, 0x1E, 0x4F, 0x1E, 0x50,
-    0x1E, 0x51, 0x1E, 0x52, 0x1E, 0x53, 0x1E, 0x54, 0x1E, 0x55, 0x1E, 0x5C, 0x1E, 0x5D, 0x1E, 0x64,
-    0x1E, 0x65, 0x1E, 0x66, 0x1E, 0x67, 0x1E, 0x68, 0x1E, 0x69, 0x1E, 0x78, 0x1E, 0x79, 0x1E, 0x7A,
-    0x1E, 0x7B, 0x1E, 0x80, 0x1E, 0x81, 0x1E, 0x82, 0x1E, 0x83, 0x1E, 0xA4, 0x1E, 0xA5, 0x1E, 0xA6,
-    0x1E, 0xA7, 0x1E, 0xA8, 0x1E, 0xA9, 0x1E, 0xAA, 0x1E, 0xAB, 0x1E, 0xAC, 0x1E, 0xAD, 0x1E, 0xAE,
-    0x1E, 0xAF, 0x1E, 0xB0, 0x1E, 0xB1, 0x1E, 0xB2, 0x1E, 0xB3, 0x1E, 0xB4, 0x1E, 0xB5, 0x1E, 0xB6,
-    0x1E, 0xB7, 0x1E, 0xBE, 0x1E, 0xBF, 0x1E, 0xC0, 0x1E, 0xC1, 0x1E, 0xC2, 0x1E, 0xC3, 0x1E, 0xC4,
-    0x1E, 0xC5, 0x1E, 0xC6, 0x1E, 0xC7, 0x1E, 0xD0, 0x1E, 0xD1, 0x1E, 0xD2, 0x1E, 0xD3, 0x1E, 0xD4,
-    0x1E, 0xD5, 0x1E, 0xD6, 0x1E, 0xD7, 0x1E, 0xD8, 0x1E, 0xD9, 0x1E, 0xDA, 0x1E, 0xDB, 0x1E, 0xDC,
-    0x1E, 0xDD, 0x1E, 0xDE, 0x1E, 0xDF, 0x1E, 0xE0, 0x1E, 0xE1, 0x1E, 0xE2, 0x1E, 0xE3, 0x1E, 0xE8,
-    0x1E, 0xE9, 0x1E, 0xEA, 0x1E, 0xEB, 0x1E, 0xEC, 0x1E, 0xED, 0x1E, 0xEE, 0x1E, 0xEF, 0x1E, 0xF0,
-    0x1E, 0xF1, 0x1E, 0xF2, 0x1E, 0xF3, 0x00, 0x01, 0x02, 0xFC, 0x00, 0x4F, 0x00, 0xA4, 0x00, 0xAA,
-    0x00, 0xB0, 0x00, 0xB8, 0x00, 0xC0, 0x00, 0xC8, 0x00, 0xD0, 0x00, 0xD6, 0x00, 0xDE, 0x00, 0xE4,
-    0x00, 0xEA, 0x00, 0xF2, 0x00, 0xFA, 0x01, 0x02, 0x01, 0x0A, 0x01, 0x12, 0x01, 0x1A, 0x01, 0x20,
-    0x01, 0x26, 0x01, 0x2C, 0x01, 0x34, 0x01, 0x3C, 0x01, 0x44, 0x01, 0x4C, 0x01, 0x54, 0x01, 0x5C,
-    0x01, 0x64, 0x01, 0x6C, 0x01, 0x74, 0x01, 0x7C, 0x01, 0x84, 0x01, 0x8C, 0x01, 0x94, 0x01, 0x9C,
-    0x01, 0xA4, 0x01, 0xAC, 0x01, 0xB4, 0x01, 0xBC, 0x01, 0xC4, 0x01, 0xCC, 0x01, 0xD4, 0x01, 0xDC,
-    0x01, 0xE4, 0x01, 0xEC, 0x01, 0xF4, 0x01, 0xFC, 0x02, 0x04, 0x02, 0x0C, 0x02, 0x14, 0x02, 0x1C,
-    0x02, 0x24, 0x02, 0x2C, 0x02, 0x34, 0x02, 0x3C, 0x02, 0x44, 0x02, 0x4C, 0x02, 0x54, 0x02, 0x5C,
-    0x02, 0x64, 0x02, 0x6C, 0x02, 0x72, 0x02, 0x78, 0x02, 0x7E, 0x02, 0x84, 0x02, 0x8C, 0x02, 0x94,
-    0x02, 0x9C, 0x02, 0xA4, 0x02, 0xAC, 0x02, 0xB4, 0x02, 0xBA, 0x02, 0xC0, 0x02, 0xC6, 0x02, 0xCC,
-    0x02, 0xD4, 0x02, 0xDC, 0x02, 0xE4, 0x02, 0xEC, 0x02, 0xF4, 0x00, 0x02, 0x00, 0xDC, 0x03, 0x41,
-    0x00, 0x02, 0x00, 0xFC, 0x03, 0x41, 0x00, 0x03, 0x00, 0x55, 0x03, 0x08, 0x03, 0x00, 0x00, 0x03,
-    0x00, 0x75, 0x03, 0x08, 0x03, 0x00, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x04, 0x03, 0x28, 0x00, 0x03,
-    0x00, 0x6F, 0x03, 0x04, 0x03, 0x28, 0x00, 0x02, 0x21, 0x2B, 0x03, 0x01, 0x00, 0x03, 0x00, 0x61,
-    0x03, 0x0A, 0x03, 0x01, 0x00, 0x02, 0x01, 0x06, 0x03, 0x27, 0x00, 0x02, 0x01, 0x07, 0x03, 0x27,
-    0x00, 0x03, 0x00, 0x45, 0x03, 0x04, 0x03, 0x00, 0x00, 0x03, 0x00, 0x65, 0x03, 0x04, 0x03, 0x00,
-    0x00, 0x03, 0x00, 0x45, 0x03, 0x04, 0x03, 0x01, 0x00, 0x03, 0x00, 0x65, 0x03, 0x04, 0x03, 0x01,
-    0x00, 0x03, 0x00, 0x45, 0x03, 0x06, 0x03, 0x27, 0x00, 0x03, 0x00, 0x65, 0x03, 0x06, 0x03, 0x27,
-    0x00, 0x02, 0x00, 0xCF, 0x03, 0x41, 0x00, 0x02, 0x00, 0xEF, 0x03, 0x41, 0x00, 0x02, 0x21, 0x2A,
-    0x03, 0x01, 0x00, 0x03, 0x00, 0x4C, 0x03, 0x23, 0x03, 0x04, 0x00, 0x03, 0x00, 0x6C, 0x03, 0x23,
-    0x03, 0x04, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x03, 0x03, 0x01, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x03,
-    0x03, 0x01, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x04, 0x03, 0x00, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x04,
-    0x03, 0x00, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x04, 0x03, 0x01, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x04,
-    0x03, 0x01, 0x00, 0x03, 0x00, 0x52, 0x03, 0x23, 0x03, 0x04, 0x00, 0x03, 0x00, 0x72, 0x03, 0x23,
-    0x03, 0x04, 0x00, 0x03, 0x00, 0x53, 0x03, 0x41, 0x03, 0x07, 0x00, 0x03, 0x00, 0x73, 0x03, 0x41,
-    0x03, 0x07, 0x00, 0x03, 0x00, 0x53, 0x03, 0x07, 0x03, 0x23, 0x00, 0x03, 0x00, 0x73, 0x03, 0x07,
-    0x03, 0x23, 0x00, 0x03, 0x00, 0x55, 0x03, 0x03, 0x03, 0x01, 0x00, 0x03, 0x00, 0x75, 0x03, 0x03,
-    0x03, 0x01, 0x00, 0x03, 0x00, 0x41, 0x03, 0x02, 0x03, 0x01, 0x00, 0x03, 0x00, 0x61, 0x03, 0x02,
-    0x03, 0x01, 0x00, 0x03, 0x00, 0x41, 0x03, 0x02, 0x03, 0x00, 0x00, 0x03, 0x00, 0x61, 0x03, 0x02,
-    0x03, 0x00, 0x00, 0x03, 0x00, 0x41, 0x03, 0x02, 0x03, 0x23, 0x00, 0x03, 0x00, 0x61, 0x03, 0x02,
-    0x03, 0x23, 0x00, 0x03, 0x00, 0x41, 0x03, 0x06, 0x03, 0x01, 0x00, 0x03, 0x00, 0x61, 0x03, 0x06,
-    0x03, 0x01, 0x00, 0x03, 0x00, 0x41, 0x03, 0x06, 0x03, 0x00, 0x00, 0x03, 0x00, 0x61, 0x03, 0x06,
-    0x03, 0x00, 0x00, 0x03, 0x00, 0x41, 0x03, 0x06, 0x03, 0x23, 0x00, 0x03, 0x00, 0x61, 0x03, 0x06,
-    0x03, 0x23, 0x00, 0x03, 0x00, 0x45, 0x03, 0x02, 0x03, 0x01, 0x00, 0x03, 0x00, 0x65, 0x03, 0x02,
-    0x03, 0x01, 0x00, 0x03, 0x00, 0x45, 0x03, 0x02, 0x03, 0x00, 0x00, 0x03, 0x00, 0x65, 0x03, 0x02,
-    0x03, 0x00, 0x00, 0x03, 0x00, 0x45, 0x03, 0x02, 0x03, 0x23, 0x00, 0x03, 0x00, 0x65, 0x03, 0x02,
-    0x03, 0x23, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x02, 0x03, 0x01, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x02,
-    0x03, 0x01, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x02, 0x03, 0x00, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x02,
-    0x03, 0x00, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x02, 0x03, 0x23, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x02,
-    0x03, 0x23, 0x00, 0x02, 0x01, 0xA0, 0x03, 0x41, 0x00, 0x02, 0x01, 0xA1, 0x03, 0x41, 0x00, 0x02,
-    0x01, 0xA0, 0x03, 0x40, 0x00, 0x02, 0x01, 0xA1, 0x03, 0x40, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x09,
-    0x03, 0x1B, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x09, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x03,
-    0x03, 0x1B, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x03, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x1B,
-    0x03, 0x23, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x1B, 0x03, 0x23, 0x00, 0x02, 0x01, 0xAF, 0x03, 0x41,
-    0x00, 0x02, 0x01, 0xB0, 0x03, 0x41, 0x00, 0x02, 0x01, 0xAF, 0x03, 0x40, 0x00, 0x02, 0x01, 0xB0,
-    0x03, 0x40, 0x00, 0x03, 0x00, 0x55, 0x03, 0x09, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x75, 0x03, 0x09,
-    0x03, 0x1B, 0x00, 0x03, 0x00, 0x55, 0x03, 0x03, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x75, 0x03, 0x03,
-    0x03, 0x1B, 0x00, 0x03, 0x00, 0x55, 0x03, 0x1B, 0x03, 0x23, 0x00, 0x03, 0x00, 0x75, 0x03, 0x1B,
-    0x03, 0x23, 0x00, 0x01, 0x00, 0x4F, 0x01, 0xD7, 0x01, 0xD8, 0x01, 0xDB, 0x01, 0xDC, 0x01, 0xEC,
-    0x01, 0xED, 0x01, 0xFA, 0x01, 0xFB, 0x1E, 0x08, 0x1E, 0x09, 0x1E, 0x14, 0x1E, 0x15, 0x1E, 0x16,
-    0x1E, 0x17, 0x1E, 0x1C, 0x1E, 0x1D, 0x1E, 0x2E, 0x1E, 0x2F, 0x1E, 0x30, 0x1E, 0x38, 0x1E, 0x39,
-    0x1E, 0x4C, 0x1E, 0x4D, 0x1E, 0x50, 0x1E, 0x51, 0x1E, 0x52, 0x1E, 0x53, 0x1E, 0x5C, 0x1E, 0x5D,
-    0x1E, 0x64, 0x1E, 0x65, 0x1E, 0x68, 0x1E, 0x69, 0x1E, 0x78, 0x1E, 0x79, 0x1E, 0xA4, 0x1E, 0xA5,
-    0x1E, 0xA6, 0x1E, 0xA7, 0x1E, 0xAC, 0x1E, 0xAD, 0x1E, 0xAE, 0x1E, 0xAF, 0x1E, 0xB0, 0x1E, 0xB1,
-    0x1E, 0xB6, 0x1E, 0xB7, 0x1E, 0xBE, 0x1E, 0xBF, 0x1E, 0xC0, 0x1E, 0xC1, 0x1E, 0xC6, 0x1E, 0xC7,
-    0x1E, 0xD0, 0x1E, 0xD1, 0x1E, 0xD2, 0x1E, 0xD3, 0x1E, 0xD8, 0x1E, 0xD9, 0x1E, 0xDA, 0x1E, 0xDB,
-    0x1E, 0xDC, 0x1E, 0xDD, 0x1E, 0xDE, 0x1E, 0xDF, 0x1E, 0xE0, 0x1E, 0xE1, 0x1E, 0xE2, 0x1E, 0xE3,
-    0x1E, 0xE8, 0x1E, 0xE9, 0x1E, 0xEA, 0x1E, 0xEB, 0x1E, 0xEC, 0x1E, 0xED, 0x1E, 0xEE, 0x1E, 0xEF,
-    0x1E, 0xF0, 0x1E, 0xF1, 0x00, 0x01, 0x02, 0xDC, 0x00, 0x49, 0x00, 0x98, 0x00, 0xA0, 0x00, 0xA8,
-    0x00, 0xB0, 0x00, 0xB8, 0x00, 0xC0, 0x00, 0xC8, 0x00, 0xCE, 0x00, 0xD6, 0x00, 0xDE, 0x00, 0xE6,
-    0x00, 0xEE, 0x00, 0xF6, 0x00, 0xFE, 0x01, 0x06, 0x01, 0x0E, 0x01, 0x16, 0x01, 0x1E, 0x01, 0x26,
-    0x01, 0x2C, 0x01, 0x34, 0x01, 0x3C, 0x01, 0x44, 0x01, 0x4C, 0x01, 0x54, 0x01, 0x5C, 0x01, 0x64,
-    0x01, 0x6C, 0x01, 0x74, 0x01, 0x7C, 0x01, 0x84, 0x01, 0x8C, 0x01, 0x94, 0x01, 0x9C, 0x01, 0xA4,
-    0x01, 0xAC, 0x01, 0xB4, 0x01, 0xBC, 0x01, 0xC4, 0x01, 0xCC, 0x01, 0xD4, 0x01, 0xDC, 0x01, 0xE4,
-    0x01, 0xEC, 0x01, 0xF4, 0x01, 0xFC, 0x02, 0x04, 0x02, 0x0C, 0x02, 0x14, 0x02, 0x1C, 0x02, 0x24,
-    0x02, 0x2C, 0x02, 0x34, 0x02, 0x3C, 0x02, 0x44, 0x02, 0x4C, 0x02, 0x54, 0x02, 0x5C, 0x02, 0x64,
-    0x02, 0x6C, 0x02, 0x74, 0x02, 0x7C, 0x02, 0x84, 0x02, 0x8C, 0x02, 0x94, 0x02, 0x9C, 0x02, 0xA4,
-    0x02, 0xAC, 0x02, 0xB4, 0x02, 0xBC, 0x02, 0xC4, 0x02, 0xCC, 0x02, 0xD4, 0x00, 0x03, 0x00, 0x55,
-    0x03, 0x08, 0x03, 0x01, 0x00, 0x03, 0x00, 0x75, 0x03, 0x08, 0x03, 0x01, 0x00, 0x03, 0x00, 0x55,
-    0x03, 0x08, 0x03, 0x40, 0x00, 0x03, 0x00, 0x75, 0x03, 0x08, 0x03, 0x40, 0x00, 0x03, 0x00, 0x4F,
-    0x03, 0x28, 0x03, 0x04, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x28, 0x03, 0x04, 0x00, 0x02, 0x21, 0x2B,
-    0x03, 0x41, 0x00, 0x03, 0x00, 0x61, 0x03, 0x0A, 0x03, 0x41, 0x00, 0x03, 0x00, 0x43, 0x03, 0x01,
-    0x03, 0x27, 0x00, 0x03, 0x00, 0x63, 0x03, 0x01, 0x03, 0x27, 0x00, 0x03, 0x00, 0x45, 0x03, 0x04,
-    0x03, 0x40, 0x00, 0x03, 0x00, 0x65, 0x03, 0x04, 0x03, 0x40, 0x00, 0x03, 0x00, 0x45, 0x03, 0x04,
-    0x03, 0x41, 0x00, 0x03, 0x00, 0x65, 0x03, 0x04, 0x03, 0x41, 0x00, 0x03, 0x00, 0x45, 0x03, 0x27,
-    0x03, 0x06, 0x00, 0x03, 0x00, 0x65, 0x03, 0x27, 0x03, 0x06, 0x00, 0x03, 0x00, 0x49, 0x03, 0x08,
-    0x03, 0x01, 0x00, 0x03, 0x00, 0x69, 0x03, 0x08, 0x03, 0x01, 0x00, 0x02, 0x21, 0x2A, 0x03, 0x41,
-    0x00, 0x03, 0x00, 0x4F, 0x03, 0x03, 0x03, 0x41, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x03, 0x03, 0x41,
-    0x00, 0x03, 0x00, 0x4F, 0x03, 0x04, 0x03, 0x40, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x04, 0x03, 0x40,
-    0x00, 0x03, 0x00, 0x4F, 0x03, 0x04, 0x03, 0x41, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x04, 0x03, 0x41,
-    0x00, 0x03, 0x00, 0x53, 0x03, 0x23, 0x03, 0x07, 0x00, 0x03, 0x00, 0x73, 0x03, 0x23, 0x03, 0x07,
-    0x00, 0x03, 0x00, 0x55, 0x03, 0x03, 0x03, 0x41, 0x00, 0x03, 0x00, 0x75, 0x03, 0x03, 0x03, 0x41,
-    0x00, 0x03, 0x00, 0x41, 0x03, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x61, 0x03, 0x02, 0x03, 0x41,
-    0x00, 0x03, 0x00, 0x41, 0x03, 0x02, 0x03, 0x40, 0x00, 0x03, 0x00, 0x61, 0x03, 0x02, 0x03, 0x40,
-    0x00, 0x03, 0x00, 0x41, 0x03, 0x23, 0x03, 0x02, 0x00, 0x03, 0x00, 0x61, 0x03, 0x23, 0x03, 0x02,
-    0x00, 0x03, 0x00, 0x41, 0x03, 0x06, 0x03, 0x41, 0x00, 0x03, 0x00, 0x61, 0x03, 0x06, 0x03, 0x41,
-    0x00, 0x03, 0x00, 0x41, 0x03, 0x06, 0x03, 0x40, 0x00, 0x03, 0x00, 0x61, 0x03, 0x06, 0x03, 0x40,
-    0x00, 0x03, 0x00, 0x41, 0x03, 0x23, 0x03, 0x06, 0x00, 0x03, 0x00, 0x61, 0x03, 0x23, 0x03, 0x06,
-    0x00, 0x03, 0x00, 0x45, 0x03, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x65, 0x03, 0x02, 0x03, 0x41,
-    0x00, 0x03, 0x00, 0x45, 0x03, 0x02, 0x03, 0x40, 0x00, 0x03, 0x00, 0x65, 0x03, 0x02, 0x03, 0x40,
-    0x00, 0x03, 0x00, 0x45, 0x03, 0x23, 0x03, 0x02, 0x00, 0x03, 0x00, 0x65, 0x03, 0x23, 0x03, 0x02,
-    0x00, 0x03, 0x00, 0x4F, 0x03, 0x02, 0x03, 0x41, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x02, 0x03, 0x41,
-    0x00, 0x03, 0x00, 0x4F, 0x03, 0x02, 0x03, 0x40, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x02, 0x03, 0x40,
-    0x00, 0x03, 0x00, 0x4F, 0x03, 0x23, 0x03, 0x02, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x23, 0x03, 0x02,
-    0x00, 0x03, 0x00, 0x4F, 0x03, 0x01, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x01, 0x03, 0x1B,
-    0x00, 0x03, 0x00, 0x4F, 0x03, 0x00, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x00, 0x03, 0x1B,
-    0x00, 0x03, 0x00, 0x4F, 0x03, 0x1B, 0x03, 0x09, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x1B, 0x03, 0x09,
-    0x00, 0x03, 0x00, 0x4F, 0x03, 0x1B, 0x03, 0x03, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x1B, 0x03, 0x03,
-    0x00, 0x03, 0x00, 0x4F, 0x03, 0x23, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x23, 0x03, 0x1B,
-    0x00, 0x03, 0x00, 0x55, 0x03, 0x01, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x75, 0x03, 0x01, 0x03, 0x1B,
-    0x00, 0x03, 0x00, 0x55, 0x03, 0x00, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x75, 0x03, 0x00, 0x03, 0x1B,
-    0x00, 0x03, 0x00, 0x55, 0x03, 0x1B, 0x03, 0x09, 0x00, 0x03, 0x00, 0x75, 0x03, 0x1B, 0x03, 0x09,
-    0x00, 0x03, 0x00, 0x55, 0x03, 0x1B, 0x03, 0x03, 0x00, 0x03, 0x00, 0x75, 0x03, 0x1B, 0x03, 0x03,
-    0x00, 0x03, 0x00, 0x55, 0x03, 0x23, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x75, 0x03, 0x23, 0x03, 0x1B,
-    0x00, 0x01, 0x00, 0x49, 0x01, 0xD7, 0x01, 0xD8, 0x01, 0xDB, 0x01, 0xDC, 0x01, 0xEC, 0x01, 0xED,
-    0x01, 0xFA, 0x01, 0xFB, 0x1E, 0x08, 0x1E, 0x09, 0x1E, 0x14, 0x1E, 0x15, 0x1E, 0x16, 0x1E, 0x17,
-    0x1E, 0x1C, 0x1E, 0x1D, 0x1E, 0x2E, 0x1E, 0x2F, 0x1E, 0x30, 0x1E, 0x4C, 0x1E, 0x4D, 0x1E, 0x50,
-    0x1E, 0x51, 0x1E, 0x52, 0x1E, 0x53, 0x1E, 0x68, 0x1E, 0x69, 0x1E, 0x78, 0x1E, 0x79, 0x1E, 0xA4,
-    0x1E, 0xA5, 0x1E, 0xA6, 0x1E, 0xA7, 0x1E, 0xAC, 0x1E, 0xAD, 0x1E, 0xAE, 0x1E, 0xAF, 0x1E, 0xB0,
-    0x1E, 0xB1, 0x1E, 0xB6, 0x1E, 0xB7, 0x1E, 0xBE, 0x1E, 0xBF, 0x1E, 0xC0, 0x1E, 0xC1, 0x1E, 0xC6,
-    0x1E, 0xC7, 0x1E, 0xD0, 0x1E, 0xD1, 0x1E, 0xD2, 0x1E, 0xD3, 0x1E, 0xD8, 0x1E, 0xD9, 0x1E, 0xDA,
-    0x1E, 0xDB, 0x1E, 0xDC, 0x1E, 0xDD, 0x1E, 0xDE, 0x1E, 0xDF, 0x1E, 0xE0, 0x1E, 0xE1, 0x1E, 0xE2,
-    0x1E, 0xE3, 0x1E, 0xE8, 0x1E, 0xE9, 0x1E, 0xEA, 0x1E, 0xEB, 0x1E, 0xEC, 0x1E, 0xED, 0x1E, 0xEE,
-    0x1E, 0xEF, 0x1E, 0xF0, 0x1E, 0xF1, 0x00, 0x01, 0x00, 0x9C, 0x00, 0x0F, 0x00, 0x24, 0x00, 0x2C,
-    0x00, 0x34, 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5C, 0x00, 0x64, 0x00, 0x6C,
-    0x00, 0x74, 0x00, 0x7C, 0x00, 0x84, 0x00, 0x8C, 0x00, 0x94, 0x00, 0x03, 0x00, 0x55, 0x03, 0x08,
-    0x03, 0x41, 0x00, 0x03, 0x00, 0x75, 0x03, 0x08, 0x03, 0x41, 0x00, 0x03, 0x00, 0x41, 0x03, 0x0A,
-    0x03, 0x01, 0x00, 0x03, 0x00, 0x43, 0x03, 0x27, 0x03, 0x01, 0x00, 0x03, 0x00, 0x63, 0x03, 0x27,
-    0x03, 0x01, 0x00, 0x03, 0x00, 0x49, 0x03, 0x08, 0x03, 0x41, 0x00, 0x03, 0x00, 0x69, 0x03, 0x08,
-    0x03, 0x41, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x1B, 0x03, 0x01, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x1B,
-    0x03, 0x01, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x1B, 0x03, 0x00, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x1B,
-    0x03, 0x00, 0x00, 0x03, 0x00, 0x55, 0x03, 0x1B, 0x03, 0x01, 0x00, 0x03, 0x00, 0x75, 0x03, 0x1B,
-    0x03, 0x01, 0x00, 0x03, 0x00, 0x55, 0x03, 0x1B, 0x03, 0x00, 0x00, 0x03, 0x00, 0x75, 0x03, 0x1B,
-    0x03, 0x00, 0x00, 0x01, 0x00, 0x0F, 0x01, 0xD7, 0x01, 0xD8, 0x01, 0xFA, 0x1E, 0x08, 0x1E, 0x09,
-    0x1E, 0x2E, 0x1E, 0x2F, 0x1E, 0xDA, 0x1E, 0xDB, 0x1E, 0xDC, 0x1E, 0xDD, 0x1E, 0xE8, 0x1E, 0xE9,
-    0x1E, 0xEA, 0x1E, 0xEB, 0x00, 0x01, 0x00, 0x74, 0x00, 0x0B, 0x00, 0x1C, 0x00, 0x24, 0x00, 0x2C,
-    0x00, 0x34, 0x00, 0x3C, 0x00, 0x44, 0x00, 0x4C, 0x00, 0x54, 0x00, 0x5C, 0x00, 0x64, 0x00, 0x6C,
-    0x00, 0x03, 0x00, 0x41, 0x03, 0x0A, 0x03, 0x41, 0x00, 0x03, 0x00, 0x43, 0x03, 0x27, 0x03, 0x41,
-    0x00, 0x03, 0x00, 0x63, 0x03, 0x27, 0x03, 0x41, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x1B, 0x03, 0x41,
-    0x00, 0x03, 0x00, 0x6F, 0x03, 0x1B, 0x03, 0x41, 0x00, 0x03, 0x00, 0x4F, 0x03, 0x1B, 0x03, 0x40,
-    0x00, 0x03, 0x00, 0x6F, 0x03, 0x1B, 0x03, 0x40, 0x00, 0x03, 0x00, 0x55, 0x03, 0x1B, 0x03, 0x41,
-    0x00, 0x03, 0x00, 0x75, 0x03, 0x1B, 0x03, 0x41, 0x00, 0x03, 0x00, 0x55, 0x03, 0x1B, 0x03, 0x40,
-    0x00, 0x03, 0x00, 0x75, 0x03, 0x1B, 0x03, 0x40, 0x00, 0x01, 0x00, 0x0B, 0x01, 0xFA, 0x1E, 0x08,
-    0x1E, 0x09, 0x1E, 0xDA, 0x1E, 0xDB, 0x1E, 0xDC, 0x1E, 0xDD, 0x1E, 0xE8, 0x1E, 0xE9, 0x1E, 0xEA,
-    0x1E, 0xEB, 0x00, 0x01, 0x00, 0x6A, 0x00, 0x0A, 0x00, 0x1A, 0x00, 0x22, 0x00, 0x2A, 0x00, 0x32,
-    0x00, 0x3A, 0x00, 0x42, 0x00, 0x4A, 0x00, 0x52, 0x00, 0x5A, 0x00, 0x62, 0x00, 0x03, 0x00, 0x43,
-    0x03, 0x41, 0x03, 0x27, 0x00, 0x03, 0x00, 0x63, 0x03, 0x41, 0x03, 0x27, 0x00, 0x03, 0x00, 0x4F,
-    0x03, 0x41, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x41, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x4F,
-    0x03, 0x40, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x6F, 0x03, 0x40, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x55,
-    0x03, 0x41, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x75, 0x03, 0x41, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x55,
-    0x03, 0x40, 0x03, 0x1B, 0x00, 0x03, 0x00, 0x75, 0x03, 0x40, 0x03, 0x1B, 0x00, 0x01, 0x00, 0x0A,
-    0x1E, 0x08, 0x1E, 0x09, 0x1E, 0xDA, 0x1E, 0xDB, 0x1E, 0xDC, 0x1E, 0xDD, 0x1E, 0xE8, 0x1E, 0xE9,
-    0x1E, 0xEA, 0x1E, 0xEB, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x26,
-    0x00, 0x02, 0x00, 0x0A, 0x00, 0x1C, 0x00, 0x02, 0x00, 0x06, 0x00, 0x0C, 0x0D, 0x4A, 0x00, 0x02,
-    0x0D, 0x3E, 0x0D, 0x4C, 0x00, 0x02, 0x0D, 0x57, 0x00, 0x01, 0x00, 0x04, 0x0D, 0x4B, 0x00, 0x02,
-    0x0D, 0x3E, 0x00, 0x01, 0x00, 0x02, 0x0D, 0x46, 0x0D, 0x47, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01,
-    0x00, 0x08, 0x00, 0x01, 0x00, 0x1E, 0x00, 0x03, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x02,
-    0x0D, 0x46, 0x0D, 0x3E, 0x00, 0x02, 0x0D, 0x47, 0x0D, 0x3E, 0x00, 0x02, 0x0D, 0x46, 0x0D, 0x57,
-    0x00, 0x01, 0x00, 0x03, 0x0D, 0x4A, 0x0D, 0x4B, 0x0D, 0x4C, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01,
-    0x00, 0x08, 0x00, 0x01, 0x00, 0x12, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x04, 0x10, 0x26,
-    0x00, 0x02, 0x10, 0x2E, 0x00, 0x01, 0x00, 0x01, 0x10, 0x25, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01,
-    0x00, 0x08, 0x00, 0x01, 0x00, 0x0E, 0x00, 0x01, 0x00, 0x08, 0x00, 0x02, 0x10, 0x25, 0x10, 0x2E,
-    0x00, 0x01, 0x00, 0x01, 0x10, 0x26, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
-    0x00, 0x22, 0x00, 0x01, 0x00, 0x08, 0x00, 0x03, 0x00, 0x08, 0x00, 0x0E, 0x00, 0x14, 0x0B, 0x4B,
-    0x00, 0x02, 0x0B, 0x3E, 0x0B, 0x48, 0x00, 0x02, 0x0B, 0x56, 0x0B, 0x4C, 0x00, 0x02, 0x0B, 0x57,
-    0x00, 0x01, 0x00, 0x01, 0x0B, 0x47, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
-    0x00, 0x1E, 0x00, 0x03, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x02, 0x0B, 0x47, 0x0B, 0x56,
-    0x00, 0x02, 0x0B, 0x47, 0x0B, 0x3E, 0x00, 0x02, 0x0B, 0x47, 0x0B, 0x57, 0x00, 0x01, 0x00, 0x03,
-    0x0B, 0x48, 0x0B, 0x4B, 0x0B, 0x4C, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
-    0x00, 0x38, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x2E, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x10, 0x00, 0x18,
-    0x00, 0x1E, 0x0D, 0xDA, 0x00, 0x02, 0x0D, 0xCA, 0x0D, 0xDD, 0x00, 0x03, 0x0D, 0xCF, 0x0D, 0xCA,
-    0x0D, 0xDC, 0x00, 0x02, 0x0D, 0xCF, 0x0D, 0xDE, 0x00, 0x02, 0x0D, 0xDF, 0x00, 0x01, 0x00, 0x04,
-    0x0D, 0xDD, 0x00, 0x02, 0x0D, 0xCA, 0x00, 0x01, 0x00, 0x02, 0x0D, 0xD9, 0x0D, 0xDC, 0x00, 0x02,
-    0x00, 0x00, 0x00, 0x02, 0x00, 0x0A, 0x00, 0x3C, 0x00, 0x01, 0x00, 0x26, 0x00, 0x04, 0x00, 0x0E,
-    0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x02, 0x0D, 0xD9, 0x0D, 0xCA, 0x00, 0x02, 0x0D, 0xD9,
-    0x0D, 0xCF, 0x00, 0x02, 0x0D, 0xDC, 0x0D, 0xCA, 0x00, 0x02, 0x0D, 0xD9, 0x0D, 0xDF, 0x00, 0x01,
-    0x00, 0x04, 0x0D, 0xDA, 0x0D, 0xDC, 0x0D, 0xDD, 0x0D, 0xDE, 0x00, 0x01, 0x00, 0x10, 0x00, 0x01,
-    0x00, 0x08, 0x00, 0x03, 0x0D, 0xD9, 0x0D, 0xCF, 0x0D, 0xCA, 0x00, 0x01, 0x00, 0x01, 0x0D, 0xDD,
-    0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x32, 0x00, 0x03, 0x00, 0x0C,
-    0x00, 0x16, 0x00, 0x28, 0x00, 0x01, 0x00, 0x04, 0x0B, 0x94, 0x00, 0x02, 0x0B, 0xD7, 0x00, 0x02,
-    0x00, 0x06, 0x00, 0x0C, 0x0B, 0xCA, 0x00, 0x02, 0x0B, 0xBE, 0x0B, 0xCC, 0x00, 0x02, 0x0B, 0xD7,
-    0x00, 0x01, 0x00, 0x04, 0x0B, 0xCB, 0x00, 0x02, 0x0B, 0xBE, 0x00, 0x01, 0x00, 0x03, 0x0B, 0x92,
-    0x0B, 0xC6, 0x0B, 0xC7, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x26,
-    0x00, 0x04, 0x00, 0x0E, 0x00, 0x14, 0x00, 0x1A, 0x00, 0x20, 0x00, 0x02, 0x0B, 0x92, 0x0B, 0xD7,
-    0x00, 0x02, 0x0B, 0xC6, 0x0B, 0xBE, 0x00, 0x02, 0x0B, 0xC7, 0x0B, 0xBE, 0x00, 0x02, 0x0B, 0xC6,
-    0x0B, 0xD7, 0x00, 0x01, 0x00, 0x04, 0x0B, 0x94, 0x0B, 0xCA, 0x0B, 0xCB, 0x0B, 0xCC, 0x00, 0x04,
-    0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x12, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
-    0x00, 0x04, 0x0C, 0x48, 0x00, 0x02, 0x0C, 0x56, 0x00, 0x01, 0x00, 0x01, 0x0C, 0x46, 0x00, 0x02,
-    0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x0E, 0x00, 0x01, 0x00, 0x08, 0x00, 0x02,
-    0x0C, 0x46, 0x0C, 0x56, 0x00, 0x01, 0x00, 0x01, 0x0C, 0x48, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01,
-    0x00, 0x08, 0x00, 0x01, 0x00, 0x8A, 0x00, 0x0B, 0x00, 0x1C, 0x00, 0x26, 0x00, 0x30, 0x00, 0x3A,
-    0x00, 0x44, 0x00, 0x4E, 0x00, 0x58, 0x00, 0x62, 0x00, 0x6C, 0x00, 0x76, 0x00, 0x80, 0x00, 0x01,
-    0x00, 0x04, 0x1B, 0x06, 0x00, 0x02, 0x1B, 0x35, 0x00, 0x01, 0x00, 0x04, 0x1B, 0x08, 0x00, 0x02,
-    0x1B, 0x35, 0x00, 0x01, 0x00, 0x04, 0x1B, 0x0A, 0x00, 0x02, 0x1B, 0x35, 0x00, 0x01, 0x00, 0x04,
-    0x1B, 0x0C, 0x00, 0x02, 0x1B, 0x35, 0x00, 0x01, 0x00, 0x04, 0x1B, 0x0E, 0x00, 0x02, 0x1B, 0x35,
-    0x00, 0x01, 0x00, 0x04, 0x1B, 0x12, 0x00, 0x02, 0x1B, 0x35, 0x00, 0x01, 0x00, 0x04, 0x1B, 0x3B,
-    0x00, 0x02, 0x1B, 0x35, 0x00, 0x01, 0x00, 0x04, 0x1B, 0x3D, 0x00, 0x02, 0x1B, 0x35, 0x00, 0x01,
-    0x00, 0x04, 0x1B, 0x40, 0x00, 0x02, 0x1B, 0x35, 0x00, 0x01, 0x00, 0x04, 0x1B, 0x41, 0x00, 0x02,
-    0x1B, 0x35, 0x00, 0x01, 0x00, 0x04, 0x1B, 0x43, 0x00, 0x02, 0x1B, 0x35, 0x00, 0x01, 0x00, 0x0B,
-    0x1B, 0x05, 0x1B, 0x07, 0x1B, 0x09, 0x1B, 0x0B, 0x1B, 0x0D, 0x1B, 0x11, 0x1B, 0x3A, 0x1B, 0x3C,
-    0x1B, 0x3E, 0x1B, 0x3F, 0x1B, 0x42, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01,
-    0x00, 0x5E, 0x00, 0x0B, 0x00, 0x1C, 0x00, 0x22, 0x00, 0x28, 0x00, 0x2E, 0x00, 0x34, 0x00, 0x3A,
-    0x00, 0x40, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x52, 0x00, 0x58, 0x00, 0x02, 0x1B, 0x05, 0x1B, 0x35,
-    0x00, 0x02, 0x1B, 0x07, 0x1B, 0x35, 0x00, 0x02, 0x1B, 0x09, 0x1B, 0x35, 0x00, 0x02, 0x1B, 0x0B,
-    0x1B, 0x35, 0x00, 0x02, 0x1B, 0x0D, 0x1B, 0x35, 0x00, 0x02, 0x1B, 0x11, 0x1B, 0x35, 0x00, 0x02,
-    0x1B, 0x3A, 0x1B, 0x35, 0x00, 0x02, 0x1B, 0x3C, 0x1B, 0x35, 0x00, 0x02, 0x1B, 0x3E, 0x1B, 0x35,
-    0x00, 0x02, 0x1B, 0x3F, 0x1B, 0x35, 0x00, 0x02, 0x1B, 0x42, 0x1B, 0x35, 0x00, 0x01, 0x00, 0x0B,
-    0x1B, 0x06, 0x1B, 0x08, 0x1B, 0x0A, 0x1B, 0x0C, 0x1B, 0x0E, 0x1B, 0x12, 0x1B, 0x3B, 0x1B, 0x3D,
-    0x1B, 0x40, 0x1B, 0x41, 0x1B, 0x43
-};
-
-const le_uint8 CanonShaping::glyphDefinitionTable[] = {
-    0x00, 0x01, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x28,
-    0x06, 0x0B, 0x06, 0x0F, 0x00, 0x01, 0x06, 0x10, 0x06, 0x15, 0x00, 0x03, 0x06, 0x1B, 0x06, 0x1B,
-    0x00, 0x01, 0x06, 0x1E, 0x06, 0x1F, 0x00, 0x01, 0x06, 0x21, 0x06, 0x21, 0x00, 0x01, 0x06, 0x22,
-    0x06, 0x26, 0x00, 0x02, 0x06, 0x27, 0x06, 0x3A, 0x00, 0x01, 0x06, 0x40, 0x06, 0x4A, 0x00, 0x01,
-    0x06, 0x4B, 0x06, 0x5E, 0x00, 0x03, 0x06, 0x60, 0x06, 0x6F, 0x00, 0x01, 0x06, 0x70, 0x06, 0x70,
-    0x00, 0x03, 0x06, 0x71, 0x06, 0xBF, 0x00, 0x01, 0x06, 0xC0, 0x06, 0xC0, 0x00, 0x02, 0x06, 0xC1,
-    0x06, 0xC1, 0x00, 0x01, 0x06, 0xC2, 0x06, 0xC2, 0x00, 0x02, 0x06, 0xC3, 0x06, 0xD2, 0x00, 0x01,
-    0x06, 0xD3, 0x06, 0xD3, 0x00, 0x02, 0x06, 0xD4, 0x06, 0xD5, 0x00, 0x01, 0x06, 0xD6, 0x06, 0xDC,
-    0x00, 0x03, 0x06, 0xDE, 0x06, 0xE4, 0x00, 0x03, 0x06, 0xE5, 0x06, 0xE6, 0x00, 0x01, 0x06, 0xE7,
-    0x06, 0xE8, 0x00, 0x03, 0x06, 0xE9, 0x06, 0xE9, 0x00, 0x01, 0x06, 0xEA, 0x06, 0xED, 0x00, 0x03,
-    0x06, 0xEE, 0x06, 0xFF, 0x00, 0x01, 0x07, 0x50, 0x07, 0x6D, 0x00, 0x01, 0xFB, 0x50, 0xFB, 0xB1,
-    0x00, 0x01, 0xFB, 0xD3, 0xFB, 0xDC, 0x00, 0x01, 0xFB, 0xDD, 0xFB, 0xDD, 0x00, 0x02, 0xFB, 0xDE,
-    0xFB, 0xE9, 0x00, 0x01, 0xFB, 0xEA, 0xFB, 0xFB, 0x00, 0x02, 0xFB, 0xFC, 0xFB, 0xFF, 0x00, 0x01,
-    0xFC, 0x00, 0xFC, 0x5D, 0x00, 0x02, 0xFC, 0x64, 0xFC, 0xF1, 0x00, 0x02, 0xFC, 0xF5, 0xFD, 0x3D,
-    0x00, 0x02, 0xFD, 0x50, 0xFD, 0x8F, 0x00, 0x02, 0xFD, 0x92, 0xFD, 0xC7, 0x00, 0x02, 0xFD, 0xF0,
-    0xFD, 0xFC, 0x00, 0x02, 0xFE, 0x80, 0xFE, 0xF4, 0x00, 0x01, 0xFE, 0xF5, 0xFE, 0xFC, 0x00, 0x02,
-    0x00, 0x02, 0x00, 0xCE, 0x03, 0x00, 0x03, 0x14, 0x00, 0xE6, 0x03, 0x15, 0x03, 0x15, 0x00, 0xE8,
-    0x03, 0x16, 0x03, 0x19, 0x00, 0xDC, 0x03, 0x1A, 0x03, 0x1A, 0x00, 0xE8, 0x03, 0x1B, 0x03, 0x1B,
-    0x00, 0xD8, 0x03, 0x1C, 0x03, 0x20, 0x00, 0xDC, 0x03, 0x21, 0x03, 0x22, 0x00, 0xCA, 0x03, 0x23,
-    0x03, 0x26, 0x00, 0xDC, 0x03, 0x27, 0x03, 0x28, 0x00, 0xCA, 0x03, 0x29, 0x03, 0x33, 0x00, 0xDC,
-    0x03, 0x34, 0x03, 0x38, 0x00, 0x01, 0x03, 0x39, 0x03, 0x3C, 0x00, 0xDC, 0x03, 0x3D, 0x03, 0x44,
-    0x00, 0xE6, 0x03, 0x45, 0x03, 0x45, 0x00, 0xF0, 0x03, 0x46, 0x03, 0x46, 0x00, 0xE6, 0x03, 0x47,
-    0x03, 0x49, 0x00, 0xDC, 0x03, 0x4A, 0x03, 0x4C, 0x00, 0xE6, 0x03, 0x4D, 0x03, 0x4E, 0x00, 0xDC,
-    0x03, 0x50, 0x03, 0x52, 0x00, 0xE6, 0x03, 0x53, 0x03, 0x56, 0x00, 0xDC, 0x03, 0x57, 0x03, 0x57,
-    0x00, 0xE6, 0x03, 0x58, 0x03, 0x58, 0x00, 0xE8, 0x03, 0x59, 0x03, 0x5A, 0x00, 0xDC, 0x03, 0x5B,
-    0x03, 0x5B, 0x00, 0xE6, 0x03, 0x5C, 0x03, 0x5C, 0x00, 0xE9, 0x03, 0x5D, 0x03, 0x5E, 0x00, 0xEA,
-    0x03, 0x5F, 0x03, 0x5F, 0x00, 0xE9, 0x03, 0x60, 0x03, 0x61, 0x00, 0xEA, 0x03, 0x62, 0x03, 0x62,
-    0x00, 0xE9, 0x03, 0x63, 0x03, 0x6F, 0x00, 0xE6, 0x04, 0x83, 0x04, 0x86, 0x00, 0xE6, 0x05, 0x91,
-    0x05, 0x91, 0x00, 0xDC, 0x05, 0x92, 0x05, 0x95, 0x00, 0xE6, 0x05, 0x96, 0x05, 0x96, 0x00, 0xDC,
-    0x05, 0x97, 0x05, 0x98, 0x00, 0xE6, 0x05, 0x99, 0x05, 0x99, 0x00, 0xE8, 0x05, 0x9A, 0x05, 0x9A,
-    0x00, 0xDE, 0x05, 0x9B, 0x05, 0x9B, 0x00, 0xDC, 0x05, 0x9C, 0x05, 0xA1, 0x00, 0xE6, 0x05, 0xA2,
-    0x05, 0xA7, 0x00, 0xDC, 0x05, 0xA8, 0x05, 0xA8, 0x00, 0xE6, 0x05, 0xA9, 0x05, 0xA9, 0x00, 0xE8,
-    0x05, 0xAA, 0x05, 0xAA, 0x00, 0xDC, 0x05, 0xAB, 0x05, 0xAC, 0x00, 0xE6, 0x05, 0xAD, 0x05, 0xAD,
-    0x00, 0xDE, 0x05, 0xAE, 0x05, 0xAE, 0x00, 0xE8, 0x05, 0xAF, 0x05, 0xAF, 0x00, 0xE6, 0x05, 0xB0,
-    0x05, 0xB8, 0x00, 0xDC, 0x05, 0xB9, 0x05, 0xB9, 0x00, 0x1B, 0x05, 0xBA, 0x05, 0xBA, 0x00, 0x13,
-    0x05, 0xBB, 0x05, 0xBB, 0x00, 0xDC, 0x05, 0xBC, 0x05, 0xBC, 0x00, 0x15, 0x05, 0xBD, 0x05, 0xBD,
-    0x00, 0xDC, 0x05, 0xBF, 0x05, 0xBF, 0x00, 0x17, 0x05, 0xC1, 0x05, 0xC1, 0x00, 0x0A, 0x05, 0xC2,
-    0x05, 0xC2, 0x00, 0x0B, 0x05, 0xC4, 0x05, 0xC4, 0x00, 0xE6, 0x05, 0xC5, 0x05, 0xC5, 0x00, 0xDC,
-    0x05, 0xC7, 0x05, 0xC7, 0x00, 0x12, 0x06, 0x10, 0x06, 0x15, 0x00, 0xE6, 0x06, 0x4B, 0x06, 0x4C,
-    0x00, 0x1F, 0x06, 0x4D, 0x06, 0x4D, 0x00, 0x1E, 0x06, 0x4E, 0x06, 0x4F, 0x00, 0x1F, 0x06, 0x50,
-    0x06, 0x50, 0x00, 0x1E, 0x06, 0x51, 0x06, 0x51, 0x00, 0x1C, 0x06, 0x52, 0x06, 0x52, 0x00, 0x1F,
-    0x06, 0x53, 0x06, 0x53, 0x00, 0x20, 0x06, 0x54, 0x06, 0x55, 0x00, 0x1B, 0x06, 0x56, 0x06, 0x56,
-    0x00, 0x1D, 0x06, 0x57, 0x06, 0x58, 0x00, 0x1F, 0x06, 0x59, 0x06, 0x5B, 0x00, 0xE6, 0x06, 0x5C,
-    0x06, 0x5C, 0x00, 0xDC, 0x06, 0x5D, 0x06, 0x5E, 0x00, 0xE6, 0x06, 0x70, 0x06, 0x70, 0x00, 0x1D,
-    0x06, 0xD6, 0x06, 0xDC, 0x00, 0xE6, 0x06, 0xDF, 0x06, 0xE0, 0x00, 0xE6, 0x06, 0xE1, 0x06, 0xE1,
-    0x00, 0x1F, 0x06, 0xE2, 0x06, 0xE2, 0x00, 0xE6, 0x06, 0xE3, 0x06, 0xE3, 0x00, 0xDC, 0x06, 0xE4,
-    0x06, 0xE4, 0x00, 0xE6, 0x06, 0xE7, 0x06, 0xE8, 0x00, 0xE6, 0x06, 0xEA, 0x06, 0xEA, 0x00, 0xDC,
-    0x06, 0xEB, 0x06, 0xEC, 0x00, 0xE6, 0x06, 0xED, 0x06, 0xED, 0x00, 0xDC, 0x07, 0x11, 0x07, 0x11,
-    0x00, 0x24, 0x07, 0x30, 0x07, 0x30, 0x00, 0xE6, 0x07, 0x31, 0x07, 0x31, 0x00, 0xDC, 0x07, 0x32,
-    0x07, 0x33, 0x00, 0xE6, 0x07, 0x34, 0x07, 0x34, 0x00, 0xDC, 0x07, 0x35, 0x07, 0x36, 0x00, 0xE6,
-    0x07, 0x37, 0x07, 0x39, 0x00, 0xDC, 0x07, 0x3A, 0x07, 0x3A, 0x00, 0xE6, 0x07, 0x3B, 0x07, 0x3C,
-    0x00, 0xDC, 0x07, 0x3D, 0x07, 0x3D, 0x00, 0xE6, 0x07, 0x3E, 0x07, 0x3E, 0x00, 0xDC, 0x07, 0x3F,
-    0x07, 0x41, 0x00, 0xE6, 0x07, 0x42, 0x07, 0x42, 0x00, 0xDC, 0x07, 0x43, 0x07, 0x43, 0x00, 0xE6,
-    0x07, 0x44, 0x07, 0x44, 0x00, 0xDC, 0x07, 0x45, 0x07, 0x45, 0x00, 0xE6, 0x07, 0x46, 0x07, 0x46,
-    0x00, 0xDC, 0x07, 0x47, 0x07, 0x47, 0x00, 0xE6, 0x07, 0x48, 0x07, 0x48, 0x00, 0xDC, 0x07, 0x49,
-    0x07, 0x4A, 0x00, 0xE6, 0x07, 0xEB, 0x07, 0xF1, 0x00, 0xE6, 0x07, 0xF2, 0x07, 0xF2, 0x00, 0xDC,
-    0x07, 0xF3, 0x07, 0xF3, 0x00, 0xE6, 0x09, 0x3C, 0x09, 0x3C, 0x00, 0x07, 0x09, 0x4D, 0x09, 0x4D,
-    0x00, 0x09, 0x09, 0x51, 0x09, 0x51, 0x00, 0xE6, 0x09, 0x52, 0x09, 0x52, 0x00, 0xDC, 0x09, 0x53,
-    0x09, 0x54, 0x00, 0xE6, 0x09, 0xBC, 0x09, 0xBC, 0x00, 0x07, 0x09, 0xCD, 0x09, 0xCD, 0x00, 0x09,
-    0x0A, 0x3C, 0x0A, 0x3C, 0x00, 0x07, 0x0A, 0x4D, 0x0A, 0x4D, 0x00, 0x09, 0x0A, 0xBC, 0x0A, 0xBC,
-    0x00, 0x07, 0x0A, 0xCD, 0x0A, 0xCD, 0x00, 0x09, 0x0B, 0x3C, 0x0B, 0x3C, 0x00, 0x07, 0x0B, 0x4D,
-    0x0B, 0x4D, 0x00, 0x09, 0x0B, 0xCD, 0x0B, 0xCD, 0x00, 0x09, 0x0C, 0x4D, 0x0C, 0x4D, 0x00, 0x09,
-    0x0C, 0x55, 0x0C, 0x55, 0x00, 0x54, 0x0C, 0x56, 0x0C, 0x56, 0x00, 0x5B, 0x0C, 0xBC, 0x0C, 0xBC,
-    0x00, 0x07, 0x0C, 0xCD, 0x0C, 0xCD, 0x00, 0x09, 0x0D, 0x4D, 0x0D, 0x4D, 0x00, 0x09, 0x0D, 0xCA,
-    0x0D, 0xCA, 0x00, 0x09, 0x0E, 0x38, 0x0E, 0x39, 0x00, 0x67, 0x0E, 0x3A, 0x0E, 0x3A, 0x00, 0x09,
-    0x0E, 0x48, 0x0E, 0x4B, 0x00, 0x6B, 0x0E, 0xB8, 0x0E, 0xB9, 0x00, 0x76, 0x0E, 0xC8, 0x0E, 0xCB,
-    0x00, 0x7A, 0x0F, 0x18, 0x0F, 0x19, 0x00, 0xDC, 0x0F, 0x35, 0x0F, 0x35, 0x00, 0xDC, 0x0F, 0x37,
-    0x0F, 0x37, 0x00, 0xDC, 0x0F, 0x39, 0x0F, 0x39, 0x00, 0xD8, 0x0F, 0x71, 0x0F, 0x71, 0x00, 0x81,
-    0x0F, 0x72, 0x0F, 0x72, 0x00, 0x82, 0x0F, 0x74, 0x0F, 0x74, 0x00, 0x84, 0x0F, 0x7A, 0x0F, 0x7D,
-    0x00, 0x82, 0x0F, 0x80, 0x0F, 0x80, 0x00, 0x82, 0x0F, 0x82, 0x0F, 0x83, 0x00, 0xE6, 0x0F, 0x84,
-    0x0F, 0x84, 0x00, 0x09, 0x0F, 0x86, 0x0F, 0x87, 0x00, 0xE6, 0x0F, 0xC6, 0x0F, 0xC6, 0x00, 0xDC,
-    0x10, 0x37, 0x10, 0x37, 0x00, 0x07, 0x10, 0x39, 0x10, 0x39, 0x00, 0x09, 0x13, 0x5F, 0x13, 0x5F,
-    0x00, 0xE6, 0x17, 0x14, 0x17, 0x14, 0x00, 0x09, 0x17, 0x34, 0x17, 0x34, 0x00, 0x09, 0x17, 0xD2,
-    0x17, 0xD2, 0x00, 0x09, 0x17, 0xDD, 0x17, 0xDD, 0x00, 0xE6, 0x18, 0xA9, 0x18, 0xA9, 0x00, 0xE4,
-    0x19, 0x39, 0x19, 0x39, 0x00, 0xDE, 0x19, 0x3A, 0x19, 0x3A, 0x00, 0xE6, 0x19, 0x3B, 0x19, 0x3B,
-    0x00, 0xDC, 0x1A, 0x17, 0x1A, 0x17, 0x00, 0xE6, 0x1A, 0x18, 0x1A, 0x18, 0x00, 0xDC, 0x1B, 0x34,
-    0x1B, 0x34, 0x00, 0x07, 0x1B, 0x44, 0x1B, 0x44, 0x00, 0x09, 0x1B, 0x6B, 0x1B, 0x6B, 0x00, 0xE6,
-    0x1B, 0x6C, 0x1B, 0x6C, 0x00, 0xDC, 0x1B, 0x6D, 0x1B, 0x73, 0x00, 0xE6, 0x1D, 0xC0, 0x1D, 0xC1,
-    0x00, 0xE6, 0x1D, 0xC2, 0x1D, 0xC2, 0x00, 0xDC, 0x1D, 0xC3, 0x1D, 0xC9, 0x00, 0xE6, 0x1D, 0xCA,
-    0x1D, 0xCA, 0x00, 0xDC, 0x1D, 0xFE, 0x1D, 0xFE, 0x00, 0xE6, 0x1D, 0xFF, 0x1D, 0xFF, 0x00, 0xDC,
-    0x20, 0xD0, 0x20, 0xD1, 0x00, 0xE6, 0x20, 0xD2, 0x20, 0xD3, 0x00, 0x01, 0x20, 0xD4, 0x20, 0xD7,
-    0x00, 0xE6, 0x20, 0xD8, 0x20, 0xDA, 0x00, 0x01, 0x20, 0xDB, 0x20, 0xDC, 0x00, 0xE6, 0x20, 0xE1,
-    0x20, 0xE1, 0x00, 0xE6, 0x20, 0xE5, 0x20, 0xE6, 0x00, 0x01, 0x20, 0xE7, 0x20, 0xE7, 0x00, 0xE6,
-    0x20, 0xE8, 0x20, 0xE8, 0x00, 0xDC, 0x20, 0xE9, 0x20, 0xE9, 0x00, 0xE6, 0x20, 0xEA, 0x20, 0xEB,
-    0x00, 0x01, 0x20, 0xEC, 0x20, 0xEF, 0x00, 0xDC, 0x30, 0x2A, 0x30, 0x2A, 0x00, 0xDA, 0x30, 0x2B,
-    0x30, 0x2B, 0x00, 0xE4, 0x30, 0x2C, 0x30, 0x2C, 0x00, 0xE8, 0x30, 0x2D, 0x30, 0x2D, 0x00, 0xDE,
-    0x30, 0x2E, 0x30, 0x2F, 0x00, 0xE0, 0x30, 0x99, 0x30, 0x9A, 0x00, 0x08, 0xA8, 0x06, 0xA8, 0x06,
-    0x00, 0x09, 0xFB, 0x1E, 0xFB, 0x1E, 0x00, 0x1A, 0xFE, 0x20, 0xFE, 0x23, 0x00, 0xE6, 0x0A, 0x0D,
-    0x0A, 0x0D, 0x00, 0xDC, 0x0A, 0x0F, 0x0A, 0x0F, 0x00, 0xE6, 0x0A, 0x38, 0x0A, 0x38, 0x00, 0xE6,
-    0x0A, 0x39, 0x0A, 0x39, 0x00, 0x01, 0x0A, 0x3A, 0x0A, 0x3A, 0x00, 0xDC, 0x0A, 0x3F, 0x0A, 0x3F,
-    0x00, 0x09, 0xD1, 0x65, 0xD1, 0x66, 0x00, 0xD8, 0xD1, 0x67, 0xD1, 0x69, 0x00, 0x01, 0xD1, 0x6D,
-    0xD1, 0x6D, 0x00, 0xE2, 0xD1, 0x6E, 0xD1, 0x72, 0x00, 0xD8, 0xD1, 0x7B, 0xD1, 0x82, 0x00, 0xDC,
-    0xD1, 0x85, 0xD1, 0x89, 0x00, 0xE6, 0xD1, 0x8A, 0xD1, 0x8B, 0x00, 0xDC, 0xD1, 0xAA, 0xD1, 0xAD,
-    0x00, 0xE6, 0xD2, 0x42, 0xD2, 0x44, 0x00, 0xE6
-};
-
-
-const size_t CanonShaping::glyphSubstitutionTableLen = sizeof(glyphSubstitutionTable)/sizeof(glyphSubstitutionTable[0]);
-
-const size_t CanonShaping::glyphDefinitionTableLen = sizeof(glyphDefinitionTable)/sizeof(glyphDefinitionTable[0]);
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/CanonShaping.cpp b/icu4c/source/layout/CanonShaping.cpp
deleted file mode 100644 (file)
index 9b25b23..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEGlyphStorage.h"
-#include "CanonShaping.h"
-#include "GlyphDefinitionTables.h"
-#include "ClassDefinitionTables.h"
-
-U_NAMESPACE_BEGIN
-
-void CanonShaping::sortMarks(le_int32 *indices, const le_int32 *combiningClasses, le_int32 index, le_int32 limit)
-{
-    for (le_int32 j = index + 1; j < limit; j += 1) {
-        le_int32 i;
-        le_int32 v = indices[j];
-        le_int32 c = combiningClasses[v];
-
-        for (i = j - 1; i >= index; i -= 1) {
-            if (c >= combiningClasses[indices[i]]) {
-                break;
-            }
-
-            indices[i + 1] = indices[i];
-        }
-
-        indices[i + 1] = v;
-    }
-}
-
-void CanonShaping::reorderMarks(const LEUnicode *inChars, le_int32 charCount, le_bool rightToLeft,
-                                LEUnicode *outChars, LEGlyphStorage &glyphStorage)
-{
-    LEErrorCode success = LE_NO_ERROR;
-    LEReferenceTo<GlyphDefinitionTableHeader> gdefTable(CanonShaping::glyphDefinitionTable, CanonShaping::glyphDefinitionTableLen);
-    LEReferenceTo<ClassDefinitionTable> classTable = gdefTable->getMarkAttachClassDefinitionTable(gdefTable, success);
-    le_int32 *combiningClasses = LE_NEW_ARRAY(le_int32, charCount);
-    le_int32 *indices = LE_NEW_ARRAY(le_int32, charCount);
-    le_int32 i;
-
-    for (i = 0; i < charCount; i += 1) {
-      combiningClasses[i] = classTable->getGlyphClass(classTable, (LEGlyphID) inChars[i], success);
-        indices[i] = i;
-    }
-
-    for (i = 0; i < charCount; i += 1) {
-        if (combiningClasses[i] != 0) {
-            le_int32 mark;
-
-            for (mark = i; mark < charCount; mark += 1) {
-                if (combiningClasses[mark] == 0) {
-                    break;
-                }
-            }
-
-            sortMarks(indices, combiningClasses, i, mark);
-        }
-    }
-
-    le_int32 out = 0, dir = 1;
-
-    if (rightToLeft) {
-        out = charCount - 1;
-        dir = -1;
-    }
-
-    for (i = 0; i < charCount; i += 1, out += dir) {
-        le_int32 index = indices[i];
-
-        outChars[i] = inChars[index];
-        glyphStorage.setCharIndex(out, index, success);
-    }
-
-    LE_DELETE_ARRAY(indices);
-    LE_DELETE_ARRAY(combiningClasses);
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/CanonShaping.h b/icu4c/source/layout/CanonShaping.h
deleted file mode 100644 (file)
index 67d9635..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __CANONSHAPING_H
-#define __CANONSHAPING_H
-
-#include "LETypes.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class U_LAYOUT_API CanonShaping /* not : public UObject because all members are static */
-{
-public:
-    static const le_uint8 glyphSubstitutionTable[];
-    static const size_t   glyphSubstitutionTableLen;
-    static const le_uint8 glyphDefinitionTable[];
-    static const size_t   glyphDefinitionTableLen;
-
-    static void reorderMarks(const LEUnicode *inChars, le_int32 charCount, le_bool rightToLeft,
-                                   LEUnicode *outChars, LEGlyphStorage &glyphStorage);
-
-private:
-    static void sortMarks(le_int32 *indices, const le_int32 *combiningClasses, le_int32 index, le_int32 limit);
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/CharSubstitutionFilter.h b/icu4c/source/layout/CharSubstitutionFilter.h
deleted file mode 100644 (file)
index 70088d5..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __CHARSUBSTITUTIONFILTER_H
-#define __CHARSUBSTITUTIONFILTER_H
-
-#include "LETypes.h"
-#include "LEGlyphFilter.h"
-
-U_NAMESPACE_BEGIN
-
-class LEFontInstance;
-
-/**
- * This filter is used by character-based GSUB processors. It
- * accepts only those characters which the given font can display.
- *
- * @internal
- */
-class CharSubstitutionFilter : public UMemory, public LEGlyphFilter
-{
-private:
-    /**
-     * Holds the font which is used to test the characters.
-     *
-     * @internal
-     */
-    const LEFontInstance *fFontInstance;
-
-    /**
-     * The copy constructor. Not allowed!
-     *
-     * @internal
-     */
-    CharSubstitutionFilter(const CharSubstitutionFilter &other); // forbid copying of this class
-
-    /**
-     * The replacement operator. Not allowed!
-     *
-     * @internal
-     */
-    CharSubstitutionFilter &operator=(const CharSubstitutionFilter &other); // forbid copying of this class
-
-public:
-    /**
-     * The constructor.
-     *
-     * @param fontInstance - the font to use to test the characters.
-     *
-     * @internal
-     */
-    CharSubstitutionFilter(const LEFontInstance *fontInstance);
-
-    /**
-     * The destructor.
-     *
-     * @internal
-     */
-    ~CharSubstitutionFilter();
-
-    /**
-     * This method is used to test if a particular
-     * character can be displayed by the filter's
-     * font.
-     *
-     * @param glyph - the Unicode character code to be tested
-     *
-     * @return TRUE if the filter's font can display this character.
-     *
-     * @internal
-     */
-    le_bool accept(LEGlyphID glyph) const;
-};
-
-U_NAMESPACE_END
-#endif
-
-
diff --git a/icu4c/source/layout/ClassDefinitionTables.cpp b/icu4c/source/layout/ClassDefinitionTables.cpp
deleted file mode 100644 (file)
index 35ec8f9..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "OpenTypeUtilities.h"
-#include "ClassDefinitionTables.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-le_int32 ClassDefinitionTable::getGlyphClass(const LETableReference& base, LEGlyphID glyphID, LEErrorCode &success) const
-{
-  LEReferenceTo<ClassDefinitionTable> thisRef(base, success);
-  if (LE_FAILURE(success)) return 0;
-
-  switch(SWAPW(classFormat)) {
-    case 0:
-        return 0;
-
-    case 1:
-    {
-      const LEReferenceTo<ClassDefFormat1Table> f1Table(thisRef, success);
-      return f1Table->getGlyphClass(f1Table, glyphID, success);
-    }
-
-    case 2:
-    {
-      const LEReferenceTo<ClassDefFormat2Table> f2Table(thisRef, success);
-      return  f2Table->getGlyphClass(f2Table, glyphID, success);
-    }
-
-    default:
-        return 0;
-  }
-}
-
-le_bool ClassDefinitionTable::hasGlyphClass(const LETableReference &base, le_int32 glyphClass, LEErrorCode &success) const
-{
-    LEReferenceTo<ClassDefinitionTable> thisRef(base, success);
-    if (LE_FAILURE(success)) return 0;
-
-    switch(SWAPW(classFormat)) {
-    case 0:
-        return 0;
-
-    case 1:
-    {
-      const LEReferenceTo<ClassDefFormat1Table> f1Table(thisRef, success);
-      return f1Table->hasGlyphClass(f1Table, glyphClass, success);
-    }
-
-    case 2:
-    {
-      const LEReferenceTo<ClassDefFormat2Table> f2Table(thisRef, success);
-      return f2Table->hasGlyphClass(f2Table, glyphClass, success);
-    }
-
-    default:
-        return 0;
-    }
-}
-
-le_int32 ClassDefFormat1Table::getGlyphClass(const LETableReference& base, LEGlyphID glyphID, LEErrorCode &success) const
-{
-    if(LE_FAILURE(success)) return 0;
-
-    le_uint16 count = SWAPW(glyphCount);
-    LEReferenceToArrayOf<le_uint16> classValueArrayRef(base, success, &classValueArray[0], count);
-    TTGlyphID ttGlyphID  = (TTGlyphID) LE_GET_GLYPH(glyphID);
-    TTGlyphID firstGlyph = SWAPW(startGlyph);
-    TTGlyphID lastGlyph  = firstGlyph + count;
-
-    if (LE_SUCCESS(success) && ttGlyphID >= firstGlyph && ttGlyphID < lastGlyph) {
-      return SWAPW( classValueArrayRef(ttGlyphID - firstGlyph, success) );
-    }
-
-    return 0;
-}
-
-le_bool ClassDefFormat1Table::hasGlyphClass(const LETableReference &base, le_int32 glyphClass, LEErrorCode &success) const
-{
-    if(LE_FAILURE(success)) return 0;
-    le_uint16 count = SWAPW(glyphCount);
-    LEReferenceToArrayOf<le_uint16> classValueArrayRef(base, success, &classValueArray[0], count);
-    int i;
-
-    for (i = 0; LE_SUCCESS(success)&& (i < count); i += 1) {
-      if (SWAPW(classValueArrayRef(i,success)) == glyphClass) {
-            return TRUE;
-        }
-    }
-
-    return FALSE;
-}
-
-le_int32 ClassDefFormat2Table::getGlyphClass(const LETableReference& base, LEGlyphID glyphID, LEErrorCode &success) const
-{
-    if(LE_FAILURE(success)) return 0;
-    TTGlyphID ttGlyph    = (TTGlyphID) LE_GET_GLYPH(glyphID);
-    le_uint16 rangeCount = SWAPW(classRangeCount);
-    LEReferenceToArrayOf<GlyphRangeRecord> classRangeRecordArrayRef(base, success, &classRangeRecordArray[0], rangeCount);
-    le_int32  rangeIndex =
-      OpenTypeUtilities::getGlyphRangeIndex(ttGlyph, classRangeRecordArrayRef, success);
-
-    if (rangeIndex < 0 || LE_FAILURE(success)) {
-        return 0;
-    }
-
-    return SWAPW(classRangeRecordArrayRef(rangeIndex, success).rangeValue);
-}
-
-le_bool ClassDefFormat2Table::hasGlyphClass(const LETableReference &base, le_int32 glyphClass, LEErrorCode &success) const
-{
-    if(LE_FAILURE(success)) return 0;
-    le_uint16 rangeCount = SWAPW(classRangeCount);
-    LEReferenceToArrayOf<GlyphRangeRecord> classRangeRecordArrayRef(base, success, &classRangeRecordArray[0], rangeCount);
-    int i;
-
-    for (i = 0; i < rangeCount && LE_SUCCESS(success); i += 1) {
-      if (SWAPW(classRangeRecordArrayRef(i,success).rangeValue) == glyphClass) {
-            return TRUE;
-        }
-    }
-
-    return FALSE;
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/ClassDefinitionTables.h b/icu4c/source/layout/ClassDefinitionTables.h
deleted file mode 100644 (file)
index 8d627f2..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __CLASSDEFINITIONTABLES_H
-#define __CLASSDEFINITIONTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-
-U_NAMESPACE_BEGIN
-
-struct ClassDefinitionTable
-{
-    le_uint16 classFormat;
-
-    le_int32  getGlyphClass(const LETableReference &base, LEGlyphID glyphID, LEErrorCode &success) const;
-    le_bool   hasGlyphClass(const LETableReference &base, le_int32 glyphClass, LEErrorCode &success) const;
-
-  le_int32 getGlyphClass(LEGlyphID glyphID) const {
-    LETableReference base((const le_uint8*)this);
-    LEErrorCode ignored = LE_NO_ERROR;
-    return getGlyphClass(base,glyphID,ignored);
-  }
-
-  le_bool hasGlyphClass(le_int32 glyphClass) const {
-    LETableReference base((const le_uint8*)this);
-    LEErrorCode ignored = LE_NO_ERROR;
-    return hasGlyphClass(base,glyphClass,ignored);
-  }
-};
-
-struct ClassDefFormat1Table : ClassDefinitionTable
-{
-    TTGlyphID  startGlyph;
-    le_uint16  glyphCount;
-    le_uint16  classValueArray[ANY_NUMBER];
-
-    le_int32 getGlyphClass(const LETableReference &base, LEGlyphID glyphID, LEErrorCode &success) const;
-    le_bool  hasGlyphClass(const LETableReference &base, le_int32 glyphClass, LEErrorCode &success) const;
-};
-LE_VAR_ARRAY(ClassDefFormat1Table, classValueArray)
-
-
-struct ClassRangeRecord
-{
-    TTGlyphID start;
-    TTGlyphID end;
-    le_uint16 classValue;
-};
-
-struct ClassDefFormat2Table : ClassDefinitionTable
-{
-    le_uint16        classRangeCount;
-    GlyphRangeRecord classRangeRecordArray[ANY_NUMBER];
-
-    le_int32 getGlyphClass(const LETableReference &base, LEGlyphID glyphID, LEErrorCode &success) const;
-    le_bool hasGlyphClass(const LETableReference &base, le_int32 glyphClass, LEErrorCode &success) const;
-};
-LE_VAR_ARRAY(ClassDefFormat2Table, classRangeRecordArray)
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/ContextualGlyphInsertion.h b/icu4c/source/layout/ContextualGlyphInsertion.h
deleted file mode 100644 (file)
index f93b743..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/**
- *
- * (C) Copyright IBM Corp. and Others 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __CONTEXTUALGLYPHINSERTION_H
-#define __CONTEXTUALGLYPHINSERTION_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LayoutTables.h"
-#include "StateTables.h"
-#include "MorphTables.h"
-#include "MorphStateTables.h"
-
-U_NAMESPACE_BEGIN
-
-struct ContextualGlyphInsertionHeader : MorphStateTableHeader
-{
-};
-
-struct ContextualGlyphInsertionHeader2 : MorphStateTableHeader2
-{
-    le_uint32 insertionTableOffset;
-};
-
-enum ContextualGlyphInsertionFlags
-{
-    cgiSetMark                  = 0x8000,
-    cgiDontAdvance              = 0x4000,
-    cgiCurrentIsKashidaLike     = 0x2000,
-    cgiMarkedIsKashidaLike      = 0x1000,
-    cgiCurrentInsertBefore      = 0x0800,
-    cgiMarkInsertBefore         = 0x0400,
-    cgiCurrentInsertCountMask   = 0x03E0,
-    cgiMarkedInsertCountMask    = 0x001F
-};
-
-struct ContextualGlyphInsertionStateEntry : StateEntry
-{
-    ByteOffset currentInsertionListOffset;
-    ByteOffset markedInsertionListOffset;
-};
-
-struct ContextualGlyphInsertionStateEntry2 : StateEntry2
-{
-    le_uint16 currentInsertionListIndex;
-    le_uint16 markedInsertionListIndex;
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/ContextualGlyphInsertionProc2.cpp b/icu4c/source/layout/ContextualGlyphInsertionProc2.cpp
deleted file mode 100644 (file)
index d506848..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "StateTables.h"
-#include "MorphStateTables.h"
-#include "SubtableProcessor2.h"
-#include "StateTableProcessor2.h"
-#include "ContextualGlyphInsertionProc2.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ContextualGlyphInsertionProcessor2)
-
-ContextualGlyphInsertionProcessor2::ContextualGlyphInsertionProcessor2(
-         const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success)
-  : StateTableProcessor2(morphSubtableHeader, success)
-{
-  contextualGlyphHeader = LEReferenceTo<ContextualGlyphInsertionHeader2>(morphSubtableHeader, success);
-  if(LE_FAILURE(success) || !contextualGlyphHeader.isValid()) return;
-  le_uint32 insertionTableOffset = SWAPL(contextualGlyphHeader->insertionTableOffset);
-  insertionTable = LEReferenceToArrayOf<le_uint16>(stHeader, success, insertionTableOffset, LE_UNBOUNDED_ARRAY);
-  entryTable = LEReferenceToArrayOf<ContextualGlyphInsertionStateEntry2>(stHeader, success, entryTableOffset, LE_UNBOUNDED_ARRAY);
-}
-
-ContextualGlyphInsertionProcessor2::~ContextualGlyphInsertionProcessor2()
-{
-}
-
-void ContextualGlyphInsertionProcessor2::beginStateTable()
-{
-    markGlyph = 0;
-}
-
-void ContextualGlyphInsertionProcessor2::doInsertion(LEGlyphStorage &glyphStorage,
-                                                     le_int16 atGlyph,
-                                                     le_int16 &index,
-                                                     le_int16 count,
-                                                     le_bool /* isKashidaLike */,
-                                                     le_bool isBefore,
-                                                     LEErrorCode &success) {
-  LEGlyphID *insertGlyphs = glyphStorage.insertGlyphs(atGlyph, count + 1, success);
-  
-  if(LE_FAILURE(success) || insertGlyphs==NULL) {
-    return;
-  }
-
-  // Note: Kashida vs Split Vowel seems to only affect selection and highlighting.
-  // We note the flag, but do not layout different.
-  // https://developer.apple.com/fonts/TTRefMan/RM06/Chap6mort.html
-
-  le_int16 targetIndex = 0;
-  if(isBefore) {
-    // insert at beginning
-    insertGlyphs[targetIndex++] = glyphStorage[atGlyph];
-  } else {
-    // insert at end
-    insertGlyphs[count] = glyphStorage[atGlyph];
-  }
-
-  while(count--) {
-    insertGlyphs[targetIndex++] = insertionTable.getObject(index++, success);
-  }
-  glyphStorage.applyInsertions();
-}
-
-le_uint16 ContextualGlyphInsertionProcessor2::processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph,
-                                                                EntryTableIndex2 index, LEErrorCode &success)
-{
-    const ContextualGlyphInsertionStateEntry2 *entry = entryTable.getAlias(index, success);
-
-    if(LE_FAILURE(success)) return 0; // TODO- which state?
-
-    le_uint16 newState = SWAPW(entry->newStateIndex);
-    le_uint16 flags = SWAPW(entry->flags);
-    
-    le_int16 markIndex = SWAPW(entry->markedInsertionListIndex);
-    if (markIndex > 0) {
-        le_int16 count = (flags & cgiMarkedInsertCountMask) >> 5;
-        le_bool isKashidaLike = (flags & cgiMarkedIsKashidaLike);
-        le_bool isBefore = (flags & cgiMarkInsertBefore);
-        doInsertion(glyphStorage, markGlyph, markIndex, count, isKashidaLike, isBefore, success);
-    }
-
-    le_int16 currIndex = SWAPW(entry->currentInsertionListIndex);
-    if (currIndex > 0) {
-        le_int16 count = flags & cgiCurrentInsertCountMask;
-        le_bool isKashidaLike = (flags & cgiCurrentIsKashidaLike);
-        le_bool isBefore = (flags & cgiCurrentInsertBefore);
-        doInsertion(glyphStorage, currGlyph, currIndex, count, isKashidaLike, isBefore, success);
-    }
-
-    if (flags & cgiSetMark) {
-        markGlyph = currGlyph;
-    }
-
-    if (!(flags & cgiDontAdvance)) {
-        currGlyph += dir;
-    }
-
-    return newState;
-}
-
-void ContextualGlyphInsertionProcessor2::endStateTable()
-{
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/ContextualGlyphInsertionProc2.h b/icu4c/source/layout/ContextualGlyphInsertionProc2.h
deleted file mode 100644 (file)
index bc3def7..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp.  and others 2013-2014 - All Rights Reserved
- *
- */
-
-#ifndef __CONTEXTUALGLYPHINSERTIONPROCESSOR2_H
-#define __CONTEXTUALGLYPHINSERTIONPROCESSOR2_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor2.h"
-#include "StateTableProcessor2.h"
-#include "ContextualGlyphInsertionProc2.h"
-#include "ContextualGlyphInsertion.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class ContextualGlyphInsertionProcessor2 : public StateTableProcessor2
-{
-public:
-    virtual void beginStateTable();
-
-    virtual le_uint16 processStateEntry(LEGlyphStorage &glyphStorage, 
-                                        le_int32 &currGlyph, EntryTableIndex2 index, LEErrorCode &success);
-
-    virtual void endStateTable();
-
-    ContextualGlyphInsertionProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success);
-    virtual ~ContextualGlyphInsertionProcessor2();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    static UClassID getStaticClassID();
-
-private:
-    ContextualGlyphInsertionProcessor2();
-
-    /**
-     * Perform the actual insertion
-     * @param atGlyph index of glyph to insert at
-     * @param index index into the insertionTable (in/out)
-     * @param count number of insertions
-     * @param isKashidaLike Kashida like (vs Split Vowel like). No effect currently.
-     * @param isBefore if true, insert extra glyphs before the marked glyph
-     */
-    void doInsertion(LEGlyphStorage &glyphStorage,
-                              le_int16 atGlyph,
-                              le_int16 &index,
-                              le_int16 count,
-                              le_bool isKashidaLike,
-                              le_bool isBefore,
-                              LEErrorCode &success);
-
-
-protected:
-    le_int32 markGlyph;
-    LEReferenceToArrayOf<le_uint16> insertionTable;
-    LEReferenceToArrayOf<ContextualGlyphInsertionStateEntry2> entryTable;
-    LEReferenceTo<ContextualGlyphInsertionHeader2> contextualGlyphHeader;
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/ContextualGlyphSubstProc.cpp b/icu4c/source/layout/ContextualGlyphSubstProc.cpp
deleted file mode 100644 (file)
index 336655a..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "StateTables.h"
-#include "MorphStateTables.h"
-#include "SubtableProcessor.h"
-#include "StateTableProcessor.h"
-#include "ContextualGlyphSubstProc.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ContextualGlyphSubstitutionProcessor)
-
-ContextualGlyphSubstitutionProcessor::ContextualGlyphSubstitutionProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success)
-  : StateTableProcessor(morphSubtableHeader, success), entryTable(), contextualGlyphSubstitutionHeader(morphSubtableHeader, success)
-{
-  contextualGlyphSubstitutionHeader.orphan();
-  substitutionTableOffset = SWAPW(contextualGlyphSubstitutionHeader->substitutionTableOffset);
-
-  
-  entryTable = LEReferenceToArrayOf<ContextualGlyphSubstitutionStateEntry>(stateTableHeader, success, 
-                                                                           (const ContextualGlyphSubstitutionStateEntry*)(&stateTableHeader->stHeader),
-                                                                           entryTableOffset, LE_UNBOUNDED_ARRAY);
-  int16Table = LEReferenceToArrayOf<le_int16>(stateTableHeader, success, (const le_int16*)(&stateTableHeader->stHeader),
-                                              0, LE_UNBOUNDED_ARRAY); // rest of the table as le_int16s
-}
-
-ContextualGlyphSubstitutionProcessor::~ContextualGlyphSubstitutionProcessor()
-{
-}
-
-void ContextualGlyphSubstitutionProcessor::beginStateTable()
-{
-    markGlyph = 0;
-}
-
-ByteOffset ContextualGlyphSubstitutionProcessor::processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex index)
-{
-  LEErrorCode success = LE_NO_ERROR;
-  const ContextualGlyphSubstitutionStateEntry *entry = entryTable.getAlias(index, success);
-  ByteOffset newState = SWAPW(entry->newStateOffset);
-  le_int16 flags = SWAPW(entry->flags);
-  WordOffset markOffset = SWAPW(entry->markOffset);
-  WordOffset currOffset = SWAPW(entry->currOffset);
-  
-  if (markOffset != 0 && LE_SUCCESS(success)) {
-    LEGlyphID mGlyph = glyphStorage[markGlyph];
-    TTGlyphID newGlyph = SWAPW(int16Table.getObject(markOffset + LE_GET_GLYPH(mGlyph), success)); // whew. 
-
-    glyphStorage[markGlyph] = LE_SET_GLYPH(mGlyph, newGlyph);  
-  }
-
-  if (currOffset != 0) {
-    LEGlyphID thisGlyph = glyphStorage[currGlyph];
-    TTGlyphID newGlyph = SWAPW(int16Table.getObject(currOffset + LE_GET_GLYPH(thisGlyph), success)); // whew. 
-    
-    glyphStorage[currGlyph] = LE_SET_GLYPH(thisGlyph, newGlyph);
-  }
-
-    if (flags & cgsSetMark) {
-        markGlyph = currGlyph;
-    }
-
-    if (!(flags & cgsDontAdvance)) {
-        // should handle reverse too!
-        currGlyph += 1;
-    }
-
-    return newState;
-}
-
-void ContextualGlyphSubstitutionProcessor::endStateTable()
-{
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/ContextualGlyphSubstProc.h b/icu4c/source/layout/ContextualGlyphSubstProc.h
deleted file mode 100644 (file)
index e2ffff4..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2014 - All Rights Reserved
- *
- */
-
-#ifndef __CONTEXTUALGLYPHSUBSTITUTIONPROCESSOR_H
-#define __CONTEXTUALGLYPHSUBSTITUTIONPROCESSOR_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor.h"
-#include "StateTableProcessor.h"
-#include "ContextualGlyphSubstitution.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class ContextualGlyphSubstitutionProcessor : public StateTableProcessor
-{
-public:
-    virtual void beginStateTable();
-
-    virtual ByteOffset processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex index);
-
-    virtual void endStateTable();
-
-    ContextualGlyphSubstitutionProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success);
-    virtual ~ContextualGlyphSubstitutionProcessor();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    static UClassID getStaticClassID();
-
-private:
-    ContextualGlyphSubstitutionProcessor();
-
-protected:
-    ByteOffset substitutionTableOffset;
-    LEReferenceToArrayOf<ContextualGlyphSubstitutionStateEntry> entryTable;
-    LEReferenceToArrayOf<le_int16> int16Table;
-    le_int32 markGlyph;
-
-    LEReferenceTo<ContextualGlyphSubstitutionHeader> contextualGlyphSubstitutionHeader;
-
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/ContextualGlyphSubstProc2.cpp b/icu4c/source/layout/ContextualGlyphSubstProc2.cpp
deleted file mode 100644 (file)
index 27ebafe..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2016 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "StateTables.h"
-#include "MorphStateTables.h"
-#include "SubtableProcessor2.h"
-#include "StateTableProcessor2.h"
-#include "ContextualGlyphSubstProc2.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ContextualGlyphSubstitutionProcessor2)
-
-ContextualGlyphSubstitutionProcessor2::ContextualGlyphSubstitutionProcessor2(
-                                  const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success)
-  : StateTableProcessor2(morphSubtableHeader, success), contextualGlyphHeader(morphSubtableHeader, success)
-{
-    if(LE_FAILURE(success)) return;
-    le_uint32 perGlyphTableOffset = SWAPL(contextualGlyphHeader->perGlyphTableOffset);
-    perGlyphTable = LEReferenceToArrayOf<le_uint32> (stHeader, success, perGlyphTableOffset, LE_UNBOUNDED_ARRAY);
-    entryTable = LEReferenceToArrayOf<ContextualGlyphStateEntry2>(stHeader, success, entryTableOffset, LE_UNBOUNDED_ARRAY);
-}
-
-ContextualGlyphSubstitutionProcessor2::~ContextualGlyphSubstitutionProcessor2()
-{
-}
-
-void ContextualGlyphSubstitutionProcessor2::beginStateTable()
-{
-    markGlyph = 0;
-}
-
-le_uint16 ContextualGlyphSubstitutionProcessor2::processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph,
-    EntryTableIndex2 index, LEErrorCode &success)
-{
-    if(LE_FAILURE(success)) return 0;
-    const ContextualGlyphStateEntry2 *entry = entryTable.getAlias(index, success);
-    if(LE_FAILURE(success)) return 0;
-    le_uint16 newState = SWAPW(entry->newStateIndex);
-    le_uint16 flags = SWAPW(entry->flags);
-    le_int16 markIndex = SWAPW(entry->markIndex);
-    le_int16 currIndex = SWAPW(entry->currIndex);
-    
-    if (markIndex != -1) {
-        le_uint32 offset = SWAPL(perGlyphTable(markIndex, success));
-        LEGlyphID mGlyph = glyphStorage[markGlyph];
-        TTGlyphID newGlyph = lookup(offset, mGlyph, success);        
-        glyphStorage[markGlyph] = LE_SET_GLYPH(mGlyph, newGlyph);
-    }
-
-    if (currIndex != -1) {
-        le_uint32 offset = SWAPL(perGlyphTable(currIndex, success));
-        LEGlyphID thisGlyph = glyphStorage[currGlyph];
-        TTGlyphID newGlyph = lookup(offset, thisGlyph, success);
-        glyphStorage[currGlyph] = LE_SET_GLYPH(thisGlyph, newGlyph);
-    }
-    
-    if (flags & cgsSetMark) {
-        markGlyph = currGlyph;
-    }
-
-    if (!(flags & cgsDontAdvance)) {
-        currGlyph += dir;
-    }
-
-    return newState;
-}
-
-TTGlyphID ContextualGlyphSubstitutionProcessor2::lookup(le_uint32 offset, LEGlyphID gid, LEErrorCode &success)
-{
-    TTGlyphID newGlyph = 0xFFFF;
-    if(LE_FAILURE(success))  return newGlyph;
-    LEReferenceTo<LookupTableBase> lookupTable(perGlyphTable, success, offset);
-    if(LE_FAILURE(success))  return newGlyph;
-    le_int16 format = SWAPW(lookupTable->format);
-
-    switch (format) {
-        case ltfSimpleArray: {
-#ifdef TEST_FORMAT
-            // Disabled pending for design review
-            LEReferenceTo<SimpleArrayLookupTable> lookupTable0(lookupTable, success);
-            LEReferenceToArrayOf<LookupValue> valueArray(lookupTable0, success, &lookupTable0->valueArray[0], LE_UNBOUNDED_ARRAY);
-            if(LE_FAILURE(success))  return newGlyph;
-            TTGlyphID glyphCode = (TTGlyphID) LE_GET_GLYPH(gid);
-            newGlyph = SWAPW(lookupTable0->valueArray(glyphCode, success));
-#endif
-            break;
-        }
-        case ltfSegmentSingle: {
-#ifdef TEST_FORMAT
-            // Disabled pending for design review
-            LEReferenceTo<SegmentSingleLookupTable> lookupTable2 = (SegmentSingleLookupTable *) lookupTable;
-            const LookupSegment *segment = lookupTable2->lookupSegment(lookupTable2->segments, gid);
-            if (segment != NULL) {
-                newGlyph = SWAPW(segment->value);
-            }
-#endif
-            break;
-        }
-        case ltfSegmentArray: {
-            //printf("Context Lookup Table Format4: specific interpretation needed!\n");
-            break;
-        }
-        case ltfSingleTable:
-        {
-#ifdef TEST_FORMAT
-            // Disabled pending for design review
-            LEReferenceTo<SingleTableLookupTable> lookupTable6 = (SingleTableLookupTable *) lookupTable;
-            const LEReferenceTo<LookupSingle> segment = lookupTable6->lookupSingle(lookupTable6->entries, gid);
-            if (segment != NULL) {
-                newGlyph = SWAPW(segment->value);
-            }
-#endif
-            break;
-        }
-        case ltfTrimmedArray: {
-            LEReferenceTo<TrimmedArrayLookupTable> lookupTable8(lookupTable, success);
-            if (LE_FAILURE(success)) return newGlyph;
-            TTGlyphID firstGlyph = SWAPW(lookupTable8->firstGlyph);    
-            TTGlyphID glyphCount = SWAPW(lookupTable8->glyphCount);
-            TTGlyphID lastGlyph  = firstGlyph + glyphCount;
-            TTGlyphID glyphCode = (TTGlyphID) LE_GET_GLYPH(gid);
-            if ((glyphCode >= firstGlyph) && (glyphCode < lastGlyph)) {
-              LEReferenceToArrayOf<LookupValue> valueArray(lookupTable8, success, &lookupTable8->valueArray[0], glyphCount);
-              newGlyph = SWAPW(valueArray(glyphCode - firstGlyph, success));
-            }
-        }
-        default:
-            break;
-    }
-    return newGlyph;
-}
-
-void ContextualGlyphSubstitutionProcessor2::endStateTable()
-{
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/ContextualGlyphSubstProc2.h b/icu4c/source/layout/ContextualGlyphSubstProc2.h
deleted file mode 100644 (file)
index 50f5be8..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2014 - All Rights Reserved
- *
- */
-
-#ifndef __CONTEXTUALGLYPHSUBSTITUTIONPROCESSOR2_H
-#define __CONTEXTUALGLYPHSUBSTITUTIONPROCESSOR2_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor2.h"
-#include "StateTableProcessor2.h"
-#include "ContextualGlyphSubstitution.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class ContextualGlyphSubstitutionProcessor2 : public StateTableProcessor2
-{
-public:
-    virtual void beginStateTable();
-
-    virtual le_uint16 processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex2 index, LEErrorCode &success);
-
-    virtual void endStateTable();
-
-    ContextualGlyphSubstitutionProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success);
-    virtual ~ContextualGlyphSubstitutionProcessor2();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    static UClassID getStaticClassID();
-
-private:
-    ContextualGlyphSubstitutionProcessor2();
-    TTGlyphID lookup(le_uint32 offset, LEGlyphID gid, LEErrorCode &success);
-
-protected:
-    LEReferenceToArrayOf<le_uint32>           perGlyphTable;
-    LEReferenceToArrayOf<ContextualGlyphStateEntry2> entryTable;
-
-    le_int16 perGlyphTableFormat;
-    le_int32 markGlyph;
-
-    LEReferenceTo<ContextualGlyphHeader2> contextualGlyphHeader;
-
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/ContextualGlyphSubstitution.h b/icu4c/source/layout/ContextualGlyphSubstitution.h
deleted file mode 100644 (file)
index 6b98bbf..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. and others 1998-2016 - All Rights Reserved
- *
- */
-
-#ifndef __CONTEXTUALGLYPHSUBSTITUTION_H
-#define __CONTEXTUALGLYPHSUBSTITUTION_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LayoutTables.h"
-#include "MorphStateTables.h"
-#include "MorphTables.h"
-#include "StateTables.h"
-
-U_NAMESPACE_BEGIN
-
-struct ContextualGlyphSubstitutionHeader : MorphStateTableHeader
-{
-    ByteOffset  substitutionTableOffset;
-};
-
-struct ContextualGlyphHeader2 : MorphStateTableHeader2
-{
-    le_uint32  perGlyphTableOffset; // no more substitution tables
-};
-
-enum ContextualGlyphSubstitutionFlags
-{
-    cgsSetMark      = 0x8000,
-    cgsDontAdvance  = 0x4000,
-    cgsReserved     = 0x3FFF
-};
-
-struct ContextualGlyphSubstitutionStateEntry : StateEntry
-{
-    WordOffset markOffset;
-    WordOffset currOffset;
-};
-
-struct ContextualGlyphStateEntry2 : StateEntry2
-{
-    le_uint16 markIndex;
-    le_uint16 currIndex;
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/ContextualSubstSubtables.cpp b/icu4c/source/layout/ContextualSubstSubtables.cpp
deleted file mode 100644 (file)
index 399587b..0000000
+++ /dev/null
@@ -1,577 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- * (C) Copyright IBM Corp. 1998-2015 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "GlyphSubstitutionTables.h"
-#include "ContextualSubstSubtables.h"
-#include "GlyphIterator.h"
-#include "LookupProcessor.h"
-#include "CoverageTables.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-/*
-    NOTE: This could be optimized somewhat by keeping track
-    of the previous sequenceIndex in the loop and doing next()
-    or prev() of the delta between that and the current
-    sequenceIndex instead of always resetting to the front.
-*/
-void ContextualSubstitutionBase::applySubstitutionLookups(
-        const LookupProcessor *lookupProcessor,
-        const SubstitutionLookupRecord *substLookupRecordArray,
-        le_uint16 substCount,
-        GlyphIterator *glyphIterator,
-        const LEFontInstance *fontInstance,
-        le_int32 position,
-        LEErrorCode& success)
-{
-    if (LE_FAILURE(success)) { 
-        return;
-    }
-
-    GlyphIterator tempIterator(*glyphIterator);
-
-    for (le_int16 subst = 0; subst < substCount && LE_SUCCESS(success); subst += 1) {
-        le_uint16 sequenceIndex = SWAPW(substLookupRecordArray[subst].sequenceIndex);
-        le_uint16 lookupListIndex = SWAPW(substLookupRecordArray[subst].lookupListIndex);
-
-        tempIterator.setCurrStreamPosition(position);
-        tempIterator.next(sequenceIndex);
-
-        lookupProcessor->applySingleLookup(lookupListIndex, &tempIterator, fontInstance, success);
-    }
-}
-
-le_bool ContextualSubstitutionBase::matchGlyphIDs(const TTGlyphID *glyphArray, le_uint16 glyphCount,
-                                               GlyphIterator *glyphIterator, le_bool backtrack)
-{
-    le_int32 direction = 1;
-    le_int32 match = 0;
-
-    if (backtrack) {
-        match = glyphCount -1;
-        direction = -1;
-    }
-
-    while (glyphCount > 0) {
-        if (! glyphIterator->next()) {
-            return FALSE;
-        }
-
-        TTGlyphID glyph = (TTGlyphID) glyphIterator->getCurrGlyphID();
-
-        if (glyph != SWAPW(glyphArray[match])) {
-            return FALSE;
-        }
-
-        glyphCount -= 1;
-        match += direction;
-    }
-
-    return TRUE;
-}
-
-le_bool ContextualSubstitutionBase::matchGlyphClasses(const le_uint16 *classArray, le_uint16 glyphCount,
-                                               GlyphIterator *glyphIterator,
-                                               const ClassDefinitionTable *classDefinitionTable,
-                                               le_bool backtrack)
-{
-    le_int32 direction = 1;
-    le_int32 match = 0;
-
-    if (backtrack) {
-        match = glyphCount - 1;
-        direction = -1;
-    }
-
-    while (glyphCount > 0) {
-        if (! glyphIterator->next()) {
-            return FALSE;
-        }
-
-        LEGlyphID glyph = glyphIterator->getCurrGlyphID();
-        le_int32 glyphClass = classDefinitionTable->getGlyphClass(glyph);
-        le_int32 matchClass = SWAPW(classArray[match]);
-
-        if (glyphClass != matchClass) {
-            // Some fonts, e.g. Traditional Arabic, have classes
-            // in the class array which aren't in the class definition
-            // table. If we're looking for such a class, pretend that
-            // we found it.
-            if (classDefinitionTable->hasGlyphClass(matchClass)) {
-                return FALSE;
-            }
-        }
-
-        glyphCount -= 1;
-        match += direction;
-    }
-
-    return TRUE;
-}
-
-le_bool ContextualSubstitutionBase::matchGlyphCoverages(const Offset *coverageTableOffsetArray, le_uint16 glyphCount,
-                                                     GlyphIterator *glyphIterator, const char *offsetBase, le_bool backtrack)
-{
-    le_int32 direction = 1;
-    le_int32 glyph = 0;
-
-    if (backtrack) {
-        glyph = glyphCount - 1;
-        direction = -1;
-    }
-
-    while (glyphCount > 0) {
-        Offset coverageTableOffset = SWAPW(coverageTableOffsetArray[glyph]);
-        const CoverageTable *coverageTable = (const CoverageTable *) (offsetBase + coverageTableOffset);
-
-        if (! glyphIterator->next()) {
-            return FALSE;
-        }
-
-        if (coverageTable->getGlyphCoverage((LEGlyphID) glyphIterator->getCurrGlyphID()) < 0) {
-            return FALSE;
-        }
-
-        glyphCount -= 1;
-        glyph += direction;
-    }
-
-    return TRUE;
-}
-
-le_uint32 ContextualSubstitutionSubtable::process(const LookupProcessor *lookupProcessor, 
-                                                  GlyphIterator *glyphIterator,
-                                                  const LEFontInstance *fontInstance,
-                                                  LEErrorCode& success) const
-{
-    if (LE_FAILURE(success)) { 
-        return 0;
-    }
-
-    switch(SWAPW(subtableFormat))
-    {
-    case 0:
-        return 0;
-
-    case 1:
-    {
-        const ContextualSubstitutionFormat1Subtable *subtable = (const ContextualSubstitutionFormat1Subtable *) this;
-        return subtable->process(lookupProcessor, glyphIterator, fontInstance, success);
-    }
-
-    case 2:
-    {
-        const ContextualSubstitutionFormat2Subtable *subtable = (const ContextualSubstitutionFormat2Subtable *) this;
-        return subtable->process(lookupProcessor, glyphIterator, fontInstance, success);
-    }
-
-    case 3:
-    {
-        const ContextualSubstitutionFormat3Subtable *subtable = (const ContextualSubstitutionFormat3Subtable *) this;
-        return subtable->process(lookupProcessor, glyphIterator, fontInstance, success);
-    }
-
-    default:
-        return 0;
-    }
-}
-
-le_uint32 ContextualSubstitutionFormat1Subtable::process(const LookupProcessor *lookupProcessor, 
-                                                         GlyphIterator *glyphIterator,
-                                                         const LEFontInstance *fontInstance,
-                                                         LEErrorCode& success) const
-{
-    if (LE_FAILURE(success)) { 
-        return 0;
-    }
-
-    LEGlyphID glyph = glyphIterator->getCurrGlyphID();
-    le_int32 coverageIndex = getGlyphCoverage(lookupProcessor->getReference(), glyph, success);
-
-    if (coverageIndex >= 0) {
-        le_uint16 srSetCount = SWAPW(subRuleSetCount);
-
-        if (coverageIndex < srSetCount) {
-            Offset subRuleSetTableOffset = SWAPW(subRuleSetTableOffsetArray[coverageIndex]);
-            const SubRuleSetTable *subRuleSetTable =
-                (const SubRuleSetTable *) ((char *) this + subRuleSetTableOffset);
-            le_uint16 subRuleCount = SWAPW(subRuleSetTable->subRuleCount);
-            le_int32 position = glyphIterator->getCurrStreamPosition();
-
-            for (le_uint16 subRule = 0; subRule < subRuleCount; subRule += 1) {
-                Offset subRuleTableOffset =
-                    SWAPW(subRuleSetTable->subRuleTableOffsetArray[subRule]);
-                const SubRuleTable *subRuleTable =
-                    (const SubRuleTable *) ((char *) subRuleSetTable + subRuleTableOffset);
-                le_uint16 matchCount = SWAPW(subRuleTable->glyphCount) - 1;
-                le_uint16 substCount = SWAPW(subRuleTable->substCount);
-
-                if (matchGlyphIDs(subRuleTable->inputGlyphArray, matchCount, glyphIterator)) {
-                    const SubstitutionLookupRecord *substLookupRecordArray = 
-                        (const SubstitutionLookupRecord *) &subRuleTable->inputGlyphArray[matchCount];
-
-                    applySubstitutionLookups(lookupProcessor, substLookupRecordArray, substCount, glyphIterator, fontInstance, position, success);
-
-                    return matchCount + 1;
-                }
-
-                glyphIterator->setCurrStreamPosition(position);
-            }
-        }
-
-        // XXX If we get here, the table is mal-formed...
-    }
-    
-    return 0;
-}
-
-le_uint32 ContextualSubstitutionFormat2Subtable::process(const LookupProcessor *lookupProcessor, 
-                                                         GlyphIterator *glyphIterator,
-                                                         const LEFontInstance *fontInstance,
-                                                         LEErrorCode& success) const
-{
-    if (LE_FAILURE(success)) { 
-        return 0;
-    }
-
-    LEGlyphID glyph = glyphIterator->getCurrGlyphID();
-    le_int32 coverageIndex = getGlyphCoverage(lookupProcessor->getReference(), glyph, success);
-
-    if (coverageIndex >= 0) {
-        const ClassDefinitionTable *classDefinitionTable =
-            (const ClassDefinitionTable *) ((char *) this + SWAPW(classDefTableOffset));
-        le_uint16 scSetCount = SWAPW(subClassSetCount);
-        le_int32 setClass = classDefinitionTable->getGlyphClass(glyphIterator->getCurrGlyphID());
-
-        if (setClass < scSetCount && subClassSetTableOffsetArray[setClass] != 0) {
-            Offset subClassSetTableOffset = SWAPW(subClassSetTableOffsetArray[setClass]);
-            const SubClassSetTable *subClassSetTable =
-                (const SubClassSetTable *) ((char *) this + subClassSetTableOffset);
-            le_uint16 subClassRuleCount = SWAPW(subClassSetTable->subClassRuleCount);
-            le_int32 position = glyphIterator->getCurrStreamPosition();
-
-            for (le_uint16 scRule = 0; scRule < subClassRuleCount; scRule += 1) {
-                Offset subClassRuleTableOffset =
-                    SWAPW(subClassSetTable->subClassRuleTableOffsetArray[scRule]);
-                const SubClassRuleTable *subClassRuleTable =
-                    (const SubClassRuleTable *) ((char *) subClassSetTable + subClassRuleTableOffset);
-                le_uint16 matchCount = SWAPW(subClassRuleTable->glyphCount) - 1;
-                le_uint16 substCount = SWAPW(subClassRuleTable->substCount);
-
-                if (matchGlyphClasses(subClassRuleTable->classArray, matchCount, glyphIterator, classDefinitionTable)) {
-                    const SubstitutionLookupRecord *substLookupRecordArray = 
-                        (const SubstitutionLookupRecord *) &subClassRuleTable->classArray[matchCount];
-
-                    applySubstitutionLookups(lookupProcessor, substLookupRecordArray, substCount, glyphIterator, fontInstance, position, success);
-
-                    return matchCount + 1;
-                }
-
-                glyphIterator->setCurrStreamPosition(position);
-            }
-        }
-
-        // XXX If we get here, the table is mal-formed...
-    }
-    
-    return 0;
-}
-
-le_uint32 ContextualSubstitutionFormat3Subtable::process(const LookupProcessor *lookupProcessor, 
-                                                         GlyphIterator *glyphIterator,
-                                                         const LEFontInstance *fontInstance,
-                                                         LEErrorCode& success)const 
-{
-    if (LE_FAILURE(success)) { 
-        return 0;
-    }
-
-    le_uint16 gCount = SWAPW(glyphCount);
-    le_uint16 subCount = SWAPW(substCount);
-    le_int32 position = glyphIterator->getCurrStreamPosition();
-
-    // Back up the glyph iterator so that we
-    // can call next() before the check, which
-    // will leave it pointing at the last glyph
-    // that matched when we're done.
-    glyphIterator->prev();
-
-    if (ContextualSubstitutionBase::matchGlyphCoverages(coverageTableOffsetArray, gCount, glyphIterator, (const char *) this)) {
-        const SubstitutionLookupRecord *substLookupRecordArray = 
-            (const SubstitutionLookupRecord *) &coverageTableOffsetArray[gCount];
-
-        ContextualSubstitutionBase::applySubstitutionLookups(lookupProcessor, substLookupRecordArray, subCount, glyphIterator, fontInstance, position, success);
-
-        return gCount + 1;
-    }
-
-    glyphIterator->setCurrStreamPosition(position);
-
-    return 0;
-}
-
-le_uint32 ChainingContextualSubstitutionSubtable::process(const LookupProcessor *lookupProcessor, 
-                                                          GlyphIterator *glyphIterator,
-                                                          const LEFontInstance *fontInstance,
-                                                          LEErrorCode& success) const
-{
-    if (LE_FAILURE(success)) { 
-        return 0;
-    }
-
-    switch(SWAPW(subtableFormat))
-    {
-    case 0:
-        return 0;
-
-    case 1:
-    {
-        const ChainingContextualSubstitutionFormat1Subtable *subtable = (const ChainingContextualSubstitutionFormat1Subtable *) this;
-        return subtable->process(lookupProcessor, glyphIterator, fontInstance, success);
-    }
-
-    case 2:
-    {
-        const ChainingContextualSubstitutionFormat2Subtable *subtable = (const ChainingContextualSubstitutionFormat2Subtable *) this;
-        return subtable->process(lookupProcessor, glyphIterator, fontInstance, success);
-    }
-
-    case 3:
-    {
-        const ChainingContextualSubstitutionFormat3Subtable *subtable = (const ChainingContextualSubstitutionFormat3Subtable *) this;
-        return subtable->process(lookupProcessor, glyphIterator, fontInstance, success);
-    }
-
-    default:
-        return 0;
-    }
-}
-
-// NOTE: This could be a #define, but that seems to confuse
-// the Visual Studio .NET 2003 compiler on the calls to the
-// GlyphIterator constructor. It somehow can't decide if
-// emptyFeatureList matches an le_uint32 or an le_uint16...
-static const FeatureMask emptyFeatureList = 0x00000000UL;
-
-le_uint32 ChainingContextualSubstitutionFormat1Subtable::process(const LookupProcessor *lookupProcessor, 
-                                                                 GlyphIterator *glyphIterator,
-                                                                 const LEFontInstance *fontInstance,
-                                                                 LEErrorCode& success) const
-{
-    if (LE_FAILURE(success)) { 
-        return 0;
-    }
-
-    LEGlyphID glyph = glyphIterator->getCurrGlyphID();
-    le_int32 coverageIndex = getGlyphCoverage(lookupProcessor->getReference(), glyph, success);
-
-    if (coverageIndex >= 0) {
-        le_uint16 srSetCount = SWAPW(chainSubRuleSetCount);
-
-        if (coverageIndex < srSetCount) {
-            Offset chainSubRuleSetTableOffset = SWAPW(chainSubRuleSetTableOffsetArray[coverageIndex]);
-            const ChainSubRuleSetTable *chainSubRuleSetTable =
-                (const ChainSubRuleSetTable *) ((char *) this + chainSubRuleSetTableOffset);
-            le_uint16 chainSubRuleCount = SWAPW(chainSubRuleSetTable->chainSubRuleCount);
-            le_int32 position = glyphIterator->getCurrStreamPosition();
-            GlyphIterator tempIterator(*glyphIterator, emptyFeatureList);
-
-            for (le_uint16 subRule = 0; subRule < chainSubRuleCount; subRule += 1) {
-                Offset chainSubRuleTableOffset =
-                    SWAPW(chainSubRuleSetTable->chainSubRuleTableOffsetArray[subRule]);
-                const ChainSubRuleTable *chainSubRuleTable =
-                    (const ChainSubRuleTable *) ((char *) chainSubRuleSetTable + chainSubRuleTableOffset);
-                le_uint16 backtrackGlyphCount = SWAPW(chainSubRuleTable->backtrackGlyphCount);
-                le_uint16 inputGlyphCount = (le_uint16) SWAPW(chainSubRuleTable->backtrackGlyphArray[backtrackGlyphCount]) - 1;
-                const TTGlyphID *inputGlyphArray = &chainSubRuleTable->backtrackGlyphArray[backtrackGlyphCount + 1];
-                le_uint16 lookaheadGlyphCount = (le_uint16) SWAPW(inputGlyphArray[inputGlyphCount]);
-                const TTGlyphID *lookaheadGlyphArray = &inputGlyphArray[inputGlyphCount + 1];
-                le_uint16 substCount = (le_uint16) SWAPW(lookaheadGlyphArray[lookaheadGlyphCount]);
-
-                tempIterator.setCurrStreamPosition(position);
-
-                if (! tempIterator.prev(backtrackGlyphCount)) {
-                    continue;
-                }
-
-                tempIterator.prev();
-                if (! matchGlyphIDs(chainSubRuleTable->backtrackGlyphArray, backtrackGlyphCount, &tempIterator, TRUE)) {
-                    continue;
-                }
-
-                tempIterator.setCurrStreamPosition(position);
-                tempIterator.next(inputGlyphCount);
-                if (!matchGlyphIDs(lookaheadGlyphArray, lookaheadGlyphCount, &tempIterator)) {
-                    continue;
-                }
-
-                if (matchGlyphIDs(inputGlyphArray, inputGlyphCount, glyphIterator)) {
-                    const SubstitutionLookupRecord *substLookupRecordArray = 
-                        (const SubstitutionLookupRecord *) &lookaheadGlyphArray[lookaheadGlyphCount + 1];
-
-                    applySubstitutionLookups(lookupProcessor, substLookupRecordArray, substCount, glyphIterator, fontInstance, position, success);
-
-                    return inputGlyphCount + 1;
-                }
-
-                glyphIterator->setCurrStreamPosition(position);
-            }
-        }
-
-        // XXX If we get here, the table is mal-formed...
-    }
-    
-    return 0;
-}
-
-le_uint32 ChainingContextualSubstitutionFormat2Subtable::process(const LookupProcessor *lookupProcessor, 
-                                                                 GlyphIterator *glyphIterator,
-                                                                 const LEFontInstance *fontInstance,
-                                                                 LEErrorCode& success) const
-{
-    if (LE_FAILURE(success)) { 
-        return 0;
-    }
-
-    LEGlyphID glyph = glyphIterator->getCurrGlyphID();
-    le_int32 coverageIndex = getGlyphCoverage(lookupProcessor->getReference(), glyph, success);
-
-    if (coverageIndex >= 0) {
-        const ClassDefinitionTable *backtrackClassDefinitionTable =
-            (const ClassDefinitionTable *) ((char *) this + SWAPW(backtrackClassDefTableOffset));
-        const ClassDefinitionTable *inputClassDefinitionTable =
-            (const ClassDefinitionTable *) ((char *) this + SWAPW(inputClassDefTableOffset));
-        const ClassDefinitionTable *lookaheadClassDefinitionTable =
-            (const ClassDefinitionTable *) ((char *) this + SWAPW(lookaheadClassDefTableOffset));
-        le_uint16 scSetCount = SWAPW(chainSubClassSetCount);
-        le_int32 setClass = inputClassDefinitionTable->getGlyphClass(glyphIterator->getCurrGlyphID());
-
-        if (setClass < scSetCount && chainSubClassSetTableOffsetArray[setClass] != 0) {
-            Offset chainSubClassSetTableOffset = SWAPW(chainSubClassSetTableOffsetArray[setClass]);
-            const ChainSubClassSetTable *chainSubClassSetTable =
-                (const ChainSubClassSetTable *) ((char *) this + chainSubClassSetTableOffset);
-            le_uint16 chainSubClassRuleCount = SWAPW(chainSubClassSetTable->chainSubClassRuleCount);
-            le_int32 position = glyphIterator->getCurrStreamPosition();
-            GlyphIterator tempIterator(*glyphIterator, emptyFeatureList);
-
-            for (le_uint16 scRule = 0; scRule < chainSubClassRuleCount; scRule += 1) {
-                Offset chainSubClassRuleTableOffset =
-                    SWAPW(chainSubClassSetTable->chainSubClassRuleTableOffsetArray[scRule]);
-                const ChainSubClassRuleTable *chainSubClassRuleTable =
-                    (const ChainSubClassRuleTable *) ((char *) chainSubClassSetTable + chainSubClassRuleTableOffset);
-                le_uint16 backtrackGlyphCount = SWAPW(chainSubClassRuleTable->backtrackGlyphCount);
-
-                // TODO: Ticket #11557 - enable this check, originally from ticket #11525.
-                //       Depends on other, more extensive, changes.
-                // LEReferenceToArrayOf<le_uint16>   backtrackClassArray(base, success, chainSubClassRuleTable->backtrackClassArray, backtrackGlyphCount);
-                if( LE_FAILURE(success) ) { return 0; }
-
-                le_uint16 inputGlyphCount = SWAPW(chainSubClassRuleTable->backtrackClassArray[backtrackGlyphCount]) - 1;
-                const le_uint16 *inputClassArray = &chainSubClassRuleTable->backtrackClassArray[backtrackGlyphCount + 1];
-                le_uint16 lookaheadGlyphCount = SWAPW(inputClassArray[inputGlyphCount]);
-                const le_uint16 *lookaheadClassArray = &inputClassArray[inputGlyphCount + 1];
-                le_uint16 substCount = SWAPW(lookaheadClassArray[lookaheadGlyphCount]);
-                
-
-                tempIterator.setCurrStreamPosition(position);
-
-                if (! tempIterator.prev(backtrackGlyphCount)) {
-                    continue;
-                }
-
-                tempIterator.prev();
-                if (! matchGlyphClasses(chainSubClassRuleTable->backtrackClassArray, backtrackGlyphCount,
-                    &tempIterator, backtrackClassDefinitionTable, TRUE)) {
-                    continue;
-                }
-
-                tempIterator.setCurrStreamPosition(position);
-                tempIterator.next(inputGlyphCount);
-                if (! matchGlyphClasses(lookaheadClassArray, lookaheadGlyphCount, &tempIterator, lookaheadClassDefinitionTable)) {
-                    continue;
-                }
-
-                if (matchGlyphClasses(inputClassArray, inputGlyphCount, glyphIterator, inputClassDefinitionTable)) {
-                    const SubstitutionLookupRecord *substLookupRecordArray = 
-                        (const SubstitutionLookupRecord *) &lookaheadClassArray[lookaheadGlyphCount + 1];
-
-                    applySubstitutionLookups(lookupProcessor, substLookupRecordArray, substCount, glyphIterator, fontInstance, position, success);
-
-                    return inputGlyphCount + 1;
-                }
-
-                glyphIterator->setCurrStreamPosition(position);
-            }
-        }
-
-        // XXX If we get here, the table is mal-formed...
-    }
-    
-    return 0;
-}
-
-le_uint32 ChainingContextualSubstitutionFormat3Subtable::process(const LookupProcessor *lookupProcessor, 
-                                                                 GlyphIterator *glyphIterator,
-                                                                 const LEFontInstance *fontInstance,
-                                                                 LEErrorCode & success) const
-{
-    if (LE_FAILURE(success)) { 
-        return 0;
-    }
-
-    le_uint16 backtrkGlyphCount = SWAPW(backtrackGlyphCount);
-    le_uint16 inputGlyphCount = (le_uint16) SWAPW(backtrackCoverageTableOffsetArray[backtrkGlyphCount]);
-    const Offset *inputCoverageTableOffsetArray = &backtrackCoverageTableOffsetArray[backtrkGlyphCount + 1];
-    const le_uint16 lookaheadGlyphCount = (le_uint16) SWAPW(inputCoverageTableOffsetArray[inputGlyphCount]);
-    const Offset *lookaheadCoverageTableOffsetArray = &inputCoverageTableOffsetArray[inputGlyphCount + 1];
-    le_uint16 substCount = (le_uint16) SWAPW(lookaheadCoverageTableOffsetArray[lookaheadGlyphCount]);
-    le_int32 position = glyphIterator->getCurrStreamPosition();
-    GlyphIterator tempIterator(*glyphIterator, emptyFeatureList);
-
-    if (! tempIterator.prev(backtrkGlyphCount)) {
-        return 0;
-    }
-
-    tempIterator.prev();
-    if (! ContextualSubstitutionBase::matchGlyphCoverages(backtrackCoverageTableOffsetArray,
-        backtrkGlyphCount, &tempIterator, (const char *) this, TRUE)) {
-        return 0;
-    }
-
-    tempIterator.setCurrStreamPosition(position);
-    tempIterator.next(inputGlyphCount - 1);
-    if (! ContextualSubstitutionBase::matchGlyphCoverages(lookaheadCoverageTableOffsetArray,
-        lookaheadGlyphCount, &tempIterator, (const char *) this)) {
-        return 0;
-    }
-
-    // Back up the glyph iterator so that we
-    // can call next() before the check, which
-    // will leave it pointing at the last glyph
-    // that matched when we're done.
-    glyphIterator->prev();
-
-    if (ContextualSubstitutionBase::matchGlyphCoverages(inputCoverageTableOffsetArray,
-        inputGlyphCount, glyphIterator, (const char *) this)) {
-        const SubstitutionLookupRecord *substLookupRecordArray = 
-            (const SubstitutionLookupRecord *) &lookaheadCoverageTableOffsetArray[lookaheadGlyphCount + 1];
-
-        ContextualSubstitutionBase::applySubstitutionLookups(lookupProcessor, substLookupRecordArray, substCount, glyphIterator, fontInstance, position, success);
-
-        return inputGlyphCount;
-    }
-
-    glyphIterator->setCurrStreamPosition(position);
-
-    return 0;
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/ContextualSubstSubtables.h b/icu4c/source/layout/ContextualSubstSubtables.h
deleted file mode 100644 (file)
index b8631a9..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __CONTEXTUALSUBSTITUTIONSUBTABLES_H
-#define __CONTEXTUALSUBSTITUTIONSUBTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "GlyphSubstitutionTables.h"
-#include "GlyphIterator.h"
-#include "LookupProcessor.h"
-#include "LETableReference.h"
-
-U_NAMESPACE_BEGIN
-
-struct SubstitutionLookupRecord
-{
-    le_uint16  sequenceIndex;
-    le_uint16  lookupListIndex;
-};
-
-struct ContextualSubstitutionBase : GlyphSubstitutionSubtable
-{
-    static le_bool matchGlyphIDs(
-        const TTGlyphID *glyphArray, le_uint16 glyphCount, GlyphIterator *glyphIterator,
-        le_bool backtrack = FALSE);
-
-    static le_bool matchGlyphClasses(
-        const le_uint16 *classArray, le_uint16 glyphCount, GlyphIterator *glyphIterator,
-        const ClassDefinitionTable *classDefinitionTable, le_bool backtrack = FALSE);
-
-    static le_bool matchGlyphCoverages(
-        const Offset *coverageTableOffsetArray, le_uint16 glyphCount,
-        GlyphIterator *glyphIterator, const char *offsetBase, le_bool backtrack = FALSE);
-
-    static void applySubstitutionLookups(
-        const LookupProcessor *lookupProcessor, 
-        const SubstitutionLookupRecord *substLookupRecordArray,
-        le_uint16 substCount,
-        GlyphIterator *glyphIterator,
-        const LEFontInstance *fontInstance,
-        le_int32 position,
-        LEErrorCode& success);
-};
-
-struct ContextualSubstitutionSubtable : ContextualSubstitutionBase
-{
-    le_uint32  process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
-};
-
-struct ContextualSubstitutionFormat1Subtable : ContextualSubstitutionSubtable
-{
-    le_uint16  subRuleSetCount;
-    Offset  subRuleSetTableOffsetArray[ANY_NUMBER];
-
-    le_uint32  process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
-};
-LE_VAR_ARRAY(ContextualSubstitutionFormat1Subtable, subRuleSetTableOffsetArray)
-
-
-struct SubRuleSetTable
-{
-    le_uint16  subRuleCount;
-    Offset  subRuleTableOffsetArray[ANY_NUMBER];
-
-};
-LE_VAR_ARRAY(SubRuleSetTable, subRuleTableOffsetArray)
-
-// NOTE: Multiple variable size arrays!!
-struct SubRuleTable
-{
-    le_uint16  glyphCount;
-    le_uint16  substCount;
-    TTGlyphID inputGlyphArray[ANY_NUMBER];
-  //SubstitutionLookupRecord substLookupRecordArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(SubRuleTable, inputGlyphArray)
-
-struct ContextualSubstitutionFormat2Subtable : ContextualSubstitutionSubtable
-{
-    Offset  classDefTableOffset;
-    le_uint16  subClassSetCount;
-    Offset  subClassSetTableOffsetArray[ANY_NUMBER];
-
-    le_uint32  process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
-};
-LE_VAR_ARRAY(ContextualSubstitutionFormat2Subtable, subClassSetTableOffsetArray)
-
-
-struct SubClassSetTable
-{
-    le_uint16  subClassRuleCount;
-    Offset  subClassRuleTableOffsetArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(SubClassSetTable, subClassRuleTableOffsetArray)
-
-
-// NOTE: Multiple variable size arrays!!
-struct SubClassRuleTable
-{
-    le_uint16  glyphCount;
-    le_uint16  substCount;
-    le_uint16  classArray[ANY_NUMBER];
-  //SubstitutionLookupRecord substLookupRecordArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(SubClassRuleTable, classArray)
-
-
-// NOTE: This isn't a subclass of GlyphSubstitutionSubtable 'cause
-// it has an array of coverage tables instead of a single coverage table...
-//
-// NOTE: Multiple variable size arrays!!
-struct ContextualSubstitutionFormat3Subtable
-{
-    le_uint16  substFormat;
-    le_uint16  glyphCount;
-    le_uint16  substCount;
-    Offset  coverageTableOffsetArray[ANY_NUMBER];
-  //SubstitutionLookupRecord substLookupRecord[ANY_NUMBER];
-
-    le_uint32  process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
-};
-LE_VAR_ARRAY(ContextualSubstitutionFormat3Subtable, coverageTableOffsetArray)
-
-struct ChainingContextualSubstitutionSubtable : ContextualSubstitutionBase
-{
-    le_uint32  process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
-};
-
-struct ChainingContextualSubstitutionFormat1Subtable : ChainingContextualSubstitutionSubtable
-{
-    le_uint16  chainSubRuleSetCount;
-    Offset  chainSubRuleSetTableOffsetArray[ANY_NUMBER];
-
-    le_uint32  process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
-};
-LE_VAR_ARRAY(ChainingContextualSubstitutionFormat1Subtable, chainSubRuleSetTableOffsetArray)
-
-
-struct ChainSubRuleSetTable
-{
-    le_uint16  chainSubRuleCount;
-    Offset  chainSubRuleTableOffsetArray[ANY_NUMBER];
-
-};
-LE_VAR_ARRAY(ChainSubRuleSetTable, chainSubRuleTableOffsetArray)
-
-// NOTE: Multiple variable size arrays!!
-struct ChainSubRuleTable
-{
-    le_uint16  backtrackGlyphCount;
-    TTGlyphID backtrackGlyphArray[ANY_NUMBER];
-  //le_uint16  inputGlyphCount;
-  //TTGlyphID inputGlyphArray[ANY_NUMBER];
-  //le_uint16  lookaheadGlyphCount;
-  //TTGlyphID lookaheadGlyphArray[ANY_NUMBER];
-  //le_uint16  substCount;
-  //SubstitutionLookupRecord substLookupRecordArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(ChainSubRuleTable, backtrackGlyphArray)
-
-struct ChainingContextualSubstitutionFormat2Subtable : ChainingContextualSubstitutionSubtable
-{
-    Offset  backtrackClassDefTableOffset;
-    Offset  inputClassDefTableOffset;
-    Offset  lookaheadClassDefTableOffset;
-    le_uint16  chainSubClassSetCount;
-    Offset  chainSubClassSetTableOffsetArray[ANY_NUMBER];
-
-    le_uint32  process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
-};
-LE_VAR_ARRAY(ChainingContextualSubstitutionFormat2Subtable, chainSubClassSetTableOffsetArray)
-
-struct ChainSubClassSetTable
-{
-    le_uint16  chainSubClassRuleCount;
-    Offset  chainSubClassRuleTableOffsetArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(ChainSubClassSetTable, chainSubClassRuleTableOffsetArray)
-
-
-// NOTE: Multiple variable size arrays!!
-struct ChainSubClassRuleTable
-{
-    le_uint16  backtrackGlyphCount;
-    le_uint16  backtrackClassArray[ANY_NUMBER];
-  //le_uint16  inputGlyphCount;
-  //le_uint16  inputClassArray[ANY_NUMBER];
-  //le_uint16  lookaheadGlyphCount;
-  //le_uint16  lookaheadClassArray[ANY_NUMBER];
-  //le_uint16  substCount;
-  //SubstitutionLookupRecord substLookupRecordArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(ChainSubClassRuleTable, backtrackClassArray)
-
-// NOTE: This isn't a subclass of GlyphSubstitutionSubtable 'cause
-// it has arrays of coverage tables instead of a single coverage table...
-//
-// NOTE: Multiple variable size arrays!!
-struct ChainingContextualSubstitutionFormat3Subtable
-{
-    le_uint16  substFormat;
-    le_uint16  backtrackGlyphCount;
-    Offset  backtrackCoverageTableOffsetArray[ANY_NUMBER];
-  //le_uint16  inputGlyphCount;
-  //Offset  inputCoverageTableOffsetArray[ANY_NUMBER];
-  //le_uint16  lookaheadGlyphCount;
-  //le_uint16  lookaheadCoverageTableOffsetArray[ANY_NUMBER];
-  //le_uint16  substCount;
-  //SubstitutionLookupRecord substLookupRecord[ANY_NUMBER];
-
-    le_uint32  process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
-};
-LE_VAR_ARRAY(ChainingContextualSubstitutionFormat3Subtable, backtrackCoverageTableOffsetArray)
-
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/CoverageTables.cpp b/icu4c/source/layout/CoverageTables.cpp
deleted file mode 100644 (file)
index 82c2d19..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2006 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "OpenTypeUtilities.h"
-#include "CoverageTables.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-le_int32 CoverageTable::getGlyphCoverage(LEGlyphID glyphID) const
-{
-    switch(SWAPW(coverageFormat))
-    {
-    case 0:
-        return -1;
-
-    case 1:
-    {
-        const CoverageFormat1Table *f1Table = (const CoverageFormat1Table *) this;
-
-        return f1Table->getGlyphCoverage(glyphID);
-    }
-
-    case 2:
-    {
-        const CoverageFormat2Table *f2Table = (const CoverageFormat2Table *) this;
-
-        return f2Table->getGlyphCoverage(glyphID);
-    }
-
-    default:
-        return -1;
-    }
-}
-
-le_int32 CoverageFormat1Table::getGlyphCoverage(LEGlyphID glyphID) const
-{
-    TTGlyphID ttGlyphID = (TTGlyphID) LE_GET_GLYPH(glyphID);
-    le_uint16 count = SWAPW(glyphCount);
-    le_uint8 bit = OpenTypeUtilities::highBit(count);
-    le_uint16 power = 1 << bit;
-    le_uint16 extra = count - power;
-    le_uint16 probe = power;
-    le_uint16 index = 0;
-
-       if (count == 0) {
-               return -1;
-       }
-
-    if (SWAPW(glyphArray[extra]) <= ttGlyphID) {
-        index = extra;
-    }
-
-    while (probe > (1 << 0)) {
-        probe >>= 1;
-
-        if (SWAPW(glyphArray[index + probe]) <= ttGlyphID) {
-            index += probe;
-        }
-    }
-
-    if (SWAPW(glyphArray[index]) == ttGlyphID) {
-        return index;
-    }
-
-    return -1;
-}
-
-le_int32 CoverageFormat2Table::getGlyphCoverage(LEGlyphID glyphID) const
-{
-    TTGlyphID ttGlyphID = (TTGlyphID) LE_GET_GLYPH(glyphID);
-    le_uint16 count = SWAPW(rangeCount);
-    le_int32 rangeIndex =
-        OpenTypeUtilities::getGlyphRangeIndex(ttGlyphID, rangeRecordArray, count);
-
-    if (rangeIndex < 0) {
-        return -1;
-    }
-
-    TTGlyphID firstInRange = SWAPW(rangeRecordArray[rangeIndex].firstGlyph);
-    le_uint16  startCoverageIndex = SWAPW(rangeRecordArray[rangeIndex].rangeValue);
-
-    return startCoverageIndex + (ttGlyphID - firstInRange);
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/CoverageTables.h b/icu4c/source/layout/CoverageTables.h
deleted file mode 100644 (file)
index 1cf30e6..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __COVERAGETABLES_H
-#define __COVERAGETABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-
-U_NAMESPACE_BEGIN
-
-struct CoverageTable
-{
-    le_uint16 coverageFormat;
-
-    le_int32 getGlyphCoverage(LEGlyphID glyphID) const;
-};
-
-struct CoverageFormat1Table : CoverageTable
-{
-    le_uint16  glyphCount;
-    TTGlyphID glyphArray[ANY_NUMBER];
-
-    le_int32 getGlyphCoverage(LEGlyphID glyphID) const;
-};
-LE_VAR_ARRAY(CoverageFormat1Table, glyphArray)
-
-
-struct CoverageFormat2Table : CoverageTable
-{
-    le_uint16        rangeCount;
-    GlyphRangeRecord rangeRecordArray[ANY_NUMBER];
-
-    le_int32 getGlyphCoverage(LEGlyphID glyphID) const;
-};
-LE_VAR_ARRAY(CoverageFormat2Table, rangeRecordArray)
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/CursiveAttachmentSubtables.cpp b/icu4c/source/layout/CursiveAttachmentSubtables.cpp
deleted file mode 100644 (file)
index f21e115..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- * (C) Copyright IBM Corp. 1998 - 2015 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "GlyphPositioningTables.h"
-#include "CursiveAttachmentSubtables.h"
-#include "AnchorTables.h"
-#include "GlyphIterator.h"
-#include "OpenTypeUtilities.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-le_uint32 CursiveAttachmentSubtable::process(const LEReferenceTo<CursiveAttachmentSubtable> &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const
-{
-    LEGlyphID glyphID       = glyphIterator->getCurrGlyphID();
-    le_int32  coverageIndex = getGlyphCoverage(base, glyphID, success);
-    le_uint16 eeCount       = SWAPW(entryExitCount);
-
-    LEReferenceToArrayOf<EntryExitRecord>
-        entryExitRecordsArrayRef(base, success, entryExitRecords, coverageIndex);
-
-    if (coverageIndex < 0 || coverageIndex >= eeCount || LE_FAILURE(success)) {
-        glyphIterator->setCursiveGlyph();
-        return 0;
-    }
-
-    LEPoint entryAnchor, exitAnchor;
-    Offset entryOffset = SWAPW(entryExitRecords[coverageIndex].entryAnchor);
-    Offset exitOffset  = SWAPW(entryExitRecords[coverageIndex].exitAnchor);
-
-    if (entryOffset != 0) {
-        const AnchorTable *entryAnchorTable = (const AnchorTable *) ((char *) this + entryOffset);
-
-        entryAnchorTable->getAnchor(glyphID, fontInstance, entryAnchor);
-        glyphIterator->setCursiveEntryPoint(entryAnchor);
-    } else {
-        //glyphIterator->clearCursiveEntryPoint();
-    }
-
-    if (exitOffset != 0) {
-        const AnchorTable *exitAnchorTable = (const AnchorTable *) ((char *) this + exitOffset);
-
-        exitAnchorTable->getAnchor(glyphID, fontInstance, exitAnchor);
-        glyphIterator->setCursiveExitPoint(exitAnchor);
-    } else {
-        //glyphIterator->clearCursiveExitPoint();
-    }
-
-    return 1;
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/CursiveAttachmentSubtables.h b/icu4c/source/layout/CursiveAttachmentSubtables.h
deleted file mode 100644 (file)
index 9e06f7b..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __CURSIVEATTACHMENTSUBTABLES_H
-#define __CURSIVEATTACHMENTSUBTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "GlyphPositioningTables.h"
-
-U_NAMESPACE_BEGIN
-
-class LEFontInstance;
-class GlyphIterator;
-
-struct EntryExitRecord
-{
-    Offset entryAnchor;
-    Offset exitAnchor;
-};
-
-struct CursiveAttachmentSubtable : GlyphPositioningSubtable
-{
-    le_uint16 entryExitCount;
-    EntryExitRecord entryExitRecords[ANY_NUMBER];
-
-    le_uint32  process(const LEReferenceTo<CursiveAttachmentSubtable> &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const;
-};
-LE_VAR_ARRAY(CursiveAttachmentSubtable, entryExitRecords)
-
-U_NAMESPACE_END
-#endif
-
-
diff --git a/icu4c/source/layout/DefaultCharMapper.h b/icu4c/source/layout/DefaultCharMapper.h
deleted file mode 100644 (file)
index 1172746..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- * (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved
- *
- */
-
-#ifndef __DEFAULTCHARMAPPER_H
-#define __DEFAULTCHARMAPPER_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-
-U_NAMESPACE_BEGIN
-
-/**
- * This class is an instance of LECharMapper which
- * implements control character filtering and bidi
- * mirroring.
- *
- * @see LECharMapper
- */
-class DefaultCharMapper : public UMemory, public LECharMapper
-{
-private:
-    le_bool fFilterControls;
-    le_bool fMirror;
-
-    static const LEUnicode32 controlChars[];
-
-    static const le_int32 controlCharsCount;
-
-    static const LEUnicode32 mirroredChars[];
-    static const LEUnicode32 srahCderorrim[];
-
-    static const le_int32 mirroredCharsCount;
-
-public:
-    DefaultCharMapper(le_bool filterControls, le_bool mirror)
-        : fFilterControls(filterControls), fMirror(mirror)
-    {
-        // nothing
-    };
-
-    ~DefaultCharMapper()
-    {
-        // nada
-    };
-
-    LEUnicode32 mapChar(LEUnicode32 ch) const;
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/DeviceTables.cpp b/icu4c/source/layout/DeviceTables.cpp
deleted file mode 100644 (file)
index df3a831..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- * @(#)DeviceTables.cpp 1.5 00/03/15
- *
- * (C) Copyright IBM Corp. 1998 - 2006 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "DeviceTables.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-const le_uint16 DeviceTable::fieldMasks[]    = {0x0003, 0x000F, 0x00FF};
-const le_uint16 DeviceTable::fieldSignBits[] = {0x0002, 0x0008, 0x0080};
-const le_uint16 DeviceTable::fieldBits[]     = {     2,      4,      8};
-
-#define FORMAT_COUNT LE_ARRAY_SIZE(fieldBits)
-
-le_int16 DeviceTable::getAdjustment(le_uint16 ppem) const
-{
-    le_uint16 start = SWAPW(startSize);
-    le_uint16 format = SWAPW(deltaFormat) - 1;
-    le_int16 result = 0;
-    
-    if (ppem >= start && ppem <= SWAPW(endSize) && format < FORMAT_COUNT) {
-        le_uint16 sizeIndex = ppem - start;
-        le_uint16 bits = fieldBits[format];
-        le_uint16 count = 16 / bits;
-        le_uint16 word = SWAPW(deltaValues[sizeIndex / count]);
-        le_uint16 fieldIndex = sizeIndex % count;
-        le_uint16 shift = 16 - (bits * (fieldIndex + 1));
-        le_uint16 field = (word >> shift) & fieldMasks[format];
-
-        result = field;
-
-        if ((field & fieldSignBits[format]) != 0) {
-            result |= ~ fieldMasks[format];
-        }
-    }
-
-    return result;
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/DeviceTables.h b/icu4c/source/layout/DeviceTables.h
deleted file mode 100644 (file)
index 641a326..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- * @(#)DeviceTables.h   1.5 00/03/15
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __DEVICETABLES_H
-#define __DEVICETABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-
-U_NAMESPACE_BEGIN
-
-struct DeviceTable
-{
-    le_uint16  startSize;
-    le_uint16  endSize;
-    le_uint16  deltaFormat;
-    le_uint16  deltaValues[ANY_NUMBER];
-
-    le_int16   getAdjustment(le_uint16 ppem) const;
-
-private:
-    static const le_uint16 fieldMasks[];
-    static const le_uint16 fieldSignBits[];
-    static const le_uint16 fieldBits[];
-};
-LE_VAR_ARRAY(DeviceTable, deltaValues)
-
-U_NAMESPACE_END
-#endif
-
-
diff --git a/icu4c/source/layout/ExtensionSubtables.cpp b/icu4c/source/layout/ExtensionSubtables.cpp
deleted file mode 100644 (file)
index b648818..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- * %W% %E%
- *
- * (C) Copyright IBM Corp. 2008-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "GlyphSubstitutionTables.h"
-#include "LookupProcessor.h"
-#include "ExtensionSubtables.h"
-#include "GlyphIterator.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-// read a 32-bit value that might only be 16-bit-aligned in memory
-static inline le_uint32 READ_LONG(le_uint32 code) {
-    le_uint16* first = ((le_uint16*)&code);
-    le_uint16* second = (((le_uint16*)&code) + 1);
-    return (le_uint32)((SWAPW(*first) << 16) + SWAPW(*second));
-}
-
-// FIXME: should look at the format too... maybe have a sub-class for it?
-le_uint32 ExtensionSubtable::process(const LookupProcessor *lookupProcessor, le_uint16 lookupType,
-                                      GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const
-{
-    const LEReferenceTo<ExtensionSubtable> thisRef(lookupProcessor->getReference(), success); // create a reference to this
-
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    le_uint16 elt = SWAPW(extensionLookupType);
-
-    if (elt != lookupType) {      
-        le_uint32 extOffset = READ_LONG(extensionOffset);
-        LEReferenceTo<LookupSubtable> subtable(thisRef, success, extOffset);
-
-        if(LE_SUCCESS(success)) {
-          return lookupProcessor->applySubtable(subtable, elt, glyphIterator, fontInstance, success);
-        }
-    }
-
-    return 0;
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/ExtensionSubtables.h b/icu4c/source/layout/ExtensionSubtables.h
deleted file mode 100644 (file)
index d122056..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- * %W% %E%
- *
- * (C) Copyright IBM Corp. 2002-2008 - All Rights Reserved
- *
- */
-
-#ifndef __EXTENSIONSUBTABLES_H
-#define __EXTENSIONSUBTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "GlyphSubstitutionTables.h"
-#include "LookupProcessor.h"
-#include "GlyphIterator.h"
-
-U_NAMESPACE_BEGIN
-
-struct ExtensionSubtable //: GlyphSubstitutionSubtable
-{
-    le_uint16 substFormat;
-    le_uint16 extensionLookupType;
-    le_uint32 extensionOffset;
-
-    le_uint32 process(const LookupProcessor *lookupProcessor, le_uint16 lookupType,
-                      GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/Features.cpp b/icu4c/source/layout/Features.cpp
deleted file mode 100644 (file)
index 9c433b5..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- * @(#)Features.cpp 1.4 00/03/15
- *
- * (C) Copyright IBM Corp. 1998-2015 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "OpenTypeUtilities.h"
-#include "OpenTypeTables.h"
-#include "ICUFeatures.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-LEReferenceTo<FeatureTable> FeatureListTable::getFeatureTable(const LETableReference &base, le_uint16 featureIndex, LETag *featureTag, LEErrorCode &success) const
-{
-    LEReferenceToArrayOf<FeatureRecord>
-        featureRecordArrayRef(base, success, featureRecordArray, featureIndex+1);
-
-  if (featureIndex >= SWAPW(featureCount) || LE_FAILURE(success)) {
-    return LEReferenceTo<FeatureTable>();
-  }
-
-    Offset featureTableOffset = featureRecordArray[featureIndex].featureTableOffset;
-
-    *featureTag = SWAPT(featureRecordArray[featureIndex].featureTag);
-
-    return LEReferenceTo<FeatureTable>(base, success, SWAPW(featureTableOffset));
-}
-
-#if 0
-/*
- * Note: according to the OpenType Spec. v 1.4, the entries in the Feature
- * List Table are sorted alphabetically by feature tag; however, there seem
- * to be some fonts which have an unsorted list; that's why the binary search
- * is #if 0'd out and replaced by a linear search.
- *
- * Also note: as of ICU 2.6, this method isn't called anyhow...
- */
-const FeatureTable *FeatureListTable::getFeatureTable(LETag featureTag) const
-{
-#if 0
-    Offset featureTableOffset =
-        OpenTypeUtilities::getTagOffset(featureTag, (TagAndOffsetRecord *) featureRecordArray, SWAPW(featureCount));
-
-    if (featureTableOffset == 0) {
-        return 0;
-    }
-
-    return (const FeatureTable *) ((char *) this + SWAPW(featureTableOffset));
-#else
-    int count = SWAPW(featureCount);
-    
-    for (int i = 0; i < count; i += 1) {
-        if (SWAPT(featureRecordArray[i].featureTag) == featureTag) {
-            return (const FeatureTable *) ((char *) this + SWAPW(featureRecordArray[i].featureTableOffset));
-        }
-    }
-
-    return 0;
-#endif
-}
-#endif
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/GDEFMarkFilter.cpp b/icu4c/source/layout/GDEFMarkFilter.cpp
deleted file mode 100644 (file)
index 0d02d8a..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998 - 2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEGlyphFilter.h"
-#include "GDEFMarkFilter.h"
-#include "GlyphDefinitionTables.h"
-
-U_NAMESPACE_BEGIN
-
-GDEFMarkFilter::GDEFMarkFilter(const LEReferenceTo<GlyphDefinitionTableHeader> &gdefTable, LEErrorCode &success)
-  : classDefTable(gdefTable->getGlyphClassDefinitionTable(gdefTable, success))
-{
-  if(!classDefTable.isValid()) {
-    success = LE_INTERNAL_ERROR;
-  }
-}
-
-GDEFMarkFilter::~GDEFMarkFilter()
-{
-    // nothing to do?
-}
-
-le_bool GDEFMarkFilter::accept(LEGlyphID glyph) const
-{
-    le_int32 glyphClass = classDefTable->getGlyphClass(glyph);
-
-    return glyphClass == gcdMarkGlyph;
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/GDEFMarkFilter.h b/icu4c/source/layout/GDEFMarkFilter.h
deleted file mode 100644 (file)
index 52253f7..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __GDEFMARKFILTER__H
-#define __GDEFMARKFILTER__H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEGlyphFilter.h"
-#include "GlyphDefinitionTables.h"
-
-U_NAMESPACE_BEGIN
-
-class GDEFMarkFilter : public UMemory, public LEGlyphFilter
-{
-private:
-    const LEReferenceTo<GlyphClassDefinitionTable> classDefTable;
-
-    GDEFMarkFilter(const GDEFMarkFilter &other); // forbid copying of this class
-    GDEFMarkFilter &operator=(const GDEFMarkFilter &other); // forbid copying of this class
-
-public:
-    GDEFMarkFilter(const LEReferenceTo<GlyphDefinitionTableHeader> &gdefTable, LEErrorCode &success);
-    virtual ~GDEFMarkFilter();
-
-    virtual le_bool accept(LEGlyphID glyph) const;
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/GXLayoutEngine.cpp b/icu4c/source/layout/GXLayoutEngine.cpp
deleted file mode 100644 (file)
index 02e4aab..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LayoutEngine.h"
-#include "GXLayoutEngine.h"
-#include "LEGlyphStorage.h"
-
-#include "MorphTables.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(GXLayoutEngine)
-
-  GXLayoutEngine::GXLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, const LEReferenceTo<MorphTableHeader> &morphTable, LEErrorCode &success) 
-    : LayoutEngine(fontInstance, scriptCode, languageCode, 0, success), fMorphTable(morphTable)
-{
-  fMorphTable.orphan();
-    // nothing else to do?
-}
-
-GXLayoutEngine::~GXLayoutEngine()
-{
-    reset();
-}
-
-// apply 'mort' table
-le_int32 GXLayoutEngine::computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    mapCharsToGlyphs(chars, offset, count, FALSE, rightToLeft, glyphStorage, success);
-
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    fMorphTable->process(fMorphTable, glyphStorage, success);
-
-    return count;
-}
-
-// apply positional tables
-void GXLayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool /*reverse*/,
-                                          LEGlyphStorage &/*glyphStorage*/, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-
-    // FIXME: no positional processing yet...
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/GXLayoutEngine.h b/icu4c/source/layout/GXLayoutEngine.h
deleted file mode 100644 (file)
index 68333cd..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2014 - All Rights Reserved
- *
- */
-
-#ifndef __GXLAYOUTENGINE_H
-#define __GXLAYOUTENGINE_H
-
-#include "LETypes.h"
-#include "LayoutEngine.h"
-
-#include "MorphTables.h"
-
-U_NAMESPACE_BEGIN
-
-class LEFontInstance;
-class LEGlyphStorage;
-
-/**
- * This class implements layout for QuickDraw GX or Apple Advanced Typograyph (AAT)
- * fonts. A font is a GX or AAT font if it contains a 'mort' table. See Apple's
- * TrueType Reference Manual (http://fonts.apple.com/TTRefMan/index.html) for details.
- * Information about 'mort' tables is in the chapter titled "Font Files."
- *
- * @internal
- */
-class GXLayoutEngine : public LayoutEngine
-{
-public:
-    /**
-     * This is the main constructor. It constructs an instance of GXLayoutEngine for
-     * a particular font, script and language. It takes the 'mort' table as a parameter since
-     * LayoutEngine::layoutEngineFactory has to read the 'mort' table to know that it has a
-     * GX font.
-     *
-     * Note: GX and AAT fonts don't contain any script and language specific tables, so
-     * the script and language are ignored.
-     *
-     * @param fontInstance - the font
-     * @param scriptCode - the script
-     * @param langaugeCode - the language
-     * @param morphTable - the 'mort' table
-     * @param success - set to an error code if the operation fails
-     *
-     * @see LayoutEngine::layoutEngineFactory
-     * @see ScriptAndLangaugeTags.h for script and language codes
-     *
-     * @internal
-     */
-    GXLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, const LEReferenceTo<MorphTableHeader> &morphTable, LEErrorCode &success);
-
-    /**
-     * The destructor, virtual for correct polymorphic invocation.
-     *
-     * @internal
-     */
-    virtual ~GXLayoutEngine();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    static UClassID getStaticClassID();
-
-protected:
-
-    /**
-     * The address of the 'mort' table
-     *
-     * @internal
-     */
-    LEReferenceTo<MorphTableHeader> fMorphTable;
-
-    /**
-     * This method does GX layout using the font's 'mort' table. It converts the
-     * input character codes to glyph indices using mapCharsToGlyphs, and then
-     * applies the 'mort' table.
-     *
-     * Input parameters:
-     * @param chars - the input character context
-     * @param offset - the index of the first character to process
-     * @param count - the number of characters to process
-     * @param max - the number of characters in the input context
-     * @param rightToLeft - <code>TRUE</code> if the text is in a right to left directional run
-     * @param glyphStorage - the glyph storage object. The glyph and char index arrays will be set.
-     *
-     * Output parameters:
-     * @param success - set to an error code if the operation fails
-     *
-     * @return the number of glyphs in the glyph index array
-     *
-     * @internal
-     */
-    virtual le_int32 computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-        LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    /**
-     * This method adjusts the glyph positions using the font's
-     * 'kern', 'trak', 'bsln', 'opbd' and 'just' tables.
-     *
-     * Input parameters:
-     * @param glyphStorage - the object holding the glyph storage. The positions will be updated as needed.
-     *
-     * Output parameters:
-     * @param success - set to an error code if the operation fails
-     *
-     * @internal
-     */
-    virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse,
-                                      LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-};
-
-U_NAMESPACE_END
-#endif
-
diff --git a/icu4c/source/layout/GXLayoutEngine2.cpp b/icu4c/source/layout/GXLayoutEngine2.cpp
deleted file mode 100644 (file)
index 1708259..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LayoutEngine.h"
-#include "GXLayoutEngine2.h"
-#include "LEGlyphStorage.h"
-#include "MorphTables.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(GXLayoutEngine2)
-
-GXLayoutEngine2::GXLayoutEngine2(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, const LEReferenceTo<MorphTableHeader2> &morphTable, le_int32 typoFlags, LEErrorCode &success) 
-  : LayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success), fMorphTable(morphTable)
-{
-  // nothing else to do?
-}
-
-GXLayoutEngine2::~GXLayoutEngine2()
-{
-    reset();
-}
-
-// apply 'morx' table
-le_int32 GXLayoutEngine2::computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-    
-    mapCharsToGlyphs(chars, offset, count, rightToLeft, rightToLeft, glyphStorage, success);
-
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    fMorphTable->process(fMorphTable, glyphStorage, fTypoFlags, success);
-    return count;
-}
-
-// apply positional tables
-void GXLayoutEngine2::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool /*reverse*/,
-                                          LEGlyphStorage &/*glyphStorage*/, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-
-    // FIXME: no positional processing yet...
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/GXLayoutEngine2.h b/icu4c/source/layout/GXLayoutEngine2.h
deleted file mode 100644 (file)
index dd8e7e2..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2014 - All Rights Reserved
- *
- */
-
-#ifndef __GXLAYOUTENGINE2_H
-#define __GXLAYOUTENGINE2_H
-
-#include "LETypes.h"
-#include "LayoutEngine.h"
-
-#include "MorphTables.h"
-
-U_NAMESPACE_BEGIN
-
-class LEFontInstance;
-class LEGlyphStorage;
-
-/**
- * This class implements layout for QuickDraw GX or Apple Advanced Typograyph (AAT)
- * fonts. A font is a GX or AAT font if it contains a 'mort' table. See Apple's
- * TrueType Reference Manual (http://fonts.apple.com/TTRefMan/index.html) for details.
- * Information about 'mort' tables is in the chapter titled "Font Files."
- *
- * @internal
- */
-class GXLayoutEngine2 : public LayoutEngine
-{
-public:
-    /**
-     * This is the main constructor. It constructs an instance of GXLayoutEngine for
-     * a particular font, script and language. It takes the 'mort' table as a parameter since
-     * LayoutEngine::layoutEngineFactory has to read the 'mort' table to know that it has a
-     * GX font.
-     *
-     * Note: GX and AAT fonts don't contain any script and language specific tables, so
-     * the script and language are ignored.
-     *
-     * @param fontInstance - the font
-     * @param scriptCode - the script
-     * @param langaugeCode - the language
-     * @param morphTable - the 'mort' table
-     * @param success - set to an error code if the operation fails
-     *
-     * @see LayoutEngine::layoutEngineFactory
-     * @see ScriptAndLangaugeTags.h for script and language codes
-     *
-     * @internal
-     */
-    GXLayoutEngine2(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, const LEReferenceTo<MorphTableHeader2> &morphTable, le_int32 typoFlags, LEErrorCode &success);
-
-    /**
-     * The destructor, virtual for correct polymorphic invocation.
-     *
-     * @internal
-     */
-    virtual ~GXLayoutEngine2();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    static UClassID getStaticClassID();
-
-protected:
-
-    /**
-     * The address of the 'mort' table
-     *
-     * @internal
-     */
-    const LEReferenceTo<MorphTableHeader2> fMorphTable;
-
-    /**
-     * This method does GX layout using the font's 'mort' table. It converts the
-     * input character codes to glyph indices using mapCharsToGlyphs, and then
-     * applies the 'mort' table.
-     *
-     * Input parameters:
-     * @param chars - the input character context
-     * @param offset - the index of the first character to process
-     * @param count - the number of characters to process
-     * @param max - the number of characters in the input context
-     * @param rightToLeft - <code>TRUE</code> if the text is in a right to left directional run
-     * @param glyphStorage - the glyph storage object. The glyph and char index arrays will be set.
-     *
-     * Output parameters:
-     * @param success - set to an error code if the operation fails
-     *
-     * @return the number of glyphs in the glyph index array
-     *
-     * @internal
-     */
-    virtual le_int32 computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-        LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    /**
-     * This method adjusts the glyph positions using the font's
-     * 'kern', 'trak', 'bsln', 'opbd' and 'just' tables.
-     *
-     * Input parameters:
-     * @param glyphStorage - the object holding the glyph storage. The positions will be updated as needed.
-     *
-     * Output parameters:
-     * @param success - set to an error code if the operation fails
-     *
-     * @internal
-     */
-    virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse,
-                                      LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-};
-
-U_NAMESPACE_END
-#endif
-
diff --git a/icu4c/source/layout/GlyphDefinitionTables.cpp b/icu4c/source/layout/GlyphDefinitionTables.cpp
deleted file mode 100644 (file)
index a50969d..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998 - 2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "GlyphDefinitionTables.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-const LEReferenceTo<GlyphClassDefinitionTable>
-GlyphDefinitionTableHeader::getGlyphClassDefinitionTable(const LEReferenceTo<GlyphDefinitionTableHeader>& base,
-                                                         LEErrorCode &success) const
-{
-  if(LE_FAILURE(success)) return LEReferenceTo<GlyphClassDefinitionTable>();
-  return LEReferenceTo<GlyphClassDefinitionTable>(base, success, SWAPW(glyphClassDefOffset));
-}
-
-const LEReferenceTo<AttachmentListTable>
-GlyphDefinitionTableHeader::getAttachmentListTable(const LEReferenceTo<GlyphDefinitionTableHeader>& base,
-                                                         LEErrorCode &success) const
-{
-    if(LE_FAILURE(success)) return LEReferenceTo<AttachmentListTable>();
-    return LEReferenceTo<AttachmentListTable>(base, success, SWAPW(attachListOffset));
-}
-
-const LEReferenceTo<LigatureCaretListTable>
-GlyphDefinitionTableHeader::getLigatureCaretListTable(const LEReferenceTo<GlyphDefinitionTableHeader>& base,
-                                                         LEErrorCode &success) const
-{
-    if(LE_FAILURE(success)) return LEReferenceTo<LigatureCaretListTable>();
-    return LEReferenceTo<LigatureCaretListTable>(base, success, SWAPW(ligCaretListOffset));
-}
-
-const LEReferenceTo<MarkAttachClassDefinitionTable>
-GlyphDefinitionTableHeader::getMarkAttachClassDefinitionTable(const LEReferenceTo<GlyphDefinitionTableHeader>& base,
-                                                         LEErrorCode &success) const
-{
-    if(LE_FAILURE(success)) return LEReferenceTo<MarkAttachClassDefinitionTable>();
-    return LEReferenceTo<MarkAttachClassDefinitionTable>(base, success, SWAPW(MarkAttachClassDefOffset));
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/GlyphDefinitionTables.h b/icu4c/source/layout/GlyphDefinitionTables.h
deleted file mode 100644 (file)
index aca5716..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __GLYPHDEFINITIONTABLES_H
-#define __GLYPHDEFINITIONTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "ClassDefinitionTables.h"
-
-U_NAMESPACE_BEGIN
-
-typedef ClassDefinitionTable GlyphClassDefinitionTable;
-
-enum GlyphClassDefinitions
-{
-    gcdNoGlyphClass     = 0,
-    gcdSimpleGlyph      = 1,
-    gcdLigatureGlyph    = 2,
-    gcdMarkGlyph        = 3,
-    gcdComponentGlyph   = 4
-};
-
-struct AttachmentListTable
-{
-    Offset  coverageTableOffset;
-    le_uint16  glyphCount;
-    Offset  attachPointTableOffsetArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(AttachmentListTable, attachPointTableOffsetArray)
-
-struct AttachPointTable
-{
-    le_uint16  pointCount;
-    le_uint16  pointIndexArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(AttachPointTable, pointIndexArray)
-
-struct LigatureCaretListTable
-{
-    Offset  coverageTableOffset;
-    le_uint16  ligGlyphCount;
-    Offset  ligGlyphTableOffsetArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(LigatureCaretListTable, ligGlyphTableOffsetArray)
-
-struct LigatureGlyphTable
-{
-    le_uint16  caretCount;
-    Offset  caretValueTableOffsetArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(LigatureGlyphTable, caretValueTableOffsetArray)
-
-struct CaretValueTable
-{
-    le_uint16  caretValueFormat;
-};
-
-struct CaretValueFormat1Table : CaretValueTable
-{
-    le_int16   coordinate;
-};
-
-struct CaretValueFormat2Table : CaretValueTable
-{
-    le_uint16  caretValuePoint;
-};
-
-struct CaretValueFormat3Table : CaretValueTable
-{
-    le_int16   coordinate;
-    Offset  deviceTableOffset;
-};
-
-typedef ClassDefinitionTable MarkAttachClassDefinitionTable;
-
-struct GlyphDefinitionTableHeader
-{
-    fixed32 version;
-    Offset  glyphClassDefOffset;
-    Offset  attachListOffset;
-    Offset  ligCaretListOffset;
-    Offset  MarkAttachClassDefOffset;
-
-    const LEReferenceTo<GlyphClassDefinitionTable> 
-    getGlyphClassDefinitionTable(const LEReferenceTo<GlyphDefinitionTableHeader>& base,
-                                 LEErrorCode &success) const;
-    const LEReferenceTo<AttachmentListTable> 
-    getAttachmentListTable(const LEReferenceTo<GlyphDefinitionTableHeader>& base,
-                           LEErrorCode &success)const ;
-    const LEReferenceTo<LigatureCaretListTable> 
-    getLigatureCaretListTable(const LEReferenceTo<GlyphDefinitionTableHeader>& base,
-                              LEErrorCode &success) const;
-    const LEReferenceTo<MarkAttachClassDefinitionTable>
-    getMarkAttachClassDefinitionTable(const LEReferenceTo<GlyphDefinitionTableHeader>& base,
-                                      LEErrorCode &success) const;
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/GlyphIterator.cpp b/icu4c/source/layout/GlyphIterator.cpp
deleted file mode 100644 (file)
index 0351a73..0000000
+++ /dev/null
@@ -1,537 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "GlyphDefinitionTables.h"
-#include "GlyphPositionAdjustments.h"
-#include "GlyphIterator.h"
-#include "LEGlyphStorage.h"
-#include "Lookups.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-GlyphIterator::GlyphIterator(LEGlyphStorage &theGlyphStorage, GlyphPositionAdjustments *theGlyphPositionAdjustments, le_bool rightToLeft, le_uint16 theLookupFlags,
-                             FeatureMask theFeatureMask, const LEReferenceTo<GlyphDefinitionTableHeader> &theGlyphDefinitionTableHeader)
-  : direction(1), position(-1), nextLimit(-1), prevLimit(-1),
-    glyphStorage(theGlyphStorage), glyphPositionAdjustments(theGlyphPositionAdjustments),
-    srcIndex(-1), destIndex(-1), lookupFlags(theLookupFlags), featureMask(theFeatureMask), glyphGroup(0),
-    glyphClassDefinitionTable(), markAttachClassDefinitionTable()
-
-{
-  LEErrorCode success = LE_NO_ERROR; // TODO
-    le_int32 glyphCount = glyphStorage.getGlyphCount();
-
-    if (theGlyphDefinitionTableHeader.isValid()) {
-      glyphClassDefinitionTable = theGlyphDefinitionTableHeader
-        -> getGlyphClassDefinitionTable(theGlyphDefinitionTableHeader, success);
-      markAttachClassDefinitionTable = theGlyphDefinitionTableHeader
-        ->getMarkAttachClassDefinitionTable(theGlyphDefinitionTableHeader, success);
-    }
-
-    nextLimit = glyphCount;
-
-    if (rightToLeft) {
-        direction = -1;
-        position = glyphCount;
-        nextLimit = -1;
-        prevLimit = glyphCount;
-    }
-    filterResetCache();
-}
-
-GlyphIterator::GlyphIterator(GlyphIterator &that)
-  : glyphStorage(that.glyphStorage)
-{
-    direction    = that.direction;
-    position     = that.position;
-    nextLimit    = that.nextLimit;
-    prevLimit    = that.prevLimit;
-
-    glyphPositionAdjustments = that.glyphPositionAdjustments;
-    srcIndex = that.srcIndex;
-    destIndex = that.destIndex;
-    lookupFlags = that.lookupFlags;
-    featureMask = that.featureMask;
-    glyphGroup  = that.glyphGroup;
-    glyphClassDefinitionTable = that.glyphClassDefinitionTable;
-    markAttachClassDefinitionTable = that.markAttachClassDefinitionTable;
-    filterResetCache();
-}
-
-GlyphIterator::GlyphIterator(GlyphIterator &that, FeatureMask newFeatureMask)
-  : glyphStorage(that.glyphStorage)
-{
-    direction    = that.direction;
-    position     = that.position;
-    nextLimit    = that.nextLimit;
-    prevLimit    = that.prevLimit;
-
-    glyphPositionAdjustments = that.glyphPositionAdjustments;
-    srcIndex = that.srcIndex;
-    destIndex = that.destIndex;
-    lookupFlags = that.lookupFlags;
-    featureMask = newFeatureMask;
-    glyphGroup  = 0;
-    glyphClassDefinitionTable = that.glyphClassDefinitionTable;
-    markAttachClassDefinitionTable = that.markAttachClassDefinitionTable;
-    filterResetCache();
-}
-
-GlyphIterator::GlyphIterator(GlyphIterator &that, le_uint16 newLookupFlags)
-  : glyphStorage(that.glyphStorage)
-{
-    direction    = that.direction;
-    position     = that.position;
-    nextLimit    = that.nextLimit;
-    prevLimit    = that.prevLimit;
-
-    glyphPositionAdjustments = that.glyphPositionAdjustments;
-    srcIndex = that.srcIndex;
-    destIndex = that.destIndex;
-    lookupFlags = newLookupFlags;
-    featureMask = that.featureMask;
-    glyphGroup  = that.glyphGroup;
-    glyphClassDefinitionTable = that.glyphClassDefinitionTable;
-    markAttachClassDefinitionTable = that.markAttachClassDefinitionTable;
-    filterResetCache();
-}
-
-GlyphIterator::~GlyphIterator()
-{
-    // nothing to do, right?
-}
-
-void GlyphIterator::reset(le_uint16 newLookupFlags, FeatureMask newFeatureMask)
-{
-    position     = prevLimit;
-    featureMask  = newFeatureMask;
-    glyphGroup   = 0;
-    lookupFlags  = newLookupFlags;
-    filterResetCache();
-}
-
-LEGlyphID *GlyphIterator::insertGlyphs(le_int32 count, LEErrorCode& success)
-{
-    return glyphStorage.insertGlyphs(position, count, success);
-}
-
-le_int32 GlyphIterator::applyInsertions()
-{
-    le_int32 newGlyphCount = glyphStorage.applyInsertions();
-
-    if (direction < 0) {
-        prevLimit = newGlyphCount;
-    } else {
-        nextLimit = newGlyphCount;
-    }
-
-    return newGlyphCount;
-}
-
-le_int32 GlyphIterator::getCurrStreamPosition() const
-{
-    return position;
-}
-
-le_bool GlyphIterator::isRightToLeft() const
-{
-    return direction < 0;
-}
-
-le_bool GlyphIterator::ignoresMarks() const
-{
-    return (lookupFlags & lfIgnoreMarks) != 0;
-}
-
-le_bool GlyphIterator::baselineIsLogicalEnd() const
-{
-    return (lookupFlags & lfBaselineIsLogicalEnd) != 0;
-}
-
-LEGlyphID GlyphIterator::getCurrGlyphID() const
-{
-    if (direction < 0) {
-        if (position <= nextLimit || position >= prevLimit) {
-            return 0xFFFF;
-        }
-    } else {
-        if (position <= prevLimit || position >= nextLimit) {
-            return 0xFFFF;
-        }
-    }
-
-    return glyphStorage[position];
-}
-
-void GlyphIterator::getCursiveEntryPoint(LEPoint &entryPoint) const
-{
-    if (direction < 0) {
-        if (position <= nextLimit || position >= prevLimit) {
-            return;
-        }
-    } else {
-        if (position <= prevLimit || position >= nextLimit) {
-            return;
-        }
-    }
-
-    glyphPositionAdjustments->getEntryPoint(position, entryPoint);
-}
-
-void GlyphIterator::getCursiveExitPoint(LEPoint &exitPoint) const
-{
-    if (direction < 0) {
-        if (position <= nextLimit || position >= prevLimit) {
-            return;
-        }
-    } else {
-        if (position <= prevLimit || position >= nextLimit) {
-            return;
-        }
-    }
-
-    glyphPositionAdjustments->getExitPoint(position, exitPoint);
-}
-
-void GlyphIterator::setCurrGlyphID(TTGlyphID glyphID)
-{
-    LEGlyphID glyph = glyphStorage[position];
-
-    glyphStorage[position] = LE_SET_GLYPH(glyph, glyphID);
-}
-
-void GlyphIterator::setCurrStreamPosition(le_int32 newPosition)
-{
-    if (direction < 0) {
-        if (newPosition >= prevLimit) {
-            position = prevLimit;
-            return;
-        }
-
-        if (newPosition <= nextLimit) {
-            position = nextLimit;
-            return;
-        }
-    } else {
-        if (newPosition <= prevLimit) {
-            position = prevLimit;
-            return;
-        }
-
-        if (newPosition >= nextLimit) {
-            position = nextLimit;
-            return;
-        }
-    }
-
-    position = newPosition - direction;
-    next();
-}
-
-void GlyphIterator::setCurrGlyphBaseOffset(le_int32 baseOffset)
-{
-    if (direction < 0) {
-        if (position <= nextLimit || position >= prevLimit) {
-            return;
-        }
-    } else {
-        if (position <= prevLimit || position >= nextLimit) {
-            return;
-        }
-    }
-
-    glyphPositionAdjustments->setBaseOffset(position, baseOffset);
-}
-
-void GlyphIterator::adjustCurrGlyphPositionAdjustment(float xPlacementAdjust, float yPlacementAdjust,
-                                                      float xAdvanceAdjust, float yAdvanceAdjust)
-{
-    if (direction < 0) {
-        if (position <= nextLimit || position >= prevLimit) {
-            return;
-        }
-    } else {
-        if (position <= prevLimit || position >= nextLimit) {
-            return;
-        }
-    }
-
-    glyphPositionAdjustments->adjustXPlacement(position, xPlacementAdjust);
-    glyphPositionAdjustments->adjustYPlacement(position, yPlacementAdjust);
-    glyphPositionAdjustments->adjustXAdvance(position, xAdvanceAdjust);
-    glyphPositionAdjustments->adjustYAdvance(position, yAdvanceAdjust);
-}
-
-void GlyphIterator::setCurrGlyphPositionAdjustment(float xPlacementAdjust, float yPlacementAdjust,
-                                                      float xAdvanceAdjust, float yAdvanceAdjust)
-{
-    if (direction < 0) {
-        if (position <= nextLimit || position >= prevLimit) {
-            return;
-        }
-    } else {
-        if (position <= prevLimit || position >= nextLimit) {
-            return;
-        }
-    }
-
-    glyphPositionAdjustments->setXPlacement(position, xPlacementAdjust);
-    glyphPositionAdjustments->setYPlacement(position, yPlacementAdjust);
-    glyphPositionAdjustments->setXAdvance(position, xAdvanceAdjust);
-    glyphPositionAdjustments->setYAdvance(position, yAdvanceAdjust);
-}
-
-void GlyphIterator::clearCursiveEntryPoint()
-{
-    if (direction < 0) {
-        if (position <= nextLimit || position >= prevLimit) {
-            return;
-        }
-    } else {
-        if (position <= prevLimit || position >= nextLimit) {
-            return;
-        }
-    }
-
-    glyphPositionAdjustments->clearEntryPoint(position);
-}
-
-void GlyphIterator::clearCursiveExitPoint()
-{
-    if (direction < 0) {
-        if (position <= nextLimit || position >= prevLimit) {
-            return;
-        }
-    } else {
-        if (position <= prevLimit || position >= nextLimit) {
-            return;
-        }
-    }
-
-    glyphPositionAdjustments->clearExitPoint(position);
-}
-
-void GlyphIterator::setCursiveEntryPoint(LEPoint &entryPoint)
-{
-    if (direction < 0) {
-        if (position <= nextLimit || position >= prevLimit) {
-            return;
-        }
-    } else {
-        if (position <= prevLimit || position >= nextLimit) {
-            return;
-        }
-    }
-
-    glyphPositionAdjustments->setEntryPoint(position, entryPoint, baselineIsLogicalEnd());
-}
-
-void GlyphIterator::setCursiveExitPoint(LEPoint &exitPoint)
-{
-    if (direction < 0) {
-        if (position <= nextLimit || position >= prevLimit) {
-            return;
-        }
-    } else {
-        if (position <= prevLimit || position >= nextLimit) {
-            return;
-        }
-    }
-
-    glyphPositionAdjustments->setExitPoint(position, exitPoint, baselineIsLogicalEnd());
-}
-
-void GlyphIterator::setCursiveGlyph()
-{
-    if (direction < 0) {
-        if (position <= nextLimit || position >= prevLimit) {
-            return;
-        }
-    } else {
-        if (position <= prevLimit || position >= nextLimit) {
-            return;
-        }
-    }
-
-    glyphPositionAdjustments->setCursiveGlyph(position, baselineIsLogicalEnd());
-}
-
-void GlyphIterator::filterResetCache(void) {
-  filterCacheValid = FALSE;
-}
-
-le_bool GlyphIterator::filterGlyph(le_uint32 index)
-{
-    LEGlyphID glyphID = glyphStorage[index];
-
-    if (!filterCacheValid || filterCache.id != glyphID) {
-      filterCache.id = glyphID;
-
-      le_bool &filterResult = filterCache.result;  // NB: Making this a reference to accept the updated value, in case
-                                               // we want more fancy cacheing in the future.
-      if (LE_GET_GLYPH(glyphID) >= 0xFFFE) {
-        filterResult = TRUE;
-      } else {
-        LEErrorCode success = LE_NO_ERROR;
-        le_int32 glyphClass = gcdNoGlyphClass;
-        if (glyphClassDefinitionTable.isValid()) {
-          glyphClass = glyphClassDefinitionTable->getGlyphClass(glyphClassDefinitionTable, glyphID, success);
-        }
-        switch (glyphClass) {
-        case gcdNoGlyphClass:
-          filterResult = FALSE;
-          break;
-
-        case gcdSimpleGlyph:
-          filterResult = (lookupFlags & lfIgnoreBaseGlyphs) != 0;
-          break;
-
-        case gcdLigatureGlyph:
-          filterResult = (lookupFlags & lfIgnoreLigatures) != 0;
-          break;
-
-        case gcdMarkGlyph: 
-          if ((lookupFlags & lfIgnoreMarks) != 0) {
-            filterResult = TRUE;
-          } else {
-            le_uint16 markAttachType = (lookupFlags & lfMarkAttachTypeMask) >> lfMarkAttachTypeShift;
-            
-            if ((markAttachType != 0) && (markAttachClassDefinitionTable.isValid())) {
-              filterResult = (markAttachClassDefinitionTable
-                          -> getGlyphClass(markAttachClassDefinitionTable, glyphID, success) != markAttachType);
-            } else {
-              filterResult = FALSE;
-            }
-          }
-          break;
-
-        case gcdComponentGlyph:
-          filterResult = ((lookupFlags & lfIgnoreBaseGlyphs) != 0);
-          break;
-
-        default:
-          filterResult = FALSE;
-          break;
-        }
-      }
-      filterCacheValid = TRUE;
-    }
-    
-    return filterCache.result;
-}
-
-le_bool GlyphIterator::hasFeatureTag(le_bool matchGroup) const
-{
-    if (featureMask == 0) {
-        return TRUE;
-    }
-
-    LEErrorCode success = LE_NO_ERROR;
-    FeatureMask fm = glyphStorage.getAuxData(position, success);
-
-    return ((fm & featureMask) == featureMask) && (!matchGroup || (le_int32)(fm & LE_GLYPH_GROUP_MASK) == glyphGroup);
-}
-
-le_bool GlyphIterator::findFeatureTag()
-{
-  //glyphGroup = 0;
-
-    while (nextInternal()) {
-        if (hasFeatureTag(FALSE)) {
-            LEErrorCode success = LE_NO_ERROR;
-
-            glyphGroup = (glyphStorage.getAuxData(position, success) & LE_GLYPH_GROUP_MASK);
-            return TRUE;
-        }
-    }
-
-    return FALSE;
-}
-
-
-le_bool GlyphIterator::nextInternal(le_uint32 delta)
-{
-    le_int32 newPosition = position;
-
-    while (newPosition != nextLimit && delta > 0) {
-        do {
-            newPosition += direction;
-            //fprintf(stderr,"%s:%d:%s: newPosition = %d, delta = %d\n", __FILE__, __LINE__, __FUNCTION__, newPosition, delta);
-        } while (newPosition != nextLimit && filterGlyph(newPosition));
-
-        delta -= 1;
-    }
-
-    position = newPosition;
-
-    //fprintf(stderr,"%s:%d:%s: exit position = %d, delta = %d\n", __FILE__, __LINE__, __FUNCTION__, position, delta);
-    return position != nextLimit;
-}
-
-le_bool GlyphIterator::next(le_uint32 delta)
-{
-    return nextInternal(delta) && hasFeatureTag(TRUE);
-}
-
-le_bool GlyphIterator::prevInternal(le_uint32 delta)
-{
-    le_int32 newPosition = position;
-
-    while (newPosition != prevLimit && delta > 0) {
-        do {
-            newPosition -= direction;
-            //fprintf(stderr,"%s:%d:%s: newPosition = %d, delta = %d\n", __FILE__, __LINE__, __FUNCTION__, newPosition, delta);
-        } while (newPosition != prevLimit && filterGlyph(newPosition));
-
-        delta -= 1;
-    }
-
-    position = newPosition;
-
-    //fprintf(stderr,"%s:%d:%s: exit position = %d, delta = %d\n", __FILE__, __LINE__, __FUNCTION__, position, delta);
-    return position != prevLimit;
-}
-
-le_bool GlyphIterator::prev(le_uint32 delta)
-{
-    return prevInternal(delta) && hasFeatureTag(TRUE);
-}
-
-le_int32 GlyphIterator::getMarkComponent(le_int32 markPosition) const
-{
-    le_int32 component = 0;
-    le_int32 posn;
-
-    for (posn = position; posn != markPosition; posn += direction) {
-        if (glyphStorage[posn] == 0xFFFE) {
-            component += 1;
-        }
-    }
-
-    return component;
-}
-
-// This is basically prevInternal except that it
-// doesn't take a delta argument, and it doesn't
-// filter out 0xFFFE glyphs.
-le_bool GlyphIterator::findMark2Glyph()
-{
-    le_int32 newPosition = position;
-
-    do {
-        newPosition -= direction;
-    } while (newPosition != prevLimit && glyphStorage[newPosition] != 0xFFFE && filterGlyph(newPosition));
-
-    position = newPosition;
-
-    return position != prevLimit;
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/GlyphIterator.h b/icu4c/source/layout/GlyphIterator.h
deleted file mode 100644 (file)
index 6f8f299..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __GLYPHITERATOR_H
-#define __GLYPHITERATOR_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "GlyphDefinitionTables.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-class GlyphPositionAdjustments;
-
-class GlyphIterator : public UMemory {
-public:
-    GlyphIterator(LEGlyphStorage &theGlyphStorage, GlyphPositionAdjustments *theGlyphPositionAdjustments, le_bool rightToLeft, le_uint16 theLookupFlags,
-                  FeatureMask theFeatureMask, const LEReferenceTo<GlyphDefinitionTableHeader> &theGlyphDefinitionTableHeader);
-
-    GlyphIterator(GlyphIterator &that);
-
-    GlyphIterator(GlyphIterator &that, FeatureMask newFeatureMask);
-
-    GlyphIterator(GlyphIterator &that, le_uint16 newLookupFlags);
-
-    virtual ~GlyphIterator();
-
-    void reset(le_uint16 newLookupFlags, LETag newFeatureTag);
-
-    le_bool next(le_uint32 delta = 1);
-    le_bool prev(le_uint32 delta = 1);
-    le_bool findFeatureTag();
-
-    le_bool isRightToLeft() const;
-    le_bool ignoresMarks() const;
-
-    le_bool baselineIsLogicalEnd() const;
-
-    LEGlyphID getCurrGlyphID() const;
-    le_int32  getCurrStreamPosition() const;
-
-    le_int32  getMarkComponent(le_int32 markPosition) const;
-    le_bool   findMark2Glyph();
-
-    void getCursiveEntryPoint(LEPoint &entryPoint) const;
-    void getCursiveExitPoint(LEPoint &exitPoint) const;
-
-    void setCurrGlyphID(TTGlyphID glyphID);
-    void setCurrStreamPosition(le_int32 position);
-    void setCurrGlyphBaseOffset(le_int32 baseOffset);
-    void adjustCurrGlyphPositionAdjustment(float xPlacementAdjust, float yPlacementAdjust,
-                                           float xAdvanceAdjust,   float yAdvanceAdjust);
-
-    void setCurrGlyphPositionAdjustment(float xPlacementAdjust, float yPlacementAdjust,
-                                        float xAdvanceAdjust,   float yAdvanceAdjust);
-
-    void clearCursiveEntryPoint();
-    void clearCursiveExitPoint();
-    void setCursiveEntryPoint(LEPoint &entryPoint);
-    void setCursiveExitPoint(LEPoint &exitPoint);
-    void setCursiveGlyph();
-
-    LEGlyphID *insertGlyphs(le_int32 count, LEErrorCode& success);
-    le_int32 applyInsertions();
-
-private:
-    le_bool filterGlyph(le_uint32 index);
-    le_bool hasFeatureTag(le_bool matchGroup) const;
-    le_bool nextInternal(le_uint32 delta = 1);
-    le_bool prevInternal(le_uint32 delta = 1);
-
-    le_int32  direction;
-    le_int32  position;
-    le_int32  nextLimit;
-    le_int32  prevLimit;
-
-    LEGlyphStorage &glyphStorage;
-    GlyphPositionAdjustments *glyphPositionAdjustments;
-
-    le_int32    srcIndex;
-    le_int32    destIndex;
-    le_uint16   lookupFlags;
-    FeatureMask featureMask;
-    le_int32    glyphGroup;
-
-    LEReferenceTo<GlyphClassDefinitionTable> glyphClassDefinitionTable;
-    LEReferenceTo<MarkAttachClassDefinitionTable> markAttachClassDefinitionTable;
-
-    GlyphIterator &operator=(const GlyphIterator &other); // forbid copying of this class
-
-    struct {
-      LEGlyphID   id;
-      le_bool     result;
-    } filterCache;
-    le_bool   filterCacheValid;
-
-    void filterResetCache(void);
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/GlyphLookupTables.cpp b/icu4c/source/layout/GlyphLookupTables.cpp
deleted file mode 100644 (file)
index e432f01..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "ScriptAndLanguage.h"
-#include "GlyphLookupTables.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-le_bool GlyphLookupTableHeader::coversScript(const LETableReference &base, LETag scriptTag, LEErrorCode &success) const
-{
-  LEReferenceTo<ScriptListTable> scriptListTable(base, success, SWAPW(scriptListOffset));
-
-  return (scriptListOffset != 0) && scriptListTable->findScript(scriptListTable, scriptTag, success) .isValid();
-}
-
-le_bool GlyphLookupTableHeader::coversScriptAndLanguage(const LETableReference &base, LETag scriptTag, LETag languageTag, LEErrorCode &success, le_bool exactMatch) const
-{
-  LEReferenceTo<ScriptListTable> scriptListTable(base, success, SWAPW(scriptListOffset));
-  LEReferenceTo<LangSysTable> langSysTable = scriptListTable->findLanguage(scriptListTable,
-                                    scriptTag, languageTag, success, exactMatch);
-
-    // FIXME: could check featureListOffset, lookupListOffset, and lookup count...
-    // Note: don't have to SWAPW langSysTable->featureCount to check for non-zero.
-  return LE_SUCCESS(success)&&langSysTable.isValid() && langSysTable->featureCount != 0;
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/GlyphLookupTables.h b/icu4c/source/layout/GlyphLookupTables.h
deleted file mode 100644 (file)
index 6e4e41d..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __GLYPHLOOKUPTABLES_H
-#define __GLYPHLOOKUPTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-
-U_NAMESPACE_BEGIN
-
-struct GlyphLookupTableHeader
-{
-    fixed32 version;
-    Offset  scriptListOffset;
-    Offset  featureListOffset;
-    Offset  lookupListOffset;
-
-  le_bool coversScript(const LETableReference &base, LETag scriptTag, LEErrorCode &success) const;
-  le_bool coversScriptAndLanguage(const LETableReference &base, LETag scriptTag, LETag languageTag, LEErrorCode &success, le_bool exactMatch = FALSE) const;
-};
-
-U_NAMESPACE_END
-
-#endif
-
diff --git a/icu4c/source/layout/GlyphPositionAdjustments.cpp b/icu4c/source/layout/GlyphPositionAdjustments.cpp
deleted file mode 100644 (file)
index 2f5675a..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "GlyphPositionAdjustments.h"
-#include "LEGlyphStorage.h"
-#include "LEFontInstance.h"
-
-U_NAMESPACE_BEGIN
-
-#define CHECK_ALLOCATE_ARRAY(array, type, size) \
-    if (array == NULL) { \
-        array = (type *) new type[size]; \
-    }
-
-GlyphPositionAdjustments::GlyphPositionAdjustments(le_int32 glyphCount)
-    : fGlyphCount(glyphCount), fEntryExitPoints(NULL), fAdjustments(NULL)
-{
-    fAdjustments = (Adjustment *) new Adjustment[glyphCount];
-}
-
-GlyphPositionAdjustments::~GlyphPositionAdjustments()
-{
-    delete[] fEntryExitPoints;
-    delete[] fAdjustments;
-}
-
-const LEPoint *GlyphPositionAdjustments::getEntryPoint(le_int32 index, LEPoint &entryPoint) const
-{
-    if (fEntryExitPoints == NULL) {
-        return NULL;
-    }
-
-    return fEntryExitPoints[index].getEntryPoint(entryPoint);
-}
-
-const LEPoint *GlyphPositionAdjustments::getExitPoint(le_int32 index, LEPoint &exitPoint)const
-{
-    if (fEntryExitPoints == NULL) {
-        return NULL;
-    }
-
-    return fEntryExitPoints[index].getExitPoint(exitPoint);
-}
-
-void GlyphPositionAdjustments::clearEntryPoint(le_int32 index)
-{
-    CHECK_ALLOCATE_ARRAY(fEntryExitPoints, EntryExitPoint, fGlyphCount);
-
-    fEntryExitPoints[index].clearEntryPoint();
-}
-
-void GlyphPositionAdjustments::clearExitPoint(le_int32 index)
-{
-    CHECK_ALLOCATE_ARRAY(fEntryExitPoints, EntryExitPoint, fGlyphCount);
-
-    fEntryExitPoints[index].clearExitPoint();
-}
-
-void GlyphPositionAdjustments::setEntryPoint(le_int32 index, LEPoint &newEntryPoint, le_bool baselineIsLogicalEnd)
-{
-    CHECK_ALLOCATE_ARRAY(fEntryExitPoints, EntryExitPoint, fGlyphCount);
-
-    fEntryExitPoints[index].setEntryPoint(newEntryPoint, baselineIsLogicalEnd);
-}
-
-void GlyphPositionAdjustments::setExitPoint(le_int32 index, LEPoint &newExitPoint, le_bool baselineIsLogicalEnd)
-{
-    CHECK_ALLOCATE_ARRAY(fEntryExitPoints, EntryExitPoint, fGlyphCount);
-
-    fEntryExitPoints[index].setExitPoint(newExitPoint, baselineIsLogicalEnd);
-}
-
-void GlyphPositionAdjustments::setCursiveGlyph(le_int32 index, le_bool baselineIsLogicalEnd)
-{
-    CHECK_ALLOCATE_ARRAY(fEntryExitPoints, EntryExitPoint, fGlyphCount);
-
-    fEntryExitPoints[index].setCursiveGlyph(baselineIsLogicalEnd);
-}
-
-void GlyphPositionAdjustments::applyCursiveAdjustments(LEGlyphStorage &glyphStorage, le_bool rightToLeft, const LEFontInstance *fontInstance)
-{
-    if (! hasCursiveGlyphs()) {
-        return;
-    }
-
-    le_int32 start = 0, end = fGlyphCount, dir = 1;
-    le_int32 firstExitPoint = -1, lastExitPoint = -1;
-    LEPoint entryAnchor, exitAnchor, pixels;
-    LEGlyphID lastExitGlyphID = 0;
-    float baselineAdjustment = 0;
-
-    // This removes a possible warning about
-    // using exitAnchor before it's been initialized.
-    exitAnchor.fX = exitAnchor.fY = 0;
-
-    if (rightToLeft) {
-        start = fGlyphCount - 1;
-        end = -1;
-        dir = -1;
-    }
-
-    for (le_int32 i = start; i != end; i += dir) {
-        LEGlyphID glyphID = glyphStorage[i];
-
-        if (isCursiveGlyph(i)) {
-            if (lastExitPoint >= 0 && getEntryPoint(i, entryAnchor) != NULL) {
-                float anchorDiffX = exitAnchor.fX - entryAnchor.fX;
-                float anchorDiffY = exitAnchor.fY - entryAnchor.fY;
-
-                baselineAdjustment += anchorDiffY;
-                adjustYPlacement(i, baselineAdjustment);
-
-                if (rightToLeft) {
-                    LEPoint secondAdvance;
-
-                    fontInstance->getGlyphAdvance(glyphID, pixels);
-                    fontInstance->pixelsToUnits(pixels, secondAdvance);
-
-                    adjustXAdvance(i, -(anchorDiffX + secondAdvance.fX));
-                } else {
-                    LEPoint firstAdvance;
-
-                    fontInstance->getGlyphAdvance(lastExitGlyphID, pixels);
-                    fontInstance->pixelsToUnits(pixels, firstAdvance);
-
-                    adjustXAdvance(lastExitPoint, anchorDiffX - firstAdvance.fX);
-                }
-            }
-
-            lastExitPoint = i;
-
-            if (getExitPoint(i, exitAnchor) != NULL) {
-                if (firstExitPoint < 0) {
-                    firstExitPoint = i;
-                }
-
-                lastExitGlyphID = glyphID;
-            } else {
-                if (baselineIsLogicalEnd(i) && firstExitPoint >= 0 && lastExitPoint >= 0) {
-                    le_int32 limit = lastExitPoint /*+ dir*/;
-                    LEPoint dummyAnchor;
-
-                    if (getEntryPoint(i, dummyAnchor) != NULL) {
-                        limit += dir;
-                    }
-
-                    for (le_int32 j = firstExitPoint; j != limit; j += dir) {
-                        if (isCursiveGlyph(j)) {
-                            adjustYPlacement(j, -baselineAdjustment);
-                        }
-                    }
-                }
-
-                firstExitPoint = lastExitPoint = -1;
-                baselineAdjustment = 0;
-            }
-        }
-    }
-}
-
-LEPoint *GlyphPositionAdjustments::EntryExitPoint::getEntryPoint(LEPoint &entryPoint) const
-{
-    if (fFlags & EEF_HAS_ENTRY_POINT) {
-        entryPoint = fEntryPoint;
-        return &entryPoint;
-    }
-
-    return NULL;
-}
-
-LEPoint *GlyphPositionAdjustments::EntryExitPoint::getExitPoint(LEPoint &exitPoint) const
-{
-    if (fFlags & EEF_HAS_EXIT_POINT) {
-        exitPoint = fExitPoint;
-        return &exitPoint;
-    }
-
-    return NULL;
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/GlyphPositionAdjustments.h b/icu4c/source/layout/GlyphPositionAdjustments.h
deleted file mode 100644 (file)
index f1f440a..0000000
+++ /dev/null
@@ -1,378 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved
- *
- */
-
-#ifndef __GLYPHPOSITIONADJUSTMENTS_H
-#define __GLYPHPOSITIONADJUSTMENTS_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-class LEFontInstance;
-
-class GlyphPositionAdjustments : public UMemory
-{
-private:
-    class Adjustment : public UMemory {
-    public:
-
-        inline Adjustment();
-        inline Adjustment(float xPlace, float yPlace, float xAdv, float yAdv, le_int32 baseOff = -1);
-        inline ~Adjustment();
-
-        inline float    getXPlacement() const;
-        inline float    getYPlacement() const;
-        inline float    getXAdvance() const;
-        inline float    getYAdvance() const;
-
-        inline le_int32 getBaseOffset() const;
-
-        inline void     setXPlacement(float newXPlacement);
-        inline void     setYPlacement(float newYPlacement);
-        inline void     setXAdvance(float newXAdvance);
-        inline void     setYAdvance(float newYAdvance);
-
-        inline void     setBaseOffset(le_int32 newBaseOffset);
-
-        inline void    adjustXPlacement(float xAdjustment);
-        inline void    adjustYPlacement(float yAdjustment);
-        inline void    adjustXAdvance(float xAdjustment);
-        inline void    adjustYAdvance(float yAdjustment);
-
-    private:
-        float xPlacement;
-        float yPlacement;
-        float xAdvance;
-        float yAdvance;
-
-        le_int32 baseOffset;
-
-        // allow copying of this class because all of its fields are simple types
-    };
-
-    class EntryExitPoint : public UMemory
-    {
-    public:
-        inline EntryExitPoint();
-        inline ~EntryExitPoint();
-
-        inline le_bool isCursiveGlyph() const;
-        inline le_bool baselineIsLogicalEnd() const;
-
-        LEPoint *getEntryPoint(LEPoint &entryPoint) const;
-        LEPoint *getExitPoint(LEPoint &exitPoint) const;
-
-        inline void clearEntryPoint();
-        inline void clearExitPoint();
-        inline void setEntryPoint(LEPoint &newEntryPoint, le_bool baselineIsLogicalEnd);
-        inline void setExitPoint(LEPoint &newExitPoint, le_bool baselineIsLogicalEnd);
-        inline void setCursiveGlyph(le_bool baselineIsLogicalEnd);
-
-    private:
-        enum EntryExitFlags
-        {
-            EEF_HAS_ENTRY_POINT         = 0x80000000L,
-            EEF_HAS_EXIT_POINT          = 0x40000000L,
-            EEF_IS_CURSIVE_GLYPH        = 0x20000000L,
-            EEF_BASELINE_IS_LOGICAL_END = 0x10000000L
-        };
-
-        le_uint32 fFlags;
-        LEPoint fEntryPoint;
-        LEPoint fExitPoint;
-    };
-
-    le_int32 fGlyphCount;
-    EntryExitPoint *fEntryExitPoints;
-    Adjustment *fAdjustments;
-
-    GlyphPositionAdjustments();
-
-public:
-    GlyphPositionAdjustments(le_int32 glyphCount);
-    ~GlyphPositionAdjustments();
-
-    inline le_bool hasCursiveGlyphs() const;
-    inline le_bool isCursiveGlyph(le_int32 index) const;
-    inline le_bool baselineIsLogicalEnd(le_int32 index) const;
-
-    const LEPoint *getEntryPoint(le_int32 index, LEPoint &entryPoint) const;
-    const LEPoint *getExitPoint(le_int32 index, LEPoint &exitPoint) const;
-
-    inline float getXPlacement(le_int32 index) const;
-    inline float getYPlacement(le_int32 index) const;
-    inline float getXAdvance(le_int32 index) const;
-    inline float getYAdvance(le_int32 index) const;
-
-    inline le_int32 getBaseOffset(le_int32 index) const;
-
-    inline void setXPlacement(le_int32 index, float newXPlacement);
-    inline void setYPlacement(le_int32 index, float newYPlacement);
-    inline void setXAdvance(le_int32 index, float newXAdvance);
-    inline void setYAdvance(le_int32 index, float newYAdvance);
-
-    inline void setBaseOffset(le_int32 index, le_int32 newBaseOffset);
-
-    inline void adjustXPlacement(le_int32 index, float xAdjustment);
-    inline void adjustYPlacement(le_int32 index, float yAdjustment);
-    inline void adjustXAdvance(le_int32 index, float xAdjustment);
-    inline void adjustYAdvance(le_int32 index, float yAdjustment);
-   
-    void clearEntryPoint(le_int32 index);
-    void clearExitPoint(le_int32 index);
-    void setEntryPoint(le_int32 index, LEPoint &newEntryPoint, le_bool baselineIsLogicalEnd);
-    void setExitPoint(le_int32 index, LEPoint &newExitPoint, le_bool baselineIsLogicalEnd);
-    void setCursiveGlyph(le_int32 index, le_bool baselineIsLogicalEnd);
-
-    void applyCursiveAdjustments(LEGlyphStorage &glyphStorage, le_bool rightToLeft, const LEFontInstance *fontInstance);
-};
-
-inline GlyphPositionAdjustments::Adjustment::Adjustment()
-  : xPlacement(0), yPlacement(0), xAdvance(0), yAdvance(0), baseOffset(-1)
-{
-    // nothing else to do!
-}
-
-inline GlyphPositionAdjustments::Adjustment::Adjustment(float xPlace, float yPlace, float xAdv, float yAdv, le_int32 baseOff)
-  : xPlacement(xPlace), yPlacement(yPlace), xAdvance(xAdv), yAdvance(yAdv), baseOffset(baseOff)
-{
-    // nothing else to do!
-}
-
-inline GlyphPositionAdjustments::Adjustment::~Adjustment()
-{
-    // nothing to do!
-}
-
-inline float GlyphPositionAdjustments::Adjustment::getXPlacement() const
-{
-    return xPlacement;
-}
-
-inline float GlyphPositionAdjustments::Adjustment::getYPlacement() const
-{
-    return yPlacement;
-}
-
-inline float GlyphPositionAdjustments::Adjustment::getXAdvance() const
-{
-    return xAdvance;
-}
-
-inline float GlyphPositionAdjustments::Adjustment::getYAdvance() const
-{
-    return yAdvance;
-}
-
-inline le_int32 GlyphPositionAdjustments::Adjustment::getBaseOffset() const
-{
-    return baseOffset;
-}
-
-inline void GlyphPositionAdjustments::Adjustment::setXPlacement(float newXPlacement)
-{
-    xPlacement = newXPlacement;
-}
-
-inline void GlyphPositionAdjustments::Adjustment::setYPlacement(float newYPlacement)
-{
-    yPlacement = newYPlacement;
-}
-
-inline void GlyphPositionAdjustments::Adjustment::setXAdvance(float newXAdvance)
-{
-    xAdvance = newXAdvance;
-}
-
-inline void GlyphPositionAdjustments::Adjustment::setYAdvance(float newYAdvance)
-{
-    yAdvance = newYAdvance;
-}
-
-inline void GlyphPositionAdjustments::Adjustment::setBaseOffset(le_int32 newBaseOffset)
-{
-    baseOffset = newBaseOffset;
-}
-
-inline void GlyphPositionAdjustments::Adjustment::adjustXPlacement(float xAdjustment)
-{
-    xPlacement += xAdjustment;
-}
-
-inline void GlyphPositionAdjustments::Adjustment::adjustYPlacement(float yAdjustment)
-{
-    yPlacement += yAdjustment;
-}
-
-inline void GlyphPositionAdjustments::Adjustment::adjustXAdvance(float xAdjustment)
-{
-    xAdvance += xAdjustment;
-}
-
-inline void GlyphPositionAdjustments::Adjustment::adjustYAdvance(float yAdjustment)
-{
-    yAdvance += yAdjustment;
-}
-
-inline GlyphPositionAdjustments::EntryExitPoint::EntryExitPoint()
-    : fFlags(0)
-{
-    fEntryPoint.fX = fEntryPoint.fY = fExitPoint.fX = fExitPoint.fY = 0;
-}
-
-inline GlyphPositionAdjustments::EntryExitPoint::~EntryExitPoint()
-{
-    // nothing special to do
-}
-
-inline le_bool GlyphPositionAdjustments::EntryExitPoint::isCursiveGlyph() const
-{
-    return (fFlags & EEF_IS_CURSIVE_GLYPH) != 0;
-}
-
-inline le_bool GlyphPositionAdjustments::EntryExitPoint::baselineIsLogicalEnd() const
-{
-    return (fFlags & EEF_BASELINE_IS_LOGICAL_END) != 0;
-}
-
-inline void GlyphPositionAdjustments::EntryExitPoint::clearEntryPoint()
-{
-    fFlags &= ~EEF_HAS_ENTRY_POINT;
-}
-
-inline void GlyphPositionAdjustments::EntryExitPoint::clearExitPoint()
-{
-    fFlags &= ~EEF_HAS_EXIT_POINT;
-}
-
-inline void GlyphPositionAdjustments::EntryExitPoint::setEntryPoint(LEPoint &newEntryPoint, le_bool baselineIsLogicalEnd)
-{
-    if (baselineIsLogicalEnd) {
-        fFlags |= (EEF_HAS_ENTRY_POINT | EEF_IS_CURSIVE_GLYPH | EEF_BASELINE_IS_LOGICAL_END);
-    } else {
-        fFlags |= (EEF_HAS_ENTRY_POINT | EEF_IS_CURSIVE_GLYPH);
-    }
-
-    fEntryPoint = newEntryPoint;
-}
-
-inline void GlyphPositionAdjustments::EntryExitPoint::setExitPoint(LEPoint &newExitPoint, le_bool baselineIsLogicalEnd)
-{
-    if (baselineIsLogicalEnd) {
-        fFlags |= (EEF_HAS_EXIT_POINT | EEF_IS_CURSIVE_GLYPH | EEF_BASELINE_IS_LOGICAL_END);
-    } else {
-        fFlags |= (EEF_HAS_EXIT_POINT | EEF_IS_CURSIVE_GLYPH);
-    }
-
-    fExitPoint  = newExitPoint;
-}
-
-inline void GlyphPositionAdjustments::EntryExitPoint::setCursiveGlyph(le_bool baselineIsLogicalEnd)
-{
-    if (baselineIsLogicalEnd) {
-        fFlags |= (EEF_IS_CURSIVE_GLYPH | EEF_BASELINE_IS_LOGICAL_END);
-    } else {
-        fFlags |= EEF_IS_CURSIVE_GLYPH;
-    }
-}
-
-inline le_bool GlyphPositionAdjustments::isCursiveGlyph(le_int32 index) const
-{
-    return fEntryExitPoints != NULL && fEntryExitPoints[index].isCursiveGlyph();
-}
-
-inline le_bool GlyphPositionAdjustments::baselineIsLogicalEnd(le_int32 index) const
-{
-    return fEntryExitPoints != NULL && fEntryExitPoints[index].baselineIsLogicalEnd();
-}
-
-inline float GlyphPositionAdjustments::getXPlacement(le_int32 index) const
-{
-    return fAdjustments[index].getXPlacement();
-}
-
-inline float GlyphPositionAdjustments::getYPlacement(le_int32 index) const
-{
-    return fAdjustments[index].getYPlacement();
-}
-
-inline float GlyphPositionAdjustments::getXAdvance(le_int32 index) const
-{
-    return fAdjustments[index].getXAdvance();
-}
-
-inline float GlyphPositionAdjustments::getYAdvance(le_int32 index) const
-{
-    return fAdjustments[index].getYAdvance();
-}
-
-
-inline le_int32 GlyphPositionAdjustments::getBaseOffset(le_int32 index) const
-{
-    return fAdjustments[index].getBaseOffset();
-}
-
-inline void GlyphPositionAdjustments::setXPlacement(le_int32 index, float newXPlacement)
-{
-    fAdjustments[index].setXPlacement(newXPlacement);
-}
-
-inline void GlyphPositionAdjustments::setYPlacement(le_int32 index, float newYPlacement)
-{
-    fAdjustments[index].setYPlacement(newYPlacement);
-}
-
-inline void GlyphPositionAdjustments::setXAdvance(le_int32 index, float newXAdvance)
-{
-    fAdjustments[index].setXAdvance(newXAdvance);
-}
-
-inline void GlyphPositionAdjustments::setYAdvance(le_int32 index, float newYAdvance)
-{
-    fAdjustments[index].setYAdvance(newYAdvance);
-}
-
-inline void GlyphPositionAdjustments::setBaseOffset(le_int32 index, le_int32 newBaseOffset)
-{
-    fAdjustments[index].setBaseOffset(newBaseOffset);
-}
-
-inline void GlyphPositionAdjustments::adjustXPlacement(le_int32 index, float xAdjustment)
-{
-    fAdjustments[index].adjustXPlacement(xAdjustment);
-}
-
-inline void GlyphPositionAdjustments::adjustYPlacement(le_int32 index, float yAdjustment)
-{
-    fAdjustments[index].adjustYPlacement(yAdjustment);
-}
-
-inline void GlyphPositionAdjustments::adjustXAdvance(le_int32 index, float xAdjustment)
-{
-    fAdjustments[index].adjustXAdvance(xAdjustment);
-}
-
-inline void GlyphPositionAdjustments::adjustYAdvance(le_int32 index, float yAdjustment)
-{
-    fAdjustments[index].adjustYAdvance(yAdjustment);
-}
-
-inline le_bool GlyphPositionAdjustments::hasCursiveGlyphs() const
-{
-    return fEntryExitPoints != NULL;
-}
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/GlyphPositioningTables.cpp b/icu4c/source/layout/GlyphPositioningTables.cpp
deleted file mode 100644 (file)
index 718f230..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "Lookups.h"
-#include "GlyphDefinitionTables.h"
-#include "GlyphPositioningTables.h"
-#include "GlyphPosnLookupProc.h"
-#include "CursiveAttachmentSubtables.h"
-#include "LEGlyphStorage.h"
-#include "GlyphPositionAdjustments.h"
-
-U_NAMESPACE_BEGIN
-
-void GlyphPositioningTableHeader::process(const LEReferenceTo<GlyphPositioningTableHeader> &base, LEGlyphStorage &glyphStorage, GlyphPositionAdjustments *glyphPositionAdjustments, le_bool rightToLeft,
-                                          LETag scriptTag, LETag languageTag,
-                                          const LEReferenceTo<GlyphDefinitionTableHeader> &glyphDefinitionTableHeader, LEErrorCode &success,
-                                          const LEFontInstance *fontInstance, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder) const
-{
-    if (LE_FAILURE(success)) {
-        return;
-    } 
-
-    GlyphPositioningLookupProcessor processor(base, scriptTag, languageTag, featureMap, featureMapCount, featureOrder, success);
-    if (LE_FAILURE(success)) {
-        return;
-    } 
-
-    processor.process(glyphStorage, glyphPositionAdjustments, rightToLeft, glyphDefinitionTableHeader, fontInstance, success);
-
-    glyphPositionAdjustments->applyCursiveAdjustments(glyphStorage, rightToLeft, fontInstance);
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/GlyphPositioningTables.h b/icu4c/source/layout/GlyphPositioningTables.h
deleted file mode 100644 (file)
index e7924a3..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __GLYPHPOSITIONINGTABLES_H
-#define __GLYPHPOSITIONINGTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "Lookups.h"
-#include "GlyphLookupTables.h"
-#include "LETableReference.h"
-
-U_NAMESPACE_BEGIN
-
-class  LEFontInstance;
-class  LEGlyphStorage;
-class  LEGlyphFilter;
-class  GlyphPositionAdjustments;
-struct GlyphDefinitionTableHeader;
-
-struct GlyphPositioningTableHeader : public GlyphLookupTableHeader
-{
-  void    process(const LEReferenceTo<GlyphPositioningTableHeader> &base, LEGlyphStorage &glyphStorage, GlyphPositionAdjustments *glyphPositionAdjustments,
-                le_bool rightToLeft, LETag scriptTag, LETag languageTag,
-                const LEReferenceTo<GlyphDefinitionTableHeader> &glyphDefinitionTableHeader, LEErrorCode &success,
-                const LEFontInstance *fontInstance, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool featureOrder) const;
-};
-
-enum GlyphPositioningSubtableTypes
-{
-    gpstSingle          = 1,
-    gpstPair            = 2,
-    gpstCursive         = 3,
-    gpstMarkToBase      = 4,
-    gpstMarkToLigature  = 5,
-    gpstMarkToMark      = 6,
-    gpstContext         = 7,
-    gpstChainedContext  = 8,
-    gpstExtension       = 9
-};
-
-typedef LookupSubtable GlyphPositioningSubtable;
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/GlyphPosnLookupProc.cpp b/icu4c/source/layout/GlyphPosnLookupProc.cpp
deleted file mode 100644 (file)
index 2fe1d58..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- * (C) Copyright IBM Corp. 1998 - 2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "ICUFeatures.h"
-#include "Lookups.h"
-#include "ScriptAndLanguage.h"
-#include "GlyphDefinitionTables.h"
-#include "GlyphPositioningTables.h"
-#include "SinglePositioningSubtables.h"
-#include "PairPositioningSubtables.h"
-#include "CursiveAttachmentSubtables.h"
-#include "MarkToBasePosnSubtables.h"
-#include "MarkToLigaturePosnSubtables.h"
-#include "MarkToMarkPosnSubtables.h"
-//#include "ContextualPositioningSubtables.h"
-#include "ContextualSubstSubtables.h"
-#include "ExtensionSubtables.h"
-#include "LookupProcessor.h"
-#include "GlyphPosnLookupProc.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-// Aside from the names, the contextual positioning subtables are
-// the same as the contextual substitution subtables.
-typedef ContextualSubstitutionSubtable ContextualPositioningSubtable;
-typedef ChainingContextualSubstitutionSubtable ChainingContextualPositioningSubtable;
-
-GlyphPositioningLookupProcessor::GlyphPositioningLookupProcessor(
-        const LEReferenceTo<GlyphPositioningTableHeader> &glyphPositioningTableHeader,
-        LETag scriptTag, 
-        LETag languageTag, 
-        const FeatureMap *featureMap, 
-        le_int32 featureMapCount, 
-        le_bool featureOrder,
-        LEErrorCode& success)
-    : LookupProcessor(
-                      glyphPositioningTableHeader,
-                      SWAPW(glyphPositioningTableHeader->scriptListOffset),
-                      SWAPW(glyphPositioningTableHeader->featureListOffset),
-                      SWAPW(glyphPositioningTableHeader->lookupListOffset),
-                      scriptTag, 
-                      languageTag, 
-                      featureMap, 
-                      featureMapCount, 
-                      featureOrder,
-                      success
-                      )
-{
-    // anything?
-}
-
-GlyphPositioningLookupProcessor::GlyphPositioningLookupProcessor()
-{
-}
-
-le_uint32 GlyphPositioningLookupProcessor::applySubtable(const LEReferenceTo<LookupSubtable> &lookupSubtable, le_uint16 lookupType,
-                                                       GlyphIterator *glyphIterator,
-                                                       const LEFontInstance *fontInstance,
-                                                       LEErrorCode& success) const
-{
-    if (LE_FAILURE(success)) { 
-        return 0;
-    } 
-
-    le_uint32 delta = 0;
-
-    switch(lookupType)
-    {
-    case 0:
-        break;
-
-    case gpstSingle:
-    {
-      LEReferenceTo<SinglePositioningSubtable> subtable(lookupSubtable, success);
-
-        delta = subtable->process(subtable, glyphIterator, fontInstance, success);
-        break;
-    }
-
-    case gpstPair:
-    {
-        LEReferenceTo<PairPositioningSubtable> subtable(lookupSubtable, success);
-
-        delta = subtable->process(subtable, glyphIterator, fontInstance, success);
-        break;
-    }
-
-    case gpstCursive:
-    {
-        LEReferenceTo<CursiveAttachmentSubtable> subtable(lookupSubtable, success);
-
-        delta = subtable->process(subtable, glyphIterator, fontInstance, success);
-        break;
-    }
-
-    case gpstMarkToBase:
-    {
-        LEReferenceTo<MarkToBasePositioningSubtable> subtable(lookupSubtable, success);
-
-        delta = subtable->process(subtable, glyphIterator, fontInstance, success);
-        break;
-    }
-
-     case gpstMarkToLigature:
-    {
-        LEReferenceTo<MarkToLigaturePositioningSubtable> subtable(lookupSubtable, success);
-
-        delta = subtable->process(subtable, glyphIterator, fontInstance, success);
-        break;
-    }
-
-    case gpstMarkToMark:
-    {
-        LEReferenceTo<MarkToMarkPositioningSubtable> subtable(lookupSubtable, success);
-
-        delta = subtable->process(subtable, glyphIterator, fontInstance, success);
-        break;
-    }
-
-   case gpstContext:
-    {
-        LEReferenceTo<ContextualPositioningSubtable> subtable(lookupSubtable, success);
-
-        delta = subtable->process(this, glyphIterator, fontInstance, success);
-        break;
-    }
-
-    case gpstChainedContext:
-    {
-        LEReferenceTo<ChainingContextualPositioningSubtable> subtable(lookupSubtable, success);
-
-        delta = subtable->process(this, glyphIterator, fontInstance, success);
-        break;
-    }
-
-    case gpstExtension:
-    {
-        LEReferenceTo<ExtensionSubtable> subtable(lookupSubtable, success);
-
-        delta = subtable->process(this, lookupType, glyphIterator, fontInstance, success);
-        break;
-    }
-
-    default:
-        break;
-    }
-
-    return delta;
-}
-
-GlyphPositioningLookupProcessor::~GlyphPositioningLookupProcessor()
-{
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/GlyphPosnLookupProc.h b/icu4c/source/layout/GlyphPosnLookupProc.h
deleted file mode 100644 (file)
index e9b7e72..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __GLYPHPOSITIONINGLOOKUPPROCESSOR_H
-#define __GLYPHPOSITIONINGLOOKUPPROCESSOR_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "Lookups.h"
-#include "ICUFeatures.h"
-#include "GlyphDefinitionTables.h"
-#include "GlyphPositioningTables.h"
-#include "GlyphIterator.h"
-#include "LookupProcessor.h"
-
-U_NAMESPACE_BEGIN
-
-class GlyphPositioningLookupProcessor : public LookupProcessor
-{
-public:
-    GlyphPositioningLookupProcessor(const LEReferenceTo<GlyphPositioningTableHeader> &glyphPositioningTableHeader,
-        LETag scriptTag, 
-        LETag languageTag, 
-        const FeatureMap *featureMap, 
-        le_int32 featureMapCount, 
-        le_bool featureOrder,
-        LEErrorCode& success);
-
-    virtual ~GlyphPositioningLookupProcessor();
-
-    virtual le_uint32 applySubtable(const LEReferenceTo<LookupSubtable> &lookupSubtable, le_uint16 lookupType, GlyphIterator *glyphIterator,
-        const LEFontInstance *fontInstance, LEErrorCode& success) const;
-
-protected:
-    GlyphPositioningLookupProcessor();
-
-private:
-
-    GlyphPositioningLookupProcessor(const GlyphPositioningLookupProcessor &other); // forbid copying of this class
-    GlyphPositioningLookupProcessor &operator=(const GlyphPositioningLookupProcessor &other); // forbid copying of this class
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/GlyphSubstLookupProc.cpp b/icu4c/source/layout/GlyphSubstLookupProc.cpp
deleted file mode 100644 (file)
index e0f8a18..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEGlyphFilter.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "ICUFeatures.h"
-#include "Lookups.h"
-#include "ScriptAndLanguage.h"
-#include "GlyphDefinitionTables.h"
-#include "GlyphSubstitutionTables.h"
-#include "SingleSubstitutionSubtables.h"
-#include "MultipleSubstSubtables.h"
-#include "AlternateSubstSubtables.h"
-#include "LigatureSubstSubtables.h"
-#include "ContextualSubstSubtables.h"
-#include "ExtensionSubtables.h"
-#include "LookupProcessor.h"
-#include "GlyphSubstLookupProc.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-GlyphSubstitutionLookupProcessor::GlyphSubstitutionLookupProcessor(
-        const LEReferenceTo<GlyphSubstitutionTableHeader> &glyphSubstitutionTableHeader,
-        LETag scriptTag, 
-        LETag languageTag, 
-        const LEGlyphFilter *filter, 
-        const FeatureMap *featureMap, 
-        le_int32 featureMapCount, 
-        le_bool featureOrder,
-        LEErrorCode& success)
-    : LookupProcessor(
-                      glyphSubstitutionTableHeader,
-                      SWAPW(glyphSubstitutionTableHeader->scriptListOffset),
-                      SWAPW(glyphSubstitutionTableHeader->featureListOffset),
-                      SWAPW(glyphSubstitutionTableHeader->lookupListOffset),
-                      scriptTag, languageTag, featureMap, featureMapCount, featureOrder, success), fFilter(filter)
-{
-    // anything?
-}
-
-GlyphSubstitutionLookupProcessor::GlyphSubstitutionLookupProcessor()
-{
-}
-
-le_uint32 GlyphSubstitutionLookupProcessor::applySubtable(const LEReferenceTo<LookupSubtable> &lookupSubtable, le_uint16 lookupType,
-                                                       GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    le_uint32 delta = 0;
-
-    switch(lookupType)
-    {
-    case 0:
-        break;
-
-    case gsstSingle:
-    {
-        const LEReferenceTo<SingleSubstitutionSubtable> subtable(lookupSubtable, success);
-
-        delta = subtable->process(subtable, glyphIterator, success, fFilter);
-        break;
-    }
-
-    case gsstMultiple:
-    {
-        const LEReferenceTo<MultipleSubstitutionSubtable> subtable(lookupSubtable, success);
-
-        delta = subtable->process(subtable, glyphIterator, success, fFilter);
-        break;
-    }
-
-    case gsstAlternate:
-    {
-        const LEReferenceTo<AlternateSubstitutionSubtable> subtable(lookupSubtable, success);
-
-        delta = subtable->process(subtable, glyphIterator, success, fFilter);
-        break;
-    }
-
-    case gsstLigature:
-    {
-        const LEReferenceTo<LigatureSubstitutionSubtable> subtable(lookupSubtable, success);
-
-        delta = subtable->process(subtable, glyphIterator, success, fFilter);
-        break;
-    }
-
-    case gsstContext:
-    {
-        const LEReferenceTo<ContextualSubstitutionSubtable> subtable(lookupSubtable, success);
-
-        delta = subtable->process(this, glyphIterator, fontInstance, success);
-        break;
-    }
-
-    case gsstChainingContext:
-    {
-        const LEReferenceTo<ChainingContextualSubstitutionSubtable> subtable(lookupSubtable, success);
-
-        delta = subtable->process(this, glyphIterator, fontInstance, success);
-        break;
-    }
-
-    case gsstExtension:
-    {
-        const LEReferenceTo<ExtensionSubtable> subtable(lookupSubtable, success);
-
-        delta = subtable->process(this, lookupType, glyphIterator, fontInstance, success);
-        break;
-    }
-
-    default:
-        break;
-    }
-
-    return delta;
-}
-
-GlyphSubstitutionLookupProcessor::~GlyphSubstitutionLookupProcessor()
-{
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/GlyphSubstLookupProc.h b/icu4c/source/layout/GlyphSubstLookupProc.h
deleted file mode 100644 (file)
index d9dc591..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __GLYPHSUBSTITUTIONLOOKUPPROCESSOR_H
-#define __GLYPHSUBSTITUTIONLOOKUPPROCESSOR_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEGlyphFilter.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "Lookups.h"
-#include "ICUFeatures.h"
-#include "GlyphDefinitionTables.h"
-#include "GlyphSubstitutionTables.h"
-#include "GlyphIterator.h"
-#include "LookupProcessor.h"
-
-U_NAMESPACE_BEGIN
-
-class GlyphSubstitutionLookupProcessor : public LookupProcessor
-{
-public:
-    GlyphSubstitutionLookupProcessor(const LEReferenceTo<GlyphSubstitutionTableHeader> &glyphSubstitutionTableHeader,
-        LETag scriptTag, 
-        LETag languageTag, 
-        const LEGlyphFilter *filter, 
-        const FeatureMap *featureMap, 
-        le_int32 featureMapCount, 
-        le_bool featureOrder,
-        LEErrorCode& success);
-
-    virtual ~GlyphSubstitutionLookupProcessor();
-
-    virtual le_uint32 applySubtable(const LEReferenceTo<LookupSubtable> &lookupSubtable, le_uint16 lookupType, GlyphIterator *glyphIterator,
-        const LEFontInstance *fontInstance, LEErrorCode& success) const;
-
-protected:
-    GlyphSubstitutionLookupProcessor();
-
-private:
-    const LEGlyphFilter *fFilter;
-
-    GlyphSubstitutionLookupProcessor(const GlyphSubstitutionLookupProcessor &other); // forbid copying of this class
-    GlyphSubstitutionLookupProcessor &operator=(const GlyphSubstitutionLookupProcessor &other); // forbid copying of this class
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/GlyphSubstitutionTables.cpp b/icu4c/source/layout/GlyphSubstitutionTables.cpp
deleted file mode 100644 (file)
index 5a9ba13..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEGlyphFilter.h"
-#include "OpenTypeTables.h"
-#include "Lookups.h"
-#include "GlyphDefinitionTables.h"
-#include "GlyphSubstitutionTables.h"
-#include "GlyphSubstLookupProc.h"
-#include "ScriptAndLanguage.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-le_int32 GlyphSubstitutionTableHeader::process(const LEReferenceTo<GlyphSubstitutionTableHeader> &base,
-                                               LEGlyphStorage &glyphStorage,
-                                               le_bool rightToLeft, 
-                                               LETag scriptTag, 
-                                               LETag languageTag,
-                                               const LEReferenceTo<GlyphDefinitionTableHeader> &glyphDefinitionTableHeader, 
-                                               const LEGlyphFilter *filter, 
-                                               const FeatureMap *featureMap, 
-                                               le_int32 featureMapCount, 
-                                               le_bool featureOrder,
-                                               LEErrorCode &success) const
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    } 
-
-    GlyphSubstitutionLookupProcessor processor(base, scriptTag, languageTag, filter, featureMap, featureMapCount, featureOrder, success);
-    return processor.process(glyphStorage, NULL, rightToLeft, glyphDefinitionTableHeader, NULL, success);
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/GlyphSubstitutionTables.h b/icu4c/source/layout/GlyphSubstitutionTables.h
deleted file mode 100644 (file)
index b3d90d5..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __GLYPHSUBSTITUTIONTABLES_H
-#define __GLYPHSUBSTITUTIONTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "Lookups.h"
-#include "GlyphLookupTables.h"
-
-U_NAMESPACE_BEGIN
-
-class  LEGlyphStorage;
-class  LEGlyphFilter;
-struct GlyphDefinitionTableHeader;
-
-struct GlyphSubstitutionTableHeader : public GlyphLookupTableHeader
-{
-  le_int32    process(const LEReferenceTo<GlyphSubstitutionTableHeader> &base, 
-                      LEGlyphStorage &glyphStorage, 
-                        le_bool rightToLeft, 
-                        LETag scriptTag, 
-                        LETag languageTag,
-                        const LEReferenceTo<GlyphDefinitionTableHeader> &glyphDefinitionTableHeader, 
-                        const LEGlyphFilter *filter,
-                        const FeatureMap *featureMap, 
-                        le_int32 featureMapCount, 
-                        le_bool featureOrder,
-                        LEErrorCode &success) const;
-};
-
-enum GlyphSubstitutionSubtableTypes
-{
-    gsstSingle          = 1,
-    gsstMultiple        = 2,
-    gsstAlternate       = 3,
-    gsstLigature        = 4,
-    gsstContext         = 5,
-    gsstChainingContext = 6,
-    gsstExtension       = 7,
-    gsstReverseChaining = 8
-};
-
-typedef LookupSubtable GlyphSubstitutionSubtable;
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/HanLayoutEngine.cpp b/icu4c/source/layout/HanLayoutEngine.cpp
deleted file mode 100644 (file)
index b76c58c..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- * HanLayoutEngine.cpp: OpenType processing for Han fonts.
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved.
- */
-
-#include "LETypes.h"
-#include "LEScripts.h"
-#include "LELanguages.h"
-
-#include "LayoutEngine.h"
-#include "OpenTypeLayoutEngine.h"
-#include "HanLayoutEngine.h"
-#include "ScriptAndLanguageTags.h"
-#include "LEGlyphStorage.h"
-#include "OpenTypeTables.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(HanOpenTypeLayoutEngine)
-
-#define loclFeatureTag LE_LOCL_FEATURE_TAG
-#define smplFeatureTag LE_SMPL_FEATURE_TAG
-#define tradFeatureTag LE_TRAD_FEATURE_TAG
-
-#define loclFeatureMask 0x80000000UL
-#define smplFeatureMask 0x40000000UL
-#define tradFeatureMask 0x20000000UL
-
-static const FeatureMap featureMap[] =
-{
-    {loclFeatureTag, loclFeatureMask},
-    {smplFeatureTag, smplFeatureMask},
-    {tradFeatureTag, tradFeatureMask}
-};
-
-static const le_int32 featureMapCount = LE_ARRAY_SIZE(featureMap);
-
-#define features (loclFeatureMask)
-
-HanOpenTypeLayoutEngine::HanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                                                 le_int32 typoFlags, const LEReferenceTo<GlyphSubstitutionTableHeader> &gsubTable, LEErrorCode &success)
-    : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success)
-{
-    fFeatureMap      = featureMap;
-    fFeatureMapCount = featureMapCount;
-}
-
-HanOpenTypeLayoutEngine::~HanOpenTypeLayoutEngine()
-{
-    // nothing to do
-}
-
-le_int32 HanOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool /*rightToLeft*/,
-        LEUnicode *&/*outChars*/, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    glyphStorage.allocateGlyphArray(count, FALSE, success);
-    glyphStorage.allocateAuxData(success);
-
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    // FIXME: do we want to add the 'trad' feature for 'ZHT' and the
-    // 'smpl' feature for 'ZHS'? If we do this, we can remove the exact
-    // flag from the language tag lookups, so we can use these features
-    // with the default LangSys...
-    for (le_int32 i = 0; i < count; i += 1) {
-        glyphStorage.setAuxData(i, features, success);
-    }
-
-    return count;
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/HanLayoutEngine.h b/icu4c/source/layout/HanLayoutEngine.h
deleted file mode 100644 (file)
index 340845b..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-
-/*
- * HanLayoutEngine.h: OpenType processing for Han fonts.
- *
- * (C) Copyright IBM Corp. 1998-2014 - All Rights Reserved.
- */
-
-#ifndef __HANLAYOUTENGINE_H
-#define __HANLAYOUTENGINE_H
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "LayoutEngine.h"
-#include "OpenTypeLayoutEngine.h"
-
-#include "GlyphSubstitutionTables.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-/**
- * This class implements OpenType layout for Han fonts. It overrides
- * the characerProcessing method to assign the correct OpenType feature
- * tags for the CJK language-specific forms.
- *
- * @internal
- */
-class HanOpenTypeLayoutEngine : public OpenTypeLayoutEngine
-{
-public:
-    /**
-     * This is the main constructor. It constructs an instance of HanOpenTypeLayoutEngine for
-     * a particular font, script and language. It takes the GSUB table as a parameter since
-     * LayoutEngine::layoutEngineFactory has to read the GSUB table to know that it has a
-     * Han OpenType font.
-     *
-     * @param fontInstance - the font
-     * @param scriptCode - the script
-     * @param langaugeCode - the language
-     * @param gsubTable - the GSUB table
-     * @param success - set to an error code if the operation fails
-     *
-     * @see LayoutEngine::layoutEngineFactory
-     * @see OpenTypeLayoutEngine
-     * @see ScriptAndLangaugeTags.h for script and language codes
-     *
-     * @internal
-     */
-    HanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                            le_int32 typoFlags, const LEReferenceTo<GlyphSubstitutionTableHeader> &gsubTablem, LEErrorCode &success);
-
-
-    /**
-     * The destructor, virtual for correct polymorphic invocation.
-     *
-     * @internal
-     */
-    virtual ~HanOpenTypeLayoutEngine();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    static UClassID getStaticClassID();
-
-protected:
-
-    /**
-     * This method does Han OpenType character processing. It assigns the OpenType feature
-     * tags to the characters to generate the correct language-specific variants.
-     *
-     * Input parameters:
-     * @param chars - the input character context
-     * @param offset - the index of the first character to process
-     * @param count - the number of characters to process
-     * @param max - the number of characters in the input context
-     * @param rightToLeft - <code>TRUE</code> if the characters are in a right to left directional run
-     * @param glyphStorage - the object holding the glyph storage. The char index and auxillary data arrays will be set.
-     *
-     * Output parameters:
-     * @param outChars - the output character arrayt
-     * @param charIndices - the output character index array
-     * @param featureTags - the output feature tag array
-     * @param success - set to an error code if the operation fails
-     *
-     * @return the output character count
-     *
-     * @internal
-     */
-    virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-            LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/HangulLayoutEngine.cpp b/icu4c/source/layout/HangulLayoutEngine.cpp
deleted file mode 100644 (file)
index 90e5506..0000000
+++ /dev/null
@@ -1,340 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- * HangulLayoutEngine.cpp: OpenType processing for Han fonts.
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved.
- */
-
-#include "LETypes.h"
-#include "LEScripts.h"
-#include "LELanguages.h"
-
-#include "LayoutEngine.h"
-#include "OpenTypeLayoutEngine.h"
-#include "HangulLayoutEngine.h"
-#include "ScriptAndLanguageTags.h"
-#include "LEGlyphStorage.h"
-#include "OpenTypeTables.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(HangulOpenTypeLayoutEngine)
-
-
-#define FEATURE_MAP(name) {name ## FeatureTag, name ## FeatureMask}
-
-#define LJMO_FIRST 0x1100
-#define LJMO_LAST  0x1159
-#define LJMO_FILL  0x115F
-#define LJMO_COUNT 19
-
-#define VJMO_FIRST 0x1161
-#define VJMO_LAST  0x11A2
-#define VJMO_FILL  0x1160
-#define VJMO_COUNT 21
-
-#define TJMO_FIRST 0x11A7
-#define TJMO_LAST  0x11F9
-#define TJMO_COUNT 28
-
-#define HSYL_FIRST 0xAC00
-#define HSYL_COUNT 11172
-#define HSYL_LVCNT (VJMO_COUNT * TJMO_COUNT)
-
-// Character classes
-enum
-{
-    CC_L = 0,
-    CC_V,
-    CC_T,
-    CC_LV,
-    CC_LVT,
-    CC_X,
-    CC_COUNT
-};
-
-// Action flags
-#define AF_L 1
-#define AF_V 2
-#define AF_T 4
-
-// Actions
-#define a_N   0
-#define a_L   (AF_L)
-#define a_V   (AF_V)
-#define a_T   (AF_T)
-#define a_VT  (AF_V | AF_T)
-#define a_LV  (AF_L | AF_V)
-#define a_LVT (AF_L | AF_V | AF_T)
-
-typedef struct
-{
-    int32_t newState;
-    int32_t actionFlags;
-} StateTransition;
-
-static const StateTransition stateTable[][CC_COUNT] =
-{
-//       L          V          T          LV         LVT           X
-    { {1, a_L},  {2, a_LV}, {3, a_LVT}, {2, a_LV}, {3, a_LVT},  {4, a_T}}, // 0 - start
-    { {1, a_L},  {2, a_V},  {3, a_VT},  {2, a_LV}, {3, a_LVT}, {-1, a_V}}, // 1 - L+
-    {{-1, a_N},  {2, a_V},  {3, a_T},  {-1, a_N}, {-1, a_N},   {-1, a_N}}, // 2 - L+V+
-    {{-1, a_N}, {-1, a_N},  {3, a_T},  {-1, a_N}, {-1, a_N},   {-1, a_N}}, // 3 - L+V+T*
-    {{-1, a_N}, {-1, a_N}, {-1, a_N},  {-1, a_N}, {-1, a_N},    {4, a_T}}  // 4 - X+
-};
-
-
-#define ccmpFeatureTag LE_CCMP_FEATURE_TAG
-#define ljmoFeatureTag LE_LJMO_FEATURE_TAG
-#define vjmoFeatureTag LE_VJMO_FEATURE_TAG
-#define tjmoFeatureTag LE_TJMO_FEATURE_TAG
-
-#define ccmpFeatureMask 0x80000000UL
-#define ljmoFeatureMask 0x40000000UL
-#define vjmoFeatureMask 0x20000000UL
-#define tjmoFeatureMask 0x10000000UL
-
-static const FeatureMap featureMap[] =
-{
-    {ccmpFeatureTag, ccmpFeatureMask},
-    {ljmoFeatureTag, ljmoFeatureMask},
-    {vjmoFeatureTag, vjmoFeatureMask},
-    {tjmoFeatureTag, tjmoFeatureMask}
-};
-
-static const le_int32 featureMapCount = LE_ARRAY_SIZE(featureMap);
-
-#define nullFeatures 0
-#define ljmoFeatures (ccmpFeatureMask | ljmoFeatureMask)
-#define vjmoFeatures (ccmpFeatureMask | vjmoFeatureMask | ljmoFeatureMask | tjmoFeatureMask)
-#define tjmoFeatures (ccmpFeatureMask | tjmoFeatureMask | ljmoFeatureMask | vjmoFeatureMask)
-
-static le_int32 compose(LEUnicode lead, LEUnicode vowel, LEUnicode trail, LEUnicode &syllable)
-{
-    le_int32 lIndex = lead  - LJMO_FIRST;
-    le_int32 vIndex = vowel - VJMO_FIRST;
-    le_int32 tIndex = trail - TJMO_FIRST;
-    le_int32 result = 3;
-
-    if ((lIndex < 0 || lIndex >= LJMO_COUNT ) || (vIndex < 0 || vIndex >= VJMO_COUNT)) {
-        return 0;
-    }
-
-    if (tIndex <= 0 || tIndex >= TJMO_COUNT) {
-        tIndex = 0;
-        result = 2;
-    }
-
-    syllable = (LEUnicode) ((lIndex * VJMO_COUNT + vIndex) * TJMO_COUNT + tIndex + HSYL_FIRST);
-
-    return result;
-}
-
-static le_int32 decompose(LEUnicode syllable, LEUnicode &lead, LEUnicode &vowel, LEUnicode &trail)
-{
-    le_int32 sIndex = syllable - HSYL_FIRST;
-
-    if (sIndex < 0 || sIndex >= HSYL_COUNT) {
-        return 0;
-    }
-
-    lead  = LJMO_FIRST + (sIndex / HSYL_LVCNT);
-    vowel = VJMO_FIRST + (sIndex % HSYL_LVCNT) / TJMO_COUNT;
-    trail = TJMO_FIRST + (sIndex % TJMO_COUNT);
-
-    if (trail == TJMO_FIRST) {
-        return 2;
-    }
-
-    return 3;
-}
-
-static le_int32 getCharClass(LEUnicode ch, LEUnicode &lead, LEUnicode &vowel, LEUnicode &trail)
-{
-    lead  = LJMO_FILL;
-    vowel = VJMO_FILL;
-    trail = TJMO_FIRST;
-
-    if (ch >= LJMO_FIRST && ch <= LJMO_LAST) {
-        lead  = ch;
-        return CC_L;
-    }
-
-    if (ch >= VJMO_FIRST && ch <= VJMO_LAST) {
-        vowel = ch;
-        return CC_V;
-    }
-
-    if (ch > TJMO_FIRST && ch <= TJMO_LAST) {
-        trail = ch;
-        return CC_T;
-    }
-
-    le_int32 c = decompose(ch, lead, vowel, trail);
-
-    if (c == 2) {
-        return CC_LV;
-    }
-
-    if (c == 3) {
-        return CC_LVT;
-    }
-
-    trail = ch;
-    return CC_X;
-}
-
-HangulOpenTypeLayoutEngine::HangulOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 /*languageCode*/,
-                                                       le_int32 typoFlags, const LEReferenceTo<GlyphSubstitutionTableHeader> &gsubTable, LEErrorCode &success)
-    : OpenTypeLayoutEngine(fontInstance, scriptCode, korLanguageCode, typoFlags, gsubTable, success)
-{
-    fFeatureMap = featureMap;
-    fFeatureMapCount = featureMapCount;
-    fFeatureOrder = TRUE;
-}
-
-HangulOpenTypeLayoutEngine::HangulOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 /*languageCode*/,
-                                                          le_int32 typoFlags, LEErrorCode &success)
-    : OpenTypeLayoutEngine(fontInstance, scriptCode, korLanguageCode, typoFlags, success)
-{
-    fFeatureMap = featureMap;
-    fFeatureMapCount = featureMapCount;
-    fFeatureOrder = TRUE;
-}
-
-HangulOpenTypeLayoutEngine::~HangulOpenTypeLayoutEngine()
-{
-    // nothing to do
-}
-
-le_int32 HangulOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-        LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    le_int32 worstCase = count * 3;
-
-    outChars = LE_NEW_ARRAY(LEUnicode, worstCase);
-
-    if (outChars == NULL) {
-        success = LE_MEMORY_ALLOCATION_ERROR;
-        return 0;
-    }
-
-    glyphStorage.allocateGlyphArray(worstCase, rightToLeft, success);
-    glyphStorage.allocateAuxData(success);
-
-    if (LE_FAILURE(success)) {
-        LE_DELETE_ARRAY(outChars);
-        return 0;
-    }
-
-    le_int32 outCharCount = 0;
-    le_int32 limit = offset + count;
-    le_int32 i = offset;
-
-    while (i < limit) {
-        le_int32 state    = 0;
-        le_int32 inStart  = i;
-        le_int32 outStart = outCharCount;
-
-        while( i < limit) {
-            LEUnicode lead  = 0;
-            LEUnicode vowel = 0;
-            LEUnicode trail = 0;
-            int32_t chClass = getCharClass(chars[i], lead, vowel, trail);
-            const StateTransition transition = stateTable[state][chClass];
-
-            if (chClass == CC_X) {
-                /* Any character of type X will be stored as a trail jamo */
-                if ((transition.actionFlags & AF_T) != 0) {
-                    outChars[outCharCount] = trail;
-                    glyphStorage.setCharIndex(outCharCount, i-offset, success);
-                    glyphStorage.setAuxData(outCharCount++, nullFeatures, success);
-                }
-            } else {
-                /* Any Hangul will be fully decomposed. Output the decomposed characters. */
-                if ((transition.actionFlags & AF_L) != 0) {
-                    outChars[outCharCount] = lead;
-                    glyphStorage.setCharIndex(outCharCount, i-offset, success);
-                    glyphStorage.setAuxData(outCharCount++, ljmoFeatures, success);
-                }
-
-                if ((transition.actionFlags & AF_V) != 0) {
-                    outChars[outCharCount] = vowel;
-                    glyphStorage.setCharIndex(outCharCount, i-offset, success);
-                    glyphStorage.setAuxData(outCharCount++, vjmoFeatures, success);
-                }
-
-                if ((transition.actionFlags & AF_T) != 0) {
-                    outChars[outCharCount] = trail;
-                    glyphStorage.setCharIndex(outCharCount, i-offset, success);
-                    glyphStorage.setAuxData(outCharCount++, tjmoFeatures, success);
-                }
-            }
-
-            state = transition.newState;
-
-            /* Negative next state means stop. */
-            if (state < 0) {
-                break;
-            }
-
-            i += 1;
-        }
-
-        le_int32 inLength  = i - inStart;
-        le_int32 outLength = outCharCount - outStart;
-
-        /*
-         * See if the syllable can be composed into a single character. There are 5
-         * possible cases:
-         *
-         *   Input     Decomposed to    Compose to
-         *   LV        L, V             LV
-         *   LVT       L, V, T          LVT
-         *   L, V      L, V             LV, DEL
-         *   LV, T     L, V, T          LVT, DEL
-         *   L, V, T   L, V, T          LVT, DEL, DEL
-         */
-        if ((inLength >= 1 && inLength <= 3) && (outLength == 2 || outLength == 3)) {
-            LEUnicode syllable = 0x0000;
-            LEUnicode lead  = outChars[outStart];
-            LEUnicode vowel = outChars[outStart + 1];
-            LEUnicode trail = outLength == 3? outChars[outStart + 2] : TJMO_FIRST;
-
-            /*
-             * If the composition consumes the whole decomposed syllable,
-             * we can use it.
-             */
-            if (compose(lead, vowel, trail, syllable) == outLength) {
-                outCharCount = outStart;
-                outChars[outCharCount] = syllable;
-                glyphStorage.setCharIndex(outCharCount, inStart-offset, success);
-                glyphStorage.setAuxData(outCharCount++, nullFeatures, success);
-
-                /*
-                 * Replace the rest of the input characters with DEL.
-                 */
-                for(le_int32 d = inStart + 1; d < i; d += 1) {
-                    outChars[outCharCount] = 0xFFFF;
-                    glyphStorage.setCharIndex(outCharCount, d - offset, success);
-                    glyphStorage.setAuxData(outCharCount++, nullFeatures, success);
-                }
-            }
-        }
-    }
-
-    glyphStorage.adoptGlyphCount(outCharCount);
-    return outCharCount;
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/HangulLayoutEngine.h b/icu4c/source/layout/HangulLayoutEngine.h
deleted file mode 100644 (file)
index 4e1d997..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2014 - All Rights Reserved
- *
- */
-
-#ifndef __HANGULAYOUTENGINE_H
-#define __HANGULAYOUTENGINE_H
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "LEGlyphFilter.h"
-#include "LayoutEngine.h"
-#include "OpenTypeLayoutEngine.h"
-
-#include "GlyphSubstitutionTables.h"
-#include "GlyphDefinitionTables.h"
-#include "GlyphPositioningTables.h"
-
-U_NAMESPACE_BEGIN
-
-class MPreFixups;
-class LEGlyphStorage;
-
-/**
- * This class implements OpenType layout for Old Hangul OpenType fonts, as
- * specified by Microsoft in "Creating and Supporting OpenType Fonts for
- * The Korean Hangul Script" (http://www.microsoft.com/typography/otfntdev/hangulot/default.htm)
- *
- * This class overrides the characterProcessing method to do Hangul character processing.
- * (See the MS spec. for more details)
- *
- * @internal
- */
-class HangulOpenTypeLayoutEngine : public OpenTypeLayoutEngine
-{
-public:
-    /**
-     * This is the main constructor. It constructs an instance of HangulOpenTypeLayoutEngine for
-     * a particular font, script and language. It takes the GSUB table as a parameter since
-     * LayoutEngine::layoutEngineFactory has to read the GSUB table to know that it has an
-     * Hangul OpenType font.
-     *
-     * @param fontInstance - the font
-     * @param scriptCode - the script
-     * @param langaugeCode - the language
-     * @param gsubTable - the GSUB table
-     * @param success - set to an error code if the operation fails
-     *
-     * @see LayoutEngine::layoutEngineFactory
-     * @see OpenTypeLayoutEngine
-     * @see ScriptAndLangaugeTags.h for script and language codes
-     *
-     * @internal
-     */
-    HangulOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                               le_int32 typoFlags, const LEReferenceTo<GlyphSubstitutionTableHeader> &gsubTable, LEErrorCode &success);
-
-    /**
-     * This constructor is used when the font requires a "canned" GSUB table which can't be known
-     * until after this constructor has been invoked.
-     *
-     * @param fontInstance - the font
-     * @param scriptCode - the script
-     * @param langaugeCode - the language
-     * @param success - set to an error code if the operation fails
-     *
-     * @see OpenTypeLayoutEngine
-     * @see ScriptAndLangaugeTags.h for script and language codes
-     *
-     * @internal
-     */
-    HangulOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                             le_int32 typoFlags, LEErrorCode &success);
-
-    /**
-     * The destructor, virtual for correct polymorphic invocation.
-     *
-     * @internal
-     */
-   virtual ~HangulOpenTypeLayoutEngine();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    static UClassID getStaticClassID();
-
-protected:
-
-    /**
-     * This method does Hangul OpenType character processing. It assigns the OpenType feature
-     * tags to the characters, and may compose a character sequence into a modern Hangul syllable,
-     * or decompose a modern Hangul syllable if it forms part of an old Hangul syllable.
-     *
-     * Input parameters:
-     * @param chars - the input character context
-     * @param offset - the index of the first character to process
-     * @param count - the number of characters to process
-     * @param max - the number of characters in the input context
-     * @param rightToLeft - <code>TRUE</code> if the characters are in a right to left directional run
-     * @param glyphStorage - the glyph storage object. The glyph and character index arrays will be set.
-     *                       the auxillary data array will be set to the feature tags.
-     *
-     * Output parameters:
-     * @param success - set to an error code if the operation fails
-     *
-     * @return the output character count
-     *
-     * @internal
-     */
-    virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-            LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-};
-
-U_NAMESPACE_END
-#endif
-
diff --git a/icu4c/source/layout/ICUFeatures.h b/icu4c/source/layout/ICUFeatures.h
deleted file mode 100644 (file)
index 5ce8bd8..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __ICUFEATURES_H
-#define __ICUFEATURES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-
-U_NAMESPACE_BEGIN
-
-struct FeatureRecord
-{
-    ATag        featureTag;
-    Offset      featureTableOffset;
-};
-
-struct FeatureTable
-{
-    Offset      featureParamsOffset;
-    le_uint16   lookupCount;
-    le_uint16   lookupListIndexArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(FeatureTable, lookupListIndexArray)
-
-struct FeatureListTable
-{
-    le_uint16           featureCount;
-    FeatureRecord       featureRecordArray[ANY_NUMBER];
-
-  LEReferenceTo<FeatureTable>  getFeatureTable(const LETableReference &base, le_uint16 featureIndex, LETag *featureTag, LEErrorCode &success) const;
-
-#if 0
-  const LEReferenceTo<FeatureTable>  getFeatureTable(const LETableReference &base, LETag featureTag, LEErrorCode &success) const;
-#endif
-};
-
-LE_VAR_ARRAY(FeatureListTable, featureRecordArray)
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/IndicClassTables.cpp b/icu4c/source/layout/IndicClassTables.cpp
deleted file mode 100644 (file)
index 6ab9338..0000000
+++ /dev/null
@@ -1,470 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2014 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEScripts.h"
-#include "OpenTypeTables.h"
-#include "OpenTypeUtilities.h"
-#include "IndicReordering.h"
-
-U_NAMESPACE_BEGIN
-
-// Split matra table indices
-#define _x1  (1 << CF_INDEX_SHIFT)
-#define _x2  (2 << CF_INDEX_SHIFT)
-#define _x3  (3 << CF_INDEX_SHIFT)
-#define _x4  (4 << CF_INDEX_SHIFT)
-#define _x5  (5 << CF_INDEX_SHIFT)
-#define _x6  (6 << CF_INDEX_SHIFT)
-#define _x7  (7 << CF_INDEX_SHIFT)
-#define _x8  (8 << CF_INDEX_SHIFT)
-#define _x9  (9 << CF_INDEX_SHIFT)
-
-// simple classes
-#define _xx  (CC_RESERVED)
-#define _ma  (CC_VOWEL_MODIFIER | CF_POS_ABOVE)
-#define _mp  (CC_VOWEL_MODIFIER | CF_POS_AFTER)
-#define _sa  (CC_STRESS_MARK | CF_POS_ABOVE)
-#define _sb  (CC_STRESS_MARK | CF_POS_BELOW)
-#define _iv  (CC_INDEPENDENT_VOWEL)
-#define _i2  (CC_INDEPENDENT_VOWEL_2)
-#define _i3  (CC_INDEPENDENT_VOWEL_3)
-#define _ct  (CC_CONSONANT | CF_CONSONANT)
-#define _cn  (CC_CONSONANT_WITH_NUKTA | CF_CONSONANT)
-#define _nu  (CC_NUKTA)
-#define _dv  (CC_DEPENDENT_VOWEL)
-#define _dl  (_dv | CF_POS_BEFORE)
-#define _db  (_dv | CF_POS_BELOW)
-#define _da  (_dv | CF_POS_ABOVE)
-#define _dr  (_dv | CF_POS_AFTER)
-#define _lm  (_dv | CF_LENGTH_MARK)
-#define _l1  (CC_SPLIT_VOWEL_PIECE_1 | CF_POS_BEFORE)
-#define _a1  (CC_SPLIT_VOWEL_PIECE_1 | CF_POS_ABOVE)
-#define _b2  (CC_SPLIT_VOWEL_PIECE_2 | CF_POS_BELOW)
-#define _r2  (CC_SPLIT_VOWEL_PIECE_2 | CF_POS_AFTER)
-#define _m2  (CC_SPLIT_VOWEL_PIECE_2 | CF_LENGTH_MARK)
-#define _m3  (CC_SPLIT_VOWEL_PIECE_3 | CF_LENGTH_MARK)
-#define _vr  (CC_VIRAMA)
-#define _al  (CC_AL_LAKUNA)
-
-// split matras
-#define _s1  (_dv | _x1)
-#define _s2  (_dv | _x2)
-#define _s3  (_dv | _x3)
-#define _s4  (_dv | _x4)
-#define _s5  (_dv | _x5)
-#define _s6  (_dv | _x6)
-#define _s7  (_dv | _x7)
-#define _s8  (_dv | _x8)
-#define _s9  (_dv | _x9)
-
-// consonants with special forms
-// NOTE: this assumes that no consonants with nukta have
-// special forms... (Bengali RA?)
-#define _bb  (_ct | CF_BELOW_BASE)
-#define _pb  (_ct | CF_POST_BASE)
-#define _fb  (_ct | CF_PRE_BASE)
-#define _vt  (_bb | CF_VATTU)
-#define _rv  (_vt | CF_REPH)
-#define _rp  (_pb | CF_REPH)
-#define _rb  (_bb | CF_REPH)
-
-//
-// Character class tables
-//
-static const IndicClassTable::CharClass devaCharClasses[] =
-{
-    _xx, _ma, _ma, _mp, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, // 0900 - 090F
-    _iv, _iv, _iv, _iv, _iv, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, // 0910 - 091F
-    _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _cn, _ct, _ct, _ct, _ct, _ct, _ct, // 0920 - 092F
-    _rv, _cn, _ct, _ct, _cn, _ct, _ct, _ct, _ct, _ct, _xx, _xx, _nu, _xx, _dr, _dl, // 0930 - 093F
-    _dr, _db, _db, _db, _db, _da, _da, _da, _da, _dr, _dr, _dr, _dr, _vr, _xx, _xx, // 0940 - 094F
-    _xx, _sa, _sb, _sa, _sa, _xx, _xx, _xx, _cn, _cn, _cn, _cn, _cn, _cn, _cn, _cn, // 0950 - 095F
-    _iv, _iv, _db, _db, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0960 - 096F
-    _xx                                                                             // 0970
-};
-
-static const IndicClassTable::CharClass bengCharClasses[] =
-{
-    _xx, _ma, _mp, _mp, _xx, _i2, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _i2, // 0980 - 098F
-    _iv, _xx, _xx, _iv, _iv, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, // 0990 - 099F
-    _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _ct, _ct, _bb, _ct, _ct, _pb, // 09A0 - 09AF
-    _rv, _xx, _ct, _xx, _xx, _xx, _ct, _ct, _ct, _ct, _xx, _xx, _nu, _xx, _r2, _dl, // 09B0 - 09BF
-    _dr, _db, _db, _db, _db, _xx, _xx, _l1, _dl, _xx, _xx, _s1, _s2, _vr, _xx, _xx, // 09C0 - 09CF
-    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _m2, _xx, _xx, _xx, _xx, _cn, _cn, _xx, _cn, // 09D0 - 09DF
-    _iv, _iv, _dv, _dv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 09E0 - 09EF
-    _rv, _ct, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx                           // 09F0 - 09FA
-};
-
-static const IndicClassTable::CharClass punjCharClasses[] =
-{
-    _xx, _ma, _ma, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _xx, _xx, _iv, // 0A00 - 0A0F
-    _iv, _xx, _xx, _i3, _iv, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, // 0A10 - 0A1F
-    _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _ct, _ct, _ct, _ct, _ct, _bb, // 0A20 - 0A2F
-    _vt, _xx, _ct, _cn, _xx, _bb, _cn, _xx, _ct, _bb, _xx, _xx, _nu, _xx, _dr, _dl, // 0A30 - 0A3F
-    _dr, _b2, _db, _xx, _xx, _xx, _xx, _da, _da, _xx, _xx, _a1, _da, _vr, _xx, _xx, // 0A40 - 0A4F
-    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _cn, _cn, _cn, _ct, _xx, _cn, _xx, // 0A50 - 0A5F
-    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0A60 - 0A6F
-    _ma, _ma, _xx, _xx, _xx                                                         // 0A70 - 0A74
-};
-
-static const IndicClassTable::CharClass gujrCharClasses[] =
-{
-    _xx, _ma, _ma, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _iv, _xx, _iv, // 0A80 - 0A8F
-    _iv, _iv, _xx, _iv, _iv, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, // 0A90 - 0A9F
-    _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _ct, _ct, _ct, _ct, _ct, _ct, // 0AA0 - 0AAF
-    _rv, _xx, _ct, _ct, _xx, _ct, _ct, _ct, _ct, _ct, _xx, _xx, _nu, _xx, _dr, _dl, // 0AB0 - 0ABF
-    _dr, _db, _db, _db, _db, _da, _xx, _da, _da, _dr, _xx, _dr, _dr, _vr, _xx, _xx, // 0AC0 - 0ACF
-    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0AD0 - 0ADF
-    _iv, _iv, _db, _db, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx  // 0AE0 - 0AEF
-};
-
-#if 1
-static const IndicClassTable::CharClass oryaCharClasses[] =
-{
-    _xx, _ma, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _iv, /* 0B00 - 0B0F */
-    _iv, _xx, _xx, _iv, _iv, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _ct, _bb, /* 0B10 - 0B1F */
-    _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _pb, /* 0B20 - 0B2F */
-    _rb, _xx, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _xx, _xx, _nu, _xx, _dr, _da, /* 0B30 - 0B3F */
-    _dr, _db, _db, _db, _xx, _xx, _xx, _dl, _s1, _xx, _xx, _s2, _s3, _vr, _xx, _xx, /* 0B40 - 0B4F */
-    _xx, _xx, _xx, _xx, _xx, _xx, _da, _dr, _xx, _xx, _xx, _xx, _cn, _cn, _xx, _pb, /* 0B50 - 0B5F */
-    _iv, _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, /* 0B60 - 0B6F */
-    _xx, _bb                                                                        /* 0B70 - 0B71 */
-};
-#else
-static const IndicClassTable::CharClass oryaCharClasses[] =
-{
-    _xx, _ma, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _iv, // 0B00 - 0B0F
-    _iv, _xx, _xx, _iv, _iv, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, // 0B10 - 0B1F
-    _ct, _ct, _ct, _ct, _bb, _ct, _ct, _ct, _bb, _xx, _ct, _ct, _bb, _bb, _bb, _pb, // 0B20 - 0B2F
-    _rb, _xx, _bb, _bb, _xx, _ct, _ct, _ct, _ct, _ct, _xx, _xx, _nu, _xx, _r2, _da, // 0B30 - 0B3F
-    _dr, _db, _db, _db, _xx, _xx, _xx, _l1, _s1, _xx, _xx, _s2, _s3, _vr, _xx, _xx, // 0B40 - 0B4F
-    _xx, _xx, _xx, _xx, _xx, _xx, _m2, _m2, _xx, _xx, _xx, _xx, _cn, _cn, _xx, _cn, // 0B50 - 0B5F
-    _iv, _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0B60 - 0B6F
-    _xx, _ct                                                                        // 0B70 - 0B71
-};
-#endif
-
-static const IndicClassTable::CharClass tamlCharClasses[] =
-{
-    _xx, _xx, _ma, _xx, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _xx, _iv, _iv, // 0B80 - 0B8F
-    _iv, _xx, _iv, _iv, _iv, _ct, _xx, _xx, _xx, _ct, _ct, _xx, _ct, _xx, _ct, _ct, // 0B90 - 0B9F
-    _xx, _xx, _xx, _ct, _ct, _xx, _xx, _xx, _ct, _ct, _ct, _xx, _xx, _xx, _ct, _ct, // 0BA0 - 0BAF
-    _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _xx, _xx, _xx, _r2, _dr, // 0BB0 - 0BBF
-    _da, _dr, _dr, _xx, _xx, _xx, _l1, _l1, _dl, _xx, _s1, _s2, _s3, _vr, _xx, _xx, // 0BC0 - 0BCF
-    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _m2, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0BD0 - 0BDF
-    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0BE0 - 0BEF
-    _xx, _xx, _xx                                                                   // 0BF0 - 0BF2
-};
-
-// FIXME: Should some of the bb's be pb's? (KA, NA, MA, YA, VA, etc. (approx 13))
-// U+C43 and U+C44 are _lm here not _dr.  Similar to the situation with U+CC3 and
-// U+CC4 in Kannada below.
-static const IndicClassTable::CharClass teluCharClasses[] =
-{
-    _xx, _mp, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _iv, _iv, // 0C00 - 0C0F
-    _iv, _xx, _iv, _iv, _iv, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, // 0C10 - 0C1F
-    _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _bb, // 0C20 - 0C2F
-    _bb, _bb, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _xx, _xx, _xx, _xx, _da, _da, // 0C30 - 0C3F
-    _da, _dr, _dr, _lm, _lm, _xx, _a1, _da, _s1, _xx, _da, _da, _da, _vr, _xx, _xx, // 0C40 - 0C4F
-    _xx, _xx, _xx, _xx, _xx, _da, _m2, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0C50 - 0C5F
-    _iv, _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx  // 0C60 - 0C6F
-};
-
-// U+CC3 and U+CC4 are _lm here not _dr since the Kannada rendering
-// rules want them below and to the right of the entire cluster
-//
-// There's some information about this in:
-//
-//  http://brahmi.sourceforge.net/docs/KannadaComputing.html
-static const IndicClassTable::CharClass kndaCharClasses[] =
-{
-    _xx, _xx, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _iv, _iv, // 0C80 - 0C8F
-    _iv, _xx, _iv, _iv, _iv, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, // 0C90 - 0C9F
-    _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _bb, // 0CA0 - 0CAF
-    _rb, _ct, _bb, _bb, _xx, _bb, _bb, _bb, _bb, _bb, _xx, _xx, _xx, _xx, _dr, _da, // 0CB0 - 0CBF
-    _s1, _dr, _r2, _lm, _lm, _xx, _a1, _s2, _s3, _xx, _s4, _s5, _da, _vr, _xx, _xx, // 0CC0 - 0CCF
-    _xx, _xx, _xx, _xx, _xx, _m3, _m2, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _ct, _xx, // 0CD0 - 0CDF
-    _iv, _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx  // 0CE0 - 0CEF
-};
-
-// FIXME: this is correct for old-style Malayalam (MAL) but not for reformed Malayalam (MLR)
-// FIXME: should there be a REPH for old-style Malayalam?
-static const IndicClassTable::CharClass mlymCharClasses[] =
-{
-    _xx, _xx, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _iv, _iv, // 0D00 - 0D0F
-    _iv, _xx, _iv, _iv, _iv, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, // 0D10 - 0D1F
-    _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _ct, _ct, _ct, _ct, _ct, _pb, // 0D20 - 0D2F
-    _fb, _fb, _bb, _ct, _ct, _pb, _ct, _ct, _ct, _ct, _xx, _xx, _xx, _xx, _r2, _dr, // 0D30 - 0D3F
-    _dr, _dr, _dr, _dr, _xx, _xx, _l1, _l1, _dl, _xx, _s1, _s2, _s3, _vr, _xx, _xx, // 0D40 - 0D4F
-    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _m2, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0D50 - 0D5F
-    _iv, _iv, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx  // 0D60 - 0D6F
-};
-static const IndicClassTable::CharClass sinhCharClasses[] =
-{
-    _xx, _xx, _mp, _mp, _xx, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, _iv, // 0D80 - 0D8F
-    _iv, _iv, _iv, _iv, _iv, _iv, _iv, _xx, _xx, _xx, _ct, _ct, _ct, _ct, _ct, _ct, // 0D90 - 0D9F
-    _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, // 0DA0 - 0DAF
-    _ct, _ct, _xx, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _ct, _xx, _xx, // 0DB0 - 0DBF
-    _ct, _ct, _ct, _ct, _ct, _ct, _ct, _xx, _xx, _xx, _al, _xx, _xx, _xx, _xx, _dr, // 0DC0 - 0DCF
-    _dr, _dr, _da, _da, _db, _xx, _db, _xx, _dr, _dl, _s1, _dl, _s2, _s3, _s4, _dr, // 0DD0 - 0DDF
-    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0DE0 - 0DEF
-    _xx, _xx, _dr, _dr, _xx                                                         // 0DF0 - 0DF4
-};
-
-//
-// Split matra tables
-//
-static const SplitMatra bengSplitTable[] = {{0x09C7, 0x09BE}, {0x09C7, 0x09D7}};
-
-static const SplitMatra oryaSplitTable[] = {{0x0B47, 0x0B56}, {0x0B47, 0x0B3E}, {0x0B47, 0x0B57}};
-
-static const SplitMatra tamlSplitTable[] = {{0x0BC6, 0x0BBE}, {0x0BC7, 0x0BBE}, {0x0BC6, 0x0BD7}};
-
-static const SplitMatra teluSplitTable[] = {{0x0C46, 0x0C56}};
-
-static const SplitMatra kndaSplitTable[] = {{0x0CBF, 0x0CD5}, {0x0CC6, 0x0CD5}, {0x0CC6, 0x0CD6}, {0x0CC6, 0x0CC2},
-                                            {0x0CC6, 0x0CC2, 0x0CD5}};
-
-static const SplitMatra mlymSplitTable[] = {{0x0D46, 0x0D3E}, {0x0D47, 0x0D3E}, {0x0D46, 0x0D57}};
-
-static const SplitMatra sinhSplitTable[] = {{0x0DD9, 0x0DCA}, {0x0DD9, 0x0DCF}, {0x0DD9, 0x0DCF, 0x0DCA},
-                                            {0x0DD9, 0x0DDF}};
-//
-// Script Flags
-//
-
-// FIXME: post 'GSUB' reordering of MATRA_PRE's for Malayalam and Tamil
-// FIXME: reformed Malayalam needs to reorder VATTU to before base glyph...
-// FIXME: not sure passing ZWJ/ZWNJ is best way to render Malayalam Cillu...
-// FIXME: eyelash RA only for Devanagari??
-#define DEVA_SCRIPT_FLAGS (SF_EYELASH_RA | SF_NO_POST_BASE_LIMIT | SF_FILTER_ZERO_WIDTH)
-#define BENG_SCRIPT_FLAGS (SF_REPH_AFTER_BELOW | SF_NO_POST_BASE_LIMIT | SF_FILTER_ZERO_WIDTH)
-#define PUNJ_SCRIPT_FLAGS (SF_NO_POST_BASE_LIMIT | SF_FILTER_ZERO_WIDTH)
-#define GUJR_SCRIPT_FLAGS (SF_NO_POST_BASE_LIMIT | SF_FILTER_ZERO_WIDTH)
-#define ORYA_SCRIPT_FLAGS (SF_REPH_AFTER_BELOW | SF_NO_POST_BASE_LIMIT | SF_FILTER_ZERO_WIDTH)
-#define TAML_SCRIPT_FLAGS (SF_MPRE_FIXUP | SF_NO_POST_BASE_LIMIT | SF_FILTER_ZERO_WIDTH)
-#define TELU_SCRIPT_FLAGS (SF_MATRAS_AFTER_BASE | SF_FILTER_ZERO_WIDTH | 3)
-#define KNDA_SCRIPT_FLAGS (SF_MATRAS_AFTER_BASE | SF_FILTER_ZERO_WIDTH | 3)
-#define MLYM_SCRIPT_FLAGS (SF_MPRE_FIXUP | SF_NO_POST_BASE_LIMIT /*| SF_FILTER_ZERO_WIDTH*/)
-#define SINH_SCRIPT_FLAGS (SF_NO_POST_BASE_LIMIT)
-
-//
-// Indic Class Tables
-//
-static const IndicClassTable devaClassTable = {0x0900, 0x0970, 2, DEVA_SCRIPT_FLAGS, devaCharClasses, NULL};
-
-static const IndicClassTable bengClassTable = {0x0980, 0x09FA, 3, BENG_SCRIPT_FLAGS, bengCharClasses, bengSplitTable};
-
-static const IndicClassTable punjClassTable = {0x0A00, 0x0A74, 2, PUNJ_SCRIPT_FLAGS, punjCharClasses, NULL};
-
-static const IndicClassTable gujrClassTable = {0x0A80, 0x0AEF, 2, GUJR_SCRIPT_FLAGS, gujrCharClasses, NULL};
-
-static const IndicClassTable oryaClassTable = {0x0B00, 0x0B71, 3, ORYA_SCRIPT_FLAGS, oryaCharClasses, oryaSplitTable};
-
-static const IndicClassTable tamlClassTable = {0x0B80, 0x0BF2, 3, TAML_SCRIPT_FLAGS, tamlCharClasses, tamlSplitTable};
-
-static const IndicClassTable teluClassTable = {0x0C00, 0x0C6F, 3, TELU_SCRIPT_FLAGS, teluCharClasses, teluSplitTable};
-
-static const IndicClassTable kndaClassTable = {0x0C80, 0x0CEF, 4, KNDA_SCRIPT_FLAGS, kndaCharClasses, kndaSplitTable};
-
-static const IndicClassTable mlymClassTable = {0x0D00, 0x0D6F, 4, MLYM_SCRIPT_FLAGS, mlymCharClasses, mlymSplitTable};
-
-static const IndicClassTable sinhClassTable = {0x0D80, 0x0DF4, 4, SINH_SCRIPT_FLAGS, sinhCharClasses, sinhSplitTable};
-
-//
-// IndicClassTable addresses
-//
-static const IndicClassTable * const indicClassTables[scriptCodeCount] = {
-    NULL,            /* 'zyyy' (COMMON) */
-    NULL,            /* 'qaai' (INHERITED) */
-    NULL,            /* 'arab' (ARABIC) */
-    NULL,            /* 'armn' (ARMENIAN) */
-    &bengClassTable, /* 'beng' (BENGALI) */
-    NULL,            /* 'bopo' (BOPOMOFO) */
-    NULL,            /* 'cher' (CHEROKEE) */
-    NULL,            /* 'copt' (COPTIC) */
-    NULL,            /* 'cyrl' (CYRILLIC) */
-    NULL,            /* 'dsrt' (DESERET) */
-    &devaClassTable, /* 'deva' (DEVANAGARI) */
-    NULL,            /* 'ethi' (ETHIOPIC) */
-    NULL,            /* 'geor' (GEORGIAN) */
-    NULL,            /* 'goth' (GOTHIC) */
-    NULL,            /* 'grek' (GREEK) */
-    &gujrClassTable, /* 'gujr' (GUJARATI) */
-    &punjClassTable, /* 'guru' (GURMUKHI) */
-    NULL,            /* 'hani' (HAN) */
-    NULL,            /* 'hang' (HANGUL) */
-    NULL,            /* 'hebr' (HEBREW) */
-    NULL,            /* 'hira' (HIRAGANA) */
-    &kndaClassTable, /* 'knda' (KANNADA) */
-    NULL,            /* 'kata' (KATAKANA) */
-    NULL,            /* 'khmr' (KHMER) */
-    NULL,            /* 'laoo' (LAO) */
-    NULL,            /* 'latn' (LATIN) */
-    &mlymClassTable, /* 'mlym' (MALAYALAM) */
-    NULL,            /* 'mong' (MONGOLIAN) */
-    NULL,            /* 'mymr' (MYANMAR) */
-    NULL,            /* 'ogam' (OGHAM) */
-    NULL,            /* 'ital' (OLD-ITALIC) */
-    &oryaClassTable, /* 'orya' (ORIYA) */
-    NULL,            /* 'runr' (RUNIC) */
-    &sinhClassTable, /* 'sinh' (SINHALA) */
-    NULL,            /* 'syrc' (SYRIAC) */
-    &tamlClassTable, /* 'taml' (TAMIL) */
-    &teluClassTable, /* 'telu' (TELUGU) */
-    NULL,            /* 'thaa' (THAANA) */
-    NULL,            /* 'thai' (THAI) */
-    NULL,            /* 'tibt' (TIBETAN) */
-    NULL,            /* 'cans' (CANADIAN-ABORIGINAL) */
-    NULL,            /* 'yiii' (YI) */
-    NULL,            /* 'tglg' (TAGALOG) */
-    NULL,            /* 'hano' (HANUNOO) */
-    NULL,            /* 'buhd' (BUHID) */
-    NULL,            /* 'tagb' (TAGBANWA) */
-    NULL,            /* 'brai' (BRAILLE) */
-    NULL,            /* 'cprt' (CYPRIOT) */
-    NULL,            /* 'limb' (LIMBU) */
-    NULL,            /* 'linb' (LINEAR_B) */
-    NULL,            /* 'osma' (OSMANYA) */
-    NULL,            /* 'shaw' (SHAVIAN) */
-    NULL,            /* 'tale' (TAI_LE) */
-    NULL,            /* 'ugar' (UGARITIC) */
-    NULL,            /* 'hrkt' (KATAKANA_OR_HIRAGANA) */
-    NULL,            /* 'bugi' (BUGINESE) */
-    NULL,            /* 'glag' (GLAGOLITIC) */
-    NULL,            /* 'khar' (KHAROSHTHI) */
-    NULL,            /* 'sylo' (SYLOTI_NAGRI) */
-    NULL,            /* 'talu' (NEW_TAI_LUE) */
-    NULL,            /* 'tfng' (TIFINAGH) */
-    NULL,            /* 'xpeo' (OLD_PERSIAN) */
-    NULL,            /* 'bali' (BALINESE) */
-    NULL,            /* 'batk' (BATK) */
-    NULL,            /* 'blis' (BLIS) */
-    NULL,            /* 'brah' (BRAH) */
-    NULL,            /* 'cham' (CHAM) */
-    NULL,            /* 'cirt' (CIRT) */
-    NULL,            /* 'cyrs' (CYRS) */
-    NULL,            /* 'egyd' (EGYD) */
-    NULL,            /* 'egyh' (EGYH) */
-    NULL,            /* 'egyp' (EGYP) */
-    NULL,            /* 'geok' (GEOK) */
-    NULL,            /* 'hans' (HANS) */
-    NULL,            /* 'hant' (HANT) */
-    NULL,            /* 'hmng' (HMNG) */
-    NULL,            /* 'hung' (HUNG) */
-    NULL,            /* 'inds' (INDS) */
-    NULL,            /* 'java' (JAVA) */
-    NULL,            /* 'kali' (KALI) */
-    NULL,            /* 'latf' (LATF) */
-    NULL,            /* 'latg' (LATG) */
-    NULL,            /* 'lepc' (LEPC) */
-    NULL,            /* 'lina' (LINA) */
-    NULL,            /* 'mand' (MAND) */
-    NULL,            /* 'maya' (MAYA) */
-    NULL,            /* 'mero' (MERO) */
-    NULL,            /* 'nko ' (NKO) */
-    NULL,            /* 'orkh' (ORKH) */
-    NULL,            /* 'perm' (PERM) */
-    NULL,            /* 'phag' (PHAGS_PA) */
-    NULL,            /* 'phnx' (PHOENICIAN) */
-    NULL,            /* 'plrd' (PLRD) */
-    NULL,            /* 'roro' (RORO) */
-    NULL,            /* 'sara' (SARA) */
-    NULL,            /* 'syre' (SYRE) */
-    NULL,            /* 'syrj' (SYRJ) */
-    NULL,            /* 'syrn' (SYRN) */
-    NULL,            /* 'teng' (TENG) */
-    NULL,            /* 'vai ' (VAII) */
-    NULL,            /* 'visp' (VISP) */
-    NULL,            /* 'xsux' (CUNEIFORM) */
-    NULL,            /* 'zxxx' (ZXXX) */
-    NULL,            /* 'zzzz' (UNKNOWN) */
-    NULL,            /* 'cari' (CARI) */
-    NULL,            /* 'jpan' (JPAN) */
-    NULL,            /* 'lana' (LANA) */
-    NULL,            /* 'lyci' (LYCI) */
-    NULL,            /* 'lydi' (LYDI) */
-    NULL,            /* 'olck' (OLCK) */
-    NULL,            /* 'rjng' (RJNG) */
-    NULL,            /* 'saur' (SAUR) */
-    NULL,            /* 'sgnw' (SGNW) */
-    NULL,            /* 'sund' (SUND) */
-    NULL,            /* 'moon' (MOON) */
-    NULL,            /* 'mtei' (MTEI) */
-    NULL,            /* 'armi' (ARMI) */
-    NULL,            /* 'avst' (AVST) */
-    NULL,            /* 'cakm' (CAKM) */
-    NULL,            /* 'kore' (KORE) */
-    NULL,            /* 'kthi' (KTHI) */
-    NULL,            /* 'mani' (MANI) */
-    NULL,            /* 'phli' (PHLI) */
-    NULL,            /* 'phlp' (PHLP) */
-    NULL,            /* 'phlv' (PHLV) */
-    NULL,            /* 'prti' (PRTI) */
-    NULL,            /* 'samr' (SAMR) */
-    NULL,            /* 'tavt' (TAVT) */
-    NULL,            /* 'zmth' (ZMTH) */
-    NULL,            /* 'zsym' (ZSYM) */
-    NULL,            /* 'bamu' (BAMUM) */
-    NULL,            /* 'lisu' (LISU) */
-    NULL,            /* 'nkgb' (NKGB) */
-    NULL             /* 'sarb' (OLD_SOUTH_ARABIAN) */
-};
-
-IndicClassTable::CharClass IndicClassTable::getCharClass(LEUnicode ch) const
-{
-    if (ch == C_SIGN_ZWJ) {
-        return CF_CONSONANT | CC_ZERO_WIDTH_MARK;
-    }
-
-    if (ch == C_SIGN_ZWNJ) {
-        return CC_ZERO_WIDTH_MARK;
-    }
-
-    if (ch < firstChar || ch > lastChar) {
-        return CC_RESERVED;
-    }
-
-    return classTable[ch - firstChar];
-}
-
-const IndicClassTable *IndicClassTable::getScriptClassTable(le_int32 scriptCode)
-{
-    if (scriptCode < 0 || scriptCode >= scriptCodeCount) {
-        return NULL;
-    }
-
-    return indicClassTables[scriptCode];
-}
-
-le_int32 IndicReordering::getWorstCaseExpansion(le_int32 scriptCode)
-{
-    const IndicClassTable *classTable = IndicClassTable::getScriptClassTable(scriptCode);
-
-    if (classTable == NULL) {
-        return 1;
-    }
-
-    return classTable->getWorstCaseExpansion();
-}
-
-le_bool IndicReordering::getFilterZeroWidth(le_int32 scriptCode)
-{
-    const IndicClassTable *classTable = IndicClassTable::getScriptClassTable(scriptCode);
-
-    if (classTable == NULL) {
-        return TRUE;
-    }
-
-    return classTable->getFilterZeroWidth();
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/IndicLayoutEngine.cpp b/icu4c/source/layout/IndicLayoutEngine.cpp
deleted file mode 100644 (file)
index 255aac3..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LayoutEngine.h"
-#include "OpenTypeLayoutEngine.h"
-#include "IndicLayoutEngine.h"
-#include "ScriptAndLanguageTags.h"
-
-#include "GlyphSubstitutionTables.h"
-#include "GlyphDefinitionTables.h"
-#include "GlyphPositioningTables.h"
-
-#include "GDEFMarkFilter.h"
-#include "LEGlyphStorage.h"
-
-#include "IndicReordering.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(IndicOpenTypeLayoutEngine)
-
-IndicOpenTypeLayoutEngine::IndicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                                                     le_int32 typoFlags, le_bool version2, const LEReferenceTo<GlyphSubstitutionTableHeader> &gsubTable, LEErrorCode &success)
-    : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success), fMPreFixups(NULL)
-{
-       if ( version2 ) {
-               fFeatureMap = IndicReordering::getv2FeatureMap(fFeatureMapCount);
-       } else {
-        fFeatureMap = IndicReordering::getFeatureMap(fFeatureMapCount);
-       }
-       fFeatureOrder = TRUE;
-    fVersion2 = version2;
-    fFilterZeroWidth = IndicReordering::getFilterZeroWidth(fScriptCode);
-}
-
-IndicOpenTypeLayoutEngine::IndicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags, LEErrorCode &success)
-    : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success), fMPreFixups(NULL)
-{
-    fFeatureMap = IndicReordering::getFeatureMap(fFeatureMapCount);
-    fFeatureOrder = TRUE;
-       fVersion2 =  FALSE;
-}
-
-IndicOpenTypeLayoutEngine::~IndicOpenTypeLayoutEngine()
-{
-    // nothing to do
-}
-
-// Input: characters, tags
-// Output: glyphs, char indices
-le_int32 IndicOpenTypeLayoutEngine::glyphProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-                    LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    le_int32 retCount = OpenTypeLayoutEngine::glyphProcessing(chars, offset, count, max, rightToLeft, glyphStorage, success);
-
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (fVersion2) {
-        IndicReordering::finalReordering(glyphStorage,retCount);
-        IndicReordering::applyPresentationForms(glyphStorage,retCount);
-        OpenTypeLayoutEngine::glyphSubstitution(count,max, rightToLeft, glyphStorage, success);
-    } else {
-        IndicReordering::adjustMPres(fMPreFixups, glyphStorage, success);
-    }
-    return retCount;
-}
-
-// Input: characters
-// Output: characters, char indices, tags
-// Returns: output character count
-le_int32 IndicOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-        LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    le_int32 worstCase = count * IndicReordering::getWorstCaseExpansion(fScriptCode);
-
-    outChars = LE_NEW_ARRAY(LEUnicode, worstCase);
-
-    if (outChars == NULL) {
-        success = LE_MEMORY_ALLOCATION_ERROR;
-        return 0;
-    }
-
-    glyphStorage.allocateGlyphArray(worstCase, rightToLeft, success);
-    glyphStorage.allocateAuxData(success);
-
-    if (LE_FAILURE(success)) {
-        LE_DELETE_ARRAY(outChars);
-        return 0;
-    }
-
-    // NOTE: assumes this allocates featureTags...
-    // (probably better than doing the worst case stuff here...)
-
-    le_int32 outCharCount;
-    if (fVersion2) {
-        outCharCount = IndicReordering::v2process(&chars[offset], count, fScriptCode, outChars, glyphStorage);
-    } else {
-        outCharCount = IndicReordering::reorder(&chars[offset], count, fScriptCode, outChars, glyphStorage, &fMPreFixups, success);
-    }
-
-    if (LE_FAILURE(success)) {
-        LE_DELETE_ARRAY(outChars);
-        return 0;
-    }
-
-    glyphStorage.adoptGlyphCount(outCharCount);
-    return outCharCount;
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/IndicLayoutEngine.h b/icu4c/source/layout/IndicLayoutEngine.h
deleted file mode 100644 (file)
index ec239eb..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2014 - All Rights Reserved
- *
- */
-
-#ifndef __INDICLAYOUTENGINE_H
-#define __INDICLAYOUTENGINE_H
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "LEGlyphFilter.h"
-#include "LayoutEngine.h"
-#include "OpenTypeLayoutEngine.h"
-
-#include "GlyphSubstitutionTables.h"
-#include "GlyphDefinitionTables.h"
-#include "GlyphPositioningTables.h"
-
-U_NAMESPACE_BEGIN
-
-class MPreFixups;
-class LEGlyphStorage;
-
-/**
- * This class implements OpenType layout for Indic OpenType fonts, as
- * specified by Microsoft in "Creating and Supporting OpenType Fonts for
- * Indic Scripts" (http://www.microsoft.com/typography/otspec/indicot/default.htm)
- *
- * This class overrides the characterProcessing method to do Indic character processing
- * and reordering, and the glyphProcessing method to implement post-GSUB processing for
- * left matras. (See the MS spec. for more details)
- *
- * @internal
- */
-class IndicOpenTypeLayoutEngine : public OpenTypeLayoutEngine
-{
-public:
-    /**
-     * This is the main constructor. It constructs an instance of IndicOpenTypeLayoutEngine for
-     * a particular font, script and language. It takes the GSUB table as a parameter since
-     * LayoutEngine::layoutEngineFactory has to read the GSUB table to know that it has an
-     * Indic OpenType font.
-     *
-     * @param fontInstance - the font
-     * @param scriptCode - the script
-     * @param langaugeCode - the language
-     * @param gsubTable - the GSUB table
-     * @param success - set to an error code if the operation fails
-     *
-     * @see LayoutEngine::layoutEngineFactory
-     * @see OpenTypeLayoutEngine
-     * @see ScriptAndLangaugeTags.h for script and language codes
-     *
-     * @internal
-     */
-    IndicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                            le_int32 typoFlags, le_bool version2, const LEReferenceTo<GlyphSubstitutionTableHeader> &gsubTable, LEErrorCode &success);
-
-    /**
-     * This constructor is used when the font requires a "canned" GSUB table which can't be known
-     * until after this constructor has been invoked.
-     *
-     * @param fontInstance - the font
-     * @param scriptCode - the script
-     * @param langaugeCode - the language
-     * @param success - set to an error code if the operation fails
-     *
-     * @see OpenTypeLayoutEngine
-     * @see ScriptAndLangaugeTags.h for script and language codes
-     *
-     * @internal
-     */
-    IndicOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                             le_int32 typoFlags, LEErrorCode &success);
-
-    /**
-     * The destructor, virtual for correct polymorphic invocation.
-     *
-     * @internal
-     */
-   virtual ~IndicOpenTypeLayoutEngine();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    static UClassID getStaticClassID();
-
-protected:
-
-    /**
-     * This method does Indic OpenType character processing. It assigns the OpenType feature
-     * tags to the characters, and may generate output characters which have been reordered. For
-     * some Indic scripts, it may also split some vowels, resulting in more output characters
-     * than input characters.
-     *
-     * Input parameters:
-     * @param chars - the input character context
-     * @param offset - the index of the first character to process
-     * @param count - the number of characters to process
-     * @param max - the number of characters in the input context
-     * @param rightToLeft - <code>TRUE</code> if the characters are in a right to left directional run
-     * @param glyphStorage - the glyph storage object. The glyph and character index arrays will be set.
-     *                       the auxillary data array will be set to the feature tags.
-     *
-     * Output parameters:
-     * @param success - set to an error code if the operation fails
-     *
-     * @return the output character count
-     *
-     * @internal
-     */
-    virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-            LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    /**
-     * This method does character to glyph mapping, applies the GSUB table and applies
-     * any post GSUB fixups for left matras. It calls OpenTypeLayoutEngine::glyphProcessing
-     * to do the character to glyph mapping, and apply the GSUB table.
-     *
-     * Note that in the case of "canned" GSUB tables, the output glyph indices may be
-     * "fake" glyph indices that need to be converted to "real" glyph indices by the
-     * glyphPostProcessing method.
-     *
-     * Input parameters:
-     * @param chars - the input character context
-     * @param offset - the index of the first character to process
-     * @param count - the number of characters to process
-     * @param max - the number of characters in the input context
-     * @param rightToLeft - <code>TRUE</code> if the characters are in a right to left directional run
-     * @param featureTags - the feature tag array
-     * @param glyphStorage - the glyph storage object. The glyph and char index arrays will be set.
-     *
-     * Output parameters:
-     * @param success - set to an error code if the operation fails
-     *
-     * @return the number of glyphs in the output glyph index array
-     *
-     * Note: if the character index array was already set by the characterProcessing
-     * method, this method won't change it.
-     *
-     * @internal
-     */
-    virtual le_int32 glyphProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-            LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    le_bool fVersion2;
-
-private:
-
-    MPreFixups *fMPreFixups;
-
-};
-
-U_NAMESPACE_END
-#endif
-
diff --git a/icu4c/source/layout/IndicRearrangement.h b/icu4c/source/layout/IndicRearrangement.h
deleted file mode 100644 (file)
index 844c1aa..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. and Others 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __INDICREARRANGEMENT_H
-#define __INDICREARRANGEMENT_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LayoutTables.h"
-#include "StateTables.h"
-#include "MorphTables.h"
-#include "MorphStateTables.h"
-
-U_NAMESPACE_BEGIN
-
-struct IndicRearrangementSubtableHeader : MorphStateTableHeader
-{
-};
-
-struct IndicRearrangementSubtableHeader2 : MorphStateTableHeader2
-{
-};
-
-enum IndicRearrangementFlags
-{
-    irfMarkFirst    = 0x8000,
-    irfDontAdvance  = 0x4000,
-    irfMarkLast     = 0x2000,
-    irfReserved     = 0x1FF0,
-    irfVerbMask     = 0x000F
-};
-
-enum IndicRearrangementVerb
-{
-    irvNoAction = 0x0000,               /*   no action    */
-    irvxA       = 0x0001,               /*    Ax => xA    */
-    irvDx       = 0x0002,               /*    xD => Dx    */
-    irvDxA      = 0x0003,               /*   AxD => DxA   */
-        
-    irvxAB      = 0x0004,               /*   ABx => xAB   */
-    irvxBA      = 0x0005,               /*   ABx => xBA   */
-    irvCDx      = 0x0006,               /*   xCD => CDx   */
-    irvDCx      = 0x0007,               /*   xCD => DCx   */
-
-    irvCDxA     = 0x0008,               /*  AxCD => CDxA  */
-    irvDCxA     = 0x0009,               /*  AxCD => DCxA  */
-    irvDxAB     = 0x000A,               /*  ABxD => DxAB  */
-    irvDxBA     = 0x000B,               /*  ABxD => DxBA  */
-
-    irvCDxAB    = 0x000C,               /* ABxCD => CDxAB */
-    irvCDxBA    = 0x000D,               /* ABxCD => CDxBA */
-    irvDCxAB    = 0x000E,               /* ABxCD => DCxAB */
-    irvDCxBA    = 0x000F                /* ABxCD => DCxBA */
-};
-
-struct IndicRearrangementStateEntry : StateEntry
-{
-};
-
-struct IndicRearrangementStateEntry2 : StateEntry2
-{
-};
-
-U_NAMESPACE_END
-#endif
-
diff --git a/icu4c/source/layout/IndicRearrangementProcessor.cpp b/icu4c/source/layout/IndicRearrangementProcessor.cpp
deleted file mode 100644 (file)
index 6e2ad1d..0000000
+++ /dev/null
@@ -1,476 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2016 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "StateTables.h"
-#include "MorphStateTables.h"
-#include "SubtableProcessor.h"
-#include "StateTableProcessor.h"
-#include "IndicRearrangementProcessor.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(IndicRearrangementProcessor)
-
-  IndicRearrangementProcessor::IndicRearrangementProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success)
-  : StateTableProcessor(morphSubtableHeader, success), 
-  indicRearrangementSubtableHeader(morphSubtableHeader, success),
-  entryTable(stateTableHeader, success, (const IndicRearrangementStateEntry*)(&stateTableHeader->stHeader),
-             entryTableOffset, LE_UNBOUNDED_ARRAY),
-  int16Table(stateTableHeader, success, (const le_int16*)entryTable.getAlias(), 0, LE_UNBOUNDED_ARRAY)
-  
-{
-}
-
-IndicRearrangementProcessor::~IndicRearrangementProcessor()
-{
-}
-
-void IndicRearrangementProcessor::beginStateTable()
-{
-    firstGlyph = 0;
-    lastGlyph = 0;
-}
-
-ByteOffset IndicRearrangementProcessor::processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex index)
-{
-  LEErrorCode success = LE_NO_ERROR; // todo- make a param?
-  const IndicRearrangementStateEntry *entry = entryTable.getAlias(index,success);
-    ByteOffset newState = SWAPW(entry->newStateOffset);
-    IndicRearrangementFlags flags = (IndicRearrangementFlags) SWAPW(entry->flags);
-
-    if (flags & irfMarkFirst) {
-        firstGlyph = (le_uint32)currGlyph;
-    }
-
-    if (flags & irfMarkLast) {
-        lastGlyph = (le_uint32)currGlyph;
-    }
-
-    doRearrangementAction(glyphStorage, (IndicRearrangementVerb) (flags & irfVerbMask), success);
-
-    if (!(flags & irfDontAdvance)) {
-        // XXX: Should handle reverse too...
-        currGlyph += 1;
-    }
-
-    return newState;
-}
-
-void IndicRearrangementProcessor::endStateTable()
-{
-}
-
-void IndicRearrangementProcessor::doRearrangementAction(LEGlyphStorage &glyphStorage, IndicRearrangementVerb verb, LEErrorCode &success) const
-{
-    LEGlyphID a, b, c, d;
-    le_int32 ia, ib, ic, id, ix, x;
-
-    if (LE_FAILURE(success)) return;
-
-    if (verb == irvNoAction) {
-        return;
-    }
-    if (firstGlyph > lastGlyph) {
-        success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-        return;
-    }
-
-    switch(verb)
-    {
-    case irvxA:
-        if (firstGlyph == lastGlyph) break;
-        if (firstGlyph + 1 < firstGlyph) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-        break;
-        }
-        a = glyphStorage[firstGlyph];
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        x = firstGlyph + 1;
-
-        while (x <= (int32_t)lastGlyph) {
-            glyphStorage[x - 1] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x - 1, ix, success);
-            x += 1;
-        }
-
-        glyphStorage[lastGlyph] = a;
-        glyphStorage.setCharIndex(lastGlyph, ia, success);
-        break;
-
-    case irvDx:
-        if (firstGlyph == lastGlyph) break;
-        if (lastGlyph - 1 > lastGlyph) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        d = glyphStorage[lastGlyph];
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-        x = lastGlyph - 1;
-
-        while (x >= (int32_t)firstGlyph) {
-            glyphStorage[x + 1] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x + 1, ix, success);
-            x -= 1;
-        }
-
-        glyphStorage[firstGlyph] = d;
-        glyphStorage.setCharIndex(firstGlyph, id, success);
-        break;
-
-    case irvDxA:
-        a = glyphStorage[firstGlyph];
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        id = glyphStorage.getCharIndex(lastGlyph,  success);
-
-        glyphStorage[firstGlyph] = glyphStorage[lastGlyph];
-        glyphStorage[lastGlyph] = a;
-
-        glyphStorage.setCharIndex(firstGlyph, id, success);
-        glyphStorage.setCharIndex(lastGlyph,  ia, success);
-        break;
-        
-    case irvxAB:
-        if ((firstGlyph + 2 < firstGlyph) ||
-            (lastGlyph - firstGlyph < 1)) { // difference == 1 is a no-op, < 1 is an error.
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        b = glyphStorage[firstGlyph + 1];
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
-        x = firstGlyph + 2;
-
-        while (x <= (int32_t)lastGlyph) {
-            glyphStorage[x - 2] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x - 2, ix, success);
-            x += 1;
-        }
-
-        glyphStorage[lastGlyph - 1] = a;
-        glyphStorage[lastGlyph] = b;
-
-        glyphStorage.setCharIndex(lastGlyph - 1, ia, success);
-        glyphStorage.setCharIndex(lastGlyph, ib, success);
-        break;
-
-    case irvxBA:
-        if ((firstGlyph + 2 < firstGlyph) ||
-            (lastGlyph - firstGlyph < 1)) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        b = glyphStorage[firstGlyph + 1];
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
-        x = firstGlyph + 2;
-
-        while (x <= (int32_t)lastGlyph) {
-            glyphStorage[x - 2] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x - 2, ix, success);
-            x += 1;
-        }
-
-        glyphStorage[lastGlyph - 1] = b;
-        glyphStorage[lastGlyph] = a;
-
-        glyphStorage.setCharIndex(lastGlyph - 1, ib, success);
-        glyphStorage.setCharIndex(lastGlyph, ia, success);
-        break;
-
-    case irvCDx:
-        if ((lastGlyph - 2 > lastGlyph) ||
-            (lastGlyph - firstGlyph < 1)) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        c = glyphStorage[lastGlyph - 1];
-        d = glyphStorage[lastGlyph];
-        ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-        x = lastGlyph - 2;
-
-        while (x >= (int32_t)firstGlyph) {
-            glyphStorage[x + 2] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x + 2, ix, success);
-            x -= 1;
-        }
-        
-        glyphStorage[firstGlyph] = c;
-        glyphStorage[firstGlyph + 1] = d;
-
-        glyphStorage.setCharIndex(firstGlyph, ic, success);
-        glyphStorage.setCharIndex(firstGlyph + 1, id, success);
-        break; 
-
-    case irvDCx:
-        if ((lastGlyph - 2 > lastGlyph) ||
-            (lastGlyph - firstGlyph < 1)) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        c = glyphStorage[lastGlyph - 1];
-        d = glyphStorage[lastGlyph];
-        ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-        x = lastGlyph - 2;
-
-        while (x >= (int32_t)firstGlyph) {
-            glyphStorage[x + 2] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x + 2, ix, success);
-            x -= 1;
-        }
-        
-        glyphStorage[firstGlyph] = d;
-        glyphStorage[firstGlyph + 1] = c;
-
-        glyphStorage.setCharIndex(firstGlyph, id, success);
-        glyphStorage.setCharIndex(firstGlyph + 1, ic, success);
-        break; 
-
-    case irvCDxA:
-        if ((lastGlyph - 2 > lastGlyph) ||
-            (lastGlyph - firstGlyph < 2)) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        c = glyphStorage[lastGlyph - 1];
-        d = glyphStorage[lastGlyph];
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-        x = lastGlyph - 2;
-
-        while (x > (int32_t)firstGlyph) {
-            glyphStorage[x + 1] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x + 1, ix, success);
-            x -= 1;
-        }
-        
-        glyphStorage[firstGlyph] = c;
-        glyphStorage[firstGlyph + 1] = d;
-        glyphStorage[lastGlyph] = a;
-
-        glyphStorage.setCharIndex(firstGlyph, ic, success);
-        glyphStorage.setCharIndex(firstGlyph + 1, id, success);
-        glyphStorage.setCharIndex(lastGlyph, ia, success);
-        break; 
-
-    case irvDCxA:
-        if ((lastGlyph - 2 > lastGlyph) ||
-            (lastGlyph - firstGlyph < 2)) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        c = glyphStorage[lastGlyph - 1];
-        d = glyphStorage[lastGlyph];
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-        x = lastGlyph - 2;
-
-        while (x > (int32_t)firstGlyph) {
-            glyphStorage[x + 1] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x + 1, ix, success);
-            x -= 1;
-        }
-        
-        glyphStorage[firstGlyph] = d;
-        glyphStorage[firstGlyph + 1] = c;
-        glyphStorage[lastGlyph] = a;
-
-        glyphStorage.setCharIndex(firstGlyph, id, success);
-        glyphStorage.setCharIndex(firstGlyph + 1, ic, success);
-        glyphStorage.setCharIndex(lastGlyph, ia, success);
-        break; 
-
-    case irvDxAB:
-        if ((firstGlyph + 2 < firstGlyph) ||
-            (lastGlyph - firstGlyph < 2)) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        b = glyphStorage[firstGlyph + 1];
-        d = glyphStorage[lastGlyph];
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-        x = firstGlyph + 2;
-
-        while (x < (int32_t)lastGlyph) {
-            glyphStorage[x - 2] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x - 2, ix, success);
-            x += 1;
-        }
-
-        glyphStorage[firstGlyph] = d;
-        glyphStorage[lastGlyph - 1] = a;
-        glyphStorage[lastGlyph] = b;
-
-        glyphStorage.setCharIndex(firstGlyph, id, success);
-        glyphStorage.setCharIndex(lastGlyph - 1, ia, success);
-        glyphStorage.setCharIndex(lastGlyph, ib, success);
-        break;
-
-    case irvDxBA:
-        if ((firstGlyph + 2 < firstGlyph) ||
-            (lastGlyph - firstGlyph < 2)) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        b = glyphStorage[firstGlyph + 1];
-        d = glyphStorage[lastGlyph];
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-        x = firstGlyph + 2;
-
-        while (x < (int32_t)lastGlyph) {
-            glyphStorage[x - 2] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x - 2, ix, success);
-            x += 1;
-        }
-
-        glyphStorage[firstGlyph] = d;
-        glyphStorage[lastGlyph - 1] = b;
-        glyphStorage[lastGlyph] = a;
-
-        glyphStorage.setCharIndex(firstGlyph, id, success);
-        glyphStorage.setCharIndex(lastGlyph - 1, ib, success);
-        glyphStorage.setCharIndex(lastGlyph, ia, success);
-        break;
-
-    case irvCDxAB:
-        if (lastGlyph - firstGlyph < 3) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        b = glyphStorage[firstGlyph + 1];
-
-        glyphStorage[firstGlyph] = glyphStorage[lastGlyph - 1];
-        glyphStorage[firstGlyph + 1] = glyphStorage[lastGlyph];
-
-        glyphStorage[lastGlyph - 1] = a;
-        glyphStorage[lastGlyph] = b;
-
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
-        ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-
-        glyphStorage.setCharIndex(firstGlyph, ic, success);
-        glyphStorage.setCharIndex(firstGlyph + 1, id, success);
-
-        glyphStorage.setCharIndex(lastGlyph - 1, ia, success);
-        glyphStorage.setCharIndex(lastGlyph, ib, success);
-        break;
-
-    case irvCDxBA:
-        if (lastGlyph - firstGlyph < 3) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        b = glyphStorage[firstGlyph + 1];
-
-        glyphStorage[firstGlyph] = glyphStorage[lastGlyph - 1];
-        glyphStorage[firstGlyph + 1] = glyphStorage[lastGlyph];
-
-        glyphStorage[lastGlyph - 1] = b;
-        glyphStorage[lastGlyph] = a;
-
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
-        ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-
-        glyphStorage.setCharIndex(firstGlyph, ic, success);
-        glyphStorage.setCharIndex(firstGlyph + 1, id, success);
-
-        glyphStorage.setCharIndex(lastGlyph - 1, ib, success);
-        glyphStorage.setCharIndex(lastGlyph, ia, success);
-        break;
-
-    case irvDCxAB:
-        if (lastGlyph - firstGlyph < 3) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        b = glyphStorage[firstGlyph + 1];
-
-        glyphStorage[firstGlyph] = glyphStorage[lastGlyph];
-        glyphStorage[firstGlyph + 1] = glyphStorage[lastGlyph - 1];
-
-        glyphStorage[lastGlyph - 1] = a;
-        glyphStorage[lastGlyph] = b;
-
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
-        ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-
-        glyphStorage.setCharIndex(firstGlyph, id, success);
-        glyphStorage.setCharIndex(firstGlyph + 1, ic, success);
-
-        glyphStorage.setCharIndex(lastGlyph - 1, ia, success);
-        glyphStorage.setCharIndex(lastGlyph, ib, success);
-        break;
-
-    case irvDCxBA:
-        if (lastGlyph - firstGlyph < 3) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        b = glyphStorage[firstGlyph + 1];
-
-        glyphStorage[firstGlyph] = glyphStorage[lastGlyph];
-        glyphStorage[firstGlyph + 1] = glyphStorage[lastGlyph - 1];
-
-        glyphStorage[lastGlyph - 1] = b;
-        glyphStorage[lastGlyph] = a;
-
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
-        ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-
-        glyphStorage.setCharIndex(firstGlyph, id, success);
-        glyphStorage.setCharIndex(firstGlyph + 1, ic, success);
-
-        glyphStorage.setCharIndex(lastGlyph - 1, ib, success);
-        glyphStorage.setCharIndex(lastGlyph, ia, success);
-        break;
-    
-    default:
-        break;
-    }
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/IndicRearrangementProcessor.h b/icu4c/source/layout/IndicRearrangementProcessor.h
deleted file mode 100644 (file)
index 0eb0d95..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2015 - All Rights Reserved
- *
- */
-
-#ifndef __INDICREARRANGEMENTPROCESSOR_H
-#define __INDICREARRANGEMENTPROCESSOR_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor.h"
-#include "StateTableProcessor.h"
-#include "IndicRearrangement.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class IndicRearrangementProcessor : public StateTableProcessor
-{
-public:
-    virtual void beginStateTable();
-
-    virtual ByteOffset processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex index);
-
-    virtual void endStateTable();
-
-    void doRearrangementAction(LEGlyphStorage &glyphStorage, IndicRearrangementVerb verb, LEErrorCode &success) const;
-
-    IndicRearrangementProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success);
-    virtual ~IndicRearrangementProcessor();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    static UClassID getStaticClassID();
-
-protected:
-    le_uint32 firstGlyph;
-    le_uint32 lastGlyph;
-
-    LEReferenceTo<IndicRearrangementSubtableHeader> indicRearrangementSubtableHeader;
-    LEReferenceToArrayOf<IndicRearrangementStateEntry> entryTable;
-    LEReferenceToArrayOf<le_int16> int16Table;
-
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/IndicRearrangementProcessor2.cpp b/icu4c/source/layout/IndicRearrangementProcessor2.cpp
deleted file mode 100644 (file)
index 6fdf6c2..0000000
+++ /dev/null
@@ -1,474 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2016 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "StateTables.h"
-#include "MorphStateTables.h"
-#include "SubtableProcessor2.h"
-#include "StateTableProcessor2.h"
-#include "IndicRearrangementProcessor2.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(IndicRearrangementProcessor2)
-
-IndicRearrangementProcessor2::IndicRearrangementProcessor2(
-      const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success)
-  : StateTableProcessor2(morphSubtableHeader, success), entryTable(stHeader, success, entryTableOffset, LE_UNBOUNDED_ARRAY), 
-    indicRearrangementSubtableHeader(morphSubtableHeader, success)
-{
-}
-
-IndicRearrangementProcessor2::~IndicRearrangementProcessor2()
-{
-}
-
-void IndicRearrangementProcessor2::beginStateTable()
-{
-    firstGlyph = 0;
-    lastGlyph = 0;
-}
-
-le_uint16 IndicRearrangementProcessor2::processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, 
-                                                          EntryTableIndex2 index, LEErrorCode &success)
-{
-    const IndicRearrangementStateEntry2 *entry = entryTable.getAlias(index, success);
-    if (LE_FAILURE(success)) return 0; // TODO - what to return in bad state?
-    le_uint16 newState = SWAPW(entry->newStateIndex); // index to the new state
-    IndicRearrangementFlags  flags =  (IndicRearrangementFlags) SWAPW(entry->flags);
-    
-    if (flags & irfMarkFirst) {
-        firstGlyph = (le_uint32)currGlyph;
-    }
-
-    if (flags & irfMarkLast) {
-        lastGlyph = (le_uint32)currGlyph;
-    }
-
-    doRearrangementAction(glyphStorage, (IndicRearrangementVerb) (flags & irfVerbMask), success);
-
-    if (!(flags & irfDontAdvance)) {
-        currGlyph += dir;
-    }
-    
-    return newState; // index to new state
-}
-
-void IndicRearrangementProcessor2::endStateTable()
-{
-}
-
-void IndicRearrangementProcessor2::doRearrangementAction(LEGlyphStorage &glyphStorage, IndicRearrangementVerb verb, LEErrorCode &success) const
-{
-    LEGlyphID a, b, c, d;
-    le_int32 ia, ib, ic, id, ix, x;
-
-    if (LE_FAILURE(success)) return;
-
-    if (verb == irvNoAction) {
-        return;
-    }
-    if (firstGlyph > lastGlyph) {
-        success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-        return;
-    }
-
-    switch(verb)
-    {
-    case irvxA:
-        if (firstGlyph == lastGlyph) break;
-        if (firstGlyph + 1 < firstGlyph) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-        break;
-        }
-        a = glyphStorage[firstGlyph];
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        x = firstGlyph + 1;
-
-        while (x <= (int32_t)lastGlyph) {
-            glyphStorage[x - 1] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x - 1, ix, success);
-            x += 1;
-        }
-
-        glyphStorage[lastGlyph] = a;
-        glyphStorage.setCharIndex(lastGlyph, ia, success);
-        break;
-
-    case irvDx:
-        if (firstGlyph == lastGlyph) break;
-        if (lastGlyph - 1 > lastGlyph) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        d = glyphStorage[lastGlyph];
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-        x = lastGlyph - 1;
-
-        while (x >= (int32_t)firstGlyph) {
-            glyphStorage[x + 1] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x + 1, ix, success);
-            x -= 1;
-        }
-
-        glyphStorage[firstGlyph] = d;
-        glyphStorage.setCharIndex(firstGlyph, id, success);
-        break;
-
-    case irvDxA:
-        a = glyphStorage[firstGlyph];
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        id = glyphStorage.getCharIndex(lastGlyph,  success);
-
-        glyphStorage[firstGlyph] = glyphStorage[lastGlyph];
-        glyphStorage[lastGlyph] = a;
-
-        glyphStorage.setCharIndex(firstGlyph, id, success);
-        glyphStorage.setCharIndex(lastGlyph,  ia, success);
-        break;
-        
-    case irvxAB:
-        if ((firstGlyph + 2 < firstGlyph) ||
-            (lastGlyph - firstGlyph < 1)) { // difference == 1 is a no-op, < 1 is an error.
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        b = glyphStorage[firstGlyph + 1];
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
-        x = firstGlyph + 2;
-
-        while (x <= (int32_t)lastGlyph) {
-            glyphStorage[x - 2] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x - 2, ix, success);
-            x += 1;
-        }
-
-        glyphStorage[lastGlyph - 1] = a;
-        glyphStorage[lastGlyph] = b;
-
-        glyphStorage.setCharIndex(lastGlyph - 1, ia, success);
-        glyphStorage.setCharIndex(lastGlyph, ib, success);
-        break;
-
-    case irvxBA:
-        if ((firstGlyph + 2 < firstGlyph) ||
-            (lastGlyph - firstGlyph < 1)) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        b = glyphStorage[firstGlyph + 1];
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
-        x = firstGlyph + 2;
-
-        while (x <= (int32_t)lastGlyph) {
-            glyphStorage[x - 2] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x - 2, ix, success);
-            x += 1;
-        }
-
-        glyphStorage[lastGlyph - 1] = b;
-        glyphStorage[lastGlyph] = a;
-
-        glyphStorage.setCharIndex(lastGlyph - 1, ib, success);
-        glyphStorage.setCharIndex(lastGlyph, ia, success);
-        break;
-
-    case irvCDx:
-        if ((lastGlyph - 2 > lastGlyph) ||
-            (lastGlyph - firstGlyph < 1)) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        c = glyphStorage[lastGlyph - 1];
-        d = glyphStorage[lastGlyph];
-        ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-        x = lastGlyph - 2;
-
-        while (x >= (int32_t)firstGlyph) {
-            glyphStorage[x + 2] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x + 2, ix, success);
-            x -= 1;
-        }
-        
-        glyphStorage[firstGlyph] = c;
-        glyphStorage[firstGlyph + 1] = d;
-
-        glyphStorage.setCharIndex(firstGlyph, ic, success);
-        glyphStorage.setCharIndex(firstGlyph + 1, id, success);
-        break; 
-
-    case irvDCx:
-        if ((lastGlyph - 2 > lastGlyph) ||
-            (lastGlyph - firstGlyph < 1)) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        c = glyphStorage[lastGlyph - 1];
-        d = glyphStorage[lastGlyph];
-        ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-        x = lastGlyph - 2;
-
-        while (x >= (int32_t)firstGlyph) {
-            glyphStorage[x + 2] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x + 2, ix, success);
-            x -= 1;
-        }
-        
-        glyphStorage[firstGlyph] = d;
-        glyphStorage[firstGlyph + 1] = c;
-
-        glyphStorage.setCharIndex(firstGlyph, id, success);
-        glyphStorage.setCharIndex(firstGlyph + 1, ic, success);
-        break; 
-
-    case irvCDxA:
-        if ((lastGlyph - 2 > lastGlyph) ||
-            (lastGlyph - firstGlyph < 2)) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        c = glyphStorage[lastGlyph - 1];
-        d = glyphStorage[lastGlyph];
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-        x = lastGlyph - 2;
-
-        while (x > (int32_t)firstGlyph) {
-            glyphStorage[x + 1] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x + 1, ix, success);
-            x -= 1;
-        }
-        
-        glyphStorage[firstGlyph] = c;
-        glyphStorage[firstGlyph + 1] = d;
-        glyphStorage[lastGlyph] = a;
-
-        glyphStorage.setCharIndex(firstGlyph, ic, success);
-        glyphStorage.setCharIndex(firstGlyph + 1, id, success);
-        glyphStorage.setCharIndex(lastGlyph, ia, success);
-        break; 
-
-    case irvDCxA:
-        if ((lastGlyph - 2 > lastGlyph) ||
-            (lastGlyph - firstGlyph < 2)) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        c = glyphStorage[lastGlyph - 1];
-        d = glyphStorage[lastGlyph];
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-        x = lastGlyph - 2;
-
-        while (x > (int32_t)firstGlyph) {
-            glyphStorage[x + 1] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x + 1, ix, success);
-            x -= 1;
-        }
-        
-        glyphStorage[firstGlyph] = d;
-        glyphStorage[firstGlyph + 1] = c;
-        glyphStorage[lastGlyph] = a;
-
-        glyphStorage.setCharIndex(firstGlyph, id, success);
-        glyphStorage.setCharIndex(firstGlyph + 1, ic, success);
-        glyphStorage.setCharIndex(lastGlyph, ia, success);
-        break; 
-
-    case irvDxAB:
-        if ((firstGlyph + 2 < firstGlyph) ||
-            (lastGlyph - firstGlyph < 2)) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        b = glyphStorage[firstGlyph + 1];
-        d = glyphStorage[lastGlyph];
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-        x = firstGlyph + 2;
-
-        while (x < (int32_t)lastGlyph) {
-            glyphStorage[x - 2] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x - 2, ix, success);
-            x += 1;
-        }
-
-        glyphStorage[firstGlyph] = d;
-        glyphStorage[lastGlyph - 1] = a;
-        glyphStorage[lastGlyph] = b;
-
-        glyphStorage.setCharIndex(firstGlyph, id, success);
-        glyphStorage.setCharIndex(lastGlyph - 1, ia, success);
-        glyphStorage.setCharIndex(lastGlyph, ib, success);
-        break;
-
-    case irvDxBA:
-        if ((firstGlyph + 2 < firstGlyph) ||
-            (lastGlyph - firstGlyph < 2)) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        b = glyphStorage[firstGlyph + 1];
-        d = glyphStorage[lastGlyph];
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-        x = firstGlyph + 2;
-
-        while (x < (int32_t)lastGlyph) {
-            glyphStorage[x - 2] = glyphStorage[x];
-            ix = glyphStorage.getCharIndex(x, success);
-            glyphStorage.setCharIndex(x - 2, ix, success);
-            x += 1;
-        }
-
-        glyphStorage[firstGlyph] = d;
-        glyphStorage[lastGlyph - 1] = b;
-        glyphStorage[lastGlyph] = a;
-
-        glyphStorage.setCharIndex(firstGlyph, id, success);
-        glyphStorage.setCharIndex(lastGlyph - 1, ib, success);
-        glyphStorage.setCharIndex(lastGlyph, ia, success);
-        break;
-
-    case irvCDxAB:
-        if (lastGlyph - firstGlyph < 3) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        b = glyphStorage[firstGlyph + 1];
-
-        glyphStorage[firstGlyph] = glyphStorage[lastGlyph - 1];
-        glyphStorage[firstGlyph + 1] = glyphStorage[lastGlyph];
-
-        glyphStorage[lastGlyph - 1] = a;
-        glyphStorage[lastGlyph] = b;
-
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
-        ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-
-        glyphStorage.setCharIndex(firstGlyph, ic, success);
-        glyphStorage.setCharIndex(firstGlyph + 1, id, success);
-
-        glyphStorage.setCharIndex(lastGlyph - 1, ia, success);
-        glyphStorage.setCharIndex(lastGlyph, ib, success);
-        break;
-
-    case irvCDxBA:
-        if (lastGlyph - firstGlyph < 3) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        b = glyphStorage[firstGlyph + 1];
-
-        glyphStorage[firstGlyph] = glyphStorage[lastGlyph - 1];
-        glyphStorage[firstGlyph + 1] = glyphStorage[lastGlyph];
-
-        glyphStorage[lastGlyph - 1] = b;
-        glyphStorage[lastGlyph] = a;
-
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
-        ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-
-        glyphStorage.setCharIndex(firstGlyph, ic, success);
-        glyphStorage.setCharIndex(firstGlyph + 1, id, success);
-
-        glyphStorage.setCharIndex(lastGlyph - 1, ib, success);
-        glyphStorage.setCharIndex(lastGlyph, ia, success);
-        break;
-
-    case irvDCxAB:
-        if (lastGlyph - firstGlyph < 3) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        b = glyphStorage[firstGlyph + 1];
-
-        glyphStorage[firstGlyph] = glyphStorage[lastGlyph];
-        glyphStorage[firstGlyph + 1] = glyphStorage[lastGlyph - 1];
-
-        glyphStorage[lastGlyph - 1] = a;
-        glyphStorage[lastGlyph] = b;
-
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
-        ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-
-        glyphStorage.setCharIndex(firstGlyph, id, success);
-        glyphStorage.setCharIndex(firstGlyph + 1, ic, success);
-
-        glyphStorage.setCharIndex(lastGlyph - 1, ia, success);
-        glyphStorage.setCharIndex(lastGlyph, ib, success);
-        break;
-
-    case irvDCxBA:
-        if (lastGlyph - firstGlyph < 3) {
-            success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-            break;
-        }
-        a = glyphStorage[firstGlyph];
-        b = glyphStorage[firstGlyph + 1];
-
-        glyphStorage[firstGlyph] = glyphStorage[lastGlyph];
-        glyphStorage[firstGlyph + 1] = glyphStorage[lastGlyph - 1];
-
-        glyphStorage[lastGlyph - 1] = b;
-        glyphStorage[lastGlyph] = a;
-
-        ia = glyphStorage.getCharIndex(firstGlyph, success);
-        ib = glyphStorage.getCharIndex(firstGlyph + 1, success);
-        ic = glyphStorage.getCharIndex(lastGlyph - 1, success);
-        id = glyphStorage.getCharIndex(lastGlyph, success);
-
-        glyphStorage.setCharIndex(firstGlyph, id, success);
-        glyphStorage.setCharIndex(firstGlyph + 1, ic, success);
-
-        glyphStorage.setCharIndex(lastGlyph - 1, ib, success);
-        glyphStorage.setCharIndex(lastGlyph, ia, success);
-        break;
-    
-    default:
-        break;
-    }
-
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/IndicRearrangementProcessor2.h b/icu4c/source/layout/IndicRearrangementProcessor2.h
deleted file mode 100644 (file)
index 49f9300..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2015 - All Rights Reserved
- *
- */
-
-#ifndef __INDICREARRANGEMENTPROCESSOR2_H
-#define __INDICREARRANGEMENTPROCESSOR2_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor.h"
-#include "StateTableProcessor2.h"
-#include "IndicRearrangement.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class IndicRearrangementProcessor2 : public StateTableProcessor2
-{
-public:
-    virtual void beginStateTable();
-
-    virtual le_uint16 processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex2 index, LEErrorCode &success);
-
-    virtual void endStateTable();
-
-    void doRearrangementAction(LEGlyphStorage &glyphStorage, IndicRearrangementVerb verb, LEErrorCode &success) const;
-
-    IndicRearrangementProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success);
-    virtual ~IndicRearrangementProcessor2();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    static UClassID getStaticClassID();
-
-protected:
-    le_uint32 firstGlyph;
-    le_uint32 lastGlyph;
-
-    LEReferenceToArrayOf<IndicRearrangementStateEntry2> entryTable;
-    LEReferenceTo<IndicRearrangementSubtableHeader2> indicRearrangementSubtableHeader;
-
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/IndicReordering.cpp b/icu4c/source/layout/IndicReordering.cpp
deleted file mode 100644 (file)
index abd7041..0000000
+++ /dev/null
@@ -1,1240 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
-/ *
- * (C) Copyright IBM Corp. 1998-2015 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "OpenTypeUtilities.h"
-#include "IndicReordering.h"
-#include "LEGlyphStorage.h"
-#include "MPreFixups.h"
-
-U_NAMESPACE_BEGIN
-
-#define loclFeatureTag LE_LOCL_FEATURE_TAG
-#define initFeatureTag LE_INIT_FEATURE_TAG
-#define nuktFeatureTag LE_NUKT_FEATURE_TAG
-#define akhnFeatureTag LE_AKHN_FEATURE_TAG
-#define rphfFeatureTag LE_RPHF_FEATURE_TAG
-#define rkrfFeatureTag LE_RKRF_FEATURE_TAG
-#define blwfFeatureTag LE_BLWF_FEATURE_TAG
-#define halfFeatureTag LE_HALF_FEATURE_TAG
-#define pstfFeatureTag LE_PSTF_FEATURE_TAG
-#define vatuFeatureTag LE_VATU_FEATURE_TAG
-#define presFeatureTag LE_PRES_FEATURE_TAG
-#define blwsFeatureTag LE_BLWS_FEATURE_TAG
-#define abvsFeatureTag LE_ABVS_FEATURE_TAG
-#define pstsFeatureTag LE_PSTS_FEATURE_TAG
-#define halnFeatureTag LE_HALN_FEATURE_TAG
-#define cjctFeatureTag LE_CJCT_FEATURE_TAG
-#define blwmFeatureTag LE_BLWM_FEATURE_TAG
-#define abvmFeatureTag LE_ABVM_FEATURE_TAG
-#define distFeatureTag LE_DIST_FEATURE_TAG
-#define caltFeatureTag LE_CALT_FEATURE_TAG
-#define kernFeatureTag LE_KERN_FEATURE_TAG
-
-#define loclFeatureMask 0x80000000UL
-#define rphfFeatureMask 0x40000000UL
-#define blwfFeatureMask 0x20000000UL
-#define halfFeatureMask 0x10000000UL
-#define pstfFeatureMask 0x08000000UL
-#define nuktFeatureMask 0x04000000UL
-#define akhnFeatureMask 0x02000000UL
-#define vatuFeatureMask 0x01000000UL
-#define presFeatureMask 0x00800000UL
-#define blwsFeatureMask 0x00400000UL
-#define abvsFeatureMask 0x00200000UL
-#define pstsFeatureMask 0x00100000UL 
-#define halnFeatureMask 0x00080000UL
-#define blwmFeatureMask 0x00040000UL
-#define abvmFeatureMask 0x00020000UL
-#define distFeatureMask 0x00010000UL
-#define initFeatureMask 0x00008000UL
-#define cjctFeatureMask 0x00004000UL
-#define rkrfFeatureMask 0x00002000UL
-#define caltFeatureMask 0x00001000UL
-#define kernFeatureMask 0x00000800UL
-
-// Syllable structure bits 
-#define baseConsonantMask       0x00000400UL
-#define consonantMask           0x00000200UL
-#define halfConsonantMask       0x00000100UL
-#define rephConsonantMask       0x00000080UL
-#define matraMask               0x00000040UL
-#define vowelModifierMask       0x00000020UL
-#define markPositionMask        0x00000018UL
-
-#define postBasePosition        0x00000000UL
-#define preBasePosition         0x00000008UL
-#define aboveBasePosition       0x00000010UL
-#define belowBasePosition       0x00000018UL
-
-#define repositionedGlyphMask   0x00000002UL
-
-#define basicShapingFormsMask ( loclFeatureMask | nuktFeatureMask | akhnFeatureMask | rkrfFeatureMask | blwfFeatureMask | halfFeatureMask | vatuFeatureMask | cjctFeatureMask )
-#define positioningFormsMask ( kernFeatureMask | distFeatureMask | abvmFeatureMask | blwmFeatureMask )
-#define presentationFormsMask ( presFeatureMask | abvsFeatureMask | blwsFeatureMask | pstsFeatureMask | halnFeatureMask | caltFeatureMask )
-
-
-#define C_MALAYALAM_VOWEL_SIGN_U 0x0D41
-#define        C_DOTTED_CIRCLE 0x25CC
-#define NO_GLYPH 0xFFFF
-
-// Some level of debate as to the proper value for MAX_CONSONANTS_PER_SYLLABLE.  Ticket 5588 states that 4
-// is the magic number according to ISCII, but 5 seems to be the more consistent with XP.
-#define MAX_CONSONANTS_PER_SYLLABLE 5
-
-#define INDIC_BLOCK_SIZE 0x7F
-
-class IndicReorderingOutput : public UMemory {
-private:
-    le_int32   fSyllableCount;
-    le_int32   fOutIndex;
-    LEUnicode *fOutChars;
-
-    LEGlyphStorage &fGlyphStorage;
-
-    LEUnicode   fMpre;
-    le_int32    fMpreIndex;
-
-    LEUnicode   fMbelow;
-    le_int32    fMbelowIndex;
-
-    LEUnicode   fMabove;
-    le_int32    fMaboveIndex;
-
-    LEUnicode   fMpost;
-    le_int32    fMpostIndex;
-
-    LEUnicode   fLengthMark;
-    le_int32    fLengthMarkIndex;
-
-    LEUnicode   fAlLakuna;
-    le_int32    fAlLakunaIndex;
-
-    FeatureMask fMatraFeatures;
-    
-    le_int32    fMPreOutIndex;
-    MPreFixups *fMPreFixups;
-    
-    LEUnicode   fVMabove;
-    LEUnicode   fVMpost;
-    le_int32    fVMIndex;
-    FeatureMask fVMFeatures;
-    
-    LEUnicode   fSMabove;
-    LEUnicode   fSMbelow;
-    le_int32    fSMIndex;
-    FeatureMask fSMFeatures;
-
-    LEUnicode   fPreBaseConsonant;
-    LEUnicode   fPreBaseVirama;
-    le_int32    fPBCIndex;
-    FeatureMask fPBCFeatures;
-
-    void saveMatra(LEUnicode matra, le_int32 matraIndex, IndicClassTable::CharClass matraClass)
-    {
-        // FIXME: check if already set, or if not a matra...
-        if (IndicClassTable::isLengthMark(matraClass)) {
-            fLengthMark = matra;
-            fLengthMarkIndex = matraIndex;
-        } else if (IndicClassTable::isAlLakuna(matraClass)) {
-            fAlLakuna = matra;
-            fAlLakunaIndex = matraIndex;
-        } else {
-            switch (matraClass & CF_POS_MASK) {
-            case CF_POS_BEFORE:
-                fMpre = matra;
-                fMpreIndex = matraIndex;
-                break;
-               
-            case CF_POS_BELOW:
-                fMbelow = matra;
-                fMbelowIndex = matraIndex;
-                break;
-               
-            case CF_POS_ABOVE:
-                fMabove = matra;
-                fMaboveIndex = matraIndex;
-                break;
-               
-            case CF_POS_AFTER:
-                fMpost = matra;
-                fMpostIndex = matraIndex;
-                break;
-               
-            default:
-                // can't get here...
-                break;
-           }
-        }
-    }
-
-public:
-    IndicReorderingOutput(LEUnicode *outChars, LEGlyphStorage &glyphStorage, MPreFixups *mpreFixups)
-        : fSyllableCount(0), fOutIndex(0), fOutChars(outChars), fGlyphStorage(glyphStorage),
-          fMpre(0), fMpreIndex(0), fMbelow(0), fMbelowIndex(0), fMabove(0), fMaboveIndex(0),
-          fMpost(0), fMpostIndex(0), fLengthMark(0), fLengthMarkIndex(0), fAlLakuna(0), fAlLakunaIndex(0),
-          fMatraFeatures(0), fMPreOutIndex(-1), fMPreFixups(mpreFixups),
-          fVMabove(0), fVMpost(0), fVMIndex(0), fVMFeatures(0),
-          fSMabove(0), fSMbelow(0), fSMIndex(0), fSMFeatures(0),
-          fPreBaseConsonant(0), fPreBaseVirama(0), fPBCIndex(0), fPBCFeatures(0)
-    {
-        // nothing else to do...
-    }
-
-    ~IndicReorderingOutput()
-    {
-        // nothing to do here...
-    }
-
-    void reset()
-    {
-        fSyllableCount += 1;
-
-        fMpre = fMbelow = fMabove = fMpost = fLengthMark = fAlLakuna = 0;
-        fMPreOutIndex = -1;
-        
-        fVMabove = fVMpost  = 0;
-        fSMabove = fSMbelow = 0;
-
-        fPreBaseConsonant = fPreBaseVirama = 0;
-    }
-
-    void writeChar(LEUnicode ch, le_uint32 charIndex, FeatureMask charFeatures)
-    {
-        LEErrorCode success = LE_NO_ERROR;
-
-        fOutChars[fOutIndex] = ch;
-
-        fGlyphStorage.setCharIndex(fOutIndex, charIndex, success);
-        fGlyphStorage.setAuxData(fOutIndex, charFeatures | (fSyllableCount & LE_GLYPH_GROUP_MASK), success);
-
-        fOutIndex += 1;
-    }
-
-    void setFeatures ( le_uint32 charIndex, FeatureMask charFeatures)
-    {
-        LEErrorCode success = LE_NO_ERROR;
-
-        fGlyphStorage.setAuxData( charIndex, charFeatures, success );
-
-    }
-
-    FeatureMask getFeatures ( le_uint32 charIndex )
-    {
-        LEErrorCode success = LE_NO_ERROR;
-        return fGlyphStorage.getAuxData(charIndex,success);
-    }
-
-       void decomposeReorderMatras ( const IndicClassTable *classTable, le_int32 beginSyllable, le_int32 nextSyllable, le_int32 inv_count ) {
-               le_int32 i;
-        LEErrorCode success = LE_NO_ERROR;
-
-               for ( i = beginSyllable ; i < nextSyllable ; i++ ) {
-                       if ( classTable->isMatra(fOutChars[i+inv_count])) {
-                               IndicClassTable::CharClass matraClass = classTable->getCharClass(fOutChars[i+inv_count]);       
-                               if ( classTable->isSplitMatra(matraClass)) {
-                                       le_int32 saveIndex = fGlyphStorage.getCharIndex(i+inv_count,success);
-                                       le_uint32 saveAuxData = fGlyphStorage.getAuxData(i+inv_count,success);
-                    const SplitMatra *splitMatra = classTable->getSplitMatra(matraClass);
-                    int j;
-                    for (j = 0 ; j < SM_MAX_PIECES && *(splitMatra)[j] != 0 ; j++) {
-                        LEUnicode piece = (*splitMatra)[j];
-                                               if ( j == 0 ) {
-                                                       fOutChars[i+inv_count] = piece;
-                                                       matraClass = classTable->getCharClass(piece);
-                                               } else {
-                                                       insertCharacter(piece,i+1+inv_count,saveIndex,saveAuxData);
-                                                       nextSyllable++;
-                                               }
-                                   }
-                               }
-                               
-                               if ((matraClass & CF_POS_MASK) == CF_POS_BEFORE) {
-                    moveCharacter(i+inv_count,beginSyllable+inv_count);
-                               }
-                       }
-               }
-       }
-
-       void moveCharacter( le_int32 fromPosition, le_int32 toPosition ) {
-               le_int32 i,saveIndex;
-               le_uint32 saveAuxData;
-               LEUnicode saveChar = fOutChars[fromPosition];
-           LEErrorCode success = LE_NO_ERROR;
-               LEErrorCode success2 = LE_NO_ERROR;
-               saveIndex = fGlyphStorage.getCharIndex(fromPosition,success);
-        saveAuxData = fGlyphStorage.getAuxData(fromPosition,success);
-
-               if ( fromPosition > toPosition ) {
-                       for ( i = fromPosition ; i > toPosition ; i-- ) {
-                               fOutChars[i] = fOutChars[i-1];
-                               fGlyphStorage.setCharIndex(i,fGlyphStorage.getCharIndex(i-1,success2),success);
-                               fGlyphStorage.setAuxData(i,fGlyphStorage.getAuxData(i-1,success2), success);
-
-                       }
-               } else {
-                       for ( i = fromPosition ; i < toPosition ; i++ ) {
-                               fOutChars[i] = fOutChars[i+1];
-                               fGlyphStorage.setCharIndex(i,fGlyphStorage.getCharIndex(i+1,success2),success);
-                               fGlyphStorage.setAuxData(i,fGlyphStorage.getAuxData(i+1,success2), success);
-                       }
-
-               }
-               fOutChars[toPosition] = saveChar;
-               fGlyphStorage.setCharIndex(toPosition,saveIndex,success);
-               fGlyphStorage.setAuxData(toPosition,saveAuxData,success);
-
-       }
-       void insertCharacter( LEUnicode ch, le_int32 toPosition, le_int32 charIndex, le_uint32 auxData ) {
-           LEErrorCode success = LE_NO_ERROR;
-        le_int32 i;
-               fOutIndex += 1;
-
-               for ( i = fOutIndex ; i > toPosition ; i--) {
-                               fOutChars[i] = fOutChars[i-1];
-                               fGlyphStorage.setCharIndex(i,fGlyphStorage.getCharIndex(i-1,success),success);
-                               fGlyphStorage.setAuxData(i,fGlyphStorage.getAuxData(i-1,success), success);
-               }
-
-               fOutChars[toPosition] = ch;
-               fGlyphStorage.setCharIndex(toPosition,charIndex,success);
-               fGlyphStorage.setAuxData(toPosition,auxData,success);
-
-       }
-       void removeCharacter( le_int32 fromPosition ) {
-           LEErrorCode success = LE_NO_ERROR;
-        le_int32 i;
-               fOutIndex -= 1;
-
-               for ( i = fromPosition ; i < fOutIndex ; i--) {
-                               fOutChars[i] = fOutChars[i+1];
-                               fGlyphStorage.setCharIndex(i,fGlyphStorage.getCharIndex(i+1,success),success);
-                               fGlyphStorage.setAuxData(i,fGlyphStorage.getAuxData(i+1,success), success);
-               }
-       }
-
-    le_bool noteMatra(const IndicClassTable *classTable, LEUnicode matra, le_uint32 matraIndex, FeatureMask matraFeatures, le_bool wordStart)
-    {
-        IndicClassTable::CharClass matraClass = classTable->getCharClass(matra);
-
-        fMatraFeatures  = matraFeatures;
-
-        if (wordStart) {
-            fMatraFeatures |= initFeatureMask;
-        }
-
-        if (IndicClassTable::isMatra(matraClass)) {
-            if (IndicClassTable::isSplitMatra(matraClass)) {
-                const SplitMatra *splitMatra = classTable->getSplitMatra(matraClass);
-                int i;
-
-                for (i = 0; i < SM_MAX_PIECES && (*splitMatra)[i] != 0; i += 1) {
-                    LEUnicode piece = (*splitMatra)[i];
-                    IndicClassTable::CharClass pieceClass = classTable->getCharClass(piece);
-
-                    saveMatra(piece, matraIndex, pieceClass);
-                }
-            } else {
-                saveMatra(matra, matraIndex, matraClass);
-            }
-
-            return TRUE;
-        }
-
-        return FALSE;
-    }
-    
-    void noteVowelModifier(const IndicClassTable *classTable, LEUnicode vowelModifier, le_uint32 vowelModifierIndex, FeatureMask vowelModifierFeatures)
-    {
-        IndicClassTable::CharClass vmClass = classTable->getCharClass(vowelModifier);
-        
-        fVMIndex = vowelModifierIndex;
-        fVMFeatures  = vowelModifierFeatures;
-        
-        if (IndicClassTable::isVowelModifier(vmClass)) {
-           switch (vmClass & CF_POS_MASK) {
-           case CF_POS_ABOVE:
-               fVMabove = vowelModifier;
-               break;
-            
-           case CF_POS_AFTER:
-               fVMpost = vowelModifier;
-               break;
-           
-           default:
-               // FIXME: this is an error...
-               break;
-           }
-        }
-    }
-    
-    void noteStressMark(const IndicClassTable *classTable, LEUnicode stressMark, le_uint32 stressMarkIndex, FeatureMask stressMarkFeatures)
-    {
-       IndicClassTable::CharClass smClass = classTable->getCharClass(stressMark);
-        
-        fSMIndex = stressMarkIndex;
-        fSMFeatures  = stressMarkFeatures;
-        
-        if (IndicClassTable::isStressMark(smClass)) {
-            switch (smClass & CF_POS_MASK) {
-            case CF_POS_ABOVE:
-                fSMabove = stressMark;
-                break;
-            
-            case CF_POS_BELOW:
-                fSMbelow = stressMark;
-                break;
-           
-            default:
-                // FIXME: this is an error...
-                break;
-           }
-        }
-    }
-
-    void notePreBaseConsonant(le_uint32 index,LEUnicode PBConsonant, LEUnicode PBVirama, FeatureMask features)
-    {
-        fPBCIndex = index;
-        fPreBaseConsonant = PBConsonant;
-        fPreBaseVirama = PBVirama;
-        fPBCFeatures = features;
-    }
-
-    void noteBaseConsonant()
-    {
-        if (fMPreFixups != NULL && fMPreOutIndex >= 0) {
-            fMPreFixups->add(fOutIndex, fMPreOutIndex);
-        }
-    }
-
-    // Handles Al-Lakuna in Sinhala split vowels.
-    void writeAlLakuna()
-    {
-        if (fAlLakuna != 0) {
-            writeChar(fAlLakuna, fAlLakunaIndex, fMatraFeatures);
-        }
-    }
-
-    void writeMpre()
-    {
-        if (fMpre != 0) {
-            fMPreOutIndex = fOutIndex;
-            writeChar(fMpre, fMpreIndex, fMatraFeatures);
-        }
-    }
-
-    void writeMbelow()
-    {
-        if (fMbelow != 0) {
-            writeChar(fMbelow, fMbelowIndex, fMatraFeatures);
-        }
-    }
-
-    void writeMabove()
-    {
-        if (fMabove != 0) {
-            writeChar(fMabove, fMaboveIndex, fMatraFeatures);
-        }
-    }
-
-    void writeMpost()
-    {
-        if (fMpost != 0) {
-            writeChar(fMpost, fMpostIndex, fMatraFeatures);
-        }
-    }
-
-    void writeLengthMark()
-    {
-        if (fLengthMark != 0) {
-            writeChar(fLengthMark, fLengthMarkIndex, fMatraFeatures);
-        }
-    }
-    
-    void writeVMabove()
-    {
-        if (fVMabove != 0) {
-            writeChar(fVMabove, fVMIndex, fVMFeatures);
-        }
-    }
-        
-    void writeVMpost()
-    {
-        if (fVMpost != 0) {
-            writeChar(fVMpost, fVMIndex, fVMFeatures);
-        }
-    }
-    
-    void writeSMabove()
-    {
-        if (fSMabove != 0) {
-            writeChar(fSMabove, fSMIndex, fSMFeatures);
-        }
-    }
-    
-    void writeSMbelow()
-    {
-        if (fSMbelow != 0) {
-            writeChar(fSMbelow, fSMIndex, fSMFeatures);
-        }
-    }
-    
-    void writePreBaseConsonant()
-    {
-        // The TDIL spec says that consonant + virama + RRA should produce a rakar in Malayalam.  However,
-        // it seems that almost none of the fonts for Malayalam are set up to handle this.
-        // So, we're going to force the issue here by using the rakar as defined with RA in most fonts.
-
-        if (fPreBaseConsonant == 0x0d31) { // RRA
-            fPreBaseConsonant = 0x0d30; // RA
-        }
-        
-        if (fPreBaseConsonant != 0) {
-            writeChar(fPreBaseConsonant, fPBCIndex, fPBCFeatures);
-            writeChar(fPreBaseVirama,fPBCIndex-1,fPBCFeatures);
-        }
-    }
-
-    le_int32 getOutputIndex()
-    {
-        return fOutIndex;
-    }
-};
-
-
-
-// TODO: Find better names for these!
-#define tagArray4 (loclFeatureMask | nuktFeatureMask | akhnFeatureMask | vatuFeatureMask | presFeatureMask | blwsFeatureMask | abvsFeatureMask | pstsFeatureMask | halnFeatureMask | blwmFeatureMask | abvmFeatureMask | distFeatureMask)
-#define tagArray3 (pstfFeatureMask | tagArray4)
-#define tagArray2 (halfFeatureMask | tagArray3)
-#define tagArray1 (blwfFeatureMask | tagArray2)
-#define tagArray0 (rphfFeatureMask | tagArray1)
-
-static const FeatureMap featureMap[] = {
-    {loclFeatureTag, loclFeatureMask},
-    {initFeatureTag, initFeatureMask},
-    {nuktFeatureTag, nuktFeatureMask},
-    {akhnFeatureTag, akhnFeatureMask},
-    {rphfFeatureTag, rphfFeatureMask},
-    {blwfFeatureTag, blwfFeatureMask},
-    {halfFeatureTag, halfFeatureMask},
-    {pstfFeatureTag, pstfFeatureMask},
-    {vatuFeatureTag, vatuFeatureMask},
-    {presFeatureTag, presFeatureMask},
-    {blwsFeatureTag, blwsFeatureMask},
-    {abvsFeatureTag, abvsFeatureMask},
-    {pstsFeatureTag, pstsFeatureMask},
-    {halnFeatureTag, halnFeatureMask},
-    {blwmFeatureTag, blwmFeatureMask},
-    {abvmFeatureTag, abvmFeatureMask},
-    {distFeatureTag, distFeatureMask}
-};
-
-static const le_int32 featureCount = LE_ARRAY_SIZE(featureMap);
-
-static const FeatureMap v2FeatureMap[] = {
-       {loclFeatureTag, loclFeatureMask},
-    {nuktFeatureTag, nuktFeatureMask},
-    {akhnFeatureTag, akhnFeatureMask},
-    {rphfFeatureTag, rphfFeatureMask},
-       {rkrfFeatureTag, rkrfFeatureMask}, 
-       {blwfFeatureTag, blwfFeatureMask},
-    {halfFeatureTag, halfFeatureMask},
-    {vatuFeatureTag, vatuFeatureMask},
-    {cjctFeatureTag, cjctFeatureMask},
-    {presFeatureTag, presFeatureMask},
-    {abvsFeatureTag, abvsFeatureMask},
-    {blwsFeatureTag, blwsFeatureMask},
-    {pstsFeatureTag, pstsFeatureMask},
-       {halnFeatureTag, halnFeatureMask}, 
-       {caltFeatureTag, caltFeatureMask},
-    {kernFeatureTag, kernFeatureMask},
-    {distFeatureTag, distFeatureMask},
-    {abvmFeatureTag, abvmFeatureMask},
-    {blwmFeatureTag, blwmFeatureMask}
-};
-
-static const le_int32 v2FeatureMapCount = LE_ARRAY_SIZE(v2FeatureMap);
-
-static const le_int8 stateTable[][CC_COUNT] =
-{
-//   xx  vm  sm  iv  i2  i3  ct  cn  nu  dv  s1  s2  s3  vr  zw  al
-    { 1,  6,  1,  5,  8, 11,  3,  2,  1,  5,  9,  5,  5,  1,  1,  1}, //  0 - ground state
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, //  1 - exit state
-    {-1,  6,  1, -1, -1, -1, -1, -1, -1,  5,  9,  5,  5,  4, 12, -1}, //  2 - consonant with nukta
-    {-1,  6,  1, -1, -1, -1, -1, -1,  2,  5,  9,  5,  5,  4, 12, 13}, //  3 - consonant
-    {-1, -1, -1, -1, -1, -1,  3,  2, -1, -1, -1, -1, -1, -1,  7, -1}, //  4 - consonant virama
-    {-1,  6,  1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, //  5 - dependent vowels
-    {-1, -1,  1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, //  6 - vowel mark
-    {-1, -1, -1, -1, -1, -1,  3,  2, -1, -1, -1, -1, -1, -1, -1, -1}, //  7 - consonant virama ZWJ, consonant ZWJ virama
-    {-1,  6,  1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  4, -1, -1}, //  8 - independent vowels that can take a virama
-    {-1,  6,  1, -1, -1, -1, -1, -1, -1, -1, -1, 10,  5, -1, -1, -1}, //  9 - first part of split vowel
-    {-1,  6,  1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  5, -1, -1, -1}, // 10 - second part of split vowel
-    {-1,  6,  1, -1, -1, -1, -1, -1, -1,  5,  9,  5,  5,  4, -1, -1}, // 11 - independent vowels that can take an iv
-    {-1, -1,  1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  7, -1,  7}, // 12 - consonant ZWJ (TODO: Take everything else that can be after a consonant?)
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  7, -1}  // 13 - consonant al-lakuna ZWJ consonant
-};
-
-
-const FeatureMap *IndicReordering::getFeatureMap(le_int32 &count)
-{
-    count = featureCount;
-
-    return featureMap;
-}
-
-const FeatureMap *IndicReordering::getv2FeatureMap(le_int32 &count)
-{
-    count = v2FeatureMapCount;
-
-    return v2FeatureMap;
-}
-
-le_int32 IndicReordering::findSyllable(const IndicClassTable *classTable, const LEUnicode *chars, le_int32 prev, le_int32 charCount)
-{
-    le_int32 cursor = prev;
-    le_int8 state = 0;
-    le_int8 consonant_count = 0;
-
-    while (cursor < charCount) {
-        IndicClassTable::CharClass charClass = classTable->getCharClass(chars[cursor]);
-        
-        if ( IndicClassTable::isConsonant(charClass) ) {
-            consonant_count++;
-            if ( consonant_count > MAX_CONSONANTS_PER_SYLLABLE ) {
-                break;
-            }
-        }
-
-        state = stateTable[state][charClass & CF_CLASS_MASK];
-
-        if (state < 0) {
-            break;
-        }
-
-        cursor += 1;
-    }
-
-    return cursor;
-}
-
-le_int32 IndicReordering::reorder(const LEUnicode *chars, le_int32 charCount, le_int32 scriptCode,
-                                  LEUnicode *outChars, LEGlyphStorage &glyphStorage,
-                                  MPreFixups **outMPreFixups, LEErrorCode& success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    MPreFixups *mpreFixups = NULL;
-    const IndicClassTable *classTable = IndicClassTable::getScriptClassTable(scriptCode);
-
-    if (classTable==NULL) {
-        success = LE_INTERNAL_ERROR;
-        return 0;
-    }
-
-    if (classTable->scriptFlags & SF_MPRE_FIXUP) {
-        mpreFixups = new MPreFixups(charCount);
-        if (mpreFixups == NULL) { 
-            success = LE_MEMORY_ALLOCATION_ERROR;
-            return 0;
-        }
-    }
-
-    IndicReorderingOutput output(outChars, glyphStorage, mpreFixups);
-    le_int32 i, prev = 0;
-    le_bool lastInWord = FALSE;
-
-    while (prev < charCount) {
-        le_int32 syllable = findSyllable(classTable, chars, prev, charCount);
-        le_int32 matra, markStart = syllable;
-
-        output.reset();
-        
-        if (classTable->isStressMark(chars[markStart - 1])) {
-            markStart -= 1;
-            output.noteStressMark(classTable, chars[markStart], markStart, tagArray1);
-        }
-        
-        if (markStart != prev && classTable->isVowelModifier(chars[markStart - 1])) {
-            markStart -= 1;
-            output.noteVowelModifier(classTable, chars[markStart], markStart, tagArray1);
-        }
-
-        matra = markStart - 1;
-
-        while (output.noteMatra(classTable, chars[matra], matra, tagArray1, !lastInWord) && matra != prev) {
-            matra -= 1;
-        }
-
-        lastInWord = TRUE;
-
-        switch (classTable->getCharClass(chars[prev]) & CF_CLASS_MASK) {
-        case CC_RESERVED:
-            lastInWord = FALSE;
-            /* fall through */
-
-        case CC_INDEPENDENT_VOWEL:
-        case CC_ZERO_WIDTH_MARK:
-            for (i = prev; i < syllable; i += 1) {
-                output.writeChar(chars[i], i, tagArray1);
-            }
-
-            break;
-
-        case CC_AL_LAKUNA:
-        case CC_NUKTA:
-            output.writeChar(C_DOTTED_CIRCLE, prev, tagArray1);
-            output.writeChar(chars[prev], prev, tagArray1);
-            break;
-
-        case CC_VIRAMA:
-            // A lone virama is illegal unless it follows a
-            // MALAYALAM_VOWEL_SIGN_U. Such a usage is called
-            // "samvruthokaram".
-            if (chars[prev - 1] != C_MALAYALAM_VOWEL_SIGN_U) {
-                output.writeChar(C_DOTTED_CIRCLE, prev, tagArray1);
-            }
-
-            output.writeChar(chars[prev], prev, tagArray1);
-            break;
-
-        case CC_DEPENDENT_VOWEL:
-        case CC_SPLIT_VOWEL_PIECE_1:
-        case CC_SPLIT_VOWEL_PIECE_2:
-        case CC_SPLIT_VOWEL_PIECE_3:
-        case CC_VOWEL_MODIFIER:
-        case CC_STRESS_MARK:
-            output.writeMpre();
-
-            output.writeChar(C_DOTTED_CIRCLE, prev, tagArray1);
-
-            output.writeMbelow();
-            output.writeSMbelow();
-            output.writeMabove();
-
-            if ((classTable->scriptFlags & SF_MATRAS_AFTER_BASE) != 0) {
-                output.writeMpost();
-            }
-
-            if ((classTable->scriptFlags & SF_REPH_AFTER_BELOW) != 0) {
-                output.writeVMabove();
-                output.writeSMabove(); // FIXME: there are no SM's in these scripts...
-            }
-
-            if ((classTable->scriptFlags & SF_MATRAS_AFTER_BASE) == 0) {
-                output.writeMpost();
-            }
-
-            output.writeLengthMark();
-            output.writeAlLakuna();
-
-            if ((classTable->scriptFlags & SF_REPH_AFTER_BELOW) == 0) {
-                output.writeVMabove();
-                output.writeSMabove();
-            }
-
-            output.writeVMpost();
-            break;
-
-        case CC_INDEPENDENT_VOWEL_2:
-        case CC_INDEPENDENT_VOWEL_3:
-        case CC_CONSONANT:
-        case CC_CONSONANT_WITH_NUKTA:
-        {
-            le_uint32 length = markStart - prev;
-            le_int32  lastConsonant = markStart - 1;
-            le_int32  baseLimit = prev;
-
-            // Check for REPH at front of syllable
-            if (length > 2 && classTable->isReph(chars[prev]) && classTable->isVirama(chars[prev + 1]) && chars[prev + 2] != C_SIGN_ZWNJ) {
-                baseLimit += 2;
-
-                // Check for eyelash RA, if the script supports it
-                if ((classTable->scriptFlags & SF_EYELASH_RA) != 0 &&
-                    chars[baseLimit] == C_SIGN_ZWJ) {
-                    if (length > 3) {
-                        baseLimit += 1;
-                    } else {
-                        baseLimit -= 2;
-                    }
-                }
-            }
-
-            while (lastConsonant > baseLimit && !classTable->isConsonant(chars[lastConsonant])) {
-                lastConsonant -= 1;
-            }
-
-            
-            IndicClassTable::CharClass charClass = CC_RESERVED;
-            IndicClassTable::CharClass nextClass = CC_RESERVED;
-            le_int32 baseConsonant = lastConsonant;
-            le_int32 postBase = lastConsonant + 1;
-            le_int32 postBaseLimit = classTable->scriptFlags & SF_POST_BASE_LIMIT_MASK;
-            le_bool  seenVattu = FALSE;
-            le_bool  seenBelowBaseForm = FALSE;
-            le_bool  seenPreBaseForm = FALSE;
-            le_bool  hasNukta = FALSE;
-            le_bool  hasBelowBaseForm = FALSE;
-            le_bool  hasPostBaseForm = FALSE;
-            le_bool  hasPreBaseForm = FALSE;
-
-            if (postBase < markStart && classTable->isNukta(chars[postBase])) {
-                charClass = CC_NUKTA;
-                postBase += 1;
-            }
-
-            while (baseConsonant > baseLimit) {
-                nextClass = charClass;
-                hasNukta  = IndicClassTable::isNukta(nextClass);
-                charClass = classTable->getCharClass(chars[baseConsonant]);
-
-                hasBelowBaseForm = IndicClassTable::hasBelowBaseForm(charClass) && !hasNukta;
-                hasPostBaseForm  = IndicClassTable::hasPostBaseForm(charClass)  && !hasNukta;
-                hasPreBaseForm = IndicClassTable::hasPreBaseForm(charClass) && !hasNukta;
-
-                if (IndicClassTable::isConsonant(charClass)) {
-                    if (postBaseLimit == 0 || seenVattu ||
-                        (baseConsonant > baseLimit && !classTable->isVirama(chars[baseConsonant - 1])) ||
-                        !(hasBelowBaseForm || hasPostBaseForm || hasPreBaseForm)) {
-                        break;
-                    }
-
-                    // Note any pre-base consonants
-                    if ( baseConsonant == lastConsonant && lastConsonant > 0 && 
-                         hasPreBaseForm && classTable->isVirama(chars[baseConsonant - 1])) {
-                        output.notePreBaseConsonant(lastConsonant,chars[lastConsonant],chars[lastConsonant-1],tagArray2);
-                        seenPreBaseForm = TRUE;
-   
-                    }
-                    // consonants with nuktas are never vattus
-                    seenVattu = IndicClassTable::isVattu(charClass) && !hasNukta;
-
-                    // consonants with nuktas never have below- or post-base forms
-                    if (hasPostBaseForm) {
-                        if (seenBelowBaseForm) {
-                            break;
-                        }
-
-                        postBase = baseConsonant;
-                    } else if (hasBelowBaseForm) {
-                        seenBelowBaseForm = TRUE;
-                    }
-
-                    postBaseLimit -= 1;
-                }
-
-                baseConsonant -= 1;
-            }
-
-            // Write Mpre
-            output.writeMpre();
-
-            // Write eyelash RA
-            // NOTE: baseLimit == prev + 3 iff eyelash RA present...
-            if (baseLimit == prev + 3) {
-                output.writeChar(chars[prev], prev, tagArray2);
-                output.writeChar(chars[prev + 1], prev + 1, tagArray2);
-                output.writeChar(chars[prev + 2], prev + 2, tagArray2);
-            }
-
-            // write any pre-base consonants
-            output.writePreBaseConsonant();
-
-            le_bool supressVattu = TRUE;
-
-            for (i = baseLimit; i < baseConsonant; i += 1) {
-                LEUnicode ch = chars[i];
-                // Don't put 'pstf' or 'blwf' on anything before the base consonant.
-                FeatureMask features = tagArray1 & ~( pstfFeatureMask | blwfFeatureMask );
-
-                charClass = classTable->getCharClass(ch);
-                nextClass = classTable->getCharClass(chars[i + 1]);
-                hasNukta  = IndicClassTable::isNukta(nextClass);
-
-                if (IndicClassTable::isConsonant(charClass)) {
-                    if (IndicClassTable::isVattu(charClass) && !hasNukta && supressVattu) {
-                        features = tagArray4;
-                    }
-
-                    supressVattu = IndicClassTable::isVattu(charClass) && !hasNukta;
-                } else if (IndicClassTable::isVirama(charClass) && chars[i + 1] == C_SIGN_ZWNJ)
-                {
-                    features = tagArray4;
-                }
-
-                output.writeChar(ch, i, features);
-            }
-
-            le_int32 bcSpan = baseConsonant + 1;
-
-            if (bcSpan < markStart && classTable->isNukta(chars[bcSpan])) {
-                bcSpan += 1;
-            }
-
-            if (baseConsonant == lastConsonant && bcSpan < markStart &&
-                 (classTable->isVirama(chars[bcSpan]) || classTable->isAlLakuna(chars[bcSpan]))) {
-                bcSpan += 1;
-
-                if (bcSpan < markStart && chars[bcSpan] == C_SIGN_ZWNJ) {
-                    bcSpan += 1;
-                }
-            }
-
-            // note the base consonant for post-GSUB fixups
-            output.noteBaseConsonant();
-
-            // write base consonant
-            for (i = baseConsonant; i < bcSpan; i += 1) {
-                output.writeChar(chars[i], i, tagArray4);
-            }
-
-            if ((classTable->scriptFlags & SF_MATRAS_AFTER_BASE) != 0) {
-                output.writeMbelow();
-                output.writeSMbelow(); // FIXME: there are no SMs in these scripts...
-                output.writeMabove();
-                output.writeMpost();
-            }
-
-            // write below-base consonants
-            if (baseConsonant != lastConsonant && !seenPreBaseForm) {
-                for (i = bcSpan + 1; i < postBase; i += 1) {
-                    output.writeChar(chars[i], i, tagArray1);
-                }
-
-                if (postBase > lastConsonant) {
-                    // write halant that was after base consonant
-                    output.writeChar(chars[bcSpan], bcSpan, tagArray1);
-                }
-            }
-
-            // write Mbelow, SMbelow, Mabove
-            if ((classTable->scriptFlags & SF_MATRAS_AFTER_BASE) == 0) {
-                output.writeMbelow();
-                output.writeSMbelow();
-                output.writeMabove();
-            }
-
-            if ((classTable->scriptFlags & SF_REPH_AFTER_BELOW) != 0) {
-                if (baseLimit == prev + 2) {
-                    output.writeChar(chars[prev], prev, tagArray0);
-                    output.writeChar(chars[prev + 1], prev + 1, tagArray0);
-                }
-
-                output.writeVMabove();
-                output.writeSMabove(); // FIXME: there are no SM's in these scripts...
-            }
-
-            // write post-base consonants
-            // FIXME: does this put the right tags on post-base consonants?
-            if (baseConsonant != lastConsonant && !seenPreBaseForm) {
-                if (postBase <= lastConsonant) {
-                    for (i = postBase; i <= lastConsonant; i += 1) {
-                        output.writeChar(chars[i], i, tagArray3);
-                    }
-
-                    // write halant that was after base consonant
-                    output.writeChar(chars[bcSpan], bcSpan, tagArray1);
-                }
-
-                // write the training halant, if there is one
-                if (lastConsonant < matra && classTable->isVirama(chars[matra])) {
-                    output.writeChar(chars[matra], matra, tagArray4);
-                }
-            }
-
-            // write Mpost
-            if ((classTable->scriptFlags & SF_MATRAS_AFTER_BASE) == 0) {
-                output.writeMpost();
-            }
-
-            output.writeLengthMark();
-            output.writeAlLakuna();
-
-            // write reph
-            if ((classTable->scriptFlags & SF_REPH_AFTER_BELOW) == 0) {
-                if (baseLimit == prev + 2) {
-                    output.writeChar(chars[prev], prev, tagArray0);
-                    output.writeChar(chars[prev + 1], prev + 1, tagArray0);
-                }
-
-                output.writeVMabove();
-                output.writeSMabove();
-            }
-
-            output.writeVMpost();
-
-            break;
-        }
-
-        default:
-            break;
-        }
-
-        prev = syllable;
-    }
-
-    *outMPreFixups = mpreFixups;
-
-    return output.getOutputIndex();
-}
-
-void IndicReordering::adjustMPres(MPreFixups *mpreFixups, LEGlyphStorage &glyphStorage, LEErrorCode& success)
-{
-    if (mpreFixups != NULL) {
-        mpreFixups->apply(glyphStorage, success);
-        
-        delete mpreFixups;
-    }
-}
-
-void IndicReordering::applyPresentationForms(LEGlyphStorage &glyphStorage, le_int32 count)
-{
-    LEErrorCode success = LE_NO_ERROR;
-
-//  This sets us up for 2nd pass of glyph substitution as well as setting the feature masks for the
-//  GPOS table lookups
-
-    for ( le_int32 i = 0 ; i < count ; i++ ) {
-        glyphStorage.setAuxData(i, ( presentationFormsMask | positioningFormsMask ), success);
-    }
-
-}
-void IndicReordering::finalReordering(LEGlyphStorage &glyphStorage, le_int32 count)
-{
-    LEErrorCode success = LE_NO_ERROR;
-
-    // Reposition REPH as appropriate
-
-    for ( le_int32 i = 0 ; i < count ; i++ ) {
-
-        le_int32 tmpAuxData = glyphStorage.getAuxData(i,success);
-        LEGlyphID tmpGlyph = glyphStorage.getGlyphID(i,success);
-
-        if ( ( tmpGlyph != NO_GLYPH ) && (tmpAuxData & rephConsonantMask) && !(tmpAuxData & repositionedGlyphMask))  {
-
-            le_bool targetPositionFound = false;
-            le_int32 targetPosition = i+1;
-            le_int32 baseConsonantData;
-
-            while (!targetPositionFound) {
-                tmpGlyph = glyphStorage.getGlyphID(targetPosition,success);
-                tmpAuxData = glyphStorage.getAuxData(targetPosition,success);
-
-                if ( tmpAuxData & baseConsonantMask ) {
-                    baseConsonantData = tmpAuxData;
-                    targetPositionFound = true;
-                } else {
-                    targetPosition++;
-                }
-            }
-
-            // Make sure we are not putting the reph into an empty hole
-
-            le_bool targetPositionHasGlyph = false;
-            while (!targetPositionHasGlyph) {
-                tmpGlyph = glyphStorage.getGlyphID(targetPosition,success);
-                if ( tmpGlyph != NO_GLYPH ) {
-                    targetPositionHasGlyph = true;
-                } else {
-                    targetPosition--;
-                }
-            }
-
-            // Make sure that REPH is positioned after any above base or post base matras
-            //
-            le_bool checkMatraDone = false;
-            le_int32 checkMatraPosition = targetPosition+1;
-            while ( !checkMatraDone ) {
-               tmpAuxData = glyphStorage.getAuxData(checkMatraPosition,success);
-               if ( checkMatraPosition >= count || ( (tmpAuxData ^ baseConsonantData) & LE_GLYPH_GROUP_MASK)) {
-                   checkMatraDone = true;
-                   continue;
-               }
-               if ( (tmpAuxData & matraMask) && 
-                    (((tmpAuxData & markPositionMask) == aboveBasePosition) || 
-                      ((tmpAuxData & markPositionMask) == postBasePosition))) {
-                   targetPosition = checkMatraPosition;                   
-               }
-               checkMatraPosition++;
-            }
-            
-            glyphStorage.moveGlyph(i,targetPosition,repositionedGlyphMask);
-        }
-    }
-}
-
-
-le_int32 IndicReordering::v2process(const LEUnicode *chars, le_int32 charCount, le_int32 scriptCode,
-                                  LEUnicode *outChars, LEGlyphStorage &glyphStorage)
-{
-    const IndicClassTable *classTable = IndicClassTable::getScriptClassTable(scriptCode);
-    if (classTable == NULL) {
-        return 0;
-    }
-
-    DynamicProperties dynProps[INDIC_BLOCK_SIZE];
-    IndicReordering::getDynamicProperties(dynProps,classTable);
-
-    IndicReorderingOutput output(outChars, glyphStorage, NULL);
-    le_int32 i, firstConsonant, baseConsonant, secondConsonant, inv_count = 0, beginSyllable = 0;
-    //le_bool lastInWord = FALSE;
-
-    while (beginSyllable < charCount) {
-        le_int32 nextSyllable = findSyllable(classTable, chars, beginSyllable, charCount);
-
-        output.reset();
-
-               // Find the First Consonant
-               for ( firstConsonant = beginSyllable ; firstConsonant < nextSyllable ; firstConsonant++ ) {
-                        if ( classTable->isConsonant(chars[firstConsonant]) ) {
-                                       break;
-                               }
-               }
-
-        // Find the base consonant
-
-        baseConsonant = nextSyllable - 1;
-        secondConsonant = firstConsonant;
-
-        // TODO: Use Dynamic Properties for hasBelowBaseForm and hasPostBaseForm()
-
-        while ( baseConsonant > firstConsonant ) {
-            if ( classTable->isConsonant(chars[baseConsonant]) && 
-                 !classTable->hasBelowBaseForm(chars[baseConsonant]) && 
-                 !classTable->hasPostBaseForm(chars[baseConsonant]) ) {
-                break;
-            }
-            else {
-                if ( classTable->isConsonant(chars[baseConsonant]) ) {
-                    secondConsonant = baseConsonant;
-                }
-                baseConsonant--;
-            }
-        }
-
-        // If the syllable starts with Ra + Halant ( in a script that has Reph ) and has more than one
-        // consonant, Ra is excluced from candidates for base consonants
-
-        if ( classTable->isReph(chars[beginSyllable]) &&
-             beginSyllable+1 < nextSyllable && classTable->isVirama(chars[beginSyllable+1]) &&
-             secondConsonant != firstConsonant) {
-            baseConsonant = secondConsonant;                     
-        }
-
-           // Populate the output 
-               for ( i = beginSyllable ; i < nextSyllable ; i++ ) {
-
-            // Handle invalid combinartions
-
-            if ( classTable->isVirama(chars[beginSyllable]) || 
-                            classTable->isMatra(chars[beginSyllable]) ||
-                            classTable->isVowelModifier(chars[beginSyllable]) ||
-                            classTable->isNukta(chars[beginSyllable]) ) {
-                     output.writeChar(C_DOTTED_CIRCLE,beginSyllable,basicShapingFormsMask);
-                     inv_count++;
-            }
-             output.writeChar(chars[i],i, basicShapingFormsMask);
-
-        }
-
-        // Adjust features and set syllable structure bits
-
-        for ( i = beginSyllable ; i < nextSyllable ; i++ ) {
-
-            FeatureMask outMask = output.getFeatures(i+inv_count);
-            FeatureMask saveMask = outMask;
-
-            // Since reph can only validly occur at the beginning of a syllable
-            // We only apply it to the first 2 characters in the syllable, to keep it from
-            // conflicting with other features ( i.e. rkrf )
-
-            // TODO : Use the dynamic property for determining isREPH
-            if ( i == beginSyllable && i < baseConsonant && classTable->isReph(chars[i]) &&
-                 i+1 < nextSyllable && classTable->isVirama(chars[i+1])) {
-                outMask |= rphfFeatureMask;
-                outMask |= rephConsonantMask;
-                output.setFeatures(i+1+inv_count,outMask);
-
-            }
-
-            if ( i == baseConsonant ) {
-                outMask |= baseConsonantMask;
-            }
-
-            if ( classTable->isMatra(chars[i])) {
-                    outMask |= matraMask;
-                    if ( classTable->hasAboveBaseForm(chars[i])) {
-                        outMask |= aboveBasePosition;
-                    } else if ( classTable->hasBelowBaseForm(chars[i])) {
-                        outMask |= belowBasePosition;
-                    }
-            }
-
-            // Don't apply half form to virama that stands alone at the end of a syllable
-            // to prevent half forms from forming when syllable ends with virama
-
-            if ( classTable->isVirama(chars[i]) && (i+1 == nextSyllable) ) {
-                outMask ^= halfFeatureMask;
-                if ( classTable->isConsonant(chars[i-1]) ) {
-                    FeatureMask tmp = output.getFeatures(i-1+inv_count);
-                    tmp ^= halfFeatureMask;
-                    output.setFeatures(i-1+inv_count,tmp);
-                }
-            }
-
-            if ( outMask != saveMask ) {
-                output.setFeatures(i+inv_count,outMask);
-            }
-               }
-
-           output.decomposeReorderMatras(classTable,beginSyllable,nextSyllable,inv_count);
-
-        beginSyllable = nextSyllable;   
-       }
-
-
-    return output.getOutputIndex();
-}
-
-
-void IndicReordering::getDynamicProperties( DynamicProperties *, const IndicClassTable *classTable ) {
-
-
-    LEUnicode currentChar;
-    LEUnicode workChars[2];
-    LEGlyphStorage workGlyphs;
-
-    IndicReorderingOutput workOutput(workChars, workGlyphs, NULL);
-
-    //le_int32 offset = 0;
-
-#if 0
-// TODO:  Should this section of code have actually been doing something?
-    // First find the relevant virama for the script we are dealing with
-    LEUnicode virama;
-    for ( currentChar = classTable->firstChar ; currentChar <= classTable->lastChar ; currentChar++ ) {
-        if ( classTable->isVirama(currentChar)) {
-            virama = currentChar;
-            break;
-        }
-    }
-#endif
-
-    for ( currentChar = classTable->firstChar ; currentChar <= classTable->lastChar ; currentChar++ ) {
-        if ( classTable->isConsonant(currentChar)) {
-            workOutput.reset();
-        }
-    }
-
-
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/IndicReordering.h b/icu4c/source/layout/IndicReordering.h
deleted file mode 100644 (file)
index 015e7f1..0000000
+++ /dev/null
@@ -1,360 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2011 - All Rights Reserved
- *
- */
-
-#ifndef __INDICREORDERING_H
-#define __INDICREORDERING_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-
-U_NAMESPACE_BEGIN
-
-// Characters that get refered to by name...
-#define C_SIGN_ZWNJ           0x200C
-#define C_SIGN_ZWJ            0x200D
-
-// Character class values
-#define CC_RESERVED               0U
-#define CC_VOWEL_MODIFIER         1U
-#define CC_STRESS_MARK            2U
-#define CC_INDEPENDENT_VOWEL      3U
-#define CC_INDEPENDENT_VOWEL_2    4U
-#define CC_INDEPENDENT_VOWEL_3    5U
-#define CC_CONSONANT              6U
-#define CC_CONSONANT_WITH_NUKTA   7U
-#define CC_NUKTA                  8U
-#define CC_DEPENDENT_VOWEL        9U
-#define CC_SPLIT_VOWEL_PIECE_1   10U
-#define CC_SPLIT_VOWEL_PIECE_2   11U
-#define CC_SPLIT_VOWEL_PIECE_3   12U
-#define CC_VIRAMA                13U
-#define CC_ZERO_WIDTH_MARK       14U
-#define CC_AL_LAKUNA             15U
-#define CC_COUNT                 16U
-
-// Character class flags
-#define CF_CLASS_MASK    0x0000FFFFU
-
-#define CF_CONSONANT     0x80000000U
-
-#define CF_REPH          0x40000000U
-#define CF_VATTU         0x20000000U
-#define CF_BELOW_BASE    0x10000000U
-#define CF_POST_BASE     0x08000000U
-#define CF_LENGTH_MARK   0x04000000U
-#define CF_PRE_BASE      0x02000000U
-
-#define CF_POS_BEFORE    0x00300000U
-#define CF_POS_BELOW     0x00200000U
-#define CF_POS_ABOVE     0x00100000U
-#define CF_POS_AFTER     0x00000000U
-#define CF_POS_MASK      0x00300000U
-
-#define CF_INDEX_MASK    0x000F0000U
-#define CF_INDEX_SHIFT   16
-
-// Script flag bits
-#define SF_MATRAS_AFTER_BASE     0x80000000U
-#define SF_REPH_AFTER_BELOW      0x40000000U
-#define SF_EYELASH_RA            0x20000000U
-#define SF_MPRE_FIXUP            0x10000000U
-#define SF_FILTER_ZERO_WIDTH     0x08000000U
-
-#define SF_POST_BASE_LIMIT_MASK  0x0000FFFFU
-#define SF_NO_POST_BASE_LIMIT    0x00007FFFU
-
-#define SM_MAX_PIECES 3
-
-typedef LEUnicode SplitMatra[SM_MAX_PIECES];
-
-class MPreFixups;
-class LEGlyphStorage;
-
-// Dynamic Properties ( v2 fonts only )
-typedef le_uint32 DynamicProperties;
-
-#define DP_REPH               0x80000000U
-#define DP_HALF               0x40000000U
-#define DP_PREF               0x20000000U
-#define DP_BLWF               0x10000000U
-#define DP_PSTF               0x08000000U
-
-struct IndicClassTable
-{
-    typedef le_uint32 CharClass;
-    typedef le_uint32 ScriptFlags;
-    
-    LEUnicode firstChar;
-    LEUnicode lastChar;
-    le_int32 worstCaseExpansion;
-    ScriptFlags scriptFlags;
-    const CharClass *classTable;
-    const SplitMatra *splitMatraTable;
-
-    inline le_int32 getWorstCaseExpansion() const;
-    inline le_bool getFilterZeroWidth() const;
-
-    CharClass getCharClass(LEUnicode ch) const;
-
-    inline const SplitMatra *getSplitMatra(CharClass charClass) const;
-
-    inline le_bool isVowelModifier(LEUnicode ch) const;
-    inline le_bool isStressMark(LEUnicode ch) const;
-    inline le_bool isConsonant(LEUnicode ch) const;
-    inline le_bool isReph(LEUnicode ch) const;
-    inline le_bool isVirama(LEUnicode ch) const;
-    inline le_bool isAlLakuna(LEUnicode ch) const;
-    inline le_bool isNukta(LEUnicode ch) const;
-    inline le_bool isVattu(LEUnicode ch) const;
-    inline le_bool isMatra(LEUnicode ch) const;
-    inline le_bool isSplitMatra(LEUnicode ch) const;
-    inline le_bool isLengthMark(LEUnicode ch) const;
-    inline le_bool hasPostOrBelowBaseForm(LEUnicode ch) const;
-    inline le_bool hasPostBaseForm(LEUnicode ch) const;
-    inline le_bool hasBelowBaseForm(LEUnicode ch) const;
-    inline le_bool hasAboveBaseForm(LEUnicode ch) const;
-    inline le_bool hasPreBaseForm(LEUnicode ch) const;
-
-    inline static le_bool isVowelModifier(CharClass charClass);
-    inline static le_bool isStressMark(CharClass charClass);
-    inline static le_bool isConsonant(CharClass charClass);
-    inline static le_bool isReph(CharClass charClass);
-    inline static le_bool isVirama(CharClass charClass);
-    inline static le_bool isAlLakuna(CharClass charClass);
-    inline static le_bool isNukta(CharClass charClass);
-    inline static le_bool isVattu(CharClass charClass);
-    inline static le_bool isMatra(CharClass charClass);
-    inline static le_bool isSplitMatra(CharClass charClass);
-    inline static le_bool isLengthMark(CharClass charClass);
-    inline static le_bool hasPostOrBelowBaseForm(CharClass charClass);
-    inline static le_bool hasPostBaseForm(CharClass charClass);
-    inline static le_bool hasBelowBaseForm(CharClass charClass);
-    inline static le_bool hasAboveBaseForm(CharClass charClass);
-    inline static le_bool hasPreBaseForm(CharClass charClass);
-
-    static const IndicClassTable *getScriptClassTable(le_int32 scriptCode);
-};
-
-class IndicReordering /* not : public UObject because all methods are static */ {
-public:
-    static le_int32 getWorstCaseExpansion(le_int32 scriptCode);
-
-    static le_bool getFilterZeroWidth(le_int32 scriptCode);
-
-    static le_int32 reorder(const LEUnicode *theChars, le_int32 charCount, le_int32 scriptCode,
-        LEUnicode *outChars, LEGlyphStorage &glyphStorage,
-        MPreFixups **outMPreFixups, LEErrorCode& success);
-
-    static void adjustMPres(MPreFixups *mpreFixups, LEGlyphStorage &glyphStorage, LEErrorCode& success);
-
-    static le_int32 v2process(const LEUnicode *theChars, le_int32 charCount, le_int32 scriptCode,
-        LEUnicode *outChars, LEGlyphStorage &glyphStorage);
-
-    static const FeatureMap *getFeatureMap(le_int32 &count);
-
-       static const FeatureMap *getv2FeatureMap(le_int32 &count);
-
-    static void applyPresentationForms(LEGlyphStorage &glyphStorage, le_int32 count);
-
-    static void finalReordering(LEGlyphStorage &glyphStorage, le_int32 count);
-
-    static void getDynamicProperties(DynamicProperties *dProps, const IndicClassTable *classTable);
-
-private:
-    // do not instantiate
-    IndicReordering();
-
-    static le_int32 findSyllable(const IndicClassTable *classTable, const LEUnicode *chars, le_int32 prev, le_int32 charCount);
-
-};
-
-inline le_int32 IndicClassTable::getWorstCaseExpansion() const
-{
-    return worstCaseExpansion;
-}
-
-inline le_bool IndicClassTable::getFilterZeroWidth() const
-{
-    return (scriptFlags & SF_FILTER_ZERO_WIDTH) != 0;
-}
-
-inline const SplitMatra *IndicClassTable::getSplitMatra(CharClass charClass) const
-{
-    le_int32 index = (charClass & CF_INDEX_MASK) >> CF_INDEX_SHIFT;
-
-    return &splitMatraTable[index - 1];
-}
-
-inline le_bool IndicClassTable::isVowelModifier(CharClass charClass)
-{
-    return (charClass & CF_CLASS_MASK) == CC_VOWEL_MODIFIER;
-}
-
-inline le_bool IndicClassTable::isStressMark(CharClass charClass)
-{
-    return (charClass & CF_CLASS_MASK) == CC_STRESS_MARK;
-}
-
-inline le_bool IndicClassTable::isConsonant(CharClass charClass)
-{
-    return (charClass & CF_CONSONANT) != 0;
-}
-
-inline le_bool IndicClassTable::isReph(CharClass charClass)
-{
-    return (charClass & CF_REPH) != 0;
-}
-
-inline le_bool IndicClassTable::isNukta(CharClass charClass)
-{
-    return (charClass & CF_CLASS_MASK) == CC_NUKTA;
-}
-
-inline le_bool IndicClassTable::isVirama(CharClass charClass)
-{
-    return (charClass & CF_CLASS_MASK) == CC_VIRAMA;
-}
-
-inline le_bool IndicClassTable::isAlLakuna(CharClass charClass)
-{
-    return (charClass & CF_CLASS_MASK) == CC_AL_LAKUNA;
-}
-
-inline le_bool IndicClassTable::isVattu(CharClass charClass)
-{
-    return (charClass & CF_VATTU) != 0;
-}
-
-inline le_bool IndicClassTable::isMatra(CharClass charClass)
-{
-    charClass &= CF_CLASS_MASK;
-
-    return charClass >= CC_DEPENDENT_VOWEL && charClass <= CC_SPLIT_VOWEL_PIECE_3;
-}
-
-inline le_bool IndicClassTable::isSplitMatra(CharClass charClass)
-{
-    return (charClass & CF_INDEX_MASK) != 0;
-}
-
-inline le_bool IndicClassTable::isLengthMark(CharClass charClass)
-{
-    return (charClass & CF_LENGTH_MARK) != 0;
-}
-
-inline le_bool IndicClassTable::hasPostOrBelowBaseForm(CharClass charClass)
-{
-    return (charClass & (CF_POST_BASE | CF_BELOW_BASE)) != 0;
-}
-
-inline le_bool IndicClassTable::hasPostBaseForm(CharClass charClass)
-{
-    return (charClass & CF_POST_BASE) != 0;
-}
-
-inline le_bool IndicClassTable::hasPreBaseForm(CharClass charClass)
-{
-    return (charClass & CF_PRE_BASE) != 0;
-}
-
-inline le_bool IndicClassTable::hasBelowBaseForm(CharClass charClass)
-{
-    return (charClass & CF_BELOW_BASE) != 0;
-}
-
-inline le_bool IndicClassTable::hasAboveBaseForm(CharClass charClass)
-{
-    return ((charClass & CF_POS_MASK) == CF_POS_ABOVE);
-}
-
-inline le_bool IndicClassTable::isVowelModifier(LEUnicode ch) const
-{
-    return isVowelModifier(getCharClass(ch));
-}
-
-inline le_bool IndicClassTable::isStressMark(LEUnicode ch) const
-{
-    return isStressMark(getCharClass(ch));
-}
-
-inline le_bool IndicClassTable::isConsonant(LEUnicode ch) const
-{
-    return isConsonant(getCharClass(ch));
-}
-
-inline le_bool IndicClassTable::isReph(LEUnicode ch) const
-{
-    return isReph(getCharClass(ch));
-}
-
-inline le_bool IndicClassTable::isVirama(LEUnicode ch) const
-{
-    return isVirama(getCharClass(ch));
-}
-
-inline le_bool IndicClassTable::isAlLakuna(LEUnicode ch) const
-{
-    return isAlLakuna(getCharClass(ch));
-}
-
-inline le_bool IndicClassTable::isNukta(LEUnicode ch) const
-{
-    return isNukta(getCharClass(ch));
-}
-
-inline le_bool IndicClassTable::isVattu(LEUnicode ch) const
-{
-    return isVattu(getCharClass(ch));
-}
-
-inline le_bool IndicClassTable::isMatra(LEUnicode ch) const
-{
-    return isMatra(getCharClass(ch));
-}
-
-inline le_bool IndicClassTable::isSplitMatra(LEUnicode ch) const
-{
-    return isSplitMatra(getCharClass(ch));
-}
-
-inline le_bool IndicClassTable::isLengthMark(LEUnicode ch) const
-{
-    return isLengthMark(getCharClass(ch));
-}
-
-inline le_bool IndicClassTable::hasPostOrBelowBaseForm(LEUnicode ch) const
-{
-    return hasPostOrBelowBaseForm(getCharClass(ch));
-}
-
-inline le_bool IndicClassTable::hasPostBaseForm(LEUnicode ch) const
-{
-    return hasPostBaseForm(getCharClass(ch));
-}
-
-inline le_bool IndicClassTable::hasBelowBaseForm(LEUnicode ch) const
-{
-    return hasBelowBaseForm(getCharClass(ch));
-}
-
-inline le_bool IndicClassTable::hasPreBaseForm(LEUnicode ch) const
-{
-    return hasPreBaseForm(getCharClass(ch));
-}
-
-inline le_bool IndicClassTable::hasAboveBaseForm(LEUnicode ch) const
-{
-    return hasAboveBaseForm(getCharClass(ch));
-}
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/KernTable.cpp b/icu4c/source/layout/KernTable.cpp
deleted file mode 100644 (file)
index 4eed2ee..0000000
+++ /dev/null
@@ -1,259 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- * @(#)KernTable.cpp   1.1 04/10/13
- *
- * (C) Copyright IBM Corp. 2004-2014 - All Rights Reserved
- *
- */
-
-#include "KernTable.h"
-#include "LEFontInstance.h"
-#include "LEGlyphStorage.h"
-
-#include "LESwaps.h"
-#include "OpenTypeUtilities.h"
-
-#include <stdio.h>
-
-#define KERNTABLE_DEBUG 0
-
-U_NAMESPACE_BEGIN
-
-struct PairInfo {
-  le_uint16 left;  // left glyph of kern pair
-  le_uint16 right; // right glyph of kern pair
-  le_int16  value; // fword, kern value in funits
-};
-#define KERN_PAIRINFO_SIZE 6
-LE_CORRECT_SIZE(PairInfo, KERN_PAIRINFO_SIZE)
-
-#define SWAP_KEY(p) (((le_uint32) SWAPW((p)->left) << 16) | SWAPW((p)->right))
-
-struct Subtable_0 {
-  le_uint16 nPairs;
-  le_uint16 searchRange;
-  le_uint16 entrySelector;
-  le_uint16 rangeShift;
-};
-#define KERN_SUBTABLE_0_HEADER_SIZE 8
-LE_CORRECT_SIZE(Subtable_0, KERN_SUBTABLE_0_HEADER_SIZE)
-
-// Kern table version 0 only
-struct SubtableHeader {
-  le_uint16 version;
-  le_uint16 length;
-  le_uint16 coverage;
-};
-#define KERN_SUBTABLE_HEADER_SIZE 6
-LE_CORRECT_SIZE(SubtableHeader, KERN_SUBTABLE_HEADER_SIZE)
-
-// Version 0 only, version 1 has different layout
-struct KernTableHeader {
-  le_uint16 version;
-  le_uint16 nTables;
-};
-#define KERN_TABLE_HEADER_SIZE 4
-LE_CORRECT_SIZE(KernTableHeader, KERN_TABLE_HEADER_SIZE)
-
-#define COVERAGE_HORIZONTAL 0x1
-#define COVERAGE_MINIMUM 0x2
-#define COVERAGE_CROSS 0x4
-#define COVERAGE_OVERRIDE 0x8
-
-/*
- * This implementation has support for only one subtable, so if the font has
- * multiple subtables, only the first will be used.  If this turns out to
- * be a problem in practice we should add it.
- *
- * This also supports only version 0 of the kern table header, only
- * Apple supports the latter.
- *
- * This implementation isn't careful about the kern table flags, and
- * might invoke kerning when it is not supposed to.  That too I'm
- * leaving for a bug fix.
- *
- * TODO: support multiple subtables
- * TODO: respect header flags
- */
-KernTable::KernTable(const LETableReference& base, LEErrorCode &success)
-  : pairs(), fTable(base)
-{
-  if(LE_FAILURE(success) || fTable.isEmpty()) {
-#if KERNTABLE_DEBUG
-    fprintf(stderr, "no kern data\n");
-#endif
-    return;
-  }
-  LEReferenceTo<KernTableHeader> header(fTable, success);
-
-#if KERNTABLE_DEBUG
-  // dump first 32 bytes of header
-  for (int i = 0; i < 64; ++i) {
-    fprintf(stderr, "%0.2x ", ((const char*)header.getAlias())[i]&0xff);
-    if (((i+1)&0xf) == 0) {
-      fprintf(stderr, "\n");
-    } else if (((i+1)&0x7) == 0) {
-      fprintf(stderr, "  ");
-    }
-  }
-#endif
-
-  if(LE_FAILURE(success)) return;
-
-  if (!header.isEmpty() && header->version == 0 && SWAPW(header->nTables) > 0) {
-    LEReferenceTo<SubtableHeader> subhead(header, success, KERN_TABLE_HEADER_SIZE);
-
-    if (LE_SUCCESS(success) && !subhead.isEmpty() && subhead->version == 0) {
-      coverage = SWAPW(subhead->coverage);
-
-      if (coverage & COVERAGE_HORIZONTAL) { // only handle horizontal kerning
-        LEReferenceTo<Subtable_0> table(subhead, success, KERN_SUBTABLE_HEADER_SIZE);
-
-        if(table.isEmpty() || LE_FAILURE(success)) return;
-
-        nPairs        = SWAPW(table->nPairs);
-
-#if 0   // some old fonts have bad values here...
-        searchRange   = SWAPW(table->searchRange);
-        entrySelector = SWAPW(table->entrySelector);
-        rangeShift    = SWAPW(table->rangeShift);
-#else
-        entrySelector = OpenTypeUtilities::highBit(nPairs);
-        searchRange   = (1 << entrySelector) * KERN_PAIRINFO_SIZE;
-        rangeShift    = (nPairs * KERN_PAIRINFO_SIZE) - searchRange;
-#endif
-
-        if(LE_SUCCESS(success) && nPairs>0) {
-          // pairs is an instance member, and table is on the stack.
-          // set 'pairs' based on table.getAlias(). This will range check it.
-
-          pairs = LEReferenceToArrayOf<PairInfo>(fTable, // based on overall table
-                                                 success, 
-                                                 (const PairInfo*)table.getAlias(),  // subtable 0 + ..
-                                                 KERN_SUBTABLE_0_HEADER_SIZE,  // .. offset of header size
-                                                 nPairs); // count
-        }
-
-#if 0
-        fprintf(stderr, "coverage: %0.4x nPairs: %d pairs %p\n", coverage, nPairs, pairs.getAlias());
-        fprintf(stderr, "  searchRange: %d entrySelector: %d rangeShift: %d\n", searchRange, entrySelector, rangeShift);
-        fprintf(stderr, "[[ ignored font table entries: range %d selector %d shift %d ]]\n", SWAPW(table->searchRange), SWAPW(table->entrySelector), SWAPW(table->rangeShift));
-#endif
-#if KERNTABLE_DEBUG
-        fprintf(stderr, "coverage: %0.4x nPairs: %d pairs 0x%x\n", coverage, nPairs, pairs);
-        fprintf(stderr, "  searchRange: %d entrySelector: %d rangeShift: %d\n", searchRange, entrySelector, rangeShift);
-
-        if(LE_SUCCESS(success) {
-          // dump part of the pair list
-          char ids[256];
-
-          for (int i = 256; --i >= 0;) {
-            LEGlyphID id = font->mapCharToGlyph(i);
-
-            if (id < 256) {
-              ids[id] = (char)i;
-            }
-          }
-
-          for (i = 0; i < nPairs; ++i) {
-            const PairInfo& p = pairs[i, success];
-
-            le_uint16 left = p->left;
-            le_uint16 right = p->right;
-
-
-            if (left < 256 && right < 256) {
-              char c = ids[left];
-
-              if (c > 0x20 && c < 0x7f) {
-                fprintf(stderr, "%c/", c & 0xff);
-              } else {
-                printf(stderr, "%0.2x/", c & 0xff);
-              }
-
-              c = ids[right];
-              if (c > 0x20 && c < 0x7f) {
-                fprintf(stderr, "%c ", c & 0xff);
-              } else {
-                fprintf(stderr, "%0.2x ", c & 0xff);
-              }
-            }
-          }
-        }
-#endif
-      }
-    }
-  }
-}
-
-
-/*
- * Process the glyph positions.  The positions array has two floats for each
-g * glyph, plus a trailing pair to mark the end of the last glyph.
- */
-void KernTable::process(LEGlyphStorage& storage, LEErrorCode &success)
-{
-  if (LE_SUCCESS(success) && !pairs.isEmpty()) {
-
-    le_uint32 key = storage[0]; // no need to mask off high bits
-    float adjust = 0;
-
-    for (int i = 1, e = storage.getGlyphCount(); LE_SUCCESS(success)&&  i < e; ++i) {
-      key = key << 16 | (storage[i] & 0xffff);
-
-      // argh, to do a binary search, we need to have the pair list in sorted order
-      // but it is not in sorted order on win32 platforms because of the endianness difference
-      // so either I have to swap the element each time I examine it, or I have to swap
-      // all the elements ahead of time and store them in the font
-
-      const PairInfo *p = pairs.getAlias(0, success);
-
-      LEReferenceTo<PairInfo> tpRef(pairs, success, rangeShift); // ((char*)pairs) + rangeShift
-      const PairInfo *tp = tpRef.getAlias();
-      if(LE_FAILURE(success)) return; // get out.
-
-      if (key > SWAP_KEY(tp)) {
-        p = tp;
-      }
-
-#if KERNTABLE_DEBUG
-      fprintf(stderr, "binary search for %0.8x\n", key);
-#endif
-
-      le_uint32 probe = searchRange;
-
-      while (probe > KERN_PAIRINFO_SIZE && LE_SUCCESS(success)) {
-        probe >>= 1;
-        tpRef = LEReferenceTo<PairInfo>(pairs, success, p, probe); // (char*)p + probe
-        tp = tpRef.getAlias();
-        le_uint32 tkey = SWAP_KEY(tp);
-        if(LE_FAILURE(success)) break;
-#if KERNTABLE_DEBUG
-        fprintf(stdout, "   %.3d (%0.8x)\n", ((char*)tp - (char*)pairs)/KERN_PAIRINFO_SIZE, tkey);
-#endif
-        if (tkey <= key && LE_SUCCESS(success)) {
-          if (tkey == key) {
-            le_int16 value = SWAPW(tp->value);
-#if KERNTABLE_DEBUG
-            fprintf(stdout, "binary found kerning pair %x:%x at %d, value: 0x%x (%g)\n",
-              storage[i-1], storage[i], i, value & 0xffff, font->xUnitsToPoints(value));
-            fflush(stdout);
-#endif
-            adjust += fTable.getFont()->xUnitsToPoints(value);
-            break;
-          }
-
-          p = tp;
-        }
-      }
-
-      storage.adjustPosition(i, adjust, 0, success);
-    }
-
-    storage.adjustPosition(storage.getGlyphCount(), adjust, 0, success);
-  }
-}
-
-U_NAMESPACE_END
-
diff --git a/icu4c/source/layout/KernTable.h b/icu4c/source/layout/KernTable.h
deleted file mode 100644 (file)
index 145602c..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- * @(#)KernTable.h     1.1 04/10/13
- *
- * (C) Copyright IBM Corp. 2004-2013 - All Rights Reserved
- *
- */
-
-#ifndef __KERNTABLE_H
-#define __KERNTABLE_H
-
-#ifndef __LETYPES_H
-#include "LETypes.h"
-#endif
-
-#include "LETypes.h"
-#include "LETableReference.h"
-//#include "LEFontInstance.h"
-//#include "LEGlyphStorage.h"
-
-#include <stdio.h>
-
-U_NAMESPACE_BEGIN
-struct PairInfo;
-class  LEFontInstance;
-class  LEGlyphStorage;
-
-/**
- * Windows type 0 kerning table support only for now.
- */
-class U_LAYOUT_API KernTable
-{
- private:
-  le_uint16 coverage;
-  le_uint16 nPairs;
-  LEReferenceToArrayOf<PairInfo> pairs;
-  const LETableReference &fTable;
-  le_uint16 searchRange;
-  le_uint16 entrySelector;
-  le_uint16 rangeShift;
-
- public:
-  KernTable(const LETableReference &table, LEErrorCode &success);
-
-  /*
-   * Process the glyph positions.
-   */
-  void process(LEGlyphStorage& storage, LEErrorCode &success);
-};
-
-U_NAMESPACE_END
-
-#endif
diff --git a/icu4c/source/layout/KhmerLayoutEngine.cpp b/icu4c/source/layout/KhmerLayoutEngine.cpp
deleted file mode 100644 (file)
index 3dba157..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-
-/*
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved 
- *
- * This file is a modification of the ICU file IndicLayoutEngine.cpp
- * by Jens Herden and Javier Sola for Khmer language 
- *
- */
-
-
-#include "OpenTypeLayoutEngine.h"
-#include "KhmerLayoutEngine.h"
-#include "LEGlyphStorage.h"
-#include "KhmerReordering.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(KhmerOpenTypeLayoutEngine)
-
-KhmerOpenTypeLayoutEngine::KhmerOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                                                     le_int32 typoFlags, const LEReferenceTo<GlyphSubstitutionTableHeader> &gsubTable, LEErrorCode &success)
-    : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success)
-{
-    fFeatureMap   = KhmerReordering::getFeatureMap(fFeatureMapCount);
-    fFeatureOrder = TRUE;
-}
-
-KhmerOpenTypeLayoutEngine::KhmerOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                                                    le_int32 typoFlags, LEErrorCode &success)
-    : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success)
-{
-    fFeatureMap   = KhmerReordering::getFeatureMap(fFeatureMapCount);
-    fFeatureOrder = TRUE;
-}
-
-KhmerOpenTypeLayoutEngine::~KhmerOpenTypeLayoutEngine()
-{
-    // nothing to do
-}
-
-// Input: characters
-// Output: characters, char indices, tags
-// Returns: output character count
-le_int32 KhmerOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-        LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    le_int32 worstCase = count * 3;  // worst case is 3 for Khmer  TODO check if 2 is enough
-
-    outChars = LE_NEW_ARRAY(LEUnicode, worstCase);
-
-    if (outChars == NULL) {
-        success = LE_MEMORY_ALLOCATION_ERROR;
-        return 0;
-    }
-
-    glyphStorage.allocateGlyphArray(worstCase, rightToLeft, success);
-    glyphStorage.allocateAuxData(success);
-
-    if (LE_FAILURE(success)) {
-        LE_DELETE_ARRAY(outChars);
-        return 0;
-    }
-
-    // NOTE: assumes this allocates featureTags...
-    // (probably better than doing the worst case stuff here...)
-    le_int32 outCharCount = KhmerReordering::reorder(&chars[offset], count, fScriptCode, outChars, glyphStorage);
-
-    glyphStorage.adoptGlyphCount(outCharCount);
-    return outCharCount;
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/KhmerLayoutEngine.h b/icu4c/source/layout/KhmerLayoutEngine.h
deleted file mode 100644 (file)
index 741eab4..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2016 - All Rights Reserved 
- *
- * This file is a modification of the ICU file IndicLayoutEngine.h
- * by Jens Herden and Javier Sola for Khmer language 
- *
- */
-
-#ifndef __KHMERLAYOUTENGINE_H
-#define __KHMERLAYOUTENGINE_H
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "LEGlyphFilter.h"
-#include "LayoutEngine.h"
-#include "OpenTypeLayoutEngine.h"
-
-#include "GlyphSubstitutionTables.h"
-#include "GlyphDefinitionTables.h"
-#include "GlyphPositioningTables.h"
-
-U_NAMESPACE_BEGIN
-
-class MPreFixups;
-class LEGlyphStorage;
-
-/**
- * This class implements OpenType layout for Khmer OpenType fonts, as
- * specified by Microsoft in "Creating and Supporting OpenType Fonts for
- * Khmer Scripts" (http://www.microsoft.com/typography/otspec/indicot/default.htm) TODO: change url
- *
- * This class overrides the characterProcessing method to do Khmer character processing
- * and reordering (See the MS spec. for more details)
- *
- * @internal
- */
-class KhmerOpenTypeLayoutEngine : public OpenTypeLayoutEngine
-{
-public:
-    /**
-     * This is the main constructor. It constructs an instance of KhmerOpenTypeLayoutEngine for
-     * a particular font, script and language. It takes the GSUB table as a parameter since
-     * LayoutEngine::layoutEngineFactory has to read the GSUB table to know that it has an
-     * Khmer OpenType font.
-     *
-     * @param fontInstance - the font
-     * @param scriptCode - the script
-     * @param langaugeCode - the language
-     * @param gsubTable - the GSUB table
-     * @param success - set to an error code if the operation fails
-     *
-     * @see LayoutEngine::layoutEngineFactory
-     * @see OpenTypeLayoutEngine
-     * @see ScriptAndLangaugeTags.h for script and language codes
-     *
-     * @internal
-     */
-    KhmerOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                            le_int32 typoFlags, const LEReferenceTo<GlyphSubstitutionTableHeader> &gsubTable, LEErrorCode &success);
-
-    /**
-     * This constructor is used when the font requires a "canned" GSUB table which can't be known
-     * until after this constructor has been invoked.
-     *
-     * @param fontInstance - the font
-     * @param scriptCode - the script
-     * @param langaugeCode - the language
-     * @param success - set to an error code if the operation fails
-     *
-     * @see OpenTypeLayoutEngine
-     * @see ScriptAndLangaugeTags.h for script and language codes
-     *
-     * @internal
-     */
-    KhmerOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                             le_int32 typoFlags, LEErrorCode &success);
-
-    /**
-     * The destructor, virtual for correct polymorphic invocation.
-     *
-     * @internal
-     */
-   virtual ~KhmerOpenTypeLayoutEngine();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    static UClassID getStaticClassID();
-
-protected:
-
-    /**
-     * This method does Khmer OpenType character processing. It assigns the OpenType feature
-     * tags to the characters, and may generate output characters which have been reordered. 
-     * It may also split some vowels, resulting in more output characters than input characters.
-     *
-     * Input parameters:
-     * @param chars - the input character context
-     * @param offset - the index of the first character to process
-     * @param count - the number of characters to process
-     * @param max - the number of characters in the input context
-     * @param rightToLeft - <code>TRUE</code> if the characters are in a right to left directional run
-     * @param glyphStorage - the glyph storage object. The glyph and character index arrays will be set.
-     *                       the auxillary data array will be set to the feature tags.
-     *
-     * Output parameters:
-     * @param success - set to an error code if the operation fails
-     *
-     * @return the output character count
-     *
-     * @internal
-     */
-    virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-            LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/KhmerReordering.cpp b/icu4c/source/layout/KhmerReordering.cpp
deleted file mode 100644 (file)
index 2c234f6..0000000
+++ /dev/null
@@ -1,501 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved 
- *
- * This file is a modification of the ICU file IndicReordering.cpp
- * by Jens Herden and Javier Sola for Khmer language 
- *
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "KhmerReordering.h"
-#include "LEGlyphStorage.h"
-
-
-U_NAMESPACE_BEGIN
-
-// Characters that get refered to by name...
-enum
-{
-    C_SIGN_ZWNJ     = 0x200C,
-    C_SIGN_ZWJ      = 0x200D,
-    C_DOTTED_CIRCLE = 0x25CC,
-    C_RO            = 0x179A,
-    C_VOWEL_AA      = 0x17B6,
-    C_SIGN_NIKAHIT  = 0x17C6,
-    C_VOWEL_E       = 0x17C1,
-    C_COENG         = 0x17D2
-};
-
-
-enum
-{
-    // simple classes, they are used in the statetable (in this file) to control the length of a syllable
-    // they are also used to know where a character should be placed (location in reference to the base character)
-    // and also to know if a character, when independtly displayed, should be displayed with a dotted-circle to
-    // indicate error in syllable construction 
-    _xx = KhmerClassTable::CC_RESERVED,
-    _sa = KhmerClassTable::CC_SIGN_ABOVE | KhmerClassTable::CF_DOTTED_CIRCLE | KhmerClassTable::CF_POS_ABOVE,
-    _sp = KhmerClassTable::CC_SIGN_AFTER | KhmerClassTable::CF_DOTTED_CIRCLE| KhmerClassTable::CF_POS_AFTER,
-    _c1 = KhmerClassTable::CC_CONSONANT | KhmerClassTable::CF_CONSONANT,
-    _c2 = KhmerClassTable::CC_CONSONANT2 | KhmerClassTable::CF_CONSONANT,
-    _c3 = KhmerClassTable::CC_CONSONANT3 | KhmerClassTable::CF_CONSONANT,
-    _rb = KhmerClassTable::CC_ROBAT | KhmerClassTable::CF_POS_ABOVE | KhmerClassTable::CF_DOTTED_CIRCLE,
-    _cs = KhmerClassTable::CC_CONSONANT_SHIFTER | KhmerClassTable::CF_DOTTED_CIRCLE | KhmerClassTable::CF_SHIFTER,
-    _dl = KhmerClassTable::CC_DEPENDENT_VOWEL | KhmerClassTable::CF_POS_BEFORE | KhmerClassTable::CF_DOTTED_CIRCLE, 
-    _db = KhmerClassTable::CC_DEPENDENT_VOWEL | KhmerClassTable::CF_POS_BELOW | KhmerClassTable::CF_DOTTED_CIRCLE,
-    _da = KhmerClassTable::CC_DEPENDENT_VOWEL | KhmerClassTable::CF_POS_ABOVE | KhmerClassTable::CF_DOTTED_CIRCLE | KhmerClassTable::CF_ABOVE_VOWEL,
-    _dr = KhmerClassTable::CC_DEPENDENT_VOWEL | KhmerClassTable::CF_POS_AFTER | KhmerClassTable::CF_DOTTED_CIRCLE,
-    _co = KhmerClassTable::CC_COENG | KhmerClassTable::CF_COENG | KhmerClassTable::CF_DOTTED_CIRCLE,
-    
-    // split vowel
-    _va = _da | KhmerClassTable::CF_SPLIT_VOWEL,
-    _vr = _dr | KhmerClassTable::CF_SPLIT_VOWEL
-};
-
-
-// Character class tables 
-// _xx character does not combine into syllable, such as numbers, puntuation marks, non-Khmer signs... 
-// _sa Sign placed above the base
-// _sp Sign placed after the base
-// _c1 Consonant of type 1 or independent vowel (independent vowels behave as type 1 consonants)
-// _c2 Consonant of type 2 (only RO)
-// _c3 Consonant of type 3 
-// _rb Khmer sign robat u17CC. combining mark for subscript consonants
-// _cd Consonant-shifter
-// _dl Dependent vowel placed before the base (left of the base)
-// _db Dependent vowel placed below the base 
-// _da Dependent vowel placed above the base
-// _dr Dependent vowel placed behind the base (right of the base)    
-// _co Khmer combining mark COENG u17D2, combines with the consonant or independent vowel following 
-//     it to create a subscript consonant or independent vowel   
-// _va Khmer split vowel in wich the first part is before the base and the second one above the base
-// _vr Khmer split vowel in wich the first part is before the base and the second one behind (right of) the base
-
-static const KhmerClassTable::CharClass khmerCharClasses[] =
-{
-    _c1, _c1, _c1, _c3, _c1, _c1, _c1, _c1, _c3, _c1, _c1, _c1, _c1, _c3, _c1, _c1, // 1780 - 178F
-    _c1, _c1, _c1, _c1, _c3, _c1, _c1, _c1, _c1, _c3, _c2, _c1, _c1, _c1, _c3, _c3, // 1790 - 179F
-    _c1, _c3, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, _c1, // 17A0 - 17AF
-    _c1, _c1, _c1, _c1, _dr, _dr, _dr, _da, _da, _da, _da, _db, _db, _db, _va, _vr, // 17B0 - 17BF
-    _vr, _dl, _dl, _dl, _vr, _vr, _sa, _sp, _sp, _cs, _cs, _sa, _rb, _sa, _sa, _sa, // 17C0 - 17CF
-    _sa, _sa, _co, _sa, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _sa, _xx, _xx, // 17D0 - 17DF
-};                                                                                  
-
-
-//
-// Khmer Class Tables
-//                   
-
-//
-// The range of characters defined in the above table is defined here. FOr Khmer 1780 to 17DF
-// Even if the Khmer range is bigger, all other characters are not combinable, and therefore treated
-// as _xx
-static const KhmerClassTable khmerClassTable = {0x1780, 0x17df, khmerCharClasses};
-
-
-// Below we define how a character in the input string is either in the khmerCharClasses table
-// (in which case we get its type back), a ZWJ or ZWNJ (two characters that may appear 
-// within the syllable, but are not in the table) we also get their type back, or an unknown object
-// in which case we get _xx (CC_RESERVED) back
-KhmerClassTable::CharClass KhmerClassTable::getCharClass(LEUnicode ch) const
-{
-
-    if (ch == C_SIGN_ZWJ) {
-        return CC_ZERO_WIDTH_J_MARK;
-    }
-
-    if (ch == C_SIGN_ZWNJ) {
-        return CC_ZERO_WIDTH_NJ_MARK;
-    }
-
-    if (ch < firstChar || ch > lastChar) {
-        return CC_RESERVED;
-    }
-    
-    return classTable[ch - firstChar];
-}
-
-const KhmerClassTable *KhmerClassTable::getKhmerClassTable()
-{
-    return &khmerClassTable;
-}
-
-
-
-class KhmerReorderingOutput : public UMemory {
-private:
-    le_int32 fSyllableCount;
-    le_int32 fOutIndex;
-    LEUnicode *fOutChars;
-
-    LEGlyphStorage &fGlyphStorage;
-
-
-public:
-    KhmerReorderingOutput(LEUnicode *outChars, LEGlyphStorage &glyphStorage)
-        : fSyllableCount(0), fOutIndex(0), fOutChars(outChars), fGlyphStorage(glyphStorage)
-    {
-        // nothing else to do...
-    }
-
-    ~KhmerReorderingOutput()
-    {
-        // nothing to do here...
-    }
-
-    void reset()
-    {
-        fSyllableCount += 1;
-    }
-
-    void writeChar(LEUnicode ch, le_uint32 charIndex, FeatureMask charFeatures)
-    {
-        LEErrorCode success = LE_NO_ERROR;
-
-        fOutChars[fOutIndex] = ch;
-
-        fGlyphStorage.setCharIndex(fOutIndex, charIndex, success);
-        fGlyphStorage.setAuxData(fOutIndex, charFeatures | (fSyllableCount & LE_GLYPH_GROUP_MASK), success);
-
-        fOutIndex += 1;
-    }
-
-    le_int32 getOutputIndex()
-    {
-        return fOutIndex;
-    }
-};
-
-
-#define blwfFeatureTag LE_BLWF_FEATURE_TAG
-#define pstfFeatureTag LE_PSTF_FEATURE_TAG
-#define presFeatureTag LE_PRES_FEATURE_TAG
-#define blwsFeatureTag LE_BLWS_FEATURE_TAG
-#define abvsFeatureTag LE_ABVS_FEATURE_TAG
-#define pstsFeatureTag LE_PSTS_FEATURE_TAG
-
-#define blwmFeatureTag LE_BLWM_FEATURE_TAG
-#define abvmFeatureTag LE_ABVM_FEATURE_TAG
-#define distFeatureTag LE_DIST_FEATURE_TAG
-
-#define prefFeatureTag LE_PREF_FEATURE_TAG
-#define abvfFeatureTag LE_ABVF_FEATURE_TAG
-#define cligFeatureTag LE_CLIG_FEATURE_TAG
-#define mkmkFeatureTag LE_MKMK_FEATURE_TAG
-
-#define prefFeatureMask 0x80000000UL
-#define blwfFeatureMask 0x40000000UL
-#define abvfFeatureMask 0x20000000UL
-#define pstfFeatureMask 0x10000000UL 
-#define presFeatureMask 0x08000000UL
-#define blwsFeatureMask 0x04000000UL
-#define abvsFeatureMask 0x02000000UL
-#define pstsFeatureMask 0x01000000UL
-#define cligFeatureMask 0x00800000UL
-#define distFeatureMask 0x00400000UL
-#define blwmFeatureMask 0x00200000UL
-#define abvmFeatureMask 0x00100000UL
-#define mkmkFeatureMask 0x00080000UL
-
-#define tagPref    (prefFeatureMask | presFeatureMask | cligFeatureMask | distFeatureMask)
-#define tagAbvf    (abvfFeatureMask | abvsFeatureMask | cligFeatureMask | distFeatureMask | abvmFeatureMask | mkmkFeatureMask)
-#define tagPstf    (blwfFeatureMask | blwsFeatureMask | prefFeatureMask | presFeatureMask | pstfFeatureMask | pstsFeatureMask | cligFeatureMask | distFeatureMask | blwmFeatureMask)
-#define tagBlwf    (blwfFeatureMask | blwsFeatureMask | cligFeatureMask | distFeatureMask | blwmFeatureMask | mkmkFeatureMask)
-#define tagDefault (prefFeatureMask | blwfFeatureMask | presFeatureMask | blwsFeatureMask | cligFeatureMask | distFeatureMask | abvmFeatureMask | blwmFeatureMask | mkmkFeatureMask)
-
-
-
-// These are in the order in which the features need to be applied
-// for correct processing
-static const FeatureMap featureMap[] =
-{
-    // Shaping features
-    {prefFeatureTag, prefFeatureMask},
-    {blwfFeatureTag, blwfFeatureMask},
-    {abvfFeatureTag, abvfFeatureMask},
-    {pstfFeatureTag, pstfFeatureMask}, 
-    {presFeatureTag, presFeatureMask},
-    {blwsFeatureTag, blwsFeatureMask},
-    {abvsFeatureTag, abvsFeatureMask},
-    {pstsFeatureTag, pstsFeatureMask},
-    {cligFeatureTag, cligFeatureMask},
-    
-    // Positioning features
-    {distFeatureTag, distFeatureMask},
-    {blwmFeatureTag, blwmFeatureMask},
-    {abvmFeatureTag, abvmFeatureMask},
-    {mkmkFeatureTag, mkmkFeatureMask},
-};
-
-static const le_int32 featureMapCount = LE_ARRAY_SIZE(featureMap);
-
-// The stateTable is used to calculate the end (the length) of a well
-// formed Khmer Syllable. 
-//
-// Each horizontal line is ordered exactly the same way as the values in KhmerClassTable
-// CharClassValues in KhmerReordering.h This coincidence of values allows the
-// follow up of the table.
-//
-// Each line corresponds to a state, which does not necessarily need to be a type
-// of component... for example, state 2 is a base, with is always a first character
-// in the syllable, but the state could be produced a consonant of any type when
-// it is the first character that is analysed (in ground state).
-//
-// Differentiating 3 types of consonants is necessary in order to 
-// forbid the use of certain combinations, such as having a second
-// coeng after a coeng RO, 
-// The inexistent possibility of having a type 3 after another type 3 is permitted,
-// eliminating it would very much complicate the table, and it does not create typing
-// problems, as the case above.
-//
-// The table is quite complex, in order to limit the number of coeng consonants
-// to 2 (by means of the table).
-//
-// There a peculiarity, as far as Unicode is concerned:
-// - The consonant-shifter is considered in two possible different 
-//   locations, the one considered in Unicode 3.0 and the one considered in
-//   Unicode 4.0. (there is a backwards compatibility problem in this standard).
-
-
-// xx    independent character, such as a number, punctuation sign or non-khmer char
-//
-// c1    Khmer consonant of type 1 or an independent vowel
-//       that is, a letter in which the subscript for is only under the
-//       base, not taking any space to the right or to the left
-//
-// c2    Khmer consonant of type 2, the coeng form takes space under
-//       and to the left of the base (only RO is of this type)
-//
-// c3    Khmer consonant of type 3. Its subscript form takes space under
-//       and to the right of the base. 
-//
-// cs    Khmer consonant shifter         
-//
-// rb    Khmer robat
-//
-// co    coeng character (u17D2)
-//
-// dv    dependent vowel (including split vowels, they are treated in the same way).
-//       even if dv is not defined above, the component that is really tested for is
-//       KhmerClassTable::CC_DEPENDENT_VOWEL, which is common to all dependent vowels
-//
-// zwj   Zero Width joiner
-//
-// zwnj  Zero width non joiner  
-//
-// sa    above sign
-//
-// sp    post sign    
-// 
-// there are lines with equal content but for an easier understanding 
-// (and maybe change in the future) we did not join them
-//
-static const le_int8 khmerStateTable[][KhmerClassTable::CC_COUNT] =
-{
-
-//   xx  c1  c2  c3 zwnj cs  rb  co  dv  sa  sp zwj  
-    { 1,  2,  2,  2,  1,  1,  1,  6,  1,  1,  1,  2}, //  0 - ground state
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, //  1 - exit state (or sign to the right of the syllable)
-    {-1, -1, -1, -1,  3,  4,  5,  6, 16, 17,  1, -1}, //  2 - Base consonant    
-    {-1, -1, -1, -1, -1,  4, -1, -1, 16, -1, -1, -1}, //  3 - First ZWNJ before a register shifter
-                                                      //      It can only be followed by a shifter or a vowel
-    {-1, -1, -1, -1, 15, -1, -1,  6, 16, 17,  1, 14}, //  4 - First register shifter             
-    {-1, -1, -1, -1, -1, -1, -1, -1, 20, -1,  1, -1}, //  5 - Robat
-    {-1,  7,  8,  9, -1, -1, -1, -1, -1, -1, -1, -1}, //  6 - First Coeng
-    {-1, -1, -1, -1, 12, 13, -1, 10, 16, 17,  1, 14}, //  7 - First consonant of type 1 after coeng 
-    {-1, -1, -1, -1, 12, 13, -1, -1, 16, 17,  1, 14}, //  8 - First consonant of type 2 after coeng
-    {-1, -1, -1, -1, 12, 13, -1, 10, 16, 17,  1, 14}, //  9 - First consonant or type 3 after ceong
-    {-1, 11, 11, 11, -1, -1, -1, -1, -1, -1, -1, -1}, // 10 - Second Coeng (no register shifter before)
-    {-1, -1, -1, -1, 15, -1, -1, -1, 16, 17,  1, 14}, // 11 - Second coeng consonant (or ind. vowel) no register shifter before 
-    {-1, -1, -1, -1, -1, 13, -1, -1, 16, -1, -1, -1}, // 12 - Second ZWNJ before a register shifter
-    {-1, -1, -1, -1, 15, -1, -1, -1, 16, 17,  1, 14}, // 13 - Second register shifter 
-    {-1, -1, -1, -1, -1, -1, -1, -1, 16, -1, -1, -1}, // 14 - ZWJ before vowel    
-    {-1, -1, -1, -1, -1, -1, -1, -1, 16, -1, -1, -1}, // 15 - ZWNJ before vowel
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, 17,  1, 18}, // 16 - dependent vowel 
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  1, 18}, // 17 - sign above
-    {-1, -1, -1, -1, -1, -1, -1, 19, -1, -1, -1, -1}, // 18 - ZWJ after vowel    
-    {-1,  1, -1,  1, -1, -1, -1, -1, -1, -1, -1, -1}, // 19 - Third coeng 
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,  1, -1}, // 20 - dependent vowel after a Robat
-
-};         
-
-
-const FeatureMap *KhmerReordering::getFeatureMap(le_int32 &count)
-{
-    count = featureMapCount;
-
-    return featureMap;
-}
-
-
-// Given an input string of characters and a location in which to start looking
-// calculate, using the state table, which one is the last character of the syllable
-// that starts in the starting position.
-le_int32 KhmerReordering::findSyllable(const KhmerClassTable *classTable, const LEUnicode *chars, le_int32 prev, le_int32 charCount)
-{
-    le_int32 cursor = prev;
-    le_int8 state = 0;
-
-    while (cursor < charCount) {
-        KhmerClassTable::CharClass charClass = (classTable->getCharClass(chars[cursor]) & KhmerClassTable::CF_CLASS_MASK);
-
-        state = khmerStateTable[state][charClass];
-
-        if (state < 0) {
-            break;
-        }
-
-        cursor += 1;
-    }
-
-    return cursor;
-}
-
-
-// This is the real reordering function as applied to the Khmer language
-
-le_int32 KhmerReordering::reorder(const LEUnicode *chars, le_int32 charCount, le_int32 /*scriptCode*/,
-                                  LEUnicode *outChars, LEGlyphStorage &glyphStorage)
-{
-    const KhmerClassTable *classTable = KhmerClassTable::getKhmerClassTable();
-
-    KhmerReorderingOutput output(outChars, glyphStorage);
-    KhmerClassTable::CharClass charClass;
-    le_int32 i, prev = 0, coengRo;
-
-    
-    // This loop only exits when we reach the end of a run, which may contain 
-    // several syllables.
-    while (prev < charCount) {
-        le_int32 syllable = findSyllable(classTable, chars, prev, charCount);
-
-        output.reset();
-   
-        // write a pre vowel or the pre part of a split vowel first
-        // and look out for coeng + ro. RO is the only vowel of type 2, and
-        // therefore the only one that requires saving space before the base.
-        coengRo = -1;  // There is no Coeng Ro, if found this value will change
-        for (i = prev; i < syllable; i += 1) {
-            charClass = classTable->getCharClass(chars[i]);
-            
-            // if a split vowel, write the pre part. In Khmer the pre part
-            // is the same for all split vowels, same glyph as pre vowel C_VOWEL_E
-            if (charClass & KhmerClassTable::CF_SPLIT_VOWEL) {
-                output.writeChar(C_VOWEL_E, i, tagPref);
-                break; // there can be only one vowel
-            }
-            
-            // if a vowel with pos before write it out
-            if (charClass & KhmerClassTable::CF_POS_BEFORE) {
-                output.writeChar(chars[i], i, tagPref);
-                break; // there can be only one vowel 
-            }
-            
-            // look for coeng + ro and remember position
-            // works because coeng + ro is always in front of a vowel (if there is a vowel) 
-            // and because CC_CONSONANT2 is enough to identify it, as it is the only consonant
-            // with this flag
-            if ( (charClass & KhmerClassTable::CF_COENG) && (i + 1 < syllable) &&
-                 ( (classTable->getCharClass(chars[i + 1]) & KhmerClassTable::CF_CLASS_MASK) == KhmerClassTable::CC_CONSONANT2) )
-            {
-                    coengRo = i;
-            }
-        }
-        
-        // write coeng + ro if found
-        if (coengRo > -1) {
-            output.writeChar(C_COENG, coengRo, tagPref);
-            output.writeChar(C_RO, coengRo + 1, tagPref);
-        }
-        
-        // shall we add a dotted circle?
-        // If in the position in which the base should be (first char in the string) there is
-        // a character that has the Dotted circle flag (a character that cannot be a base)
-        // then write a dotted circle
-        if (classTable->getCharClass(chars[prev]) & KhmerClassTable::CF_DOTTED_CIRCLE) {
-            output.writeChar(C_DOTTED_CIRCLE, prev, tagDefault);        
-        }        
-
-        // copy what is left to the output, skipping before vowels and coeng Ro if they are present
-        for (i = prev; i < syllable; i += 1) {
-            charClass = classTable->getCharClass(chars[i]);
-            
-            // skip a before vowel, it was already processed
-            if (charClass & KhmerClassTable::CF_POS_BEFORE) {
-                continue;
-            }
-            
-            // skip coeng + ro, it was already processed
-            if (i == coengRo) {
-                i += 1;
-                continue;
-            }
-            
-            switch (charClass & KhmerClassTable::CF_POS_MASK) {
-                case KhmerClassTable::CF_POS_ABOVE :
-                    output.writeChar(chars[i], i, tagAbvf);
-                    break;
-                
-                case KhmerClassTable::CF_POS_AFTER :
-                    output.writeChar(chars[i], i, tagPstf);
-                    break;
-                
-                case KhmerClassTable::CF_POS_BELOW :
-                    output.writeChar(chars[i], i, tagBlwf);
-                    break;
-                
-                default:
-                    // assign the correct flags to a coeng consonant
-                    // Consonants of type 3 are taged as Post forms and those type 1 as below forms
-                    if ( (charClass & KhmerClassTable::CF_COENG) && i + 1 < syllable ) {
-                        if ( (classTable->getCharClass(chars[i + 1]) & KhmerClassTable::CF_CLASS_MASK) 
-                              == KhmerClassTable::CC_CONSONANT3) {
-                            output.writeChar(chars[i], i, tagPstf);
-                            i += 1;
-                            output.writeChar(chars[i], i, tagPstf);
-                        }
-                        else {
-                            output.writeChar(chars[i], i, tagBlwf);
-                            i += 1;
-                            output.writeChar(chars[i], i, tagBlwf);
-                        }
-                        break;
-                    }
-                    // if a shifter is followed by an above vowel change the shifter to below form,
-                    // an above vowel can have two possible positions i + 1 or i + 3 
-                    // (position i+1 corresponds to unicode 3, position i+3 to Unicode 4)
-                    // and there is an extra rule for C_VOWEL_AA + C_SIGN_NIKAHIT also for two
-                    // different positions, right after the shifter or after a vowel (Unicode 4)
-                    if ( (charClass & KhmerClassTable::CF_SHIFTER) && (i + 1 < syllable) ) {
-                        if ((classTable->getCharClass(chars[i + 1]) & KhmerClassTable::CF_ABOVE_VOWEL)
-                            || (i + 2 < syllable
-                                && ( (classTable->getCharClass(chars[i + 1]) & KhmerClassTable::CF_CLASS_MASK) == C_VOWEL_AA)
-                                && ( (classTable->getCharClass(chars[i + 2]) & KhmerClassTable::CF_CLASS_MASK) == C_SIGN_NIKAHIT))
-                            || (i + 3 < syllable && (classTable->getCharClass(chars[i + 3]) & KhmerClassTable::CF_ABOVE_VOWEL))
-                            || (i + 4 < syllable
-                                && ( (classTable->getCharClass(chars[i + 3]) & KhmerClassTable::CF_CLASS_MASK) == C_VOWEL_AA)
-                                && ( (classTable->getCharClass(chars[i + 4]) & KhmerClassTable::CF_CLASS_MASK) == C_SIGN_NIKAHIT) ) ) 
-                        {
-                            output.writeChar(chars[i], i, tagBlwf);
-                            break;
-                        }
-                        
-                    }
-                    // default - any other characters
-                    output.writeChar(chars[i], i, tagDefault);
-                    break;
-            } // switch
-        } // for
-
-        prev = syllable; // move the pointer to the start of next syllable
-    }
-
-    return output.getOutputIndex();
-}
-
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/KhmerReordering.h b/icu4c/source/layout/KhmerReordering.h
deleted file mode 100644 (file)
index f9e1987..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved 
- *
- * This file is a modification of the ICU file IndicReordering.h
- * by Jens Herden and Javier Sola for Khmer language 
- *
- */
-
-#ifndef __KHMERREORDERING_H
-#define __KHMERREORDERING_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-// Vocabulary 
-//     Base ->         A consonant or an independent vowel in its full (not subscript) form. It is the 
-//                     center of the syllable, it can be souranded by coeng (subscript) consonants, vowels,
-//                     split vowels, signs... but there is only one base in a syllable, it has to be coded as
-//                     the first character of the syllable.
-//     split vowel --> vowel that has two parts placed separately (e.g. Before and after the consonant).  
-//                     Khmer language has five of them. Khmer split vowels either have one part before the
-//                     base and one after the base or they have a part before the base and a part above the base.
-//                     The first part of all Khmer split vowels is the same character, identical to 
-//                     the glyph of Khmer dependent vowel SRA EI   
-//     coeng -->  modifier used in Khmer to construct coeng (subscript) consonants 
-//                Differently than indian languages, the coeng modifies the consonant that follows it,
-//                not the one preceding it  Each consonant has two forms, the base form and the subscript form
-//                the base form is the normal one (using the consonants code-point), the subscript form is
-//                displayed when the combination coeng + consonant is encountered.
-//     Consonant of type 1 -> A consonant which has subscript for that only occupies space under a base consonant
-//     Consonant of type 2.-> Its subscript form occupies space under and before the base (only one, RO)
-//     Consonant of Type 3 -> Its subscript form occupies space under and after the base (KHO, CHHO, THHO, BA, YO, SA)
-//     Consonant shifter -> Khmer has to series of consonants. The same dependent vowel has different sounds
-//                          if it is attached to a consonant of the first series or a consonant of the second series
-//                          Most consonants have an equivalent in the other series, but some of theme exist only in
-//                          one series (for example SA). If we want to use the consonant SA with a vowel sound that
-//                          can only be done with a vowel sound that corresponds to a vowel accompanying a consonant
-//                          of the other series, then we need to use a consonant shifter: TRIISAP or MUSIKATOAN
-//                          x17C9 y x17CA. TRIISAP changes a first series consonant to second series sound and 
-//                          MUSIKATOAN a second series consonant to have a first series vowel sound.
-//                          Consonant shifter are both normally supercript marks, but, when they are followed by a
-//                          superscript, they change shape and take the form of subscript dependent vowel SRA U.
-//                          If they are in the same syllable as a coeng consonant, Unicode 3.0 says that they
-//                          should be typed before the coeng. Unicode 4.0 breaks the standard and says that it should
-//                          be placed after the coeng consonant.
-//     Dependent vowel ->   In khmer dependent vowels can be placed above, below, before or after the base                             
-//                          Each vowel has its own position. Only one vowel per syllable is allowed.
-//     Signs            ->  Khmer has above signs and post signs. Only one above sign and/or one post sign are
-//                          Allowed in a syllable.
-//
-//     
-
-struct KhmerClassTable    // This list must include all types of components that can be used inside a syllable
-{
-    enum CharClassValues  // order is important here! This order must be the same that is found in each horizontal 
-                          // line in the statetable for Khmer (file KhmerReordering.cpp).
-    {
-        CC_RESERVED             =  0,
-        CC_CONSONANT            =  1, // consonant of type 1 or independent vowel
-        CC_CONSONANT2           =  2, // Consonant of type 2
-        CC_CONSONANT3           =  3, // Consonant of type 3 
-        CC_ZERO_WIDTH_NJ_MARK   =  4, // Zero Width non joiner character (0x200C)
-        CC_CONSONANT_SHIFTER    =  5, 
-        CC_ROBAT                =  6, // Khmer special diacritic accent -treated differently in state table
-        CC_COENG                =  7, // Subscript consonant combining character
-        CC_DEPENDENT_VOWEL      =  8, 
-        CC_SIGN_ABOVE           =  9,
-        CC_SIGN_AFTER           = 10,
-        CC_ZERO_WIDTH_J_MARK    = 11, // Zero width joiner character
-        CC_COUNT                = 12  // This is the number of character classes
-    };
-
-    enum CharClassFlags
-    {
-        CF_CLASS_MASK    = 0x0000FFFF,
-
-        CF_CONSONANT     = 0x01000000,  // flag to speed up comparing
-        CF_SPLIT_VOWEL   = 0x02000000,  // flag for a split vowel -> the first part is added in front of the syllable
-        CF_DOTTED_CIRCLE = 0x04000000,  // add a dotted circle if a character with this flag is the first in a syllable
-        CF_COENG         = 0x08000000,  // flag to speed up comparing
-        CF_SHIFTER       = 0x10000000,  // flag to speed up comparing
-        CF_ABOVE_VOWEL   = 0x20000000,  // flag to speed up comparing
-
-        // position flags
-        CF_POS_BEFORE    = 0x00080000,
-        CF_POS_BELOW     = 0x00040000,
-        CF_POS_ABOVE     = 0x00020000,
-        CF_POS_AFTER     = 0x00010000,
-        CF_POS_MASK      = 0x000f0000
-    };
-
-    typedef le_uint32 CharClass;
-
-    typedef le_int32 ScriptFlags;
-
-    LEUnicode firstChar;   // for Khmer this will become x1780
-    LEUnicode lastChar;    //  and this x17DF
-    const CharClass *classTable;
-
-    CharClass getCharClass(LEUnicode ch) const;
-
-    static const KhmerClassTable *getKhmerClassTable();
-};
-
-
-class KhmerReordering /* not : public UObject because all methods are static */ {
-public:
-    static le_int32 reorder(const LEUnicode *theChars, le_int32 charCount, le_int32 scriptCode,
-        LEUnicode *outChars, LEGlyphStorage &glyphStorage);
-
-    static const FeatureMap *getFeatureMap(le_int32 &count);
-
-private:
-    // do not instantiate
-    KhmerReordering();
-
-    static le_int32 findSyllable(const KhmerClassTable *classTable, const LEUnicode *chars, le_int32 prev, le_int32 charCount);
-
-};
-
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/LEFontInstance.cpp b/icu4c/source/layout/LEFontInstance.cpp
deleted file mode 100644 (file)
index 5820deb..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *******************************************************************************
- *
- *   Copyright (C) 1999-2007, International Business Machines
- *   Corporation and others.  All Rights Reserved.
- *
- *******************************************************************************
- *   file name:  LEFontInstance.cpp
- *
- *   created on: 02/06/2003
- *   created by: Eric R. Mader
- */
-
-#include "LETypes.h"
-#include "LEScripts.h"
-#include "LEFontInstance.h"
-#include "LEGlyphStorage.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LEFontInstance)
-
-LECharMapper::~LECharMapper()
-{
-    // nothing to do.
-}
-
-LEFontInstance::~LEFontInstance()
-{
-    // nothing to do
-}
-
-const LEFontInstance *LEFontInstance::getSubFont(const LEUnicode chars[], le_int32 *offset, le_int32 limit,
-                                                       le_int32 script, LEErrorCode &success) const
-{
-    if (LE_FAILURE(success)) {
-        return NULL;
-    }
-
-    if (chars == NULL || *offset < 0 || limit < 0 || *offset >= limit || script < 0 || script >= scriptCodeCount) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return NULL;
-    }
-
-    *offset = limit;
-    return this;
-}
-
-void LEFontInstance::mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count,
-                                      le_bool reverse, const LECharMapper *mapper, le_bool filterZeroWidth, LEGlyphStorage &glyphStorage) const
-{
-    le_int32 i, out = 0, dir = 1;
-
-    if (reverse) {
-        out = count - 1;
-        dir = -1;
-    }
-
-    for (i = offset; i < offset + count; i += 1, out += dir) {
-        LEUnicode16 high = chars[i];
-        LEUnicode32 code = high;
-
-        if (i < offset + count - 1 && high >= 0xD800 && high <= 0xDBFF) {
-            LEUnicode16 low = chars[i + 1];
-
-            if (low >= 0xDC00 && low <= 0xDFFF) {
-                code = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000;
-            }
-        }
-
-        glyphStorage[out] = mapCharToGlyph(code, mapper, filterZeroWidth);
-
-        if (code >= 0x10000) {
-            i += 1;
-            glyphStorage[out += dir] = 0xFFFF;
-        }
-    }
-}
-
-LEGlyphID LEFontInstance::mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper) const
-{
-    return mapCharToGlyph(ch, mapper, TRUE);
-}
-
-LEGlyphID LEFontInstance::mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper, le_bool filterZeroWidth) const
-{
-    LEUnicode32 mappedChar = mapper->mapChar(ch);
-
-    if (mappedChar == 0xFFFE || mappedChar == 0xFFFF) {
-        return 0xFFFF;
-    }
-
-    if (filterZeroWidth && (mappedChar == 0x200C || mappedChar == 0x200D)) {
-        return canDisplay(mappedChar)? 0x0001 : 0xFFFF;
-    }
-
-    return mapCharToGlyph(mappedChar);
-}
-
-le_bool LEFontInstance::canDisplay(LEUnicode32 ch) const
-{
-    return LE_GET_GLYPH(mapCharToGlyph(ch)) != 0;
-}
-
-float LEFontInstance::xUnitsToPoints(float xUnits) const
-{
-    return (xUnits * getXPixelsPerEm()) / (float) getUnitsPerEM();
-}
-
-float LEFontInstance::yUnitsToPoints(float yUnits) const
-{
-    return (yUnits * getYPixelsPerEm()) / (float) getUnitsPerEM();
-}
-
-void LEFontInstance::unitsToPoints(LEPoint &units, LEPoint &points) const
-{
-    points.fX = xUnitsToPoints(units.fX);
-    points.fY = yUnitsToPoints(units.fY);
-}
-
-float LEFontInstance::xPixelsToUnits(float xPixels) const
-{
-    return (xPixels * getUnitsPerEM()) / (float) getXPixelsPerEm();
-}
-
-float LEFontInstance::yPixelsToUnits(float yPixels) const
-{
-    return (yPixels * getUnitsPerEM()) / (float) getYPixelsPerEm();
-}
-
-void LEFontInstance::pixelsToUnits(LEPoint &pixels, LEPoint &units) const
-{
-    units.fX = xPixelsToUnits(pixels.fX);
-    units.fY = yPixelsToUnits(pixels.fY);
-}
-
-void LEFontInstance::transformFunits(float xFunits, float yFunits, LEPoint &pixels) const
-{
-    pixels.fX = xUnitsToPoints(xFunits) * getScaleFactorX();
-    pixels.fY = yUnitsToPoints(yFunits) * getScaleFactorY();
-}
-
-le_int32 LEFontInstance::getLineHeight() const
-{
-    return getAscent() + getDescent() + getLeading();
-}
-
-U_NAMESPACE_END
-
diff --git a/icu4c/source/layout/LEFontInstance.h b/icu4c/source/layout/LEFontInstance.h
deleted file mode 100644 (file)
index 620ded5..0000000
+++ /dev/null
@@ -1,526 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2015 - All Rights Reserved
- *
- */
-
-#ifndef __LEFONTINSTANCE_H
-#define __LEFONTINSTANCE_H
-
-#include "LETypes.h"
-/**
- * \file
- * \brief C++ API: Layout Engine Font Instance object
- */
-
-U_NAMESPACE_BEGIN
-
-/**
- * Instances of this class are used by <code>LEFontInstance::mapCharsToGlyphs</code> and
- * <code>LEFontInstance::mapCharToGlyph</code> to adjust character codes before the character
- * to glyph mapping process. Examples of this are filtering out control characters
- * and character mirroring - replacing a character which has both a left and a right
- * hand form with the opposite form.
- *
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-class LECharMapper /* not : public UObject because this is an interface/mixin class */
-{
-public:
-    /**
-     * Destructor.
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual ~LECharMapper();
-
-    /**
-     * This method does the adjustments.
-     *
-     * @param ch - the input character
-     *
-     * @return the adjusted character
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual LEUnicode32 mapChar(LEUnicode32 ch) const = 0;
-};
-
-/**
- * This is a forward reference to the class which holds the per-glyph
- * storage.
- *
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-class LEGlyphStorage;
-
-/**
- * This is a virtual base class that serves as the interface between a LayoutEngine
- * and the platform font environment. It allows a LayoutEngine to access font tables, do
- * character to glyph mapping, and obtain metrics information without knowing any platform
- * specific details. There are also a few utility methods for converting between points,
- * pixels and funits. (font design units)
- *
- * An instance of an <code>LEFontInstance</code> represents a font at a particular point
- * size. Each instance can represent either a single physical font, or a composite font.
- * A composite font is a collection of physical fonts, each of which contains a subset of
- * the characters contained in the composite font.
- *
- * Note: with the exception of <code>getSubFont</code>, the methods in this class only
- * make sense for a physical font. If you have an <code>LEFontInstance</code> which
- * represents a composite font you should only call the methods below which have
- * an <code>LEGlyphID</code>, an <code>LEUnicode</code> or an <code>LEUnicode32</code>
- * as one of the arguments because these can be used to select a particular subfont.
- *
- * Subclasses which implement composite fonts should supply an implementation of these
- * methods with some default behavior such as returning constant values, or using the
- * values from the first subfont.
- *
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-class U_LAYOUT_API LEFontInstance : public UObject
-{
-public:
-
-    /**
-     * This virtual destructor is here so that the subclass
-     * destructors can be invoked through the base class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual ~LEFontInstance();
-
-    /**
-     * Get a physical font which can render the given text. For composite fonts,
-     * if there is no single physical font which can render all of the text,
-     * return a physical font which can render an initial substring of the text,
-     * and set the <code>offset</code> parameter to the end of that substring.
-     *
-     * Internally, the LayoutEngine works with runs of text all in the same
-     * font and script, so it is best to call this method with text which is
-     * in a single script, passing the script code in as a hint. If you don't
-     * know the script of the text, you can use zero, which is the script code
-     * for characters used in more than one script.
-     *
-     * The default implementation of this method is intended for instances of
-     * <code>LEFontInstance</code> which represent a physical font. It returns
-     * <code>this</code> and indicates that the entire string can be rendered.
-     *
-     * This method will return a valid <code>LEFontInstance</code> unless you
-     * have passed illegal parameters, or an internal error has been encountered.
-     * For composite fonts, it may return the warning <code>LE_NO_SUBFONT_WARNING</code>
-     * to indicate that the returned font may not be able to render all of
-     * the text. Whenever a valid font is returned, the <code>offset</code> parameter
-     * will be advanced by at least one.
-     *
-     * Subclasses which implement composite fonts must override this method.
-     * Where it makes sense, they should use the script code as a hint to render
-     * characters from the COMMON script in the font which is used for the given
-     * script. For example, if the input text is a series of Arabic words separated
-     * by spaces, and the script code passed in is <code>arabScriptCode</code> you
-     * should return the font used for Arabic characters for all of the input text,
-     * including the spaces. If, on the other hand, the input text contains characters
-     * which cannot be rendered by the font used for Arabic characters, but which can
-     * be rendered by another font, you should return that font for those characters.
-     *
-     * @param chars   - the array of Unicode characters.
-     * @param offset  - a pointer to the starting offset in the text. On exit this
-     *                  will be set the the limit offset of the text which can be
-     *                  rendered using the returned font.
-     * @param limit   - the limit offset for the input text.
-     * @param script  - the script hint.
-     * @param success - set to an error code if the arguments are illegal, or no font
-     *                  can be returned for some reason. May also be set to
-     *                  <code>LE_NO_SUBFONT_WARNING</code> if the subfont which
-     *                  was returned cannot render all of the text.
-     *
-     * @return an <code>LEFontInstance</code> for the sub font which can render the characters, or
-     *         <code>NULL</code> if there is an error.
-     *
-     * @see LEScripts.h
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual const LEFontInstance *getSubFont(const LEUnicode chars[], le_int32 *offset, le_int32 limit, le_int32 script, LEErrorCode &success) const;
-
-    //
-    // Font file access
-    //
-
-    /**
-     * This method reads a table from the font. Note that in general,
-     * it only makes sense to call this method on an <code>LEFontInstance</code>
-     * which represents a physical font - i.e. one which has been returned by
-     * <code>getSubFont()</code>. This is because each subfont in a composite font
-     * will have different tables, and there's no way to know which subfont to access.
-     *
-     * Subclasses which represent composite fonts should always return <code>NULL</code>.
-     *
-     * @param tableTag - the four byte table tag. (e.g. 'cmap')
-     * @param length - ignored on entry, on exit will be the length of the table if known, or -1 if unknown.
-     * @return the address of the table in memory, or <code>NULL</code>
-     *         if the table doesn't exist.
-     * @deprecated ICU 54. See {@link LayoutEngine}
-     */
-    virtual const void* getFontTable(LETag tableTag, size_t &length) const = 0;
-
-    /**
-     * This method is used to determine if the font can
-     * render the given character. This can usually be done
-     * by looking the character up in the font's character
-     * to glyph mapping.
-     *
-     * The default implementation of this method will return
-     * <code>TRUE</code> if <code>mapCharToGlyph(ch)</code>
-     * returns a non-zero value.
-     *
-     * @param ch - the character to be tested
-     *
-     * @return <code>TRUE</code> if the font can render ch.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual le_bool canDisplay(LEUnicode32 ch) const;
-
-    /**
-     * This method returns the number of design units in
-     * the font's EM square.
-     *
-     * @return the number of design units pre EM.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual le_int32 getUnitsPerEM() const = 0;
-
-    /**
-     * This method maps an array of character codes to an array of glyph
-     * indices, using the font's character to glyph map.
-     *
-     * The default implementation iterates over all of the characters and calls
-     * <code>mapCharToGlyph(ch, mapper)</code> on each one. It also handles surrogate
-     * characters, storing the glyph ID for the high surrogate, and a deleted glyph (0xFFFF)
-     * for the low surrogate.
-     *
-     * Most sublcasses will not need to implement this method.
-     *
-     * @param chars - the character array
-     * @param offset - the index of the first character
-     * @param count - the number of characters
-     * @param reverse - if <code>TRUE</code>, store the glyph indices in reverse order.
-     * @param mapper - the character mapper.
-     * @param filterZeroWidth - <code>TRUE</code> if ZWJ / ZWNJ characters should map to a glyph w/ no contours.
-     * @param glyphStorage - the object which contains the output glyph array
-     *
-     * @see LECharMapper
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual void mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, const LECharMapper *mapper, le_bool filterZeroWidth, LEGlyphStorage &glyphStorage) const;
-
-    /**
-     * This method maps a single character to a glyph index, using the
-     * font's character to glyph map. The default implementation of this
-     * method calls the mapper, and then calls <code>mapCharToGlyph(mappedCh)</code>.
-     *
-     * @param ch - the character
-     * @param mapper - the character mapper
-     * @param filterZeroWidth - <code>TRUE</code> if ZWJ / ZWNJ characters should map to a glyph w/ no contours.
-     *
-     * @return the glyph index
-     *
-     * @see LECharMapper
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual LEGlyphID mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper, le_bool filterZeroWidth) const;
-
-    /**
-     * This method maps a single character to a glyph index, using the
-     * font's character to glyph map. The default implementation of this
-     * method calls the mapper, and then calls <code>mapCharToGlyph(mappedCh)</code>.
-     *
-     * @param ch - the character
-     * @param mapper - the character mapper
-     *
-     * @return the glyph index
-     *
-     * @see LECharMapper
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual LEGlyphID mapCharToGlyph(LEUnicode32 ch, const LECharMapper *mapper) const;
-
-    /**
-     * This method maps a single character to a glyph index, using the
-     * font's character to glyph map. There is no default implementation
-     * of this method because it requires information about the platform
-     * font implementation.
-     *
-     * @param ch - the character
-     *
-     * @return the glyph index
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual LEGlyphID mapCharToGlyph(LEUnicode32 ch) const = 0;
-
-    //
-    // Metrics
-    //
-
-    /**
-     * This method gets the X and Y advance of a particular glyph, in pixels.
-     *
-     * @param glyph - the glyph index
-     * @param advance - the X and Y pixel values will be stored here
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual void getGlyphAdvance(LEGlyphID glyph, LEPoint &advance) const = 0;
-
-    /**
-     * This method gets the hinted X and Y pixel coordinates of a particular
-     * point in the outline of the given glyph.
-     *
-     * @param glyph - the glyph index
-     * @param pointNumber - the number of the point
-     * @param point - the point's X and Y pixel values will be stored here
-     *
-     * @return <code>TRUE</code> if the point coordinates could be stored.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual le_bool getGlyphPoint(LEGlyphID glyph, le_int32 pointNumber, LEPoint &point) const = 0;
-
-    /**
-     * This method returns the width of the font's EM square
-     * in pixels.
-     *
-     * @return the pixel width of the EM square
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual float getXPixelsPerEm() const = 0;
-
-    /**
-     * This method returns the height of the font's EM square
-     * in pixels.
-     *
-     * @return the pixel height of the EM square
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual float getYPixelsPerEm() const = 0;
-
-    /**
-     * This method converts font design units in the
-     * X direction to points.
-     *
-     * @param xUnits - design units in the X direction
-     *
-     * @return points in the X direction
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual float xUnitsToPoints(float xUnits) const;
-
-    /**
-     * This method converts font design units in the
-     * Y direction to points.
-     *
-     * @param yUnits - design units in the Y direction
-     *
-     * @return points in the Y direction
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual float yUnitsToPoints(float yUnits) const;
-
-    /**
-     * This method converts font design units to points.
-     *
-     * @param units - X and Y design units
-     * @param points - set to X and Y points
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual void unitsToPoints(LEPoint &units, LEPoint &points) const;
-
-    /**
-     * This method converts pixels in the
-     * X direction to font design units.
-     *
-     * @param xPixels - pixels in the X direction
-     *
-     * @return font design units in the X direction
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual float xPixelsToUnits(float xPixels) const;
-
-    /**
-     * This method converts pixels in the
-     * Y direction to font design units.
-     *
-     * @param yPixels - pixels in the Y direction
-     *
-     * @return font design units in the Y direction
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual float yPixelsToUnits(float yPixels) const;
-
-    /**
-     * This method converts pixels to font design units.
-     *
-     * @param pixels - X and Y pixel
-     * @param units - set to X and Y font design units
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual void pixelsToUnits(LEPoint &pixels, LEPoint &units) const;
-
-    /**
-     * Get the X scale factor from the font's transform. The default
-     * implementation of <code>transformFunits()</code> will call this method.
-     *
-     * @return the X scale factor.
-     *
-     *
-     * @see transformFunits
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual float getScaleFactorX() const = 0;
-
-    /**
-     * Get the Y scale factor from the font's transform. The default
-     * implementation of <code>transformFunits()</code> will call this method.
-     *
-     * @return the Yscale factor.
-     *
-     * @see transformFunits
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual float getScaleFactorY() const = 0;
-
-    /**
-     * This method transforms an X, Y point in font design units to a
-     * pixel coordinate, applying the font's transform. The default
-     * implementation of this method calls <code>getScaleFactorX()</code>
-     * and <code>getScaleFactorY()</code>.
-     *
-     * @param xFunits - the X coordinate in font design units
-     * @param yFunits - the Y coordinate in font design units
-     * @param pixels - the tranformed co-ordinate in pixels
-     *
-     * @see getScaleFactorX
-     * @see getScaleFactorY
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual void transformFunits(float xFunits, float yFunits, LEPoint &pixels) const;
-
-    /**
-     * This is a convenience method used to convert
-     * values in a 16.16 fixed point format to floating point.
-     *
-     * @param fixed - the fixed point value
-     *
-     * @return the floating point value
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    static inline float fixedToFloat(le_int32 fixed);
-
-    /**
-     * This is a convenience method used to convert
-     * floating point values to 16.16 fixed point format.
-     *
-     * @param theFloat - the floating point value
-     *
-     * @return the fixed point value
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    static inline le_int32 floatToFixed(float theFloat);
-
-    //
-    // These methods won't ever be called by the LayoutEngine,
-    // but are useful for clients of <code>LEFontInstance</code> who
-    // need to render text.
-    //
-
-    /**
-     * Get the font's ascent.
-     *
-     * @return the font's ascent, in points. This value
-     * will always be positive.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual le_int32 getAscent() const = 0;
-
-    /**
-     * Get the font's descent.
-     *
-     * @return the font's descent, in points. This value
-     * will always be positive.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual le_int32 getDescent() const = 0;
-
-    /**
-     * Get the font's leading.
-     *
-     * @return the font's leading, in points. This value
-     * will always be positive.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual le_int32 getLeading() const = 0;
-
-    /**
-     * Get the line height required to display text in
-     * this font. The default implementation of this method
-     * returns the sum of the ascent, descent, and leading.
-     *
-     * @return the line height, in points. This vaule will
-     * always be positive.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual le_int32 getLineHeight() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    static UClassID getStaticClassID();
-
-};
-
-inline float LEFontInstance::fixedToFloat(le_int32 fixed)
-{
-    return (float) (fixed / 65536.0);
-}
-
-inline le_int32 LEFontInstance::floatToFixed(float theFloat)
-{
-    return (le_int32) (theFloat * 65536.0);
-}
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/LEGlyphFilter.h b/icu4c/source/layout/LEGlyphFilter.h
deleted file mode 100644 (file)
index cf3212e..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2011 - All Rights Reserved
- *
- */
-
-#ifndef __LEGLYPHFILTER__H
-#define __LEGLYPHFILTER__H
-
-#include "LETypes.h"
-
-U_NAMESPACE_BEGIN
-
-#ifndef U_HIDE_INTERNAL_API
-/**
- * This is a helper class that is used to
- * recognize a set of glyph indices.
- *
- * @internal
- */
-class LEGlyphFilter /* not : public UObject because this is an interface/mixin class */ {
-public:
-    /**
-     * Destructor.
-     * @internal
-     */
-    virtual ~LEGlyphFilter();
-
-    /**
-     * This method is used to test a particular
-     * glyph index to see if it is in the set
-     * recognized by the filter.
-     *
-     * @param glyph - the glyph index to be tested
-     *
-     * @return TRUE if the glyph index is in the set.
-     *
-     * @internal
-     */
-    virtual le_bool accept(LEGlyphID glyph) const = 0;
-};
-#endif  /* U_HIDE_INTERNAL_API */
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/LEGlyphStorage.cpp b/icu4c/source/layout/LEGlyphStorage.cpp
deleted file mode 100644 (file)
index cc5749b..0000000
+++ /dev/null
@@ -1,668 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- **********************************************************************
- *   Copyright (C) 1998-2009, International Business Machines
- *   Corporation and others.  All Rights Reserved.
- **********************************************************************
- */
-
-#include "LETypes.h"
-#include "LEInsertionList.h"
-#include "LEGlyphStorage.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LEGlyphStorage)
-
-LEInsertionCallback::~LEInsertionCallback()
-{
-       // nothing to do...
-}
-
-LEGlyphStorage::LEGlyphStorage()
-    : fGlyphCount(0), fGlyphs(NULL), fCharIndices(NULL), fPositions(NULL),
-      fAuxData(NULL), fInsertionList(NULL), fSrcIndex(0), fDestIndex(0)
-{
-    // nothing else to do!
-}
-
-LEGlyphStorage::~LEGlyphStorage()
-{
-    reset();
-}
-
-void LEGlyphStorage::reset()
-{
-    fGlyphCount = 0;
-
-    if (fPositions != NULL) {
-        LE_DELETE_ARRAY(fPositions);
-        fPositions = NULL;
-    }
-
-    if (fAuxData != NULL) {
-        LE_DELETE_ARRAY(fAuxData);
-        fAuxData = NULL;
-    }
-
-    if (fInsertionList != NULL) {
-        delete fInsertionList;
-        fInsertionList = NULL;
-    }
-
-    if (fCharIndices != NULL) {
-        LE_DELETE_ARRAY(fCharIndices);
-        fCharIndices = NULL;
-    }
-
-    if (fGlyphs != NULL) {
-        LE_DELETE_ARRAY(fGlyphs);
-        fGlyphs = NULL;
-    }
-}
-
-// FIXME: This might get called more than once, for various reasons. Is
-// testing for pre-existing glyph and charIndices arrays good enough?
-void LEGlyphStorage::allocateGlyphArray(le_int32 initialGlyphCount, le_bool rightToLeft, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    if (initialGlyphCount <= 0) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-
-    if (fGlyphs == NULL) {
-        fGlyphCount = initialGlyphCount;
-        fGlyphs = LE_NEW_ARRAY(LEGlyphID, fGlyphCount);
-
-        if (fGlyphs == NULL) {
-            success = LE_MEMORY_ALLOCATION_ERROR;
-            return;
-        }
-    }
-
-    if (fCharIndices == NULL) {
-        fCharIndices = LE_NEW_ARRAY(le_int32, fGlyphCount);
-
-        if (fCharIndices == NULL) {
-            LE_DELETE_ARRAY(fGlyphs);
-            fGlyphs = NULL;
-            success = LE_MEMORY_ALLOCATION_ERROR;
-            return;
-        }
-
-        // Initialize the charIndices array
-        le_int32 i, count = fGlyphCount, dir = 1, out = 0;
-
-        if (rightToLeft) {
-            out = fGlyphCount - 1;
-            dir = -1;
-        }
-
-        for (i = 0; i < count; i += 1, out += dir) {
-            fCharIndices[out] = i;
-        }
-    }
-
-    if (fInsertionList == NULL) {
-        // FIXME: check this for failure?
-        fInsertionList = new LEInsertionList(rightToLeft);
-        if (fInsertionList == NULL) { 
-            LE_DELETE_ARRAY(fCharIndices);
-            fCharIndices = NULL;
-
-            LE_DELETE_ARRAY(fGlyphs);
-            fGlyphs = NULL;
-
-            success = LE_MEMORY_ALLOCATION_ERROR;
-            return;
-        }
-    }
-}
-
-// FIXME: do we want to initialize the positions to [0, 0]?
-le_int32 LEGlyphStorage::allocatePositions(LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return -1;
-    }
-
-    if (fPositions != NULL) {
-        success = LE_INTERNAL_ERROR;
-        return -1;
-    }
-
-    fPositions = LE_NEW_ARRAY(float, 2 * (fGlyphCount + 1));
-
-    if (fPositions == NULL) {
-        success = LE_MEMORY_ALLOCATION_ERROR;
-        return -1;
-    }
-
-    return fGlyphCount;
-}
-
-// FIXME: do we want to initialize the aux data to NULL?
-le_int32 LEGlyphStorage::allocateAuxData(LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return -1;
-    }
-
-    if (fAuxData != NULL) {
-        success = LE_INTERNAL_ERROR;
-        return -1;
-    }
-
-    fAuxData = LE_NEW_ARRAY(le_uint32, fGlyphCount);
-
-    if (fAuxData == NULL) {
-        success = LE_MEMORY_ALLOCATION_ERROR;
-        return -1;
-    }
-
-    return fGlyphCount;
-}
-
-void LEGlyphStorage::getCharIndices(le_int32 charIndices[], le_int32 indexBase, LEErrorCode &success) const
-{
-    le_int32 i;
-
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    if (charIndices == NULL) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-
-    if (fCharIndices == NULL) {
-        success = LE_NO_LAYOUT_ERROR;
-        return;
-    }
-
-    for (i = 0; i < fGlyphCount; i += 1) {
-        charIndices[i] = fCharIndices[i] + indexBase;
-    }
-}
-
-void LEGlyphStorage::getCharIndices(le_int32 charIndices[], LEErrorCode &success) const
-{
-    if (LE_FAILURE(success)) {
-      return;
-    }
-    
-    if (charIndices == NULL) {
-      success = LE_ILLEGAL_ARGUMENT_ERROR;
-      return;
-    }
-    
-    if (fCharIndices == NULL) {
-      success = LE_NO_LAYOUT_ERROR;
-      return;
-    }
-    
-    LE_ARRAY_COPY(charIndices, fCharIndices, fGlyphCount);
-}
-
-// Copy the glyphs into caller's (32-bit) glyph array, OR in extraBits
-void LEGlyphStorage::getGlyphs(le_uint32 glyphs[], le_uint32 extraBits, LEErrorCode &success) const
-{
-    le_int32 i;
-
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    if (glyphs == NULL) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-
-    if (fGlyphs == NULL) {
-        success = LE_NO_LAYOUT_ERROR;
-        return;
-    }
-
-    for (i = 0; i < fGlyphCount; i += 1) {
-        glyphs[i] = fGlyphs[i] | extraBits;
-    }
-}
-
-void LEGlyphStorage::getGlyphs(LEGlyphID glyphs[], LEErrorCode &success) const
-{
-    if (LE_FAILURE(success)) {
-      return;
-    }
-    
-    if (glyphs == NULL) {
-      success = LE_ILLEGAL_ARGUMENT_ERROR;
-      return;
-    }
-    
-    if (fGlyphs == NULL) {
-      success = LE_NO_LAYOUT_ERROR;
-      return;
-    }
-    
-    LE_ARRAY_COPY(glyphs, fGlyphs, fGlyphCount);
-}
-
-LEGlyphID LEGlyphStorage::getGlyphID(le_int32 glyphIndex, LEErrorCode &success) const
-{
-    if (LE_FAILURE(success)) {
-        return 0xFFFF;
-    }
-
-    if (fGlyphs == NULL) {
-        success = LE_NO_LAYOUT_ERROR;
-        return 0xFFFF;
-    }
-
-    if (glyphIndex < 0 || glyphIndex >= fGlyphCount) {
-        success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-        return 0xFFFF;
-    }
-
-    return fGlyphs[glyphIndex];
-}
-
-void LEGlyphStorage::setGlyphID(le_int32 glyphIndex, LEGlyphID glyphID, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    if (fGlyphs == NULL) {
-        success = LE_NO_LAYOUT_ERROR;
-        return;
-    }
-
-    if (glyphIndex < 0 || glyphIndex >= fGlyphCount) {
-        success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-        return;
-    }
-
-    fGlyphs[glyphIndex] = glyphID;
-}
-
-le_int32 LEGlyphStorage::getCharIndex(le_int32 glyphIndex, LEErrorCode &success) const
-{
-    if (LE_FAILURE(success)) {
-        return -1;
-    }
-
-    if (fCharIndices == NULL) {
-        success = LE_NO_LAYOUT_ERROR;
-        return -1;
-    }
-
-    if (glyphIndex < 0 || glyphIndex >= fGlyphCount) {
-        success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-        return -1;
-    }
-
-    return fCharIndices[glyphIndex];
-}
-
-void LEGlyphStorage::setCharIndex(le_int32 glyphIndex, le_int32 charIndex, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    if (fCharIndices == NULL) {
-        success = LE_NO_LAYOUT_ERROR;
-        return;
-    }
-
-    if (glyphIndex < 0 || glyphIndex >= fGlyphCount) {
-        success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-        return;
-    }
-
-    fCharIndices[glyphIndex] = charIndex;
-}
-
-void LEGlyphStorage::getAuxData(le_uint32 auxData[], LEErrorCode &success) const
-{
-    if (LE_FAILURE(success)) {
-      return;
-    }
-    
-    if (auxData == NULL) {
-      success = LE_ILLEGAL_ARGUMENT_ERROR;
-      return;
-    }
-    
-    if (fAuxData == NULL) {
-      success = LE_NO_LAYOUT_ERROR;
-      return;
-    }
-    
-    LE_ARRAY_COPY(auxData, fAuxData, fGlyphCount);
-}
-
-le_uint32 LEGlyphStorage::getAuxData(le_int32 glyphIndex, LEErrorCode &success) const
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (fAuxData == NULL) {
-        success = LE_NO_LAYOUT_ERROR;
-        return 0;
-    }
-    
-    if (glyphIndex < 0 || glyphIndex >= fGlyphCount) {
-        success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-        return 0;
-    }
-
-    return fAuxData[glyphIndex];
-}
-
-void LEGlyphStorage::setAuxData(le_int32 glyphIndex, le_uint32 auxData, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    if (fAuxData == NULL) {
-        success = LE_NO_LAYOUT_ERROR;
-        return;
-    }
-
-    if (glyphIndex < 0 || glyphIndex >= fGlyphCount) {
-        success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-        return;
-    }
-
-    fAuxData[glyphIndex] = auxData;
-}
-
-void LEGlyphStorage::getGlyphPositions(float positions[], LEErrorCode &success) const
-{
-    if (LE_FAILURE(success)) {
-      return;
-    }
-  
-    if (positions == NULL) {
-      success = LE_ILLEGAL_ARGUMENT_ERROR;
-      return;
-    }
-    
-    if (fPositions == NULL) {
-      success = LE_NO_LAYOUT_ERROR;
-      return;
-    }
-    
-    LE_ARRAY_COPY(positions, fPositions, fGlyphCount * 2 + 2);
-}
-
-void LEGlyphStorage::getGlyphPosition(le_int32 glyphIndex, float &x, float &y, LEErrorCode &success) const
-{
-    if (LE_FAILURE(success)) {
-      return;
-    }
-    
-    if (glyphIndex < 0 || glyphIndex > fGlyphCount) {
-      success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-      return;
-    }
-    
-    if (fPositions == NULL) {
-      success = LE_NO_LAYOUT_ERROR;
-      return;
-    }
-    
-    x = fPositions[glyphIndex * 2];
-    y = fPositions[glyphIndex * 2 + 1];
-}
-
-void LEGlyphStorage::setPosition(le_int32 glyphIndex, float x, float y, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-    
-    if (glyphIndex < 0 || glyphIndex > fGlyphCount) {
-      success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-      return;
-    }
-    
-    fPositions[glyphIndex * 2]     = x;
-    fPositions[glyphIndex * 2 + 1] = y;
-}
-
-void LEGlyphStorage::adjustPosition(le_int32 glyphIndex, float xAdjust, float yAdjust, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-    
-    if (glyphIndex < 0 || glyphIndex > fGlyphCount) {
-      success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-      return;
-    }
-    
-    fPositions[glyphIndex * 2]     += xAdjust;
-    fPositions[glyphIndex * 2 + 1] += yAdjust;
-}
-
-void LEGlyphStorage::adoptGlyphArray(LEGlyphStorage &from)
-{
-    if (fGlyphs != NULL) {
-        LE_DELETE_ARRAY(fGlyphs);
-    }
-
-    fGlyphs = from.fGlyphs;
-    from.fGlyphs = NULL;
-
-    if (fInsertionList != NULL) {
-        delete fInsertionList;
-    }
-
-    fInsertionList = from.fInsertionList;
-    from.fInsertionList = NULL;
-}
-
-void LEGlyphStorage::adoptCharIndicesArray(LEGlyphStorage &from)
-{
-    if (fCharIndices != NULL) {
-        LE_DELETE_ARRAY(fCharIndices);
-    }
-
-    fCharIndices = from.fCharIndices;
-    from.fCharIndices = NULL;
-}
-
-void LEGlyphStorage::adoptPositionArray(LEGlyphStorage &from)
-{
-    if (fPositions != NULL) {
-        LE_DELETE_ARRAY(fPositions);
-    }
-
-    fPositions = from.fPositions;
-    from.fPositions = NULL;
-}
-
-void LEGlyphStorage::adoptAuxDataArray(LEGlyphStorage &from)
-{
-    if (fAuxData != NULL) {
-        LE_DELETE_ARRAY(fAuxData);
-    }
-
-    fAuxData = from.fAuxData;
-    from.fAuxData = NULL;
-}
-
-void LEGlyphStorage::adoptGlyphCount(LEGlyphStorage &from)
-{
-    fGlyphCount = from.fGlyphCount;
-}
-
-void LEGlyphStorage::adoptGlyphCount(le_int32 newGlyphCount)
-{
-    fGlyphCount = newGlyphCount;
-}
-
-// Move a glyph to a different position in the LEGlyphStorage ( used for Indic v2 processing )
-
-void LEGlyphStorage::moveGlyph(le_int32 fromPosition, le_int32 toPosition, le_uint32 marker )
-{
-
-    LEErrorCode success = LE_NO_ERROR;
-
-    LEGlyphID holdGlyph = getGlyphID(fromPosition,success);
-    le_int32 holdCharIndex = getCharIndex(fromPosition,success);
-    le_uint32 holdAuxData = getAuxData(fromPosition,success);
-
-    if ( fromPosition < toPosition ) {
-        for ( le_int32 i = fromPosition ; i < toPosition ; i++ ) {
-            setGlyphID(i,getGlyphID(i+1,success),success);
-            setCharIndex(i,getCharIndex(i+1,success),success);
-            setAuxData(i,getAuxData(i+1,success),success);
-        }
-    } else {
-        for ( le_int32 i = toPosition ; i > fromPosition ; i-- ) {
-            setGlyphID(i,getGlyphID(i-1,success),success);
-            setCharIndex(i,getCharIndex(i-1,success),success);
-            setAuxData(i,getAuxData(i-1,success),success);
-
-        }
-    }
-
-    setGlyphID(toPosition,holdGlyph,success);
-    setCharIndex(toPosition,holdCharIndex,success);
-    setAuxData(toPosition,holdAuxData | marker,success);
-
-}
-
-// Glue code for existing stable API
-LEGlyphID *LEGlyphStorage::insertGlyphs(le_int32  atIndex, le_int32 insertCount)
-{
-    LEErrorCode ignored = LE_NO_LAYOUT_ERROR;
-    return insertGlyphs(atIndex, insertCount, ignored);
-}
-
-// FIXME: add error checking?
-LEGlyphID *LEGlyphStorage::insertGlyphs(le_int32  atIndex, le_int32 insertCount, LEErrorCode& success)
-{
-    return fInsertionList->insert(atIndex, insertCount, success);
-}
-
-le_int32 LEGlyphStorage::applyInsertions()
-{
-    le_int32 growAmount = fInsertionList->getGrowAmount();
-
-    if (growAmount == 0) {
-        return fGlyphCount;
-    }
-
-    le_int32 newGlyphCount = fGlyphCount + growAmount;
-
-    LEGlyphID *newGlyphs = (LEGlyphID *) LE_GROW_ARRAY(fGlyphs, newGlyphCount); 
-    if (newGlyphs == NULL) { 
-        // Could not grow the glyph array 
-        return fGlyphCount; 
-    } 
-    fGlyphs = newGlyphs; 
-
-    le_int32 *newCharIndices = (le_int32 *) LE_GROW_ARRAY(fCharIndices, newGlyphCount);
-    if (newCharIndices == NULL) { 
-        // Could not grow the glyph array 
-        return fGlyphCount; 
-    } 
-    fCharIndices = newCharIndices;
-
-    if (fAuxData != NULL) {    
-        le_uint32 *newAuxData = (le_uint32 *) LE_GROW_ARRAY(fAuxData, newGlyphCount); 
-        if (newAuxData == NULL) { 
-            // could not grow the aux data array 
-            return fGlyphCount; 
-        } 
-        fAuxData = (le_uint32 *)newAuxData;
-    }
-
-    fSrcIndex  = fGlyphCount - 1;
-    fDestIndex = newGlyphCount - 1;
-
-#if 0
-    // If the current position is at the end of the array
-    // update it to point to the end of the new array. The
-    // insertion callback will handle all other cases.
-    // FIXME: this is left over from GlyphIterator, but there's no easy
-    // way to implement this here... it seems that GlyphIterator doesn't
-    // really need it 'cause the insertions don't get  applied until after a
-    // complete pass over the glyphs, after which the iterator gets reset anyhow...
-    // probably better to just document that for LEGlyphStorage and GlyphIterator...
-    if (position == glyphCount) {
-        position = newGlyphCount;
-    }
-#endif
-
-    fInsertionList->applyInsertions(this);
-
-    fInsertionList->reset();
-
-    return fGlyphCount = newGlyphCount;
-}
-
-le_bool LEGlyphStorage::applyInsertion(le_int32 atPosition, le_int32 count, LEGlyphID newGlyphs[])
-{
-#if 0
-    // if the current position is within the block we're shifting
-    // it needs to be updated to the current glyph's
-    // new location.
-    // FIXME: this is left over from GlyphIterator, but there's no easy
-    // way to implement this here... it seems that GlyphIterator doesn't
-    // really need it 'cause the insertions don't get  applied until after a
-    // complete pass over the glyphs, after which the iterator gets reset anyhow...
-    // probably better to just document that for LEGlyphStorage and GlyphIterator...
-    if (position >= atPosition && position <= fSrcIndex) {
-        position += fDestIndex - fSrcIndex;
-    }
-#endif
-
-    if (fAuxData != NULL) {
-        le_int32 src = fSrcIndex, dest = fDestIndex;
-
-        while (src > atPosition) {
-            fAuxData[dest--] = fAuxData[src--];
-        }
-
-        for (le_int32 i = count - 1; i >= 0; i -= 1) {
-            fAuxData[dest--] = fAuxData[atPosition];
-        }
-    }
-
-    while (fSrcIndex > atPosition) {
-        fGlyphs[fDestIndex]      = fGlyphs[fSrcIndex];
-        fCharIndices[fDestIndex] = fCharIndices[fSrcIndex];
-
-        fDestIndex -= 1;
-        fSrcIndex  -= 1;
-    }
-
-    for (le_int32 i = count - 1; i >= 0; i -= 1) {
-        fGlyphs[fDestIndex]      = newGlyphs[i];
-        fCharIndices[fDestIndex] = fCharIndices[atPosition];
-
-        fDestIndex -= 1;
-    }
-
-    // the source glyph we're pointing at
-    // just got replaced by the insertion
-    fSrcIndex -= 1;
-
-    return FALSE;
-}
-
-U_NAMESPACE_END
-
diff --git a/icu4c/source/layout/LEGlyphStorage.h b/icu4c/source/layout/LEGlyphStorage.h
deleted file mode 100644 (file)
index 25a0d8a..0000000
+++ /dev/null
@@ -1,548 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- **********************************************************************
- *   Copyright (C) 1998-2014, International Business Machines
- *   Corporation and others.  All Rights Reserved.
- **********************************************************************
- */
-
-#ifndef __LEGLYPHSTORAGE_H
-#define __LEGLYPHSTORAGE_H
-
-#include "LETypes.h"
-#include "LEInsertionList.h"
-
-/**
- * \file 
- * \brief C++ API: This class encapsulates the per-glyph storage used by the ICU LayoutEngine.
- */
-
-U_NAMESPACE_BEGIN
-
-/**
- * This class encapsulates the per-glyph storage used by the ICU LayoutEngine.
- * For each glyph it holds the glyph ID, the index of the backing store character
- * which produced the glyph, the X and Y position of the glyph and an auxillary data
- * pointer.
- *
- * The storage is growable using the <code>LEInsertionList</code> class.
- *
- *
- * @see LEInsertionList.h
- *
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-class U_LAYOUT_API LEGlyphStorage : public UObject, protected LEInsertionCallback
-{
-private:
-    /**
-     * The number of entries in the per-glyph arrays.
-     *
-     * @internal
-     */
-    le_int32   fGlyphCount;
-
-    /**
-     * The glyph ID array.
-     *
-     * @internal
-     */
-    LEGlyphID *fGlyphs;
-    /**
-     * The char indices array.
-     *
-     * @internal
-     */
-    le_int32  *fCharIndices;
-
-    /**
-     * The glyph positions array.
-     *
-     * @internal
-     */
-    float     *fPositions;
-
-    /**
-     * The auxillary data array.
-     *
-     * @internal
-     */
-    le_uint32 *fAuxData;
-
-
-    /**
-     * The insertion list, used to grow the above arrays.
-     *
-     * @internal
-     */
-    LEInsertionList *fInsertionList;
-
-    /**
-     * The source index while growing the data arrays.
-     *
-     * @internal
-     */
-    le_int32 fSrcIndex;
-
-    /**
-     * The destination index used while growing the data arrays.
-     *
-     * @internal
-     */
-    le_int32 fDestIndex;
-
-protected:
-    /**
-     * This implements <code>LEInsertionCallback</code>. The <code>LEInsertionList</code>
-     * will call this method once for each insertion.
-     *
-     * @param atPosition the position of the insertion
-     * @param count the number of glyphs being inserted
-     * @param newGlyphs the address of the new glyph IDs
-     *
-     * @return <code>true</code> if <code>LEInsertionList</code> should stop
-     *         processing the insertion list after this insertion.
-     *
-     * @see LEInsertionList.h
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual le_bool applyInsertion(le_int32 atPosition, le_int32 count, LEGlyphID newGlyphs[]);
-
-public:
-
-    /**
-     * Allocates an empty <code>LEGlyphStorage</code> object. You must call
-     * <code>allocateGlyphArray, allocatePositions and allocateAuxData</code>
-     * to allocate the data.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    LEGlyphStorage();
-
-    /**
-     * The destructor. This will deallocate all of the arrays.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    ~LEGlyphStorage();
-
-    /**
-     * This method returns the number of glyphs in the glyph array.
-     *
-     * @return the number of glyphs in the glyph array
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    inline le_int32 getGlyphCount() const;
-
-    /**
-     * This method copies the glyph array into a caller supplied array.
-     * The caller must ensure that the array is large enough to hold all
-     * the glyphs.
-     *
-     * @param glyphs - the destiniation glyph array
-     * @param success - set to an error code if the operation fails
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    void getGlyphs(LEGlyphID glyphs[], LEErrorCode &success) const;
-
-    /**
-     * This method copies the glyph array into a caller supplied array,
-     * ORing in extra bits. (This functionality is needed by the JDK,
-     * which uses 32 bits pre glyph idex, with the high 16 bits encoding
-     * the composite font slot number)
-     *
-     * @param glyphs - the destination (32 bit) glyph array
-     * @param extraBits - this value will be ORed with each glyph index
-     * @param success - set to an error code if the operation fails
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    void getGlyphs(le_uint32 glyphs[], le_uint32 extraBits, LEErrorCode &success) const;
-
-    /**
-     * This method copies the character index array into a caller supplied array.
-     * The caller must ensure that the array is large enough to hold a
-     * character index for each glyph.
-     *
-     * @param charIndices - the destiniation character index array
-     * @param success - set to an error code if the operation fails
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    void getCharIndices(le_int32 charIndices[], LEErrorCode &success) const;
-
-    /**
-     * This method copies the character index array into a caller supplied array.
-     * The caller must ensure that the array is large enough to hold a
-     * character index for each glyph.
-     *
-     * @param charIndices - the destiniation character index array
-     * @param indexBase - an offset which will be added to each index
-     * @param success - set to an error code if the operation fails
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    void getCharIndices(le_int32 charIndices[], le_int32 indexBase, LEErrorCode &success) const;
-
-    /**
-     * This method copies the position array into a caller supplied array.
-     * The caller must ensure that the array is large enough to hold an
-     * X and Y position for each glyph, plus an extra X and Y for the
-     * advance of the last glyph.
-     *
-     * @param positions - the destiniation position array
-     * @param success - set to an error code if the operation fails
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    void getGlyphPositions(float positions[], LEErrorCode &success) const;
-
-    /**
-     * This method returns the X and Y position of the glyph at
-     * the given index.
-     *
-     * Input parameters:
-     * @param glyphIndex - the index of the glyph
-     *
-     * Output parameters:
-     * @param x - the glyph's X position
-     * @param y - the glyph's Y position
-     * @param success - set to an error code if the operation fails
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    void getGlyphPosition(le_int32 glyphIndex, float &x, float &y, LEErrorCode &success) const;
-
-    /**
-     * This method allocates the glyph array, the char indices array and the insertion list. You
-     * must call this method before using the object. This method also initializes the char indices
-     * array.
-     *
-     * @param initialGlyphCount the initial size of the glyph and char indices arrays.
-     * @param rightToLeft <code>true</code> if the original input text is right to left.
-     * @param success set to an error code if the storage cannot be allocated of if the initial
-     *        glyph count is not positive.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    void allocateGlyphArray(le_int32 initialGlyphCount, le_bool rightToLeft, LEErrorCode &success);
-
-    /**
-     * This method allocates the storage for the glyph positions. It allocates one extra X, Y
-     * position pair for the position just after the last glyph.
-     *
-     * @param success set to an error code if the positions array cannot be allocated.
-     *
-     * @return the number of X, Y position pairs allocated.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    le_int32 allocatePositions(LEErrorCode &success);
-
-    /**
-     * This method allocates the storage for the auxillary glyph data.
-     *
-     * @param success set to an error code if the aulillary data array cannot be allocated.
-     *
-     * @return the size of the auxillary data array.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    le_int32 allocateAuxData(LEErrorCode &success);
-
-    /**
-     * Copy the entire auxillary data array.
-     *
-     * @param auxData the auxillary data array will be copied to this address
-     * @param success set to an error code if the data cannot be copied
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    void getAuxData(le_uint32 auxData[], LEErrorCode &success) const;
-
-    /**
-     * Get the glyph ID for a particular glyph.
-     *
-     * @param glyphIndex the index into the glyph array
-     * @param success set to an error code if the glyph ID cannot be retrieved.
-     *
-     * @return the glyph ID
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    LEGlyphID getGlyphID(le_int32 glyphIndex, LEErrorCode &success) const;
-
-    /**
-     * Get the char index for a particular glyph.
-     *
-     * @param glyphIndex the index into the glyph array
-     * @param success set to an error code if the char index cannot be retrieved.
-     *
-     * @return the character index
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    le_int32  getCharIndex(le_int32 glyphIndex, LEErrorCode &success) const;
-
-
-    /**
-     * Get the auxillary data for a particular glyph.
-     *
-     * @param glyphIndex the index into the glyph array
-     * @param success set to an error code if the auxillary data cannot be retrieved.
-     *
-     * @return the auxillary data
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    le_uint32 getAuxData(le_int32 glyphIndex, LEErrorCode &success) const;
-
-    /**
-     * This operator allows direct access to the glyph array
-     * using the index operator.
-     *
-     * @param glyphIndex the index into the glyph array
-     *
-     * @return a reference to the given location in the glyph array
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    inline LEGlyphID &operator[](le_int32 glyphIndex) const;
-
-    /**
-     * Call this method to replace a single glyph in the glyph array
-     * with multiple glyphs. This method uses the <code>LEInsertionList</code>
-     * to do the insertion. It returns the address of storage where the new
-     * glyph IDs can be stored. They will not actually be inserted into the
-     * glyph array until <code>applyInsertions</code> is called.
-     *
-     * @param atIndex the index of the glyph to be replaced
-     * @param insertCount the number of glyphs to replace it with
-     * @param success set to an error code if the auxillary data cannot be retrieved.
-     *
-     * @return the address at which to store the replacement glyphs.
-     *
-     * @see LEInsertionList.h
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    LEGlyphID *insertGlyphs(le_int32 atIndex, le_int32 insertCount, LEErrorCode& success);
-
-    /**
-     * Call this method to replace a single glyph in the glyph array
-     * with multiple glyphs. This method uses the <code>LEInsertionList</code>
-     * to do the insertion. It returns the address of storage where the new
-     * glyph IDs can be stored. They will not actually be inserted into the
-     * glyph array until <code>applyInsertions</code> is called.
-     *
-     * Note: Don't use this version, use the other version of this function which has an error code.
-     *
-     * @param atIndex the index of the glyph to be replaced
-     * @param insertCount the number of glyphs to replace it with
-     *
-     * @return the address at which to store the replacement glyphs.
-     *
-     * @see LEInsertionList.h
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    LEGlyphID *insertGlyphs(le_int32 atIndex, le_int32 insertCount);
-
-    /**
-     * This method is used to reposition glyphs during Indic v2 processing.  It moves 
-     * all of the relevant glyph information ( glyph, indices, positions, and auxData ), 
-     * from the source position to the target position, and also allows for a marker bit
-     * to be set in the target glyph's auxData so that it won't be reprocessed later in the
-     * cycle.
-     *
-     * @param fromPosition - position of the glyph to be moved
-     * @param toPosition - target position of the glyph
-     * @param marker marker bit
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    void moveGlyph(le_int32 fromPosition, le_int32 toPosition, le_uint32 marker);
-
-    /**
-     * This method causes all of the glyph insertions recorded by
-     * <code>insertGlyphs</code> to be applied to the glyph array. The
-     * new slots in the char indices and the auxillary data arrays
-     * will be filled in with the values for the glyph being replaced.
-     *
-     * @return the new size of the glyph array
-     *
-     * @see LEInsertionList.h
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    le_int32 applyInsertions();
-
-    /**
-     * Set the glyph ID for a particular glyph.
-     *
-     * @param glyphIndex the index of the glyph
-     * @param glyphID the new glyph ID
-     * @param success will be set to an error code if the glyph ID cannot be set.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    void setGlyphID(le_int32 glyphIndex, LEGlyphID glyphID, LEErrorCode &success);
-
-    /**
-     * Set the char index for a particular glyph.
-     *
-     * @param glyphIndex the index of the glyph
-     * @param charIndex the new char index
-     * @param success will be set to an error code if the char index cannot be set.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    void setCharIndex(le_int32 glyphIndex, le_int32 charIndex, LEErrorCode &success);
-
-    /**
-     * Set the X, Y position for a particular glyph.
-     *
-     * @param glyphIndex the index of the glyph
-     * @param x the new X position
-     * @param y the new Y position
-     * @param success will be set to an error code if the position cannot be set.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    void setPosition(le_int32 glyphIndex, float x, float y, LEErrorCode &success);
-
-    /**
-     * Adjust the X, Y position for a particular glyph.
-     *
-     * @param glyphIndex the index of the glyph
-     * @param xAdjust the adjustment to the glyph's X position
-     * @param yAdjust the adjustment to the glyph's Y position
-     * @param success will be set to an error code if the glyph's position cannot be adjusted.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    void adjustPosition(le_int32 glyphIndex, float xAdjust, float yAdjust, LEErrorCode &success);
-
-    /**
-     * Set the auxillary data for a particular glyph.
-     *
-     * @param glyphIndex the index of the glyph
-     * @param auxData the new auxillary data
-     * @param success will be set to an error code if the auxillary data cannot be set.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    void setAuxData(le_int32 glyphIndex, le_uint32 auxData, LEErrorCode &success);
-
-    /**
-     * Delete the glyph array and replace it with the one
-     * in <code>from</code>. Set the glyph array pointer
-     * in <code>from</code> to <code>NULL</code>.
-     *
-     * @param from the <code>LEGlyphStorage</code> object from which
-     *             to get the new glyph array.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    void adoptGlyphArray(LEGlyphStorage &from);
-
-    /**
-     * Delete the char indices array and replace it with the one
-     * in <code>from</code>. Set the char indices array pointer
-     * in <code>from</code> to <code>NULL</code>.
-     *
-     * @param from the <code>LEGlyphStorage</code> object from which
-     *             to get the new char indices array.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    void adoptCharIndicesArray(LEGlyphStorage &from);
-
-    /**
-     * Delete the position array and replace it with the one
-     * in <code>from</code>. Set the position array pointer
-     * in <code>from</code> to <code>NULL</code>.
-     *
-     * @param from the <code>LEGlyphStorage</code> object from which
-     *             to get the new position array.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    void adoptPositionArray(LEGlyphStorage &from);
-
-    /**
-     * Delete the auxillary data array and replace it with the one
-     * in <code>from</code>. Set the auxillary data array pointer
-     * in <code>from</code> to <code>NULL</code>.
-     *
-     * @param from the <code>LEGlyphStorage</code> object from which
-     *             to get the new auxillary data array.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    void adoptAuxDataArray(LEGlyphStorage &from);
-
-    /**
-     * Change the glyph count of this object to be the same
-     * as the one in <code>from</code>.
-     *
-     * @param from the <code>LEGlyphStorage</code> object from which
-     *             to get the new glyph count.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    void adoptGlyphCount(LEGlyphStorage &from);
-
-    /**
-     * Change the glyph count of this object to the given value.
-     *
-     * @param newGlyphCount the new glyph count.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    void adoptGlyphCount(le_int32 newGlyphCount);
-
-    /**
-     * This method frees the glyph, character index, position  and
-     * auxillary data arrays so that the LayoutEngine can be reused
-     * to layout a different characer array. (This method is also called
-     * by the destructor)
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    void reset();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    static UClassID getStaticClassID();
-};
-
-inline le_int32 LEGlyphStorage::getGlyphCount() const
-{
-    return fGlyphCount;
-}
-
-inline LEGlyphID &LEGlyphStorage::operator[](le_int32 glyphIndex) const
-{
-    return fGlyphs[glyphIndex];
-}
-
-
-U_NAMESPACE_END
-#endif
-
diff --git a/icu4c/source/layout/LEInsertionList.cpp b/icu4c/source/layout/LEInsertionList.cpp
deleted file mode 100644 (file)
index 4e8a119..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- **********************************************************************
- *   Copyright (C) 1998-2008, International Business Machines
- *   Corporation and others.  All Rights Reserved.
- **********************************************************************
- */
-
-#include "LETypes.h"
-#include "LEInsertionList.h"
-
-U_NAMESPACE_BEGIN
-
-#define ANY_NUMBER 1
-
-struct InsertionRecord
-{
-    InsertionRecord *next;
-    le_int32 position;
-    le_int32 count;
-    LEGlyphID glyphs[ANY_NUMBER];
-};
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LEInsertionList)
-
-LEInsertionList::LEInsertionList(le_bool rightToLeft)
-: head(NULL), tail(NULL), growAmount(0), append(rightToLeft)
-{
-    tail = (InsertionRecord *) &head;
-}
-
-LEInsertionList::~LEInsertionList()
-{
-    reset();
-}
-
-void LEInsertionList::reset()
-{
-    while (head != NULL) {
-        InsertionRecord *record = head;
-
-        head = head->next;
-        LE_DELETE_ARRAY(record);
-    }
-
-    tail = (InsertionRecord *) &head;
-    growAmount = 0;
-}
-
-le_int32 LEInsertionList::getGrowAmount()
-{
-    return growAmount;
-}
-
-LEGlyphID *LEInsertionList::insert(le_int32 position, le_int32 count, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    InsertionRecord *insertion = (InsertionRecord *) LE_NEW_ARRAY(char, sizeof(InsertionRecord) + (count - ANY_NUMBER) * sizeof (LEGlyphID));
-    if (insertion == NULL) { 
-        success = LE_MEMORY_ALLOCATION_ERROR;
-        return 0;
-    }
-
-    insertion->position = position;
-    insertion->count = count;
-
-    growAmount += count - 1;
-
-    if (append) {
-        // insert on end of list...
-        insertion->next = NULL;
-        tail->next = insertion;
-        tail = insertion;
-    } else {
-        // insert on front of list...
-        insertion->next = head;
-        head = insertion;
-    }
-
-    return insertion->glyphs;
-}
-
-le_bool LEInsertionList::applyInsertions(LEInsertionCallback *callback)
-{
-    for (InsertionRecord *rec = head; rec != NULL; rec = rec->next) {
-        if (callback->applyInsertion(rec->position, rec->count, rec->glyphs)) {
-            return TRUE;
-        }
-    }
-
-    return FALSE;
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/LEInsertionList.h b/icu4c/source/layout/LEInsertionList.h
deleted file mode 100644 (file)
index 2a1a617..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- **********************************************************************
- *   Copyright (C) 1998-2014, International Business Machines
- *   Corporation and others.  All Rights Reserved.
- **********************************************************************
- */
-
-#ifndef __LEINSERTIONLIST_H
-#define __LEINSERTIONLIST_H
-
-#include "LETypes.h"
-
-U_NAMESPACE_BEGIN
-
-struct InsertionRecord;
-
-#ifndef U_HIDE_INTERNAL_API
-/**
- * This class encapsulates the callback used by <code>LEInsertionList</code>
- * to apply an insertion from the insertion list.
- *
- * @internal
- */
-class U_LAYOUT_API LEInsertionCallback
-{
-public:
-    /**
-     * This method will be called by <code>LEInsertionList::applyInsertions</code> for each
-     * entry on the insertion list.
-     *
-     * @param atPosition the position of the insertion
-     * @param count the number of glyphs to insert
-     * @param newGlyphs the address of the glyphs to insert
-     *
-     * @return <code>TRUE</code> if <code>LEInsertions::applyInsertions</code> should
-     *         stop after applying this insertion.
-     *
-     * @internal
-     */
-    virtual le_bool applyInsertion(le_int32 atPosition, le_int32 count, LEGlyphID newGlyphs[]) = 0;
-    
-    /**
-     * The destructor
-     */
-     virtual ~LEInsertionCallback();
-};
-
-/**
- * This class is used to keep track of insertions to an array of
- * <code>LEGlyphIDs</code>. The insertions are kept on a linked
- * list of <code>InsertionRecords</code> so that the glyph array
- * doesn't have to be grown for each insertion. The insertions are
- * stored on the list from leftmost to rightmost to make it easier
- * to do the insertions.
- *
- * The insertions are applied to the array by calling the
- * <code>applyInsertions</code> method, which calls a client
- * supplied <code>LEInsertionCallback</code> object to actually
- * apply the individual insertions.
- *
- * @internal
- */
-class LEInsertionList : public UObject
-{
-public:
-    /**
-     * Construct an empty insertion list.
-     *
-     * @param rightToLeft <code>TRUE</code> if the glyphs are stored
-     *                    in the array in right to left order.
-     *
-     * @internal
-     */
-    LEInsertionList(le_bool rightToLeft);
-
-    /**
-     * The destructor.
-     */
-    ~LEInsertionList();
-
-    /**
-     * Add an entry to the insertion list.
-     *
-     * @param position the glyph at this position in the array will be
-     *                 replaced by the new glyphs.
-     * @param count the number of new glyphs
-     * @param success set to an error code if the auxillary data cannot be retrieved.
-     *
-     * @return the address of an array in which to store the new glyphs. This will
-     *         <em>not</em> be in the glyph array.
-     *
-     * @internal
-     */
-    LEGlyphID *insert(le_int32 position, le_int32 count, LEErrorCode &success);
-
-    /**
-     * Return the number of new glyphs that have been inserted.
-     *
-     * @return the number of new glyphs which have been inserted
-     *
-     * @internal
-     */
-    le_int32 getGrowAmount();
-
-    /**
-     * Call the <code>LEInsertionCallback</code> once for each
-     * entry on the insertion list.
-     *
-     * @param callback the <code>LEInsertionCallback</code> to call for each insertion.
-     *
-     * @return <code>TRUE</code> if <code>callback</code> returned <code>TRUE</code> to
-     *         terminate the insertion list processing.
-     *
-     * @internal
-     */
-    le_bool applyInsertions(LEInsertionCallback *callback);
-
-    /**
-     * Empty the insertion list and free all associated
-     * storage.
-     *
-     * @internal
-     */
-    void reset();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    static UClassID getStaticClassID();
-
-private:
-
-    /**
-     * The head of the insertion list.
-     *
-     * @internal
-     */
-    InsertionRecord *head;
-
-    /**
-     * The tail of the insertion list.
-     *
-     * @internal
-     */
-    InsertionRecord *tail;
-
-    /**
-     * The total number of new glyphs on the insertion list.
-     *
-     * @internal
-     */
-    le_int32 growAmount;
-
-    /**
-     * Set to <code>TRUE</code> if the glyphs are in right
-     * to left order. Since we want the rightmost insertion
-     * to be first on the list, we need to append the
-     * insertions in this case. Otherwise they're prepended.
-     *
-     * @internal
-     */
-    le_bool  append;
-};
-#endif  /* U_HIDE_INTERNAL_API */
-
-U_NAMESPACE_END
-#endif
-
diff --git a/icu4c/source/layout/LELanguages.h b/icu4c/source/layout/LELanguages.h
deleted file mode 100644 (file)
index 544bbed..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2016. All Rights Reserved.
- *
- * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS
- * YOU REALLY KNOW WHAT YOU'RE DOING.
- *
- * Generated on: 05/10/2016 11:13:24 AM PDT
- */
-
-#ifndef __LELANGUAGES_H
-#define __LELANGUAGES_H
-
-#include "LETypes.h"
-
-/**
- * \file
- * \brief C++ API: List of language codes for LayoutEngine
- */
-
-U_NAMESPACE_BEGIN
-
-/**
- * A provisional list of language codes. For now,
- * this is just a list of languages which the LayoutEngine
- * supports.
- *
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-
-enum LanguageCodes {
-    nullLanguageCode =  0,
-    araLanguageCode =  1,
-    asmLanguageCode =  2,
-    benLanguageCode =  3,
-    farLanguageCode =  4,
-    gujLanguageCode =  5,
-    hinLanguageCode =  6,
-    iwrLanguageCode =  7,
-    jiiLanguageCode =  8,
-    janLanguageCode =  9,
-    kanLanguageCode = 10,
-    kokLanguageCode = 11,
-    korLanguageCode = 12,
-    kshLanguageCode = 13,
-    malLanguageCode = 14,
-    marLanguageCode = 15,
-    mlrLanguageCode = 16,
-    mniLanguageCode = 17,
-    oriLanguageCode = 18,
-    sanLanguageCode = 19,
-    sndLanguageCode = 20,
-    snhLanguageCode = 21,
-    syrLanguageCode = 22,
-    tamLanguageCode = 23,
-    telLanguageCode = 24,
-    thaLanguageCode = 25,
-    urdLanguageCode = 26,
-    zhpLanguageCode = 27,
-    zhsLanguageCode = 28,
-    zhtLanguageCode = 29,
-    afkLanguageCode = 30,
-    belLanguageCode = 31,
-    bgrLanguageCode = 32,
-    catLanguageCode = 33,
-    cheLanguageCode = 34,
-    copLanguageCode = 35,
-    csyLanguageCode = 36,
-    danLanguageCode = 37,
-    deuLanguageCode = 38,
-    dznLanguageCode = 39,
-    ellLanguageCode = 40,
-    engLanguageCode = 41,
-    espLanguageCode = 42,
-    etiLanguageCode = 43,
-    euqLanguageCode = 44,
-    finLanguageCode = 45,
-    fraLanguageCode = 46,
-    gaeLanguageCode = 47,
-    hauLanguageCode = 48,
-    hrvLanguageCode = 49,
-    hunLanguageCode = 50,
-    hyeLanguageCode = 51,
-    indLanguageCode = 52,
-    itaLanguageCode = 53,
-    khmLanguageCode = 54,
-    mngLanguageCode = 55,
-    mtsLanguageCode = 56,
-    nepLanguageCode = 57,
-    nldLanguageCode = 58,
-    pasLanguageCode = 59,
-    plkLanguageCode = 60,
-    ptgLanguageCode = 61,
-    romLanguageCode = 62,
-    rusLanguageCode = 63,
-    skyLanguageCode = 64,
-    slvLanguageCode = 65,
-    sqiLanguageCode = 66,
-    srbLanguageCode = 67,
-    sveLanguageCode = 68,
-    tibLanguageCode = 69,
-    trkLanguageCode = 70,
-    welLanguageCode = 71,
-
-    languageCodeCount = 72
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/LEScripts.h b/icu4c/source/layout/LEScripts.h
deleted file mode 100644 (file)
index 0a25853..0000000
+++ /dev/null
@@ -1,214 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2016. All Rights Reserved.
- *
- * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS
- * YOU REALLY KNOW WHAT YOU'RE DOING.
- *
- * Generated on: 05/10/2016 11:13:24 AM PDT
- */
-
-#ifndef __LESCRIPTS_H
-#define __LESCRIPTS_H
-
-#include "LETypes.h"
-
-/**
- * \file
- * \brief C++ API: Constants for Unicode script values
- */
-
-U_NAMESPACE_BEGIN
-
-/**
- * Constants for Unicode script values, generated using
- * ICU4J's <code>UScript</code> class.
- *
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-
-enum ScriptCodes {
-    zyyyScriptCode =  0,
-    zinhScriptCode =  1,
-    qaaiScriptCode = zinhScriptCode,  /* manually added alias, for API stability */
-    arabScriptCode =  2,
-    armnScriptCode =  3,
-    bengScriptCode =  4,
-    bopoScriptCode =  5,
-    cherScriptCode =  6,
-    coptScriptCode =  7,
-    cyrlScriptCode =  8,
-    dsrtScriptCode =  9,
-    devaScriptCode = 10,
-    ethiScriptCode = 11,
-    georScriptCode = 12,
-    gothScriptCode = 13,
-    grekScriptCode = 14,
-    gujrScriptCode = 15,
-    guruScriptCode = 16,
-    haniScriptCode = 17,
-    hangScriptCode = 18,
-    hebrScriptCode = 19,
-    hiraScriptCode = 20,
-    kndaScriptCode = 21,
-    kanaScriptCode = 22,
-    khmrScriptCode = 23,
-    laooScriptCode = 24,
-    latnScriptCode = 25,
-    mlymScriptCode = 26,
-    mongScriptCode = 27,
-    mymrScriptCode = 28,
-    ogamScriptCode = 29,
-    italScriptCode = 30,
-    oryaScriptCode = 31,
-    runrScriptCode = 32,
-    sinhScriptCode = 33,
-    syrcScriptCode = 34,
-    tamlScriptCode = 35,
-    teluScriptCode = 36,
-    thaaScriptCode = 37,
-    thaiScriptCode = 38,
-    tibtScriptCode = 39,
-    cansScriptCode = 40,
-    yiiiScriptCode = 41,
-    tglgScriptCode = 42,
-    hanoScriptCode = 43,
-    buhdScriptCode = 44,
-    tagbScriptCode = 45,
-    braiScriptCode = 46,
-    cprtScriptCode = 47,
-    limbScriptCode = 48,
-    linbScriptCode = 49,
-    osmaScriptCode = 50,
-    shawScriptCode = 51,
-    taleScriptCode = 52,
-    ugarScriptCode = 53,
-    hrktScriptCode = 54,
-    bugiScriptCode = 55,
-    glagScriptCode = 56,
-    kharScriptCode = 57,
-    syloScriptCode = 58,
-    taluScriptCode = 59,
-    tfngScriptCode = 60,
-    xpeoScriptCode = 61,
-    baliScriptCode = 62,
-    batkScriptCode = 63,
-    blisScriptCode = 64,
-    brahScriptCode = 65,
-    chamScriptCode = 66,
-    cirtScriptCode = 67,
-    cyrsScriptCode = 68,
-    egydScriptCode = 69,
-    egyhScriptCode = 70,
-    egypScriptCode = 71,
-    geokScriptCode = 72,
-    hansScriptCode = 73,
-    hantScriptCode = 74,
-    hmngScriptCode = 75,
-    hungScriptCode = 76,
-    indsScriptCode = 77,
-    javaScriptCode = 78,
-    kaliScriptCode = 79,
-    latfScriptCode = 80,
-    latgScriptCode = 81,
-    lepcScriptCode = 82,
-    linaScriptCode = 83,
-    mandScriptCode = 84,
-    mayaScriptCode = 85,
-    meroScriptCode = 86,
-    nkooScriptCode = 87,
-    orkhScriptCode = 88,
-    permScriptCode = 89,
-    phagScriptCode = 90,
-    phnxScriptCode = 91,
-    plrdScriptCode = 92,
-    roroScriptCode = 93,
-    saraScriptCode = 94,
-    syreScriptCode = 95,
-    syrjScriptCode = 96,
-    syrnScriptCode = 97,
-    tengScriptCode = 98,
-    vaiiScriptCode = 99,
-    vispScriptCode = 100,
-    xsuxScriptCode = 101,
-    zxxxScriptCode = 102,
-    zzzzScriptCode = 103,
-    cariScriptCode = 104,
-    jpanScriptCode = 105,
-    lanaScriptCode = 106,
-    lyciScriptCode = 107,
-    lydiScriptCode = 108,
-    olckScriptCode = 109,
-    rjngScriptCode = 110,
-    saurScriptCode = 111,
-    sgnwScriptCode = 112,
-    sundScriptCode = 113,
-    moonScriptCode = 114,
-    mteiScriptCode = 115,
-    armiScriptCode = 116,
-    avstScriptCode = 117,
-    cakmScriptCode = 118,
-    koreScriptCode = 119,
-    kthiScriptCode = 120,
-    maniScriptCode = 121,
-    phliScriptCode = 122,
-    phlpScriptCode = 123,
-    phlvScriptCode = 124,
-    prtiScriptCode = 125,
-    samrScriptCode = 126,
-    tavtScriptCode = 127,
-    zmthScriptCode = 128,
-    zsymScriptCode = 129,
-    bamuScriptCode = 130,
-    lisuScriptCode = 131,
-    nkgbScriptCode = 132,
-    sarbScriptCode = 133,
-    bassScriptCode = 134,
-    duplScriptCode = 135,
-    elbaScriptCode = 136,
-    granScriptCode = 137,
-    kpelScriptCode = 138,
-    lomaScriptCode = 139,
-    mendScriptCode = 140,
-    mercScriptCode = 141,
-    narbScriptCode = 142,
-    nbatScriptCode = 143,
-    palmScriptCode = 144,
-    sindScriptCode = 145,
-    waraScriptCode = 146,
-    afakScriptCode = 147,
-    jurcScriptCode = 148,
-    mrooScriptCode = 149,
-    nshuScriptCode = 150,
-    shrdScriptCode = 151,
-    soraScriptCode = 152,
-    takrScriptCode = 153,
-    tangScriptCode = 154,
-    woleScriptCode = 155,
-    hluwScriptCode = 156,
-    khojScriptCode = 157,
-    tirhScriptCode = 158,
-    aghbScriptCode = 159,
-    mahjScriptCode = 160,
-    ahomScriptCode = 161,
-    hatrScriptCode = 162,
-    modiScriptCode = 163,
-    multScriptCode = 164,
-    paucScriptCode = 165,
-    siddScriptCode = 166,
-    adlmScriptCode = 167,
-    bhksScriptCode = 168,
-    marcScriptCode = 169,
-    newaScriptCode = 170,
-    osgeScriptCode = 171,
-    hanbScriptCode = 172,
-    jamoScriptCode = 173,
-    zsyeScriptCode = 174,
-
-    scriptCodeCount = 175
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/LESwaps.h b/icu4c/source/layout/LESwaps.h
deleted file mode 100644 (file)
index fd99b3b..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2014 - All Rights Reserved
- *
- */
-
-#ifndef __LESWAPS_H
-#define __LESWAPS_H
-
-#include "LETypes.h"
-
-/**
- * \file 
- * \brief C++ API: Endian independent access to data for LayoutEngine
- */
-
-U_NAMESPACE_BEGIN
-
-/**
- * A convenience macro which invokes the swapWord member function
- * from a concise call.
- *
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-#define SWAPW(value) LESwaps::swapWord((le_uint16)(value))
-
-/**
- * A convenience macro which invokes the swapLong member function
- * from a concise call.
- *
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-#define SWAPL(value) LESwaps::swapLong((le_uint32)(value))
-
-/**
- * This class is used to access data which stored in big endian order
- * regardless of the conventions of the platform.
- *
- * All methods are static and inline in an attempt to induce the compiler
- * to do most of the calculations at compile time.
- *
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-class U_LAYOUT_API LESwaps /* not : public UObject because all methods are static */ {
-public:
-
-    /**
-     * Reads a big-endian 16-bit word and returns a native-endian value.
-     * No-op on a big-endian platform, byte-swaps on a little-endian platform.
-     *
-     * @param value - the word to be byte swapped
-     *
-     * @return the byte swapped word
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    static le_uint16 swapWord(le_uint16 value)
-    {
-#if (defined(U_IS_BIG_ENDIAN) && U_IS_BIG_ENDIAN) || \
-    (defined(BYTE_ORDER) && defined(BIG_ENDIAN) && (BYTE_ORDER == BIG_ENDIAN)) || \
-    defined(__BIG_ENDIAN__)
-        // Fastpath when we know that the platform is big-endian.
-        return value;
-#else
-        // Reads a big-endian value on any platform.
-        const le_uint8 *p = reinterpret_cast<const le_uint8 *>(&value);
-        return (le_uint16)((p[0] << 8) | p[1]);
-#endif
-    };
-
-    /**
-     * Reads a big-endian 32-bit word and returns a native-endian value.
-     * No-op on a big-endian platform, byte-swaps on a little-endian platform.
-     *
-     * @param value - the long to be byte swapped
-     *
-     * @return the byte swapped long
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    static le_uint32 swapLong(le_uint32 value)
-    {
-#if (defined(U_IS_BIG_ENDIAN) && U_IS_BIG_ENDIAN) || \
-    (defined(BYTE_ORDER) && defined(BIG_ENDIAN) && (BYTE_ORDER == BIG_ENDIAN)) || \
-    defined(__BIG_ENDIAN__)
-        // Fastpath when we know that the platform is big-endian.
-        return value;
-#else
-        // Reads a big-endian value on any platform.
-        const le_uint8 *p = reinterpret_cast<const le_uint8 *>(&value);
-        return (le_uint32)((p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3]);
-#endif
-    };
-
-private:
-    LESwaps() {} // private - forbid instantiation
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/LETableReference.h b/icu4c/source/layout/LETableReference.h
deleted file mode 100644 (file)
index 1d4253d..0000000
+++ /dev/null
@@ -1,437 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- * -*- c++ -*-
- *
- * (C) Copyright IBM Corp. and others 2015 - All Rights Reserved
- *
- * Range checking
- *
- */
-
-#ifndef __LETABLEREFERENCE_H
-#define __LETABLEREFERENCE_H
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-
-
-#define kQuestionmarkTableTag  0x3F3F3F3FUL
-#define kTildeTableTag  0x7e7e7e7eUL
-#ifdef __cplusplus
-
-// internal - interface for range checking
-U_NAMESPACE_BEGIN
-
-#if LE_ASSERT_BAD_FONT
-class LETableReference; // fwd
-/**
- *  defined in OpenTypeUtilities.cpp
- * @internal
- */
-extern void _debug_LETableReference(const char *f, int l, const char *msg, const LETableReference *what, const void *ptr, size_t len);
-
-#define LE_DEBUG_TR(x) _debug_LETableReference(__FILE__, __LINE__, x, this, NULL, 0);
-#define LE_DEBUG_TR3(x,y,z) _debug_LETableReference(__FILE__, __LINE__, x, this, (const void*)y, (size_t)z);
-#if 0
-#define LE_TRACE_TR(x) _debug_LETableReference(__FILE__, __LINE__, x, this, NULL, 0);
-#else
-#define LE_TRACE_TR(x)
-#endif
-
-#else
-#define LE_DEBUG_TR(x)
-#define LE_DEBUG_TR3(x,y,z)
-#define LE_TRACE_TR(x)
-#endif
-
-/**
- * @internal
- */
-class LETableReference {
-public:
-/**
- * @internal
- * Construct from a specific tag
- */
-  LETableReference(const LEFontInstance* font, LETag tableTag, LEErrorCode &success) :
-    fFont(font), fTag(tableTag), fParent(NULL), fStart(NULL),fLength(LE_UINTPTR_MAX) {
-      loadTable(success);
-    LE_TRACE_TR("INFO: new table load")
-  }
-
-  LETableReference(const LETableReference &parent, LEErrorCode &success) : fFont(parent.fFont), fTag(parent.fTag), fParent(&parent), fStart(parent.fStart), fLength(parent.fLength) {
-    if(LE_FAILURE(success)) {
-      clear();
-    }
-    LE_TRACE_TR("INFO: new clone")
-  }
-
-   LETableReference(const le_uint8* data, size_t length = LE_UINTPTR_MAX) :
-    fFont(NULL), fTag(kQuestionmarkTableTag), fParent(NULL), fStart(data), fLength(length) {
-    LE_TRACE_TR("INFO: new raw")
-  }
-  LETableReference() :
-    fFont(NULL), fTag(kQuestionmarkTableTag), fParent(NULL), fStart(NULL), fLength(0) {
-    LE_TRACE_TR("INFO: new empty")
-  }
-
-  ~LETableReference() {
-    fTag=kTildeTableTag;
-    LE_TRACE_TR("INFO: new dtor")
-  }
-
-  /**
-   * @internal
-   * @param length  if LE_UINTPTR_MAX means "whole table"
-   * subset
-   */
-  LETableReference(const LETableReference &parent, size_t offset, size_t length,
-                   LEErrorCode &err) :
-    fFont(parent.fFont), fTag(parent.fTag), fParent(&parent),
-    fStart((parent.fStart)+offset), fLength(length) {
-    if(LE_SUCCESS(err)) {
-      if(isEmpty()) {
-        //err = LE_MISSING_FONT_TABLE_ERROR;
-        clear(); // it's just empty. Not an error.
-      } else if(offset >= fParent->fLength) {
-        LE_DEBUG_TR3("offset out of range: (%p) +%d", NULL, offset);
-        err = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-        clear();
-      } else {
-        if(fLength == LE_UINTPTR_MAX &&
-           fParent->fLength != LE_UINTPTR_MAX) {
-          fLength = (fParent->fLength) - offset; // decrement length as base address is incremented
-        }
-        if(fLength != LE_UINTPTR_MAX) {  // if we have bounds:
-          if(offset+fLength > fParent->fLength) {
-            LE_DEBUG_TR3("offset+fLength out of range: (%p) +%d", NULL, offset+fLength);
-            err = LE_INDEX_OUT_OF_BOUNDS_ERROR; // exceeded
-            clear();
-          }
-        }
-      }
-    } else {
-      clear();
-    }
-    LE_TRACE_TR("INFO: new subset")
-  }
-
-  const void* getAlias() const { return (const void*)fStart; }
-  const void* getAliasRAW() const { LE_DEBUG_TR("getAliasRAW()"); return (const void*)fStart; }
-  le_bool isEmpty() const { return fStart==NULL || fLength==0; }
-  le_bool isValid() const { return !isEmpty(); }
-  le_bool hasBounds() const { return fLength!=LE_UINTPTR_MAX; }
-  void clear() { fLength=0; fStart=NULL; }
-  size_t getLength() const { return fLength; }
-  const LEFontInstance* getFont() const { return fFont; }
-  LETag getTag() const { return fTag; }
-  const LETableReference* getParent() const { return fParent; }
-
-  void addOffset(size_t offset, LEErrorCode &success) {
-    if(hasBounds()) {
-      if(offset > fLength) {
-        LE_DEBUG_TR("addOffset off end");
-        success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-        return;
-      } else {
-        fLength -= offset;
-      }
-    }
-    fStart += offset;
-  }
-
-  size_t ptrToOffset(const void *atPtr, LEErrorCode &success) const {
-    if(atPtr==NULL) return 0;
-    if(LE_FAILURE(success)) return LE_UINTPTR_MAX;
-    if((atPtr < fStart) ||
-       (hasBounds() && (atPtr > fStart+fLength))) {
-      LE_DEBUG_TR3("ptrToOffset args out of range: %p", atPtr, 0);
-      success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-      return LE_UINTPTR_MAX;
-    }
-    return ((const le_uint8*)atPtr)-fStart;
-  }
-
-  /**
-   * Clamp down the length, for range checking.
-   */
-  size_t contractLength(size_t newLength) {
-    if(fLength!=LE_UINTPTR_MAX&&newLength>0&&newLength<=fLength) {
-      fLength = newLength;
-    }
-    return fLength;
-  }
-
-  /**
-   * Throw an error if offset+length off end
-   */
-public:
-  size_t verifyLength(size_t offset, size_t length, LEErrorCode &success) {
-    if(isValid()&&
-       LE_SUCCESS(success) &&
-       fLength!=LE_UINTPTR_MAX && length!=LE_UINTPTR_MAX && offset!=LE_UINTPTR_MAX &&
-       (offset+length)>fLength) {
-      LE_DEBUG_TR3("verifyLength failed (%p) %d",NULL, offset+length);
-      success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-#if LE_ASSERT_BAD_FONT
-      fprintf(stderr, "offset=%lu, len=%lu, would be at %p, (%lu) off end. End at %p\n", offset,length, fStart+offset+length, (offset+length-fLength), (offset+length-fLength)+fStart);
-#endif
-    }
-    return fLength;
-  }
-
-  /**
-  * Throw an error if size*count overflows
-  */
-  size_t verifyLength(size_t offset, size_t size, le_uint32 count, LEErrorCode &success) {
-    if(count!=0 && size>LE_UINT32_MAX/count) {
-      LE_DEBUG_TR3("verifyLength failed size=%u, count=%u", size, count);
-      success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-      return 0;
-    }
-    return verifyLength(offset, size*count, success);
-  }
-
-  /**
-   * Change parent link to another
-   */
-  LETableReference &reparent(const LETableReference &base) {
-    fParent = &base;
-    return *this;
-  }
-
-  /**
-   * remove parent link. Factory functions should do this.
-   */
-  void orphan(void) {
-    fParent=NULL;
-  }
-
-protected:
-  const LEFontInstance* fFont;
-  LETag  fTag;
-  const LETableReference *fParent;
-  const le_uint8 *fStart; // keep as 8 bit internally, for pointer math
-  size_t fLength;
-
-  void loadTable(LEErrorCode &success) {
-    if(LE_SUCCESS(success)) {
-      fStart = (const le_uint8*)(fFont->getFontTable(fTag, fLength)); // note - a null table is not an error.
-    }
-  }
-
-  void setRaw(const void *data, size_t length = LE_UINTPTR_MAX) {
-    fFont = NULL;
-    fTag = kQuestionmarkTableTag;
-    fParent = NULL;
-    fStart = (const le_uint8*)data;
-    fLength = length;
-  }
-};
-
-
-template<class T>
-class LETableVarSizer {
- public:
-  inline static size_t getSize();
-};
-
-// base definition- could override for adjustments
-template<class T> inline
-size_t LETableVarSizer<T>::getSize() {
-  return sizeof(T);
-}
-
-/**
- * \def LE_VAR_ARRAY
- * @param x Type (T)
- * @param y some member that is of length ANY_NUMBER
- * Call this after defining a class, for example:
- *   LE_VAR_ARRAY(FeatureListTable,featureRecordArray)
- * this is roughly equivalent to:
- *   template<> inline size_t LETableVarSizer<FeatureListTable>::getSize() { return sizeof(FeatureListTable) - (sizeof(le_uint16)*ANY_NUMBER); }
- * it's a specialization that informs the LETableReference subclasses to NOT include the variable array in the size.
- * dereferencing NULL is valid here because we never actually dereference it, just inside sizeof.
- */
-#define LE_VAR_ARRAY(x,y) template<> inline size_t LETableVarSizer<x>::getSize() { return sizeof(x) - (sizeof(((const x*)0)->y)); }
-/**
- * \def LE_CORRECT_SIZE
- * @param x type (T)
- * @param y fixed size for T
- */
-#define LE_CORRECT_SIZE(x,y) template<> inline size_t LETableVarSizer<x>::getSize() { return y; }
-
-/**
- * Open a new entry based on an existing table
- */
-
-/**
- * \def LE_UNBOUNDED_ARRAY
- * define an array with no *known* bound. Will trim to available size.
- * @internal
- */
-#define LE_UNBOUNDED_ARRAY LE_UINT32_MAX
-
-template<class T>
-class LEReferenceToArrayOf : public LETableReference {
-public:
-  LEReferenceToArrayOf(const LETableReference &parent, LEErrorCode &success, size_t offset, le_uint32 count)
-    : LETableReference(parent, offset, LE_UINTPTR_MAX, success), fCount(count) {
-    LE_TRACE_TR("INFO: new RTAO by offset")
-    if(LE_SUCCESS(success)) {
-      if(count == LE_UNBOUNDED_ARRAY) { // not a known length
-        count = getLength()/LETableVarSizer<T>::getSize(); // fit to max size
-      }
-      LETableReference::verifyLength(0, LETableVarSizer<T>::getSize(), fCount, success);
-    }
-    if(LE_FAILURE(success)) {
-      fCount=0;
-      clear();
-    }
-  }
-
-  LEReferenceToArrayOf(const LETableReference &parent, LEErrorCode &success, const T* array, le_uint32 count)
-    : LETableReference(parent, parent.ptrToOffset(array, success), LE_UINTPTR_MAX, success), fCount(count) {
-LE_TRACE_TR("INFO: new RTAO")
-    if(LE_SUCCESS(success)) {
-      if(count == LE_UNBOUNDED_ARRAY) { // not a known length
-        count = getLength()/LETableVarSizer<T>::getSize(); // fit to max size
-      }
-      LETableReference::verifyLength(0, LETableVarSizer<T>::getSize(), fCount, success);
-    }
-    if(LE_FAILURE(success)) clear();
-  }
- LEReferenceToArrayOf(const LETableReference &parent, LEErrorCode &success, const T* array, size_t offset, le_uint32 count)
-   : LETableReference(parent, parent.ptrToOffset(array, success)+offset, LE_UINTPTR_MAX, success), fCount(count) {
-LE_TRACE_TR("INFO: new RTAO")
-    if(LE_SUCCESS(success)) {
-      if(count == LE_UNBOUNDED_ARRAY) { // not a known length
-        count = getLength()/LETableVarSizer<T>::getSize(); // fit to max size
-      }
-      LETableReference::verifyLength(0, LETableVarSizer<T>::getSize(), fCount, success);
-    }
-    if(LE_FAILURE(success)) clear();
-  }
-
- LEReferenceToArrayOf() :LETableReference(), fCount(0) {}
-
-  le_uint32 getCount() const { return fCount; }
-
-  using LETableReference::getAlias;
-
-  const T *getAlias(le_uint32 i, LEErrorCode &success) const {
-    return ((const T*)(((const char*)getAlias())+getOffsetFor(i, success)));
-  }
-
-  const T *getAliasRAW() const { LE_DEBUG_TR("getAliasRAW<>"); return (const T*)fStart; }
-
-  const T& getObject(le_uint32 i, LEErrorCode &success) const {
-      const T *ret = getAlias(i, success);
-      if (LE_FAILURE(success) || ret==NULL) {
-          return *(new T(0));
-      } else {
-          return *ret;
-     }
-  }
-  
-  const T& operator()(le_uint32 i, LEErrorCode &success) const {
-    return *getAlias(i,success);
-  }
-
-  size_t getOffsetFor(le_uint32 i, LEErrorCode &success) const {
-    if(LE_SUCCESS(success)&&i<getCount()) {
-      return LETableVarSizer<T>::getSize()*i;
-    } else {
-      success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
-    }
-    return 0;
-  }
-
-  LEReferenceToArrayOf<T> &reparent(const LETableReference &base) {
-    fParent = &base;
-    return *this;
-  }
-
- LEReferenceToArrayOf(const LETableReference& parent, LEErrorCode & success) : LETableReference(parent,0, LE_UINTPTR_MAX, success), fCount(0) {
-    LE_TRACE_TR("INFO: null RTAO")
-  }
-
-private:
-  le_uint32 fCount;
-};
-
-
-template<class T>
-class LEReferenceTo : public LETableReference {
-public:
-  /**
-   * open a sub reference.
-   * @param parent parent reference
-   * @param success error status
-   * @param atPtr location of reference - if NULL, will be at offset zero (i.e. downcast of parent). Otherwise must be a pointer within parent's bounds.
-   */
- inline LEReferenceTo(const LETableReference &parent, LEErrorCode &success, const void* atPtr)
-    : LETableReference(parent, parent.ptrToOffset(atPtr, success), LE_UINTPTR_MAX, success) {
-    verifyLength(0, LETableVarSizer<T>::getSize(), success);
-    if(LE_FAILURE(success)) clear();
-  }
-  /**
-   * ptr plus offset
-   */
- inline LEReferenceTo(const LETableReference &parent, LEErrorCode &success, const void* atPtr, size_t offset)
-    : LETableReference(parent, parent.ptrToOffset(atPtr, success)+offset, LE_UINTPTR_MAX, success) {
-    verifyLength(0, LETableVarSizer<T>::getSize(), success);
-    if(LE_FAILURE(success)) clear();
-  }
- inline LEReferenceTo(const LETableReference &parent, LEErrorCode &success, size_t offset)
-    : LETableReference(parent, offset, LE_UINTPTR_MAX, success) {
-    verifyLength(0, LETableVarSizer<T>::getSize(), success);
-    if(LE_FAILURE(success)) clear();
-  }
- inline LEReferenceTo(const LETableReference &parent, LEErrorCode &success)
-    : LETableReference(parent, 0, LE_UINTPTR_MAX, success) {
-    verifyLength(0, LETableVarSizer<T>::getSize(), success);
-    if(LE_FAILURE(success)) clear();
-  }
- inline LEReferenceTo(const LEFontInstance *font, LETag tableTag, LEErrorCode &success)
-   : LETableReference(font, tableTag, success) {
-    verifyLength(0, LETableVarSizer<T>::getSize(), success);
-    if(LE_FAILURE(success)) clear();
-  }
- inline LEReferenceTo(const le_uint8 *data, size_t length = LE_UINTPTR_MAX) : LETableReference(data, length) {}
- inline LEReferenceTo(const T *data, size_t length = LE_UINTPTR_MAX) : LETableReference((const le_uint8*)data, length) {}
- inline LEReferenceTo() : LETableReference(NULL) {}
-
- inline LEReferenceTo<T>& operator=(const T* other) {
-    setRaw(other);
-    return *this;
-  }
-
-  LEReferenceTo<T> &reparent(const LETableReference &base) {
-    fParent = &base;
-    return *this;
-  }
-
-  /**
-   * roll forward by one <T> size.
-   * same as addOffset(LETableVarSizer<T>::getSize(),success)
-   */
-  void addObject(LEErrorCode &success) {
-    addOffset(LETableVarSizer<T>::getSize(), success);
-  }
-  void addObject(size_t count, LEErrorCode &success) {
-    addOffset(LETableVarSizer<T>::getSize()*count, success);
-  }
-
-  const T *operator->() const { return getAlias(); }
-  const T *getAlias() const { return (const T*)fStart; }
-  const T *getAliasRAW() const { LE_DEBUG_TR("getAliasRAW<>"); return (const T*)fStart; }
-};
-
-
-U_NAMESPACE_END
-
-#endif
-
-#endif
diff --git a/icu4c/source/layout/LETypes.h b/icu4c/source/layout/LETypes.h
deleted file mode 100644 (file)
index 884d51d..0000000
+++ /dev/null
@@ -1,730 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. and others 1998-2014 - All Rights Reserved
- *
- */
-
-#ifndef __LETYPES_H
-#define __LETYPES_H
-
-#if !defined(LE_USE_CMEMORY) && (defined(U_LAYOUT_IMPLEMENTATION) || defined(U_LAYOUTEX_IMPLEMENTATION) || defined(U_STATIC_IMPLEMENTATION) || defined(U_COMBINED_IMPLEMENTATION))
-#define LE_USE_CMEMORY
-#endif
-
-#include "unicode/utypes.h"
-
-#ifdef __cplusplus
-#include "unicode/uobject.h"
-#endif
-
-#ifdef LE_USE_CMEMORY
-#include "cmemory.h"
-#endif
-
-/*!
- * \file
- * \brief C API: Basic definitions for the ICU LayoutEngine
- */
-
-/**
- * A type used for signed, 32-bit integers.
- *
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-typedef int32_t le_int32;
-
-/**
- * A type used for unsigned, 32-bit integers.
- *
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-typedef uint32_t le_uint32;
-
-/**
- * A type used for signed, 16-bit integers.
- *
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-typedef int16_t le_int16;
-
-/**
- * A type used for unsigned, 16-bit integers.
- *
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-typedef uint16_t le_uint16;
-
-/**
- * A type used for signed, 8-bit integers.
- *
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-typedef int8_t le_int8;
-
-/**
- * A type used for unsigned, 8-bit integers.
- *
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-typedef uint8_t le_uint8;
-
-
-/**
- * A type used for boolean values.
- *
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-typedef UBool le_bool;
-
-#ifndef NULL
-/**
- * Used to represent empty pointers.
- *
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-#define NULL 0
-#endif
-
-/**
- * Used for four character tags.
- *
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-typedef le_uint32 LETag;
-
-/**
- * Used for 16-bit glyph indices as they're represented
- * in TrueType font tables.
- *
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-typedef le_uint16 TTGlyphID;
-
-/**
- * Used for glyph indices. The low-order 16 bits are
- * the glyph ID within the font. The next 8 bits are
- * the sub-font ID within a compound font. The high-
- * order 8 bits are client defined. The LayoutEngine
- * will never change or look at the client defined bits.
- *
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-typedef le_uint32 LEGlyphID;
-
-/**
- * Used to mask off the glyph ID part of an LEGlyphID.
- *
- * @see LEGlyphID
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-#define LE_GLYPH_MASK     0x0000FFFF
-
-/**
- * Used to shift the glyph ID part of an LEGlyphID
- * into the low-order bits.
- *
- * @see LEGlyphID
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-#define LE_GLYPH_SHIFT    0
-
-
-/**
- * Used to mask off the sub-font ID part of an LEGlyphID.
- *
- * @see LEGlyphID
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-#define LE_SUB_FONT_MASK  0x00FF0000
-
-/**
- * Used to shift the sub-font ID part of an LEGlyphID
- * into the low-order bits.
- *
- * @see LEGlyphID
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-#define LE_SUB_FONT_SHIFT 16
-
-
-/**
- * Used to mask off the client-defined part of an LEGlyphID.
- *
- * @see LEGlyphID
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-#define LE_CLIENT_MASK    0xFF000000
-
-/**
- * Used to shift the sub-font ID part of an LEGlyphID
- * into the low-order bits.
- *
- * @see LEGlyphID
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-#define LE_CLIENT_SHIFT   24
-
-
-/**
- * A convenience macro to get the Glyph ID part of an LEGlyphID.
- *
- * @see LEGlyphID
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-#define LE_GET_GLYPH(gid) ((gid & LE_GLYPH_MASK) >> LE_GLYPH_SHIFT)
-
-/**
- * A convenience macro to get the sub-font ID part of an LEGlyphID.
- *
- * @see LEGlyphID
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-#define LE_GET_SUB_FONT(gid) ((gid & LE_SUB_FONT_MASK) >> LE_SUB_FONT_SHIFT)
-
-/**
- * A convenience macro to get the client-defined part of an LEGlyphID.
- *
- * @see LEGlyphID
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-#define LE_GET_CLIENT(gid) ((gid & LE_CLIENT_MASK) >> LE_CLIENT_SHIFT)
-
-
-/**
- * A convenience macro to set the Glyph ID part of an LEGlyphID.
- *
- * @see LEGlyphID
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-#define LE_SET_GLYPH(gid, glyph) ((gid & ~LE_GLYPH_MASK) | ((glyph << LE_GLYPH_SHIFT) & LE_GLYPH_MASK))
-
-/**
- * A convenience macro to set the sub-font ID part of an LEGlyphID.
- *
- * @see LEGlyphID
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-#define LE_SET_SUB_FONT(gid, font) ((gid & ~LE_SUB_FONT_MASK) | ((font << LE_SUB_FONT_SHIFT) & LE_SUB_FONT_MASK))
-
-/**
- * A convenience macro to set the client-defined part of an LEGlyphID.
- *
- * @see LEGlyphID
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-#define LE_SET_CLIENT(gid, client) ((gid & ~LE_CLIENT_MASK) | ((client << LE_CLIENT_SHIFT) & LE_CLIENT_MASK))
-
-
-/**
- * Used to represent 16-bit Unicode code points.
- *
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-typedef UChar LEUnicode16;
-
-/**
- * Used to represent 32-bit Unicode code points.
- *
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-typedef UChar32 LEUnicode32;
-
-#ifndef U_HIDE_DEPRECATED_API
-/**
- * Used to represent 16-bit Unicode code points.
- *
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-typedef UChar LEUnicode;
-#endif  /* U_HIDE_DEPRECATED_API */
-
-/**
- * Used to hold a pair of (x, y) values which represent a point.
- *
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-struct LEPoint
-{
-    /**
-     * The x coordinate of the point.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    float fX;
-
-    /**
-     * The y coordinate of the point.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    float fY;
-};
-
-#ifndef __cplusplus
-/**
- * Used to hold a pair of (x, y) values which represent a point.
- *
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-typedef struct LEPoint LEPoint;
-#endif
-
-
-#ifndef U_HIDE_INTERNAL_API
-
-/**
- * \def
- * @internal
- */
-#ifndef LE_ASSERT_BAD_FONT
-#define LE_ASSERT_BAD_FONT 0
-#endif
-
-/**
- * \def LE_DEBUG_BAD_FONT
- * @internal
- */
-#if LE_ASSERT_BAD_FONT
-#include <stdio.h>
-#define LE_DEBUG_BAD_FONT(x) fprintf(stderr,"%s:%d: BAD FONT: %s\n", __FILE__, __LINE__, (x));
-#else
-#define LE_DEBUG_BAD_FONT(x)
-#endif
-
-/**
- * \def LE_UINTPTR_MAX
- * Max value representable by a uintptr
- */
-
-#ifndef UINT32_MAX
-#define LE_UINT32_MAX 0xFFFFFFFFU
-#else
-#define LE_UINT32_MAX UINT32_MAX
-#endif
-
-#ifndef UINTPTR_MAX
-#define LE_UINTPTR_MAX LE_UINT32_MAX
-#else
-#define LE_UINTPTR_MAX UINTPTR_MAX
-#endif
-
-/**
- * Range check for overflow
- */
-#define LE_RANGE_CHECK(type, count, ptrfn) (( (LE_UINTPTR_MAX / sizeof(type)) < (size_t)count ) ? NULL : (ptrfn))
-/**
- * A convenience macro to get the length of an array.
- *
- * @internal
- */
-#define LE_ARRAY_SIZE(array) (sizeof array / sizeof array[0])
-
-#ifdef LE_USE_CMEMORY
-/**
- * A convenience macro for copying an array.
- *
- * @internal
- */
-#define LE_ARRAY_COPY(dst, src, count) uprv_memcpy((void *) (dst), (void *) (src), (count) * sizeof (src)[0])
-
-/**
- * Allocate an array of basic types. This is used to isolate the rest of
- * the LayoutEngine code from cmemory.h.
- *
- * @internal
- */
-#define LE_NEW_ARRAY(type, count) (type *)  LE_RANGE_CHECK(type,count,uprv_malloc((count) * sizeof(type)))
-
-/**
- * Re-allocate an array of basic types. This is used to isolate the rest of
- * the LayoutEngine code from cmemory.h.
- *
- * @internal
- */
-#define LE_GROW_ARRAY(array, newSize) uprv_realloc((void *) (array), (newSize) * sizeof (array)[0])
-
- /**
- * Free an array of basic types. This is used to isolate the rest of
- * the LayoutEngine code from cmemory.h.
- *
- * @internal
- */
-#define LE_DELETE_ARRAY(array) uprv_free((void *) (array))
-#else
-
-/* Not using ICU memory - use C std lib versions */
-
-#include <stdlib.h>
-#include <string.h>
-
-/**
- * A convenience macro to get the length of an array.
- *
- * @internal
- */
-#define LE_ARRAY_SIZE(array) (sizeof array / sizeof array[0])
-
-/**
- * A convenience macro for copying an array.
- *
- * @internal
- */
-#define LE_ARRAY_COPY(dst, src, count) memcpy((void *) (dst), (void *) (src), (count) * sizeof (src)[0])
-
-/**
- * Allocate an array of basic types. This is used to isolate the rest of
- * the LayoutEngine code from cmemory.h.
- *
- * @internal
- */
-#define LE_NEW_ARRAY(type, count) LE_RANGE_CHECK(type,count,(type *) malloc((count) * sizeof(type)))
-
-/**
- * Re-allocate an array of basic types. This is used to isolate the rest of
- * the LayoutEngine code from cmemory.h.
- *
- * @internal
- */
-#define LE_GROW_ARRAY(array, newSize) realloc((void *) (array), (newSize) * sizeof (array)[0])
-
- /**
- * Free an array of basic types. This is used to isolate the rest of
- * the LayoutEngine code from cmemory.h.
- *
- * @internal
- */
-#define LE_DELETE_ARRAY(array) free((void *) (array))
-
-#endif
-#endif  /* U_HIDE_INTERNAL_API */
-
-/**
- * A macro to construct the four-letter tags used to
- * label TrueType tables, and for script, language and
- * feature tags in OpenType tables.
- *
- * WARNING: THIS MACRO WILL ONLY WORK CORRECTLY IF
- * THE ARGUMENT CHARACTERS ARE ASCII.
- *
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-#define LE_MAKE_TAG(a, b, c, d) \
-    (((le_uint32)(a) << 24) |   \
-     ((le_uint32)(b) << 16) |   \
-     ((le_uint32)(c) << 8)  |   \
-      (le_uint32)(d))
-
-/**
- * This enumeration defines constants for the standard
- * TrueType, OpenType and AAT table tags.
- *
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-enum LETableTags {
-    LE_ACNT_TABLE_TAG = 0x61636E74UL, /**< 'acnt' */
-    LE_AVAR_TABLE_TAG = 0x61766172UL, /**< 'avar' */
-    LE_BASE_TABLE_TAG = 0x42415345UL, /**< 'BASE' */
-    LE_BDAT_TABLE_TAG = 0x62646174UL, /**< 'bdat' */
-    LE_BHED_TABLE_TAG = 0x62686564UL, /**< 'bhed' */
-    LE_BLOC_TABLE_TAG = 0x626C6F63UL, /**< 'bloc' */
-    LE_BSLN_TABLE_TAG = 0x62736C6EUL, /**< 'bsln' */
-    LE_CFF__TABLE_TAG = 0x43464620UL, /**< 'CFF ' */
-    LE_CMAP_TABLE_TAG = 0x636D6170UL, /**< 'cmap' */
-    LE_CVAR_TABLE_TAG = 0x63766172UL, /**< 'cvar' */
-    LE_CVT__TABLE_TAG = 0x63767420UL, /**< 'cvt ' */
-    LE_DSIG_TABLE_TAG = 0x44534947UL, /**< 'DSIG' */
-    LE_EBDT_TABLE_TAG = 0x45424454UL, /**< 'EBDT' */
-    LE_EBLC_TABLE_TAG = 0x45424C43UL, /**< 'EBLC' */
-    LE_EBSC_TABLE_TAG = 0x45425343UL, /**< 'EBSC' */
-    LE_FDSC_TABLE_TAG = 0x66647363UL, /**< 'fdsc' */
-    LE_FEAT_TABLE_TAG = 0x66656174UL, /**< 'feat' */
-    LE_FMTX_TABLE_TAG = 0x666D7478UL, /**< 'fmtx' */
-    LE_FPGM_TABLE_TAG = 0x6670676DUL, /**< 'fpgm' */
-    LE_FVAR_TABLE_TAG = 0x66766172UL, /**< 'fvar' */
-    LE_GASP_TABLE_TAG = 0x67617370UL, /**< 'gasp' */
-    LE_GDEF_TABLE_TAG = 0x47444546UL, /**< 'GDEF' */
-    LE_GLYF_TABLE_TAG = 0x676C7966UL, /**< 'glyf' */
-    LE_GPOS_TABLE_TAG = 0x47504F53UL, /**< 'GPOS' */
-    LE_GSUB_TABLE_TAG = 0x47535542UL, /**< 'GSUB' */
-    LE_GVAR_TABLE_TAG = 0x67766172UL, /**< 'gvar' */
-    LE_HDMX_TABLE_TAG = 0x68646D78UL, /**< 'hdmx' */
-    LE_HEAD_TABLE_TAG = 0x68656164UL, /**< 'head' */
-    LE_HHEA_TABLE_TAG = 0x68686561UL, /**< 'hhea' */
-    LE_HMTX_TABLE_TAG = 0x686D7478UL, /**< 'hmtx' */
-    LE_HSTY_TABLE_TAG = 0x68737479UL, /**< 'hsty' */
-    LE_JUST_TABLE_TAG = 0x6A757374UL, /**< 'just' */
-    LE_JSTF_TABLE_TAG = 0x4A535446UL, /**< 'JSTF' */
-    LE_KERN_TABLE_TAG = 0x6B65726EUL, /**< 'kern' */
-    LE_LCAR_TABLE_TAG = 0x6C636172UL, /**< 'lcar' */
-    LE_LOCA_TABLE_TAG = 0x6C6F6361UL, /**< 'loca' */
-    LE_LTSH_TABLE_TAG = 0x4C545348UL, /**< 'LTSH' */
-    LE_MAXP_TABLE_TAG = 0x6D617870UL, /**< 'maxp' */
-    LE_MORT_TABLE_TAG = 0x6D6F7274UL, /**< 'mort' */
-    LE_MORX_TABLE_TAG = 0x6D6F7278UL, /**< 'morx' */
-    LE_NAME_TABLE_TAG = 0x6E616D65UL, /**< 'name' */
-    LE_OPBD_TABLE_TAG = 0x6F706264UL, /**< 'opbd' */
-    LE_OS_2_TABLE_TAG = 0x4F532F32UL, /**< 'OS/2' */
-    LE_PCLT_TABLE_TAG = 0x50434C54UL, /**< 'PCLT' */
-    LE_POST_TABLE_TAG = 0x706F7374UL, /**< 'post' */
-    LE_PREP_TABLE_TAG = 0x70726570UL, /**< 'prep' */
-    LE_PROP_TABLE_TAG = 0x70726F70UL, /**< 'prop' */
-    LE_TRAK_TABLE_TAG = 0x7472616BUL, /**< 'trak' */
-    LE_VDMX_TABLE_TAG = 0x56444D58UL, /**< 'VDMX' */
-    LE_VHEA_TABLE_TAG = 0x76686561UL, /**< 'vhea' */
-    LE_VMTX_TABLE_TAG = 0x766D7478UL, /**< 'vmtx' */
-    LE_VORG_TABLE_TAG = 0x564F5247UL, /**< 'VORG' */
-    LE_ZAPF_TABLE_TAG = 0x5A617066UL  /**< 'Zapf' */
-};
-
-/**
- * This enumeration defines constants for all
- * the common OpenType feature tags.
- *
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-enum LEFeatureTags {
-    LE_AALT_FEATURE_TAG = 0x61616C74UL, /**< 'aalt' */
-    LE_ABVF_FEATURE_TAG = 0x61627666UL, /**< 'abvf' */
-    LE_ABVM_FEATURE_TAG = 0x6162766DUL, /**< 'abvm' */
-    LE_ABVS_FEATURE_TAG = 0x61627673UL, /**< 'abvs' */
-    LE_AFRC_FEATURE_TAG = 0x61667263UL, /**< 'afrc' */
-    LE_AKHN_FEATURE_TAG = 0x616B686EUL, /**< 'akhn' */
-    LE_BLWF_FEATURE_TAG = 0x626C7766UL, /**< 'blwf' */
-    LE_BLWM_FEATURE_TAG = 0x626C776DUL, /**< 'blwm' */
-    LE_BLWS_FEATURE_TAG = 0x626C7773UL, /**< 'blws' */
-    LE_CALT_FEATURE_TAG = 0x63616C74UL, /**< 'calt' */
-    LE_CASE_FEATURE_TAG = 0x63617365UL, /**< 'case' */
-    LE_CCMP_FEATURE_TAG = 0x63636D70UL, /**< 'ccmp' */
-    LE_CJCT_FEATURE_TAG = 0x636A6374UL, /**< 'cjct' */
-    LE_CLIG_FEATURE_TAG = 0x636C6967UL, /**< 'clig' */
-    LE_CPSP_FEATURE_TAG = 0x63707370UL, /**< 'cpsp' */
-    LE_CSWH_FEATURE_TAG = 0x63737768UL, /**< 'cswh' */
-    LE_CURS_FEATURE_TAG = 0x63757273UL, /**< 'curs' */
-    LE_C2SC_FEATURE_TAG = 0x63327363UL, /**< 'c2sc' */
-    LE_C2PC_FEATURE_TAG = 0x63327063UL, /**< 'c2pc' */
-    LE_DIST_FEATURE_TAG = 0x64697374UL, /**< 'dist' */
-    LE_DLIG_FEATURE_TAG = 0x646C6967UL, /**< 'dlig' */
-    LE_DNOM_FEATURE_TAG = 0x646E6F6DUL, /**< 'dnom' */
-    LE_EXPT_FEATURE_TAG = 0x65787074UL, /**< 'expt' */
-    LE_FALT_FEATURE_TAG = 0x66616C74UL, /**< 'falt' */
-    LE_FIN2_FEATURE_TAG = 0x66696E32UL, /**< 'fin2' */
-    LE_FIN3_FEATURE_TAG = 0x66696E33UL, /**< 'fin3' */
-    LE_FINA_FEATURE_TAG = 0x66696E61UL, /**< 'fina' */
-    LE_FRAC_FEATURE_TAG = 0x66726163UL, /**< 'frac' */
-    LE_FWID_FEATURE_TAG = 0x66776964UL, /**< 'fwid' */
-    LE_HALF_FEATURE_TAG = 0x68616C66UL, /**< 'half' */
-    LE_HALN_FEATURE_TAG = 0x68616C6EUL, /**< 'haln' */
-    LE_HALT_FEATURE_TAG = 0x68616C74UL, /**< 'halt' */
-    LE_HIST_FEATURE_TAG = 0x68697374UL, /**< 'hist' */
-    LE_HKNA_FEATURE_TAG = 0x686B6E61UL, /**< 'hkna' */
-    LE_HLIG_FEATURE_TAG = 0x686C6967UL, /**< 'hlig' */
-    LE_HNGL_FEATURE_TAG = 0x686E676CUL, /**< 'hngl' */
-    LE_HWID_FEATURE_TAG = 0x68776964UL, /**< 'hwid' */
-    LE_INIT_FEATURE_TAG = 0x696E6974UL, /**< 'init' */
-    LE_ISOL_FEATURE_TAG = 0x69736F6CUL, /**< 'isol' */
-    LE_ITAL_FEATURE_TAG = 0x6974616CUL, /**< 'ital' */
-    LE_JALT_FEATURE_TAG = 0x6A616C74UL, /**< 'jalt' */
-    LE_JP78_FEATURE_TAG = 0x6A703738UL, /**< 'jp78' */
-    LE_JP83_FEATURE_TAG = 0x6A703833UL, /**< 'jp83' */
-    LE_JP90_FEATURE_TAG = 0x6A703930UL, /**< 'jp90' */
-    LE_KERN_FEATURE_TAG = 0x6B65726EUL, /**< 'kern' */
-    LE_LFBD_FEATURE_TAG = 0x6C666264UL, /**< 'lfbd' */
-    LE_LIGA_FEATURE_TAG = 0x6C696761UL, /**< 'liga' */
-    LE_LJMO_FEATURE_TAG = 0x6C6A6D6FUL, /**< 'ljmo' */
-    LE_LNUM_FEATURE_TAG = 0x6C6E756DUL, /**< 'lnum' */
-    LE_LOCL_FEATURE_TAG = 0x6C6F636CUL, /**< 'locl' */
-    LE_MARK_FEATURE_TAG = 0x6D61726BUL, /**< 'mark' */
-    LE_MED2_FEATURE_TAG = 0x6D656432UL, /**< 'med2' */
-    LE_MEDI_FEATURE_TAG = 0x6D656469UL, /**< 'medi' */
-    LE_MGRK_FEATURE_TAG = 0x6D67726BUL, /**< 'mgrk' */
-    LE_MKMK_FEATURE_TAG = 0x6D6B6D6BUL, /**< 'mkmk' */
-    LE_MSET_FEATURE_TAG = 0x6D736574UL, /**< 'mset' */
-    LE_NALT_FEATURE_TAG = 0x6E616C74UL, /**< 'nalt' */
-    LE_NLCK_FEATURE_TAG = 0x6E6C636BUL, /**< 'nlck' */
-    LE_NUKT_FEATURE_TAG = 0x6E756B74UL, /**< 'nukt' */
-    LE_NUMR_FEATURE_TAG = 0x6E756D72UL, /**< 'numr' */
-    LE_ONUM_FEATURE_TAG = 0x6F6E756DUL, /**< 'onum' */
-    LE_OPBD_FEATURE_TAG = 0x6F706264UL, /**< 'opbd' */
-    LE_ORDN_FEATURE_TAG = 0x6F72646EUL, /**< 'ordn' */
-    LE_ORNM_FEATURE_TAG = 0x6F726E6DUL, /**< 'ornm' */
-    LE_PALT_FEATURE_TAG = 0x70616C74UL, /**< 'palt' */
-    LE_PCAP_FEATURE_TAG = 0x70636170UL, /**< 'pcap' */
-    LE_PNUM_FEATURE_TAG = 0x706E756DUL, /**< 'pnum' */
-    LE_PREF_FEATURE_TAG = 0x70726566UL, /**< 'pref' */
-    LE_PRES_FEATURE_TAG = 0x70726573UL, /**< 'pres' */
-    LE_PSTF_FEATURE_TAG = 0x70737466UL, /**< 'pstf' */
-    LE_PSTS_FEATURE_TAG = 0x70737473UL, /**< 'psts' */
-    LE_PWID_FEATURE_TAG = 0x70776964UL, /**< 'pwid' */
-    LE_QWID_FEATURE_TAG = 0x71776964UL, /**< 'qwid' */
-    LE_RAND_FEATURE_TAG = 0x72616E64UL, /**< 'rand' */
-    LE_RLIG_FEATURE_TAG = 0x726C6967UL, /**< 'rlig' */
-    LE_RPHF_FEATURE_TAG = 0x72706866UL, /**< 'rphf' */
-    LE_RKRF_FEATURE_TAG = 0x726B7266UL, /**< 'rkrf' */
-    LE_RTBD_FEATURE_TAG = 0x72746264UL, /**< 'rtbd' */
-    LE_RTLA_FEATURE_TAG = 0x72746C61UL, /**< 'rtla' */
-    LE_RUBY_FEATURE_TAG = 0x72756279UL, /**< 'ruby' */
-    LE_SALT_FEATURE_TAG = 0x73616C74UL, /**< 'salt' */
-    LE_SINF_FEATURE_TAG = 0x73696E66UL, /**< 'sinf' */
-    LE_SIZE_FEATURE_TAG = 0x73697A65UL, /**< 'size' */
-    LE_SMCP_FEATURE_TAG = 0x736D6370UL, /**< 'smcp' */
-    LE_SMPL_FEATURE_TAG = 0x736D706CUL, /**< 'smpl' */
-    LE_SS01_FEATURE_TAG = 0x73733031UL, /**< 'ss01' */
-    LE_SS02_FEATURE_TAG = 0x73733032UL, /**< 'ss02' */
-    LE_SS03_FEATURE_TAG = 0x73733033UL, /**< 'ss03' */
-    LE_SS04_FEATURE_TAG = 0x73733034UL, /**< 'ss04' */
-    LE_SS05_FEATURE_TAG = 0x73733035UL, /**< 'ss05' */
-    LE_SS06_FEATURE_TAG = 0x73733036UL, /**< 'ss06' */
-    LE_SS07_FEATURE_TAG = 0x73733037UL, /**< 'ss07' */
-    LE_SS08_FEATURE_TAG = 0x73733038UL, /**< 'ss08' */
-    LE_SS09_FEATURE_TAG = 0x73733039UL, /**< 'ss09' */
-    LE_SS10_FEATURE_TAG = 0x73733130UL, /**< 'ss10' */
-    LE_SS11_FEATURE_TAG = 0x73733131UL, /**< 'ss11' */
-    LE_SS12_FEATURE_TAG = 0x73733132UL, /**< 'ss12' */
-    LE_SS13_FEATURE_TAG = 0x73733133UL, /**< 'ss13' */
-    LE_SS14_FEATURE_TAG = 0x73733134UL, /**< 'ss14' */
-    LE_SS15_FEATURE_TAG = 0x73733135UL, /**< 'ss15' */
-    LE_SS16_FEATURE_TAG = 0x73733136UL, /**< 'ss16' */
-    LE_SS17_FEATURE_TAG = 0x73733137UL, /**< 'ss17' */
-    LE_SS18_FEATURE_TAG = 0x73733138UL, /**< 'ss18' */
-    LE_SS19_FEATURE_TAG = 0x73733139UL, /**< 'ss19' */
-    LE_SS20_FEATURE_TAG = 0x73733230UL, /**< 'ss20' */
-    LE_SUBS_FEATURE_TAG = 0x73756273UL, /**< 'subs' */
-    LE_SUPS_FEATURE_TAG = 0x73757073UL, /**< 'sups' */
-    LE_SWSH_FEATURE_TAG = 0x73777368UL, /**< 'swsh' */
-    LE_TITL_FEATURE_TAG = 0x7469746CUL, /**< 'titl' */
-    LE_TJMO_FEATURE_TAG = 0x746A6D6FUL, /**< 'tjmo' */
-    LE_TNAM_FEATURE_TAG = 0x746E616DUL, /**< 'tnam' */
-    LE_TNUM_FEATURE_TAG = 0x746E756DUL, /**< 'tnum' */
-    LE_TRAD_FEATURE_TAG = 0x74726164UL, /**< 'trad' */
-    LE_TWID_FEATURE_TAG = 0x74776964UL, /**< 'twid' */
-    LE_UNIC_FEATURE_TAG = 0x756E6963UL, /**< 'unic' */
-    LE_VALT_FEATURE_TAG = 0x76616C74UL, /**< 'valt' */
-    LE_VATU_FEATURE_TAG = 0x76617475UL, /**< 'vatu' */
-    LE_VERT_FEATURE_TAG = 0x76657274UL, /**< 'vert' */
-    LE_VHAL_FEATURE_TAG = 0x7668616CUL, /**< 'vhal' */
-    LE_VJMO_FEATURE_TAG = 0x766A6D6FUL, /**< 'vjmo' */
-    LE_VKNA_FEATURE_TAG = 0x766B6E61UL, /**< 'vkna' */
-    LE_VKRN_FEATURE_TAG = 0x766B726EUL, /**< 'vkrn' */
-    LE_VPAL_FEATURE_TAG = 0x7670616CUL, /**< 'vpal' */
-    LE_VRT2_FEATURE_TAG = 0x76727432UL, /**< 'vrt2' */
-    LE_ZERO_FEATURE_TAG = 0x7A65726FUL  /**< 'zero' */
-};
-
-/**
- * @internal
- */
-enum LEFeatureENUMs {
-  LE_Kerning_FEATURE_ENUM = 0,   /**< Requests Kerning. Formerly LayoutEngine::kTypoFlagKern */
-  LE_Ligatures_FEATURE_ENUM = 1, /**< Requests Ligatures. Formerly LayoutEngine::kTypoFlagLiga */
-  LE_CLIG_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_DLIG_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_HLIG_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_LIGA_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_RLIG_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_SMCP_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_FRAC_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_AFRC_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_ZERO_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_SWSH_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_CSWH_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_SALT_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_NALT_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_RUBY_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_SS01_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_SS02_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_SS03_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_SS04_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_SS05_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_SS06_FEATURE_ENUM,  /**< Feature specific enum */
-  LE_SS07_FEATURE_ENUM,   /**< Feature specific enum */
-  
-  LE_CHAR_FILTER_FEATURE_ENUM = 31, /**< Apply CharSubstitutionFilter */
-  LE_FEATURE_ENUM_MAX = LE_CHAR_FILTER_FEATURE_ENUM
-};
-
-
-/** 
- * Flags for typographic features.
- * @internal
- * @{
- */
-#define LE_Kerning_FEATURE_FLAG   (1 << LE_Kerning_FEATURE_ENUM)
-#define LE_Ligatures_FEATURE_FLAG (1 << LE_Ligatures_FEATURE_ENUM)
-#define LE_CLIG_FEATURE_FLAG (1 << LE_CLIG_FEATURE_ENUM)
-#define LE_DLIG_FEATURE_FLAG (1 << LE_DLIG_FEATURE_ENUM)
-#define LE_HLIG_FEATURE_FLAG (1 << LE_HLIG_FEATURE_ENUM)
-#define LE_LIGA_FEATURE_FLAG (1 << LE_LIGA_FEATURE_ENUM)
-#define LE_RLIG_FEATURE_FLAG (1 << LE_RLIG_FEATURE_ENUM)
-#define LE_SMCP_FEATURE_FLAG (1 << LE_SMCP_FEATURE_ENUM)
-#define LE_FRAC_FEATURE_FLAG (1 << LE_FRAC_FEATURE_ENUM)
-#define LE_AFRC_FEATURE_FLAG (1 << LE_AFRC_FEATURE_ENUM)
-#define LE_ZERO_FEATURE_FLAG (1 << LE_ZERO_FEATURE_ENUM)
-#define LE_SWSH_FEATURE_FLAG (1 << LE_SWSH_FEATURE_ENUM)
-#define LE_CSWH_FEATURE_FLAG (1 << LE_CSWH_FEATURE_ENUM)
-#define LE_SALT_FEATURE_FLAG (1 << LE_SALT_FEATURE_ENUM)
-#define LE_NALT_FEATURE_FLAG (1 << LE_NALT_FEATURE_ENUM)
-#define LE_RUBY_FEATURE_FLAG (1 << LE_RUBY_FEATURE_ENUM)
-#define LE_SS01_FEATURE_FLAG (1 << LE_SS01_FEATURE_ENUM)
-#define LE_SS02_FEATURE_FLAG (1 << LE_SS02_FEATURE_ENUM)
-#define LE_SS03_FEATURE_FLAG (1 << LE_SS03_FEATURE_ENUM)
-#define LE_SS04_FEATURE_FLAG (1 << LE_SS04_FEATURE_ENUM)
-#define LE_SS05_FEATURE_FLAG (1 << LE_SS05_FEATURE_ENUM)
-#define LE_SS06_FEATURE_FLAG (1 << LE_SS06_FEATURE_ENUM)
-#define LE_SS07_FEATURE_FLAG (1 << LE_SS07_FEATURE_ENUM)
-
-#define LE_CHAR_FILTER_FEATURE_FLAG (1 << LE_CHAR_FILTER_FEATURE_ENUM)
-/**
- * @}
- */
-
-#define LE_DEFAULT_FEATURE_FLAG (LE_Kerning_FEATURE_FLAG | LE_Ligatures_FEATURE_FLAG) /**< default features */
-
-/**
- * Error codes returned by the LayoutEngine.
- *
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-enum LEErrorCode {
-    /* informational */
-    LE_NO_SUBFONT_WARNING          = U_USING_DEFAULT_WARNING, /**< The font does not contain subfonts. */
-
-    /* success */
-    LE_NO_ERROR                     = U_ZERO_ERROR, /**< No error, no warning. */
-
-    /* failures */
-    LE_ILLEGAL_ARGUMENT_ERROR       = U_ILLEGAL_ARGUMENT_ERROR,  /**< An illegal argument was detected. */
-    LE_MEMORY_ALLOCATION_ERROR      = U_MEMORY_ALLOCATION_ERROR, /**< Memory allocation error. */
-    LE_INDEX_OUT_OF_BOUNDS_ERROR    = U_INDEX_OUTOFBOUNDS_ERROR, /**< Trying to access an index that is out of bounds. */
-    LE_NO_LAYOUT_ERROR              = U_UNSUPPORTED_ERROR,       /**< You must call layoutChars() first. */
-    LE_INTERNAL_ERROR               = U_INTERNAL_PROGRAM_ERROR,  /**< An internal error was encountered. */
-    LE_FONT_FILE_NOT_FOUND_ERROR    = U_FILE_ACCESS_ERROR,       /**< The requested font file cannot be opened. */
-    LE_MISSING_FONT_TABLE_ERROR     = U_MISSING_RESOURCE_ERROR   /**< The requested font table does not exist. */
-};
-
-#ifndef __cplusplus
-/**
- * Error codes returned by the LayoutEngine.
- *
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-typedef enum LEErrorCode LEErrorCode;
-#endif
-
-/**
- * A convenience macro to test for the success of a LayoutEngine call.
- *
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-#define LE_SUCCESS(code) (U_SUCCESS((UErrorCode)code))
-
-/**
- * A convenience macro to test for the failure of a LayoutEngine call.
- *
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- */
-#define LE_FAILURE(code) (U_FAILURE((UErrorCode)code))
-
-
-#endif
diff --git a/icu4c/source/layout/LayoutEngine.cpp b/icu4c/source/layout/LayoutEngine.cpp
deleted file mode 100644 (file)
index 6088180..0000000
+++ /dev/null
@@ -1,675 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- * (C) Copyright IBM Corp. and others 1998-2015 - All Rights Reserved
- */
-
-#include "LETypes.h"
-#include "LEScripts.h"
-#include "LELanguages.h"
-#include "LESwaps.h"
-
-#include "LayoutEngine.h"
-#include "ArabicLayoutEngine.h"
-#include "CanonShaping.h"
-#include "HanLayoutEngine.h"
-#include "HangulLayoutEngine.h"
-#include "IndicLayoutEngine.h"
-#include "KhmerLayoutEngine.h"
-#include "ThaiLayoutEngine.h"
-#include "TibetanLayoutEngine.h"
-#include "GXLayoutEngine.h"
-#include "GXLayoutEngine2.h"
-
-#include "ScriptAndLanguageTags.h"
-#include "CharSubstitutionFilter.h"
-
-#include "LEGlyphStorage.h"
-
-#include "OpenTypeUtilities.h"
-#include "GlyphSubstitutionTables.h"
-#include "GlyphDefinitionTables.h"
-#include "MorphTables.h"
-
-#include "DefaultCharMapper.h"
-
-#include "KernTable.h"
-
-U_NAMESPACE_BEGIN
-
-/* Leave this copyright notice here! It needs to go somewhere in this library. */
-static const char copyright[] = U_COPYRIGHT_STRING;
-
-/* TODO: remove these? */
-const le_int32 LayoutEngine::kTypoFlagKern = LE_Kerning_FEATURE_FLAG;
-const le_int32 LayoutEngine::kTypoFlagLiga = LE_Ligatures_FEATURE_FLAG;
-
-const LEUnicode32 DefaultCharMapper::controlChars[] = {
-    0x0009, 0x000A, 0x000D,
-    /*0x200C, 0x200D,*/ 0x200E, 0x200F,
-    0x2028, 0x2029, 0x202A, 0x202B, 0x202C, 0x202D, 0x202E,
-    0x206A, 0x206B, 0x206C, 0x206D, 0x206E, 0x206F
-};
-
-const le_int32 DefaultCharMapper::controlCharsCount = LE_ARRAY_SIZE(controlChars);
-
-LEUnicode32 DefaultCharMapper::mapChar(LEUnicode32 ch) const
-{
-    (void)copyright;    // Suppress unused variable warning.
-    if (fFilterControls) {
-        le_int32 index = OpenTypeUtilities::search((le_uint32)ch, (le_uint32 *)controlChars, controlCharsCount);
-
-        if (controlChars[index] == ch) {
-            return 0xFFFF;
-        }
-    }
-
-    if (fMirror) {
-        le_int32 index = OpenTypeUtilities::search((le_uint32) ch, (le_uint32 *)DefaultCharMapper::mirroredChars, DefaultCharMapper::mirroredCharsCount);
-
-        if (mirroredChars[index] == ch) {
-            return DefaultCharMapper::srahCderorrim[index];
-        }
-    }
-
-    return ch;
-}
-
-// This is here to get it out of LEGlyphFilter.h.
-// No particular reason to put it here, other than
-// this is a good central location...
-LEGlyphFilter::~LEGlyphFilter()
-{
-    // nothing to do
-}
-
-CharSubstitutionFilter::CharSubstitutionFilter(const LEFontInstance *fontInstance)
-  : fFontInstance(fontInstance)
-{
-    // nothing to do
-}
-
-CharSubstitutionFilter::~CharSubstitutionFilter()
-{
-    // nothing to do
-}
-
-class CanonMarkFilter : public UMemory, public LEGlyphFilter
-{
-private:
-  const LEReferenceTo<GlyphClassDefinitionTable> classDefTable;
-
-    CanonMarkFilter(const CanonMarkFilter &other); // forbid copying of this class
-    CanonMarkFilter &operator=(const CanonMarkFilter &other); // forbid copying of this class
-
-public:
-    CanonMarkFilter(const LEReferenceTo<GlyphDefinitionTableHeader> &gdefTable, LEErrorCode &success);
-    virtual ~CanonMarkFilter();
-
-    virtual le_bool accept(LEGlyphID glyph) const;
-};
-
-CanonMarkFilter::CanonMarkFilter(const LEReferenceTo<GlyphDefinitionTableHeader> &gdefTable, LEErrorCode &success)
-  : classDefTable(gdefTable->getMarkAttachClassDefinitionTable(gdefTable, success))
-{
-}
-
-CanonMarkFilter::~CanonMarkFilter()
-{
-    // nothing to do?
-}
-
-le_bool CanonMarkFilter::accept(LEGlyphID glyph) const
-{
-  LEErrorCode success = LE_NO_ERROR;
-  le_int32 glyphClass = classDefTable->getGlyphClass(classDefTable, glyph, success);
-  if(LE_FAILURE(success)) return false;
-  return glyphClass != 0;
-}
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LayoutEngine)
-
-#define ccmpFeatureTag  LE_CCMP_FEATURE_TAG
-
-#define ccmpFeatureMask 0x80000000UL
-
-#define canonFeatures (ccmpFeatureMask)
-
-static const FeatureMap canonFeatureMap[] =
-{
-    {ccmpFeatureTag, ccmpFeatureMask}
-};
-
-static const le_int32 canonFeatureMapCount = LE_ARRAY_SIZE(canonFeatureMap);
-
-LayoutEngine::LayoutEngine(const LEFontInstance *fontInstance,
-                           le_int32 scriptCode,
-                           le_int32 languageCode,
-                           le_int32 typoFlags,
-                           LEErrorCode &success)
-  : fGlyphStorage(NULL), fFontInstance(fontInstance), fScriptCode(scriptCode), fLanguageCode(languageCode),
-    fTypoFlags(typoFlags), fFilterZeroWidth(TRUE)
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    fGlyphStorage = new LEGlyphStorage();
-    if (fGlyphStorage == NULL) {
-        success = LE_MEMORY_ALLOCATION_ERROR;
-    }
-}
-
-le_int32 LayoutEngine::getGlyphCount() const
-{
-    return fGlyphStorage->getGlyphCount();
-}
-
-void LayoutEngine::getCharIndices(le_int32 charIndices[], le_int32 indexBase, LEErrorCode &success) const
-{
-    fGlyphStorage->getCharIndices(charIndices, indexBase, success);
-}
-
-void LayoutEngine::getCharIndices(le_int32 charIndices[], LEErrorCode &success) const
-{
-    fGlyphStorage->getCharIndices(charIndices, success);
-}
-
-// Copy the glyphs into caller's (32-bit) glyph array, OR in extraBits
-void LayoutEngine::getGlyphs(le_uint32 glyphs[], le_uint32 extraBits, LEErrorCode &success) const
-{
-    fGlyphStorage->getGlyphs(glyphs, extraBits, success);
-}
-
-void LayoutEngine::getGlyphs(LEGlyphID glyphs[], LEErrorCode &success) const
-{
-    fGlyphStorage->getGlyphs(glyphs, success);
-}
-
-
-void LayoutEngine::getGlyphPositions(float positions[], LEErrorCode &success) const
-{
-    fGlyphStorage->getGlyphPositions(positions, success);
-}
-
-void LayoutEngine::getGlyphPosition(le_int32 glyphIndex, float &x, float &y, LEErrorCode &success) const
-{
-    fGlyphStorage->getGlyphPosition(glyphIndex, x, y, success);
-}
-
-le_int32 LayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-                LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    LEReferenceTo<GlyphSubstitutionTableHeader> canonGSUBTable((GlyphSubstitutionTableHeader *) CanonShaping::glyphSubstitutionTable);
-    LETag scriptTag  = OpenTypeLayoutEngine::getScriptTag(fScriptCode);
-    LETag langSysTag = OpenTypeLayoutEngine::getLangSysTag(fLanguageCode);
-    le_int32 i, dir = 1, out = 0, outCharCount = count;
-
-    if (canonGSUBTable->coversScript(canonGSUBTable,scriptTag, success) || LE_SUCCESS(success)) {
-        CharSubstitutionFilter *substitutionFilter = new CharSubstitutionFilter(fFontInstance);
-        if (substitutionFilter == NULL) {
-            success = LE_MEMORY_ALLOCATION_ERROR;
-            return 0;
-        }
-
-        const LEUnicode *inChars = &chars[offset];
-        LEUnicode *reordered = NULL;
-        LEGlyphStorage fakeGlyphStorage;
-
-        fakeGlyphStorage.allocateGlyphArray(count, rightToLeft, success);
-
-        if (LE_FAILURE(success)) {
-            delete substitutionFilter;
-            return 0;
-        }
-
-        // This is the cheapest way to get mark reordering only for Hebrew.
-        // We could just do the mark reordering for all scripts, but most
-        // of them probably don't need it...
-        if (fScriptCode == hebrScriptCode) {
-          reordered = LE_NEW_ARRAY(LEUnicode, count);
-          
-          if (reordered == NULL) {
-            delete substitutionFilter;
-            success = LE_MEMORY_ALLOCATION_ERROR;
-            return 0;
-          }
-          
-          CanonShaping::reorderMarks(&chars[offset], count, rightToLeft, reordered, fakeGlyphStorage);
-          inChars = reordered;
-        }
-
-        fakeGlyphStorage.allocateAuxData(success);
-
-        if (LE_FAILURE(success)) {
-            delete substitutionFilter;
-            return 0;
-        }
-
-        if (rightToLeft) {
-            out = count - 1;
-            dir = -1;
-        }
-
-        for (i = 0; i < count; i += 1, out += dir) {
-            fakeGlyphStorage[out] = (LEGlyphID) inChars[i];
-            fakeGlyphStorage.setAuxData(out, canonFeatures, success);
-        }
-
-        if (reordered != NULL) {
-          LE_DELETE_ARRAY(reordered);
-        }
-
-        outCharCount = canonGSUBTable->process(canonGSUBTable, fakeGlyphStorage, rightToLeft, scriptTag, langSysTag, (const GlyphDefinitionTableHeader*)NULL, substitutionFilter, canonFeatureMap, canonFeatureMapCount, FALSE, success);
-
-        if (LE_FAILURE(success)) {
-            delete substitutionFilter;
-            return 0;
-        }
-
-        out = (rightToLeft? outCharCount - 1 : 0);
-
-        /*
-         * The char indices array in fakeGlyphStorage has the correct mapping
-         * back to the original input characters. Save it in glyphStorage. The
-         * subsequent call to glyphStoratge.allocateGlyphArray will keep this
-         * array rather than allocating and initializing a new one.
-         */
-        glyphStorage.adoptCharIndicesArray(fakeGlyphStorage);
-
-        outChars = LE_NEW_ARRAY(LEUnicode, outCharCount);
-
-        if (outChars == NULL) {
-            delete substitutionFilter;
-            success = LE_MEMORY_ALLOCATION_ERROR;
-            return 0;
-        }
-
-        for (i = 0; i < outCharCount; i += 1, out += dir) {
-            outChars[out] = (LEUnicode) LE_GET_GLYPH(fakeGlyphStorage[i]);
-        }
-
-        delete substitutionFilter;
-    }
-
-    return outCharCount;
-}
-
-le_int32 LayoutEngine::computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-                                            LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    LEUnicode *outChars = NULL;
-    le_int32 outCharCount = characterProcessing(chars, offset, count, max, rightToLeft, outChars, glyphStorage, success);
-
-    if (outChars != NULL) {
-        mapCharsToGlyphs(outChars, 0, outCharCount, rightToLeft, rightToLeft, glyphStorage, success);
-        LE_DELETE_ARRAY(outChars); // FIXME: a subclass may have allocated this, in which case this delete might not work...
-    } else {
-        mapCharsToGlyphs(chars, offset, count, rightToLeft, rightToLeft, glyphStorage, success);
-    }
-
-    return glyphStorage.getGlyphCount();
-}
-
-// Input: glyphs
-// Output: positions
-void LayoutEngine::positionGlyphs(LEGlyphStorage &glyphStorage, float x, float y, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    glyphStorage.allocatePositions(success);
-
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    le_int32 i, glyphCount = glyphStorage.getGlyphCount();
-
-    for (i = 0; i < glyphCount; i += 1) {
-        LEPoint advance;
-
-        glyphStorage.setPosition(i, x, y, success);
-
-        fFontInstance->getGlyphAdvance(glyphStorage[i], advance);
-        x += advance.fX;
-        y += advance.fY;
-    }
-
-    glyphStorage.setPosition(glyphCount, x, y, success);
-}
-
-void LayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool  reverse,
-                                        LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-
-    LEReferenceTo<GlyphDefinitionTableHeader> gdefTable((GlyphDefinitionTableHeader *) CanonShaping::glyphDefinitionTable,
-                                                        CanonShaping::glyphDefinitionTableLen);
-    CanonMarkFilter filter(gdefTable, success);
-
-    adjustMarkGlyphs(&chars[offset], count, reverse, glyphStorage, &filter, success);
-
-    if (fTypoFlags & LE_Kerning_FEATURE_FLAG) { /* kerning enabled */
-      LETableReference kernTable(fFontInstance, LE_KERN_TABLE_TAG, success);
-      KernTable kt(kernTable, success);
-      kt.process(glyphStorage, success);
-    }
-
-    // default is no adjustments
-    return;
-}
-
-void LayoutEngine::adjustMarkGlyphs(LEGlyphStorage &glyphStorage, LEGlyphFilter *markFilter, LEErrorCode &success)
-{
-    float xAdjust = 0;
-    le_int32 p, glyphCount = glyphStorage.getGlyphCount();
-
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    if (markFilter == NULL) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-
-    float ignore, prev;
-
-    glyphStorage.getGlyphPosition(0, prev, ignore, success);
-
-    for (p = 0; p < glyphCount; p += 1) {
-        float next, xAdvance;
-
-        glyphStorage.getGlyphPosition(p + 1, next, ignore, success);
-
-        xAdvance = next - prev;
-        glyphStorage.adjustPosition(p, xAdjust, 0, success);
-
-        if (markFilter->accept(glyphStorage[p])) {
-            xAdjust -= xAdvance;
-        }
-
-        prev = next;
-    }
-
-    glyphStorage.adjustPosition(glyphCount, xAdjust, 0, success);
-}
-
-void LayoutEngine::adjustMarkGlyphs(const LEUnicode chars[], le_int32 charCount, le_bool reverse, LEGlyphStorage &glyphStorage, LEGlyphFilter *markFilter, LEErrorCode &success)
-{
-    float xAdjust = 0;
-    le_int32 c = 0, direction = 1, p;
-    le_int32 glyphCount = glyphStorage.getGlyphCount();
-
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    if (markFilter == NULL) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-
-    if (reverse) {
-        c = glyphCount - 1;
-        direction = -1;
-    }
-
-    float ignore, prev;
-
-    glyphStorage.getGlyphPosition(0, prev, ignore, success);
-
-    for (p = 0; p < charCount; p += 1, c += direction) {
-        float next, xAdvance;
-
-        glyphStorage.getGlyphPosition(p + 1, next, ignore, success);
-
-        xAdvance = next - prev;
-        glyphStorage.adjustPosition(p, xAdjust, 0, success);
-
-        if (markFilter->accept(chars[c])) {
-            xAdjust -= xAdvance;
-        }
-
-        prev = next;
-    }
-
-    glyphStorage.adjustPosition(glyphCount, xAdjust, 0, success);
-}
-
-const void *LayoutEngine::getFontTable(LETag tableTag, size_t &length) const
-{
-  return fFontInstance->getFontTable(tableTag, length);
-}
-
-void LayoutEngine::mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, le_bool mirror,
-                                    LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    glyphStorage.allocateGlyphArray(count, reverse, success);
-
-    DefaultCharMapper charMapper(TRUE, mirror);
-
-    fFontInstance->mapCharsToGlyphs(chars, offset, count, reverse, &charMapper, fFilterZeroWidth, glyphStorage);
-}
-
-// Input: characters, font?
-// Output: glyphs, positions, char indices
-// Returns: number of glyphs
-le_int32 LayoutEngine::layoutChars(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-                              float x, float y, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    le_int32 glyphCount;
-
-    if (fGlyphStorage->getGlyphCount() > 0) {
-        fGlyphStorage->reset();
-    }
-
-    glyphCount = computeGlyphs(chars, offset, count, max, rightToLeft, *fGlyphStorage, success);
-    positionGlyphs(*fGlyphStorage, x, y, success);
-    adjustGlyphPositions(chars, offset, count, rightToLeft, *fGlyphStorage, success);
-
-    return glyphCount;
-}
-
-void LayoutEngine::reset()
-{
-  if(fGlyphStorage!=NULL) {
-    fGlyphStorage->reset();
-  }
-}
-
-LayoutEngine *LayoutEngine::layoutEngineFactory(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, LEErrorCode &success)
-{
-  //kerning and ligatures - by default
-  return LayoutEngine::layoutEngineFactory(fontInstance, scriptCode, languageCode, LE_DEFAULT_FEATURE_FLAG, success);
-}
-
-LayoutEngine *LayoutEngine::layoutEngineFactory(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags, LEErrorCode &success)
-{
-    static const le_uint32 gsubTableTag = LE_GSUB_TABLE_TAG;
-    static const le_uint32 mortTableTag = LE_MORT_TABLE_TAG;
-    static const le_uint32 morxTableTag = LE_MORX_TABLE_TAG;
-
-    if (LE_FAILURE(success)) {
-        return NULL;
-    }
-
-    LEReferenceTo<GlyphSubstitutionTableHeader> gsubTable(fontInstance,gsubTableTag,success);
-    LayoutEngine *result = NULL;
-    LETag scriptTag   = 0x00000000;
-    LETag languageTag = 0x00000000;
-    LETag v2ScriptTag = OpenTypeLayoutEngine::getV2ScriptTag(scriptCode);
-
-    // Right now, only invoke V2 processing for Devanagari.  TODO: Allow more V2 scripts as they are
-    // properly tested.
-
-    if ( v2ScriptTag == dev2ScriptTag && gsubTable.isValid() && gsubTable->coversScript(gsubTable, v2ScriptTag, success )) {
-      result = new IndicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, TRUE, gsubTable, success);
-    }
-    else if (gsubTable.isValid() && gsubTable->coversScript(gsubTable, scriptTag = OpenTypeLayoutEngine::getScriptTag(scriptCode), success)) {
-        switch (scriptCode) {
-        case bengScriptCode:
-        case devaScriptCode:
-        case gujrScriptCode:
-        case kndaScriptCode:
-        case mlymScriptCode:
-        case oryaScriptCode:
-        case guruScriptCode:
-        case tamlScriptCode:
-        case teluScriptCode:
-        case sinhScriptCode:
-            result = new IndicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, FALSE, gsubTable, success);
-            break;
-
-        case arabScriptCode:
-            result = new ArabicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success);
-            break;
-
-        case hebrScriptCode:
-            // Disable hebrew ligatures since they have only archaic uses, see ticket #8318
-            result = new OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags & ~kTypoFlagLiga, gsubTable, success);
-            break;
-
-        case hangScriptCode:
-            result = new HangulOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success);
-            break;
-
-        case haniScriptCode:
-            languageTag = OpenTypeLayoutEngine::getLangSysTag(languageCode);
-
-            switch (languageCode) {
-            case korLanguageCode:
-            case janLanguageCode:
-            case zhtLanguageCode:
-            case zhsLanguageCode:
-              if (gsubTable->coversScriptAndLanguage(gsubTable, scriptTag, languageTag, success, TRUE)) {
-                    result = new HanOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success);
-                    break;
-              }
-
-                // note: falling through to default case.
-            default:
-                result = new OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success);
-                break;
-            }
-
-            break;
-
-        case tibtScriptCode:
-            result = new TibetanOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success);
-            break;
-
-        case khmrScriptCode:
-            result = new KhmerOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success);
-            break;
-
-        default:
-            result = new OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success);
-            break;
-        }
-    } else {
-        LEReferenceTo<MorphTableHeader2> morxTable(fontInstance, morxTableTag, success);
-        if (LE_SUCCESS(success) && morxTable.isValid() && SWAPL(morxTable->version)==0x00020000) {
-          result = new GXLayoutEngine2(fontInstance, scriptCode, languageCode, morxTable, typoFlags, success);
-        } else {
-          LEReferenceTo<MorphTableHeader> mortTable(fontInstance, mortTableTag, success);
-          if (LE_SUCCESS(success) && mortTable.isValid() && SWAPL(mortTable->version)==0x00010000) { // mort
-            result = new GXLayoutEngine(fontInstance, scriptCode, languageCode, mortTable, success);
-            } else {
-                switch (scriptCode) {
-                    case bengScriptCode:
-                    case devaScriptCode:
-                    case gujrScriptCode:
-                    case kndaScriptCode:
-                    case mlymScriptCode:
-                    case oryaScriptCode:
-                    case guruScriptCode:
-                    case tamlScriptCode:
-                    case teluScriptCode:
-                    case sinhScriptCode:
-                    {
-                        result = new IndicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success);
-                        break;
-                    }
-
-                    case arabScriptCode:
-                        //case hebrScriptCode:
-                        result = new UnicodeArabicOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success);
-                        break;
-
-                        //case hebrScriptCode:
-                        //    return new HebrewOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags);
-
-                    case thaiScriptCode:
-                        result = new ThaiLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success);
-                        break;
-
-                    case hangScriptCode:
-                        result = new HangulOpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success);
-                        break;
-
-                    default:
-                        result = new LayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success);
-                        break;
-                }
-            }
-        }
-    }
-
-    if (result && LE_FAILURE(success)) {
-               delete result;
-               result = NULL;
-       }
-
-    if (result == NULL) {
-        success = LE_MEMORY_ALLOCATION_ERROR;
-    }
-
-    return result;
-}
-
-LayoutEngine::~LayoutEngine() {
-    delete fGlyphStorage;
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/LayoutEngine.h b/icu4c/source/layout/LayoutEngine.h
deleted file mode 100644 (file)
index 03d79a7..0000000
+++ /dev/null
@@ -1,520 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- * (C) Copyright IBM Corp. and others 1998-2014 - All Rights Reserved
- */
-
-#ifndef __LAYOUTENGINE_H
-#define __LAYOUTENGINE_H
-
-#include "LETypes.h"
-
-/**
- * \file 
- * \brief C++ API: DEPRECATED: Virtual base class for complex text layout.
- */
-
-U_NAMESPACE_BEGIN
-
-class LEFontInstance;
-class LEGlyphFilter;
-class LEGlyphStorage;
-
-/**
- * NOTE: This class is deprecated, please instead use HarfBuzz.
- * See: http://www.freedesktop.org/wiki/Software/HarfBuzz/ 
- * and http://userguide.icu-project.org/layoutengine
- *
- * This is a virtual base class used to do complex text layout. The text must all
- * be in a single font, script, and language. An instance of a LayoutEngine can be
- * created by calling the layoutEngineFactory method. Fonts are identified by
- * instances of the LEFontInstance class. Script and language codes are identified
- * by integer codes, which are defined in ScriptAndLanuageTags.h.
- *
- * Note that this class is not public API. It is declared public so that it can be
- * exported from the library that it is a part of.
- *
- * The input to the layout process is an array of characters in logical order,
- * and a starting X, Y position for the text. The output is an array of glyph indices,
- * an array of character indices for the glyphs, and an array of glyph positions.
- * These arrays are protected members of LayoutEngine which can be retreived by a
- * public method. The reset method can be called to free these arrays so that the
- * LayoutEngine can be reused.
- *
- * The layout process is done in three steps. There is a protected virtual method
- * for each step. These methods have a default implementation which only does
- * character to glyph mapping and default positioning using the glyph's advance
- * widths. Subclasses can override these methods for more advanced layout.
- * There is a public method which invokes the steps in the correct order.
- * 
- * The steps are:
- *
- * 1) Glyph processing - character to glyph mapping and any other glyph processing
- *    such as ligature substitution and contextual forms.
- *
- * 2) Glyph positioning - position the glyphs based on their advance widths.
- *
- * 3) Glyph position adjustments - adjustment of glyph positions for kerning,
- *    accent placement, etc.
- *
- * NOTE: in all methods below, output parameters are references to pointers so
- * the method can allocate and free the storage as needed. All storage allocated
- * in this way is owned by the object which created it, and will be freed when it
- * is no longer needed, or when the object's destructor is invoked.
- *
- * @see LEFontInstance
- * @see ScriptAndLanguageTags.h
- *
- * @deprecated ICU 54. See {@link icu::LayoutEngine}
- *  Instead, please use HarfBuzz.
- *         see http://www.freedesktop.org/wiki/Software/HarfBuzz/ 
- *         and http://userguide.icu-project.org/layoutengine
- */
-class U_LAYOUT_API LayoutEngine : public UObject {
-public:
-#ifndef U_HIDE_INTERNAL_API
-    /** @internal Flag to request kerning. Use LE_Kerning_FEATURE_FLAG instead. */
-    static const le_int32 kTypoFlagKern;
-    /** @internal Flag to request ligatures. Use LE_Ligatures_FEATURE_FLAG instead. */
-    static const le_int32 kTypoFlagLiga;       
-#endif  /* U_HIDE_INTERNAL_API */
-
-protected:
-    /**
-     * The object which holds the glyph storage
-     *
-     * @internal
-     */
-    LEGlyphStorage *fGlyphStorage;
-
-    /**
-     * The font instance for the text font.
-     *
-     * @see LEFontInstance
-     *
-     * @internal
-     */
-    const LEFontInstance *fFontInstance;
-
-    /**
-     * The script code for the text
-     *
-     * @see ScriptAndLanguageTags.h for script codes.
-     *
-     * @internal
-     */
-    le_int32 fScriptCode;
-
-    /**
-     * The langauge code for the text
-     *
-     * @see ScriptAndLanguageTags.h for language codes.
-     *
-     * @internal
-     */
-    le_int32 fLanguageCode;
-
-    /**
-     * The typographic control flags
-     *
-     * @internal
-     */
-    le_int32 fTypoFlags;
-
-    /**
-     * <code>TRUE</code> if <code>mapCharsToGlyphs</code> should replace ZWJ / ZWNJ with a glyph
-     * with no contours.
-     *
-     * @internal
-     */
-    le_bool fFilterZeroWidth;
-
-#ifndef U_HIDE_INTERNAL_API
-    /**
-     * This constructs an instance for a given font, script and language. Subclass constructors
-     * must call this constructor.
-     *
-     * @param fontInstance - the font for the text
-     * @param scriptCode - the script for the text
-     * @param languageCode - the language for the text
-     * @param typoFlags - the typographic control flags for the text (a bitfield).  Use kTypoFlagKern
-     * if kerning is desired, kTypoFlagLiga if ligature formation is desired.  Others are reserved.
-     * @param success - set to an error code if the operation fails
-     *
-     * @see LEFontInstance
-     * @see ScriptAndLanguageTags.h
-     *
-     * @internal
-     */
-    LayoutEngine(const LEFontInstance *fontInstance,
-                 le_int32 scriptCode,
-                 le_int32 languageCode,
-                 le_int32 typoFlags,
-                 LEErrorCode &success);
-#endif  /* U_HIDE_INTERNAL_API */
-
-    // Do not enclose the protected default constructor with #ifndef U_HIDE_INTERNAL_API
-    // or else the compiler will create a public default constructor.
-    /**
-     * This overrides the default no argument constructor to make it
-     * difficult for clients to call it. Clients are expected to call
-     * layoutEngineFactory.
-     *
-     * @internal
-     */
-    LayoutEngine();
-
-    /**
-     * This method does any required pre-processing to the input characters. It
-     * may generate output characters that differ from the input charcters due to
-     * insertions, deletions, or reorderings. In such cases, it will also generate an
-     * output character index array reflecting these changes.
-     *
-     * Subclasses must override this method.
-     *
-     * Input parameters:
-     * @param chars - the input character context
-     * @param offset - the index of the first character to process
-     * @param count - the number of characters to process
-     * @param max - the number of characters in the input context
-     * @param rightToLeft - TRUE if the characters are in a right to left directional run
-     * @param outChars - the output character array, if different from the input
-     * @param glyphStorage - the object that holds the per-glyph storage. The character index array may be set.
-     * @param success - set to an error code if the operation fails
-     *
-     * @return the output character count (input character count if no change)
-     *
-     * @internal
-     */
-    virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-            LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    /**
-     * This method does the glyph processing. It converts an array of characters
-     * into an array of glyph indices and character indices. The characters to be
-     * processed are passed in a surrounding context. The context is specified as
-     * a starting address and a maximum character count. An offset and a count are
-     * used to specify the characters to be processed.
-     *
-     * The default implementation of this method only does character to glyph mapping.
-     * Subclasses needing more elaborate glyph processing must override this method.
-     *
-     * Input parameters:
-     * @param chars - the character context
-     * @param offset - the offset of the first character to process
-     * @param count - the number of characters to process
-     * @param max - the number of characters in the context.
-     * @param rightToLeft - TRUE if the text is in a right to left directional run
-     * @param glyphStorage - the object which holds the per-glyph storage. The glyph and char indices arrays
-     *                       will be set.
-     *
-     * Output parameters:
-     * @param success - set to an error code if the operation fails
-     *
-     * @return the number of glyphs in the glyph index array
-     *
-     * @internal
-     */
-    virtual le_int32 computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    /**
-     * This method does basic glyph positioning. The default implementation positions
-     * the glyphs based on their advance widths. This is sufficient for most uses. It
-     * is not expected that many subclasses will override this method.
-     *
-     * Input parameters:
-     * @param glyphStorage - the object which holds the per-glyph storage. The glyph position array will be set.
-     * @param x - the starting X position
-     * @param y - the starting Y position
-     * @param success - set to an error code if the operation fails
-     *
-     * @internal
-     */
-    virtual void positionGlyphs(LEGlyphStorage &glyphStorage, float x, float y, LEErrorCode &success);
-
-    /**
-     * This method does positioning adjustments like accent positioning and
-     * kerning. The default implementation does nothing. Subclasses needing
-     * position adjustments must override this method.
-     *
-     * Note that this method has both characters and glyphs as input so that
-     * it can use the character codes to determine glyph types if that information
-     * isn't directly available. (e.g. Some Arabic OpenType fonts don't have a GDEF
-     * table)
-     *
-     * @param chars - the input character context
-     * @param offset - the offset of the first character to process
-     * @param count - the number of characters to process
-     * @param reverse - <code>TRUE</code> if the glyphs in the glyph array have been reordered
-     * @param glyphStorage - the object which holds the per-glyph storage. The glyph positions will be
-     *                       adjusted as needed.
-     * @param success - output parameter set to an error code if the operation fails
-     *
-     * @internal
-     */
-    virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    /**
-     * This method gets a table from the font associated with
-     * the text. The default implementation gets the table from
-     * the font instance. Subclasses which need to get the tables
-     * some other way must override this method.
-     * 
-     * @param tableTag - the four byte table tag.
-     * @param length - length to use
-     *
-     * @return the address of the table.
-     *
-     * @internal
-     */
-    virtual const void *getFontTable(LETag tableTag, size_t &length) const;
-
-    /**
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual const void *getFontTable(LETag tableTag) const { size_t ignored; return getFontTable(tableTag, ignored); }
-
-    /**
-     * This method does character to glyph mapping. The default implementation
-     * uses the font instance to do the mapping. It will allocate the glyph and
-     * character index arrays if they're not already allocated. If it allocates the
-     * character index array, it will fill it it.
-     *
-     * This method supports right to left
-     * text with the ability to store the glyphs in reverse order, and by supporting
-     * character mirroring, which will replace a character which has a left and right
-     * form, such as parens, with the opposite form before mapping it to a glyph index.
-     *
-     * Input parameters:
-     * @param chars - the input character context
-     * @param offset - the offset of the first character to be mapped
-     * @param count - the number of characters to be mapped
-     * @param reverse - if <code>TRUE</code>, the output will be in reverse order
-     * @param mirror - if <code>TRUE</code>, do character mirroring
-     * @param glyphStorage - the object which holds the per-glyph storage. The glyph and char
-     *                       indices arrays will be filled in.
-     * @param success - set to an error code if the operation fails
-     *
-     * @see LEFontInstance
-     *
-     * @internal
-     */
-    virtual void mapCharsToGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, le_bool mirror, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-#ifndef U_HIDE_INTERNAL_API
-    /**
-     * This is a convenience method that forces the advance width of mark
-     * glyphs to be zero, which is required for proper selection and highlighting.
-     * 
-     * @param glyphStorage - the object containing the per-glyph storage. The positions array will be modified.
-     * @param markFilter - used to identify mark glyphs
-     * @param success - output parameter set to an error code if the operation fails
-     *
-     * @see LEGlyphFilter
-     *
-     * @internal
-     */
-    static void adjustMarkGlyphs(LEGlyphStorage &glyphStorage, LEGlyphFilter *markFilter, LEErrorCode &success);
-
-
-    /**
-     * This is a convenience method that forces the advance width of mark
-     * glyphs to be zero, which is required for proper selection and highlighting.
-     * This method uses the input characters to identify marks. This is required in
-     * cases where the font does not contain enough information to identify them based
-     * on the glyph IDs.
-     * 
-     * @param chars - the array of input characters
-     * @param charCount - the number of input characers
-     * @param glyphStorage - the object containing the per-glyph storage. The positions array will be modified.
-     * @param reverse - <code>TRUE</code> if the glyph array has been reordered
-     * @param markFilter - used to identify mark glyphs
-     * @param success - output parameter set to an error code if the operation fails
-     *
-     * @see LEGlyphFilter
-     *
-     * @internal
-     */
-    static void adjustMarkGlyphs(const LEUnicode chars[], le_int32 charCount, le_bool reverse, LEGlyphStorage &glyphStorage, LEGlyphFilter *markFilter, LEErrorCode &success);
-#endif  /* U_HIDE_INTERNAL_API */
-
-public:
-    /**
-     * The destructor. It will free any storage allocated for the
-     * glyph, character index and position arrays by calling the reset
-     * method. It is declared virtual so that it will be invoked by the
-     * subclass destructors.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual ~LayoutEngine();
-
-    /**
-     * This method will invoke the layout steps in their correct order by calling
-     * the computeGlyphs, positionGlyphs and adjustGlyphPosition methods. It will
-     * compute the glyph, character index and position arrays.
-     *
-     * @param chars - the input character context
-     * @param offset - the offset of the first character to process
-     * @param count - the number of characters to process
-     * @param max - the number of characters in the input context
-     * @param rightToLeft - TRUE if the characers are in a right to left directional run
-     * @param x - the initial X position
-     * @param y - the initial Y position
-     * @param success - output parameter set to an error code if the operation fails
-     *
-     * @return the number of glyphs in the glyph array
-     *
-     * Note: The glyph, character index and position array can be accessed
-     * using the getter methods below.
-     *
-     * Note: If you call this method more than once, you must call the reset()
-     * method first to free the glyph, character index and position arrays
-     * allocated by the previous call.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual le_int32 layoutChars(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, float x, float y, LEErrorCode &success);
-
-    /**
-     * This method returns the number of glyphs in the glyph array. Note
-     * that the number of glyphs will be greater than or equal to the number
-     * of characters used to create the LayoutEngine.
-     *
-     * @return the number of glyphs in the glyph array
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    le_int32 getGlyphCount() const;
-
-    /**
-     * This method copies the glyph array into a caller supplied array.
-     * The caller must ensure that the array is large enough to hold all
-     * the glyphs.
-     *
-     * @param glyphs - the destiniation glyph array
-     * @param success - set to an error code if the operation fails
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    void getGlyphs(LEGlyphID glyphs[], LEErrorCode &success) const;
-
-    /**
-     * This method copies the glyph array into a caller supplied array,
-     * ORing in extra bits. (This functionality is needed by the JDK,
-     * which uses 32 bits pre glyph idex, with the high 16 bits encoding
-     * the composite font slot number)
-     *
-     * @param glyphs - the destination (32 bit) glyph array
-     * @param extraBits - this value will be ORed with each glyph index
-     * @param success - set to an error code if the operation fails
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual void getGlyphs(le_uint32 glyphs[], le_uint32 extraBits, LEErrorCode &success) const;
-
-    /**
-     * This method copies the character index array into a caller supplied array.
-     * The caller must ensure that the array is large enough to hold a
-     * character index for each glyph.
-     *
-     * @param charIndices - the destiniation character index array
-     * @param success - set to an error code if the operation fails
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    void getCharIndices(le_int32 charIndices[], LEErrorCode &success) const;
-
-    /**
-     * This method copies the character index array into a caller supplied array.
-     * The caller must ensure that the array is large enough to hold a
-     * character index for each glyph.
-     *
-     * @param charIndices - the destiniation character index array
-     * @param indexBase - an offset which will be added to each index
-     * @param success - set to an error code if the operation fails
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    void getCharIndices(le_int32 charIndices[], le_int32 indexBase, LEErrorCode &success) const;
-
-    /**
-     * This method copies the position array into a caller supplied array.
-     * The caller must ensure that the array is large enough to hold an
-     * X and Y position for each glyph, plus an extra X and Y for the
-     * advance of the last glyph.
-     *
-     * @param positions - the destiniation position array
-     * @param success - set to an error code if the operation fails
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    void getGlyphPositions(float positions[], LEErrorCode &success) const;
-
-    /**
-     * This method returns the X and Y position of the glyph at
-     * the given index.
-     *
-     * Input parameters:
-     * @param glyphIndex - the index of the glyph
-     *
-     * Output parameters:
-     * @param x - the glyph's X position
-     * @param y - the glyph's Y position
-     * @param success - set to an error code if the operation fails
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    void getGlyphPosition(le_int32 glyphIndex, float &x, float &y, LEErrorCode &success) const;
-
-    /**
-     * This method frees the glyph, character index and position arrays
-     * so that the LayoutEngine can be reused to layout a different
-     * characer array. (This method is also called by the destructor)
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual void reset();
-
-    /**
-     * This method returns a LayoutEngine capable of laying out text
-     * in the given font, script and langauge. Note that the LayoutEngine
-     * returned may be a subclass of LayoutEngine.
-     *
-     * @param fontInstance - the font of the text
-     * @param scriptCode - the script of the text
-     * @param languageCode - the language of the text
-     * @param success - output parameter set to an error code if the operation fails
-     *
-     * @return a LayoutEngine which can layout text in the given font.
-     *
-     * @see LEFontInstance
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    static LayoutEngine *layoutEngineFactory(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, LEErrorCode &success);
-
-    /**
-     * Override of existing call that provides flags to control typography.
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    static LayoutEngine *layoutEngineFactory(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typo_flags, LEErrorCode &success);
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    static UClassID getStaticClassID();
-
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/LayoutTables.h b/icu4c/source/layout/LayoutTables.h
deleted file mode 100644 (file)
index dfe1d28..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#ifndef __LAYOUTTABLES_H
-#define __LAYOUTTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-
-U_NAMESPACE_BEGIN
-
-#define ANY_NUMBER 1
-
-typedef le_int16 ByteOffset;
-typedef le_int16 WordOffset;
-
-U_NAMESPACE_END
-#endif
-
diff --git a/icu4c/source/layout/LigatureSubstProc.cpp b/icu4c/source/layout/LigatureSubstProc.cpp
deleted file mode 100644 (file)
index 57bd711..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "StateTables.h"
-#include "MorphStateTables.h"
-#include "SubtableProcessor.h"
-#include "StateTableProcessor.h"
-#include "LigatureSubstProc.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-#define ExtendedComplement(m) ((le_int32) (~((le_uint32) (m))))
-#define SignBit(m) ((ExtendedComplement(m) >> 1) & (le_int32)(m))
-#define SignExtend(v,m) (((v) & SignBit(m))? ((v) | ExtendedComplement(m)): (v))
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LigatureSubstitutionProcessor)
-
-  LigatureSubstitutionProcessor::LigatureSubstitutionProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success)
-: StateTableProcessor(morphSubtableHeader, success), ligatureSubstitutionHeader(morphSubtableHeader, success)
-{
-    if(LE_FAILURE(success)) return;
-    ligatureActionTableOffset = SWAPW(ligatureSubstitutionHeader->ligatureActionTableOffset);
-    componentTableOffset = SWAPW(ligatureSubstitutionHeader->componentTableOffset);
-    ligatureTableOffset = SWAPW(ligatureSubstitutionHeader->ligatureTableOffset);
-
-    entryTable = LEReferenceToArrayOf<LigatureSubstitutionStateEntry>(stHeader, success, entryTableOffset, LE_UNBOUNDED_ARRAY);
-}
-
-LigatureSubstitutionProcessor::~LigatureSubstitutionProcessor()
-{
-}
-
-void LigatureSubstitutionProcessor::beginStateTable()
-{
-    m = -1;
-}
-
-ByteOffset LigatureSubstitutionProcessor::processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex index)
-{
-  LEErrorCode success = LE_NO_ERROR;
-  const LigatureSubstitutionStateEntry *entry = entryTable.getAlias(index, success);
-
-    ByteOffset newState = SWAPW(entry->newStateOffset);
-    le_int16 flags = SWAPW(entry->flags);
-
-    if (flags & lsfSetComponent) {
-        if (++m >= nComponents) {
-            m = 0;
-        }
-
-        componentStack[m] = currGlyph;
-    } else if ( m == -1) {
-        // bad font- skip this glyph.
-        currGlyph++;
-        return newState;
-    }
-
-    ByteOffset actionOffset = flags & lsfActionOffsetMask;
-
-    if (actionOffset != 0) {
-      LEReferenceTo<LigatureActionEntry> ap(stHeader, success, actionOffset);
-        LigatureActionEntry action;
-        le_int32 offset, i = 0;
-        le_int32 stack[nComponents];
-        le_int16 mm = -1;
-
-        do {
-            le_uint32 componentGlyph = componentStack[m--];
-
-            action = SWAPL(*ap.getAlias());
-            ap.addObject(success); // ap++
-
-            if (m < 0) {
-                m = nComponents - 1;
-            }
-
-            offset = action & lafComponentOffsetMask;
-            if (offset != 0) {
-              LEReferenceToArrayOf<le_int16> offsetTable(stHeader, success, 2 * SignExtend(offset, lafComponentOffsetMask), LE_UNBOUNDED_ARRAY);
-
-              if(LE_FAILURE(success)) {
-                  currGlyph++;
-                  LE_DEBUG_BAD_FONT("off end of ligature substitution header");
-                  return newState; // get out! bad font
-              }
-              if(componentGlyph > (le_uint32)glyphStorage.getGlyphCount()) {
-                LE_DEBUG_BAD_FONT("preposterous componentGlyph");
-                currGlyph++;
-                return newState; // get out! bad font
-              }
-              i += SWAPW(offsetTable.getObject(LE_GET_GLYPH(glyphStorage[componentGlyph]), success));
-
-                if (action & (lafLast | lafStore))  {
-                  LEReferenceTo<TTGlyphID> ligatureOffset(stHeader, success, i);
-                  TTGlyphID ligatureGlyph = SWAPW(*ligatureOffset.getAlias());
-
-                  glyphStorage[componentGlyph] = LE_SET_GLYPH(glyphStorage[componentGlyph], ligatureGlyph);
-                  if(mm==nComponents) {
-                    LE_DEBUG_BAD_FONT("exceeded nComponents");
-                    mm--; // don't overrun the stack.
-                  }
-                  stack[++mm] = componentGlyph;
-                  i = 0;
-                } else {
-                  glyphStorage[componentGlyph] = LE_SET_GLYPH(glyphStorage[componentGlyph], 0xFFFF);
-                }
-            }
-#if LE_ASSERT_BAD_FONT
-            if(m<0) {
-              LE_DEBUG_BAD_FONT("m<0")
-            }
-#endif
-        } while (!(action & lafLast)  && (m>=0) ); // stop if last bit is set, or if run out of items
-
-        while (mm >= 0) {
-          if (++m >= nComponents) {
-            m = 0;
-          }
-          
-          componentStack[m] = stack[mm--];
-        }
-    }
-
-    if (!(flags & lsfDontAdvance)) {
-        // should handle reverse too!
-        currGlyph += 1;
-    }
-
-    return newState;
-}
-
-void LigatureSubstitutionProcessor::endStateTable()
-{
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/LigatureSubstProc.h b/icu4c/source/layout/LigatureSubstProc.h
deleted file mode 100644 (file)
index 8e1dfbe..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2014 - All Rights Reserved
- *
- */
-
-#ifndef __LIGATURESUBSTITUTIONPROCESSOR_H
-#define __LIGATURESUBSTITUTIONPROCESSOR_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor.h"
-#include "StateTableProcessor.h"
-#include "LigatureSubstitution.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-#define nComponents 16
-
-class LigatureSubstitutionProcessor : public StateTableProcessor
-{
-public:
-    virtual void beginStateTable();
-
-    virtual ByteOffset processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex index);
-
-    virtual void endStateTable();
-
-    LigatureSubstitutionProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success);
-    virtual ~LigatureSubstitutionProcessor();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    static UClassID getStaticClassID();
-
-private:
-    LigatureSubstitutionProcessor();
-
-protected:
-    ByteOffset ligatureActionTableOffset;
-    ByteOffset componentTableOffset;
-    ByteOffset ligatureTableOffset;
-
-    LEReferenceToArrayOf<LigatureSubstitutionStateEntry> entryTable;
-
-    le_int32 componentStack[nComponents];
-    le_int16 m;
-
-    LEReferenceTo<LigatureSubstitutionHeader> ligatureSubstitutionHeader;
-
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/LigatureSubstProc2.cpp b/icu4c/source/layout/LigatureSubstProc2.cpp
deleted file mode 100644 (file)
index e9ecf25..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp and Others. 1998-2014 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "StateTables.h"
-#include "MorphStateTables.h"
-#include "SubtableProcessor2.h"
-#include "StateTableProcessor2.h"
-#include "LigatureSubstProc2.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-#define ExtendedComplement(m) ((le_int32) (~((le_uint32) (m))))
-#define SignBit(m) ((ExtendedComplement(m) >> 1) & (le_int32)(m))
-#define SignExtend(v,m) (((v) & SignBit(m))? ((v) | ExtendedComplement(m)): (v))
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(LigatureSubstitutionProcessor2)
-
-LigatureSubstitutionProcessor2::LigatureSubstitutionProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success)
-  : StateTableProcessor2(morphSubtableHeader, success), 
-  ligActionOffset(0),
-  componentOffset(0), ligatureOffset(0),  entryTable(), ligatureSubstitutionHeader(morphSubtableHeader, success)
-{
-    if (LE_FAILURE(success)) return;
-
-    ligActionOffset = SWAPL(ligatureSubstitutionHeader->ligActionOffset);
-    componentOffset = SWAPL(ligatureSubstitutionHeader->componentOffset);
-    ligatureOffset = SWAPL(ligatureSubstitutionHeader->ligatureOffset);
-
-    entryTable = LEReferenceToArrayOf<LigatureSubstitutionStateEntry2>(stHeader, success, entryTableOffset, LE_UNBOUNDED_ARRAY);
-}
-
-LigatureSubstitutionProcessor2::~LigatureSubstitutionProcessor2()
-{
-}
-
-void LigatureSubstitutionProcessor2::beginStateTable()
-{
-    m = -1;
-}
-
-le_uint16 LigatureSubstitutionProcessor2::processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex2 index, LEErrorCode &success)
-{
-    const LigatureSubstitutionStateEntry2 *entry = entryTable.getAlias(index, success);
-    if(LE_FAILURE(success)) return 0;
-
-    le_uint16 nextStateIndex = SWAPW(entry->nextStateIndex);
-    le_uint16 flags = SWAPW(entry->entryFlags);
-    le_uint16 ligActionIndex = SWAPW(entry->ligActionIndex);
-    
-    if (flags & lsfSetComponent) {
-        if (++m >= nComponents) {
-            m = 0;
-        }
-        componentStack[m] = currGlyph;
-    } else if ( m == -1) {
-        // bad font- skip this glyph.
-        //LE_DEBUG_BAD_FONT("m==-1 (componentCount went negative)")
-        currGlyph+= dir;
-        return nextStateIndex;
-    }
-
-    ByteOffset actionOffset = flags & lsfPerformAction;
-
-    if (actionOffset != 0) {
-        LEReferenceTo<LigatureActionEntry> ap(stHeader, success, ligActionOffset); // byte offset
-        ap.addObject(ligActionIndex - 1, success);  // index offset ( one before the actual start, because we will pre-increment)
-        LEReferenceToArrayOf<TTGlyphID> ligatureTable(stHeader, success, ligatureOffset, LE_UNBOUNDED_ARRAY);
-        LigatureActionEntry action;
-        le_int32 offset, i = 0;
-        le_int32 stack[nComponents];
-        le_int16 mm = -1;
-
-        LEReferenceToArrayOf<le_uint16> componentTable(stHeader, success, componentOffset, LE_UNBOUNDED_ARRAY);
-        if(LE_FAILURE(success)) {
-          currGlyph+= dir;
-          return nextStateIndex; // get out! bad font
-        }
-        
-        do {
-            le_int32 componentGlyph = componentStack[m--]; // pop off
-
-            ap.addObject(success);
-            action = SWAPL(*ap.getAlias());
-
-            if (m < 0) {
-                m = nComponents - 1;
-            }
-
-            offset = action & lafComponentOffsetMask;
-            if (offset != 0) {
-                if(componentGlyph > glyphStorage.getGlyphCount() || componentGlyph < 0) {
-                  LE_DEBUG_BAD_FONT("preposterous componentGlyph");
-                  currGlyph+= dir;
-                  return nextStateIndex; // get out! bad font
-                }
-                i += SWAPW(componentTable(LE_GET_GLYPH(glyphStorage[componentGlyph]) + (SignExtend(offset, lafComponentOffsetMask)),success));
-                       
-                if (action & (lafLast | lafStore))  {
-                  TTGlyphID ligatureGlyph = SWAPW(ligatureTable(i,success));
-                    glyphStorage[componentGlyph] = LE_SET_GLYPH(glyphStorage[componentGlyph], ligatureGlyph);
-                    if(mm==nComponents) {
-                      LE_DEBUG_BAD_FONT("exceeded nComponents");
-                      mm--; // don't overrun the stack.
-                    }
-                    stack[++mm] = componentGlyph;
-                    i = 0;
-                } else {
-                    glyphStorage[componentGlyph] = LE_SET_GLYPH(glyphStorage[componentGlyph], 0xFFFF);
-                }
-            }
-#if LE_ASSERT_BAD_FONT
-            if(m<0) {
-              LE_DEBUG_BAD_FONT("m<0")
-            }
-#endif
-        } while (!(action & lafLast) && (m>=0) ); // stop if last bit is set, or if run out of items
-
-        while (mm >= 0) {
-            if (++m >= nComponents) {
-                m = 0;
-            }
-
-            componentStack[m] = stack[mm--];
-        }
-    }
-
-    if (!(flags & lsfDontAdvance)) {
-        currGlyph += dir;
-    }
-
-    return nextStateIndex;
-}
-
-void LigatureSubstitutionProcessor2::endStateTable()
-{
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/LigatureSubstProc2.h b/icu4c/source/layout/LigatureSubstProc2.h
deleted file mode 100644 (file)
index 25d1da6..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2014 - All Rights Reserved
- *
- */
-
-#ifndef __LIGATURESUBSTITUTIONPROCESSOR2_H
-#define __LIGATURESUBSTITUTIONPROCESSOR2_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor2.h"
-#include "StateTableProcessor2.h"
-#include "LigatureSubstitution.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-#define nComponents 16
-
-class LigatureSubstitutionProcessor2 : public StateTableProcessor2
-{
-public:
-    virtual void beginStateTable();
-
-    virtual le_uint16 processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, 
-                                        EntryTableIndex2 index, LEErrorCode &success);
-
-    virtual void endStateTable();
-
-    LigatureSubstitutionProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success);
-    virtual ~LigatureSubstitutionProcessor2();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    static UClassID getStaticClassID();
-
-private:
-    LigatureSubstitutionProcessor2();
-
-protected:
-    le_uint32 ligActionOffset;
-    le_uint32 componentOffset;
-    le_uint32 ligatureOffset;
-
-    LEReferenceToArrayOf<LigatureSubstitutionStateEntry2> entryTable;
-
-    le_int32 componentStack[nComponents];
-    le_int16 m;
-
-    const LEReferenceTo<LigatureSubstitutionHeader2> ligatureSubstitutionHeader;
-
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/LigatureSubstSubtables.cpp b/icu4c/source/layout/LigatureSubstSubtables.cpp
deleted file mode 100644 (file)
index 295c823..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- * (C) Copyright IBM Corp. 1998-2015 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEGlyphFilter.h"
-#include "OpenTypeTables.h"
-#include "GlyphSubstitutionTables.h"
-#include "LigatureSubstSubtables.h"
-#include "GlyphIterator.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-le_uint32 LigatureSubstitutionSubtable::process(const LETableReference &base, GlyphIterator *glyphIterator, LEErrorCode &success, const LEGlyphFilter *filter) const
-{
-    LEGlyphID glyph = glyphIterator->getCurrGlyphID();
-    le_int32 coverageIndex = getGlyphCoverage(base, glyph, success);
-
-    if (coverageIndex >= 0) {
-        Offset ligSetTableOffset = SWAPW(ligSetTableOffsetArray[coverageIndex]);
-        const LigatureSetTable *ligSetTable = (const LigatureSetTable *) ((char *) this + ligSetTableOffset);
-        le_uint16 ligCount = SWAPW(ligSetTable->ligatureCount);
-
-        for (le_uint16 lig = 0; lig < ligCount; lig += 1) {
-            Offset ligTableOffset = SWAPW(ligSetTable->ligatureTableOffsetArray[lig]);
-            const LigatureTable *ligTable = (const LigatureTable *) ((char *)ligSetTable + ligTableOffset);
-            le_uint16 compCount = SWAPW(ligTable->compCount) - 1;
-            LEReferenceToArrayOf<TTGlyphID>
-                componentArrayRef(base, success, ligTable->componentArray, compCount);
-            if (LE_FAILURE(success)) { return 0; }
-            le_int32 startPosition = glyphIterator->getCurrStreamPosition();
-            TTGlyphID ligGlyph = SWAPW(ligTable->ligGlyph);
-            le_uint16 comp;
-
-            for (comp = 0; comp < compCount; comp += 1) {
-                if (! glyphIterator->next()) {
-                    break;
-                }
-
-                if (LE_GET_GLYPH(glyphIterator->getCurrGlyphID()) != SWAPW(ligTable->componentArray[comp])) {
-                    break;
-                }
-            }
-
-            if (comp == compCount && (filter == NULL || filter->accept(LE_SET_GLYPH(glyph, ligGlyph)))) {
-                GlyphIterator tempIterator(*glyphIterator);
-                TTGlyphID deletedGlyph = tempIterator.ignoresMarks()? 0xFFFE : 0xFFFF;
-
-                while (comp > 0) {
-                    tempIterator.setCurrGlyphID(deletedGlyph);
-                    tempIterator.prev();
-
-                    comp -= 1;
-                }
-
-                tempIterator.setCurrGlyphID(ligGlyph);
-
-                return compCount + 1;
-            }
-
-            glyphIterator->setCurrStreamPosition(startPosition);
-        }
-
-    }
-
-    return 0;
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/LigatureSubstSubtables.h b/icu4c/source/layout/LigatureSubstSubtables.h
deleted file mode 100644 (file)
index e3f5915..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __LIGATURESUBSTITUTIONSUBTABLES_H
-#define __LIGATURESUBSTITUTIONSUBTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEGlyphFilter.h"
-#include "OpenTypeTables.h"
-#include "GlyphSubstitutionTables.h"
-#include "GlyphIterator.h"
-
-U_NAMESPACE_BEGIN
-
-struct LigatureSetTable
-{
-    le_uint16 ligatureCount;
-    Offset    ligatureTableOffsetArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(LigatureSetTable, ligatureTableOffsetArray)
-
-struct LigatureTable
-{
-    TTGlyphID ligGlyph;
-    le_uint16 compCount;
-    TTGlyphID componentArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(LigatureTable, componentArray)
-
-struct LigatureSubstitutionSubtable : GlyphSubstitutionSubtable
-{
-    le_uint16 ligSetCount;
-    Offset    ligSetTableOffsetArray[ANY_NUMBER];
-
-    le_uint32  process(const LETableReference &base, GlyphIterator *glyphIterator, LEErrorCode &success, const LEGlyphFilter *filter = NULL) const;
-};
-LE_VAR_ARRAY(LigatureSubstitutionSubtable, ligSetTableOffsetArray)
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/LigatureSubstitution.h b/icu4c/source/layout/LigatureSubstitution.h
deleted file mode 100644 (file)
index 496cb58..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. and Others 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __LIGATURESUBSTITUTION_H
-#define __LIGATURESUBSTITUTION_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LayoutTables.h"
-#include "StateTables.h"
-#include "MorphTables.h"
-#include "MorphStateTables.h"
-
-U_NAMESPACE_BEGIN
-
-struct LigatureSubstitutionHeader : MorphStateTableHeader
-{
-    ByteOffset ligatureActionTableOffset;
-    ByteOffset componentTableOffset;
-    ByteOffset ligatureTableOffset;
-};
-
-struct LigatureSubstitutionHeader2 : MorphStateTableHeader2
-{
-    le_uint32 ligActionOffset;
-    le_uint32 componentOffset;
-    le_uint32 ligatureOffset;
-};
-
-enum LigatureSubstitutionFlags
-{
-    lsfSetComponent     = 0x8000,
-    lsfDontAdvance      = 0x4000,
-    lsfActionOffsetMask = 0x3FFF, // N/A in morx
-    lsfPerformAction    = 0x2000
-};
-
-struct LigatureSubstitutionStateEntry : StateEntry
-{
-};
-
-struct LigatureSubstitutionStateEntry2
-{
-    le_uint16 nextStateIndex;
-    le_uint16 entryFlags;
-    le_uint16 ligActionIndex;
-};
-
-typedef le_uint32 LigatureActionEntry;
-
-enum LigatureActionFlags
-{
-    lafLast                 = 0x80000000,
-    lafStore                = 0x40000000,
-    lafComponentOffsetMask  = 0x3FFFFFFF
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/LookupProcessor.cpp b/icu4c/source/layout/LookupProcessor.cpp
deleted file mode 100644 (file)
index 8a9c274..0000000
+++ /dev/null
@@ -1,338 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. and others 1998-2015 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "OpenTypeUtilities.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "ICUFeatures.h"
-#include "Lookups.h"
-#include "ScriptAndLanguage.h"
-#include "GlyphDefinitionTables.h"
-#include "GlyphIterator.h"
-#include "LookupProcessor.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-le_uint32 LookupProcessor::applyLookupTable(const LEReferenceTo<LookupTable> &lookupTable, GlyphIterator *glyphIterator,
-                                         const LEFontInstance *fontInstance, LEErrorCode& success) const
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    le_uint16 lookupType = SWAPW(lookupTable->lookupType);
-    le_uint16 subtableCount = SWAPW(lookupTable->subTableCount);
-    le_int32 startPosition = glyphIterator->getCurrStreamPosition();
-    le_uint32 delta;
-
-    for (le_uint16 subtable = 0; subtable < subtableCount; subtable += 1) {
-      LEReferenceTo<LookupSubtable> lookupSubtable = lookupTable->getLookupSubtable(lookupTable, subtable, success);
-
-        delta = applySubtable(lookupSubtable, lookupType, glyphIterator, fontInstance, success);
-
-        if (delta > 0 && LE_FAILURE(success)) {
-            return 1;
-        }
-
-        glyphIterator->setCurrStreamPosition(startPosition);
-    }
-
-    return 1;
-}
-
-le_int32 LookupProcessor::process(LEGlyphStorage &glyphStorage, GlyphPositionAdjustments *glyphPositionAdjustments,
-                                  le_bool rightToLeft, const LEReferenceTo<GlyphDefinitionTableHeader> &glyphDefinitionTableHeader,
-                              const LEFontInstance *fontInstance, LEErrorCode& success) const
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }    
-       
-    le_int32 glyphCount = glyphStorage.getGlyphCount();
-
-    if (lookupSelectArray == NULL) {
-        return glyphCount;
-    }
-
-    GlyphIterator glyphIterator(glyphStorage, glyphPositionAdjustments,
-                                rightToLeft, 0, 0, glyphDefinitionTableHeader);
-    le_int32 newGlyphCount = glyphCount;
-
-    for (le_uint16 order = 0; order < lookupOrderCount && LE_SUCCESS(success); order += 1) {
-        le_uint16 lookup = lookupOrderArray[order];
-        FeatureMask selectMask = lookupSelectArray[lookup];
-
-        if (selectMask != 0) {
-          const LEReferenceTo<LookupTable> lookupTable = lookupListTable->getLookupTable(lookupListTable, lookup, success);
-          if (!lookupTable.isValid() ||LE_FAILURE(success) ) {
-                continue;
-            }
-            le_uint16 lookupFlags = SWAPW(lookupTable->lookupFlags);
-            
-            glyphIterator.reset(lookupFlags, selectMask);
-
-            while (glyphIterator.findFeatureTag()) {
-                applyLookupTable(lookupTable, &glyphIterator, fontInstance, success);
-                if (LE_FAILURE(success)) { 
-                    return 0;
-                }
-            }
-
-            newGlyphCount = glyphIterator.applyInsertions();
-        }
-    }
-
-    return newGlyphCount;
-}
-
-le_uint32 LookupProcessor::applySingleLookup(le_uint16 lookupTableIndex, GlyphIterator *glyphIterator,
-                                          const LEFontInstance *fontInstance, LEErrorCode& success) const
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }    
-
-    const LEReferenceTo<LookupTable> lookupTable = lookupListTable->getLookupTable(lookupListTable, lookupTableIndex, success);
-    if (!lookupTable.isValid()) {
-        success = LE_INTERNAL_ERROR;
-        return 0;
-    }
-    le_uint16 lookupFlags = SWAPW(lookupTable->lookupFlags);
-    GlyphIterator tempIterator(*glyphIterator, lookupFlags);
-    le_uint32 delta = applyLookupTable(lookupTable, &tempIterator, fontInstance, success);
-
-    return delta;
-}
-
-le_int32 LookupProcessor::selectLookups(const LEReferenceTo<FeatureTable> &featureTable, FeatureMask featureMask, le_int32 order, LEErrorCode &success)
-{
-  le_uint16 lookupCount = featureTable.isValid()? SWAPW(featureTable->lookupCount) : 0;
-  le_uint32  store = (le_uint32)order;
-    
-    LEReferenceToArrayOf<le_uint16> lookupListIndexArray(featureTable, success, featureTable->lookupListIndexArray, lookupCount);
-
-    for (le_uint16 lookup = 0; LE_SUCCESS(success) && lookup < lookupCount; lookup += 1) {
-      le_uint16 lookupListIndex = SWAPW(lookupListIndexArray.getObject(lookup,success));
-      if (lookupListIndex >= lookupSelectCount) {
-        continue;
-      }
-      if (store >= lookupOrderCount) {
-        continue;
-      }
-      
-      lookupSelectArray[lookupListIndex] |= featureMask;
-      lookupOrderArray[store++] = lookupListIndex;
-    }
-
-    return store - order;
-}
-
-LookupProcessor::LookupProcessor(const LETableReference &baseAddress,
-        Offset scriptListOffset, Offset featureListOffset, Offset lookupListOffset,
-        LETag scriptTag, LETag languageTag, const FeatureMap *featureMap, le_int32 featureMapCount, le_bool orderFeatures, 
-        LEErrorCode& success)
-    : lookupListTable(), featureListTable(), lookupSelectArray(NULL), lookupSelectCount(0),
-      lookupOrderArray(NULL), lookupOrderCount(0), fReference(baseAddress)
-{
-  LEReferenceTo<ScriptListTable> scriptListTable;
-  LEReferenceTo<LangSysTable> langSysTable;
-    le_uint16 featureCount = 0;
-    le_uint16 lookupListCount = 0;
-    le_uint16 requiredFeatureIndex;
-
-    if (LE_FAILURE(success)) {
-        return;
-    } 
-
-    if (scriptListOffset != 0) {
-      scriptListTable = LEReferenceTo<ScriptListTable>(baseAddress, success, scriptListOffset);
-      langSysTable = scriptListTable->findLanguage(scriptListTable, scriptTag, languageTag, success);
-
-      if (langSysTable.isValid() && LE_SUCCESS(success)) {
-        featureCount = SWAPW(langSysTable->featureCount);
-      }
-    }
-
-    if (featureListOffset != 0) {
-      featureListTable = LEReferenceTo<FeatureListTable>(baseAddress, success, featureListOffset);
-    }
-
-    if (lookupListOffset != 0) {
-      lookupListTable = LEReferenceTo<LookupListTable>(baseAddress,success, lookupListOffset);
-      if(LE_SUCCESS(success) && lookupListTable.isValid()) {
-        lookupListCount = SWAPW(lookupListTable->lookupCount);
-      }
-    }
-    
-    if (langSysTable.isEmpty() || featureListTable.isEmpty() || lookupListTable.isEmpty() ||
-        featureCount == 0 || lookupListCount == 0) {
-        return;
-    }
-    if(langSysTable.isValid()) {
-      requiredFeatureIndex = SWAPW(langSysTable->reqFeatureIndex);
-    }
-
-    lookupSelectArray = LE_NEW_ARRAY(FeatureMask, lookupListCount);
-    if (lookupSelectArray == NULL) {
-        success = LE_MEMORY_ALLOCATION_ERROR;
-        return;
-    }
-
-    for (int i = 0; i < lookupListCount; i += 1) {
-        lookupSelectArray[i] = 0;
-    }
-    lookupSelectCount = lookupListCount;
-
-    le_int32 count, order = 0;
-    le_uint32 featureReferences = 0;
-    LEReferenceTo<FeatureTable> featureTable;
-    LETag featureTag;
-
-    LEReferenceTo<FeatureTable> requiredFeatureTable;
-    LETag requiredFeatureTag = 0x00000000U;
-
-    // Count the total number of lookups referenced by all features. This will
-    // be the maximum number of entries in the lookupOrderArray. We can't use
-    // lookupListCount because some lookups might be referenced by more than
-    // one feature.
-    if(featureListTable.isValid() && LE_SUCCESS(success)) {
-      LEReferenceToArrayOf<le_uint16> featureIndexArray(langSysTable, success, langSysTable->featureIndexArray, featureCount);
-
-      for (le_uint32 feature = 0; LE_SUCCESS(success)&&(feature < featureCount); feature += 1) {
-        le_uint16 featureIndex = SWAPW(featureIndexArray.getObject(feature, success));
-        
-        featureTable = featureListTable->getFeatureTable(featureListTable, featureIndex,  &featureTag, success); 
-        if (!featureTable.isValid() || LE_FAILURE(success)) {
-          continue;
-        }
-        featureReferences += SWAPW(featureTable->lookupCount);
-      }
-    }
-
-    if (!featureTable.isValid() || LE_FAILURE(success)) {
-        success = LE_INTERNAL_ERROR;
-        return;
-    }
-
-    if (requiredFeatureIndex != 0xFFFF) {
-      requiredFeatureTable = featureListTable->getFeatureTable(featureListTable, requiredFeatureIndex, &requiredFeatureTag, success);
-      featureReferences += SWAPW(requiredFeatureTable->lookupCount);
-    }
-
-    lookupOrderArray = LE_NEW_ARRAY(le_uint16, featureReferences);
-    if (lookupOrderArray == NULL) {
-        success = LE_MEMORY_ALLOCATION_ERROR;
-        return;
-    }
-    lookupOrderCount = featureReferences;
-
-    for (le_int32 f = 0; f < featureMapCount; f += 1) {
-        FeatureMap fm = featureMap[f];
-        count = 0;
-
-        // If this is the required feature, add its lookups
-        if (requiredFeatureTag == fm.tag) {
-          count += selectLookups(requiredFeatureTable, fm.mask, order, success);
-        }
-
-        if (orderFeatures) {
-            // If we added lookups from the required feature, sort them
-            if (count > 1) {
-                OpenTypeUtilities::sort(lookupOrderArray, order);
-            }
-
-            for (le_uint16 feature = 0; feature < featureCount; feature += 1) {
-              LEReferenceToArrayOf<le_uint16> featureIndexArray(langSysTable, success, langSysTable->featureIndexArray, featureCount);
-              le_uint16 featureIndex = SWAPW(featureIndexArray.getObject(feature,success));
-                // don't add the required feature to the list more than once...
-                // TODO: Do we need this check? (Spec. says required feature won't be in feature list...)
-                if (featureIndex == requiredFeatureIndex) {
-                    continue;
-                }
-
-                featureTable = featureListTable->getFeatureTable(featureListTable, featureIndex, &featureTag, success);
-
-                if (featureTag == fm.tag) {
-                  count += selectLookups(featureTable, fm.mask, order + count, success);
-                }
-            }
-
-            if (count > 1) {
-                OpenTypeUtilities::sort(&lookupOrderArray[order], count);
-            }
-
-            order += count;
-        } else if(langSysTable.isValid()) {
-          LEReferenceToArrayOf<le_uint16> featureIndexArray(langSysTable, success, langSysTable->featureIndexArray, featureCount);
-          for (le_uint16 feature = 0; LE_SUCCESS(success)&& (feature < featureCount); feature += 1) {
-            le_uint16 featureIndex = SWAPW(featureIndexArray.getObject(feature,success));
-                // don't add the required feature to the list more than once...
-                // NOTE: This check is commented out because the spec. says that
-                // the required feature won't be in the feature list, and because
-                // any duplicate entries will be removed below.
-#if 0
-                if (featureIndex == requiredFeatureIndex) {
-                    continue;
-                }
-#endif
-
-                featureTable = featureListTable->getFeatureTable(featureListTable, featureIndex, &featureTag, success);
-
-                if (featureTag == fm.tag) {
-                  order += selectLookups(featureTable, fm.mask, order, success);
-                }
-            }
-        }
-    }
-
-    if (!orderFeatures && (order > 1)) {
-        OpenTypeUtilities::sort(lookupOrderArray, order);
-
-        // If there's no specified feature order,
-        // we will apply the lookups in the order
-        // that they're in the font. If a particular
-        // lookup may be referenced by more than one feature,
-        // it will apprear in the lookupOrderArray more than
-        // once, so remove any duplicate entries in the sorted array.
-        le_int32 out = 1;
-
-        for (le_int32 in = 1; in < order; in += 1) {
-            if (lookupOrderArray[out - 1] != lookupOrderArray[in]) {
-                if (out != in) {
-                    lookupOrderArray[out] = lookupOrderArray[in];
-                }
-
-                out += 1;
-            }
-        }
-
-        order = out;
-    }
-
-    lookupOrderCount = order;
-}
-
-LookupProcessor::LookupProcessor()
-{
-       lookupOrderArray = NULL;
-       lookupSelectArray = NULL;
-}
-
-LookupProcessor::~LookupProcessor()
-{
-    LE_DELETE_ARRAY(lookupOrderArray);
-    LE_DELETE_ARRAY(lookupSelectArray);
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/LookupProcessor.h b/icu4c/source/layout/LookupProcessor.h
deleted file mode 100644 (file)
index 8b66957..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- * %W% %E%
- *
- * (C) Copyright IBM Corp. 1998-2016 - All Rights Reserved
- *
- */
-
-#ifndef __LOOKUPPROCESSOR_H
-#define __LOOKUPPROCESSOR_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "LETableReference.h"
-#include "Lookups.h"
-
-U_NAMESPACE_BEGIN
-
-class  LEFontInstance;
-class  LEGlyphStorage;
-class  GlyphIterator;
-class  GlyphPositionAdjustments;
-struct FeatureTable;
-struct FeatureListTable;
-struct GlyphDefinitionTableHeader;
-struct LookupSubtable;
-
-class LookupProcessor : public UMemory {
-public:
-    le_int32 process(LEGlyphStorage &glyphStorage, GlyphPositionAdjustments *glyphPositionAdjustments,
-                 le_bool rightToLeft, const LEReferenceTo<GlyphDefinitionTableHeader> &glyphDefinitionTableHeader, const LEFontInstance *fontInstance, LEErrorCode& success) const;
-
-    le_uint32 applyLookupTable(const LEReferenceTo<LookupTable> &lookupTable, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
-
-    le_uint32 applySingleLookup(le_uint16 lookupTableIndex, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const;
-
-    virtual le_uint32 applySubtable(const LEReferenceTo<LookupSubtable> &lookupSubtable, le_uint16 subtableType,
-        GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode& success) const = 0;
-
-    virtual ~LookupProcessor();
-
-    const LETableReference &getReference() const { return fReference; }
-
-protected:
-    LookupProcessor(const LETableReference &baseAddress,
-        Offset scriptListOffset, 
-        Offset featureListOffset, 
-        Offset lookupListOffset,
-        LETag scriptTag, 
-        LETag languageTag, 
-        const FeatureMap *featureMap, 
-        le_int32 featureMapCount, 
-        le_bool orderFeatures, 
-        LEErrorCode& success);
-
-    LookupProcessor();
-
-    le_int32 selectLookups(const LEReferenceTo<FeatureTable> &featureTable, FeatureMask featureMask, le_int32 order, LEErrorCode &success);
-
-    LEReferenceTo<LookupListTable>   lookupListTable;
-    LEReferenceTo<FeatureListTable>  featureListTable;
-
-    FeatureMask            *lookupSelectArray;
-    le_uint32              lookupSelectCount;
-
-    le_uint16               *lookupOrderArray;
-    le_uint32               lookupOrderCount;
-
-    LETableReference        fReference;
-
-private:
-
-    LookupProcessor(const LookupProcessor &other); // forbid copying of this class
-    LookupProcessor &operator=(const LookupProcessor &other); // forbid copying of this class
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/LookupTables.cpp b/icu4c/source/layout/LookupTables.cpp
deleted file mode 100644 (file)
index c10ee83..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LayoutTables.h"
-#include "LookupTables.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-/*
-    These are the rolled-up versions of the uniform binary search.
-    Someday, if we need more performance, we can un-roll them.
-    
-    Note: I put these in the base class, so they only have to
-    be written once. Since the base class doesn't define the
-    segment table, these routines assume that it's right after
-    the binary search header.
-
-    Another way to do this is to put each of these routines in one
-    of the derived classes, and implement it in the others by casting
-    the "this" pointer to the type that has the implementation.
-*/ 
-const LookupSegment *BinarySearchLookupTable::lookupSegment(const LETableReference &base, const LookupSegment *segments, LEGlyphID glyph, LEErrorCode &success) const
-{
-    
-    le_int16  unity = SWAPW(unitSize);
-    le_int16  probe = SWAPW(searchRange);
-    le_int16  extra = SWAPW(rangeShift);
-    TTGlyphID ttGlyph = (TTGlyphID) LE_GET_GLYPH(glyph);
-    LEReferenceTo<LookupSegment> entry(base, success, segments);
-    LEReferenceTo<LookupSegment> trial(entry, success, extra);
-
-    if(LE_FAILURE(success)) return NULL;
-
-    if (SWAPW(trial->lastGlyph) <= ttGlyph) {
-        entry = trial;
-    }
-
-    while (probe > unity && LE_SUCCESS(success)) {
-        probe >>= 1;
-        trial = entry; // copy
-        trial.addOffset(probe, success);
-
-        if (SWAPW(trial->lastGlyph) <= ttGlyph) {
-            entry = trial;
-        }
-    }
-
-    if (SWAPW(entry->firstGlyph) <= ttGlyph) {
-      return entry.getAlias();
-    }
-
-    return NULL;
-}
-
-const LookupSingle *BinarySearchLookupTable::lookupSingle(const LETableReference &base, const LookupSingle *entries, LEGlyphID glyph, LEErrorCode &success) const
-{
-    le_int16  unity = SWAPW(unitSize);
-    le_int16  probe = SWAPW(searchRange);
-    le_int16  extra = SWAPW(rangeShift);
-    TTGlyphID ttGlyph = (TTGlyphID) LE_GET_GLYPH(glyph);
-    LEReferenceTo<LookupSingle> entry(base, success, entries);
-    LEReferenceTo<LookupSingle> trial(entry, success, extra);
-
-    if (SWAPW(trial->glyph) <= ttGlyph) {
-        entry = trial;
-    }
-
-    while (probe > unity && LE_SUCCESS(success)) {
-        probe >>= 1;
-        trial = entry;
-        trial.addOffset(probe, success);
-
-        if (SWAPW(trial->glyph) <= ttGlyph) {
-            entry = trial;
-        }
-    }
-
-    if (SWAPW(entry->glyph) == ttGlyph) {
-      return entry.getAlias();
-    }
-
-    return NULL;
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/LookupTables.h b/icu4c/source/layout/LookupTables.h
deleted file mode 100644 (file)
index 9cc0118..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2016 - All Rights Reserved
- *
- */
-
-#ifndef __LOOKUPTABLES_H
-#define __LOOKUPTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LayoutTables.h"
-#include "LETableReference.h"
-#include "Lookups.h"
-
-U_NAMESPACE_BEGIN
-
-enum LookupTableFormat
-{
-    ltfSimpleArray      = 0,
-    ltfSegmentSingle    = 2,
-    ltfSegmentArray     = 4,
-    ltfSingleTable      = 6,
-    ltfTrimmedArray     = 8
-};
-
-typedef le_int16 LookupValue;
-
-// Different from struct LookupTable in Lookups.h.
-struct LookupTableBase
-{
-    le_int16 format;
-};
-
-struct LookupSegment
-{
-    TTGlyphID   lastGlyph;
-    TTGlyphID   firstGlyph;
-    LookupValue value;
-};
-
-struct LookupSingle
-{
-    TTGlyphID   glyph;
-    LookupValue value;
-};
-
-struct BinarySearchLookupTable : LookupTableBase
-{
-    le_int16 unitSize;
-    le_int16 nUnits;
-    le_int16 searchRange;
-    le_int16 entrySelector;
-    le_int16 rangeShift;
-
-    const LookupSegment *lookupSegment(const LETableReference &base, const LookupSegment *segments, LEGlyphID glyph, LEErrorCode &success) const;
-
-    const LookupSingle *lookupSingle(const LETableReference &base, const LookupSingle *entries, LEGlyphID glyph, LEErrorCode &success) const;
-};
-
-struct SimpleArrayLookupTable : LookupTableBase
-{
-    LookupValue valueArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(SimpleArrayLookupTable, valueArray)
-
-struct SegmentSingleLookupTable : BinarySearchLookupTable
-{
-    LookupSegment segments[ANY_NUMBER];
-};
-LE_VAR_ARRAY(SegmentSingleLookupTable, segments)
-
-struct SegmentArrayLookupTable : BinarySearchLookupTable
-{
-    LookupSegment segments[ANY_NUMBER];
-};
-LE_VAR_ARRAY(SegmentArrayLookupTable, segments)
-
-struct SingleTableLookupTable : BinarySearchLookupTable
-{
-    LookupSingle entries[ANY_NUMBER];
-};
-LE_VAR_ARRAY(SingleTableLookupTable, entries)
-
-struct TrimmedArrayLookupTable : LookupTableBase
-{
-    TTGlyphID   firstGlyph;
-    TTGlyphID   glyphCount;
-    LookupValue valueArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(TrimmedArrayLookupTable, valueArray)
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/Lookups.cpp b/icu4c/source/layout/Lookups.cpp
deleted file mode 100644 (file)
index 8212767..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "Lookups.h"
-#include "CoverageTables.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-const LEReferenceTo<LookupTable> LookupListTable::getLookupTable(const LEReferenceTo<LookupListTable> &base, le_uint16 lookupTableIndex, LEErrorCode &success) const
-{
-  LEReferenceToArrayOf<Offset> lookupTableOffsetArrayRef(base, success, (const Offset*)&lookupTableOffsetArray, SWAPW(lookupCount));
-
-  if(LE_FAILURE(success) || lookupTableIndex>lookupTableOffsetArrayRef.getCount()) {
-    return LEReferenceTo<LookupTable>();
-  } else {
-    return LEReferenceTo<LookupTable>(base, success, SWAPW(lookupTableOffsetArrayRef.getObject(lookupTableIndex, success)));
-  }
-}
-
-const LEReferenceTo<LookupSubtable> LookupTable::getLookupSubtable(const LEReferenceTo<LookupTable> &base, le_uint16 subtableIndex, LEErrorCode &success) const
-{
-  LEReferenceToArrayOf<Offset> subTableOffsetArrayRef(base, success, (const Offset*)&subTableOffsetArray, SWAPW(subTableCount));
-
-  if(LE_FAILURE(success) || subtableIndex>subTableOffsetArrayRef.getCount()) {
-    return LEReferenceTo<LookupSubtable>();
-  } else {
-    return LEReferenceTo<LookupSubtable>(base, success, SWAPW(subTableOffsetArrayRef.getObject(subtableIndex, success)));
-  }
-}
-
-le_int32 LookupSubtable::getGlyphCoverage(const LEReferenceTo<LookupSubtable> &base, Offset tableOffset, LEGlyphID glyphID, LEErrorCode &success) const
-{
-  const LEReferenceTo<CoverageTable> coverageTable(base, success, SWAPW(tableOffset));
-
-  if(LE_FAILURE(success)) return 0; 
-
-  return coverageTable->getGlyphCoverage(glyphID);
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/Lookups.h b/icu4c/source/layout/Lookups.h
deleted file mode 100644 (file)
index 819789e..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __LOOKUPS_H
-#define __LOOKUPS_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-
-U_NAMESPACE_BEGIN
-
-enum LookupFlags
-{
-    lfBaselineIsLogicalEnd  = 0x0001,  // The MS spec. calls this flag "RightToLeft" but this name is more accurate 
-    lfIgnoreBaseGlyphs      = 0x0002,
-    lfIgnoreLigatures       = 0x0004,
-    lfIgnoreMarks           = 0x0008,
-    lfReservedMask          = 0x00F0,
-    lfMarkAttachTypeMask    = 0xFF00,
-    lfMarkAttachTypeShift   = 8
-};
-
-struct LookupSubtable
-{
-    le_uint16 subtableFormat;
-    Offset    coverageTableOffset;
-
-  inline le_int32  getGlyphCoverage(const LEReferenceTo<LookupSubtable> &base, LEGlyphID glyphID, LEErrorCode &success) const;
-
-  le_int32  getGlyphCoverage(const LEReferenceTo<LookupSubtable> &base, Offset tableOffset, LEGlyphID glyphID, LEErrorCode &success) const;
-
-  // convenience
-  inline le_int32  getGlyphCoverage(const LETableReference &base, LEGlyphID glyphID, LEErrorCode &success) const;
-
-  inline le_int32  getGlyphCoverage(const LETableReference &base, Offset tableOffset, LEGlyphID glyphID, LEErrorCode &success) const;
-};
-
-struct LookupTable
-{
-    le_uint16       lookupType;
-    le_uint16       lookupFlags;
-    le_uint16       subTableCount;
-    Offset          subTableOffsetArray[ANY_NUMBER];
-
-  const LEReferenceTo<LookupSubtable> getLookupSubtable(const LEReferenceTo<LookupTable> &base, le_uint16 subtableIndex, LEErrorCode &success) const;
-};
-LE_VAR_ARRAY(LookupTable, subTableOffsetArray)
-
-struct LookupListTable
-{
-    le_uint16   lookupCount;
-    Offset      lookupTableOffsetArray[ANY_NUMBER];
-
-  const LEReferenceTo<LookupTable> getLookupTable(const LEReferenceTo<LookupListTable> &base, le_uint16 lookupTableIndex, LEErrorCode &success) const;
-};
-LE_VAR_ARRAY(LookupListTable, lookupTableOffsetArray)
-
-inline le_int32 LookupSubtable::getGlyphCoverage(const LEReferenceTo<LookupSubtable> &base, LEGlyphID glyphID, LEErrorCode &success) const
-{
-  return getGlyphCoverage(base, coverageTableOffset, glyphID, success);
-}
-
-inline le_int32  LookupSubtable::getGlyphCoverage(const LETableReference &base, LEGlyphID glyphID, LEErrorCode &success) const {
-  LEReferenceTo<LookupSubtable> thisRef(base, success, this);
-  return getGlyphCoverage(thisRef, glyphID, success);
-}
-
-inline le_int32  LookupSubtable::getGlyphCoverage(const LETableReference &base, Offset tableOffset, LEGlyphID glyphID, LEErrorCode &success) const {
-  LEReferenceTo<LookupSubtable> thisRef(base, success, this);
-  return getGlyphCoverage(thisRef, tableOffset, glyphID, success);
-}
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/MPreFixups.cpp b/icu4c/source/layout/MPreFixups.cpp
deleted file mode 100644 (file)
index 051268d..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 2002-2008 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEGlyphStorage.h"
-#include "MPreFixups.h"
-
-U_NAMESPACE_BEGIN
-
-struct FixupData
-{
-    le_int32 fBaseIndex;
-    le_int32 fMPreIndex;
-};
-
-MPreFixups::MPreFixups(le_int32 charCount)
-    : fFixupData(NULL), fFixupCount(0)
-{
-    fFixupData = LE_NEW_ARRAY(FixupData, charCount);
-}
-
-MPreFixups::~MPreFixups()
-{
-    LE_DELETE_ARRAY(fFixupData);
-    fFixupData = NULL;
-}
-
-void MPreFixups::add(le_int32 baseIndex, le_int32 mpreIndex)
-{
-    // NOTE: don't add the fixup data if the mpre is right
-    // before the base consonant glyph.
-    if (baseIndex - mpreIndex > 1) {
-        fFixupData[fFixupCount].fBaseIndex = baseIndex;
-        fFixupData[fFixupCount].fMPreIndex = mpreIndex;
-
-        fFixupCount += 1;
-    }
-}
-
-void MPreFixups::apply(LEGlyphStorage &glyphStorage, LEErrorCode& success)
-{
-    if (LE_FAILURE(success)) { 
-        return;
-    }
-
-    for (le_int32 fixup = 0; fixup < fFixupCount; fixup += 1) {
-        le_int32 baseIndex = fFixupData[fixup].fBaseIndex;
-        le_int32 mpreIndex = fFixupData[fixup].fMPreIndex;
-        le_int32 mpreLimit = mpreIndex + 1;
-
-        while (glyphStorage[baseIndex] == 0xFFFF || glyphStorage[baseIndex] == 0xFFFE) {
-            baseIndex -= 1;
-        }
-
-        while (glyphStorage[mpreLimit] == 0xFFFF || glyphStorage[mpreLimit] == 0xFFFE) {
-            mpreLimit += 1;
-        }
-
-        if (mpreLimit == baseIndex) {
-            continue;
-        }
-
-        LEErrorCode success = LE_NO_ERROR;
-        le_int32   mpreCount = mpreLimit - mpreIndex;
-        le_int32   moveCount = baseIndex - mpreLimit;
-        le_int32   mpreDest  = baseIndex - mpreCount;
-        LEGlyphID *mpreSave  = LE_NEW_ARRAY(LEGlyphID, mpreCount);
-        le_int32  *indexSave = LE_NEW_ARRAY(le_int32, mpreCount);
-
-        if (mpreSave == NULL || indexSave == NULL) {
-            LE_DELETE_ARRAY(mpreSave);
-            LE_DELETE_ARRAY(indexSave);
-            success = LE_MEMORY_ALLOCATION_ERROR;
-            return;
-        }
-
-        le_int32   i;
-
-        for (i = 0; i < mpreCount; i += 1) {
-            mpreSave[i]  = glyphStorage[mpreIndex + i];
-            indexSave[i] = glyphStorage.getCharIndex(mpreIndex + i, success); //charIndices[mpreIndex + i];
-        }
-
-        for (i = 0; i < moveCount; i += 1) {
-            LEGlyphID glyph = glyphStorage[mpreLimit + i];
-            le_int32 charIndex = glyphStorage.getCharIndex(mpreLimit + i, success);
-
-            glyphStorage[mpreIndex + i] = glyph;
-            glyphStorage.setCharIndex(mpreIndex + i, charIndex, success);
-        }
-
-        for (i = 0; i < mpreCount; i += 1) {
-            glyphStorage[mpreDest + i] = mpreSave[i];
-            glyphStorage.setCharIndex(mpreDest, indexSave[i], success);
-        }
-        
-        LE_DELETE_ARRAY(indexSave);
-        LE_DELETE_ARRAY(mpreSave);
-    }
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/MPreFixups.h b/icu4c/source/layout/MPreFixups.h
deleted file mode 100644 (file)
index d537786..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 2002-2008 - All Rights Reserved
- *
- */
-
-#ifndef __MPREFIXUPS_H
-#define __MPREFIXUPS_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-// Might want to make this a private member...
-struct FixupData;
-
-class MPreFixups : public UMemory
-{
-public:
-    MPreFixups(le_int32 charCount);
-   ~MPreFixups();
-
-    void add(le_int32 baseIndex, le_int32 mpreIndex);
-    
-    void apply(LEGlyphStorage &glyphStorage, LEErrorCode& success);
-
-private:
-    FixupData *fFixupData;
-    le_int32   fFixupCount;
-};
-
-U_NAMESPACE_END
-#endif
-
-
diff --git a/icu4c/source/layout/Makefile.in b/icu4c/source/layout/Makefile.in
deleted file mode 100644 (file)
index 1699cc5..0000000
+++ /dev/null
@@ -1,255 +0,0 @@
-# Copyright (C) 2016 and later: Unicode, Inc. and others.
-# License & terms of use: http://www.unicode.org/copyright.html
-#******************************************************************************
-#
-#   Copyright (C) 1999-2013, International Business Machines
-#   Corporation and others.  All Rights Reserved.
-#
-#******************************************************************************
-## Makefile.in for ICU - layout
-
-## Source directory information
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-
-top_builddir = ..
-
-## All the flags and other definitions are included here.
-include $(top_builddir)/icudefs.mk
-
-## Build directory information
-subdir = layout
-
-## Extra files to remove for 'make clean'
-CLEANFILES = *~ $(DEPS) $(IMPORT_LIB) $(MIDDLE_IMPORT_LIB) $(FINAL_IMPORT_LIB)
-
-## Target information
-
-TARGET_STUBNAME=$(LAYOUT_STUBNAME)
-
-ifneq ($(ENABLE_STATIC),)
-TARGET = $(LIBDIR)/$(LIBSICU)$(TARGET_STUBNAME)$(ICULIBSUFFIX).$(A)
-endif
-
-ifneq ($(ENABLE_SHARED),)
-SO_TARGET = $(LIBDIR)/$(LIBICU)$(TARGET_STUBNAME)$(ICULIBSUFFIX).$(SO)
-ALL_SO_TARGETS = $(SO_TARGET) $(MIDDLE_SO_TARGET) $(FINAL_SO_TARGET) $(SHARED_OBJECT)
-
-ifeq ($(ENABLE_SO_VERSION_DATA),1)
-SO_VERSION_DATA = layout.res
-endif
-
-ifeq ($(OS390BATCH),1)
-BATCH_TARGET = $(BATCH_LAYOUT_TARGET)
-BATCH_LIBS = $(BATCH_LIBICUUC) -lm
-endif   # OS390BATCH
-
-endif   # ENABLE_SHARED
-
-ALL_TARGETS = $(TARGET) $(ALL_SO_TARGETS) $(BATCH_TARGET)
-
-DYNAMICCPPFLAGS = $(SHAREDLIBCPPFLAGS)
-DYNAMICCFLAGS = $(SHAREDLIBCFLAGS)
-DYNAMICCXXFLAGS = $(SHAREDLIBCXXFLAGS)
-CFLAGS += $(LIBCFLAGS)
-CXXFLAGS += $(LIBCXXFLAGS)
-
-CPPFLAGS += -I$(srcdir) -I$(srcdir)/.. -I$(top_srcdir)/common -I$(srcdir)/unicode $(LIBCPPFLAGS)
-DEFS += -DU_LAYOUT_IMPLEMENTATION
-LDFLAGS += $(LDFLAGSICULE)
-LIBS = $(LIBICUUC) $(DEFAULT_LIBS)
-
-OBJECTS =  LEFontInstance.o \
-OpenTypeLayoutEngine.o \
-ThaiLayoutEngine.o \
-ThaiShaping.o \
-ThaiStateTables.o \
-ArabicLayoutEngine.o \
-GXLayoutEngine.o \
-HanLayoutEngine.o \
-IndicLayoutEngine.o \
-LayoutEngine.o \
-ContextualGlyphSubstProc.o \
-IndicRearrangementProcessor.o \
-LigatureSubstProc.o \
-LookupTables.o \
-MorphTables.o \
-NonContextualGlyphSubstProc.o \
-SegmentArrayProcessor.o \
-SegmentSingleProcessor.o \
-SimpleArrayProcessor.o \
-SingleTableProcessor.o \
-StateTableProcessor.o \
-SubtableProcessor.o \
-TrimmedArrayProcessor.o \
-AlternateSubstSubtables.o \
-AnchorTables.o \
-ArabicShaping.o \
-CanonData.o \
-CanonShaping.o \
-ClassDefinitionTables.o \
-ContextualSubstSubtables.o \
-CoverageTables.o \
-CursiveAttachmentSubtables.o \
-DeviceTables.o \
-ExtensionSubtables.o \
-Features.o \
-GDEFMarkFilter.o \
-GlyphDefinitionTables.o \
-GlyphIterator.o \
-GlyphLookupTables.o \
-GlyphPosnLookupProc.o \
-GlyphPositionAdjustments.o \
-GlyphPositioningTables.o \
-GlyphSubstLookupProc.o \
-GlyphSubstitutionTables.o \
-IndicClassTables.o \
-IndicReordering.o \
-LEInsertionList.o \
-LEGlyphStorage.o \
-LigatureSubstSubtables.o \
-LookupProcessor.o \
-Lookups.o \
-MarkArrays.o \
-MarkToBasePosnSubtables.o \
-MarkToLigaturePosnSubtables.o \
-MarkToMarkPosnSubtables.o \
-MirroredCharData.o \
-MPreFixups.o \
-MultipleSubstSubtables.o \
-OpenTypeUtilities.o \
-PairPositioningSubtables.o \
-ScriptAndLanguage.o \
-ScriptAndLanguageTags.o \
-ShapingTypeData.o \
-SinglePositioningSubtables.o \
-SingleSubstitutionSubtables.o \
-SubstitutionLookups.o \
-ValueRecords.o \
-KhmerLayoutEngine.o \
-KhmerReordering.o \
-TibetanLayoutEngine.o \
-TibetanReordering.o \
-HangulLayoutEngine.o \
-KernTable.o \
-loengine.o \
-ContextualGlyphInsertionProc2.o \
-ContextualGlyphSubstProc2.o \
-GXLayoutEngine2.o \
-IndicRearrangementProcessor2.o \
-LigatureSubstProc2.o \
-MorphTables2.o \
-NonContextualGlyphSubstProc2.o \
-SegmentArrayProcessor2.o \
-SegmentSingleProcessor2.o \
-SimpleArrayProcessor2.o \
-SingleTableProcessor2.o \
-StateTableProcessor2.o \
-SubtableProcessor2.o \
-TrimmedArrayProcessor2.o
-
-## Header files to install
-HEADERS= $(srcdir)/LayoutEngine.h $(srcdir)/LE*.h $(srcdir)/loengine.h
-
-STATIC_OBJECTS = $(OBJECTS:.o=.$(STATIC_O))
-
-DEPS = $(OBJECTS:.o=.d)
-
--include Makefile.local
-
-## List of phony targets
-.PHONY : all all-local install install-local clean clean-local \
-distclean distclean-local install-library install-headers dist \
-dist-local check check-local check-exhaustive
-
-## Clear suffix list
-.SUFFIXES :
-
-## List of standard targets
-all: all-local
-install: install-local
-clean: clean-local
-distclean : distclean-local
-dist: dist-local
-check: all check-local
-
-check-exhaustive: check
-
-all-local: $(ALL_TARGETS)
-
-install-local: install-headers install-library
-
-install-library: all-local
-       $(MKINSTALLDIRS) $(DESTDIR)$(libdir)
-ifneq ($(ENABLE_STATIC),)
-       $(INSTALL-L) $(TARGET) $(DESTDIR)$(libdir)
-endif
-ifneq ($(ENABLE_SHARED),)
-       $(INSTALL-L) $(FINAL_SO_TARGET) $(DESTDIR)$(libdir)
-ifneq ($(FINAL_SO_TARGET),$(SO_TARGET))
-       cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(SO_TARGET)) && ln -s $(notdir $(FINAL_SO_TARGET)) $(notdir $(SO_TARGET))
-ifneq ($(FINAL_SO_TARGET),$(MIDDLE_SO_TARGET))
-       cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(MIDDLE_SO_TARGET)) && ln -s $(notdir $(FINAL_SO_TARGET)) $(notdir $(MIDDLE_SO_TARGET))
-endif
-endif
-ifneq ($(IMPORT_LIB_EXT),)
-       $(INSTALL-L) $(FINAL_IMPORT_LIB) $(DESTDIR)$(libdir)
-ifneq ($(IMPORT_LIB),$(FINAL_IMPORT_LIB))
-       cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(IMPORT_LIB)) && ln -s $(notdir $(FINAL_IMPORT_LIB)) $(notdir $(IMPORT_LIB))
-endif
-ifneq ($(MIDDLE_IMPORT_LIB),$(FINAL_IMPORT_LIB))
-       cd $(DESTDIR)$(libdir) && $(RM) $(notdir $(MIDDLE_IMPORT_LIB)) && ln -s $(notdir $(FINAL_IMPORT_LIB)) $(notdir $(MIDDLE_IMPORT_LIB))
-endif
-endif
-endif
-
-install-headers:
-       $(MKINSTALLDIRS) $(DESTDIR)$(includedir)/layout
-       @for file in $(HEADERS); do \
-        echo "$(INSTALL_DATA) $$file $(DESTDIR)$(includedir)/layout"; \
-        $(INSTALL_DATA) $$file $(DESTDIR)$(includedir)/layout || exit; \
-       done
-
-dist-local:
-
-clean-local:
-       test -z "$(CLEANFILES)" || $(RMV) $(CLEANFILES)
-       $(RMV) $(OBJECTS) $(STATIC_OBJECTS) $(ALL_TARGETS) $(SO_VERSION_DATA)
-
-distclean-local: clean-local
-       $(RMV) Makefile
-
-check-local:
-
-Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status
-       cd $(top_builddir) \
-        && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
-
-ifneq ($(ENABLE_STATIC),)
-$(TARGET): $(STATIC_OBJECTS)
-       $(AR) $(ARFLAGS) $(AR_OUTOPT)$@ $^
-       $(RANLIB) $@
-endif
-
-ifneq ($(ENABLE_SHARED),)
-$(SHARED_OBJECT): $(OBJECTS) $(SO_VERSION_DATA)
-       $(SHLIB.cc) $(LD_SONAME) $(OUTOPT)$@ $^ $(LIBS)
-ifeq ($(ENABLE_RPATH),YES)
-ifneq ($(wildcard $(libdir)/$(MIDDLE_SO_TARGET)),)
-       $(warning RPATH warning: --enable-rpath means test programs may use existing $(libdir)/$(MIDDLE_SO_TARGET))
-endif
-endif
-
-ifeq ($(OS390BATCH),1)
-$(BATCH_TARGET):$(OBJECTS)
-       $(SHLIB.cc) $(LD_SONAME) $(OUTOPT)$@ $^ $(BATCH_LIBS)
-endif   # OS390BATCH
-endif   # ENABLE_SHARED
-
-ifeq (,$(MAKECMDGOALS))
--include $(DEPS)
-else
-ifneq ($(patsubst %clean,,$(MAKECMDGOALS)),)
--include $(DEPS)
-endif
-endif
diff --git a/icu4c/source/layout/MarkArrays.cpp b/icu4c/source/layout/MarkArrays.cpp
deleted file mode 100644 (file)
index 3d540f1..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "AnchorTables.h"
-#include "MarkArrays.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-le_int32 MarkArray::getMarkClass(LEGlyphID glyphID, le_int32 coverageIndex, const LEFontInstance *fontInstance,
-                              LEPoint &anchor) const
-{
-    le_int32 markClass = -1;
-
-    if (coverageIndex >= 0) {
-        le_uint16 mCount = SWAPW(markCount);
-
-        if (coverageIndex < mCount) {
-            const MarkRecord *markRecord = &markRecordArray[coverageIndex];
-            Offset anchorTableOffset = SWAPW(markRecord->markAnchorTableOffset);
-            const AnchorTable *anchorTable = (AnchorTable *) ((char *) this + anchorTableOffset);
-
-            anchorTable->getAnchor(glyphID, fontInstance, anchor);
-            markClass = SWAPW(markRecord->markClass);
-        }
-
-        // XXXX If we get here, the table is mal-formed
-    }
-
-    return markClass;
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/MarkArrays.h b/icu4c/source/layout/MarkArrays.h
deleted file mode 100644 (file)
index b04391c..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __MARKARRAYS_H
-#define __MARKARRAYS_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-
-U_NAMESPACE_BEGIN
-
-struct MarkRecord
-{
-    le_uint16   markClass;
-    Offset      markAnchorTableOffset;
-};
-
-struct MarkArray
-{
-    le_uint16   markCount;
-    MarkRecord  markRecordArray[ANY_NUMBER];
-
-    le_int32 getMarkClass(LEGlyphID glyphID, le_int32 coverageIndex, const LEFontInstance *fontInstance,
-        LEPoint &anchor) const;
-};
-LE_VAR_ARRAY(MarkArray, markRecordArray)
-
-U_NAMESPACE_END
-#endif
-
-
diff --git a/icu4c/source/layout/MarkToBasePosnSubtables.cpp b/icu4c/source/layout/MarkToBasePosnSubtables.cpp
deleted file mode 100644 (file)
index f9d12af..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "AnchorTables.h"
-#include "MarkArrays.h"
-#include "GlyphPositioningTables.h"
-#include "AttachmentPosnSubtables.h"
-#include "MarkToBasePosnSubtables.h"
-#include "GlyphIterator.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-LEGlyphID MarkToBasePositioningSubtable::findBaseGlyph(GlyphIterator *glyphIterator) const
-{
-    if (glyphIterator->prev()) {
-        return glyphIterator->getCurrGlyphID();
-    }
-
-    return 0xFFFF;
-}
-
-le_int32 MarkToBasePositioningSubtable::process(const LETableReference &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const
-{
-    LEGlyphID markGlyph = glyphIterator->getCurrGlyphID();
-    le_int32 markCoverage = getGlyphCoverage(base, (LEGlyphID) markGlyph, success);
-
-    if (markCoverage < 0) {
-        // markGlyph isn't a covered mark glyph
-        return 0;
-    }
-
-    LEPoint markAnchor;
-    const MarkArray *markArray = (const MarkArray *) ((char *) this + SWAPW(markArrayOffset));
-    le_int32 markClass = markArray->getMarkClass(markGlyph, markCoverage, fontInstance, markAnchor);
-    le_uint16 mcCount = SWAPW(classCount);
-
-    if (markClass < 0 || markClass >= mcCount) {
-        // markGlyph isn't in the mark array or its
-        // mark class is too big. The table is mal-formed!
-        return 0;
-    }
-
-    // FIXME: We probably don't want to find a base glyph before a previous ligature... 
-    GlyphIterator baseIterator(*glyphIterator, (le_uint16) (lfIgnoreMarks /*| lfIgnoreLigatures*/));
-    LEGlyphID baseGlyph = findBaseGlyph(&baseIterator);
-    le_int32 baseCoverage = getBaseCoverage(base, (LEGlyphID) baseGlyph, success);
-    const BaseArray *baseArray = (const BaseArray *) ((char *) this + SWAPW(baseArrayOffset));
-    le_uint16 baseCount = SWAPW(baseArray->baseRecordCount);
-
-    if (baseCoverage < 0 || baseCoverage >= baseCount) {
-        // The base glyph isn't covered, or the coverage
-        // index is too big. The latter means that the
-        // table is mal-formed...
-        return 0;
-    }
-
-    const BaseRecord *baseRecord = &baseArray->baseRecordArray[baseCoverage * mcCount];
-    Offset anchorTableOffset = SWAPW(baseRecord->baseAnchorTableOffsetArray[markClass]);
-    const AnchorTable *anchorTable = (const AnchorTable *) ((char *) baseArray + anchorTableOffset);
-    LEPoint baseAnchor, markAdvance, pixels;
-
-    if (anchorTableOffset == 0) {
-        // this means the table is mal-formed...
-        glyphIterator->setCurrGlyphBaseOffset(baseIterator.getCurrStreamPosition());
-        return 0;
-    }
-
-    anchorTable->getAnchor(baseGlyph, fontInstance, baseAnchor);
-
-    fontInstance->getGlyphAdvance(markGlyph, pixels);
-    fontInstance->pixelsToUnits(pixels, markAdvance);
-
-    float anchorDiffX = baseAnchor.fX - markAnchor.fX;
-    float anchorDiffY = baseAnchor.fY - markAnchor.fY;
-
-    glyphIterator->setCurrGlyphBaseOffset(baseIterator.getCurrStreamPosition());
-
-    if (glyphIterator->isRightToLeft()) {
-        // FIXME: need similar patch to below; also in MarkToLigature and MarkToMark
-        // (is there a better way to approach this for all the cases?)
-        glyphIterator->setCurrGlyphPositionAdjustment(anchorDiffX, anchorDiffY, -markAdvance.fX, -markAdvance.fY);
-    } else {
-        LEPoint baseAdvance;
-
-        fontInstance->getGlyphAdvance(baseGlyph, pixels);
-        
-        //JK: adjustment needs to account for non-zero advance of any marks between base glyph and current mark
-        GlyphIterator gi(baseIterator, (le_uint16)0); // copy of baseIterator that won't ignore marks
-        gi.next(); // point beyond the base glyph
-        while (gi.getCurrStreamPosition() < glyphIterator->getCurrStreamPosition()) { // for all intervening glyphs (marks)...
-            LEGlyphID otherMark = gi.getCurrGlyphID();
-            LEPoint px;
-            fontInstance->getGlyphAdvance(otherMark, px); // get advance, in case it's non-zero
-            pixels.fX += px.fX; // and add that to the base glyph's advance
-            pixels.fY += px.fY;
-            gi.next();
-        }
-        // end of JK patch
-   
-        fontInstance->pixelsToUnits(pixels, baseAdvance);
-
-        glyphIterator->setCurrGlyphPositionAdjustment(anchorDiffX - baseAdvance.fX, anchorDiffY - baseAdvance.fY, -markAdvance.fX, -markAdvance.fY);
-    }
-
-    return 1;
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/MarkToBasePosnSubtables.h b/icu4c/source/layout/MarkToBasePosnSubtables.h
deleted file mode 100644 (file)
index 0b642fd..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __MARKTOBASEPOSITIONINGSUBTABLES_H
-#define __MARKTOBASEPOSITIONINGSUBTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "GlyphPositioningTables.h"
-#include "AttachmentPosnSubtables.h"
-#include "GlyphIterator.h"
-
-U_NAMESPACE_BEGIN
-
-struct MarkToBasePositioningSubtable : AttachmentPositioningSubtable
-{
-  le_int32   process(const LETableReference &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const;
-    LEGlyphID  findBaseGlyph(GlyphIterator *glyphIterator) const;
-};
-
-struct BaseRecord
-{
-    Offset baseAnchorTableOffsetArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(BaseRecord, baseAnchorTableOffsetArray)
-
-struct BaseArray
-{
-    le_int16 baseRecordCount;
-    BaseRecord baseRecordArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(BaseArray, baseRecordArray)
-
-U_NAMESPACE_END
-#endif
-
diff --git a/icu4c/source/layout/MarkToLigaturePosnSubtables.cpp b/icu4c/source/layout/MarkToLigaturePosnSubtables.cpp
deleted file mode 100644 (file)
index 5de6a8b..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "AnchorTables.h"
-#include "MarkArrays.h"
-#include "GlyphPositioningTables.h"
-#include "AttachmentPosnSubtables.h"
-#include "MarkToLigaturePosnSubtables.h"
-#include "GlyphIterator.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-LEGlyphID MarkToLigaturePositioningSubtable::findLigatureGlyph(GlyphIterator *glyphIterator) const
-{
-    if (glyphIterator->prev()) {
-        return glyphIterator->getCurrGlyphID();
-    }
-
-    return 0xFFFF;
-}
-
-le_int32 MarkToLigaturePositioningSubtable::process(const LETableReference &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const
-{
-    LEGlyphID markGlyph = glyphIterator->getCurrGlyphID();
-    le_int32 markCoverage = getGlyphCoverage(base, (LEGlyphID) markGlyph, success);
-
-    if (markCoverage < 0) {
-        // markGlyph isn't a covered mark glyph
-        return 0;
-    }
-
-    LEPoint markAnchor;
-    const MarkArray *markArray = (const MarkArray *) ((char *) this + SWAPW(markArrayOffset));
-    le_int32 markClass = markArray->getMarkClass(markGlyph, markCoverage, fontInstance, markAnchor);
-    le_uint16 mcCount = SWAPW(classCount);
-
-    if (markClass < 0 || markClass >= mcCount) {
-        // markGlyph isn't in the mark array or its
-        // mark class is too big. The table is mal-formed!
-        return 0;
-    }
-
-    // FIXME: we probably don't want to find a ligature before a previous base glyph...
-    GlyphIterator ligatureIterator(*glyphIterator, (le_uint16) (lfIgnoreMarks /*| lfIgnoreBaseGlyphs*/));
-    LEGlyphID ligatureGlyph = findLigatureGlyph(&ligatureIterator);
-    le_int32 ligatureCoverage = getBaseCoverage(base, (LEGlyphID) ligatureGlyph, success);
-    const LigatureArray *ligatureArray = (const LigatureArray *) ((char *) this + SWAPW(baseArrayOffset));
-    le_uint16 ligatureCount = SWAPW(ligatureArray->ligatureCount);
-
-    if (ligatureCoverage < 0 || ligatureCoverage >= ligatureCount) {
-        // The ligature glyph isn't covered, or the coverage
-        // index is too big. The latter means that the
-        // table is mal-formed...
-        return 0;
-    }
-
-    le_int32 markPosition = glyphIterator->getCurrStreamPosition();
-    Offset ligatureAttachOffset = SWAPW(ligatureArray->ligatureAttachTableOffsetArray[ligatureCoverage]);
-    const LigatureAttachTable *ligatureAttachTable = (const LigatureAttachTable *) ((char *) ligatureArray + ligatureAttachOffset);
-    le_int32 componentCount = SWAPW(ligatureAttachTable->componentCount);
-    le_int32 component = ligatureIterator.getMarkComponent(markPosition);
-
-    if (component >= componentCount) {
-        // should really just bail at this point...
-        component = componentCount - 1;
-    }
-
-    const ComponentRecord *componentRecord = &ligatureAttachTable->componentRecordArray[component * mcCount];
-    Offset anchorTableOffset = SWAPW(componentRecord->ligatureAnchorTableOffsetArray[markClass]);
-    const AnchorTable *anchorTable = (const AnchorTable *) ((char *) ligatureAttachTable + anchorTableOffset);
-    LEPoint ligatureAnchor, markAdvance, pixels;
-
-    anchorTable->getAnchor(ligatureGlyph, fontInstance, ligatureAnchor);
-
-    fontInstance->getGlyphAdvance(markGlyph, pixels);
-    fontInstance->pixelsToUnits(pixels, markAdvance);
-
-    float anchorDiffX = ligatureAnchor.fX - markAnchor.fX;
-    float anchorDiffY = ligatureAnchor.fY - markAnchor.fY;
-
-    glyphIterator->setCurrGlyphBaseOffset(ligatureIterator.getCurrStreamPosition());
-
-    if (glyphIterator->isRightToLeft()) {
-        glyphIterator->setCurrGlyphPositionAdjustment(anchorDiffX, anchorDiffY, -markAdvance.fX, -markAdvance.fY);
-    } else {
-        LEPoint ligatureAdvance;
-
-        fontInstance->getGlyphAdvance(ligatureGlyph, pixels);
-        fontInstance->pixelsToUnits(pixels, ligatureAdvance);
-
-        glyphIterator->setCurrGlyphPositionAdjustment(anchorDiffX - ligatureAdvance.fX, anchorDiffY - ligatureAdvance.fY, -markAdvance.fX, -markAdvance.fY);
-    }
-
-    return 1;
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/MarkToLigaturePosnSubtables.h b/icu4c/source/layout/MarkToLigaturePosnSubtables.h
deleted file mode 100644 (file)
index f0cacb6..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __MARKTOLIGATUREPOSITIONINGSUBTABLES_H
-#define __MARKTOLIGATUREPOSITIONINGSUBTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "GlyphPositioningTables.h"
-#include "AttachmentPosnSubtables.h"
-#include "GlyphIterator.h"
-
-U_NAMESPACE_BEGIN
-
-struct MarkToLigaturePositioningSubtable : AttachmentPositioningSubtable
-{
-  le_int32   process(const LETableReference &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const;
-    LEGlyphID  findLigatureGlyph(GlyphIterator *glyphIterator) const;
-};
-
-struct ComponentRecord
-{
-    Offset ligatureAnchorTableOffsetArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(ComponentRecord, ligatureAnchorTableOffsetArray)
-
-struct LigatureAttachTable
-{
-    le_uint16 componentCount;
-    ComponentRecord componentRecordArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(LigatureAttachTable, componentRecordArray)
-
-struct LigatureArray
-{
-    le_uint16 ligatureCount;
-    Offset ligatureAttachTableOffsetArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(LigatureArray, ligatureAttachTableOffsetArray)
-
-U_NAMESPACE_END
-#endif
-
diff --git a/icu4c/source/layout/MarkToMarkPosnSubtables.cpp b/icu4c/source/layout/MarkToMarkPosnSubtables.cpp
deleted file mode 100644 (file)
index b18c7e4..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "AnchorTables.h"
-#include "MarkArrays.h"
-#include "GlyphPositioningTables.h"
-#include "AttachmentPosnSubtables.h"
-#include "MarkToMarkPosnSubtables.h"
-#include "GlyphIterator.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-LEGlyphID MarkToMarkPositioningSubtable::findMark2Glyph(GlyphIterator *glyphIterator) const
-{
-    if (glyphIterator->findMark2Glyph()) {
-        return glyphIterator->getCurrGlyphID();
-    }
-
-    return 0xFFFF;
-}
-
-le_int32 MarkToMarkPositioningSubtable::process(const LETableReference &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const
-{
-    LEGlyphID markGlyph = glyphIterator->getCurrGlyphID();
-    le_int32 markCoverage = getGlyphCoverage(base, (LEGlyphID) markGlyph, success);
-
-    if (markCoverage < 0) {
-        // markGlyph isn't a covered mark glyph
-        return 0;
-    }
-
-    LEPoint markAnchor;
-    const MarkArray *markArray = (const MarkArray *) ((char *) this + SWAPW(markArrayOffset));
-    le_int32 markClass = markArray->getMarkClass(markGlyph, markCoverage, fontInstance, markAnchor);
-    le_uint16 mcCount = SWAPW(classCount);
-
-    if (markClass < 0 || markClass >= mcCount) {
-        // markGlyph isn't in the mark array or its
-        // mark class is too big. The table is mal-formed!
-        return 0;
-    }
-
-    GlyphIterator mark2Iterator(*glyphIterator);
-    LEGlyphID mark2Glyph = findMark2Glyph(&mark2Iterator);
-    le_int32 mark2Coverage = getBaseCoverage(base, (LEGlyphID) mark2Glyph, success);
-    const Mark2Array *mark2Array = (const Mark2Array *) ((char *) this + SWAPW(baseArrayOffset));
-    le_uint16 mark2Count = SWAPW(mark2Array->mark2RecordCount);
-
-    if (mark2Coverage < 0 || mark2Coverage >= mark2Count) {
-        // The mark2 glyph isn't covered, or the coverage
-        // index is too big. The latter means that the
-        // table is mal-formed...
-        return 0;
-    }
-
-    const Mark2Record *mark2Record = &mark2Array->mark2RecordArray[mark2Coverage * mcCount];
-    Offset anchorTableOffset = SWAPW(mark2Record->mark2AnchorTableOffsetArray[markClass]);
-    const AnchorTable *anchorTable = (const AnchorTable *) ((char *) mark2Array + anchorTableOffset);
-    LEPoint mark2Anchor, markAdvance, pixels;
-
-    if (anchorTableOffset == 0) {
-        // this seems to mean that the marks don't attach...
-        return 0;
-    }
-
-    anchorTable->getAnchor(mark2Glyph, fontInstance, mark2Anchor);
-
-    fontInstance->getGlyphAdvance(markGlyph, pixels);
-    fontInstance->pixelsToUnits(pixels, markAdvance);
-
-    float anchorDiffX = mark2Anchor.fX - markAnchor.fX;
-    float anchorDiffY = mark2Anchor.fY - markAnchor.fY;
-
-    glyphIterator->setCurrGlyphBaseOffset(mark2Iterator.getCurrStreamPosition());
-
-    if (glyphIterator->isRightToLeft()) {
-        glyphIterator->setCurrGlyphPositionAdjustment(anchorDiffX, anchorDiffY, -markAdvance.fX, -markAdvance.fY);
-    } else {
-        LEPoint mark2Advance;
-
-        fontInstance->getGlyphAdvance(mark2Glyph, pixels);
-        fontInstance->pixelsToUnits(pixels, mark2Advance);
-
-        glyphIterator->setCurrGlyphPositionAdjustment(anchorDiffX - mark2Advance.fX, anchorDiffY - mark2Advance.fY, -markAdvance.fX, -markAdvance.fY);
-    }
-
-    return 1;
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/MarkToMarkPosnSubtables.h b/icu4c/source/layout/MarkToMarkPosnSubtables.h
deleted file mode 100644 (file)
index 1a0a738..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __MARKTOMARKPOSITIONINGSUBTABLES_H
-#define __MARKTOMARKPOSITIONINGSUBTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "GlyphPositioningTables.h"
-#include "AttachmentPosnSubtables.h"
-#include "GlyphIterator.h"
-
-U_NAMESPACE_BEGIN
-
-struct MarkToMarkPositioningSubtable : AttachmentPositioningSubtable
-{
-  le_int32   process(const LETableReference &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const;
-    LEGlyphID  findMark2Glyph(GlyphIterator *glyphIterator) const;
-};
-
-struct Mark2Record
-{
-    Offset mark2AnchorTableOffsetArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(Mark2Record, mark2AnchorTableOffsetArray)
-
-struct Mark2Array
-{
-    le_uint16 mark2RecordCount;
-    Mark2Record mark2RecordArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(Mark2Array, mark2RecordArray)
-
-U_NAMESPACE_END
-#endif
-
diff --git a/icu4c/source/layout/MirroredCharData.cpp b/icu4c/source/layout/MirroredCharData.cpp
deleted file mode 100644 (file)
index 876e958..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2005. All Rights Reserved.
- *
- * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS
- * YOU REALLY KNOW WHAT YOU'RE DOING.
- *
- * Generated on: 07/20/2005 10:43:59 AM PDT
- */
-
-#include "LETypes.h"
-#include "DefaultCharMapper.h"
-
-U_NAMESPACE_BEGIN
-
-const LEUnicode32 DefaultCharMapper::mirroredChars[] = {
-    0x0028, 0x0029, 0x003C, 0x003E, 0x005B, 0x005D, 0x007B, 0x007D, 
-    0x00AB, 0x00BB, 0x2039, 0x203A, 0x2045, 0x2046, 0x207D, 0x207E, 
-    0x208D, 0x208E, 0x2208, 0x2209, 0x220A, 0x220B, 0x220C, 0x220D, 
-    0x2215, 0x223C, 0x223D, 0x2243, 0x2252, 0x2253, 0x2254, 0x2255, 
-    0x2264, 0x2265, 0x2266, 0x2267, 0x2268, 0x2269, 0x226A, 0x226B, 
-    0x226E, 0x226F, 0x2270, 0x2271, 0x2272, 0x2273, 0x2274, 0x2275, 
-    0x2276, 0x2277, 0x2278, 0x2279, 0x227A, 0x227B, 0x227C, 0x227D, 
-    0x227E, 0x227F, 0x2280, 0x2281, 0x2282, 0x2283, 0x2284, 0x2285, 
-    0x2286, 0x2287, 0x2288, 0x2289, 0x228A, 0x228B, 0x228F, 0x2290, 
-    0x2291, 0x2292, 0x2298, 0x22A2, 0x22A3, 0x22A6, 0x22A8, 0x22A9, 
-    0x22AB, 0x22B0, 0x22B1, 0x22B2, 0x22B3, 0x22B4, 0x22B5, 0x22B6, 
-    0x22B7, 0x22C9, 0x22CA, 0x22CB, 0x22CC, 0x22CD, 0x22D0, 0x22D1, 
-    0x22D6, 0x22D7, 0x22D8, 0x22D9, 0x22DA, 0x22DB, 0x22DC, 0x22DD, 
-    0x22DE, 0x22DF, 0x22E0, 0x22E1, 0x22E2, 0x22E3, 0x22E4, 0x22E5, 
-    0x22E6, 0x22E7, 0x22E8, 0x22E9, 0x22EA, 0x22EB, 0x22EC, 0x22ED, 
-    0x22F0, 0x22F1, 0x22F2, 0x22F3, 0x22F4, 0x22F6, 0x22F7, 0x22FA, 
-    0x22FB, 0x22FC, 0x22FD, 0x22FE, 0x2308, 0x2309, 0x230A, 0x230B, 
-    0x2329, 0x232A, 0x2768, 0x2769, 0x276A, 0x276B, 0x276C, 0x276D, 
-    0x276E, 0x276F, 0x2770, 0x2771, 0x2772, 0x2773, 0x2774, 0x2775, 
-    0x27C3, 0x27C4, 0x27C5, 0x27C6, 0x27D5, 0x27D6, 0x27DD, 0x27DE, 
-    0x27E2, 0x27E3, 0x27E4, 0x27E5, 0x27E6, 0x27E7, 0x27E8, 0x27E9, 
-    0x27EA, 0x27EB, 0x2983, 0x2984, 0x2985, 0x2986, 0x2987, 0x2988, 
-    0x2989, 0x298A, 0x298B, 0x298C, 0x298D, 0x298E, 0x298F, 0x2990, 
-    0x2991, 0x2992, 0x2993, 0x2994, 0x2995, 0x2996, 0x2997, 0x2998, 
-    0x29B8, 0x29C0, 0x29C1, 0x29C4, 0x29C5, 0x29CF, 0x29D0, 0x29D1, 
-    0x29D2, 0x29D4, 0x29D5, 0x29D8, 0x29D9, 0x29DA, 0x29DB, 0x29F5, 
-    0x29F8, 0x29F9, 0x29FC, 0x29FD, 0x2A2B, 0x2A2C, 0x2A2D, 0x2A2E, 
-    0x2A34, 0x2A35, 0x2A3C, 0x2A3D, 0x2A64, 0x2A65, 0x2A79, 0x2A7A, 
-    0x2A7D, 0x2A7E, 0x2A7F, 0x2A80, 0x2A81, 0x2A82, 0x2A83, 0x2A84, 
-    0x2A8B, 0x2A8C, 0x2A91, 0x2A92, 0x2A93, 0x2A94, 0x2A95, 0x2A96, 
-    0x2A97, 0x2A98, 0x2A99, 0x2A9A, 0x2A9B, 0x2A9C, 0x2AA1, 0x2AA2, 
-    0x2AA6, 0x2AA7, 0x2AA8, 0x2AA9, 0x2AAA, 0x2AAB, 0x2AAC, 0x2AAD, 
-    0x2AAF, 0x2AB0, 0x2AB3, 0x2AB4, 0x2ABB, 0x2ABC, 0x2ABD, 0x2ABE, 
-    0x2ABF, 0x2AC0, 0x2AC1, 0x2AC2, 0x2AC3, 0x2AC4, 0x2AC5, 0x2AC6, 
-    0x2ACD, 0x2ACE, 0x2ACF, 0x2AD0, 0x2AD1, 0x2AD2, 0x2AD3, 0x2AD4, 
-    0x2AD5, 0x2AD6, 0x2ADE, 0x2AE3, 0x2AE4, 0x2AE5, 0x2AEC, 0x2AED, 
-    0x2AF7, 0x2AF8, 0x2AF9, 0x2AFA, 0x2E02, 0x2E03, 0x2E04, 0x2E05, 
-    0x2E09, 0x2E0A, 0x2E0C, 0x2E0D, 0x2E1C, 0x2E1D, 0x3008, 0x3009, 
-    0x300A, 0x300B, 0x300C, 0x300D, 0x300E, 0x300F, 0x3010, 0x3011, 
-    0x3014, 0x3015, 0x3016, 0x3017, 0x3018, 0x3019, 0x301A, 0x301B, 
-    0xFF08, 0xFF09, 0xFF1C, 0xFF1E, 0xFF3B, 0xFF3D, 0xFF5B, 0xFF5D, 
-    0xFF5F, 0xFF60, 0xFF62, 0xFF63
-};
-
-const LEUnicode32 DefaultCharMapper::srahCderorrim[] = {
-    0x0029, 0x0028, 0x003E, 0x003C, 0x005D, 0x005B, 0x007D, 0x007B, 
-    0x00BB, 0x00AB, 0x203A, 0x2039, 0x2046, 0x2045, 0x207E, 0x207D, 
-    0x208E, 0x208D, 0x220B, 0x220C, 0x220D, 0x2208, 0x2209, 0x220A, 
-    0x29F5, 0x223D, 0x223C, 0x22CD, 0x2253, 0x2252, 0x2255, 0x2254, 
-    0x2265, 0x2264, 0x2267, 0x2266, 0x2269, 0x2268, 0x226B, 0x226A, 
-    0x226F, 0x226E, 0x2271, 0x2270, 0x2273, 0x2272, 0x2275, 0x2274, 
-    0x2277, 0x2276, 0x2279, 0x2278, 0x227B, 0x227A, 0x227D, 0x227C, 
-    0x227F, 0x227E, 0x2281, 0x2280, 0x2283, 0x2282, 0x2285, 0x2284, 
-    0x2287, 0x2286, 0x2289, 0x2288, 0x228B, 0x228A, 0x2290, 0x228F, 
-    0x2292, 0x2291, 0x29B8, 0x22A3, 0x22A2, 0x2ADE, 0x2AE4, 0x2AE3, 
-    0x2AE5, 0x22B1, 0x22B0, 0x22B3, 0x22B2, 0x22B5, 0x22B4, 0x22B7, 
-    0x22B6, 0x22CA, 0x22C9, 0x22CC, 0x22CB, 0x2243, 0x22D1, 0x22D0, 
-    0x22D7, 0x22D6, 0x22D9, 0x22D8, 0x22DB, 0x22DA, 0x22DD, 0x22DC, 
-    0x22DF, 0x22DE, 0x22E1, 0x22E0, 0x22E3, 0x22E2, 0x22E5, 0x22E4, 
-    0x22E7, 0x22E6, 0x22E9, 0x22E8, 0x22EB, 0x22EA, 0x22ED, 0x22EC, 
-    0x22F1, 0x22F0, 0x22FA, 0x22FB, 0x22FC, 0x22FD, 0x22FE, 0x22F2, 
-    0x22F3, 0x22F4, 0x22F6, 0x22F7, 0x2309, 0x2308, 0x230B, 0x230A, 
-    0x232A, 0x2329, 0x2769, 0x2768, 0x276B, 0x276A, 0x276D, 0x276C, 
-    0x276F, 0x276E, 0x2771, 0x2770, 0x2773, 0x2772, 0x2775, 0x2774, 
-    0x27C4, 0x27C3, 0x27C6, 0x27C5, 0x27D6, 0x27D5, 0x27DE, 0x27DD, 
-    0x27E3, 0x27E2, 0x27E5, 0x27E4, 0x27E7, 0x27E6, 0x27E9, 0x27E8, 
-    0x27EB, 0x27EA, 0x2984, 0x2983, 0x2986, 0x2985, 0x2988, 0x2987, 
-    0x298A, 0x2989, 0x298C, 0x298B, 0x2990, 0x298F, 0x298E, 0x298D, 
-    0x2992, 0x2991, 0x2994, 0x2993, 0x2996, 0x2995, 0x2998, 0x2997, 
-    0x2298, 0x29C1, 0x29C0, 0x29C5, 0x29C4, 0x29D0, 0x29CF, 0x29D2, 
-    0x29D1, 0x29D5, 0x29D4, 0x29D9, 0x29D8, 0x29DB, 0x29DA, 0x2215, 
-    0x29F9, 0x29F8, 0x29FD, 0x29FC, 0x2A2C, 0x2A2B, 0x2A2E, 0x2A2D, 
-    0x2A35, 0x2A34, 0x2A3D, 0x2A3C, 0x2A65, 0x2A64, 0x2A7A, 0x2A79, 
-    0x2A7E, 0x2A7D, 0x2A80, 0x2A7F, 0x2A82, 0x2A81, 0x2A84, 0x2A83, 
-    0x2A8C, 0x2A8B, 0x2A92, 0x2A91, 0x2A94, 0x2A93, 0x2A96, 0x2A95, 
-    0x2A98, 0x2A97, 0x2A9A, 0x2A99, 0x2A9C, 0x2A9B, 0x2AA2, 0x2AA1, 
-    0x2AA7, 0x2AA6, 0x2AA9, 0x2AA8, 0x2AAB, 0x2AAA, 0x2AAD, 0x2AAC, 
-    0x2AB0, 0x2AAF, 0x2AB4, 0x2AB3, 0x2ABC, 0x2ABB, 0x2ABE, 0x2ABD, 
-    0x2AC0, 0x2ABF, 0x2AC2, 0x2AC1, 0x2AC4, 0x2AC3, 0x2AC6, 0x2AC5, 
-    0x2ACE, 0x2ACD, 0x2AD0, 0x2ACF, 0x2AD2, 0x2AD1, 0x2AD4, 0x2AD3, 
-    0x2AD6, 0x2AD5, 0x22A6, 0x22A9, 0x22A8, 0x22AB, 0x2AED, 0x2AEC, 
-    0x2AF8, 0x2AF7, 0x2AFA, 0x2AF9, 0x2E03, 0x2E02, 0x2E05, 0x2E04, 
-    0x2E0A, 0x2E09, 0x2E0D, 0x2E0C, 0x2E1D, 0x2E1C, 0x3009, 0x3008, 
-    0x300B, 0x300A, 0x300D, 0x300C, 0x300F, 0x300E, 0x3011, 0x3010, 
-    0x3015, 0x3014, 0x3017, 0x3016, 0x3019, 0x3018, 0x301B, 0x301A, 
-    0xFF09, 0xFF08, 0xFF1E, 0xFF1C, 0xFF3D, 0xFF3B, 0xFF5D, 0xFF5B, 
-    0xFF60, 0xFF5F, 0xFF63, 0xFF62
-};
-
-const le_int32 DefaultCharMapper::mirroredCharsCount = 332;
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/MorphStateTables.h b/icu4c/source/layout/MorphStateTables.h
deleted file mode 100644 (file)
index ed78b0c..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. and others 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __MORPHSTATETABLES_H
-#define __MORPHSTATETABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LayoutTables.h"
-#include "MorphTables.h"
-#include "StateTables.h"
-
-U_NAMESPACE_BEGIN
-
-struct MorphStateTableHeader : MorphSubtableHeader
-{
-    StateTableHeader stHeader;
-};
-
-struct MorphStateTableHeader2 : MorphSubtableHeader2
-{
-    StateTableHeader2 stHeader;
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/MorphTables.cpp b/icu4c/source/layout/MorphTables.cpp
deleted file mode 100644 (file)
index 2200d98..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- * %W% %W%
- *
- * (C) Copyright IBM Corp. 1998 - 2015 - All Rights Reserved
- *
- */
-
-
-#include "LETypes.h"
-#include "LayoutTables.h"
-#include "MorphTables.h"
-#include "SubtableProcessor.h"
-#include "IndicRearrangementProcessor.h"
-#include "ContextualGlyphSubstProc.h"
-#include "LigatureSubstProc.h"
-#include "NonContextualGlyphSubstProc.h"
-//#include "ContextualGlyphInsertionProcessor.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-void MorphTableHeader::process(const LETableReference &base, LEGlyphStorage &glyphStorage, LEErrorCode &success) const
-{
-  le_uint32 chainCount = SWAPL(this->nChains);
-  LEReferenceTo<ChainHeader> chainHeader(base, success, chains); // moving header
-    LEReferenceToArrayOf<ChainHeader> chainHeaderArray(base, success, chains, chainCount);
-    le_uint32 chain;
-
-    for (chain = 0; LE_SUCCESS(success) && (chain < chainCount); chain += 1) {
-        FeatureFlags defaultFlags = SWAPL(chainHeader->defaultFlags);
-        le_uint32 chainLength = SWAPL(chainHeader->chainLength);
-        le_int16 nFeatureEntries = SWAPW(chainHeader->nFeatureEntries);
-        le_int16 nSubtables = SWAPW(chainHeader->nSubtables);
-        LEReferenceTo<MorphSubtableHeader> subtableHeader =
-          LEReferenceTo<MorphSubtableHeader>(chainHeader,success, &(chainHeader->featureTable[nFeatureEntries]));
-        le_int16 subtable;
-
-        for (subtable = 0; LE_SUCCESS(success) && (subtable < nSubtables); subtable += 1) {
-            le_int16 length = SWAPW(subtableHeader->length);
-            SubtableCoverage coverage = SWAPW(subtableHeader->coverage);
-            FeatureFlags subtableFeatures = SWAPL(subtableHeader->subtableFeatures);
-
-            // should check coverage more carefully...
-            if ((coverage & scfVertical) == 0 && (subtableFeatures & defaultFlags) != 0  && LE_SUCCESS(success)) {
-              subtableHeader->process(subtableHeader, glyphStorage, success);
-            }
-
-            subtableHeader.addOffset(length, success);
-        }
-        chainHeader.addOffset(chainLength, success);
-    }
-}
-
-void MorphSubtableHeader::process(const LEReferenceTo<MorphSubtableHeader> &base, LEGlyphStorage &glyphStorage, LEErrorCode &success) const
-{
-    SubtableProcessor *processor = NULL;
-
-    if (LE_FAILURE(success)) return;
-
-    switch (SWAPW(coverage) & scfTypeMask)
-    {
-    case mstIndicRearrangement:
-      processor = new IndicRearrangementProcessor(base, success);
-        break;
-
-    case mstContextualGlyphSubstitution:
-      processor = new ContextualGlyphSubstitutionProcessor(base, success);
-        break;
-
-    case mstLigatureSubstitution:
-      processor = new LigatureSubstitutionProcessor(base, success);
-        break;
-
-    case mstReservedUnused:
-        break;
-
-    case mstNonContextualGlyphSubstitution:
-      processor = NonContextualGlyphSubstitutionProcessor::createInstance(base, success);
-        break;
-
-    /*
-    case mstContextualGlyphInsertion:
-        processor = new ContextualGlyphInsertionProcessor(this);
-        break;
-    */
-
-    default:
-        break;
-    }
-
-    if (processor != NULL) {
-      if(LE_SUCCESS(success)) {
-        processor->process(glyphStorage, success);
-      }
-      delete processor;
-    }
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/MorphTables.h b/icu4c/source/layout/MorphTables.h
deleted file mode 100644 (file)
index 9474a82..0000000
+++ /dev/null
@@ -1,389 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. and others 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __MORPHTABLES_H
-#define __MORPHTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LayoutTables.h"
-#include "LETableReference.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-typedef le_uint32 FeatureFlags;
-
-typedef le_int16 FeatureType;
-typedef le_int16 FeatureSetting;
-
-struct FeatureTableEntry
-{
-    FeatureType     featureType;
-    FeatureSetting  featureSetting;
-    FeatureFlags    enableFlags;
-    FeatureFlags    disableFlags;
-};
-
-struct ChainHeader
-{
-    FeatureFlags        defaultFlags;
-    le_uint32           chainLength;
-    le_int16           nFeatureEntries;
-    le_int16           nSubtables;
-    FeatureTableEntry   featureTable[ANY_NUMBER];
-};
-LE_VAR_ARRAY(ChainHeader, featureTable)
-
-struct MorphTableHeader
-{
-    le_int32    version;
-    le_uint32   nChains;
-    ChainHeader chains[ANY_NUMBER];
-
-  void process(const LETableReference& base, LEGlyphStorage &glyphStorage, LEErrorCode &success) const;
-};
-LE_VAR_ARRAY(MorphTableHeader, chains)
-
-typedef le_int16 SubtableCoverage;
-typedef le_uint32 SubtableCoverage2;
-
-enum SubtableCoverageFlags
-{
-    scfVertical = 0x8000,
-    scfReverse  = 0x4000,
-    scfIgnoreVt = 0x2000,
-    scfReserved = 0x1FF8,
-    scfTypeMask = 0x0007
-};
-
-enum MorphSubtableType
-{
-    mstIndicRearrangement               = 0,
-    mstContextualGlyphSubstitution      = 1,
-    mstLigatureSubstitution             = 2,
-    mstReservedUnused                   = 3,
-    mstNonContextualGlyphSubstitution   = 4,
-    mstContextualGlyphInsertion         = 5
-};
-
-struct MorphSubtableHeader
-{
-    le_int16           length;
-    SubtableCoverage    coverage;
-    FeatureFlags        subtableFeatures;
-
-  void process(const LEReferenceTo<MorphSubtableHeader> &base, LEGlyphStorage &glyphStorage, LEErrorCode &success) const;
-};
-
-enum SubtableCoverageFlags2
-{
-    scfVertical2 = 0x80000000,
-    scfReverse2  = 0x40000000,
-    scfIgnoreVt2 = 0x20000000,
-    scfReserved2 = 0x1FFFFF00,
-    scfTypeMask2 = 0x000000FF
-};
-
-struct MorphSubtableHeader2
-{
-    le_uint32           length;
-    SubtableCoverage2    coverage;
-    FeatureFlags        subtableFeatures;
-    
-    void process(const LEReferenceTo<MorphSubtableHeader2> &base, LEGlyphStorage &glyphStorage, LEErrorCode &success) const;
-};
-
-struct ChainHeader2
-{
-    FeatureFlags        defaultFlags;
-    le_uint32           chainLength;
-    le_uint32           nFeatureEntries;
-    le_uint32           nSubtables;
-    FeatureTableEntry   featureTable[ANY_NUMBER];
-};
-LE_VAR_ARRAY(ChainHeader2, featureTable)
-
-struct MorphTableHeader2
-{
-    le_int32    version;
-    le_uint32   nChains;
-    ChainHeader2 chains[ANY_NUMBER];
-    
-    void process(const LEReferenceTo<MorphTableHeader2> &base, LEGlyphStorage &glyphStorage, le_int32 typoFlags, LEErrorCode &success) const;
-};
-LE_VAR_ARRAY(MorphTableHeader2, chains)
-
-/*
- * AAT Font Features
- * source: https://developer.apple.com/fonts/registry/
- * (plus addition from ATS/SFNTLayoutTypes.h)
- */
-enum {
-
-   allTypographicFeaturesType = 0,
-
-      allTypeFeaturesOnSelector            = 0,
-      allTypeFeaturesOffSelector           = 1,
-
-   ligaturesType = 1,
-
-      requiredLigaturesOnSelector          = 0,
-      requiredLigaturesOffSelector         = 1,
-      commonLigaturesOnSelector            = 2,
-      commonLigaturesOffSelector           = 3,
-      rareLigaturesOnSelector              = 4,
-      rareLigaturesOffSelector             = 5,
-      logosOnSelector                      = 6,
-      logosOffSelector                     = 7,
-      rebusPicturesOnSelector              = 8,
-      rebusPicturesOffSelector             = 9,
-      diphthongLigaturesOnSelector         = 10,
-      diphthongLigaturesOffSelector        = 11,
-      squaredLigaturesOnSelector           = 12,
-      squaredLigaturesOffSelector          = 13,
-      abbrevSquaredLigaturesOnSelector     = 14,
-      abbrevSquaredLigaturesOffSelector    = 15,
-      symbolLigaturesOnSelector            = 16,
-      symbolLigaturesOffSelector           = 17,
-      contextualLigaturesOnSelector        = 18,
-      contextualLigaturesOffSelector       = 19,
-      historicalLigaturesOnSelector        = 20,
-      historicalLigaturesOffSelector       = 21,
-
-   cursiveConnectionType = 2,
-
-      unconnectedSelector                  = 0,
-      partiallyConnectedSelector           = 1,
-      cursiveSelector                      = 2,
-
-   letterCaseType = 3,
-
-      upperAndLowerCaseSelector            = 0,
-      allCapsSelector                      = 1,
-      allLowerCaseSelector                 = 2,
-      smallCapsSelector                    = 3,
-      initialCapsSelector                  = 4,
-      initialCapsAndSmallCapsSelector      = 5,
-
-   verticalSubstitutionType = 4,
-
-      substituteVerticalFormsOnSelector    = 0,
-      substituteVerticalFormsOffSelector   = 1,
-
-   linguisticRearrangementType = 5,
-
-      linguisticRearrangementOnSelector    = 0,
-      linguisticRearrangementOffSelector   = 1,
-
-   numberSpacingType = 6,
-
-      monospacedNumbersSelector            = 0,
-      proportionalNumbersSelector          = 1,
-
-   /*
-   appleReserved1Type = 7,
-   */
-
-   smartSwashType = 8,
-
-      wordInitialSwashesOnSelector         = 0,
-      wordInitialSwashesOffSelector        = 1,
-      wordFinalSwashesOnSelector           = 2,
-      wordFinalSwashesOffSelector          = 3,
-      lineInitialSwashesOnSelector         = 4,
-      lineInitialSwashesOffSelector        = 5,
-      lineFinalSwashesOnSelector           = 6,
-      lineFinalSwashesOffSelector          = 7,
-      nonFinalSwashesOnSelector            = 8,
-      nonFinalSwashesOffSelector           = 9,
-
-   diacriticsType = 9,
-
-      showDiacriticsSelector               = 0,
-      hideDiacriticsSelector               = 1,
-      decomposeDiacriticsSelector          = 2,
-
-   verticalPositionType = 10,
-
-      normalPositionSelector               = 0,
-      superiorsSelector                    = 1,
-      inferiorsSelector                    = 2,
-      ordinalsSelector                     = 3,
-
-   fractionsType = 11,
-
-      noFractionsSelector                  = 0,
-      verticalFractionsSelector            = 1,
-      diagonalFractionsSelector            = 2,
-
-   /*
-   appleReserved2Type = 12,
-   */
-
-   overlappingCharactersType = 13,
-
-      preventOverlapOnSelector             = 0,
-      preventOverlapOffSelector            = 1,
-
-   typographicExtrasType = 14,
-
-      hyphensToEmDashOnSelector            = 0,
-      hyphensToEmDashOffSelector           = 1,
-      hyphenToEnDashOnSelector             = 2,
-      hyphenToEnDashOffSelector            = 3,
-      unslashedZeroOnSelector              = 4,
-      slashedZeroOffSelector               = 4,
-      unslashedZeroOffSelector             = 5,
-      slashedZeroOnSelector                = 5,
-      formInterrobangOnSelector            = 6,
-      formInterrobangOffSelector           = 7,
-      smartQuotesOnSelector                = 8,
-      smartQuotesOffSelector               = 9,
-      periodsToEllipsisOnSelector          = 10,
-      periodsToEllipsisOffSelector         = 11,
-
-   mathematicalExtrasType = 15,
-
-      hyphenToMinusOnSelector              = 0,
-      hyphenToMinusOffSelector             = 1,
-      asteriskToMultiplyOnSelector         = 2,
-      asteriskToMultiplyOffSelector        = 3,
-      slashToDivideOnSelector              = 4,
-      slashToDivideOffSelector             = 5,
-      inequalityLigaturesOnSelector        = 6,
-      inequalityLigaturesOffSelector       = 7,
-      exponentsOnSelector                  = 8,
-      exponentsOffSelector                 = 9,
-
-   ornamentSetsType = 16,
-
-      noOrnamentsSelector                  = 0,
-      dingbatsSelector                     = 1,
-      piCharactersSelector                 = 2,
-      fleuronsSelector                     = 3,
-      decorativeBordersSelector            = 4,
-      internationalSymbolsSelector         = 5,
-      mathSymbolsSelector                  = 6,
-
-   characterAlternativesType = 17,
-
-      noAlternatesSelector                 = 0,
-
-   designComplexityType = 18,
-
-      designLevel1Selector                 = 0,
-      designLevel2Selector                 = 1,
-      designLevel3Selector                 = 2,
-      designLevel4Selector                 = 3,
-      designLevel5Selector                 = 4,
-      designLevel6Selector                 = 5,
-      designLevel7Selector                 = 6,
-
-   styleOptionsType = 19,
-
-      noStyleOptionsSelector               = 0,
-      displayTextSelector                  = 1,
-      engravedTextSelector                 = 2,
-      illuminatedCapsSelector              = 3,
-      titlingCapsSelector                  = 4,
-      tallCapsSelector                     = 5,
-
-   characterShapeType = 20,
-
-      traditionalCharactersSelector        = 0,
-      simplifiedCharactersSelector         = 1,
-      jis1978CharactersSelector            = 2,
-      jis1983CharactersSelector            = 3,
-      jis1990CharactersSelector            = 4,
-      traditionalAltOneSelector            = 5,
-      traditionalAltTwoSelector            = 6,
-      traditionalAltThreeSelector          = 7,
-      traditionalAltFourSelector           = 8,
-      traditionalAltFiveSelector           = 9,
-      expertCharactersSelector             = 10,
-
-   numberCaseType = 21,
-
-      lowerCaseNumbersSelector             = 0,
-      upperCaseNumbersSelector             = 1,
-
-   textSpacingType = 22,
-
-      proportionalTextSelector             = 0,
-      monospacedTextSelector               = 1,
-      halfWidthTextSelector                = 2,
-      normallySpacedTextSelector           = 3,
-
-   transliterationType = 23,
-
-      noTransliterationSelector            = 0,
-      hanjaToHangulSelector                = 1,
-      hiraganaToKatakanaSelector           = 2,
-      katakanaToHiraganaSelector           = 3,
-      kanaToRomanizationSelector           = 4,
-      romanizationToHiraganaSelector       = 5,
-      romanizationToKatakanaSelector       = 6,
-      hanjaToHangulAltOneSelector          = 7,
-      hanjaToHangulAltTwoSelector          = 8,
-      hanjaToHangulAltThreeSelector        = 9,
-
-   annotationType = 24,
-
-      noAnnotationSelector                 = 0,
-      boxAnnotationSelector                = 1,
-      roundedBoxAnnotationSelector         = 2,
-      circleAnnotationSelector             = 3,
-      invertedCircleAnnotationSelector     = 4,
-      parenthesisAnnotationSelector        = 5,
-      periodAnnotationSelector             = 6,
-      romanNumeralAnnotationSelector       = 7,
-      diamondAnnotationSelector            = 8,
-
-   kanaSpacingType = 25,
-
-      fullWidthKanaSelector                = 0,
-      proportionalKanaSelector             = 1,
-
-   ideographicSpacingType = 26,
-
-      fullWidthIdeographsSelector          = 0,
-      proportionalIdeographsSelector       = 1,
-
-   cjkRomanSpacingType = 103,
-
-      halfWidthCJKRomanSelector            = 0,
-      proportionalCJKRomanSelector         = 1,
-      defaultCJKRomanSelector              = 2,
-      fullWidthCJKRomanSelector            = 3,
-
-   rubyKanaType = 28,
-
-      rubyKanaOnSelector                = 2,
-      rubyKanaOffSelector               = 3,
-
-/* The following types are provided for compatibility; note that
-   their use is deprecated. */
-
-   adobeCharacterSpacingType = 100,        /* prefer 22 */
-   adobeKanaSpacingType = 101,             /* prefer 25 */
-   adobeKanjiSpacingType = 102,            /* prefer 26 */
-   adobeSquareLigatures = 104,             /* prefer 1 */
-
-   lastFeatureType = -1
-};
-
-U_NAMESPACE_END
-#endif
-
diff --git a/icu4c/source/layout/MorphTables2.cpp b/icu4c/source/layout/MorphTables2.cpp
deleted file mode 100644 (file)
index bfd8184..0000000
+++ /dev/null
@@ -1,228 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- * (C) Copyright IBM Corp. and others 1998 - 2015 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LayoutTables.h"
-#include "MorphTables.h"
-#include "SubtableProcessor2.h"
-#include "IndicRearrangementProcessor2.h"
-#include "ContextualGlyphSubstProc2.h"
-#include "LigatureSubstProc2.h"
-#include "NonContextualGlyphSubstProc2.h"
-#include "ContextualGlyphInsertionProc2.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-void MorphTableHeader2::process(const LEReferenceTo<MorphTableHeader2> &base, LEGlyphStorage &glyphStorage, 
-                                le_int32 typoFlags, LEErrorCode &success) const
-{
-  if(LE_FAILURE(success)) return;
-
-  le_uint32 chainCount = SWAPL(this->nChains);
-  LEReferenceTo<ChainHeader2> chainHeader(base, success, &chains[0]); 
-  /* chainHeader and subtableHeader are implemented as a moving pointer rather than an array dereference
-   * to (slightly) reduce code churn. However, must be careful to preincrement them the 2nd time through.
-   * We don't want to increment them at the end of the loop, as that would attempt to dereference
-   * out of range memory. 
-   */
-  le_uint32 chain;
-
-  for (chain = 0; LE_SUCCESS(success) && (chain < chainCount); chain++) {
-        if (chain>0) {
-          le_uint32 chainLength = SWAPL(chainHeader->chainLength);
-          chainHeader.addOffset(chainLength, success); // Don't increment the first time
-        }
-        FeatureFlags flag = SWAPL(chainHeader->defaultFlags);
-        le_uint32 nFeatureEntries = SWAPL(chainHeader->nFeatureEntries);
-        le_uint32 nSubtables = SWAPL(chainHeader->nSubtables);
-        LEReferenceTo<MorphSubtableHeader2> subtableHeader(chainHeader,
-              success, (const MorphSubtableHeader2 *)&chainHeader->featureTable[nFeatureEntries]);
-        le_uint32 subtable;
-        if(LE_FAILURE(success)) break; // malformed table
-        
-        if (typoFlags != 0) {
-           le_uint32 featureEntry;
-           LEReferenceToArrayOf<FeatureTableEntry> featureTableRef(chainHeader, success, &chainHeader->featureTable[0], nFeatureEntries);
-           if(LE_FAILURE(success)) break;
-            // Feature subtables
-            for (featureEntry = 0; featureEntry < nFeatureEntries; featureEntry++) {
-                const FeatureTableEntry &featureTableEntry = featureTableRef(featureEntry, success);
-                le_int16 featureType = SWAPW(featureTableEntry.featureType);
-                le_int16 featureSetting = SWAPW(featureTableEntry.featureSetting);
-                le_uint32 enableFlags = SWAPL(featureTableEntry.enableFlags);
-                le_uint32 disableFlags = SWAPL(featureTableEntry.disableFlags);
-                switch (featureType) {
-                    case ligaturesType:
-                        if ((typoFlags & LE_Ligatures_FEATURE_ENUM ) && (featureSetting ^ 0x1)){
-                            flag &= disableFlags;
-                            flag |= enableFlags;
-                        } else {
-                            if (((typoFlags & LE_RLIG_FEATURE_FLAG) && featureSetting == requiredLigaturesOnSelector) ||
-                                ((typoFlags & LE_CLIG_FEATURE_FLAG) && featureSetting == contextualLigaturesOnSelector) ||
-                                ((typoFlags & LE_HLIG_FEATURE_FLAG) && featureSetting == historicalLigaturesOnSelector) ||
-                                ((typoFlags & LE_LIGA_FEATURE_FLAG) && featureSetting == commonLigaturesOnSelector)) {
-                                flag &= disableFlags;
-                                flag |= enableFlags;
-                            }
-                        }
-                        break;
-                    case letterCaseType:
-                        if ((typoFlags & LE_SMCP_FEATURE_FLAG) && featureSetting == smallCapsSelector) {
-                            flag &= disableFlags;
-                            flag |= enableFlags;
-                        }
-                        break;
-                    case verticalSubstitutionType:
-                        break;
-                    case linguisticRearrangementType:
-                        break;
-                    case numberSpacingType:
-                        break;
-                    case smartSwashType:
-                        if ((typoFlags & LE_SWSH_FEATURE_FLAG) && (featureSetting ^ 0x1)){
-                            flag &= disableFlags;
-                            flag |= enableFlags;
-                        }
-                        break;
-                    case diacriticsType:
-                        break;
-                    case verticalPositionType:
-                        break;
-                    case fractionsType:
-                        if (((typoFlags & LE_FRAC_FEATURE_FLAG) && featureSetting == diagonalFractionsSelector) ||
-                            ((typoFlags & LE_AFRC_FEATURE_FLAG) && featureSetting == verticalFractionsSelector)) {
-                            flag &= disableFlags;
-                            flag |= enableFlags;
-                        } else {
-                            flag &= disableFlags;
-                        }
-                        break;
-                    case typographicExtrasType:
-                        if ((typoFlags & LE_ZERO_FEATURE_FLAG) && featureSetting == slashedZeroOnSelector) {
-                            flag &= disableFlags;
-                            flag |= enableFlags;
-                        }
-                        break;
-                    case mathematicalExtrasType:
-                        break;
-                    case ornamentSetsType:
-                        break;
-                    case characterAlternativesType:
-                        break;
-                    case designComplexityType:
-                        if (((typoFlags & LE_SS01_FEATURE_FLAG) && featureSetting == designLevel1Selector) ||
-                            ((typoFlags & LE_SS02_FEATURE_FLAG) && featureSetting == designLevel2Selector) ||
-                            ((typoFlags & LE_SS03_FEATURE_FLAG) && featureSetting == designLevel3Selector) ||
-                            ((typoFlags & LE_SS04_FEATURE_FLAG) && featureSetting == designLevel4Selector) ||
-                            ((typoFlags & LE_SS05_FEATURE_FLAG) && featureSetting == designLevel5Selector) ||
-                            ((typoFlags & LE_SS06_FEATURE_FLAG) && featureSetting == designLevel6Selector) ||
-                            ((typoFlags & LE_SS07_FEATURE_FLAG) && featureSetting == designLevel7Selector)) {
-
-                            flag &= disableFlags;
-                            flag |= enableFlags;
-                        }
-                        break;
-                    case styleOptionsType:
-                        break;
-                    case characterShapeType:
-                        break;
-                    case numberCaseType:
-                        break;
-                    case textSpacingType:
-                        break;
-                    case transliterationType:
-                        break;
-                    case annotationType:
-                        if ((typoFlags & LE_NALT_FEATURE_FLAG) && featureSetting == circleAnnotationSelector) {
-                            flag &= disableFlags;
-                            flag |= enableFlags;
-                        }
-                        break;
-                    case kanaSpacingType:
-                        break;
-                    case ideographicSpacingType:
-                        break;
-                    case rubyKanaType:
-                        if ((typoFlags & LE_RUBY_FEATURE_FLAG) && featureSetting == rubyKanaOnSelector) {
-                            flag &= disableFlags;
-                            flag |= enableFlags;
-                        }
-                        break;
-                    case cjkRomanSpacingType:
-                        break;
-                    default:
-                        break;
-                }
-            }
-        }
-        
-        for (subtable = 0;  LE_SUCCESS(success) && subtable < nSubtables; subtable++) {
-            if(subtable>0)  {
-              le_uint32 length = SWAPL(subtableHeader->length);
-              subtableHeader.addOffset(length, success); // Don't addOffset for the last entry.
-              if (LE_FAILURE(success)) break;
-            }
-            le_uint32 coverage = SWAPL(subtableHeader->coverage);
-            FeatureFlags subtableFeatures = SWAPL(subtableHeader->subtableFeatures);
-            // should check coverage more carefully...
-            if (((coverage & scfIgnoreVt2) || !(coverage & scfVertical2)) && (subtableFeatures & flag) != 0) {
-              subtableHeader->process(subtableHeader, glyphStorage, success);
-            }
-        }
-    }    
-}
-
-void MorphSubtableHeader2::process(const LEReferenceTo<MorphSubtableHeader2> &base, LEGlyphStorage &glyphStorage, LEErrorCode &success) const
-{
-    SubtableProcessor2 *processor = NULL;
-
-    if (LE_FAILURE(success)) return;
-
-    switch (SWAPL(coverage) & scfTypeMask2)
-    {
-    case mstIndicRearrangement:
-        processor = new IndicRearrangementProcessor2(base, success);
-        break;
-
-    case mstContextualGlyphSubstitution:
-        processor = new ContextualGlyphSubstitutionProcessor2(base, success);
-        break;
-
-    case mstLigatureSubstitution:
-        processor = new LigatureSubstitutionProcessor2(base, success);
-        break;
-
-    case mstReservedUnused:
-        break;
-
-    case mstNonContextualGlyphSubstitution:
-        processor = NonContextualGlyphSubstitutionProcessor2::createInstance(base, success);
-        break;
-
-    
-    case mstContextualGlyphInsertion:
-        processor = new ContextualGlyphInsertionProcessor2(base, success);
-        break;
-
-    default:
-        return;
-        break; /*NOTREACHED*/
-    }
-
-    if (processor != NULL) {
-      processor->process(glyphStorage, success);
-        delete processor;
-    } else {
-      if(LE_SUCCESS(success)) {
-        success = LE_MEMORY_ALLOCATION_ERROR; // because ptr is null and we didn't break out.
-      }
-    }
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/MultipleSubstSubtables.cpp b/icu4c/source/layout/MultipleSubstSubtables.cpp
deleted file mode 100644 (file)
index 50aaf41..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2015 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEGlyphFilter.h"
-#include "OpenTypeTables.h"
-#include "GlyphSubstitutionTables.h"
-#include "MultipleSubstSubtables.h"
-#include "GlyphIterator.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-le_uint32 MultipleSubstitutionSubtable::process(const LETableReference &base, GlyphIterator *glyphIterator, LEErrorCode& success, const LEGlyphFilter *filter) const
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    LEGlyphID glyph = glyphIterator->getCurrGlyphID();
-
-    // If there's a filter, we only want to do the
-    // substitution if the *input* glyphs doesn't
-    // exist.
-    //
-    // FIXME: is this always the right thing to do?
-    // FIXME: should this only be done for a non-zero
-    //        glyphCount?
-    if (filter != NULL && filter->accept(glyph)) {
-        return 0;
-    }
-
-    le_int32 coverageIndex = getGlyphCoverage(base, glyph, success);
-    le_uint16 seqCount = SWAPW(sequenceCount);
-    LEReferenceToArrayOf<Offset>
-        sequenceTableOffsetArrayRef(base, success, sequenceTableOffsetArray, seqCount);
-
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-    if (coverageIndex >= 0 && coverageIndex < seqCount) {
-        Offset sequenceTableOffset = SWAPW(sequenceTableOffsetArray[coverageIndex]);
-        const SequenceTable *sequenceTable = (const SequenceTable *) ((char *) this + sequenceTableOffset);
-        le_uint16 glyphCount = SWAPW(sequenceTable->glyphCount);
-
-        if (glyphCount == 0) {
-            glyphIterator->setCurrGlyphID(0xFFFF);
-            return 1;
-        } else if (glyphCount == 1) {
-            TTGlyphID substitute = SWAPW(sequenceTable->substituteArray[0]);
-
-            if (filter != NULL && ! filter->accept(LE_SET_GLYPH(glyph, substitute))) {
-                return 0;
-            }
-
-            glyphIterator->setCurrGlyphID(substitute);
-            return 1;
-        } else {
-            // If there's a filter, make sure all of the output glyphs
-            // exist.
-            if (filter != NULL) {
-                for (le_int32 i = 0; i < glyphCount; i += 1) {
-                    TTGlyphID substitute = SWAPW(sequenceTable->substituteArray[i]);
-
-                    if (! filter->accept(substitute)) {
-                        return 0;
-                    }
-                }
-            }
-
-            LEGlyphID *newGlyphs = glyphIterator->insertGlyphs(glyphCount, success);
-            if (LE_FAILURE(success)) { 
-                return 0;
-            }
-
-            le_int32 insert = 0, direction = 1;
-
-            if (glyphIterator->isRightToLeft()) {
-                insert = glyphCount - 1;
-                direction = -1;
-            }
-
-            for (le_int32 i = 0; i < glyphCount; i += 1) {
-                TTGlyphID substitute = SWAPW(sequenceTable->substituteArray[i]);
-
-                newGlyphs[insert] = LE_SET_GLYPH(glyph, substitute);
-                insert += direction;
-            }
-
-            return 1;
-        }
-    }
-
-    return 0;
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/MultipleSubstSubtables.h b/icu4c/source/layout/MultipleSubstSubtables.h
deleted file mode 100644 (file)
index 6d976a4..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __MULTIPLESUBSTITUTIONSUBTABLES_H
-#define __MULTIPLESUBSTITUTIONSUBTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEGlyphFilter.h"
-#include "OpenTypeTables.h"
-#include "GlyphSubstitutionTables.h"
-#include "GlyphIterator.h"
-
-U_NAMESPACE_BEGIN
-
-struct SequenceTable
-{
-    le_uint16 glyphCount;
-    TTGlyphID substituteArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(SequenceTable, substituteArray)
-
-struct MultipleSubstitutionSubtable : GlyphSubstitutionSubtable
-{
-    le_uint16 sequenceCount;
-    Offset    sequenceTableOffsetArray[ANY_NUMBER];
-
-    le_uint32 process(const LETableReference &base, GlyphIterator *glyphIterator, LEErrorCode& success, const LEGlyphFilter *filter = NULL) const;
-};
-LE_VAR_ARRAY(MultipleSubstitutionSubtable, sequenceTableOffsetArray)
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/NonContextualGlyphSubst.h b/icu4c/source/layout/NonContextualGlyphSubst.h
deleted file mode 100644 (file)
index c456e3b..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- * (C) Copyright IBM Corp. and others 1998-2016 - All Rights Reserved
- *
- */
-
-#ifndef __NONCONTEXTUALGLYPHSUBSTITUTION_H
-#define __NONCONTEXTUALGLYPHSUBSTITUTION_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LayoutTables.h"
-#include "LookupTables.h"
-#include "MorphTables.h"
-
-U_NAMESPACE_BEGIN
-
-struct NonContextualGlyphSubstitutionHeader : MorphSubtableHeader
-{
-    LookupTableBase table;
-};
-
-struct NonContextualGlyphSubstitutionHeader2 : MorphSubtableHeader2
-{
-    LookupTableBase table;
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/NonContextualGlyphSubstProc.cpp b/icu4c/source/layout/NonContextualGlyphSubstProc.cpp
deleted file mode 100644 (file)
index f7c0b84..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc.h"
-#include "SimpleArrayProcessor.h"
-#include "SegmentSingleProcessor.h"
-#include "SegmentArrayProcessor.h"
-#include "SingleTableProcessor.h"
-#include "TrimmedArrayProcessor.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-NonContextualGlyphSubstitutionProcessor::NonContextualGlyphSubstitutionProcessor()
-{
-}
-
-NonContextualGlyphSubstitutionProcessor::NonContextualGlyphSubstitutionProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success)
-  : SubtableProcessor(morphSubtableHeader, success)
-{
-}
-
-NonContextualGlyphSubstitutionProcessor::~NonContextualGlyphSubstitutionProcessor()
-{
-}
-
-SubtableProcessor *NonContextualGlyphSubstitutionProcessor::createInstance(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success)
-{
-  LEReferenceTo<NonContextualGlyphSubstitutionHeader> header(morphSubtableHeader, success);
-
-  if(LE_FAILURE(success)) return NULL;
-
-  switch (SWAPW(header->table.format)) {
-    case ltfSimpleArray:
-      return new SimpleArrayProcessor(morphSubtableHeader, success);
-
-    case ltfSegmentSingle:
-      return new SegmentSingleProcessor(morphSubtableHeader, success);
-
-    case ltfSegmentArray:
-      return new SegmentArrayProcessor(morphSubtableHeader, success);
-
-    case ltfSingleTable:
-      return new SingleTableProcessor(morphSubtableHeader, success);
-
-    case ltfTrimmedArray:
-      return new TrimmedArrayProcessor(morphSubtableHeader, success);
-
-    default:
-        return NULL;
-    }
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/NonContextualGlyphSubstProc.h b/icu4c/source/layout/NonContextualGlyphSubstProc.h
deleted file mode 100644 (file)
index 1004edf..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __NONCONTEXTUALGLYPHSUBSTITUTIONPROCESSOR_H
-#define __NONCONTEXTUALGLYPHSUBSTITUTIONPROCESSOR_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor.h"
-#include "NonContextualGlyphSubst.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class NonContextualGlyphSubstitutionProcessor : public SubtableProcessor
-{
-public:
-  virtual void process(LEGlyphStorage &glyphStorage, LEErrorCode &success) = 0;
-
-    static SubtableProcessor *createInstance(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success);
-
-protected:
-    NonContextualGlyphSubstitutionProcessor();
-    NonContextualGlyphSubstitutionProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &status);
-
-    virtual ~NonContextualGlyphSubstitutionProcessor();
-
-private:
-    NonContextualGlyphSubstitutionProcessor(const NonContextualGlyphSubstitutionProcessor &other); // forbid copying of this class
-    NonContextualGlyphSubstitutionProcessor &operator=(const NonContextualGlyphSubstitutionProcessor &other); // forbid copying of this class
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/NonContextualGlyphSubstProc2.cpp b/icu4c/source/layout/NonContextualGlyphSubstProc2.cpp
deleted file mode 100644 (file)
index a57c83c..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor2.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc2.h"
-#include "SimpleArrayProcessor2.h"
-#include "SegmentSingleProcessor2.h"
-#include "SegmentArrayProcessor2.h"
-#include "SingleTableProcessor2.h"
-#include "TrimmedArrayProcessor2.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-NonContextualGlyphSubstitutionProcessor2::NonContextualGlyphSubstitutionProcessor2()
-{
-}
-
-NonContextualGlyphSubstitutionProcessor2::NonContextualGlyphSubstitutionProcessor2(
-     const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success)
-  : SubtableProcessor2(morphSubtableHeader, success)
-{
-}
-
-NonContextualGlyphSubstitutionProcessor2::~NonContextualGlyphSubstitutionProcessor2()
-{
-}
-
-SubtableProcessor2 *NonContextualGlyphSubstitutionProcessor2::createInstance(
-      const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success)
-{
-    const LEReferenceTo<NonContextualGlyphSubstitutionHeader2> header(morphSubtableHeader, success);
-    if(LE_FAILURE(success)) return NULL;
-
-    switch (SWAPW(header->table.format))
-    {
-    case ltfSimpleArray:
-      return new SimpleArrayProcessor2(morphSubtableHeader, success);
-
-    case ltfSegmentSingle:
-      return new SegmentSingleProcessor2(morphSubtableHeader, success);
-
-    case ltfSegmentArray:
-      return new SegmentArrayProcessor2(morphSubtableHeader, success);
-
-    case ltfSingleTable:
-      return new SingleTableProcessor2(morphSubtableHeader, success);
-
-    case ltfTrimmedArray:
-      return new TrimmedArrayProcessor2(morphSubtableHeader, success);
-
-    default:
-        return NULL;
-    }
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/NonContextualGlyphSubstProc2.h b/icu4c/source/layout/NonContextualGlyphSubstProc2.h
deleted file mode 100644 (file)
index 529d057..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __NONCONTEXTUALGLYPHSUBSTITUTIONPROCESSOR2_H
-#define __NONCONTEXTUALGLYPHSUBSTITUTIONPROCESSOR2_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor2.h"
-#include "NonContextualGlyphSubst.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class NonContextualGlyphSubstitutionProcessor2 : public SubtableProcessor2
-{
-public:
-    virtual void process(LEGlyphStorage &glyphStorage, LEErrorCode &success) = 0;
-
-    static SubtableProcessor2 *createInstance(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success);
-
-protected:
-    NonContextualGlyphSubstitutionProcessor2();
-    NonContextualGlyphSubstitutionProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success);
-
-    virtual ~NonContextualGlyphSubstitutionProcessor2();
-
-private:
-    NonContextualGlyphSubstitutionProcessor2(const NonContextualGlyphSubstitutionProcessor2 &other); // forbid copying of this class
-    NonContextualGlyphSubstitutionProcessor2 &operator=(const NonContextualGlyphSubstitutionProcessor2 &other); // forbid copying of this class
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/OpenTypeLayoutEngine.cpp b/icu4c/source/layout/OpenTypeLayoutEngine.cpp
deleted file mode 100644 (file)
index b672817..0000000
+++ /dev/null
@@ -1,559 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-
-/*
- *
- * (C) Copyright IBM Corp. and others 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEScripts.h"
-#include "LELanguages.h"
-
-#include "LayoutEngine.h"
-#include "CanonShaping.h"
-#include "OpenTypeLayoutEngine.h"
-#include "ScriptAndLanguageTags.h"
-#include "CharSubstitutionFilter.h"
-
-#include "GlyphSubstitutionTables.h"
-#include "GlyphDefinitionTables.h"
-#include "GlyphPositioningTables.h"
-
-#include "LEGlyphStorage.h"
-#include "GlyphPositionAdjustments.h"
-
-#include "GDEFMarkFilter.h"
-
-#include "KernTable.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(OpenTypeLayoutEngine)
-
-#define ccmpFeatureTag LE_CCMP_FEATURE_TAG
-#define ligaFeatureTag LE_LIGA_FEATURE_TAG
-#define cligFeatureTag LE_CLIG_FEATURE_TAG
-#define kernFeatureTag LE_KERN_FEATURE_TAG
-#define markFeatureTag LE_MARK_FEATURE_TAG
-#define mkmkFeatureTag LE_MKMK_FEATURE_TAG
-#define loclFeatureTag LE_LOCL_FEATURE_TAG
-#define caltFeatureTag LE_CALT_FEATURE_TAG
-
-#define dligFeatureTag LE_DLIG_FEATURE_TAG
-#define rligFeatureTag LE_RLIG_FEATURE_TAG
-#define paltFeatureTag LE_PALT_FEATURE_TAG
-
-#define hligFeatureTag LE_HLIG_FEATURE_TAG
-#define smcpFeatureTag LE_SMCP_FEATURE_TAG
-#define fracFeatureTag LE_FRAC_FEATURE_TAG
-#define afrcFeatureTag LE_AFRC_FEATURE_TAG
-#define zeroFeatureTag LE_ZERO_FEATURE_TAG
-#define swshFeatureTag LE_SWSH_FEATURE_TAG
-#define cswhFeatureTag LE_CSWH_FEATURE_TAG
-#define saltFeatureTag LE_SALT_FEATURE_TAG
-#define naltFeatureTag LE_NALT_FEATURE_TAG
-#define rubyFeatureTag LE_RUBY_FEATURE_TAG
-#define ss01FeatureTag LE_SS01_FEATURE_TAG
-#define ss02FeatureTag LE_SS02_FEATURE_TAG
-#define ss03FeatureTag LE_SS03_FEATURE_TAG
-#define ss04FeatureTag LE_SS04_FEATURE_TAG
-#define ss05FeatureTag LE_SS05_FEATURE_TAG
-#define ss06FeatureTag LE_SS06_FEATURE_TAG
-#define ss07FeatureTag LE_SS07_FEATURE_TAG
-
-#define ccmpFeatureMask 0x80000000UL
-#define ligaFeatureMask 0x40000000UL
-#define cligFeatureMask 0x20000000UL
-#define kernFeatureMask 0x10000000UL
-#define paltFeatureMask 0x08000000UL
-#define markFeatureMask 0x04000000UL
-#define mkmkFeatureMask 0x02000000UL
-#define loclFeatureMask 0x01000000UL
-#define caltFeatureMask 0x00800000UL
-
-#define dligFeatureMask 0x00400000UL 
-#define rligFeatureMask 0x00200000UL
-#define hligFeatureMask 0x00100000UL
-#define smcpFeatureMask 0x00080000UL
-#define fracFeatureMask 0x00040000UL
-#define afrcFeatureMask 0x00020000UL
-#define zeroFeatureMask 0x00010000UL
-#define swshFeatureMask 0x00008000UL
-#define cswhFeatureMask 0x00004000UL
-#define saltFeatureMask 0x00002000UL
-#define naltFeatureMask 0x00001000UL
-#define rubyFeatureMask 0x00000800UL
-#define ss01FeatureMask 0x00000400UL
-#define ss02FeatureMask 0x00000200UL
-#define ss03FeatureMask 0x00000100UL
-#define ss04FeatureMask 0x00000080UL
-#define ss05FeatureMask 0x00000040UL
-#define ss06FeatureMask 0x00000020UL
-#define ss07FeatureMask 0x00000010UL
-
-#define minimalFeatures     (ccmpFeatureMask | markFeatureMask | mkmkFeatureMask | loclFeatureMask | caltFeatureMask)
-static const FeatureMap featureMap[] =
-{
-    {ccmpFeatureTag, ccmpFeatureMask},
-    {ligaFeatureTag, ligaFeatureMask},
-    {cligFeatureTag, cligFeatureMask}, 
-    {kernFeatureTag, kernFeatureMask},
-    {paltFeatureTag, paltFeatureMask},
-    {markFeatureTag, markFeatureMask},
-    {mkmkFeatureTag, mkmkFeatureMask},
-    {loclFeatureTag, loclFeatureMask},
-    {caltFeatureTag, caltFeatureMask},
-    {hligFeatureTag, hligFeatureMask},
-    {smcpFeatureTag, smcpFeatureMask},
-    {fracFeatureTag, fracFeatureMask},
-    {afrcFeatureTag, afrcFeatureMask},
-    {zeroFeatureTag, zeroFeatureMask},
-    {swshFeatureTag, swshFeatureMask},
-    {cswhFeatureTag, cswhFeatureMask},
-    {saltFeatureTag, saltFeatureMask},
-    {naltFeatureTag, naltFeatureMask},
-    {rubyFeatureTag, rubyFeatureMask},
-    {ss01FeatureTag, ss01FeatureMask},
-    {ss02FeatureTag, ss02FeatureMask},
-    {ss03FeatureTag, ss03FeatureMask},
-    {ss04FeatureTag, ss04FeatureMask},
-    {ss05FeatureTag, ss05FeatureMask},
-    {ss06FeatureTag, ss06FeatureMask},
-    {ss07FeatureTag, ss07FeatureMask}
-};
-
-static const le_int32 featureMapCount = LE_ARRAY_SIZE(featureMap);
-
-OpenTypeLayoutEngine::OpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                     le_int32 typoFlags, const LEReferenceTo<GlyphSubstitutionTableHeader> &gsubTable, LEErrorCode &success)
-    : LayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success), fFeatureMask(minimalFeatures),
-      fFeatureMap(featureMap), fFeatureMapCount(featureMapCount), fFeatureOrder(FALSE),
-      fGSUBTable(gsubTable), 
-      fGDEFTable(fontInstance, LE_GDEF_TABLE_TAG, success),
-      fGPOSTable(fontInstance, LE_GPOS_TABLE_TAG, success), fSubstitutionFilter(NULL)
-{
-    applyTypoFlags();
-
-    setScriptAndLanguageTags();
-
-// JK patch, 2008-05-30 - see Sinhala bug report and LKLUG font
-//    if (gposTable != NULL && gposTable->coversScriptAndLanguage(fScriptTag, fLangSysTag)) {
-    if (!fGPOSTable.isEmpty()&& !fGPOSTable->coversScript(fGPOSTable, fScriptTag, success)) {
-      fGPOSTable.clear(); // already loaded
-    }
-}
-
-void OpenTypeLayoutEngine::applyTypoFlags() {
-    const le_int32& typoFlags = fTypoFlags;
-    const LEFontInstance *fontInstance = fFontInstance;
-
-    switch (typoFlags & (LE_SS01_FEATURE_FLAG 
-                         | LE_SS02_FEATURE_FLAG
-                         | LE_SS03_FEATURE_FLAG
-                         | LE_SS04_FEATURE_FLAG
-                         | LE_SS05_FEATURE_FLAG
-                         | LE_SS06_FEATURE_FLAG
-                         | LE_SS07_FEATURE_FLAG)) {
-        case LE_SS01_FEATURE_FLAG:
-            fFeatureMask |= ss01FeatureMask;
-            break;
-        case LE_SS02_FEATURE_FLAG:
-            fFeatureMask |= ss02FeatureMask;
-            break;
-        case LE_SS03_FEATURE_FLAG:
-            fFeatureMask |= ss03FeatureMask;
-            break;
-        case LE_SS04_FEATURE_FLAG:
-            fFeatureMask |= ss04FeatureMask;
-            break;
-        case LE_SS05_FEATURE_FLAG:
-            fFeatureMask |= ss05FeatureMask;
-            break;
-        case LE_SS06_FEATURE_FLAG:
-            fFeatureMask |= ss06FeatureMask;
-            break;
-        case LE_SS07_FEATURE_FLAG:
-            fFeatureMask |= ss07FeatureMask;
-            break;
-    }
-
-    if (typoFlags & LE_Kerning_FEATURE_FLAG) {
-      fFeatureMask |= (kernFeatureMask | paltFeatureMask); 
-      // Convenience.
-    }
-    if (typoFlags & LE_Ligatures_FEATURE_FLAG) {
-      fFeatureMask |= (ligaFeatureMask | cligFeatureMask);  
-      // Convenience TODO: should add: .. dligFeatureMask | rligFeatureMask ?
-    }
-    if (typoFlags & LE_CLIG_FEATURE_FLAG) fFeatureMask |= cligFeatureMask;
-    if (typoFlags & LE_DLIG_FEATURE_FLAG) fFeatureMask |= dligFeatureMask;
-    if (typoFlags & LE_HLIG_FEATURE_FLAG) fFeatureMask |= hligFeatureMask;
-    if (typoFlags & LE_LIGA_FEATURE_FLAG) fFeatureMask |= ligaFeatureMask;
-    if (typoFlags & LE_RLIG_FEATURE_FLAG) fFeatureMask |= rligFeatureMask;
-    if (typoFlags & LE_SMCP_FEATURE_FLAG) fFeatureMask |= smcpFeatureMask;
-    if (typoFlags & LE_FRAC_FEATURE_FLAG) fFeatureMask |= fracFeatureMask;
-    if (typoFlags & LE_AFRC_FEATURE_FLAG) fFeatureMask |= afrcFeatureMask;
-    if (typoFlags & LE_ZERO_FEATURE_FLAG) fFeatureMask |= zeroFeatureMask;
-    if (typoFlags & LE_SWSH_FEATURE_FLAG) fFeatureMask |= swshFeatureMask;
-    if (typoFlags & LE_CSWH_FEATURE_FLAG) fFeatureMask |= cswhFeatureMask;
-    if (typoFlags & LE_SALT_FEATURE_FLAG) fFeatureMask |= saltFeatureMask;
-    if (typoFlags & LE_RUBY_FEATURE_FLAG) fFeatureMask |= rubyFeatureMask;
-    if (typoFlags & LE_NALT_FEATURE_FLAG) {
-      // Mutually exclusive with ALL other features. http://www.microsoft.com/typography/otspec/features_ko.htm
-      fFeatureMask = naltFeatureMask; 
-    }
-
-    if (typoFlags & LE_CHAR_FILTER_FEATURE_FLAG) {
-      // This isn't a font feature, but requests a Char Substitution Filter
-      fSubstitutionFilter = new CharSubstitutionFilter(fontInstance);
-    }
-
-}
-
-void OpenTypeLayoutEngine::reset()
-{
-    // NOTE: if we're called from
-    // the destructor, LayoutEngine;:reset()
-    // will have been called already by
-    // LayoutEngine::~LayoutEngine()
-    LayoutEngine::reset();
-}
-
-OpenTypeLayoutEngine::OpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                       le_int32 typoFlags, LEErrorCode &success)
-    : LayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success), fFeatureOrder(FALSE),
-      fGSUBTable(), fGDEFTable(), fGPOSTable(), fSubstitutionFilter(NULL)
-{
-  applyTypoFlags();
-  setScriptAndLanguageTags();
-}
-
-OpenTypeLayoutEngine::~OpenTypeLayoutEngine()
-{
-    if (fTypoFlags & LE_CHAR_FILTER_FEATURE_FLAG) {
-        delete fSubstitutionFilter;
-        fSubstitutionFilter = NULL;
-    }
-
-    reset();
-}
-
-LETag OpenTypeLayoutEngine::getScriptTag(le_int32 scriptCode)
-{
-    if (scriptCode < 0 || scriptCode >= scriptCodeCount) {
-        return 0xFFFFFFFF;
-    }
-    return scriptTags[scriptCode];
-}
-
-LETag OpenTypeLayoutEngine::getV2ScriptTag(le_int32 scriptCode)
-{
-       switch (scriptCode) { 
-               case bengScriptCode :    return bng2ScriptTag;
-               case devaScriptCode :    return dev2ScriptTag;
-               case gujrScriptCode :    return gjr2ScriptTag;
-               case guruScriptCode :    return gur2ScriptTag;
-               case kndaScriptCode :    return knd2ScriptTag;
-               case mlymScriptCode :    return mlm2ScriptTag;
-               case oryaScriptCode :    return ory2ScriptTag;
-               case tamlScriptCode :    return tml2ScriptTag;
-               case teluScriptCode :    return tel2ScriptTag;
-               default:                 return nullScriptTag;
-       }
-}
-
-LETag OpenTypeLayoutEngine::getLangSysTag(le_int32 languageCode)
-{
-    if (languageCode < 0 || languageCode >= languageCodeCount) {
-        return 0xFFFFFFFF;
-    }
-
-    return languageTags[languageCode];
-}
-
-void OpenTypeLayoutEngine::setScriptAndLanguageTags()
-{
-    fScriptTag  = getScriptTag(fScriptCode);
-    fScriptTagV2 = getV2ScriptTag(fScriptCode);
-    fLangSysTag = getLangSysTag(fLanguageCode);
-}
-
-le_int32 OpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-                LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    // This is the cheapest way to get mark reordering only for Hebrew.
-    // We could just do the mark reordering for all scripts, but most
-    // of them probably don't need it... Another option would be to
-    // add a HebrewOpenTypeLayoutEngine subclass, but the only thing it
-    // would need to do is mark reordering, so that seems like overkill.
-    if (fScriptCode == hebrScriptCode) {
-        outChars = LE_NEW_ARRAY(LEUnicode, count);
-
-        if (outChars == NULL) {
-            success = LE_MEMORY_ALLOCATION_ERROR;
-            return 0;
-        }
-
-        if (LE_FAILURE(success)) {
-            LE_DELETE_ARRAY(outChars);
-            return 0;
-        }
-
-        CanonShaping::reorderMarks(&chars[offset], count, rightToLeft, outChars, glyphStorage);
-    }
-
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    glyphStorage.allocateGlyphArray(count, rightToLeft, success);
-    glyphStorage.allocateAuxData(success);
-
-    for (le_int32 i = 0; i < count; i += 1) {
-        glyphStorage.setAuxData(i, fFeatureMask, success);
-    }
-
-    return count;
-}
-
-// Input: characters, tags
-// Output: glyphs, char indices
-le_int32 OpenTypeLayoutEngine::glyphProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-                                               LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    mapCharsToGlyphs(chars, offset, count, rightToLeft, rightToLeft, glyphStorage, success);
-
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-    
-    if (fGSUBTable.isValid()) {
-      if (fScriptTagV2 != nullScriptTag && fGSUBTable->coversScriptAndLanguage(fGSUBTable, fScriptTagV2, fLangSysTag, success)) { 
-          count = fGSUBTable->process(fGSUBTable, glyphStorage, rightToLeft, fScriptTagV2, fLangSysTag, fGDEFTable, fSubstitutionFilter,
-                                    fFeatureMap, fFeatureMapCount, fFeatureOrder, success);
-
-        } else {
-          count = fGSUBTable->process(fGSUBTable, glyphStorage, rightToLeft, fScriptTag, fLangSysTag, fGDEFTable, fSubstitutionFilter,
-                                    fFeatureMap, fFeatureMapCount, fFeatureOrder, success);
-        }
-    }
-
-    return count;
-}
-// Input: characters, tags
-// Output: glyphs, char indices
-le_int32 OpenTypeLayoutEngine::glyphSubstitution(le_int32 count, le_int32 max, le_bool rightToLeft,
-                                               LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if ( count < 0 || max < 0 ) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-   
-    if (fGSUBTable.isValid()) {
-       if (fScriptTagV2 != nullScriptTag && fGSUBTable->coversScriptAndLanguage(fGSUBTable,fScriptTagV2,fLangSysTag,success)) { 
-          count = fGSUBTable->process(fGSUBTable, glyphStorage, rightToLeft, fScriptTagV2, fLangSysTag, fGDEFTable, fSubstitutionFilter,
-                                    fFeatureMap, fFeatureMapCount, fFeatureOrder, success);
-
-        } else {
-          count = fGSUBTable->process(fGSUBTable, glyphStorage, rightToLeft, fScriptTag, fLangSysTag, fGDEFTable, fSubstitutionFilter,
-                                    fFeatureMap, fFeatureMapCount, fFeatureOrder, success);
-        }
-    }
-
-    return count;
-}
-le_int32 OpenTypeLayoutEngine::glyphPostProcessing(LEGlyphStorage &tempGlyphStorage, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    glyphStorage.adoptGlyphArray(tempGlyphStorage);
-    glyphStorage.adoptCharIndicesArray(tempGlyphStorage);
-    glyphStorage.adoptAuxDataArray(tempGlyphStorage);
-    glyphStorage.adoptGlyphCount(tempGlyphStorage);
-
-    return glyphStorage.getGlyphCount();
-}
-
-le_int32 OpenTypeLayoutEngine::computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    LEUnicode *outChars = NULL;
-    LEGlyphStorage fakeGlyphStorage;
-    le_int32 outCharCount, outGlyphCount;
-
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    outCharCount = characterProcessing(chars, offset, count, max, rightToLeft, outChars, fakeGlyphStorage, success);
-
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (outChars != NULL) {
-        // le_int32 fakeGlyphCount = 
-        glyphProcessing(outChars, 0, outCharCount, outCharCount, rightToLeft, fakeGlyphStorage, success);
-        LE_DELETE_ARRAY(outChars); // FIXME: a subclass may have allocated this, in which case this delete might not work...
-        //adjustGlyphs(outChars, 0, outCharCount, rightToLeft, fakeGlyphs, fakeGlyphCount);
-    } else {
-        // le_int32 fakeGlyphCount =
-        glyphProcessing(chars, offset, count, max, rightToLeft, fakeGlyphStorage, success);
-        //adjustGlyphs(chars, offset, count, rightToLeft, fakeGlyphs, fakeGlyphCount);
-    }
-
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    outGlyphCount = glyphPostProcessing(fakeGlyphStorage, glyphStorage, success);
-
-    return outGlyphCount;
-}
-
-// apply GPOS table, if any
-void OpenTypeLayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse,
-                                                LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-
-    le_int32 glyphCount = glyphStorage.getGlyphCount();
-    if (glyphCount == 0) {
-        return;
-    }
-
-    if (!fGPOSTable.isEmpty()) {
-        GlyphPositionAdjustments *adjustments = new GlyphPositionAdjustments(glyphCount);
-        le_int32 i;
-
-        if (adjustments == NULL) {
-            success = LE_MEMORY_ALLOCATION_ERROR;
-            return;
-        }
-
-#if 0
-        // Don't need to do this if we allocate
-        // the adjustments array w/ new...
-        for (i = 0; i < glyphCount; i += 1) {
-            adjustments->setXPlacement(i, 0);
-            adjustments->setYPlacement(i, 0);
-
-            adjustments->setXAdvance(i, 0);
-            adjustments->setYAdvance(i, 0);
-
-            adjustments->setBaseOffset(i, -1);
-        }
-#endif
-
-        if (!fGPOSTable.isEmpty()) {
-            if (fScriptTagV2 != nullScriptTag && 
-                fGPOSTable->coversScriptAndLanguage(fGPOSTable, fScriptTagV2,fLangSysTag,success)) { 
-              fGPOSTable->process(fGPOSTable, glyphStorage, adjustments, reverse, fScriptTagV2, fLangSysTag, 
-                                  fGDEFTable, success, fFontInstance, fFeatureMap, fFeatureMapCount, fFeatureOrder);
-            } else {
-              fGPOSTable->process(fGPOSTable, glyphStorage, adjustments, reverse, fScriptTag, fLangSysTag, 
-                                  fGDEFTable, success, fFontInstance, fFeatureMap, fFeatureMapCount, fFeatureOrder);
-            }
-        } else if (fTypoFlags & LE_Kerning_FEATURE_FLAG) { /* kerning enabled */
-          LETableReference kernTable(fFontInstance, LE_KERN_TABLE_TAG, success);
-          KernTable kt(kernTable, success);
-          kt.process(glyphStorage, success);
-        }
-
-        float xAdjust = 0, yAdjust = 0;
-
-        for (i = 0; i < glyphCount; i += 1) {
-            float xAdvance   = adjustments->getXAdvance(i);
-            float yAdvance   = adjustments->getYAdvance(i);
-            float xPlacement = 0;
-            float yPlacement = 0;
-
-
-#if 0
-            // This is where separate kerning adjustments
-            // should get applied.
-            xAdjust += xKerning;
-            yAdjust += yKerning;
-#endif
-
-            for (le_int32 base = i; base >= 0; base = adjustments->getBaseOffset(base)) {
-                xPlacement += adjustments->getXPlacement(base);
-                yPlacement += adjustments->getYPlacement(base);
-            }
-
-            xPlacement = fFontInstance->xUnitsToPoints(xPlacement);
-            yPlacement = fFontInstance->yUnitsToPoints(yPlacement);
-            glyphStorage.adjustPosition(i, xAdjust + xPlacement, -(yAdjust + yPlacement), success);
-
-            xAdjust += fFontInstance->xUnitsToPoints(xAdvance);
-            yAdjust += fFontInstance->yUnitsToPoints(yAdvance);
-        }
-
-        glyphStorage.adjustPosition(glyphCount, xAdjust, -yAdjust, success);
-
-        delete adjustments;
-    } else {
-        // if there was no GPOS table, maybe there's non-OpenType kerning we can use
-        LayoutEngine::adjustGlyphPositions(chars, offset, count, reverse, glyphStorage, success);        
-    }
-
-    LEGlyphID zwnj  = fFontInstance->mapCharToGlyph(0x200C);
-
-    if (zwnj != 0x0000) {
-        for (le_int32 g = 0; g < glyphCount; g += 1) {
-            LEGlyphID glyph = glyphStorage[g];
-
-            if (glyph == zwnj) {
-                glyphStorage[g] = LE_SET_GLYPH(glyph, 0xFFFF);
-            }
-        }
-    }
-
-#if 0
-    // Don't know why this is here...
-    LE_DELETE_ARRAY(fFeatureTags);
-    fFeatureTags = NULL;
-#endif
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/OpenTypeLayoutEngine.h b/icu4c/source/layout/OpenTypeLayoutEngine.h
deleted file mode 100644 (file)
index 2d5c2fa..0000000
+++ /dev/null
@@ -1,398 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- * (C) Copyright IBM Corp. 1998-2014 - All Rights Reserved
- *
- */
-
-#ifndef __OPENTYPELAYOUTENGINE_H
-#define __OPENTYPELAYOUTENGINE_H
-
-#include "LETypes.h"
-#include "LEGlyphFilter.h"
-#include "LEFontInstance.h"
-#include "LayoutEngine.h"
-#include "LETableReference.h"
-
-#include "GlyphSubstitutionTables.h"
-#include "GlyphDefinitionTables.h"
-#include "GlyphPositioningTables.h"
-
-U_NAMESPACE_BEGIN
-
-/**
- * OpenTypeLayoutEngine implements complex text layout for OpenType fonts - that is
- * fonts which have GSUB and GPOS tables associated with them. In order to do this,
- * the glyph processsing step described for LayoutEngine is further broken into three
- * steps:
- *
- * 1) Character processing - this step analyses the characters and assigns a list of OpenType
- *    feature tags to each one. It may also change, remove or add characters, and change
- *    their order.
- *
- * 2) Glyph processing - This step performs character to glyph mapping,and uses the GSUB
- *    table associated with the font to perform glyph substitutions, such as ligature substitution.
- *
- * 3) Glyph post processing - in cases where the font doesn't directly contain a GSUB table,
- *    the previous two steps may have generated "fake" glyph indices to use with a "canned" GSUB
- *    table. This step turns those glyph indices into actual font-specific glyph indices, and may
- *    perform any other adjustments requried by the previous steps.
- *
- * OpenTypeLayoutEngine will also use the font's GPOS table to apply position adjustments
- * such as kerning and accent positioning.
- *
- * @see LayoutEngine
- *
- * @internal
- */
-class U_LAYOUT_API OpenTypeLayoutEngine : public LayoutEngine
-{
-public:
-    /**
-     * This is the main constructor. It constructs an instance of OpenTypeLayoutEngine for
-     * a particular font, script and language. It takes the GSUB table as a parameter since
-     * LayoutEngine::layoutEngineFactory has to read the GSUB table to know that it has an
-     * OpenType font.
-     *
-     * @param fontInstance - the font
-     * @param scriptCode - the script
-     * @param langaugeCode - the language
-     * @param gsubTable - the GSUB table
-     * @param success - set to an error code if the operation fails
-     *
-     * @see LayoutEngine::layoutEngineFactory
-     * @see ScriptAndLangaugeTags.h for script and language codes
-     *
-     * @internal
-     */
-    OpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                            le_int32 typoFlags, const LEReferenceTo<GlyphSubstitutionTableHeader> &gsubTable, LEErrorCode &success);
-
-    /**
-     * This constructor is used when the font requires a "canned" GSUB table which can't be known
-     * until after this constructor has been invoked.
-     *
-     * @param fontInstance - the font
-     * @param scriptCode - the script
-     * @param langaugeCode - the language
-     * @param success - set to an error code if the operation fails
-     *
-     * @internal
-     */
-    OpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                        le_int32 typoFlags, LEErrorCode &success);
-
-    /**
-     * The destructor, virtual for correct polymorphic invocation.
-     *
-     * @internal
-     */
-    virtual ~OpenTypeLayoutEngine();
-
-    /**
-     * A convenience method used to convert the script code into
-     * the four byte script tag required by OpenType.
-        * For Indic languages where multiple script tags exist,
-        * the version 1 (old style) tag is returned.
-     *
-     * @param scriptCode - the script code
-     *
-     * @return the four byte script tag
-     *
-     * @internal
-     */
-    static LETag getScriptTag(le_int32 scriptCode);
-    /**
-     * A convenience method used to convert the script code into
-     * the four byte script tag required by OpenType.
-        * For Indic languages where multiple script tags exist,
-        * the version 2 tag is returned.
-     *
-     * @param scriptCode - the script code
-     *
-     * @return the four byte script tag
-     *
-     * @internal
-     */
-    static LETag getV2ScriptTag(le_int32 scriptCode);
-
-    /**
-     * A convenience method used to convert the langauge code into
-     * the four byte langauge tag required by OpenType.
-     *
-     * @param languageCode - the language code
-     *
-     * @return the four byte language tag
-     *
-     * @internal
-     */
-    static LETag getLangSysTag(le_int32 languageCode);
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    static UClassID getStaticClassID();
-
-    /**
-     * The array of language tags, indexed by language code.
-     *
-     * @internal
-     */
-    static const LETag languageTags[];
-
-private:
-
-    /**
-     * This method is used by the constructors to convert the script
-     * and language codes to four byte tags and save them.
-     */
-    void setScriptAndLanguageTags();
-
-    /**
-     * The array of script tags, indexed by script code.
-     */
-    static const LETag scriptTags[];
-
-    /**
-     * apply the typoflags. Only called by the c'tors.
-     */
-    void applyTypoFlags();
-
-protected:
-    /**
-     * A set of "default" features. The default characterProcessing method
-     * will apply all of these features to every glyph.
-     *
-     * @internal
-     */
-    FeatureMask fFeatureMask;
-
-    /**
-     * A set of mappings from feature tags to feature masks. These may
-     * be in the order in which the featues should be applied, but they
-     * don't need to be.
-     *
-     * @internal
-     */
-    const FeatureMap *fFeatureMap;
-
-    /**
-     * The length of the feature map.
-     *
-     * @internal
-     */
-    le_int32 fFeatureMapCount;
-
-    /**
-     * <code>TRUE</code> if the features in the
-     * feature map are in the order in which they
-     * must be applied.
-     *
-     * @internal
-     */
-    le_bool fFeatureOrder;
-
-    /**
-     * The address of the GSUB table.
-     *
-     * @internal
-     */
-    LEReferenceTo<GlyphSubstitutionTableHeader> fGSUBTable;
-
-    /**
-     * The address of the GDEF table.
-     *
-     * @internal
-     */
-    LEReferenceTo<GlyphDefinitionTableHeader> fGDEFTable;
-
-    /**
-     * The address of the GPOS table.
-     *
-     * @internal
-     */
-    LEReferenceTo<GlyphPositioningTableHeader> fGPOSTable;
-    
-    /**
-     * An optional filter used to inhibit substitutions
-     * preformed by the GSUB table. This is used for some
-     * "canned" GSUB tables to restrict substitutions to
-     * glyphs that are in the font.
-     *
-     * @internal
-     */
-    LEGlyphFilter *fSubstitutionFilter;
-
-    /**
-     * The four byte script tag.
-     *
-     * @internal
-     */
-    LETag fScriptTag;
-  
-    /**
-     * The four byte script tag for V2 fonts.
-     *
-     * @internal
-     */
-    LETag fScriptTagV2;
-
-    /**
-     * The four byte language tag
-     *
-     * @internal
-     */
-    LETag fLangSysTag;
-
-    /**
-     * This method does the OpenType character processing. It assigns the OpenType feature
-     * tags to the characters, and may generate output characters that differ from the input
-     * charcters due to insertions, deletions, or reorderings. In such cases, it will also
-     * generate an output character index array reflecting these changes.
-     *
-     * Subclasses must override this method.
-     *
-     * Input parameters:
-     * @param chars - the input character context
-     * @param offset - the index of the first character to process
-     * @param count - the number of characters to process
-     * @param max - the number of characters in the input context
-     * @param rightToLeft - TRUE if the characters are in a right to left directional run
-     *
-     * Output parameters:
-     * @param outChars - the output character array, if different from the input
-     * @param charIndices - the output character index array
-     * @param featureTags - the output feature tag array
-     * @param success - set to an error code if the operation fails
-     *
-     * @return the output character count (input character count if no change)
-     *
-     * @internal
-     */
-    virtual le_int32 characterProcessing(const LEUnicode /*chars*/[], le_int32 offset, le_int32 count, le_int32 max, le_bool /*rightToLeft*/,
-            LEUnicode *&/*outChars*/, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    /**
-     * This method does character to glyph mapping, and applies the GSUB table. The
-     * default implementation calls mapCharsToGlyphs and then applies the GSUB table,
-     * if there is one.
-     *
-     * Note that in the case of "canned" GSUB tables, the output glyph indices may be
-     * "fake" glyph indices that need to be converted to "real" glyph indices by the
-     * glyphPostProcessing method.
-     *
-     * Input parameters:
-     * @param chars - the input character context
-     * @param offset - the index of the first character to process
-     * @param count - the number of characters to process
-     * @param max - the number of characters in the input context
-     * @param rightToLeft - TRUE if the characters are in a right to left directional run
-     * @param featureTags - the feature tag array
-     *
-     * Output parameters:
-     * @param glyphs - the output glyph index array
-     * @param charIndices - the output character index array
-     * @param success - set to an error code if the operation fails
-     *
-     * @return the number of glyphs in the output glyph index array
-     *
-     * Note: if the character index array was already set by the characterProcessing
-     * method, this method won't change it.
-     *
-     * @internal
-     */
-    virtual le_int32 glyphProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-            LEGlyphStorage &glyphStorage, LEErrorCode &success);
-    virtual le_int32 glyphSubstitution(le_int32 count, le_int32 max, le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    /**
-     * This method does any processing necessary to convert "fake"
-     * glyph indices used by the glyphProcessing method into "real" glyph
-     * indices which can be used to render the text. Note that in some
-     * cases, such as CDAC Indic fonts, several "real" glyphs may be needed
-     * to render one "fake" glyph.
-     *
-     * The default implementation of this method just returns the input glyph
-     * index and character index arrays, assuming that no "fake" glyph indices
-     * were needed to do GSUB processing.
-     *
-     * Input paramters:
-     * @param tempGlyphs - the input "fake" glyph index array
-     * @param tempCharIndices - the input "fake" character index array
-     * @param tempGlyphCount - the number of "fake" glyph indices
-     *
-     * Output parameters:
-     * @param glyphs - the output glyph index array
-     * @param charIndices - the output character index array
-     * @param success - set to an error code if the operation fails
-     *
-     * @return the number of glyph indices in the output glyph index array
-     *
-     * @internal
-     */
-    virtual le_int32 glyphPostProcessing(LEGlyphStorage &tempGlyphStorage, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    /**
-     * This method applies the characterProcessing, glyphProcessing and glyphPostProcessing
-     * methods. Most subclasses will not need to override this method.
-     *
-     * Input parameters:
-     * @param chars - the input character context
-     * @param offset - the index of the first character to process
-     * @param count - the number of characters to process
-     * @param max - the number of characters in the input context
-     * @param rightToLeft - TRUE if the text is in a right to left directional run
-     *
-     * Output parameters:
-     * @param glyphs - the glyph index array
-     * @param charIndices - the character index array
-     * @param success - set to an error code if the operation fails
-     *
-     * @return the number of glyphs in the glyph index array
-     *
-     * @see LayoutEngine::computeGlyphs
-     *
-     * @internal
-     */
-    virtual le_int32 computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    /**
-     * This method uses the GPOS table, if there is one, to adjust the glyph positions.
-     *
-     * Input parameters:
-     * @param glyphs - the input glyph array
-     * @param glyphCount - the number of glyphs in the glyph array
-     * @param x - the starting X position
-     * @param y - the starting Y position
-     *
-     * Output parameters:
-     * @param positions - the output X and Y positions (two entries per glyph)
-     * @param success - set to an error code if the operation fails
-     *
-     * @internal
-     */
-    virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    /**
-     * This method frees the feature tag array so that the
-     * OpenTypeLayoutEngine can be reused for different text.
-     * It is also called from our destructor.
-     *
-     * @internal
-     */
-    virtual void reset();
-};
-
-U_NAMESPACE_END
-#endif
-
diff --git a/icu4c/source/layout/OpenTypeTables.h b/icu4c/source/layout/OpenTypeTables.h
deleted file mode 100644 (file)
index 0fd9908..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __OPENTYPETABLES_H
-#define __OPENTYPETABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LETableReference.h"
-
-U_NAMESPACE_BEGIN
-
-#define ANY_NUMBER 1
-
-typedef le_uint16 Offset;
-typedef le_uint8  ATag[4];
-typedef le_uint32 fixed32;
-
-#define LE_GLYPH_GROUP_MASK 0x00000001UL
-typedef le_uint32 FeatureMask;
-
-#define SWAPT(atag) ((LETag) (((atag[0]) << 24) + ((atag[1]) << 16) + ((atag[2]) << 8) + (atag[3])))
-
-struct TagAndOffsetRecord
-{
-    ATag   tag;
-    Offset offset;
-};
-
-struct GlyphRangeRecord
-{
-    TTGlyphID firstGlyph;
-    TTGlyphID lastGlyph;
-    le_int16  rangeValue;
-};
-
-struct FeatureMap
-{
-    LETag       tag;
-    FeatureMask mask;
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/OpenTypeUtilities.cpp b/icu4c/source/layout/OpenTypeUtilities.cpp
deleted file mode 100644 (file)
index 3a82050..0000000
+++ /dev/null
@@ -1,230 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "OpenTypeUtilities.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-//
-// Finds the high bit by binary searching
-// through the bits in n.
-//
-le_int8 OpenTypeUtilities::highBit(le_int32 value)
-{
-    if (value <= 0) {
-        return -32;
-    }
-
-    le_uint8 bit = 0;
-
-    if (value >= 1 << 16) {
-        value >>= 16;
-        bit += 16;
-    }
-
-    if (value >= 1 << 8) {
-        value >>= 8;
-        bit += 8;
-    }
-
-    if (value >= 1 << 4) {
-        value >>= 4;
-        bit += 4;
-    }
-
-    if (value >= 1 << 2) {
-        value >>= 2;
-        bit += 2;
-    }
-
-    if (value >= 1 << 1) {
-        value >>= 1;
-        bit += 1;
-    }
-
-    return bit;
-}
-
-
-Offset OpenTypeUtilities::getTagOffset(LETag tag, const LEReferenceToArrayOf<TagAndOffsetRecord> &records, LEErrorCode &success)
-{
-  const TagAndOffsetRecord *r0 = (const TagAndOffsetRecord*)records.getAlias();
-  if(LE_FAILURE(success)) return 0;
-
-  le_uint32 recordCount = records.getCount();
-  le_uint8 bit = highBit(recordCount);
-  le_int32 power = 1 << bit;
-  le_int32 extra = recordCount - power;
-  le_int32 probe = power;
-  le_int32 index = 0;
-  
-  { 
-    const ATag &aTag = (r0+extra)->tag;
-    if (SWAPT(aTag) <= tag) {
-      index = extra;
-    }
-  }
-  
-  while (probe > (1 << 0)) {
-    probe >>= 1;
-    
-    {
-      const ATag &aTag = (r0+index+probe)->tag;
-      if (SWAPT(aTag) <= tag) {
-        index += probe;
-      }
-    }
-  }
-  
-  {
-    const ATag &aTag = (r0+index)->tag;
-    if (SWAPT(aTag) == tag) {
-      return SWAPW((r0+index)->offset);
-    }
-  }
-
-  return 0;
-}
-
-le_int32 OpenTypeUtilities::getGlyphRangeIndex(TTGlyphID glyphID, const LEReferenceToArrayOf<GlyphRangeRecord> &records, LEErrorCode &success)
-{
-  if(LE_FAILURE(success)) return -1;
-
-    le_uint32 recordCount = records.getCount();
-    le_uint8 bit = highBit(recordCount);
-    le_int32 power = 1 << bit;
-    le_int32 extra = recordCount - power;
-    le_int32 probe = power;
-    le_int32 range = 0;
-
-    if (recordCount == 0) {
-      return -1;
-    }
-
-    if (SWAPW(records(extra,success).firstGlyph) <= glyphID) {
-        range = extra;
-    }
-
-    while (probe > (1 << 0) && LE_SUCCESS(success)) {
-        probe >>= 1;
-
-        if (SWAPW(records(range + probe,success).firstGlyph) <= glyphID) {
-            range += probe;
-        }
-    }
-
-    if (SWAPW(records(range,success).firstGlyph) <= glyphID && SWAPW(records(range,success).lastGlyph) >= glyphID) {
-        return range;
-    }
-
-    return -1;
-}
-
-le_int32 OpenTypeUtilities::search(le_uint32 value, const le_uint32 array[], le_int32 count)
-{
-    le_int32 power = 1 << highBit(count);
-    le_int32 extra = count - power;
-    le_int32 probe = power;
-    le_int32 index = 0;
-
-    if (value >= array[extra]) {
-        index = extra;
-    }
-
-    while (probe > (1 << 0)) {
-        probe >>= 1;
-
-        if (value >= array[index + probe]) {
-            index += probe;
-        }
-    }
-
-    return index;
-}
-
-le_int32 OpenTypeUtilities::search(le_uint16 value, const le_uint16 array[], le_int32 count)
-{
-    le_int32 power = 1 << highBit(count);
-    le_int32 extra = count - power;
-    le_int32 probe = power;
-    le_int32 index = 0;
-
-    if (value >= array[extra]) {
-        index = extra;
-    }
-
-    while (probe > (1 << 0)) {
-        probe >>= 1;
-
-        if (value >= array[index + probe]) {
-            index += probe;
-        }
-    }
-
-    return index;
-}
-
-//
-// Straight insertion sort from Knuth vol. III, pg. 81
-//
-void OpenTypeUtilities::sort(le_uint16 *array, le_int32 count)
-{
-    for (le_int32 j = 1; j < count; j += 1) {
-        le_int32 i;
-        le_uint16 v = array[j];
-
-        for (i = j - 1; i >= 0; i -= 1) {
-            if (v >= array[i]) {
-                break;
-            }
-
-            array[i + 1] = array[i];
-        }
-
-        array[i + 1] = v;
-    }
-}
-
-U_NAMESPACE_END
-
-#if LE_ASSERT_BAD_FONT
-#include <stdio.h>
-
-static const char *letagToStr(LETag tag, char *str) {
-  str[0]= 0xFF & (tag>>24);
-  str[1]= 0xFF & (tag>>16);
-  str[2]= 0xFF & (tag>>8);
-  str[3]= 0xFF & (tag>>0);
-  str[4]= 0;
-  return str;
-}
-
-U_CAPI void U_EXPORT2 _debug_LETableReference(const char *f, int l, const char *msg, const LETableReference *what, const void *ptr, size_t len) {
-  char tagbuf[5];
-  
-  fprintf(stderr, "%s:%d: LETableReference@0x%p: ", f, l, what);
-  fprintf(stderr, msg, ptr, len);
-  fprintf(stderr, "\n");
-
-  for(int depth=0;depth<10&&(what!=NULL);depth++) {
-    for(int i=0;i<depth;i++) {
-      fprintf(stderr, " "); // indent
-    }
-    if(!what->isValid()) {
-      fprintf(stderr, "(invalid)");
-    }
-    fprintf(stderr, "@%p: tag (%s) font (0x%p), [0x%p+0x%lx]\n", what, letagToStr(what->getTag(), tagbuf), what->getFont(),
-            what->getAlias(), what->getLength());
-
-    what = what->getParent();
-  }
-}
-#endif
diff --git a/icu4c/source/layout/OpenTypeUtilities.h b/icu4c/source/layout/OpenTypeUtilities.h
deleted file mode 100644 (file)
index 3b2f42b..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __OPENTYPEUTILITIES_H
-#define __OPENTYPEUTILITIES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-
-U_NAMESPACE_BEGIN
-
-class OpenTypeUtilities /* not : public UObject because all methods are static */ {
-public:
-    static le_int8 highBit(le_int32 value);
-    static Offset getTagOffset(LETag tag, const LEReferenceToArrayOf<TagAndOffsetRecord> &records, LEErrorCode &success);
-    static le_int32 getGlyphRangeIndex(TTGlyphID glyphID, const GlyphRangeRecord *records, le_int32 recordCount) {
-      LEErrorCode success = LE_NO_ERROR;
-      LETableReference recordRef0((const le_uint8*)records);
-      LEReferenceToArrayOf<GlyphRangeRecord> recordRef(recordRef0, success, (size_t)0, recordCount);
-      return getGlyphRangeIndex(glyphID, recordRef, success);
-    }
-    static le_int32 getGlyphRangeIndex(TTGlyphID glyphID, const LEReferenceToArrayOf<GlyphRangeRecord> &records, LEErrorCode &success);
-    static le_int32 search(le_uint16 value, const le_uint16 array[], le_int32 count);
-    static le_int32 search(le_uint32 value, const le_uint32 array[], le_int32 count);
-    static void sort(le_uint16 *array, le_int32 count);
-
-private:
-    OpenTypeUtilities() {} // private - forbid instantiation
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/PairPositioningSubtables.cpp b/icu4c/source/layout/PairPositioningSubtables.cpp
deleted file mode 100644 (file)
index bfb01ab..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "GlyphPositioningTables.h"
-#include "PairPositioningSubtables.h"
-#include "ValueRecords.h"
-#include "GlyphIterator.h"
-#include "OpenTypeUtilities.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-le_uint32 PairPositioningSubtable::process(const LEReferenceTo<PairPositioningSubtable> &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const
-{
-    switch(SWAPW(subtableFormat))
-    {
-    case 0:
-        return 0;
-
-    case 1:
-    {
-      const LEReferenceTo<PairPositioningFormat1Subtable> subtable(base, success, (const PairPositioningFormat1Subtable *) this);
-
-      if(LE_SUCCESS(success))
-      return subtable->process(subtable, glyphIterator, fontInstance, success);
-      else
-        return 0;
-    }
-
-    case 2:
-    {
-      const LEReferenceTo<PairPositioningFormat2Subtable> subtable(base, success, (const PairPositioningFormat2Subtable *) this);
-
-      if(LE_SUCCESS(success))
-      return subtable->process(subtable, glyphIterator, fontInstance, success);
-      else
-        return 0;
-    }
-    default:
-      return 0;
-    }
-}
-
-le_uint32 PairPositioningFormat1Subtable::process(const LEReferenceTo<PairPositioningFormat1Subtable> &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const
-{
-    LEGlyphID firstGlyph = glyphIterator->getCurrGlyphID();
-    le_int32 coverageIndex = getGlyphCoverage(base, firstGlyph, success);
-    GlyphIterator tempIterator(*glyphIterator);
-
-    if (coverageIndex >= 0 && glyphIterator->next()) {
-        Offset pairSetTableOffset = SWAPW(pairSetTableOffsetArray[coverageIndex]);
-        PairSetTable *pairSetTable = (PairSetTable *) ((char *) this + pairSetTableOffset);
-        le_uint16 pairValueCount = SWAPW(pairSetTable->pairValueCount);
-        le_int16 valueRecord1Size = ValueRecord::getSize(SWAPW(valueFormat1));
-        le_int16 valueRecord2Size = ValueRecord::getSize(SWAPW(valueFormat2));
-        le_int16 recordSize = sizeof(PairValueRecord) - sizeof(ValueRecord) + valueRecord1Size + valueRecord2Size;
-        LEGlyphID secondGlyph = glyphIterator->getCurrGlyphID();
-        const PairValueRecord *pairValueRecord = NULL;
-
-        if (pairValueCount != 0) {
-            pairValueRecord = findPairValueRecord((TTGlyphID) LE_GET_GLYPH(secondGlyph), pairSetTable->pairValueRecordArray, pairValueCount, recordSize);
-        }
-
-        if (pairValueRecord == NULL) {
-            return 0;
-        }
-
-        if (valueFormat1 != 0) {
-            pairValueRecord->valueRecord1.adjustPosition(SWAPW(valueFormat1), (char *) this, tempIterator, fontInstance);
-        }
-
-        if (valueFormat2 != 0) {
-            const ValueRecord *valueRecord2 = (const ValueRecord *) ((char *) &pairValueRecord->valueRecord1 + valueRecord1Size);
-
-            valueRecord2->adjustPosition(SWAPW(valueFormat2), (char *) this, *glyphIterator, fontInstance);
-        }
-
-        // back up glyphIterator so second glyph can be
-        // first glyph in the next pair
-        glyphIterator->prev();
-        return 1;
-    }
-
-    return 0;
-}
-
-le_uint32 PairPositioningFormat2Subtable::process(const LEReferenceTo<PairPositioningFormat2Subtable> &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const
-{
-    LEGlyphID firstGlyph = glyphIterator->getCurrGlyphID();
-    le_int32 coverageIndex = getGlyphCoverage(base, firstGlyph, success);
-    GlyphIterator tempIterator(*glyphIterator);
-
-    if (coverageIndex >= 0 && glyphIterator->next()) {
-        LEGlyphID secondGlyph = glyphIterator->getCurrGlyphID();
-        const ClassDefinitionTable *classDef1 = (const ClassDefinitionTable *) ((char *) this + SWAPW(classDef1Offset));
-        const ClassDefinitionTable *classDef2 = (const ClassDefinitionTable *) ((char *) this + SWAPW(classDef2Offset));
-        le_int32 class1 = classDef1->getGlyphClass(firstGlyph);
-        le_int32 class2 = classDef2->getGlyphClass(secondGlyph);
-        le_int16 valueRecord1Size = ValueRecord::getSize(SWAPW(valueFormat1));
-        le_int16 valueRecord2Size = ValueRecord::getSize(SWAPW(valueFormat2));
-        le_int16 class2RecordSize = valueRecord1Size + valueRecord2Size;
-        le_int16 class1RecordSize = class2RecordSize * SWAPW(class2Count);
-        const Class1Record *class1Record = (const Class1Record *) ((char *) class1RecordArray + (class1RecordSize * class1));
-        const Class2Record *class2Record = (const Class2Record *) ((char *) class1Record->class2RecordArray + (class2RecordSize * class2));
-
-
-        if (valueFormat1 != 0) {
-            class2Record->valueRecord1.adjustPosition(SWAPW(valueFormat1), (char *) this, tempIterator, fontInstance);
-        }
-
-        if (valueFormat2 != 0) {
-            const ValueRecord *valueRecord2 = (const ValueRecord *) ((char *) &class2Record->valueRecord1 + valueRecord1Size);
-
-            valueRecord2->adjustPosition(SWAPW(valueFormat2), (const char *) this, *glyphIterator, fontInstance);
-        }
-
-        // back up glyphIterator so second glyph can be
-        // first glyph in the next pair
-        glyphIterator->prev();
-        return 1;
-    }
-
-    return 0;
-}
-
-const PairValueRecord *PairPositioningFormat1Subtable::findPairValueRecord(TTGlyphID glyphID, const PairValueRecord *records, le_uint16 recordCount, le_uint16 recordSize) const
-{
-#if 1
-       // The OpenType spec. says that the ValueRecord table is
-       // sorted by secondGlyph. Unfortunately, there are fonts
-       // around that have an unsorted ValueRecord table.
-       const PairValueRecord *record = records;
-
-       for(le_int32 r = 0; r < recordCount; r += 1) {
-               if (SWAPW(record->secondGlyph) == glyphID) {
-                       return record;
-               }
-
-               record = (const PairValueRecord *) ((char *) record + recordSize);
-       }
-#else
-    le_uint8 bit = OpenTypeUtilities::highBit(recordCount);
-    le_uint16 power = 1 << bit;
-    le_uint16 extra = (recordCount - power) * recordSize;
-    le_uint16 probe = power * recordSize;
-    const PairValueRecord *record = records;
-    const PairValueRecord *trial = (const PairValueRecord *) ((char *) record + extra);
-
-    if (SWAPW(trial->secondGlyph) <= glyphID) {
-        record = trial;
-    }
-
-    while (probe > recordSize) {
-        probe >>= 1;
-        trial = (const PairValueRecord *) ((char *) record + probe);
-
-        if (SWAPW(trial->secondGlyph) <= glyphID) {
-            record = trial;
-        }
-    }
-
-    if (SWAPW(record->secondGlyph) == glyphID) {
-        return record;
-    }
-#endif
-
-    return NULL;
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/PairPositioningSubtables.h b/icu4c/source/layout/PairPositioningSubtables.h
deleted file mode 100644 (file)
index 6b043a9..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __PAIRPOSITIONINGSUBTABLES_H
-#define __PAIRPOSITIONINGSUBTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "GlyphPositioningTables.h"
-#include "ValueRecords.h"
-#include "GlyphIterator.h"
-
-U_NAMESPACE_BEGIN
-
-// NOTE: ValueRecord has a variable size
-struct PairValueRecord
-{
-    TTGlyphID     secondGlyph;
-    ValueRecord valueRecord1;
-//  ValueRecord valueRecord2;
-};
-
-struct PairSetTable
-{
-    le_uint16       pairValueCount;
-    PairValueRecord pairValueRecordArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(PairSetTable, pairValueRecordArray)
-
-struct PairPositioningSubtable : GlyphPositioningSubtable
-{
-    ValueFormat valueFormat1;
-    ValueFormat valueFormat2;
-
-    le_uint32  process(const LEReferenceTo<PairPositioningSubtable> &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const;
-};
-
-struct PairPositioningFormat1Subtable : PairPositioningSubtable
-{
-    le_uint16   pairSetCount;
-    Offset      pairSetTableOffsetArray[ANY_NUMBER];
-
-    le_uint32  process(const LEReferenceTo<PairPositioningFormat1Subtable> &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const;
-
-private:
-    const PairValueRecord *findPairValueRecord(TTGlyphID glyphID, const PairValueRecord *records,
-        le_uint16 recordCount, le_uint16 recordSize) const;
-};
-LE_VAR_ARRAY(PairPositioningFormat1Subtable, pairSetTableOffsetArray)
-
-// NOTE: ValueRecord has a variable size
-struct Class2Record
-{
-    ValueRecord valueRecord1;
-//  ValueRecord valurRecord2;
-};
-
-struct Class1Record
-{
-    Class2Record class2RecordArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(Class1Record, class2RecordArray)
-
-struct PairPositioningFormat2Subtable : PairPositioningSubtable
-{
-    Offset       classDef1Offset;
-    Offset       classDef2Offset;
-    le_uint16    class1Count;
-    le_uint16    class2Count;
-    Class1Record class1RecordArray[ANY_NUMBER];
-
-    le_uint32  process(const LEReferenceTo<PairPositioningFormat2Subtable> &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const;
-};
-LE_VAR_ARRAY(PairPositioningFormat2Subtable, class1RecordArray)
-
-U_NAMESPACE_END
-#endif
-
-
diff --git a/icu4c/source/layout/ScriptAndLanguage.cpp b/icu4c/source/layout/ScriptAndLanguage.cpp
deleted file mode 100644 (file)
index b7849a2..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "OpenTypeUtilities.h"
-#include "ScriptAndLanguage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-LEReferenceTo<LangSysTable> ScriptTable::findLanguage(const LETableReference& base, LETag languageTag, LEErrorCode &success, le_bool exactMatch) const
-{
-    le_uint16 count = SWAPW(langSysCount);
-    Offset langSysTableOffset = exactMatch? 0 : SWAPW(defaultLangSysTableOffset);
-
-    if (count > 0) {
-      LEReferenceToArrayOf<TagAndOffsetRecord> langSysRecords(base, success, langSysRecordArray, count);
-      Offset foundOffset =
-        OpenTypeUtilities::getTagOffset(languageTag, langSysRecords, success);
-      
-      if (foundOffset != 0 && LE_SUCCESS(success)) {
-        langSysTableOffset = foundOffset;
-      }
-    }
-    
-    if (langSysTableOffset != 0) {
-      return LEReferenceTo<LangSysTable>(base, success, langSysTableOffset);
-    }
-
-    return LEReferenceTo<LangSysTable>();
-}
-
-LEReferenceTo<ScriptTable> ScriptListTable::findScript(const LETableReference &base, LETag scriptTag, LEErrorCode &success) const
-{
-    if (LE_FAILURE(success) ) {
-      return LEReferenceTo<ScriptTable>(); // get out
-    }
-    /*
-     * There are some fonts that have a large, bogus value for scriptCount. To try
-     * and protect against this, we use the offset in the first scriptRecord,
-     * which we know has to be past the end of the scriptRecordArray, to compute
-     * a value which is greater than or equal to the actual script count.
-     *
-     * Note: normally, the first offset will point to just after the scriptRecordArray,
-     * but there's no guarantee of this, only that it's *after* the scriptRecordArray.
-     * Because of this, a binary serach isn't safe, because the new count may include
-     * data that's not actually in the scriptRecordArray and hence the array will appear
-     * to be unsorted.
-     */
-    le_uint16 count = SWAPW(scriptCount);
-
-    if (count == 0) {
-      return LEReferenceTo<ScriptTable>(); // no items, no search
-    }
-    
-    // attempt to construct a ref with at least one element
-    LEReferenceToArrayOf<ScriptRecord> oneElementTable(base, success, &scriptRecordArray[0], 1);
-    
-    if( LE_FAILURE(success) ) {
-      return LEReferenceTo<ScriptTable>(); // couldn't even read the first record - bad font.
-    }
-
-    le_uint16 limit = ((SWAPW(scriptRecordArray[0].offset) - sizeof(ScriptListTable)) / sizeof(scriptRecordArray)) + ANY_NUMBER;
-    Offset scriptTableOffset = 0;
-    
-
-    if (count > limit) {
-        // the scriptCount value is bogus; do a linear search
-        // because limit may still be too large.
-        LEReferenceToArrayOf<ScriptRecord> scriptRecordArrayRef(base, success, &scriptRecordArray[0], limit);
-        for(le_int32 s = 0; (s < limit)&&LE_SUCCESS(success); s += 1) {
-          if (SWAPT(scriptRecordArrayRef(s,success).tag) == scriptTag) {
-            scriptTableOffset = SWAPW(scriptRecordArrayRef(s,success).offset);
-            break;
-          }
-        }
-    } else {
-      LEReferenceToArrayOf<ScriptRecord> scriptRecordArrayRef(base, success, &scriptRecordArray[0], count);
-      
-      scriptTableOffset = OpenTypeUtilities::getTagOffset(scriptTag, scriptRecordArrayRef, success);
-    }
-
-    if (scriptTableOffset != 0) {
-      return LEReferenceTo<ScriptTable>(base, success, scriptTableOffset);
-    }
-
-  return LEReferenceTo<ScriptTable>();
-}
-
-LEReferenceTo<LangSysTable>  ScriptListTable::findLanguage(const LETableReference &base, LETag scriptTag, LETag languageTag, LEErrorCode &success, le_bool exactMatch) const 
-{
-  const LEReferenceTo<ScriptTable> scriptTable = findScript(base, scriptTag, success);
-
-  if (scriptTable.isEmpty()) {
-    return LEReferenceTo<LangSysTable>();
-  }
-
-  return scriptTable->findLanguage(scriptTable, languageTag, success, exactMatch).reparent(base);
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/ScriptAndLanguage.h b/icu4c/source/layout/ScriptAndLanguage.h
deleted file mode 100644 (file)
index f66a535..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __SCRIPTANDLANGUAGE_H
-#define __SCRIPTANDLANGUAGE_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-
-U_NAMESPACE_BEGIN
-
-typedef TagAndOffsetRecord LangSysRecord;
-
-struct LangSysTable
-{
-    Offset    lookupOrderOffset;
-    le_uint16 reqFeatureIndex;
-    le_uint16 featureCount;
-    le_uint16 featureIndexArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(LangSysTable, featureIndexArray)
-
-struct ScriptTable
-{
-    Offset              defaultLangSysTableOffset;
-    le_uint16           langSysCount;
-    LangSysRecord       langSysRecordArray[ANY_NUMBER];
-
-  LEReferenceTo<LangSysTable>  findLanguage(const LETableReference &base, LETag languageTag, LEErrorCode &success, le_bool exactMatch = FALSE) const;
-};
-LE_VAR_ARRAY(ScriptTable, langSysRecordArray)
-
-typedef TagAndOffsetRecord ScriptRecord;
-
-struct ScriptListTable
-{
-    le_uint16           scriptCount;
-    ScriptRecord        scriptRecordArray[ANY_NUMBER];
-
-  LEReferenceTo<ScriptTable>   findScript(const LETableReference &base, LETag scriptTag, LEErrorCode &success) const;
-  LEReferenceTo<LangSysTable>  findLanguage(const LETableReference &base, LETag scriptTag, LETag languageTag, LEErrorCode &success, le_bool exactMatch = FALSE) const;
-};
-LE_VAR_ARRAY(ScriptListTable, scriptRecordArray)
-
-U_NAMESPACE_END
-#endif
-
diff --git a/icu4c/source/layout/ScriptAndLanguageTags.cpp b/icu4c/source/layout/ScriptAndLanguageTags.cpp
deleted file mode 100644 (file)
index d3ad575..0000000
+++ /dev/null
@@ -1,272 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2016. All Rights Reserved.
- *
- * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS
- * YOU REALLY KNOW WHAT YOU'RE DOING.
- *
- * Generated on: 05/10/2016 11:13:24 AM PDT
- */
-
-#include "LETypes.h"
-#include "ScriptAndLanguageTags.h"
-#include "OpenTypeLayoutEngine.h"
-
-U_NAMESPACE_BEGIN
-
-const LETag OpenTypeLayoutEngine::scriptTags[] = {
-    zyyyScriptTag, /* 'zyyy' (COMMON) */
-    zinhScriptTag, /* 'zinh' (INHERITED) */
-    arabScriptTag, /* 'arab' (ARABIC) */
-    armnScriptTag, /* 'armn' (ARMENIAN) */
-    bengScriptTag, /* 'beng' (BENGALI) */
-    bopoScriptTag, /* 'bopo' (BOPOMOFO) */
-    cherScriptTag, /* 'cher' (CHEROKEE) */
-    coptScriptTag, /* 'copt' (COPTIC) */
-    cyrlScriptTag, /* 'cyrl' (CYRILLIC) */
-    dsrtScriptTag, /* 'dsrt' (DESERET) */
-    devaScriptTag, /* 'deva' (DEVANAGARI) */
-    ethiScriptTag, /* 'ethi' (ETHIOPIC) */
-    georScriptTag, /* 'geor' (GEORGIAN) */
-    gothScriptTag, /* 'goth' (GOTHIC) */
-    grekScriptTag, /* 'grek' (GREEK) */
-    gujrScriptTag, /* 'gujr' (GUJARATI) */
-    guruScriptTag, /* 'guru' (GURMUKHI) */
-    haniScriptTag, /* 'hani' (HAN) */
-    hangScriptTag, /* 'hang' (HANGUL) */
-    hebrScriptTag, /* 'hebr' (HEBREW) */
-    hiraScriptTag, /* 'hira' (HIRAGANA) */
-    kndaScriptTag, /* 'knda' (KANNADA) */
-    kanaScriptTag, /* 'kana' (KATAKANA) */
-    khmrScriptTag, /* 'khmr' (KHMER) */
-    laooScriptTag, /* 'lao ' (LAO) */
-    latnScriptTag, /* 'latn' (LATIN) */
-    mlymScriptTag, /* 'mlym' (MALAYALAM) */
-    mongScriptTag, /* 'mong' (MONGOLIAN) */
-    mymrScriptTag, /* 'mymr' (MYANMAR) */
-    ogamScriptTag, /* 'ogam' (OGHAM) */
-    italScriptTag, /* 'ital' (OLD_ITALIC) */
-    oryaScriptTag, /* 'orya' (ORIYA) */
-    runrScriptTag, /* 'runr' (RUNIC) */
-    sinhScriptTag, /* 'sinh' (SINHALA) */
-    syrcScriptTag, /* 'syrc' (SYRIAC) */
-    tamlScriptTag, /* 'taml' (TAMIL) */
-    teluScriptTag, /* 'telu' (TELUGU) */
-    thaaScriptTag, /* 'thaa' (THAANA) */
-    thaiScriptTag, /* 'thai' (THAI) */
-    tibtScriptTag, /* 'tibt' (TIBETAN) */
-    cansScriptTag, /* 'cans' (CANADIAN_ABORIGINAL) */
-    yiiiScriptTag, /* 'yi  ' (YI) */
-    tglgScriptTag, /* 'tglg' (TAGALOG) */
-    hanoScriptTag, /* 'hano' (HANUNOO) */
-    buhdScriptTag, /* 'buhd' (BUHID) */
-    tagbScriptTag, /* 'tagb' (TAGBANWA) */
-    braiScriptTag, /* 'brai' (BRAILLE) */
-    cprtScriptTag, /* 'cprt' (CYPRIOT) */
-    limbScriptTag, /* 'limb' (LIMBU) */
-    linbScriptTag, /* 'linb' (LINEAR_B) */
-    osmaScriptTag, /* 'osma' (OSMANYA) */
-    shawScriptTag, /* 'shaw' (SHAVIAN) */
-    taleScriptTag, /* 'tale' (TAI_LE) */
-    ugarScriptTag, /* 'ugar' (UGARITIC) */
-    hrktScriptTag, /* 'hrkt' (KATAKANA_OR_HIRAGANA) */
-    bugiScriptTag, /* 'bugi' (BUGINESE) */
-    glagScriptTag, /* 'glag' (GLAGOLITIC) */
-    kharScriptTag, /* 'khar' (KHAROSHTHI) */
-    syloScriptTag, /* 'sylo' (SYLOTI_NAGRI) */
-    taluScriptTag, /* 'talu' (NEW_TAI_LUE) */
-    tfngScriptTag, /* 'tfng' (TIFINAGH) */
-    xpeoScriptTag, /* 'xpeo' (OLD_PERSIAN) */
-    baliScriptTag, /* 'bali' (BALINESE) */
-    batkScriptTag, /* 'batk' (BATAK) */
-    blisScriptTag, /* 'blis' (BLIS) */
-    brahScriptTag, /* 'brah' (BRAHMI) */
-    chamScriptTag, /* 'cham' (CHAM) */
-    cirtScriptTag, /* 'cirt' (CIRT) */
-    cyrsScriptTag, /* 'cyrs' (CYRS) */
-    egydScriptTag, /* 'egyd' (EGYD) */
-    egyhScriptTag, /* 'egyh' (EGYH) */
-    egypScriptTag, /* 'egyp' (EGYPTIAN_HIEROGLYPHS) */
-    geokScriptTag, /* 'geok' (GEOK) */
-    hansScriptTag, /* 'hans' (HANS) */
-    hantScriptTag, /* 'hant' (HANT) */
-    hmngScriptTag, /* 'hmng' (PAHAWH_HMONG) */
-    hungScriptTag, /* 'hung' (OLD_HUNGARIAN) */
-    indsScriptTag, /* 'inds' (INDS) */
-    javaScriptTag, /* 'java' (JAVANESE) */
-    kaliScriptTag, /* 'kali' (KAYAH_LI) */
-    latfScriptTag, /* 'latf' (LATF) */
-    latgScriptTag, /* 'latg' (LATG) */
-    lepcScriptTag, /* 'lepc' (LEPCHA) */
-    linaScriptTag, /* 'lina' (LINEAR_A) */
-    mandScriptTag, /* 'mand' (MANDAIC) */
-    mayaScriptTag, /* 'maya' (MAYA) */
-    meroScriptTag, /* 'mero' (MEROITIC_HIEROGLYPHS) */
-    nkooScriptTag, /* 'nko ' (NKO) */
-    orkhScriptTag, /* 'orkh' (OLD_TURKIC) */
-    permScriptTag, /* 'perm' (OLD_PERMIC) */
-    phagScriptTag, /* 'phag' (PHAGS_PA) */
-    phnxScriptTag, /* 'phnx' (PHOENICIAN) */
-    plrdScriptTag, /* 'plrd' (MIAO) */
-    roroScriptTag, /* 'roro' (RORO) */
-    saraScriptTag, /* 'sara' (SARA) */
-    syreScriptTag, /* 'syre' (SYRE) */
-    syrjScriptTag, /* 'syrj' (SYRJ) */
-    syrnScriptTag, /* 'syrn' (SYRN) */
-    tengScriptTag, /* 'teng' (TENG) */
-    vaiiScriptTag, /* 'vai ' (VAI) */
-    vispScriptTag, /* 'visp' (VISP) */
-    xsuxScriptTag, /* 'xsux' (CUNEIFORM) */
-    zxxxScriptTag, /* 'zxxx' (ZXXX) */
-    zzzzScriptTag, /* 'zzzz' (UNKNOWN) */
-    cariScriptTag, /* 'cari' (CARIAN) */
-    jpanScriptTag, /* 'jpan' (JPAN) */
-    lanaScriptTag, /* 'lana' (TAI_THAM) */
-    lyciScriptTag, /* 'lyci' (LYCIAN) */
-    lydiScriptTag, /* 'lydi' (LYDIAN) */
-    olckScriptTag, /* 'olck' (OL_CHIKI) */
-    rjngScriptTag, /* 'rjng' (REJANG) */
-    saurScriptTag, /* 'saur' (SAURASHTRA) */
-    sgnwScriptTag, /* 'sgnw' (SIGNWRITING) */
-    sundScriptTag, /* 'sund' (SUNDANESE) */
-    moonScriptTag, /* 'moon' (MOON) */
-    mteiScriptTag, /* 'mtei' (MEETEI_MAYEK) */
-    armiScriptTag, /* 'armi' (IMPERIAL_ARAMAIC) */
-    avstScriptTag, /* 'avst' (AVESTAN) */
-    cakmScriptTag, /* 'cakm' (CHAKMA) */
-    koreScriptTag, /* 'kore' (KORE) */
-    kthiScriptTag, /* 'kthi' (KAITHI) */
-    maniScriptTag, /* 'mani' (MANICHAEAN) */
-    phliScriptTag, /* 'phli' (INSCRIPTIONAL_PAHLAVI) */
-    phlpScriptTag, /* 'phlp' (PSALTER_PAHLAVI) */
-    phlvScriptTag, /* 'phlv' (PHLV) */
-    prtiScriptTag, /* 'prti' (INSCRIPTIONAL_PARTHIAN) */
-    samrScriptTag, /* 'samr' (SAMARITAN) */
-    tavtScriptTag, /* 'tavt' (TAI_VIET) */
-    zmthScriptTag, /* 'zmth' (ZMTH) */
-    zsymScriptTag, /* 'zsym' (ZSYM) */
-    bamuScriptTag, /* 'bamu' (BAMUM) */
-    lisuScriptTag, /* 'lisu' (LISU) */
-    nkgbScriptTag, /* 'nkgb' (NKGB) */
-    sarbScriptTag, /* 'sarb' (OLD_SOUTH_ARABIAN) */
-    bassScriptTag, /* 'bass' (BASSA_VAH) */
-    duplScriptTag, /* 'dupl' (DUPLOYAN) */
-    elbaScriptTag, /* 'elba' (ELBASAN) */
-    granScriptTag, /* 'gran' (GRANTHA) */
-    kpelScriptTag, /* 'kpel' (KPEL) */
-    lomaScriptTag, /* 'loma' (LOMA) */
-    mendScriptTag, /* 'mend' (MENDE_KIKAKUI) */
-    mercScriptTag, /* 'merc' (MEROITIC_CURSIVE) */
-    narbScriptTag, /* 'narb' (OLD_NORTH_ARABIAN) */
-    nbatScriptTag, /* 'nbat' (NABATAEAN) */
-    palmScriptTag, /* 'palm' (PALMYRENE) */
-    sindScriptTag, /* 'sind' (KHUDAWADI) */
-    waraScriptTag, /* 'wara' (WARANG_CITI) */
-    afakScriptTag, /* 'afak' (AFAK) */
-    jurcScriptTag, /* 'jurc' (JURC) */
-    mrooScriptTag, /* 'mroo' (MRO) */
-    nshuScriptTag, /* 'nshu' (NSHU) */
-    shrdScriptTag, /* 'shrd' (SHARADA) */
-    soraScriptTag, /* 'sora' (SORA_SOMPENG) */
-    takrScriptTag, /* 'takr' (TAKRI) */
-    tangScriptTag, /* 'tang' (TANGUT) */
-    woleScriptTag, /* 'wole' (WOLE) */
-    hluwScriptTag, /* 'hluw' (ANATOLIAN_HIEROGLYPHS) */
-    khojScriptTag, /* 'khoj' (KHOJKI) */
-    tirhScriptTag, /* 'tirh' (TIRHUTA) */
-    aghbScriptTag, /* 'aghb' (CAUCASIAN_ALBANIAN) */
-    mahjScriptTag, /* 'mahj' (MAHAJANI) */
-    ahomScriptTag, /* 'ahom' (AHOM) */
-    hatrScriptTag, /* 'hatr' (HATRAN) */
-    modiScriptTag, /* 'modi' (MODI) */
-    multScriptTag, /* 'mult' (MULTANI) */
-    paucScriptTag, /* 'pauc' (PAU_CIN_HAU) */
-    siddScriptTag, /* 'sidd' (SIDDHAM) */
-    adlmScriptTag, /* 'adlm' (ADLAM) */
-    bhksScriptTag, /* 'bhks' (BHAIKSUKI) */
-    marcScriptTag, /* 'marc' (MARCHEN) */
-    newaScriptTag, /* 'newa' (NEWA) */
-    osgeScriptTag, /* 'osge' (OSAGE) */
-    hanbScriptTag, /* 'hanb' (HANB) */
-    jamoScriptTag, /* 'jamo' (JAMO) */
-    zsyeScriptTag  /* 'zsye' (ZSYE) */
-};
-
-const LETag OpenTypeLayoutEngine::languageTags[] = {
-    nullLanguageTag, /* '' (null) */
-    araLanguageTag, /* 'ARA' (Arabic) */
-    asmLanguageTag, /* 'ASM' (Assamese) */
-    benLanguageTag, /* 'BEN' (Bengali) */
-    farLanguageTag, /* 'FAR' (Farsi) */
-    gujLanguageTag, /* 'GUJ' (Gujarati) */
-    hinLanguageTag, /* 'HIN' (Hindi) */
-    iwrLanguageTag, /* 'IWR' (Hebrew) */
-    jiiLanguageTag, /* 'JII' (Yiddish) */
-    janLanguageTag, /* 'JAN' (Japanese) */
-    kanLanguageTag, /* 'KAN' (Kannada) */
-    kokLanguageTag, /* 'KOK' (Konkani) */
-    korLanguageTag, /* 'KOR' (Korean) */
-    kshLanguageTag, /* 'KSH' (Kashmiri) */
-    malLanguageTag, /* 'MAL' (Malayalam (Traditional)) */
-    marLanguageTag, /* 'MAR' (Marathi) */
-    mlrLanguageTag, /* 'MLR' (Malayalam (Reformed)) */
-    mniLanguageTag, /* 'MNI' (Manipuri) */
-    oriLanguageTag, /* 'ORI' (Oriya) */
-    sanLanguageTag, /* 'SAN' (Sanscrit) */
-    sndLanguageTag, /* 'SND' (Sindhi) */
-    snhLanguageTag, /* 'SNH' (Sinhalese) */
-    syrLanguageTag, /* 'SYR' (Syriac) */
-    tamLanguageTag, /* 'TAM' (Tamil) */
-    telLanguageTag, /* 'TEL' (Telugu) */
-    thaLanguageTag, /* 'THA' (Thai) */
-    urdLanguageTag, /* 'URD' (Urdu) */
-    zhpLanguageTag, /* 'ZHP' (Chinese (Phonetic)) */
-    zhsLanguageTag, /* 'ZHS' (Chinese (Simplified)) */
-    zhtLanguageTag, /* 'ZHT' (Chinese (Traditional)) */
-    afkLanguageTag, /* 'AFK' (Afrikaans) */
-    belLanguageTag, /* 'BEL' (Belarussian) */
-    bgrLanguageTag, /* 'BGR' (Bulgarian) */
-    catLanguageTag, /* 'CAT' (Catalan) */
-    cheLanguageTag, /* 'CHE' (Chechen) */
-    copLanguageTag, /* 'COP' (Coptic) */
-    csyLanguageTag, /* 'CSY' (Czech) */
-    danLanguageTag, /* 'DAN' (Danish) */
-    deuLanguageTag, /* 'DEU' (German) */
-    dznLanguageTag, /* 'DZN' (Dzongkha) */
-    ellLanguageTag, /* 'ELL' (Greek) */
-    engLanguageTag, /* 'ENG' (English) */
-    espLanguageTag, /* 'ESP' (Spanish) */
-    etiLanguageTag, /* 'ETI' (Estonian) */
-    euqLanguageTag, /* 'EUQ' (Basque) */
-    finLanguageTag, /* 'FIN' (Finnish) */
-    fraLanguageTag, /* 'FRA' (French) */
-    gaeLanguageTag, /* 'GAE' (Gaelic) */
-    hauLanguageTag, /* 'HAU' (Hausa) */
-    hrvLanguageTag, /* 'HRV' (Croation) */
-    hunLanguageTag, /* 'HUN' (Hungarian) */
-    hyeLanguageTag, /* 'HYE' (Armenian) */
-    indLanguageTag, /* 'IND' (Indonesian) */
-    itaLanguageTag, /* 'ITA' (Italian) */
-    khmLanguageTag, /* 'KHM' (Khmer) */
-    mngLanguageTag, /* 'MNG' (Mongolian) */
-    mtsLanguageTag, /* 'MTS' (Maltese) */
-    nepLanguageTag, /* 'NEP' (Nepali) */
-    nldLanguageTag, /* 'NLD' (Dutch) */
-    pasLanguageTag, /* 'PAS' (Pashto) */
-    plkLanguageTag, /* 'PLK' (Polish) */
-    ptgLanguageTag, /* 'PTG' (Portuguese) */
-    romLanguageTag, /* 'ROM' (Romanian) */
-    rusLanguageTag, /* 'RUS' (Russian) */
-    skyLanguageTag, /* 'SKY' (Slovak) */
-    slvLanguageTag, /* 'SLV' (Slovenian) */
-    sqiLanguageTag, /* 'SQI' (Albanian) */
-    srbLanguageTag, /* 'SRB' (Serbian) */
-    sveLanguageTag, /* 'SVE' (Swedish) */
-    tibLanguageTag, /* 'TIB' (Tibetan) */
-    trkLanguageTag, /* 'TRK' (Turkish) */
-    welLanguageTag  /* 'WEL' (Welsh) */
-};
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/ScriptAndLanguageTags.h b/icu4c/source/layout/ScriptAndLanguageTags.h
deleted file mode 100644 (file)
index d5363c9..0000000
+++ /dev/null
@@ -1,288 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2016. All Rights Reserved.
- *
- * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS
- * YOU REALLY KNOW WHAT YOU'RE DOING.
- *
- * Generated on: 05/10/2016 11:13:24 AM PDT
- */
-
-#ifndef __SCRIPTANDLANGUAGES_H
-#define __SCRIPTANDLANGUAGES_H
-
-#include "LETypes.h"
-
-/**
- * \file
- * \internal
- */
-
-U_NAMESPACE_BEGIN
-
-const LETag zyyyScriptTag = 0x7A797979; /* 'zyyy' (COMMON) */
-const LETag zinhScriptTag = 0x7A696E68; /* 'zinh' (INHERITED) */
-const LETag arabScriptTag = 0x61726162; /* 'arab' (ARABIC) */
-const LETag armnScriptTag = 0x61726D6E; /* 'armn' (ARMENIAN) */
-const LETag bengScriptTag = 0x62656E67; /* 'beng' (BENGALI) */
-const LETag bng2ScriptTag = 0x626E6732; /* 'bng2' (BENGALI v.2) (manually added) */
-const LETag bopoScriptTag = 0x626F706F; /* 'bopo' (BOPOMOFO) */
-const LETag cherScriptTag = 0x63686572; /* 'cher' (CHEROKEE) */
-const LETag coptScriptTag = 0x636F7074; /* 'copt' (COPTIC) */
-const LETag cyrlScriptTag = 0x6379726C; /* 'cyrl' (CYRILLIC) */
-const LETag dsrtScriptTag = 0x64737274; /* 'dsrt' (DESERET) */
-const LETag devaScriptTag = 0x64657661; /* 'deva' (DEVANAGARI) */
-const LETag dev2ScriptTag = 0x64657632; /* 'dev2' (DEVANAGARI v.2) (manually added) */
-const LETag ethiScriptTag = 0x65746869; /* 'ethi' (ETHIOPIC) */
-const LETag georScriptTag = 0x67656F72; /* 'geor' (GEORGIAN) */
-const LETag gothScriptTag = 0x676F7468; /* 'goth' (GOTHIC) */
-const LETag grekScriptTag = 0x6772656B; /* 'grek' (GREEK) */
-const LETag gujrScriptTag = 0x67756A72; /* 'gujr' (GUJARATI) */
-const LETag gjr2ScriptTag = 0x676A7232; /* 'gjr2' (GUJARATI v.2) (manually added) */
-const LETag guruScriptTag = 0x67757275; /* 'guru' (GURMUKHI) */
-const LETag gur2ScriptTag = 0x67757232; /* 'gur2' (GURMUKHI v.2) (manually added) */
-const LETag haniScriptTag = 0x68616E69; /* 'hani' (HAN) */
-const LETag hangScriptTag = 0x68616E67; /* 'hang' (HANGUL) */
-const LETag hebrScriptTag = 0x68656272; /* 'hebr' (HEBREW) */
-const LETag hiraScriptTag = 0x68697261; /* 'hira' (HIRAGANA) */
-const LETag kndaScriptTag = 0x6B6E6461; /* 'knda' (KANNADA) */
-const LETag knd2ScriptTag = 0x6B6E6432; /* 'knd2' (KANNADA v.2) (manually added) */
-const LETag kanaScriptTag = 0x6B616E61; /* 'kana' (KATAKANA) */
-const LETag khmrScriptTag = 0x6B686D72; /* 'khmr' (KHMER) */
-const LETag laooScriptTag = 0x6C616F20; /* 'lao ' (LAO) */
-const LETag latnScriptTag = 0x6C61746E; /* 'latn' (LATIN) */
-const LETag mlymScriptTag = 0x6D6C796D; /* 'mlym' (MALAYALAM) */
-const LETag mlm2ScriptTag = 0x6D6C6D32; /* 'mlm2' (MALAYALAM v.2) (manually added) */
-const LETag mongScriptTag = 0x6D6F6E67; /* 'mong' (MONGOLIAN) */
-const LETag mymrScriptTag = 0x6D796D72; /* 'mymr' (MYANMAR) */
-const LETag ogamScriptTag = 0x6F67616D; /* 'ogam' (OGHAM) */
-const LETag italScriptTag = 0x6974616C; /* 'ital' (OLD_ITALIC) */
-const LETag oryaScriptTag = 0x6F727961; /* 'orya' (ORIYA) */
-const LETag ory2ScriptTag = 0x6F727932; /* 'ory2' (ORIYA v.2) (manually added) */
-const LETag runrScriptTag = 0x72756E72; /* 'runr' (RUNIC) */
-const LETag sinhScriptTag = 0x73696E68; /* 'sinh' (SINHALA) */
-const LETag syrcScriptTag = 0x73797263; /* 'syrc' (SYRIAC) */
-const LETag tamlScriptTag = 0x74616D6C; /* 'taml' (TAMIL) */
-const LETag tml2ScriptTag = 0x746D6C32; /* 'tml2' (TAMIL v.2) (manually added) */
-const LETag teluScriptTag = 0x74656C75; /* 'telu' (TELUGU) */
-const LETag tel2ScriptTag = 0x74656C32; /* 'tel2' (TELUGU v.2) (manually added) */
-const LETag thaaScriptTag = 0x74686161; /* 'thaa' (THAANA) */
-const LETag thaiScriptTag = 0x74686169; /* 'thai' (THAI) */
-const LETag tibtScriptTag = 0x74696274; /* 'tibt' (TIBETAN) */
-const LETag cansScriptTag = 0x63616E73; /* 'cans' (CANADIAN_ABORIGINAL) */
-const LETag yiiiScriptTag = 0x79692020; /* 'yi  ' (YI) */
-const LETag tglgScriptTag = 0x74676C67; /* 'tglg' (TAGALOG) */
-const LETag hanoScriptTag = 0x68616E6F; /* 'hano' (HANUNOO) */
-const LETag buhdScriptTag = 0x62756864; /* 'buhd' (BUHID) */
-const LETag tagbScriptTag = 0x74616762; /* 'tagb' (TAGBANWA) */
-const LETag braiScriptTag = 0x62726169; /* 'brai' (BRAILLE) */
-const LETag cprtScriptTag = 0x63707274; /* 'cprt' (CYPRIOT) */
-const LETag limbScriptTag = 0x6C696D62; /* 'limb' (LIMBU) */
-const LETag linbScriptTag = 0x6C696E62; /* 'linb' (LINEAR_B) */
-const LETag osmaScriptTag = 0x6F736D61; /* 'osma' (OSMANYA) */
-const LETag shawScriptTag = 0x73686177; /* 'shaw' (SHAVIAN) */
-const LETag taleScriptTag = 0x74616C65; /* 'tale' (TAI_LE) */
-const LETag ugarScriptTag = 0x75676172; /* 'ugar' (UGARITIC) */
-const LETag hrktScriptTag = 0x68726B74; /* 'hrkt' (KATAKANA_OR_HIRAGANA) */
-const LETag bugiScriptTag = 0x62756769; /* 'bugi' (BUGINESE) */
-const LETag glagScriptTag = 0x676C6167; /* 'glag' (GLAGOLITIC) */
-const LETag kharScriptTag = 0x6B686172; /* 'khar' (KHAROSHTHI) */
-const LETag syloScriptTag = 0x73796C6F; /* 'sylo' (SYLOTI_NAGRI) */
-const LETag taluScriptTag = 0x74616C75; /* 'talu' (NEW_TAI_LUE) */
-const LETag tfngScriptTag = 0x74666E67; /* 'tfng' (TIFINAGH) */
-const LETag xpeoScriptTag = 0x7870656F; /* 'xpeo' (OLD_PERSIAN) */
-const LETag baliScriptTag = 0x62616C69; /* 'bali' (BALINESE) */
-const LETag batkScriptTag = 0x6261746B; /* 'batk' (BATAK) */
-const LETag blisScriptTag = 0x626C6973; /* 'blis' (BLIS) */
-const LETag brahScriptTag = 0x62726168; /* 'brah' (BRAHMI) */
-const LETag chamScriptTag = 0x6368616D; /* 'cham' (CHAM) */
-const LETag cirtScriptTag = 0x63697274; /* 'cirt' (CIRT) */
-const LETag cyrsScriptTag = 0x63797273; /* 'cyrs' (CYRS) */
-const LETag egydScriptTag = 0x65677964; /* 'egyd' (EGYD) */
-const LETag egyhScriptTag = 0x65677968; /* 'egyh' (EGYH) */
-const LETag egypScriptTag = 0x65677970; /* 'egyp' (EGYPTIAN_HIEROGLYPHS) */
-const LETag geokScriptTag = 0x67656F6B; /* 'geok' (GEOK) */
-const LETag hansScriptTag = 0x68616E73; /* 'hans' (HANS) */
-const LETag hantScriptTag = 0x68616E74; /* 'hant' (HANT) */
-const LETag hmngScriptTag = 0x686D6E67; /* 'hmng' (PAHAWH_HMONG) */
-const LETag hungScriptTag = 0x68756E67; /* 'hung' (OLD_HUNGARIAN) */
-const LETag indsScriptTag = 0x696E6473; /* 'inds' (INDS) */
-const LETag javaScriptTag = 0x6A617661; /* 'java' (JAVANESE) */
-const LETag kaliScriptTag = 0x6B616C69; /* 'kali' (KAYAH_LI) */
-const LETag latfScriptTag = 0x6C617466; /* 'latf' (LATF) */
-const LETag latgScriptTag = 0x6C617467; /* 'latg' (LATG) */
-const LETag lepcScriptTag = 0x6C657063; /* 'lepc' (LEPCHA) */
-const LETag linaScriptTag = 0x6C696E61; /* 'lina' (LINEAR_A) */
-const LETag mandScriptTag = 0x6D616E64; /* 'mand' (MANDAIC) */
-const LETag mayaScriptTag = 0x6D617961; /* 'maya' (MAYA) */
-const LETag meroScriptTag = 0x6D65726F; /* 'mero' (MEROITIC_HIEROGLYPHS) */
-const LETag nkooScriptTag = 0x6E6B6F20; /* 'nko ' (NKO) */
-const LETag orkhScriptTag = 0x6F726B68; /* 'orkh' (OLD_TURKIC) */
-const LETag permScriptTag = 0x7065726D; /* 'perm' (OLD_PERMIC) */
-const LETag phagScriptTag = 0x70686167; /* 'phag' (PHAGS_PA) */
-const LETag phnxScriptTag = 0x70686E78; /* 'phnx' (PHOENICIAN) */
-const LETag plrdScriptTag = 0x706C7264; /* 'plrd' (MIAO) */
-const LETag roroScriptTag = 0x726F726F; /* 'roro' (RORO) */
-const LETag saraScriptTag = 0x73617261; /* 'sara' (SARA) */
-const LETag syreScriptTag = 0x73797265; /* 'syre' (SYRE) */
-const LETag syrjScriptTag = 0x7379726A; /* 'syrj' (SYRJ) */
-const LETag syrnScriptTag = 0x7379726E; /* 'syrn' (SYRN) */
-const LETag tengScriptTag = 0x74656E67; /* 'teng' (TENG) */
-const LETag vaiiScriptTag = 0x76616920; /* 'vai ' (VAI) */
-const LETag vispScriptTag = 0x76697370; /* 'visp' (VISP) */
-const LETag xsuxScriptTag = 0x78737578; /* 'xsux' (CUNEIFORM) */
-const LETag zxxxScriptTag = 0x7A787878; /* 'zxxx' (ZXXX) */
-const LETag zzzzScriptTag = 0x7A7A7A7A; /* 'zzzz' (UNKNOWN) */
-const LETag cariScriptTag = 0x63617269; /* 'cari' (CARIAN) */
-const LETag jpanScriptTag = 0x6A70616E; /* 'jpan' (JPAN) */
-const LETag lanaScriptTag = 0x6C616E61; /* 'lana' (TAI_THAM) */
-const LETag lyciScriptTag = 0x6C796369; /* 'lyci' (LYCIAN) */
-const LETag lydiScriptTag = 0x6C796469; /* 'lydi' (LYDIAN) */
-const LETag olckScriptTag = 0x6F6C636B; /* 'olck' (OL_CHIKI) */
-const LETag rjngScriptTag = 0x726A6E67; /* 'rjng' (REJANG) */
-const LETag saurScriptTag = 0x73617572; /* 'saur' (SAURASHTRA) */
-const LETag sgnwScriptTag = 0x73676E77; /* 'sgnw' (SIGNWRITING) */
-const LETag sundScriptTag = 0x73756E64; /* 'sund' (SUNDANESE) */
-const LETag moonScriptTag = 0x6D6F6F6E; /* 'moon' (MOON) */
-const LETag mteiScriptTag = 0x6D746569; /* 'mtei' (MEETEI_MAYEK) */
-const LETag armiScriptTag = 0x61726D69; /* 'armi' (IMPERIAL_ARAMAIC) */
-const LETag avstScriptTag = 0x61767374; /* 'avst' (AVESTAN) */
-const LETag cakmScriptTag = 0x63616B6D; /* 'cakm' (CHAKMA) */
-const LETag koreScriptTag = 0x6B6F7265; /* 'kore' (KORE) */
-const LETag kthiScriptTag = 0x6B746869; /* 'kthi' (KAITHI) */
-const LETag maniScriptTag = 0x6D616E69; /* 'mani' (MANICHAEAN) */
-const LETag phliScriptTag = 0x70686C69; /* 'phli' (INSCRIPTIONAL_PAHLAVI) */
-const LETag phlpScriptTag = 0x70686C70; /* 'phlp' (PSALTER_PAHLAVI) */
-const LETag phlvScriptTag = 0x70686C76; /* 'phlv' (PHLV) */
-const LETag prtiScriptTag = 0x70727469; /* 'prti' (INSCRIPTIONAL_PARTHIAN) */
-const LETag samrScriptTag = 0x73616D72; /* 'samr' (SAMARITAN) */
-const LETag tavtScriptTag = 0x74617674; /* 'tavt' (TAI_VIET) */
-const LETag zmthScriptTag = 0x7A6D7468; /* 'zmth' (ZMTH) */
-const LETag zsymScriptTag = 0x7A73796D; /* 'zsym' (ZSYM) */
-const LETag bamuScriptTag = 0x62616D75; /* 'bamu' (BAMUM) */
-const LETag lisuScriptTag = 0x6C697375; /* 'lisu' (LISU) */
-const LETag nkgbScriptTag = 0x6E6B6762; /* 'nkgb' (NKGB) */
-const LETag sarbScriptTag = 0x73617262; /* 'sarb' (OLD_SOUTH_ARABIAN) */
-const LETag bassScriptTag = 0x62617373; /* 'bass' (BASSA_VAH) */
-const LETag duplScriptTag = 0x6475706C; /* 'dupl' (DUPLOYAN) */
-const LETag elbaScriptTag = 0x656C6261; /* 'elba' (ELBASAN) */
-const LETag granScriptTag = 0x6772616E; /* 'gran' (GRANTHA) */
-const LETag kpelScriptTag = 0x6B70656C; /* 'kpel' (KPEL) */
-const LETag lomaScriptTag = 0x6C6F6D61; /* 'loma' (LOMA) */
-const LETag mendScriptTag = 0x6D656E64; /* 'mend' (MENDE_KIKAKUI) */
-const LETag mercScriptTag = 0x6D657263; /* 'merc' (MEROITIC_CURSIVE) */
-const LETag narbScriptTag = 0x6E617262; /* 'narb' (OLD_NORTH_ARABIAN) */
-const LETag nbatScriptTag = 0x6E626174; /* 'nbat' (NABATAEAN) */
-const LETag palmScriptTag = 0x70616C6D; /* 'palm' (PALMYRENE) */
-const LETag sindScriptTag = 0x73696E64; /* 'sind' (KHUDAWADI) */
-const LETag waraScriptTag = 0x77617261; /* 'wara' (WARANG_CITI) */
-const LETag afakScriptTag = 0x6166616B; /* 'afak' (AFAK) */
-const LETag jurcScriptTag = 0x6A757263; /* 'jurc' (JURC) */
-const LETag mrooScriptTag = 0x6D726F6F; /* 'mroo' (MRO) */
-const LETag nshuScriptTag = 0x6E736875; /* 'nshu' (NSHU) */
-const LETag shrdScriptTag = 0x73687264; /* 'shrd' (SHARADA) */
-const LETag soraScriptTag = 0x736F7261; /* 'sora' (SORA_SOMPENG) */
-const LETag takrScriptTag = 0x74616B72; /* 'takr' (TAKRI) */
-const LETag tangScriptTag = 0x74616E67; /* 'tang' (TANGUT) */
-const LETag woleScriptTag = 0x776F6C65; /* 'wole' (WOLE) */
-const LETag hluwScriptTag = 0x686C7577; /* 'hluw' (ANATOLIAN_HIEROGLYPHS) */
-const LETag khojScriptTag = 0x6B686F6A; /* 'khoj' (KHOJKI) */
-const LETag tirhScriptTag = 0x74697268; /* 'tirh' (TIRHUTA) */
-const LETag aghbScriptTag = 0x61676862; /* 'aghb' (CAUCASIAN_ALBANIAN) */
-const LETag mahjScriptTag = 0x6D61686A; /* 'mahj' (MAHAJANI) */
-const LETag ahomScriptTag = 0x61686F6D; /* 'ahom' (AHOM) */
-const LETag hatrScriptTag = 0x68617472; /* 'hatr' (HATRAN) */
-const LETag modiScriptTag = 0x6D6F6469; /* 'modi' (MODI) */
-const LETag multScriptTag = 0x6D756C74; /* 'mult' (MULTANI) */
-const LETag paucScriptTag = 0x70617563; /* 'pauc' (PAU_CIN_HAU) */
-const LETag siddScriptTag = 0x73696464; /* 'sidd' (SIDDHAM) */
-const LETag adlmScriptTag = 0x61646C6D; /* 'adlm' (ADLAM) */
-const LETag bhksScriptTag = 0x62686B73; /* 'bhks' (BHAIKSUKI) */
-const LETag marcScriptTag = 0x6D617263; /* 'marc' (MARCHEN) */
-const LETag newaScriptTag = 0x6E657761; /* 'newa' (NEWA) */
-const LETag osgeScriptTag = 0x6F736765; /* 'osge' (OSAGE) */
-const LETag hanbScriptTag = 0x68616E62; /* 'hanb' (HANB) */
-const LETag jamoScriptTag = 0x6A616D6F; /* 'jamo' (JAMO) */
-const LETag zsyeScriptTag = 0x7A737965; /* 'zsye' (ZSYE) */
-
-const LETag nullScriptTag = 0x00000000; /* ''     (NULL) */
-
-
-const LETag nullLanguageTag = 0x00000000; /* '' (null) */
-const LETag araLanguageTag = 0x41524120; /* 'ARA' (Arabic) */
-const LETag asmLanguageTag = 0x41534D20; /* 'ASM' (Assamese) */
-const LETag benLanguageTag = 0x42454E20; /* 'BEN' (Bengali) */
-const LETag farLanguageTag = 0x46415220; /* 'FAR' (Farsi) */
-const LETag gujLanguageTag = 0x47554A20; /* 'GUJ' (Gujarati) */
-const LETag hinLanguageTag = 0x48494E20; /* 'HIN' (Hindi) */
-const LETag iwrLanguageTag = 0x49575220; /* 'IWR' (Hebrew) */
-const LETag jiiLanguageTag = 0x4A494920; /* 'JII' (Yiddish) */
-const LETag janLanguageTag = 0x4A414E20; /* 'JAN' (Japanese) */
-const LETag kanLanguageTag = 0x4B414E20; /* 'KAN' (Kannada) */
-const LETag kokLanguageTag = 0x4B4F4B20; /* 'KOK' (Konkani) */
-const LETag korLanguageTag = 0x4B4F5220; /* 'KOR' (Korean) */
-const LETag kshLanguageTag = 0x4B534820; /* 'KSH' (Kashmiri) */
-const LETag malLanguageTag = 0x4D414C20; /* 'MAL' (Malayalam (Traditional)) */
-const LETag marLanguageTag = 0x4D415220; /* 'MAR' (Marathi) */
-const LETag mlrLanguageTag = 0x4D4C5220; /* 'MLR' (Malayalam (Reformed)) */
-const LETag mniLanguageTag = 0x4D4E4920; /* 'MNI' (Manipuri) */
-const LETag oriLanguageTag = 0x4F524920; /* 'ORI' (Oriya) */
-const LETag sanLanguageTag = 0x53414E20; /* 'SAN' (Sanscrit) */
-const LETag sndLanguageTag = 0x534E4420; /* 'SND' (Sindhi) */
-const LETag snhLanguageTag = 0x534E4820; /* 'SNH' (Sinhalese) */
-const LETag syrLanguageTag = 0x53595220; /* 'SYR' (Syriac) */
-const LETag tamLanguageTag = 0x54414D20; /* 'TAM' (Tamil) */
-const LETag telLanguageTag = 0x54454C20; /* 'TEL' (Telugu) */
-const LETag thaLanguageTag = 0x54484120; /* 'THA' (Thai) */
-const LETag urdLanguageTag = 0x55524420; /* 'URD' (Urdu) */
-const LETag zhpLanguageTag = 0x5A485020; /* 'ZHP' (Chinese (Phonetic)) */
-const LETag zhsLanguageTag = 0x5A485320; /* 'ZHS' (Chinese (Simplified)) */
-const LETag zhtLanguageTag = 0x5A485420; /* 'ZHT' (Chinese (Traditional)) */
-const LETag afkLanguageTag = 0x41464B20; /* 'AFK' (Afrikaans) */
-const LETag belLanguageTag = 0x42454C20; /* 'BEL' (Belarussian) */
-const LETag bgrLanguageTag = 0x42475220; /* 'BGR' (Bulgarian) */
-const LETag catLanguageTag = 0x43415420; /* 'CAT' (Catalan) */
-const LETag cheLanguageTag = 0x43484520; /* 'CHE' (Chechen) */
-const LETag copLanguageTag = 0x434F5020; /* 'COP' (Coptic) */
-const LETag csyLanguageTag = 0x43535920; /* 'CSY' (Czech) */
-const LETag danLanguageTag = 0x44414E20; /* 'DAN' (Danish) */
-const LETag deuLanguageTag = 0x44455520; /* 'DEU' (German) */
-const LETag dznLanguageTag = 0x445A4E20; /* 'DZN' (Dzongkha) */
-const LETag ellLanguageTag = 0x454C4C20; /* 'ELL' (Greek) */
-const LETag engLanguageTag = 0x454E4720; /* 'ENG' (English) */
-const LETag espLanguageTag = 0x45535020; /* 'ESP' (Spanish) */
-const LETag etiLanguageTag = 0x45544920; /* 'ETI' (Estonian) */
-const LETag euqLanguageTag = 0x45555120; /* 'EUQ' (Basque) */
-const LETag finLanguageTag = 0x46494E20; /* 'FIN' (Finnish) */
-const LETag fraLanguageTag = 0x46524120; /* 'FRA' (French) */
-const LETag gaeLanguageTag = 0x47414520; /* 'GAE' (Gaelic) */
-const LETag hauLanguageTag = 0x48415520; /* 'HAU' (Hausa) */
-const LETag hrvLanguageTag = 0x48525620; /* 'HRV' (Croation) */
-const LETag hunLanguageTag = 0x48554E20; /* 'HUN' (Hungarian) */
-const LETag hyeLanguageTag = 0x48594520; /* 'HYE' (Armenian) */
-const LETag indLanguageTag = 0x494E4420; /* 'IND' (Indonesian) */
-const LETag itaLanguageTag = 0x49544120; /* 'ITA' (Italian) */
-const LETag khmLanguageTag = 0x4B484D20; /* 'KHM' (Khmer) */
-const LETag mngLanguageTag = 0x4D4E4720; /* 'MNG' (Mongolian) */
-const LETag mtsLanguageTag = 0x4D545320; /* 'MTS' (Maltese) */
-const LETag nepLanguageTag = 0x4E455020; /* 'NEP' (Nepali) */
-const LETag nldLanguageTag = 0x4E4C4420; /* 'NLD' (Dutch) */
-const LETag pasLanguageTag = 0x50415320; /* 'PAS' (Pashto) */
-const LETag plkLanguageTag = 0x504C4B20; /* 'PLK' (Polish) */
-const LETag ptgLanguageTag = 0x50544720; /* 'PTG' (Portuguese) */
-const LETag romLanguageTag = 0x524F4D20; /* 'ROM' (Romanian) */
-const LETag rusLanguageTag = 0x52555320; /* 'RUS' (Russian) */
-const LETag skyLanguageTag = 0x534B5920; /* 'SKY' (Slovak) */
-const LETag slvLanguageTag = 0x534C5620; /* 'SLV' (Slovenian) */
-const LETag sqiLanguageTag = 0x53514920; /* 'SQI' (Albanian) */
-const LETag srbLanguageTag = 0x53524220; /* 'SRB' (Serbian) */
-const LETag sveLanguageTag = 0x53564520; /* 'SVE' (Swedish) */
-const LETag tibLanguageTag = 0x54494220; /* 'TIB' (Tibetan) */
-const LETag trkLanguageTag = 0x54524B20; /* 'TRK' (Turkish) */
-const LETag welLanguageTag = 0x57454C20; /* 'WEL' (Welsh) */
-
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/SegmentArrayProcessor.cpp b/icu4c/source/layout/SegmentArrayProcessor.cpp
deleted file mode 100644 (file)
index cf9b9af..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2015 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc.h"
-#include "SegmentArrayProcessor.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SegmentArrayProcessor)
-
-SegmentArrayProcessor::SegmentArrayProcessor()
-{
-}
-
-SegmentArrayProcessor::SegmentArrayProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success)
-  : NonContextualGlyphSubstitutionProcessor(morphSubtableHeader, success)
-{
-  LEReferenceTo<NonContextualGlyphSubstitutionHeader> header(morphSubtableHeader, success);
-  segmentArrayLookupTable = LEReferenceTo<SegmentArrayLookupTable>(morphSubtableHeader, success, (const SegmentArrayLookupTable*)&header->table);
-}
-
-SegmentArrayProcessor::~SegmentArrayProcessor()
-{
-}
-
-void SegmentArrayProcessor::process(LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    const LookupSegment *segments = segmentArrayLookupTable->segments;
-    le_int32 glyphCount = glyphStorage.getGlyphCount();
-    le_int32 glyph;
-
-    if (LE_FAILURE(success)) return;
-
-    for (glyph = 0; glyph < glyphCount; glyph += 1) {
-        LEGlyphID thisGlyph = glyphStorage[glyph];
-        const LookupSegment *lookupSegment = segmentArrayLookupTable->lookupSegment(segmentArrayLookupTable, segments, thisGlyph, success);
-
-        if (lookupSegment != NULL)  {
-            TTGlyphID firstGlyph = SWAPW(lookupSegment->firstGlyph);
-            le_int16  offset = SWAPW(lookupSegment->value);
-
-            if (offset != 0) {
-              LEReferenceToArrayOf<TTGlyphID> glyphArray(subtableHeader, success, offset, LE_UNBOUNDED_ARRAY);
-              TTGlyphID   newGlyph   = SWAPW(glyphArray(LE_GET_GLYPH(thisGlyph) - firstGlyph, success));
-              glyphStorage[glyph] = LE_SET_GLYPH(thisGlyph, newGlyph);
-            } 
-        }
-    }
-}
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/SegmentArrayProcessor.h b/icu4c/source/layout/SegmentArrayProcessor.h
deleted file mode 100644 (file)
index 1b56de4..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2014 - All Rights Reserved
- *
- */
-
-#ifndef __SEGMENTARRAYPROCESSOR_H
-#define __SEGMENTARRAYPROCESSOR_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class SegmentArrayProcessor : public NonContextualGlyphSubstitutionProcessor
-{
-public:
-    virtual void process(LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    SegmentArrayProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success);
-
-    virtual ~SegmentArrayProcessor();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    static UClassID getStaticClassID();
-
-private:
-    SegmentArrayProcessor();
-
-protected:
-    LEReferenceTo<SegmentArrayLookupTable> segmentArrayLookupTable;
-
-};
-
-U_NAMESPACE_END
-#endif
-
diff --git a/icu4c/source/layout/SegmentArrayProcessor2.cpp b/icu4c/source/layout/SegmentArrayProcessor2.cpp
deleted file mode 100644 (file)
index e97e8b0..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2015 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor2.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc2.h"
-#include "SegmentArrayProcessor2.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SegmentArrayProcessor2)
-
-SegmentArrayProcessor2::SegmentArrayProcessor2()
-{
-}
-
-SegmentArrayProcessor2::SegmentArrayProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success)
-  : NonContextualGlyphSubstitutionProcessor2(morphSubtableHeader, success)
-{
-  const LEReferenceTo<NonContextualGlyphSubstitutionHeader2> header(morphSubtableHeader, success);
-  segmentArrayLookupTable = LEReferenceTo<SegmentArrayLookupTable>(morphSubtableHeader,  success, &header->table); // don't parent to 'header' as it is on the stack
-}
-
-SegmentArrayProcessor2::~SegmentArrayProcessor2()
-{
-}
-
-void SegmentArrayProcessor2::process(LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    const LookupSegment *segments = segmentArrayLookupTable->segments;
-    le_int32 glyphCount = glyphStorage.getGlyphCount();
-    le_int32 glyph;
-
-    if (LE_FAILURE(success)) return;
-
-    for (glyph = 0; glyph < glyphCount; glyph += 1) {
-        LEGlyphID thisGlyph = glyphStorage[glyph];
-        const LookupSegment *lookupSegment = segmentArrayLookupTable->lookupSegment(segmentArrayLookupTable, segments, thisGlyph, success);
-
-        if (lookupSegment != NULL)  {
-            TTGlyphID firstGlyph = SWAPW(lookupSegment->firstGlyph);
-            le_int16  offset = SWAPW(lookupSegment->value);
-
-            if (offset != 0) {
-              TTGlyphID  *glyphArray = (TTGlyphID *) ((char *) subtableHeader.getAliasRAW() + offset);
-                TTGlyphID   newGlyph   = SWAPW(glyphArray[LE_GET_GLYPH(thisGlyph) - firstGlyph]);
-                
-                glyphStorage[glyph] = LE_SET_GLYPH(thisGlyph, newGlyph);
-            } 
-        }
-    }
-}
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/SegmentArrayProcessor2.h b/icu4c/source/layout/SegmentArrayProcessor2.h
deleted file mode 100644 (file)
index c70afe1..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2014 - All Rights Reserved
- *
- */
-
-#ifndef __SEGMENTARRAYPROCESSOR_H
-#define __SEGMENTARRAYPROCESSOR_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor2.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc2.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class SegmentArrayProcessor2 : public NonContextualGlyphSubstitutionProcessor2
-{
-public:
-    virtual void process(LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    SegmentArrayProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success);
-
-    virtual ~SegmentArrayProcessor2();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    static UClassID getStaticClassID();
-
-private:
-    SegmentArrayProcessor2();
-
-protected:
-    LEReferenceTo<SegmentArrayLookupTable> segmentArrayLookupTable;
-
-};
-
-U_NAMESPACE_END
-#endif
-
diff --git a/icu4c/source/layout/SegmentSingleProcessor.cpp b/icu4c/source/layout/SegmentSingleProcessor.cpp
deleted file mode 100644 (file)
index ccc056b..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc.h"
-#include "SegmentSingleProcessor.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SegmentSingleProcessor)
-
-SegmentSingleProcessor::SegmentSingleProcessor()
-{
-}
-
-SegmentSingleProcessor::SegmentSingleProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success)
-  : NonContextualGlyphSubstitutionProcessor(morphSubtableHeader, success)
-{
-  LEReferenceTo<NonContextualGlyphSubstitutionHeader> header(morphSubtableHeader, success);
-  segmentSingleLookupTable = LEReferenceTo<SegmentSingleLookupTable>(morphSubtableHeader, success, (const SegmentSingleLookupTable*)&header->table);
-}
-
-SegmentSingleProcessor::~SegmentSingleProcessor()
-{
-}
-
-void SegmentSingleProcessor::process(LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    const LookupSegment *segments = segmentSingleLookupTable->segments;
-    le_int32 glyphCount = glyphStorage.getGlyphCount();
-    le_int32 glyph;
-
-    for (glyph = 0; glyph < glyphCount && LE_SUCCESS(success); glyph += 1) {
-        LEGlyphID thisGlyph = glyphStorage[glyph];
-        const LookupSegment *lookupSegment = segmentSingleLookupTable->lookupSegment(segmentSingleLookupTable, segments, thisGlyph, success);
-
-        if (lookupSegment != NULL && LE_SUCCESS(success)) {
-            TTGlyphID   newGlyph  = (TTGlyphID) LE_GET_GLYPH(thisGlyph) + SWAPW(lookupSegment->value);
-
-            glyphStorage[glyph] = LE_SET_GLYPH(thisGlyph, newGlyph);
-        }
-    }
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/SegmentSingleProcessor.h b/icu4c/source/layout/SegmentSingleProcessor.h
deleted file mode 100644 (file)
index eb02de0..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2014 - All Rights Reserved
- *
- */
-
-#ifndef __SEGMENTSINGLEPROCESSOR_H
-#define __SEGMENTSINGLEPROCESSOR_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class SegmentSingleProcessor : public NonContextualGlyphSubstitutionProcessor
-{
-public:
-    virtual void process(LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    SegmentSingleProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success);
-
-    virtual ~SegmentSingleProcessor();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    static UClassID getStaticClassID();
-
-private:
-    SegmentSingleProcessor();
-
-protected:
-    LEReferenceTo<SegmentSingleLookupTable> segmentSingleLookupTable;
-
-};
-
-U_NAMESPACE_END
-#endif
-
diff --git a/icu4c/source/layout/SegmentSingleProcessor2.cpp b/icu4c/source/layout/SegmentSingleProcessor2.cpp
deleted file mode 100644 (file)
index 8c78288..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2015 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor2.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc2.h"
-#include "SegmentSingleProcessor2.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SegmentSingleProcessor2)
-
-SegmentSingleProcessor2::SegmentSingleProcessor2()
-{
-}
-
-SegmentSingleProcessor2::SegmentSingleProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success)
-  : NonContextualGlyphSubstitutionProcessor2(morphSubtableHeader, success)
-{
-  const LEReferenceTo<NonContextualGlyphSubstitutionHeader2> header(morphSubtableHeader, success);
-
-  segmentSingleLookupTable = LEReferenceTo<SegmentSingleLookupTable>(morphSubtableHeader, success, &header->table);
-}
-
-SegmentSingleProcessor2::~SegmentSingleProcessor2()
-{
-}
-
-void SegmentSingleProcessor2::process(LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    const LookupSegment *segments = segmentSingleLookupTable->segments;
-    le_int32 glyphCount = glyphStorage.getGlyphCount();
-    le_int32 glyph;
-
-    if (LE_FAILURE(success)) return;
-
-    for (glyph = 0; glyph < glyphCount; glyph += 1) {
-        LEGlyphID thisGlyph = glyphStorage[glyph];
-        const LookupSegment *lookupSegment = segmentSingleLookupTable->lookupSegment(segmentSingleLookupTable, segments, thisGlyph, success);
-
-        if (lookupSegment != NULL && LE_SUCCESS(success)) {
-            TTGlyphID   newGlyph  = (TTGlyphID) LE_GET_GLYPH(thisGlyph) + SWAPW(lookupSegment->value);
-
-            glyphStorage[glyph] = LE_SET_GLYPH(thisGlyph, newGlyph);
-        }
-    }
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/SegmentSingleProcessor2.h b/icu4c/source/layout/SegmentSingleProcessor2.h
deleted file mode 100644 (file)
index b8152e1..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2014 - All Rights Reserved
- *
- */
-
-#ifndef __SEGMENTSINGLEPROCESSOR_H
-#define __SEGMENTSINGLEPROCESSOR_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor2.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc2.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class SegmentSingleProcessor2 : public NonContextualGlyphSubstitutionProcessor2
-{
-public:
-    virtual void process(LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    SegmentSingleProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success);
-
-    virtual ~SegmentSingleProcessor2();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    static UClassID getStaticClassID();
-
-private:
-    SegmentSingleProcessor2();
-
-protected:
-    LEReferenceTo<SegmentSingleLookupTable> segmentSingleLookupTable;
-
-};
-
-U_NAMESPACE_END
-#endif
-
diff --git a/icu4c/source/layout/ShapingTypeData.cpp b/icu4c/source/layout/ShapingTypeData.cpp
deleted file mode 100644 (file)
index 5ac2509..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013. All Rights Reserved.
- *
- * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS
- * YOU REALLY KNOW WHAT YOU'RE DOING.
- *
- * Generated on: 05/29/2008 03:39:26 PM HST
- */
-
-#include "LETypes.h"
-#include "ArabicShaping.h"
-
-U_NAMESPACE_BEGIN
-
-const le_uint8 ArabicShaping::shapingTypeTable[] = {
-    0x00, 0x02, 0x00, 0xD7, 0x00, 0xAD, 0x00, 0xAD, 0x00, 0x05, 0x03, 0x00, 0x03, 0x6F, 0x00, 0x05, 
-    0x04, 0x83, 0x04, 0x89, 0x00, 0x05, 0x05, 0x91, 0x05, 0xBD, 0x00, 0x05, 0x05, 0xBF, 0x05, 0xBF, 
-    0x00, 0x05, 0x05, 0xC1, 0x05, 0xC2, 0x00, 0x05, 0x05, 0xC4, 0x05, 0xC5, 0x00, 0x05, 0x05, 0xC7, 
-    0x05, 0xC7, 0x00, 0x05, 0x06, 0x10, 0x06, 0x1A, 0x00, 0x05, 0x06, 0x22, 0x06, 0x25, 0x00, 0x04, 
-    0x06, 0x26, 0x06, 0x26, 0x00, 0x02, 0x06, 0x27, 0x06, 0x27, 0x00, 0x04, 0x06, 0x28, 0x06, 0x28, 
-    0x00, 0x02, 0x06, 0x29, 0x06, 0x29, 0x00, 0x04, 0x06, 0x2A, 0x06, 0x2E, 0x00, 0x02, 0x06, 0x2F, 
-    0x06, 0x32, 0x00, 0x04, 0x06, 0x33, 0x06, 0x3F, 0x00, 0x02, 0x06, 0x40, 0x06, 0x40, 0x00, 0x01, 
-    0x06, 0x41, 0x06, 0x47, 0x00, 0x02, 0x06, 0x48, 0x06, 0x48, 0x00, 0x04, 0x06, 0x49, 0x06, 0x4A, 
-    0x00, 0x02, 0x06, 0x4B, 0x06, 0x5E, 0x00, 0x05, 0x06, 0x6E, 0x06, 0x6F, 0x00, 0x02, 0x06, 0x70, 
-    0x06, 0x70, 0x00, 0x05, 0x06, 0x71, 0x06, 0x73, 0x00, 0x04, 0x06, 0x75, 0x06, 0x77, 0x00, 0x04, 
-    0x06, 0x78, 0x06, 0x87, 0x00, 0x02, 0x06, 0x88, 0x06, 0x99, 0x00, 0x04, 0x06, 0x9A, 0x06, 0xBF, 
-    0x00, 0x02, 0x06, 0xC0, 0x06, 0xC0, 0x00, 0x04, 0x06, 0xC1, 0x06, 0xC2, 0x00, 0x02, 0x06, 0xC3, 
-    0x06, 0xCB, 0x00, 0x04, 0x06, 0xCC, 0x06, 0xCC, 0x00, 0x02, 0x06, 0xCD, 0x06, 0xCD, 0x00, 0x04, 
-    0x06, 0xCE, 0x06, 0xCE, 0x00, 0x02, 0x06, 0xCF, 0x06, 0xCF, 0x00, 0x04, 0x06, 0xD0, 0x06, 0xD1, 
-    0x00, 0x02, 0x06, 0xD2, 0x06, 0xD3, 0x00, 0x04, 0x06, 0xD5, 0x06, 0xD5, 0x00, 0x04, 0x06, 0xD6, 
-    0x06, 0xDC, 0x00, 0x05, 0x06, 0xDE, 0x06, 0xE4, 0x00, 0x05, 0x06, 0xE7, 0x06, 0xE8, 0x00, 0x05, 
-    0x06, 0xEA, 0x06, 0xED, 0x00, 0x05, 0x06, 0xEE, 0x06, 0xEF, 0x00, 0x04, 0x06, 0xFA, 0x06, 0xFC, 
-    0x00, 0x02, 0x06, 0xFF, 0x06, 0xFF, 0x00, 0x02, 0x07, 0x0F, 0x07, 0x0F, 0x00, 0x05, 0x07, 0x10, 
-    0x07, 0x10, 0x00, 0x04, 0x07, 0x11, 0x07, 0x11, 0x00, 0x05, 0x07, 0x12, 0x07, 0x14, 0x00, 0x02, 
-    0x07, 0x15, 0x07, 0x19, 0x00, 0x04, 0x07, 0x1A, 0x07, 0x1D, 0x00, 0x02, 0x07, 0x1E, 0x07, 0x1E, 
-    0x00, 0x04, 0x07, 0x1F, 0x07, 0x27, 0x00, 0x02, 0x07, 0x28, 0x07, 0x28, 0x00, 0x04, 0x07, 0x29, 
-    0x07, 0x29, 0x00, 0x02, 0x07, 0x2A, 0x07, 0x2A, 0x00, 0x04, 0x07, 0x2B, 0x07, 0x2B, 0x00, 0x02, 
-    0x07, 0x2C, 0x07, 0x2C, 0x00, 0x04, 0x07, 0x2D, 0x07, 0x2E, 0x00, 0x02, 0x07, 0x2F, 0x07, 0x2F, 
-    0x00, 0x04, 0x07, 0x30, 0x07, 0x4A, 0x00, 0x05, 0x07, 0x4D, 0x07, 0x4D, 0x00, 0x04, 0x07, 0x4E, 
-    0x07, 0x58, 0x00, 0x02, 0x07, 0x59, 0x07, 0x5B, 0x00, 0x04, 0x07, 0x5C, 0x07, 0x6A, 0x00, 0x02, 
-    0x07, 0x6B, 0x07, 0x6C, 0x00, 0x04, 0x07, 0x6D, 0x07, 0x70, 0x00, 0x02, 0x07, 0x71, 0x07, 0x71, 
-    0x00, 0x04, 0x07, 0x72, 0x07, 0x72, 0x00, 0x02, 0x07, 0x73, 0x07, 0x74, 0x00, 0x04, 0x07, 0x75, 
-    0x07, 0x77, 0x00, 0x02, 0x07, 0x78, 0x07, 0x79, 0x00, 0x04, 0x07, 0x7A, 0x07, 0x7F, 0x00, 0x02, 
-    0x07, 0xA6, 0x07, 0xB0, 0x00, 0x05, 0x07, 0xCA, 0x07, 0xEA, 0x00, 0x02, 0x07, 0xEB, 0x07, 0xF3, 
-    0x00, 0x05, 0x07, 0xFA, 0x07, 0xFA, 0x00, 0x01, 0x09, 0x01, 0x09, 0x02, 0x00, 0x05, 0x09, 0x3C, 
-    0x09, 0x3C, 0x00, 0x05, 0x09, 0x41, 0x09, 0x48, 0x00, 0x05, 0x09, 0x4D, 0x09, 0x4D, 0x00, 0x05, 
-    0x09, 0x51, 0x09, 0x54, 0x00, 0x05, 0x09, 0x62, 0x09, 0x63, 0x00, 0x05, 0x09, 0x81, 0x09, 0x81, 
-    0x00, 0x05, 0x09, 0xBC, 0x09, 0xBC, 0x00, 0x05, 0x09, 0xC1, 0x09, 0xC4, 0x00, 0x05, 0x09, 0xCD, 
-    0x09, 0xCD, 0x00, 0x05, 0x09, 0xE2, 0x09, 0xE3, 0x00, 0x05, 0x0A, 0x01, 0x0A, 0x02, 0x00, 0x05, 
-    0x0A, 0x3C, 0x0A, 0x3C, 0x00, 0x05, 0x0A, 0x41, 0x0A, 0x42, 0x00, 0x05, 0x0A, 0x47, 0x0A, 0x48, 
-    0x00, 0x05, 0x0A, 0x4B, 0x0A, 0x4D, 0x00, 0x05, 0x0A, 0x51, 0x0A, 0x51, 0x00, 0x05, 0x0A, 0x70, 
-    0x0A, 0x71, 0x00, 0x05, 0x0A, 0x75, 0x0A, 0x75, 0x00, 0x05, 0x0A, 0x81, 0x0A, 0x82, 0x00, 0x05, 
-    0x0A, 0xBC, 0x0A, 0xBC, 0x00, 0x05, 0x0A, 0xC1, 0x0A, 0xC5, 0x00, 0x05, 0x0A, 0xC7, 0x0A, 0xC8, 
-    0x00, 0x05, 0x0A, 0xCD, 0x0A, 0xCD, 0x00, 0x05, 0x0A, 0xE2, 0x0A, 0xE3, 0x00, 0x05, 0x0B, 0x01, 
-    0x0B, 0x01, 0x00, 0x05, 0x0B, 0x3C, 0x0B, 0x3C, 0x00, 0x05, 0x0B, 0x3F, 0x0B, 0x3F, 0x00, 0x05, 
-    0x0B, 0x41, 0x0B, 0x44, 0x00, 0x05, 0x0B, 0x4D, 0x0B, 0x4D, 0x00, 0x05, 0x0B, 0x56, 0x0B, 0x56, 
-    0x00, 0x05, 0x0B, 0x62, 0x0B, 0x63, 0x00, 0x05, 0x0B, 0x82, 0x0B, 0x82, 0x00, 0x05, 0x0B, 0xC0, 
-    0x0B, 0xC0, 0x00, 0x05, 0x0B, 0xCD, 0x0B, 0xCD, 0x00, 0x05, 0x0C, 0x3E, 0x0C, 0x40, 0x00, 0x05, 
-    0x0C, 0x46, 0x0C, 0x48, 0x00, 0x05, 0x0C, 0x4A, 0x0C, 0x4D, 0x00, 0x05, 0x0C, 0x55, 0x0C, 0x56, 
-    0x00, 0x05, 0x0C, 0x62, 0x0C, 0x63, 0x00, 0x05, 0x0C, 0xBC, 0x0C, 0xBC, 0x00, 0x05, 0x0C, 0xBF, 
-    0x0C, 0xBF, 0x00, 0x05, 0x0C, 0xC6, 0x0C, 0xC6, 0x00, 0x05, 0x0C, 0xCC, 0x0C, 0xCD, 0x00, 0x05, 
-    0x0C, 0xE2, 0x0C, 0xE3, 0x00, 0x05, 0x0D, 0x41, 0x0D, 0x44, 0x00, 0x05, 0x0D, 0x4D, 0x0D, 0x4D, 
-    0x00, 0x05, 0x0D, 0x62, 0x0D, 0x63, 0x00, 0x05, 0x0D, 0xCA, 0x0D, 0xCA, 0x00, 0x05, 0x0D, 0xD2, 
-    0x0D, 0xD4, 0x00, 0x05, 0x0D, 0xD6, 0x0D, 0xD6, 0x00, 0x05, 0x0E, 0x31, 0x0E, 0x31, 0x00, 0x05, 
-    0x0E, 0x34, 0x0E, 0x3A, 0x00, 0x05, 0x0E, 0x47, 0x0E, 0x4E, 0x00, 0x05, 0x0E, 0xB1, 0x0E, 0xB1, 
-    0x00, 0x05, 0x0E, 0xB4, 0x0E, 0xB9, 0x00, 0x05, 0x0E, 0xBB, 0x0E, 0xBC, 0x00, 0x05, 0x0E, 0xC8, 
-    0x0E, 0xCD, 0x00, 0x05, 0x0F, 0x18, 0x0F, 0x19, 0x00, 0x05, 0x0F, 0x35, 0x0F, 0x35, 0x00, 0x05, 
-    0x0F, 0x37, 0x0F, 0x37, 0x00, 0x05, 0x0F, 0x39, 0x0F, 0x39, 0x00, 0x05, 0x0F, 0x71, 0x0F, 0x7E, 
-    0x00, 0x05, 0x0F, 0x80, 0x0F, 0x84, 0x00, 0x05, 0x0F, 0x86, 0x0F, 0x87, 0x00, 0x05, 0x0F, 0x90, 
-    0x0F, 0x97, 0x00, 0x05, 0x0F, 0x99, 0x0F, 0xBC, 0x00, 0x05, 0x0F, 0xC6, 0x0F, 0xC6, 0x00, 0x05, 
-    0x10, 0x2D, 0x10, 0x30, 0x00, 0x05, 0x10, 0x32, 0x10, 0x37, 0x00, 0x05, 0x10, 0x39, 0x10, 0x3A, 
-    0x00, 0x05, 0x10, 0x3D, 0x10, 0x3E, 0x00, 0x05, 0x10, 0x58, 0x10, 0x59, 0x00, 0x05, 0x10, 0x5E, 
-    0x10, 0x60, 0x00, 0x05, 0x10, 0x71, 0x10, 0x74, 0x00, 0x05, 0x10, 0x82, 0x10, 0x82, 0x00, 0x05, 
-    0x10, 0x85, 0x10, 0x86, 0x00, 0x05, 0x10, 0x8D, 0x10, 0x8D, 0x00, 0x05, 0x13, 0x5F, 0x13, 0x5F, 
-    0x00, 0x05, 0x17, 0x12, 0x17, 0x14, 0x00, 0x05, 0x17, 0x32, 0x17, 0x34, 0x00, 0x05, 0x17, 0x52, 
-    0x17, 0x53, 0x00, 0x05, 0x17, 0x72, 0x17, 0x73, 0x00, 0x05, 0x17, 0xB4, 0x17, 0xB5, 0x00, 0x05, 
-    0x17, 0xB7, 0x17, 0xBD, 0x00, 0x05, 0x17, 0xC6, 0x17, 0xC6, 0x00, 0x05, 0x17, 0xC9, 0x17, 0xD3, 
-    0x00, 0x05, 0x17, 0xDD, 0x17, 0xDD, 0x00, 0x05, 0x18, 0x0B, 0x18, 0x0D, 0x00, 0x05, 0x18, 0xA9, 
-    0x18, 0xA9, 0x00, 0x05, 0x19, 0x20, 0x19, 0x22, 0x00, 0x05, 0x19, 0x27, 0x19, 0x28, 0x00, 0x05, 
-    0x19, 0x32, 0x19, 0x32, 0x00, 0x05, 0x19, 0x39, 0x19, 0x3B, 0x00, 0x05, 0x1A, 0x17, 0x1A, 0x18, 
-    0x00, 0x05, 0x1B, 0x00, 0x1B, 0x03, 0x00, 0x05, 0x1B, 0x34, 0x1B, 0x34, 0x00, 0x05, 0x1B, 0x36, 
-    0x1B, 0x3A, 0x00, 0x05, 0x1B, 0x3C, 0x1B, 0x3C, 0x00, 0x05, 0x1B, 0x42, 0x1B, 0x42, 0x00, 0x05, 
-    0x1B, 0x6B, 0x1B, 0x73, 0x00, 0x05, 0x1B, 0x80, 0x1B, 0x81, 0x00, 0x05, 0x1B, 0xA2, 0x1B, 0xA5, 
-    0x00, 0x05, 0x1B, 0xA8, 0x1B, 0xA9, 0x00, 0x05, 0x1C, 0x2C, 0x1C, 0x33, 0x00, 0x05, 0x1C, 0x36, 
-    0x1C, 0x37, 0x00, 0x05, 0x1D, 0xC0, 0x1D, 0xE6, 0x00, 0x05, 0x1D, 0xFE, 0x1D, 0xFF, 0x00, 0x05, 
-    0x20, 0x0B, 0x20, 0x0B, 0x00, 0x05, 0x20, 0x0D, 0x20, 0x0D, 0x00, 0x01, 0x20, 0x0E, 0x20, 0x0F, 
-    0x00, 0x05, 0x20, 0x2A, 0x20, 0x2E, 0x00, 0x05, 0x20, 0x60, 0x20, 0x64, 0x00, 0x05, 0x20, 0x6A, 
-    0x20, 0x6F, 0x00, 0x05, 0x20, 0xD0, 0x20, 0xF0, 0x00, 0x05, 0x2D, 0xE0, 0x2D, 0xFF, 0x00, 0x05, 
-    0x30, 0x2A, 0x30, 0x2F, 0x00, 0x05, 0x30, 0x99, 0x30, 0x9A, 0x00, 0x05, 0xA6, 0x6F, 0xA6, 0x72, 
-    0x00, 0x05, 0xA6, 0x7C, 0xA6, 0x7D, 0x00, 0x05, 0xA8, 0x02, 0xA8, 0x02, 0x00, 0x05, 0xA8, 0x06, 
-    0xA8, 0x06, 0x00, 0x05, 0xA8, 0x0B, 0xA8, 0x0B, 0x00, 0x05, 0xA8, 0x25, 0xA8, 0x26, 0x00, 0x05, 
-    0xA8, 0xC4, 0xA8, 0xC4, 0x00, 0x05, 0xA9, 0x26, 0xA9, 0x2D, 0x00, 0x05, 0xA9, 0x47, 0xA9, 0x51, 
-    0x00, 0x05, 0xAA, 0x29, 0xAA, 0x2E, 0x00, 0x05, 0xAA, 0x31, 0xAA, 0x32, 0x00, 0x05, 0xAA, 0x35, 
-    0xAA, 0x36, 0x00, 0x05, 0xAA, 0x43, 0xAA, 0x43, 0x00, 0x05, 0xAA, 0x4C, 0xAA, 0x4C, 0x00, 0x05, 
-    0xFB, 0x1E, 0xFB, 0x1E, 0x00, 0x05, 0xFE, 0x00, 0xFE, 0x0F, 0x00, 0x05, 0xFE, 0x20, 0xFE, 0x26, 
-    0x00, 0x05, 0xFE, 0xFF, 0xFE, 0xFF, 0x00, 0x05, 0xFF, 0xF9, 0xFF, 0xFB, 0x00, 0x05
-};
-
-const size_t ArabicShaping::shapingTypeTableLen = sizeof(shapingTypeTable)/sizeof(shapingTypeTable[0]);
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/SimpleArrayProcessor.cpp b/icu4c/source/layout/SimpleArrayProcessor.cpp
deleted file mode 100644 (file)
index 788c4d6..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc.h"
-#include "SimpleArrayProcessor.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SimpleArrayProcessor)
-
-SimpleArrayProcessor::SimpleArrayProcessor()
-{
-}
-
-SimpleArrayProcessor::SimpleArrayProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success)
-  : NonContextualGlyphSubstitutionProcessor(morphSubtableHeader, success)
-{
-  LEReferenceTo<NonContextualGlyphSubstitutionHeader> header(morphSubtableHeader, success);
-  simpleArrayLookupTable = LEReferenceTo<SimpleArrayLookupTable>(morphSubtableHeader, success, (const SimpleArrayLookupTable*)&header->table);
-}
-
-SimpleArrayProcessor::~SimpleArrayProcessor()
-{
-}
-
-void SimpleArrayProcessor::process(LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    le_int32 glyphCount = glyphStorage.getGlyphCount();
-    le_int32 glyph;
-    
-    LEReferenceToArrayOf<LookupValue> valueArray(simpleArrayLookupTable, success, (const LookupValue*)&simpleArrayLookupTable->valueArray, LE_UNBOUNDED_ARRAY);
-
-    for (glyph = 0; LE_SUCCESS(success) && (glyph < glyphCount); glyph += 1) {
-        LEGlyphID thisGlyph = glyphStorage[glyph];
-        if (LE_GET_GLYPH(thisGlyph) < 0xFFFF) {
-          TTGlyphID newGlyph = SWAPW(valueArray.getObject(LE_GET_GLYPH(thisGlyph),success));
-          glyphStorage[glyph] = LE_SET_GLYPH(thisGlyph, newGlyph);
-        }
-    }
-}
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/SimpleArrayProcessor.h b/icu4c/source/layout/SimpleArrayProcessor.h
deleted file mode 100644 (file)
index e94ba11..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2014 - All Rights Reserved
- *
- */
-
-#ifndef __SIMPLEARRAYPROCESSOR_H
-#define __SIMPLEARRAYPROCESSOR_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class SimpleArrayProcessor : public NonContextualGlyphSubstitutionProcessor
-{
-public:
-    virtual void process(LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    SimpleArrayProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success);
-
-    virtual ~SimpleArrayProcessor();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    static UClassID getStaticClassID();
-
-private:
-    SimpleArrayProcessor();
-
-protected:
-    LEReferenceTo<SimpleArrayLookupTable> simpleArrayLookupTable;
-
-};
-
-U_NAMESPACE_END
-#endif
-
diff --git a/icu4c/source/layout/SimpleArrayProcessor2.cpp b/icu4c/source/layout/SimpleArrayProcessor2.cpp
deleted file mode 100644 (file)
index 53fc07b..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2015 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor2.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc2.h"
-#include "SimpleArrayProcessor2.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SimpleArrayProcessor2)
-
-SimpleArrayProcessor2::SimpleArrayProcessor2()
-{
-}
-
-SimpleArrayProcessor2::SimpleArrayProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success)
-  : NonContextualGlyphSubstitutionProcessor2(morphSubtableHeader, success)
-{
-  const LEReferenceTo<NonContextualGlyphSubstitutionHeader2> header(morphSubtableHeader, success);
-
-  simpleArrayLookupTable = LEReferenceTo<SimpleArrayLookupTable>(morphSubtableHeader, success, &header->table);
-  valueArray = LEReferenceToArrayOf<LookupValue>(morphSubtableHeader, success, &simpleArrayLookupTable->valueArray[0], LE_UNBOUNDED_ARRAY);
-}
-
-SimpleArrayProcessor2::~SimpleArrayProcessor2()
-{
-}
-
-void SimpleArrayProcessor2::process(LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    le_int32 glyphCount = glyphStorage.getGlyphCount();
-    le_int32 glyph;
-
-    if (LE_FAILURE(success)) return;
-
-    for (glyph = 0; glyph < glyphCount; glyph += 1) {
-        LEGlyphID thisGlyph = glyphStorage[glyph];
-        if (LE_GET_GLYPH(thisGlyph) < 0xFFFF) {
-          TTGlyphID newGlyph = SWAPW(valueArray(LE_GET_GLYPH(thisGlyph),success));
-
-            glyphStorage[glyph] = LE_SET_GLYPH(thisGlyph, newGlyph);
-        }
-    }
-}
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/SimpleArrayProcessor2.h b/icu4c/source/layout/SimpleArrayProcessor2.h
deleted file mode 100644 (file)
index 750954b..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2014 - All Rights Reserved
- *
- */
-
-#ifndef __SIMPLEARRAYPROCESSOR2_H
-#define __SIMPLEARRAYPROCESSOR2_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor2.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc2.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class SimpleArrayProcessor2 : public NonContextualGlyphSubstitutionProcessor2
-{
-public:
-    virtual void process(LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    SimpleArrayProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success);
-
-    virtual ~SimpleArrayProcessor2();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    static UClassID getStaticClassID();
-
-private:
-    SimpleArrayProcessor2();
-
-protected:
-    LEReferenceTo<SimpleArrayLookupTable> simpleArrayLookupTable;
-    LEReferenceToArrayOf<LookupValue> valueArray;
-
-};
-
-U_NAMESPACE_END
-#endif
-
diff --git a/icu4c/source/layout/SinglePositioningSubtables.cpp b/icu4c/source/layout/SinglePositioningSubtables.cpp
deleted file mode 100644 (file)
index ce7277b..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "GlyphPositioningTables.h"
-#include "SinglePositioningSubtables.h"
-#include "ValueRecords.h"
-#include "GlyphIterator.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-le_uint32 SinglePositioningSubtable::process(const LEReferenceTo<SinglePositioningSubtable> &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const
-{
-    switch(SWAPW(subtableFormat))
-    {
-    case 0:
-        return 0;
-
-    case 1:
-    {
-      const LEReferenceTo<SinglePositioningFormat1Subtable> subtable(base, success, (const SinglePositioningFormat1Subtable *) this);
-
-      return subtable->process(subtable, glyphIterator, fontInstance, success);
-    }
-
-    case 2:
-    {
-      const LEReferenceTo<SinglePositioningFormat2Subtable> subtable(base, success, (const SinglePositioningFormat2Subtable *) this);
-
-      return subtable->process(subtable, glyphIterator, fontInstance, success);
-    }
-
-    default:
-        return 0;
-    }
-}
-
-le_uint32 SinglePositioningFormat1Subtable::process(const LEReferenceTo<SinglePositioningFormat1Subtable> &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const
-{
-    LEGlyphID glyph = glyphIterator->getCurrGlyphID();
-    le_int32 coverageIndex = getGlyphCoverage(base, glyph, success);
-
-    if (coverageIndex >= 0) {
-        valueRecord.adjustPosition(SWAPW(valueFormat), (const char *) this, *glyphIterator, fontInstance);
-
-        return 1;
-    }
-
-    return 0;
-}
-
-le_uint32 SinglePositioningFormat2Subtable::process(const LEReferenceTo<SinglePositioningFormat2Subtable> &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const
-{
-    LEGlyphID glyph = glyphIterator->getCurrGlyphID();
-    le_int16 coverageIndex = (le_int16) getGlyphCoverage(base, glyph, success);
-
-    if (coverageIndex >= 0) {
-        valueRecordArray[0].adjustPosition(coverageIndex, SWAPW(valueFormat), (const char *) this, *glyphIterator, fontInstance);
-
-        return 1;
-    }
-
-    return 0;
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/SinglePositioningSubtables.h b/icu4c/source/layout/SinglePositioningSubtables.h
deleted file mode 100644 (file)
index c866293..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __SINGLEPOSITIONINGSUBTABLES_H
-#define __SINGLEPOSITIONINGSUBTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "GlyphPositioningTables.h"
-#include "ValueRecords.h"
-#include "GlyphIterator.h"
-
-U_NAMESPACE_BEGIN
-
-struct SinglePositioningSubtable : GlyphPositioningSubtable
-{
-    le_uint32  process(const LEReferenceTo<SinglePositioningSubtable> &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const;
-};
-
-struct SinglePositioningFormat1Subtable : SinglePositioningSubtable
-{
-    ValueFormat valueFormat;
-    ValueRecord valueRecord;
-
-    le_uint32  process(const LEReferenceTo<SinglePositioningFormat1Subtable> &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const;
-};
-
-struct SinglePositioningFormat2Subtable : SinglePositioningSubtable
-{
-    ValueFormat valueFormat;
-    le_uint16   valueCount;
-    ValueRecord valueRecordArray[ANY_NUMBER];
-
-    le_uint32  process(const LEReferenceTo<SinglePositioningFormat2Subtable> &base, GlyphIterator *glyphIterator, const LEFontInstance *fontInstance, LEErrorCode &success) const;
-};
-LE_VAR_ARRAY(SinglePositioningFormat2Subtable, valueRecordArray)
-
-U_NAMESPACE_END
-#endif
-
-
diff --git a/icu4c/source/layout/SingleSubstitutionSubtables.cpp b/icu4c/source/layout/SingleSubstitutionSubtables.cpp
deleted file mode 100644 (file)
index d10ef97..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEGlyphFilter.h"
-#include "OpenTypeTables.h"
-#include "GlyphSubstitutionTables.h"
-#include "SingleSubstitutionSubtables.h"
-#include "GlyphIterator.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-le_uint32 SingleSubstitutionSubtable::process(const LEReferenceTo<SingleSubstitutionSubtable> &base, GlyphIterator *glyphIterator, LEErrorCode &success, const LEGlyphFilter *filter) const
-{
-    switch(SWAPW(subtableFormat))
-    {
-    case 0:
-        return 0;
-
-    case 1:
-    {
-      const LEReferenceTo<SingleSubstitutionFormat1Subtable> subtable(base, success, (const SingleSubstitutionFormat1Subtable *) this);
-
-      return subtable->process(subtable, glyphIterator, success, filter);
-    }
-
-    case 2:
-    {
-      const LEReferenceTo<SingleSubstitutionFormat2Subtable> subtable(base, success, (const SingleSubstitutionFormat2Subtable *) this);
-
-      return subtable->process(subtable, glyphIterator, success, filter);
-    }
-
-    default:
-        return 0;
-    }
-}
-
-le_uint32 SingleSubstitutionFormat1Subtable::process(const LEReferenceTo<SingleSubstitutionFormat1Subtable> &base, GlyphIterator *glyphIterator, LEErrorCode &success, const LEGlyphFilter *filter) const
-{
-    LEGlyphID glyph = glyphIterator->getCurrGlyphID();
-    le_int32 coverageIndex = getGlyphCoverage(base, glyph, success);
-
-    if (coverageIndex >= 0) {
-        TTGlyphID substitute = ((TTGlyphID) LE_GET_GLYPH(glyph)) + SWAPW(deltaGlyphID);
-
-        if (filter == NULL || filter->accept(LE_SET_GLYPH(glyph, substitute))) {
-            glyphIterator->setCurrGlyphID(substitute);
-        }
-
-        return 1;
-    }
-
-    return 0;
-}
-
-le_uint32 SingleSubstitutionFormat2Subtable::process(const LEReferenceTo<SingleSubstitutionFormat2Subtable> &base, GlyphIterator *glyphIterator, LEErrorCode &success, const LEGlyphFilter *filter) const
-{
-    LEGlyphID glyph = glyphIterator->getCurrGlyphID();
-    le_int32 coverageIndex = getGlyphCoverage(base, glyph, success);
-
-    if (coverageIndex >= 0) {
-        TTGlyphID substitute = SWAPW(substituteArray[coverageIndex]);
-
-        if (filter == NULL || filter->accept(LE_SET_GLYPH(glyph, substitute))) {
-            glyphIterator->setCurrGlyphID(substitute);
-        }
-
-        return 1;
-    }
-
-    return 0;
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/SingleSubstitutionSubtables.h b/icu4c/source/layout/SingleSubstitutionSubtables.h
deleted file mode 100644 (file)
index 64eeb25..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __SINGLESUBSTITUTIONSUBTABLES_H
-#define __SINGLESUBSTITUTIONSUBTABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEGlyphFilter.h"
-#include "OpenTypeTables.h"
-#include "GlyphSubstitutionTables.h"
-#include "GlyphIterator.h"
-
-U_NAMESPACE_BEGIN
-
-struct SingleSubstitutionSubtable : GlyphSubstitutionSubtable
-{
-    le_uint32  process(const LEReferenceTo<SingleSubstitutionSubtable> &base, GlyphIterator *glyphIterator, LEErrorCode &success, const LEGlyphFilter *filter = NULL) const;
-};
-
-struct SingleSubstitutionFormat1Subtable : SingleSubstitutionSubtable
-{
-    le_int16   deltaGlyphID;
-
-    le_uint32  process(const LEReferenceTo<SingleSubstitutionFormat1Subtable> &base, GlyphIterator *glyphIterator, LEErrorCode &success, const LEGlyphFilter *filter = NULL) const;
-};
-
-struct SingleSubstitutionFormat2Subtable : SingleSubstitutionSubtable
-{
-    le_uint16  glyphCount;
-    TTGlyphID  substituteArray[ANY_NUMBER];
-
-    le_uint32  process(const LEReferenceTo<SingleSubstitutionFormat2Subtable> &base, GlyphIterator *glyphIterator, LEErrorCode &success, const LEGlyphFilter *filter = NULL) const;
-};
-LE_VAR_ARRAY(SingleSubstitutionFormat2Subtable, substituteArray)
-
-U_NAMESPACE_END
-#endif
-
-
diff --git a/icu4c/source/layout/SingleTableProcessor.cpp b/icu4c/source/layout/SingleTableProcessor.cpp
deleted file mode 100644 (file)
index 523c7f6..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2015 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc.h"
-#include "SingleTableProcessor.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SingleTableProcessor)
-
-SingleTableProcessor::SingleTableProcessor()
-{
-}
-
-SingleTableProcessor::SingleTableProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success)
-  : NonContextualGlyphSubstitutionProcessor(morphSubtableHeader, success)
-{
-  LEReferenceTo<NonContextualGlyphSubstitutionHeader> header(morphSubtableHeader, success);
-  singleTableLookupTable = LEReferenceTo<SingleTableLookupTable>(morphSubtableHeader, success, (const SingleTableLookupTable*)&header->table);
-}
-
-SingleTableProcessor::~SingleTableProcessor()
-{
-}
-
-void SingleTableProcessor::process(LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    const LookupSingle *entries = singleTableLookupTable->entries;
-    le_int32 glyph;
-    le_int32 glyphCount = glyphStorage.getGlyphCount();
-
-    if (LE_FAILURE(success)) return;
-
-    for (glyph = 0; glyph < glyphCount; glyph += 1) {
-      const LookupSingle *lookupSingle = singleTableLookupTable->lookupSingle(singleTableLookupTable, entries, glyphStorage[glyph], success);
-
-        if (lookupSingle != NULL) {
-            glyphStorage[glyph] = SWAPW(lookupSingle->value);
-        }
-    }
-} 
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/SingleTableProcessor.h b/icu4c/source/layout/SingleTableProcessor.h
deleted file mode 100644 (file)
index bfd09f0..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2014 - All Rights Reserved
- *
- */
-
-#ifndef __SINGLETABLEPROCESSOR_H
-#define __SINGLETABLEPROCESSOR_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class SingleTableProcessor : public NonContextualGlyphSubstitutionProcessor
-{
-public:
-    virtual void process(LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    SingleTableProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success);
-
-    virtual ~SingleTableProcessor();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    static UClassID getStaticClassID();
-
-private:
-    SingleTableProcessor();
-
-protected:
-    LEReferenceTo<SingleTableLookupTable> singleTableLookupTable;
-
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/SingleTableProcessor2.cpp b/icu4c/source/layout/SingleTableProcessor2.cpp
deleted file mode 100644 (file)
index ba46811..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor2.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc2.h"
-#include "SingleTableProcessor2.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SingleTableProcessor2)
-
-SingleTableProcessor2::SingleTableProcessor2()
-{
-}
-
-SingleTableProcessor2::SingleTableProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success)
-  : NonContextualGlyphSubstitutionProcessor2(morphSubtableHeader, success)
-{
-  const LEReferenceTo<NonContextualGlyphSubstitutionHeader2> header(morphSubtableHeader, success);
-
-    singleTableLookupTable = LEReferenceTo<SingleTableLookupTable>(morphSubtableHeader, success, &header->table);
-}
-
-SingleTableProcessor2::~SingleTableProcessor2()
-{
-}
-
-void SingleTableProcessor2::process(LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-  if(LE_FAILURE(success)) return;
-    const LookupSingle *entries = singleTableLookupTable->entries;
-    le_int32 glyph;
-    le_int32 glyphCount = glyphStorage.getGlyphCount();
-
-    for (glyph = 0; glyph < glyphCount; glyph += 1) {
-      const LookupSingle *lookupSingle = singleTableLookupTable->lookupSingle(singleTableLookupTable, entries, glyphStorage[glyph], success);
-
-        if (lookupSingle != NULL) {
-            glyphStorage[glyph] = SWAPW(lookupSingle->value);
-        }
-    }
-} 
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/SingleTableProcessor2.h b/icu4c/source/layout/SingleTableProcessor2.h
deleted file mode 100644 (file)
index 743895e..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2014 - All Rights Reserved
- *
- */
-
-#ifndef __SINGLETABLEPROCESSOR2_H
-#define __SINGLETABLEPROCESSOR2_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor2.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc2.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class SingleTableProcessor2 : public NonContextualGlyphSubstitutionProcessor2
-{
-public:
-    virtual void process(LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    SingleTableProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success);
-
-    virtual ~SingleTableProcessor2();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    static UClassID getStaticClassID();
-
-private:
-    SingleTableProcessor2();
-
-protected:
-    LEReferenceTo<SingleTableLookupTable> singleTableLookupTable;
-
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/StateTableProcessor.cpp b/icu4c/source/layout/StateTableProcessor.cpp
deleted file mode 100644 (file)
index 00e5388..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "StateTables.h"
-#include "MorphStateTables.h"
-#include "SubtableProcessor.h"
-#include "StateTableProcessor.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-StateTableProcessor::StateTableProcessor()
-{
-}
-
-StateTableProcessor::StateTableProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success)
-  : SubtableProcessor(morphSubtableHeader, success), stateTableHeader(morphSubtableHeader, success),
-    stHeader(stateTableHeader, success, (const StateTableHeader*)&stateTableHeader->stHeader)
-{
-  if(LE_FAILURE(success)) return;
-    stateSize = SWAPW(stateTableHeader->stHeader.stateSize);
-    classTableOffset = SWAPW(stateTableHeader->stHeader.classTableOffset);
-    stateArrayOffset = SWAPW(stateTableHeader->stHeader.stateArrayOffset);
-    entryTableOffset = SWAPW(stateTableHeader->stHeader.entryTableOffset);
-
-    classTable = LEReferenceTo<ClassTable>(stateTableHeader, success, ((char *) &stateTableHeader->stHeader + classTableOffset));
-  if(LE_FAILURE(success)) return;
-    firstGlyph = SWAPW(classTable->firstGlyph);
-    lastGlyph  = firstGlyph + SWAPW(classTable->nGlyphs);
-}
-
-StateTableProcessor::~StateTableProcessor()
-{
-}
-
-void StateTableProcessor::process(LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) return;
-    LE_STATE_PATIENCE_INIT();
-
-    // Start at state 0
-    // XXX: How do we know when to start at state 1?
-    ByteOffset currentState = stateArrayOffset;
-
-    // XXX: reverse? 
-    le_int32 currGlyph = 0;
-    le_int32 glyphCount = glyphStorage.getGlyphCount();
-
-    beginStateTable();
-
-    while (currGlyph <= glyphCount) {
-        if(LE_STATE_PATIENCE_DECR()) break; // patience exceeded.
-        ClassCode classCode = classCodeOOB;
-        if (currGlyph == glyphCount) {
-            // XXX: How do we handle EOT vs. EOL?
-            classCode = classCodeEOT;
-        } else {
-            TTGlyphID glyphCode = (TTGlyphID) LE_GET_GLYPH(glyphStorage[currGlyph]);
-
-            if (glyphCode == 0xFFFF) {
-                classCode = classCodeDEL;
-            } else if ((glyphCode >= firstGlyph) && (glyphCode < lastGlyph)) {
-                classCode = classTable->classArray[glyphCode - firstGlyph];
-            }
-        }
-
-        LEReferenceToArrayOf<EntryTableIndex> stateArray(stHeader, success, currentState, LE_UNBOUNDED_ARRAY);
-        EntryTableIndex entryTableIndex = stateArray.getObject((le_uint8)classCode, success);
-        LE_STATE_PATIENCE_CURR(le_int32, currGlyph);
-        currentState = processStateEntry(glyphStorage, currGlyph, entryTableIndex);
-        LE_STATE_PATIENCE_INCR(currGlyph);
-    }
-
-    endStateTable();
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/StateTableProcessor.h b/icu4c/source/layout/StateTableProcessor.h
deleted file mode 100644 (file)
index 0384d25..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __STATETABLEPROCESSOR_H
-#define __STATETABLEPROCESSOR_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "MorphStateTables.h"
-#include "SubtableProcessor.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class StateTableProcessor : public SubtableProcessor
-{
-public:
-    void process(LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    virtual void beginStateTable() = 0;
-
-    virtual ByteOffset processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex index) = 0;
-
-    virtual void endStateTable() = 0;
-
-protected:
-    StateTableProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success);
-    virtual ~StateTableProcessor();
-
-    StateTableProcessor();
-
-    le_int16 stateSize;
-    ByteOffset classTableOffset;
-    ByteOffset stateArrayOffset;
-    ByteOffset entryTableOffset;
-
-    LEReferenceTo<ClassTable> classTable;
-    TTGlyphID firstGlyph;
-    TTGlyphID lastGlyph;
-
-    LEReferenceTo<MorphStateTableHeader> stateTableHeader;
-    LEReferenceTo<StateTableHeader> stHeader; // for convenience
-
-private:
-    StateTableProcessor(const StateTableProcessor &other); // forbid copying of this class
-    StateTableProcessor &operator=(const StateTableProcessor &other); // forbid copying of this class
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/StateTableProcessor2.cpp b/icu4c/source/layout/StateTableProcessor2.cpp
deleted file mode 100644 (file)
index 2b2ee60..0000000
+++ /dev/null
@@ -1,220 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2016 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "StateTables.h"
-#include "MorphStateTables.h"
-#include "SubtableProcessor2.h"
-#include "StateTableProcessor2.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-#include "LookupTables.h"
-
-U_NAMESPACE_BEGIN
-
-StateTableProcessor2::StateTableProcessor2()
-{
-}
-
-StateTableProcessor2::StateTableProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success)
-  : SubtableProcessor2(morphSubtableHeader, success), 
-    dir(1),
-    format(0),
-    nClasses(0), 
-    classTableOffset(0), 
-    stateArrayOffset(0), 
-    entryTableOffset(0), 
-    classTable(), 
-    stateArray(),
-    stateTableHeader(morphSubtableHeader, success),
-    stHeader(stateTableHeader, success, (const StateTableHeader2*)&stateTableHeader->stHeader)
-{
-  if (LE_FAILURE(success)) {
-    return;
-  }
-  nClasses = SWAPL(stHeader->nClasses);
-  classTableOffset = SWAPL(stHeader->classTableOffset);
-  stateArrayOffset = SWAPL(stHeader->stateArrayOffset);
-  entryTableOffset = SWAPL(stHeader->entryTableOffset);
-  
-  classTable = LEReferenceTo<LookupTableBase>(stHeader, success, classTableOffset);
-  format = SWAPW(classTable->format);
-  
-  stateArray = LEReferenceToArrayOf<EntryTableIndex2>(stHeader, success, stateArrayOffset, LE_UNBOUNDED_ARRAY);
-}
-
-StateTableProcessor2::~StateTableProcessor2()
-{
-}
-
-void StateTableProcessor2::process(LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) return;
-    // Start at state 0
-    // XXX: How do we know when to start at state 1?
-    le_uint16 currentState = 0;
-    le_int32 glyphCount = glyphStorage.getGlyphCount();
-    
-    LE_STATE_PATIENCE_INIT();
-
-    le_int32 currGlyph = 0;
-    if ((coverage & scfReverse2) != 0) {  // process glyphs in descending order
-        currGlyph = glyphCount - 1;
-        dir = -1;
-    } else {
-        dir = 1;
-    }
-    
-    beginStateTable();
-    switch (format) {
-        case ltfSimpleArray: {
-#ifdef TEST_FORMAT
-          LEReferenceTo<SimpleArrayLookupTable> lookupTable0(classTable, success);
-          if(LE_FAILURE(success)) break;
-            while ((dir == 1 && currGlyph <= glyphCount) || (dir == -1 && currGlyph >= -1)) {
-                if (LE_FAILURE(success)) break;
-                if (LE_STATE_PATIENCE_DECR()) {
-                  LE_DEBUG_BAD_FONT("patience exceeded - state table not moving")
-                  break; // patience exceeded.
-                }
-                LookupValue classCode = classCodeOOB;
-                if (currGlyph == glyphCount || currGlyph == -1) {
-                    // XXX: How do we handle EOT vs. EOL?
-                    classCode = classCodeEOT;
-                } else {
-                    LEGlyphID gid = glyphStorage[currGlyph];
-                    TTGlyphID glyphCode = (TTGlyphID) LE_GET_GLYPH(gid);
-                    
-                    if (glyphCode == 0xFFFF) {
-                        classCode = classCodeDEL;
-                    } else {
-                        classCode = SWAPW(lookupTable0->valueArray[gid]);
-                    }
-                }
-                EntryTableIndex2 entryTableIndex = SWAPW(stateArray(classCode + currentState * nClasses, success));
-                LE_STATE_PATIENCE_CURR(le_int32, currGlyph);
-                currentState = processStateEntry(glyphStorage, currGlyph, entryTableIndex); // return a zero-based index instead of a byte offset
-                LE_STATE_PATIENCE_INCR(currGlyph);
-            }
-#endif
-            break;
-        }
-        case ltfSegmentSingle: {
-          LEReferenceTo<SegmentSingleLookupTable> lookupTable2(classTable, success);
-          if(LE_FAILURE(success)) break;
-            while ((dir == 1 && currGlyph <= glyphCount) || (dir == -1 && currGlyph >= -1)) {
-                if (LE_FAILURE(success)) break;
-                if (LE_STATE_PATIENCE_DECR()) {
-                  LE_DEBUG_BAD_FONT("patience exceeded  - state table not moving")
-                  break; // patience exceeded.
-                }
-                LookupValue classCode = classCodeOOB;
-                if (currGlyph == glyphCount || currGlyph == -1) {
-                    // XXX: How do we handle EOT vs. EOL?
-                    classCode = classCodeEOT;
-                } else {
-                    LEGlyphID gid = glyphStorage[currGlyph];
-                    TTGlyphID glyphCode = (TTGlyphID) LE_GET_GLYPH(gid);
-                    
-                    if (glyphCode == 0xFFFF) {
-                        classCode = classCodeDEL;
-                    } else {
-                      const LookupSegment *segment = 
-                        lookupTable2->lookupSegment(lookupTable2, lookupTable2->segments, gid, success);
-                        if (segment != NULL && LE_SUCCESS(success)) {
-                            classCode = SWAPW(segment->value);
-                        }
-                    }
-                }                
-                EntryTableIndex2 entryTableIndex = SWAPW(stateArray(classCode + currentState * nClasses,success));
-                LE_STATE_PATIENCE_CURR(le_int32, currGlyph);
-                currentState = processStateEntry(glyphStorage, currGlyph, entryTableIndex, success);
-                LE_STATE_PATIENCE_INCR(currGlyph);
-            }
-            break;
-        }
-        case ltfSegmentArray: {
-          //printf("Lookup Table Format4: specific interpretation needed!\n");
-            break;
-        }
-        case ltfSingleTable: {
-            LEReferenceTo<SingleTableLookupTable> lookupTable6(classTable, success);
-            while ((dir == 1 && currGlyph <= glyphCount) || (dir == -1 && currGlyph >= -1)) {
-                if (LE_FAILURE(success)) break;
-                if (LE_STATE_PATIENCE_DECR()) {
-                  LE_DEBUG_BAD_FONT("patience exceeded - state table not moving")
-                  break; // patience exceeded.
-                }
-                LookupValue classCode = classCodeOOB;
-                if (currGlyph == glyphCount || currGlyph == -1) {
-                    // XXX: How do we handle EOT vs. EOL?
-                    classCode = classCodeEOT;
-                } else if(currGlyph > glyphCount) {
-                  // note if > glyphCount, we've run off the end (bad font)
-                  currGlyph = glyphCount;
-                  classCode = classCodeEOT;
-                } else {
-                    LEGlyphID gid = glyphStorage[currGlyph];
-                    TTGlyphID glyphCode = (TTGlyphID) LE_GET_GLYPH(gid);
-                    
-                    if (glyphCode == 0xFFFF) {
-                        classCode = classCodeDEL;
-                    } else {
-                      const LookupSingle *segment = lookupTable6->lookupSingle(lookupTable6, lookupTable6->entries, gid, success);
-                        if (segment != NULL) {
-                            classCode = SWAPW(segment->value);
-                        }
-                    }
-                }
-                EntryTableIndex2 entryTableIndex = SWAPW(stateArray(classCode + currentState * nClasses, success));
-                LE_STATE_PATIENCE_CURR(le_int32, currGlyph);
-                currentState = processStateEntry(glyphStorage, currGlyph, entryTableIndex, success);
-                LE_STATE_PATIENCE_INCR(currGlyph);
-            }
-            break;
-        }
-        case ltfTrimmedArray: {
-            LEReferenceTo<TrimmedArrayLookupTable> lookupTable8(classTable, success);
-            if (LE_FAILURE(success)) break;
-            TTGlyphID firstGlyph = SWAPW(lookupTable8->firstGlyph);    
-            TTGlyphID lastGlyph  = firstGlyph + SWAPW(lookupTable8->glyphCount);
-            
-            while ((dir == 1 && currGlyph <= glyphCount) || (dir == -1 && currGlyph >= -1)) {
-                if(LE_STATE_PATIENCE_DECR()) {
-                  LE_DEBUG_BAD_FONT("patience exceeded - state table not moving")
-                  break; // patience exceeded.
-                }
-                       
-                LookupValue classCode = classCodeOOB;
-                if (currGlyph == glyphCount || currGlyph == -1) {
-                    // XXX: How do we handle EOT vs. EOL?
-                    classCode = classCodeEOT;
-                } else {
-                    TTGlyphID glyphCode = (TTGlyphID) LE_GET_GLYPH(glyphStorage[currGlyph]);
-                    if (glyphCode == 0xFFFF) {
-                        classCode = classCodeDEL;
-                    } else if ((glyphCode >= firstGlyph) && (glyphCode < lastGlyph)) {
-                        classCode = SWAPW(lookupTable8->valueArray[glyphCode - firstGlyph]);
-                    }
-                }
-                EntryTableIndex2 entryTableIndex = SWAPW(stateArray(classCode + currentState * nClasses, success));
-                LE_STATE_PATIENCE_CURR(le_int32, currGlyph);
-                currentState = processStateEntry(glyphStorage, currGlyph, entryTableIndex, success);
-                LE_STATE_PATIENCE_INCR(currGlyph);
-            }
-            break;
-        }
-        default:
-            break;
-    }
-
-    endStateTable();
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/StateTableProcessor2.h b/icu4c/source/layout/StateTableProcessor2.h
deleted file mode 100644 (file)
index cafeb30..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2016 - All Rights Reserved
- *
- */
-
-#ifndef __STATETABLEPROCESSOR2_H
-#define __STATETABLEPROCESSOR2_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "MorphStateTables.h"
-#include "SubtableProcessor2.h"
-#include "LookupTables.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class StateTableProcessor2 : public SubtableProcessor2
-{
-public:
-    void process(LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    virtual void beginStateTable() = 0;
-
-    virtual le_uint16 processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex2 index, LEErrorCode &success) = 0;
-
-    virtual void endStateTable() = 0;
-
-protected:
-    StateTableProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success);
-    virtual ~StateTableProcessor2();
-
-    StateTableProcessor2();
-
-    le_int32  dir;
-    le_uint16 format;
-    le_uint32 nClasses;
-    le_uint32 classTableOffset;
-    le_uint32 stateArrayOffset;
-    le_uint32 entryTableOffset;
-
-    LEReferenceTo<LookupTableBase> classTable;
-    LEReferenceToArrayOf<EntryTableIndex2> stateArray;
-    LEReferenceTo<MorphStateTableHeader2> stateTableHeader;
-    LEReferenceTo<StateTableHeader2> stHeader; // for convenience
-
-private:
-    StateTableProcessor2(const StateTableProcessor2 &other); // forbid copying of this class
-    StateTableProcessor2 &operator=(const StateTableProcessor2 &other); // forbid copying of this class
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/StateTables.h b/icu4c/source/layout/StateTables.h
deleted file mode 100644 (file)
index f03e2d2..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. and others 1998-2016 - All Rights Reserved
- *
- */
-
-#ifndef __STATETABLES_H
-#define __STATETABLES_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LayoutTables.h"
-#include "LETableReference.h"
-
-U_NAMESPACE_BEGIN
-
-
-
-
-/* 
- * State table loop detection. 
- * Detects if too many ( LE_STATE_PATIENCE_COUNT ) state changes occur without moving the glyph index 'g'.
- * 
- * Usage (pseudocode):
- *
- * {
- *   LE_STATE_PATIENCE_INIT();
- *
- *   int g=0; // the glyph index - expect it to be moving
- * 
- *   for(;;) {
- *     if(LE_STATE_PATIENCE_DECR()) { // decrements the patience counter
- *        // ran out of patience, get out.
- *        break;
- *     }
- *     
- *     LE_STATE_PATIENCE_CURR(int, g); // store the 'current'
- *     state = newState(state,g);
- *     g+= <something, could be zero>;
- *     LE_STATE_PATIENCE_INCR(g);  // if g has moved, increment the patience counter. Otherwise leave it.
- *   }
- * 
- */
-
-#define LE_STATE_PATIENCE_COUNT 4096 /**< give up if a state table doesn't move the glyph after this many iterations */
-#define LE_STATE_PATIENCE_INIT()  le_uint32 le_patience_count = LE_STATE_PATIENCE_COUNT
-#define LE_STATE_PATIENCE_DECR()  --le_patience_count==0
-#define LE_STATE_PATIENCE_CURR(type,x)  type le_patience_curr=(x)
-#define LE_STATE_PATIENCE_INCR(x)    if((x)!=le_patience_curr) ++le_patience_count;
-
-
-struct StateTableHeader
-{
-    le_int16 stateSize;
-    ByteOffset classTableOffset;
-    ByteOffset stateArrayOffset;
-    ByteOffset entryTableOffset;
-};
-
-struct StateTableHeader2 
-{
-    le_uint32 nClasses;
-    le_uint32 classTableOffset;
-    le_uint32 stateArrayOffset;
-    le_uint32 entryTableOffset;
-};
-
-enum ClassCodes
-{
-    classCodeEOT = 0,
-    classCodeOOB = 1,
-    classCodeDEL = 2,
-    classCodeEOL = 3,
-    classCodeFirstFree = 4,
-    classCodeMAX = 0xFF
-};
-
-typedef le_uint8 ClassCode;
-
-struct ClassTable
-{
-    TTGlyphID firstGlyph;
-    le_uint16 nGlyphs;
-    ClassCode classArray[ANY_NUMBER];
-};
-LE_VAR_ARRAY(ClassTable, classArray)
-
-enum StateNumber
-{
-    stateSOT        = 0,
-    stateSOL        = 1,
-    stateFirstFree  = 2,
-    stateMAX        = 0xFF
-};
-
-typedef le_uint8 EntryTableIndex;
-
-struct StateEntry
-{
-    ByteOffset  newStateOffset;
-    le_int16    flags;
-};
-
-typedef le_uint16 EntryTableIndex2;
-
-struct StateEntry2 // same struct different interpretation
-{
-    le_uint16    newStateIndex;
-    le_uint16    flags;
-};
-
-U_NAMESPACE_END
-#endif
-
diff --git a/icu4c/source/layout/SubstitutionLookups.cpp b/icu4c/source/layout/SubstitutionLookups.cpp
deleted file mode 100644 (file)
index 4e9a605..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "GlyphSubstitutionTables.h"
-#include "GlyphIterator.h"
-#include "LookupProcessor.h"
-#include "SubstitutionLookups.h"
-#include "CoverageTables.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-/*
-    NOTE: This could be optimized somewhat by keeping track
-    of the previous sequenceIndex in the loop and doing next()
-    or prev() of the delta between that and the current
-    sequenceIndex instead of always resetting to the front.
-*/
-void SubstitutionLookup::applySubstitutionLookups(
-        LookupProcessor *lookupProcessor,
-        SubstitutionLookupRecord *substLookupRecordArray,
-        le_uint16 substCount,
-        GlyphIterator *glyphIterator,
-        const LEFontInstance *fontInstance,
-        le_int32 position,
-        LEErrorCode& success)
-{
-    if (LE_FAILURE(success)) { 
-        return;
-    }
-
-    GlyphIterator tempIterator(*glyphIterator);
-
-    for (le_uint16 subst = 0; subst < substCount && LE_SUCCESS(success); subst += 1) {
-        le_uint16 sequenceIndex = SWAPW(substLookupRecordArray[subst].sequenceIndex);
-        le_uint16 lookupListIndex = SWAPW(substLookupRecordArray[subst].lookupListIndex);
-
-        tempIterator.setCurrStreamPosition(position);
-        tempIterator.next(sequenceIndex);
-
-        lookupProcessor->applySingleLookup(lookupListIndex, &tempIterator, fontInstance, success);
-    }
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/SubstitutionLookups.h b/icu4c/source/layout/SubstitutionLookups.h
deleted file mode 100644 (file)
index 4e4ca67..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2008 - All Rights Reserved
- *
- */
-
-#ifndef __SUBSTITUTIONLOOKUPS_H
-#define __SUBSTITUTIONLOOKUPS_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "GlyphSubstitutionTables.h"
-#include "GlyphIterator.h"
-#include "LookupProcessor.h"
-
-U_NAMESPACE_BEGIN
-
-struct SubstitutionLookupRecord
-{
-    le_uint16  sequenceIndex;
-    le_uint16  lookupListIndex;
-};
-
-struct SubstitutionLookup
-{
-    static void applySubstitutionLookups(
-        LookupProcessor *lookupProcessor, 
-        SubstitutionLookupRecord *substLookupRecordArray,
-        le_uint16 substCount,
-        GlyphIterator *glyphIterator,
-        const LEFontInstance *fontInstance,
-        le_int32 position,
-               LEErrorCode& success);
-};
-
-U_NAMESPACE_END
-#endif
-
diff --git a/icu4c/source/layout/SubtableProcessor.cpp b/icu4c/source/layout/SubtableProcessor.cpp
deleted file mode 100644 (file)
index 35cb409..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-SubtableProcessor::SubtableProcessor()
-{
-}
-
-SubtableProcessor::SubtableProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success)
-  : length(0), coverage(0), subtableFeatures(0L), subtableHeader(morphSubtableHeader)
-{
-  if(LE_FAILURE(success)) return;
-    length = SWAPW(subtableHeader->length);
-    coverage = SWAPW(subtableHeader->coverage);
-    subtableFeatures = SWAPL(subtableHeader->subtableFeatures);
-}
-
-SubtableProcessor::~SubtableProcessor()
-{
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/SubtableProcessor.h b/icu4c/source/layout/SubtableProcessor.h
deleted file mode 100644 (file)
index d3e9671..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __SUBTABLEPROCESSOR_H
-#define __SUBTABLEPROCESSOR_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class SubtableProcessor : public UMemory {
-public:
-    virtual void process(LEGlyphStorage &glyphStorage, LEErrorCode &success) = 0;
-    virtual ~SubtableProcessor();
-
-protected:
-    SubtableProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success);
-
-    SubtableProcessor();
-
-    le_int16 length;
-    SubtableCoverage coverage;
-    FeatureFlags subtableFeatures;
-
-    const LEReferenceTo<MorphSubtableHeader> subtableHeader;
-
-private:
-
-    SubtableProcessor(const SubtableProcessor &other); // forbid copying of this class
-    SubtableProcessor &operator=(const SubtableProcessor &other); // forbid copying of this class
-};
-
-U_NAMESPACE_END
-#endif
-
diff --git a/icu4c/source/layout/SubtableProcessor2.cpp b/icu4c/source/layout/SubtableProcessor2.cpp
deleted file mode 100644 (file)
index 8af1a1b..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2014 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor2.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-SubtableProcessor2::SubtableProcessor2()
-{
-}
-
-SubtableProcessor2::SubtableProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success)
-  : length(0), coverage(0), subtableFeatures(0L), subtableHeader(morphSubtableHeader, success)
-{
-  if(LE_FAILURE(success)) return;
-
-  length = SWAPL(subtableHeader->length);
-  coverage = SWAPL(subtableHeader->coverage);
-  subtableFeatures = SWAPL(subtableHeader->subtableFeatures);
-}
-
-SubtableProcessor2::~SubtableProcessor2()
-{
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/SubtableProcessor2.h b/icu4c/source/layout/SubtableProcessor2.h
deleted file mode 100644 (file)
index 78196eb..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __SUBTABLEPROCESSOR2_H
-#define __SUBTABLEPROCESSOR2_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class SubtableProcessor2 : public UMemory {
-public:
-    virtual void process(LEGlyphStorage &glyphStorage, LEErrorCode &success) = 0;
-    virtual ~SubtableProcessor2();
-
-protected:
-    SubtableProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success);
-
-    SubtableProcessor2();
-
-    le_uint32 length;
-    SubtableCoverage2 coverage;
-    FeatureFlags subtableFeatures;
-
-    const LEReferenceTo<MorphSubtableHeader2> subtableHeader;
-
-private:
-
-    SubtableProcessor2(const SubtableProcessor2 &other); // forbid copying of this class
-    SubtableProcessor2 &operator=(const SubtableProcessor2 &other); // forbid copying of this class
-};
-
-U_NAMESPACE_END
-#endif
-
diff --git a/icu4c/source/layout/ThaiLayoutEngine.cpp b/icu4c/source/layout/ThaiLayoutEngine.cpp
deleted file mode 100644 (file)
index b1066d9..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LayoutEngine.h"
-#include "ThaiLayoutEngine.h"
-#include "ScriptAndLanguageTags.h"
-#include "LEGlyphStorage.h"
-
-#include "KernTable.h"
-
-#include "ThaiShaping.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ThaiLayoutEngine)
-
-ThaiLayoutEngine::ThaiLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags, LEErrorCode &success)
-    : LayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success)
-{
-    fErrorChar = 0x25CC;
-
-    // Figure out which presentation forms the font uses
-    if (! fontInstance->canDisplay(0x0E01)) {
-        // No Thai in font; don't use presentation forms.
-        fGlyphSet = 3;
-    } else if (fontInstance->canDisplay(0x0E64)) {
-        // WorldType uses reserved space in Thai block
-        fGlyphSet = 0;
-    } else if (fontInstance->canDisplay(0xF701)) {
-        // Microsoft corporate zone
-        fGlyphSet = 1;
-
-        if (!fontInstance->canDisplay(fErrorChar)) {
-            fErrorChar = 0xF71B;
-        }
-    } else if (fontInstance->canDisplay(0xF885)) {
-        // Apple corporate zone
-        fGlyphSet = 2;
-    } else {
-        // no presentation forms in the font
-        fGlyphSet = 3;
-    }
-}
-
-ThaiLayoutEngine::~ThaiLayoutEngine()
-{
-    // nothing to do
-}
-
-// Input: characters (0..max provided for context)
-// Output: glyphs, char indices
-// Returns: the glyph count
-// NOTE: this assumes that ThaiShaping::compose will allocate the outChars array...
-le_int32 ThaiLayoutEngine::computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool /*rightToLeft*/, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    LEUnicode *outChars;
-    le_int32 glyphCount;
-    
-    // This is enough room for the worst-case expansion
-    // (it says here...)
-    outChars = LE_NEW_ARRAY(LEUnicode, count * 2);
-
-    if (outChars == NULL) {
-        success = LE_MEMORY_ALLOCATION_ERROR;
-        return 0;
-    }
-
-    glyphStorage.allocateGlyphArray(count * 2, FALSE, success);
-
-    if (LE_FAILURE(success)) {
-        LE_DELETE_ARRAY(outChars);
-        success = LE_MEMORY_ALLOCATION_ERROR;
-        return 0;
-    }
-
-    glyphCount = ThaiShaping::compose(chars, offset, count, fGlyphSet, fErrorChar, outChars, glyphStorage);
-    mapCharsToGlyphs(outChars, 0, glyphCount, FALSE, FALSE, glyphStorage, success);
-
-    LE_DELETE_ARRAY(outChars);
-
-    glyphStorage.adoptGlyphCount(glyphCount);
-    return glyphCount;
-}
-
-// This is the same as LayoutEngline::adjustGlyphPositions() except that it doesn't call adjustMarkGlyphs
-void ThaiLayoutEngine::adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool  /*reverse*/,
-                                        LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return;
-    }
-
-    if (fTypoFlags & LE_Kerning_FEATURE_FLAG) { /* kerning enabled */
-      LETableReference kernTable(fFontInstance, LE_KERN_TABLE_TAG, success);
-      KernTable kt(kernTable, success);
-      kt.process(glyphStorage, success);
-    }
-
-    // default is no adjustments
-    return;
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/ThaiLayoutEngine.h b/icu4c/source/layout/ThaiLayoutEngine.h
deleted file mode 100644 (file)
index 83f405e..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-
-/*
- *
- * (C) Copyright IBM Corp. 1998-2014 - All Rights Reserved
- *
- */
-
-#ifndef __THAILAYOUTENGINE_H
-#define __THAILAYOUTENGINE_H
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "LayoutEngine.h"
-
-#include "ThaiShaping.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-/**
- * This class implements layout for the Thai script, using the ThaiShapingClass.
- * All existing Thai fonts use an encoding which assigns character codes to all
- * the variant forms needed to display accents and tone marks correctly in context.
- * This class can deal with fonts using the Microsoft, Macintosh, and WorldType encodings.
- *
- * @internal
- */
-class ThaiLayoutEngine : public LayoutEngine
-{
-public:
-    /**
-     * This constructs an instance of ThaiLayoutEngine for the given font, script and
-     * language. It examines the font, using LEFontInstance::canDisplay, to set fGlyphSet
-     * and fErrorChar. (see below)
-     *
-     * @param fontInstance - the font
-     * @param scriptCode - the script
-     * @param languageCode - the language
-     * @param success - set to an error code if the operation fails
-     *
-     * @see LEFontInstance
-     * @see ScriptAndLanguageTags.h for script and language codes
-     *
-     * @internal
-     */
-    ThaiLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode, le_int32 typoFlags, LEErrorCode &success);
-
-    /**
-     * The destructor, virtual for correct polymorphic invocation.
-     *
-     * @internal
-     */
-    virtual ~ThaiLayoutEngine();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    static UClassID getStaticClassID();
-
-protected:
-    /**
-     * A small integer indicating which Thai encoding
-     * the font uses.
-     *
-     * @see ThaiShaping
-     *
-     * @internal
-     */
-    le_uint8 fGlyphSet;
-
-    /**
-     * The character used as a base for vowels and
-     * tone marks that are out of sequence. Usually
-     * this will be Unicode 0x25CC, if the font can
-     * display it.
-     *
-     * @see ThaiShaping
-     *
-     * @internal
-     */
-    LEUnicode fErrorChar;
-
-    /**
-     * This method performs Thai layout. It calls ThaiShaping::compose to
-     * generate the correct contextual character codes, and then calls
-     * mapCharsToGlyphs to generate the glyph indices.
-     *
-     * Input parameters:
-     * @param chars - the input character context
-     * @param offset - the index of the first character to process
-     * @param count - the number of characters to process
-     * @param max - the number of characters in the input context
-     * @param rightToLeft - <code>TRUE</code> if the text is in a right to left directional run
-     * @param glyphStorage - the glyph storage object. The glyph and char index arrays will be set.
-     *
-     * Output parameters:
-     * @param success - set to an error code if the operation fails
-     *
-     * @return the number of glyphs in the glyph index array
-     *
-     * @see ThaiShaping
-     *
-     * @internal
-     */
-    virtual le_int32 computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-        LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    /**
-     * This method does positioning adjustments like accent positioning and
-     * kerning. The default implementation does nothing. Subclasses needing
-     * position adjustments must override this method.
-     *
-     * Note that this method has both characters and glyphs as input so that
-     * it can use the character codes to determine glyph types if that information
-     * isn't directly available. (e.g. Some Arabic OpenType fonts don't have a GDEF
-     * table)
-     *
-     * @param chars - the input character context
-     * @param offset - the offset of the first character to process
-     * @param count - the number of characters to process
-     * @param reverse - <code>TRUE</code> if the glyphs in the glyph array have been reordered
-     * @param glyphStorage - the object which holds the per-glyph storage. The glyph positions will be
-     *                       adjusted as needed.
-     * @param success - output parameter set to an error code if the operation fails
-     *
-     * @internal
-     */
-    virtual void adjustGlyphPositions(const LEUnicode chars[], le_int32 offset, le_int32 count, le_bool reverse, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-};
-
-U_NAMESPACE_END
-#endif
-
diff --git a/icu4c/source/layout/ThaiShaping.cpp b/icu4c/source/layout/ThaiShaping.cpp
deleted file mode 100644 (file)
index 4847bce..0000000
+++ /dev/null
@@ -1,309 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEGlyphFilter.h"
-#include "OpenTypeTables.h"
-#include "LEGlyphStorage.h"
-#include "ThaiShaping.h"
-
-U_NAMESPACE_BEGIN
-
-enum {
-    CH_SPACE        = 0x0020,
-    CH_YAMAKKAN     = 0x0E4E,
-    CH_MAI_HANAKAT  = 0x0E31,
-    CH_SARA_AA      = 0x0E32,
-    CH_SARA_AM      = 0x0E33,
-    CH_SARA_UEE     = 0x0E37,
-    CH_MAITAIKHU    = 0x0E47,
-    CH_NIKHAHIT     = 0x0E4D,
-    CH_SARA_U       = 0x0E38,
-    CH_PHINTHU      = 0x0E3A,
-    CH_YO_YING      = 0x0E0D,
-    CH_THO_THAN     = 0x0E10,
-    CH_DOTTED_CIRCLE = 0x25CC
-};
-
-    le_uint8 ThaiShaping::getCharClass(LEUnicode ch)
-{
-    le_uint8 charClass = NON;
-    
-    if (ch >= 0x0E00 && ch <= 0x0E5B) {
-        charClass = classTable[ch - 0x0E00];
-    }
-    
-    return charClass;
-}
-
-
-LEUnicode ThaiShaping::leftAboveVowel(LEUnicode vowel, le_uint8 glyphSet)
-{
-    static const LEUnicode leftAboveVowels[][7] = {
-        {0x0E61, 0x0E32, 0x0E33, 0x0E64, 0x0E65, 0x0E66, 0x0E67},
-        {0xF710, 0x0E32, 0x0E33, 0xF701, 0xF702, 0xF703, 0xF704},
-        {0xF884, 0x0E32, 0x0E33, 0xF885, 0xF886, 0xF887, 0xF788},
-        {0x0E31, 0x0E32, 0x0E33, 0x0E34, 0x0E35, 0x0E36, 0x0E37}
-    };
-   
-    if (vowel >= CH_MAI_HANAKAT && vowel <= CH_SARA_UEE) {
-        return leftAboveVowels[glyphSet][vowel - CH_MAI_HANAKAT];
-    }
-    
-    if (vowel == CH_YAMAKKAN && glyphSet == 0) {
-        return 0x0E7E;
-    }
-    
-    return vowel;
-}
-
-LEUnicode ThaiShaping::lowerRightTone(LEUnicode tone, le_uint8 glyphSet)
-{
-    static const LEUnicode lowerRightTones[][7] = {
-        {0x0E68, 0x0E69, 0x0E6A, 0x0E6B, 0x0E6C, 0x0E6D, 0x0E6E},
-        {0x0E47, 0xF70A, 0xF70B, 0xF70C, 0xF70D, 0xF70E, 0x0E4D},
-        {0x0E47, 0xF88B, 0xF88E, 0xF891, 0xF894, 0xF897, 0x0E4D},
-        {0x0E47, 0x0E48, 0x0E49, 0x0E4A, 0x0E4B, 0x0E4C, 0x0E4D}
-    };
-
-    if (tone >= CH_MAITAIKHU && tone <= CH_NIKHAHIT) {
-        return lowerRightTones[glyphSet][tone - CH_MAITAIKHU];
-    }
-    
-    return tone;
-}
-
-LEUnicode ThaiShaping::lowerLeftTone(LEUnicode tone, le_uint8 glyphSet)
-{
-    static const LEUnicode lowerLeftTones[][7] = {
-        {0x0E76, 0x0E77, 0x0E78, 0x0E79, 0x0E7A, 0x0E7B, 0x0E7C},
-        {0xF712, 0xF705, 0xF706, 0xF707, 0xF708, 0xF709, 0xF711},
-        {0xF889, 0xF88C, 0xF88F, 0xF892, 0xF895, 0xF898, 0xF899},
-        {0x0E47, 0x0E48, 0x0E49, 0x0E4A, 0x0E4B, 0x0E4C, 0x0E4D}
-    };
-
-    if (tone >= CH_MAITAIKHU && tone <= CH_NIKHAHIT) {
-        return lowerLeftTones[glyphSet][tone - CH_MAITAIKHU];
-    }
-    
-    return tone;
-}
-
-LEUnicode ThaiShaping::upperLeftTone(LEUnicode tone, le_uint8 glyphSet)
-{
-    static const LEUnicode upperLeftTones[][7] = {
-        {0x0E6F, 0x0E70, 0x0E71, 0x0E72, 0x0E73, 0x0E74, 0x0E75},
-        {0xF712, 0xF713, 0xF714, 0xF715, 0xF716, 0xF717, 0xF711},
-        {0xF889, 0xF88A, 0xF88D, 0xF890, 0xF893, 0xF896, 0xF899},
-        {0x0E47, 0x0E48, 0x0E49, 0x0E4A, 0x0E4B, 0x0E4C, 0x0E4D}
-    };
-
-    if (tone >= CH_MAITAIKHU && tone <= CH_NIKHAHIT) {
-        return upperLeftTones[glyphSet][tone - CH_MAITAIKHU];
-    }
-    
-    return tone;
-}
-
-LEUnicode ThaiShaping::lowerBelowVowel(LEUnicode vowel, le_uint8 glyphSet)
-{
-    static const LEUnicode lowerBelowVowels[][3] = {
-        {0x0E3C, 0x0E3D, 0x0E3E},
-        {0xF718, 0xF719, 0xF71A},
-        {0x0E38, 0x0E39, 0x0E3A},
-        {0x0E38, 0x0E39, 0x0E3A}
-
-    };
-
-    if (vowel >= CH_SARA_U && vowel <= CH_PHINTHU) {
-        return lowerBelowVowels[glyphSet][vowel - CH_SARA_U];
-    }
-    
-    return vowel;
-}
-
-LEUnicode ThaiShaping::noDescenderCOD(LEUnicode cod, le_uint8 glyphSet)
-{
-    static const LEUnicode noDescenderCODs[][4] = {
-        {0x0E60, 0x0E0E, 0x0E0F, 0x0E63},
-        {0xF70F, 0x0E0E, 0x0E0F, 0xF700},
-        {0x0E0D, 0x0E0E, 0x0E0F, 0x0E10},
-        {0x0E0D, 0x0E0E, 0x0E0F, 0x0E10}
-
-    };
-
-    if (cod >= CH_YO_YING && cod <= CH_THO_THAN) {
-        return noDescenderCODs[glyphSet][cod - CH_YO_YING];
-    }
-    
-    return cod;
-}
-
-le_uint8 ThaiShaping::doTransition (StateTransition transition, LEUnicode currChar, le_int32 inputIndex, le_uint8 glyphSet,
-        LEUnicode errorChar, LEUnicode *outputBuffer, LEGlyphStorage &glyphStorage, le_int32 &outputIndex)
-{
-    LEErrorCode success = LE_NO_ERROR;
-
-    switch (transition.action) {
-    case tA:
-        glyphStorage.setCharIndex(outputIndex, inputIndex, success);
-        outputBuffer[outputIndex++] = currChar;
-        break;
-        
-    case tC:
-        glyphStorage.setCharIndex(outputIndex, inputIndex, success);
-        outputBuffer[outputIndex++] = currChar;
-        break;
-        
-    case tD:
-        glyphStorage.setCharIndex(outputIndex, inputIndex, success);
-        outputBuffer[outputIndex++] = leftAboveVowel(currChar, glyphSet);
-        break;
-        
-    case tE:
-        glyphStorage.setCharIndex(outputIndex, inputIndex, success);
-        outputBuffer[outputIndex++] = lowerRightTone(currChar, glyphSet);
-        break;
-        
-    case tF:
-        glyphStorage.setCharIndex(outputIndex, inputIndex, success);
-        outputBuffer[outputIndex++] = lowerLeftTone(currChar, glyphSet);
-        break;
-    
-    case tG:
-        glyphStorage.setCharIndex(outputIndex, inputIndex, success);
-        outputBuffer[outputIndex++] = upperLeftTone(currChar, glyphSet);
-        break;
-        
-    case tH:
-    {
-        LEUnicode cod = outputBuffer[outputIndex - 1];
-        LEUnicode coa = noDescenderCOD(cod, glyphSet);
-
-        if (cod != coa) {
-            outputBuffer[outputIndex - 1] = coa;
-            
-            glyphStorage.setCharIndex(outputIndex, inputIndex, success);
-            outputBuffer[outputIndex++] = currChar;
-            break;
-        }
-
-        glyphStorage.setCharIndex(outputIndex, inputIndex, success);
-        outputBuffer[outputIndex++] = lowerBelowVowel(currChar, glyphSet);
-        break;
-    }
-        
-    case tR:
-        glyphStorage.setCharIndex(outputIndex, inputIndex, success);
-        outputBuffer[outputIndex++] = errorChar;
-
-        glyphStorage.setCharIndex(outputIndex, inputIndex, success);
-        outputBuffer[outputIndex++] = currChar;
-        break;
-        
-    case tS:
-        if (currChar == CH_SARA_AM) {
-            glyphStorage.setCharIndex(outputIndex, inputIndex, success);
-            outputBuffer[outputIndex++] = errorChar;
-        }
-
-        glyphStorage.setCharIndex(outputIndex, inputIndex, success);
-        outputBuffer[outputIndex++] = currChar;
-        break;
-        
-    default:
-        // FIXME: if we get here, there's an error
-        // in the state table!
-        glyphStorage.setCharIndex(outputIndex, inputIndex, success);
-        outputBuffer[outputIndex++] = currChar;
-        break;
-     }
-     
-     return transition.nextState;
-}
-
-le_uint8 ThaiShaping::getNextState(LEUnicode ch, le_uint8 prevState, le_int32 inputIndex, le_uint8 glyphSet, LEUnicode errorChar,
-                              le_uint8 &charClass, LEUnicode *output, LEGlyphStorage &glyphStorage, le_int32 &outputIndex)
-{
-    StateTransition transition;
-
-    charClass = getCharClass(ch);
-    transition = getTransition(prevState, charClass);
-    
-    return doTransition(transition, ch, inputIndex, glyphSet, errorChar, output, glyphStorage, outputIndex);
-}
-
-le_bool ThaiShaping::isLegalHere(LEUnicode ch, le_uint8 prevState)
-{
-    le_uint8 charClass = getCharClass(ch);
-    StateTransition transition = getTransition(prevState, charClass);
-
-    switch (transition.action) {
-    case tA:
-    case tC:
-    case tD:
-    case tE:
-    case tF:
-    case tG:
-    case tH:
-        return TRUE;
-            
-    case tR:
-    case tS:
-        return FALSE;
-            
-    default:
-        // FIXME: if we get here, there's an error
-        // in the state table!
-        return FALSE;
-    }
-}
-    
-le_int32 ThaiShaping::compose(const LEUnicode *input, le_int32 offset, le_int32 charCount, le_uint8 glyphSet,
-                          LEUnicode errorChar, LEUnicode *output, LEGlyphStorage &glyphStorage)
-{
-    le_uint8 state = 0;
-    le_int32 inputIndex;
-    le_int32 outputIndex = 0;
-    le_uint8 conState = 0xFF;
-    le_int32 conInput = -1;
-    le_int32 conOutput = -1;
-    
-    for (inputIndex = 0; inputIndex < charCount; inputIndex += 1) {
-        LEUnicode ch = input[inputIndex + offset];
-        le_uint8 charClass;
-        
-        // Decompose SARA AM into NIKHAHIT + SARA AA
-        if (ch == CH_SARA_AM && isLegalHere(ch, state)) {
-            outputIndex = conOutput;
-            state = getNextState(CH_NIKHAHIT, conState, inputIndex, glyphSet, errorChar, charClass,
-                output, glyphStorage, outputIndex);
-            
-            for (int j = conInput + 1; j < inputIndex; j += 1) {
-                ch = input[j + offset];
-                state = getNextState(ch, state, j, glyphSet, errorChar, charClass,
-                    output, glyphStorage, outputIndex);
-            }
-            
-            ch = CH_SARA_AA;
-        }
-        
-        state = getNextState(ch, state, inputIndex, glyphSet, errorChar, charClass,
-            output, glyphStorage, outputIndex);
-        
-        if (charClass >= CON && charClass <= COD) {
-            conState = state;
-            conInput = inputIndex;
-            conOutput = outputIndex;
-        }
-    }
-    
-    return outputIndex;
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/ThaiShaping.h b/icu4c/source/layout/ThaiShaping.h
deleted file mode 100644 (file)
index 617d92f..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-
-#ifndef __THAISHAPING_H
-#define __THAISHAPING_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEGlyphFilter.h"
-#include "OpenTypeTables.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class ThaiShaping /* not : public UObject because all methods are static */ {
-public:
-
-    enum {
-        // Character classes
-        NON =  0,
-        CON =  1,
-        COA =  2,
-        COD =  3,
-        LVO =  4,
-        FV1 =  5,
-        FV2 =  6,
-        FV3 =  7,
-        BV1 =  8,
-        BV2 =  9,
-        BDI = 10,
-        TON = 11,
-        AD1 = 12,
-        AD2 = 13,
-        AD3 = 14,
-        NIK = 15,
-        AV1 = 16,
-        AV2 = 17,
-        AV3 = 18,
-        classCount = 19,
-
-        // State Transition actions
-        tA  =  0,
-        tC  =  1,
-        tD  =  2,
-        tE  =  3,
-        tF  =  4,
-        tG  =  5,
-        tH  =  6,
-        tR  =  7,
-        tS  =  8
-    };
-
-    struct StateTransition
-    {
-        le_uint8 nextState;
-        le_uint8 action;
-
-        le_uint8 getNextState() { return nextState; };
-        le_uint8 getAction() { return action; };
-    };
-
-    static le_int32 compose(const LEUnicode *input, le_int32 offset, le_int32 charCount, le_uint8 glyphSet,
-        LEUnicode errorChar, LEUnicode *output, LEGlyphStorage &glyphStorage);
-
-private:
-    // forbid instantiation
-    ThaiShaping();
-
-    static const le_uint8 classTable[];
-    static const StateTransition thaiStateTable[][classCount];
-
-    inline static StateTransition getTransition(le_uint8 state, le_uint8 currClass);
-
-    static le_uint8 doTransition(StateTransition transition, LEUnicode currChar, le_int32 inputIndex, le_uint8 glyphSet,
-        LEUnicode errorChar, LEUnicode *outputBuffer, LEGlyphStorage &glyphStorage, le_int32 &outputIndex);
-
-    static le_uint8 getNextState(LEUnicode ch, le_uint8 state, le_int32 inputIndex, le_uint8 glyphSet, LEUnicode errorChar,
-        le_uint8 &charClass, LEUnicode *output, LEGlyphStorage &glyphStorage, le_int32 &outputIndex);
-
-    static le_bool isLegalHere(LEUnicode ch, le_uint8 prevState);
-    static le_uint8 getCharClass(LEUnicode ch);
-
-    static LEUnicode noDescenderCOD(LEUnicode cod, le_uint8 glyphSet);
-    static LEUnicode leftAboveVowel(LEUnicode vowel, le_uint8 glyphSet);
-    static LEUnicode lowerBelowVowel(LEUnicode vowel, le_uint8 glyphSet);
-    static LEUnicode lowerRightTone(LEUnicode tone, le_uint8 glyphSet);
-    static LEUnicode lowerLeftTone(LEUnicode tone, le_uint8 glyphSet);
-    static LEUnicode upperLeftTone(LEUnicode tone, le_uint8 glyphSet);
-
-};
-
-inline ThaiShaping::StateTransition ThaiShaping::getTransition(le_uint8 state, le_uint8 currClass)
-{
-    return thaiStateTable[state][currClass];
-}
-
-U_NAMESPACE_END
-#endif
-
-
diff --git a/icu4c/source/layout/ThaiStateTables.cpp b/icu4c/source/layout/ThaiStateTables.cpp
deleted file mode 100644 (file)
index 8ea2a42..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- * %W% %E%
- *
- * (C) Copyright IBM Corp. 1999-2003 - All Rights Reserved
- *
- * WARNING: THIS FILE IS MACHINE GENERATED. DO NOT HAND EDIT IT UNLESS
- * YOU REALLY KNOW WHAT YOU'RE DOING.
- *
- */
-
-#include "LETypes.h"
-#include "ThaiShaping.h"
-
-U_NAMESPACE_BEGIN
-
-const le_uint8 ThaiShaping::classTable[] = {
-    //       0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F
-    //       -------------------------------------------------------------------------------
-    /*0E00*/ NON, CON, CON, CON, CON, CON, CON, CON, CON, CON, CON, CON, CON, COD, COD, COD, 
-    /*0E10*/ COD, CON, CON, CON, CON, CON, CON, CON, CON, CON, CON, COA, CON, COA, CON, COA, 
-    /*0E20*/ CON, CON, CON, CON, FV3, CON, FV3, CON, CON, CON, CON, CON, CON, CON, CON, NON, 
-    /*0E30*/ FV1, AV2, FV1, FV1, AV1, AV3, AV2, AV3, BV1, BV2, BDI, NON, NON, NON, NON, NON, 
-    /*0E40*/ LVO, LVO, LVO, LVO, LVO, FV2, NON, AD2, TON, TON, TON, TON, AD1, NIK, AD3, NON, 
-    /*0E50*/ NON, NON, NON, NON, NON, NON, NON, NON, NON, NON, NON, NON
-};
-
-const ThaiShaping::StateTransition ThaiShaping::thaiStateTable[][ThaiShaping::classCount] = {
-    //+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-    //|         N         C         C         C         L         F         F         F         B         B         B         T         A         A         A         N         A         A         A    |
-    //|         O         O         O         O         V         V         V         V         V         V         D         O         D         D         D         I         V         V         V    |
-    //|         N         N         A         D         O         1         2         3         1         2         I         N         1         2         3         K         1         2         3    |
-    //+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-    /*00*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*01*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 2, tC}, { 6, tC}, { 0, tC}, { 8, tE}, { 0, tE}, { 0, tE}, { 0, tC}, { 9, tE}, {11, tC}, {14, tC}, {16, tC}},
-    /*02*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 3, tE}, { 0, tE}, { 0, tR}, { 0, tR}, { 4, tE}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*03*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*04*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 5, tC}, { 0, tC}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*05*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*06*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 7, tE}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*07*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*08*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tA}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*09*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {10, tC}, { 0, tC}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*10*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*11*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {12, tC}, { 0, tC}, { 0, tR}, { 0, tR}, {13, tC}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*12*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*13*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*14*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {15, tC}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*15*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*16*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {17, tC}, { 0, tR}, { 0, tC}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*17*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*18*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tA}, { 0, tS}, { 0, tA}, {19, tC}, {23, tC}, { 0, tC}, {25, tF}, { 0, tF}, { 0, tF}, { 0, tD}, {26, tF}, {28, tD}, {31, tD}, {33, tD}},
-    /*19*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {20, tF}, { 0, tF}, { 0, tR}, { 0, tR}, {21, tF}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*20*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*21*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {22, tC}, { 0, tC}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*22*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*23*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {24, tF}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*24*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*25*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tA}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*26*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {27, tG}, { 0, tG}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*27*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*28*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {29, tG}, { 0, tG}, { 0, tR}, { 0, tR}, {30, tG}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*29*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*30*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*31*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {32, tG}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*32*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*33*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {34, tG}, { 0, tR}, { 0, tG}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*34*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*35*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tA}, { 0, tS}, { 0, tA}, {36, tH}, {40, tH}, { 0, tH}, {42, tE}, { 0, tE}, { 0, tE}, { 0, tC}, {43, tE}, {45, tC}, {48, tC}, {50, tC}},
-    /*36*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {37, tE}, { 0, tE}, { 0, tR}, { 0, tR}, {38, tE}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*37*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*38*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {39, tC}, { 0, tC}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*39*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*40*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {41, tE}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*41*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*42*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tA}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*43*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {44, tC}, { 0, tC}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*44*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*45*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {46, tC}, { 0, tC}, { 0, tR}, { 0, tR}, {47, tC}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*46*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*47*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*48*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {49, tC}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*49*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*50*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tS}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, {51, tC}, { 0, tR}, { 0, tC}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}},
-    /*51*/ {{ 0, tA}, { 1, tA}, {18, tA}, {35, tA}, { 0, tA}, { 0, tS}, { 0, tA}, { 0, tA}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}, { 0, tR}}
-};
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/TibetanLayoutEngine.cpp b/icu4c/source/layout/TibetanLayoutEngine.cpp
deleted file mode 100644 (file)
index e6fe0b7..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved 
- *
- * Developed at DIT - Government of Bhutan
- *
- * Contact person: Pema Geyleg - <pema_geyleg@druknet.bt> 
- *
- * This file is a modification of the ICU file KhmerReordering.cpp
- * by Jens Herden and Javier Sola who have given all their possible rights to IBM and the Governement of Bhutan
- * A first module for Dzongkha was developed by Karunakar under Panlocalisation funding.
- * Assistance for this module has been received from Namgay Thinley, Christopher Fynn and Javier Sola
- *
- */
-
-
-#include "OpenTypeLayoutEngine.h"
-#include "TibetanLayoutEngine.h"
-#include "LEGlyphStorage.h"
-#include "TibetanReordering.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(TibetanOpenTypeLayoutEngine)
-
-TibetanOpenTypeLayoutEngine::TibetanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                                                         le_int32 typoFlags, const LEReferenceTo<GlyphSubstitutionTableHeader> &gsubTable, LEErrorCode &success)
-    : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, gsubTable, success)
-{
-    fFeatureMap   = TibetanReordering::getFeatureMap(fFeatureMapCount);
-    fFeatureOrder = TRUE;
-}
-
-TibetanOpenTypeLayoutEngine::TibetanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                                                    le_int32 typoFlags, LEErrorCode &success)
-    : OpenTypeLayoutEngine(fontInstance, scriptCode, languageCode, typoFlags, success)
-{
-    fFeatureMap   = TibetanReordering::getFeatureMap(fFeatureMapCount);
-    fFeatureOrder = TRUE;
-}
-
-TibetanOpenTypeLayoutEngine::~TibetanOpenTypeLayoutEngine()
-{
-    // nothing to do
-}
-
-// Input: characters
-// Output: characters, char indices, tags
-// Returns: output character count
-le_int32 TibetanOpenTypeLayoutEngine::characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-        LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if (LE_FAILURE(success)) {
-        return 0;
-    }
-
-    if (chars == NULL || offset < 0 || count < 0 || max < 0 || offset >= max || offset + count > max) {
-        success = LE_ILLEGAL_ARGUMENT_ERROR;
-        return 0;
-    }
-
-    le_int32 worstCase = count * 3;  // worst case is 3 for Khmer  TODO check if 2 is enough
-
-    outChars = LE_NEW_ARRAY(LEUnicode, worstCase);
-
-    if (outChars == NULL) {
-        success = LE_MEMORY_ALLOCATION_ERROR;
-        return 0;
-    }
-
-    glyphStorage.allocateGlyphArray(worstCase, rightToLeft, success);
-    glyphStorage.allocateAuxData(success);
-
-    if (LE_FAILURE(success)) {
-        LE_DELETE_ARRAY(outChars);
-        return 0;
-    }
-
-    // NOTE: assumes this allocates featureTags...
-    // (probably better than doing the worst case stuff here...)
-    le_int32 outCharCount = TibetanReordering::reorder(&chars[offset], count, fScriptCode, outChars, glyphStorage);
-
-    glyphStorage.adoptGlyphCount(outCharCount);
-    return outCharCount;
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/TibetanLayoutEngine.h b/icu4c/source/layout/TibetanLayoutEngine.h
deleted file mode 100644 (file)
index 1642a15..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2016 - All Rights Reserved 
- *
- * Developed at DIT - Government of Bhutan
- *
- * Contact person: Pema Geyleg - <pema_geyleg@druknet.bt> 
- *
- * This file is a modification of the ICU file KhmerReordering.cpp
- * by Jens Herden and Javier Sola who have given all their possible rights to IBM and the Governement of Bhutan
- * A first module for Dzongkha was developed by Karunakar under Panlocalisation funding.
- * Assistance for this module has been received from Namgay Thinley, Christopher Fynn and Javier Sola
- *
- */
-
-#ifndef __TIBETANLAYOUTENGINE_H
-#define __TIBETANLAYOUTENGINE_H
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "LEGlyphFilter.h"
-#include "LayoutEngine.h"
-#include "OpenTypeLayoutEngine.h"
-
-#include "GlyphSubstitutionTables.h"
-#include "GlyphDefinitionTables.h"
-#include "GlyphPositioningTables.h"
-
-U_NAMESPACE_BEGIN
-
-class MPreFixups;
-class LEGlyphStorage;
-
-/**
- * This class implements OpenType layout for Dzongkha and Tibetan OpenType fonts
- *
- * @internal
- */
-class TibetanOpenTypeLayoutEngine : public OpenTypeLayoutEngine
-{
-public:
-    /**
-     * This is the main constructor. It constructs an instance of TibetanOpenTypeLayoutEngine for
-     * a particular font, script and language. It takes the GSUB table as a parameter since
-     * LayoutEngine::layoutEngineFactory has to read the GSUB table to know that it has an
-     * Tibetan OpenType font.
-     *
-     * @param fontInstance - the font
-     * @param scriptCode - the script
-     * @param langaugeCode - the language
-     * @param gsubTable - the GSUB table
-     * @param success - set to an error code if the operation fails
-     *
-     * @see LayoutEngine::layoutEngineFactory
-     * @see OpenTypeLayoutEngine
-     * @see ScriptAndLangaugeTags.h for script and language codes
-     *
-     * @internal
-     */
-    TibetanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                            le_int32 typoFlags, const LEReferenceTo<GlyphSubstitutionTableHeader> &gsubTable, LEErrorCode &success);
-
-    /**
-     * This constructor is used when the font requires a "canned" GSUB table which can't be known
-     * until after this constructor has been invoked.
-     *
-     * @param fontInstance - the font
-     * @param scriptCode - the script
-     * @param langaugeCode - the language
-     * @param success - set to an error code if the operation fails
-     *
-     * @see OpenTypeLayoutEngine
-     * @see ScriptAndLangaugeTags.h for script and language codes
-     *
-     * @internal
-     */
-    TibetanOpenTypeLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode,
-                                le_int32 typoFlags, LEErrorCode &success);
-
-    /**
-     * The destructor, virtual for correct polymorphic invocation.
-     *
-     * @internal
-     */
-   virtual ~TibetanOpenTypeLayoutEngine();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @internal ICU 3.6
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @internal ICU 3.6
-     */
-    static UClassID getStaticClassID();
-
-protected:
-
-    /**
-     * This method does Tibetan OpenType character processing. It assigns the OpenType feature
-     * tags to the characters, and may generate output characters which have been reordered. 
-     * It may also split some vowels, resulting in more output characters than input characters.
-     *
-     * Input parameters:
-     * @param chars - the input character context
-     * @param offset - the index of the first character to process
-     * @param count - the number of characters to process
-     * @param max - the number of characters in the input context
-     * @param rightToLeft - <code>TRUE</code> if the characters are in a right to left directional run
-     * @param glyphStorage - the glyph storage object. The glyph and character index arrays will be set.
-     *                       the auxillary data array will be set to the feature tags.
-     *
-     * Output parameters:
-     * @param success - set to an error code if the operation fails
-     *
-     * @return the output character count
-     *
-     * @internal
-     */
-    virtual le_int32 characterProcessing(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool rightToLeft,
-            LEUnicode *&outChars, LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-};
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/TibetanReordering.cpp b/icu4c/source/layout/TibetanReordering.cpp
deleted file mode 100644 (file)
index 760c0ef..0000000
+++ /dev/null
@@ -1,391 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved 
- *
- * Developed at DIT - Government of Bhutan
- *
- * Contact person: Pema Geyleg - <pema_geyleg@druknet.bt> 
- *
- * This file is a modification of the ICU file KhmerReordering.cpp
- * by Jens Herden and Javier Sola who have given all their possible rights to IBM and the Governement of Bhutan
- * A first module for Dzongkha was developed by Karunakar under Panlocalisation funding.
- * Assistance for this module has been received from Namgay Thinley, Christopher Fynn and Javier Sola
- *
- */
-
-//#include <stdio.h>
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-#include "TibetanReordering.h"
-#include "LEGlyphStorage.h"
-
-
-U_NAMESPACE_BEGIN
-
-// Characters that get refered to by name...
-enum
-{
-    C_DOTTED_CIRCLE = 0x25CC,
-    C_PRE_NUMBER_MARK = 0x0F3F
- };
-
-
-enum
-{
-    // simple classes, they are used in the statetable (in this file) to control the length of a syllable
-    // they are also used to know where a character should be placed (location in reference to the base character)
-    // and also to know if a character, when independtly displayed, should be displayed with a dotted-circle to
-    // indicate error in syllable construction 
-    _xx = TibetanClassTable::CC_RESERVED,
-    _ba = TibetanClassTable::CC_BASE,
-    _sj = TibetanClassTable::CC_SUBJOINED | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_BELOW, 
-    _tp = TibetanClassTable::CC_TSA_PHRU  | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_ABOVE,
-    _ac = TibetanClassTable::CC_A_CHUNG |  TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_BELOW,
-    _cs = TibetanClassTable::CC_COMP_SANSKRIT | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_BELOW,
-    _ha = TibetanClassTable::CC_HALANTA | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_BELOW, 
-    _bv = TibetanClassTable::CC_BELOW_VOWEL | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_BELOW,
-    _av = TibetanClassTable::CC_ABOVE_VOWEL | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_ABOVE,
-    _an = TibetanClassTable::CC_ANUSVARA | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_ABOVE,
-    _cb = TibetanClassTable::CC_CANDRABINDU | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_ABOVE,
-    _vs = TibetanClassTable::CC_VISARGA | TibetanClassTable::CF_DOTTED_CIRCLE| TibetanClassTable::CF_POS_AFTER,
-    _as = TibetanClassTable::CC_ABOVE_S_MARK | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_ABOVE,
-    _bs = TibetanClassTable::CC_BELOW_S_MARK | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_BELOW,
-    _di = TibetanClassTable::CC_DIGIT | TibetanClassTable::CF_DIGIT,
-    _pd = TibetanClassTable::CC_PRE_DIGIT_MARK | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_PREDIGIT | TibetanClassTable::CF_POS_BEFORE ,
-    _bd = TibetanClassTable::CC_POST_BELOW_DIGIT_M | TibetanClassTable::CF_DOTTED_CIRCLE | TibetanClassTable::CF_POS_AFTER
-};
-
-
-// Character class tables 
-//_xx Non Combining characters
-//_ba Base Consonants
-//_sj Subjoined consonants
-//_tp Tsa - phru
-//_ac A-chung, Vowel Lengthening mark
-//_cs Precomposed Sanskrit vowel + subjoined consonants
-//_ha Halanta/Virama
-//_bv Below vowel
-//_av above vowel
-//_an Anusvara
-//_cb Candrabindu
-//_vs Visaraga/Post mark
-//_as Upper Stress marks
-//_bs Lower Stress marks
-//_di Digit
-//_pd Number pre combining, Needs reordering
-//_bd Other number combining marks
-
-static const TibetanClassTable::CharClass tibetanCharClasses[] =
-{
-   // 0    1    2    3    4    5    6    7    8    9   a     b   c    d     e   f
-    _xx, _ba, _xx, _xx, _ba, _ba, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0F00 - 0F0F 0
-    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _bd, _bd, _xx, _xx, _xx, _xx, _xx, _xx, // 0F10 - 0F1F 1
-    _di, _di, _di, _di, _di, _di, _di, _di, _di, _di, _xx, _xx, _xx, _xx, _xx, _xx, // 0F20 - 0F2F 2 
-    _xx, _xx, _xx, _xx, _xx, _bs, _xx, _bs, _xx, _tp, _xx, _xx, _xx, _xx, _bd, _pd, // 0F30 - 0F3F 3 
-    _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _xx, _ba, _ba, _ba, _ba, _ba, _ba, _ba, // 0F40 - 0F4F 4
-    _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, // 0F50 - 0F5F 5
-    _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _ba, _xx, _xx, _xx, _xx, _xx, // 0F60 - 0F6F 6
-    _xx, _ac, _av, _cs, _bv, _bv, _cs, _cs, _cs, _cs, _av, _av, _av, _av, _an, _vs, // 0F70 - 0F7F 7
-    _av, _cs, _cb, _cb, _ha, _xx, _as, _as, _ba, _ba, _ba, _ba, _xx, _xx, _xx, _xx, // 0F80 - 0F8F 8
-    _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _xx, _sj, _sj, _sj, _sj, _sj, _sj, _sj, // 0F90 - 0F9F 9
-    _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, // 0FA0 - 0FAF a
-    _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _sj, _xx, _sj, _sj, // 0FB0 - 0FBF b
-    _xx, _xx, _xx, _xx, _xx, _xx, _bs, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0FC0 - 0FCF c
-    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx,// 0FD0 - 0FDF  d
-    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0FE0 - 0FEF e
-    _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, _xx, // 0FF0 - 0FFF f 
-};                                                                                  
-
-
-//
-// Tibetan Class Tables
-//                   
-
-//
-// The range of characters defined in the above table is defined here. For Tibetan 0F00 to 0FFF
-// Even if the Tibetan range is bigger, most of the characters are not combinable, and therefore treated
-// as _xx
-static const TibetanClassTable tibetanClassTable = {0x0F00, 0x0FFF, tibetanCharClasses};
-
-
-// Below we define how a character in the input string is either in the tibetanCharClasses table
-// (in which case we get its type back), or an unknown object in which case we get _xx (CC_RESERVED) back
-TibetanClassTable::CharClass TibetanClassTable::getCharClass(LEUnicode ch) const
-{
-    if (ch < firstChar || ch > lastChar) {
-        return CC_RESERVED;
-    }
-    
-    return classTable[ch - firstChar];
-}
-
-const TibetanClassTable *TibetanClassTable::getTibetanClassTable()
-{
-    return &tibetanClassTable;
-}
-
-
-
-class TibetanReorderingOutput : public UMemory {
-private:
-    le_int32 fSyllableCount;
-    le_int32 fOutIndex;
-    LEUnicode *fOutChars;
-
-    LEGlyphStorage &fGlyphStorage;
-
-
-public:
-    TibetanReorderingOutput(LEUnicode *outChars, LEGlyphStorage &glyphStorage)
-        : fSyllableCount(0), fOutIndex(0), fOutChars(outChars), fGlyphStorage(glyphStorage)
-    {
-        // nothing else to do...
-    }
-
-    ~TibetanReorderingOutput()
-    {
-        // nothing to do here...
-    }
-
-    void reset()
-    {
-        fSyllableCount += 1;
-    }
-
-    void writeChar(LEUnicode ch, le_uint32 charIndex, FeatureMask featureMask)
-    {
-        LEErrorCode success = LE_NO_ERROR;
-
-        fOutChars[fOutIndex] = ch;
-
-        fGlyphStorage.setCharIndex(fOutIndex, charIndex, success);
-        fGlyphStorage.setAuxData(fOutIndex, featureMask, success);
-
-        fOutIndex += 1;
-    }
-
-    le_int32 getOutputIndex()
-    {
-        return fOutIndex;
-    }
-};
-
-
-//TODO remove unused flags
-#define ccmpFeatureTag LE_CCMP_FEATURE_TAG
-#define blwfFeatureTag LE_BLWF_FEATURE_TAG
-#define pstfFeatureTag LE_PSTF_FEATURE_TAG
-#define presFeatureTag LE_PRES_FEATURE_TAG
-#define blwsFeatureTag LE_BLWS_FEATURE_TAG
-#define abvsFeatureTag LE_ABVS_FEATURE_TAG
-#define pstsFeatureTag LE_PSTS_FEATURE_TAG
-
-#define blwmFeatureTag LE_BLWM_FEATURE_TAG
-#define abvmFeatureTag LE_ABVM_FEATURE_TAG
-#define distFeatureTag LE_DIST_FEATURE_TAG
-
-#define prefFeatureTag LE_PREF_FEATURE_TAG
-#define abvfFeatureTag LE_ABVF_FEATURE_TAG
-#define cligFeatureTag LE_CLIG_FEATURE_TAG
-#define mkmkFeatureTag LE_MKMK_FEATURE_TAG
-
-// Shaping features
-#define prefFeatureMask 0x80000000UL
-#define blwfFeatureMask 0x40000000UL
-#define abvfFeatureMask 0x20000000UL
-#define pstfFeatureMask 0x10000000UL 
-#define presFeatureMask 0x08000000UL
-#define blwsFeatureMask 0x04000000UL
-#define abvsFeatureMask 0x02000000UL
-#define pstsFeatureMask 0x01000000UL
-#define cligFeatureMask 0x00800000UL 
-#define ccmpFeatureMask 0x00040000UL
-
-// Positioning features
-#define distFeatureMask 0x00400000UL
-#define blwmFeatureMask 0x00200000UL
-#define abvmFeatureMask 0x00100000UL
-#define mkmkFeatureMask 0x00080000UL
-
-#define tagPref    (ccmpFeatureMask | prefFeatureMask | presFeatureMask | cligFeatureMask | distFeatureMask)
-#define tagAbvf    (ccmpFeatureMask | abvfFeatureMask | abvsFeatureMask | cligFeatureMask | distFeatureMask | abvmFeatureMask | mkmkFeatureMask)
-#define tagPstf    (ccmpFeatureMask | blwfFeatureMask | blwsFeatureMask | prefFeatureMask | presFeatureMask | pstfFeatureMask | pstsFeatureMask | cligFeatureMask | distFeatureMask | blwmFeatureMask)
-#define tagBlwf    (ccmpFeatureMask | blwfFeatureMask | blwsFeatureMask | cligFeatureMask | distFeatureMask | blwmFeatureMask | mkmkFeatureMask)
-#define tagDefault (ccmpFeatureMask | prefFeatureMask | blwfFeatureMask | presFeatureMask | blwsFeatureMask | cligFeatureMask | distFeatureMask | abvmFeatureMask | blwmFeatureMask | mkmkFeatureMask)
-
-
-
-// These are in the order in which the features need to be applied
-// for correct processing
-static const FeatureMap featureMap[] =
-{
-    // Shaping features
-    {ccmpFeatureTag, ccmpFeatureMask},
-    {prefFeatureTag, prefFeatureMask},
-    {blwfFeatureTag, blwfFeatureMask},
-    {abvfFeatureTag, abvfFeatureMask},
-    {pstfFeatureTag, pstfFeatureMask}, 
-    {presFeatureTag, presFeatureMask},
-    {blwsFeatureTag, blwsFeatureMask},
-    {abvsFeatureTag, abvsFeatureMask},
-    {pstsFeatureTag, pstsFeatureMask},
-    {cligFeatureTag, cligFeatureMask},
-    
-    // Positioning features
-    {distFeatureTag, distFeatureMask},
-    {blwmFeatureTag, blwmFeatureMask},
-    {abvmFeatureTag, abvmFeatureMask},
-    {mkmkFeatureTag, mkmkFeatureMask},
-};
-
-static const le_int32 featureMapCount = LE_ARRAY_SIZE(featureMap);
-
-// The stateTable is used to calculate the end (the length) of a well
-// formed Tibetan Syllable. 
-//
-// Each horizontal line is ordered exactly the same way as the values in TibetanClassTable
-// CharClassValues in TibetanReordering.h This coincidence of values allows the
-// follow up of the table.
-//
-// Each line corresponds to a state, which does not necessarily need to be a type
-// of component... for example, state 2 is a base, with is always a first character
-// in the syllable, but the state could be produced a consonant of any type when
-// it is the first character that is analysed (in ground state).
-//
-static const le_int8 tibetanStateTable[][TibetanClassTable::CC_COUNT] =
-{
-
-     
-    //Dzongkha state table
-    //xx  ba  sj  tp  ac  cs  ha  bv  av  an  cb  vs  as  bs  di  pd  bd
-    { 1,  2,  4,  3,  8,  7,  9, 10, 14, 13, 17, 18, 19, 19, 20, 21, 21,}, //  0 - ground state
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,}, //  1 - exit state (or sign to the right of the syllable)
-    {-1, -1,  4,  3,  8,  7,  9, 10, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, //  2 - Base consonant    
-    {-1, -1,  5, -1,  8,  7, -1, 10, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, //  3 - Tsa phru after base
-    {-1, -1,  4,  6,  8,  7,  9, 10, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, //  4 - Subjoined consonant after base             
-    {-1, -1,  5, -1,  8,  7, -1, 10, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, //  5 - Subjoined consonant after tsa phru
-    {-1, -1, -1, -1,  8,  7, -1, 10, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, //  6 - Tsa phru after subjoined consonant
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 19, 19, -1, -1, -1,}, //  7 - Pre Composed Sanskrit
-    {-1, -1, -1, -1, -1, -1, -1, 10, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, //  8 - A-chung
-    {-1, -1, -1, -1, -1, -1, -1, -1, 14, 13, 17, -1, 19, 19, -1, -1, -1,}, //  9 - Halanta
-    {-1, -1, -1, -1, -1, -1, -1, 11, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, // 10 - below vowel 1
-    {-1, -1, -1, -1, -1, -1, -1, 12, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, // 11 - below vowel 2
-    {-1, -1, -1, -1, -1, -1, -1, -1, 14, 13, 17, 18, 19, 19, -1, -1, -1,}, // 12 - below vowel 3   
-    {-1, -1, -1, -1, -1, -1, -1, -1, 14, 17, 17, 18, 19, 19, -1, -1, -1,}, // 13 - Anusvara before vowel
-    {-1, -1, -1, -1, -1, -1, -1, -1, 15, 17, 17, 18, 19, 19, -1, -1, -1,}, // 14 - above vowel 1
-    {-1, -1, -1, -1, -1, -1, -1, -1, 16, 17, 17, 18, 19, 19, -1, -1, -1,}, // 15 - above vowel 2
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, 17, 17, 18, 19, 19, -1, -1, -1,}, // 16 - above vowel 3
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 18, 19, 19, -1, -1, -1,}, // 17 - Anusvara or Candrabindu after vowel 
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 19, 19, -1, -1, -1,}, // 18 - Visarga    
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,}, // 19 - strss mark
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 21, 21,}, // 20 - digit 
-    {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,}, // 21 - digit mark
-    
-
-};         
-
-
-const FeatureMap *TibetanReordering::getFeatureMap(le_int32 &count)
-{
-    count = featureMapCount;
-
-    return featureMap;
-}
-
-
-// Given an input string of characters and a location in which to start looking
-// calculate, using the state table, which one is the last character of the syllable
-// that starts in the starting position.
-le_int32 TibetanReordering::findSyllable(const TibetanClassTable *classTable, const LEUnicode *chars, le_int32 prev, le_int32 charCount)
-{
-    le_int32 cursor = prev;
-    le_int8 state = 0;
-
-    while (cursor < charCount) {
-        TibetanClassTable::CharClass charClass = (classTable->getCharClass(chars[cursor]) & TibetanClassTable::CF_CLASS_MASK);
-
-        state = tibetanStateTable[state][charClass];
-
-        if (state < 0) {
-            break;
-        }
-
-        cursor += 1;
-    }
-
-    return cursor;
-}
-
-
-// This is the real reordering function as applied to the Tibetan language
-
-le_int32 TibetanReordering::reorder(const LEUnicode *chars, le_int32 charCount, le_int32,
-                                  LEUnicode *outChars, LEGlyphStorage &glyphStorage)
-{
-    const TibetanClassTable *classTable = TibetanClassTable::getTibetanClassTable();
-
-    TibetanReorderingOutput output(outChars, glyphStorage);
-    TibetanClassTable::CharClass charClass;
-    le_int32 i, prev = 0;
-
-    // This loop only exits when we reach the end of a run, which may contain 
-    // several syllables.
-    while (prev < charCount) {
-        le_int32 syllable = findSyllable(classTable, chars, prev, charCount);  
-
-        output.reset();
-       
-        // shall we add a dotted circle?
-        // If in the position in which the base should be (first char in the string) there is
-        // a character that has the Dotted circle flag (a character that cannot be a base)
-        // then write a dotted circle
-        if (classTable->getCharClass(chars[prev]) & TibetanClassTable::CF_DOTTED_CIRCLE) {
-            output.writeChar(C_DOTTED_CIRCLE, prev, tagDefault);        
-        }        
-
-        // copy the rest to output, inverting the pre-number mark if present after a digit.
-        for (i = prev; i < syllable; i += 1) {
-            charClass = classTable->getCharClass(chars[i]);
-           
-           if ((TibetanClassTable::CF_DIGIT & charClass) 
-              && ( classTable->getCharClass(chars[i+1]) & TibetanClassTable::CF_PREDIGIT))
-           {
-                        output.writeChar(C_PRE_NUMBER_MARK, i, tagPref);
-                         output.writeChar(chars[i], i+1 , tagPref);
-                       i += 1;
-          } else {
-            switch (charClass & TibetanClassTable::CF_POS_MASK) {
-               
-               // If the present character is a number, and the next character is a pre-number combining mark
-            // then the two characters are reordered
-                               
-                case TibetanClassTable::CF_POS_ABOVE :
-                    output.writeChar(chars[i], i, tagAbvf);
-                    break;
-                
-                case TibetanClassTable::CF_POS_AFTER :
-                    output.writeChar(chars[i], i, tagPstf);
-                    break;
-                
-                case TibetanClassTable::CF_POS_BELOW :
-                    output.writeChar(chars[i], i, tagBlwf);
-                    break;
-                
-                default:                                       
-                    // default - any other characters
-                   output.writeChar(chars[i], i, tagDefault);
-                    break;
-            } // switch
-          } // if
-        } // for
-
-        prev = syllable; // move the pointer to the start of next syllable
-    }
-
-    return output.getOutputIndex();
-}
-
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/TibetanReordering.h b/icu4c/source/layout/TibetanReordering.h
deleted file mode 100644 (file)
index dafc3de..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2016 - All Rights Reserved 
- *
- * Developed at DIT - Government of Bhutan
- *
- * Contact person: Pema Geyleg - <pema_geyleg@druknet.bt> 
- *
- * This file is a modification of the ICU file KhmerReordering.h
- * by Jens Herden and Javier Sola who have given all their possible rights to IBM and the Governement of Bhutan
- * A first module for Dzongkha was developed by Karunakar under Panlocalisation funding.
- * Assistance for this module has been received from Namgay Thinley, Christopher Fynn and Javier Sola
- *
- */
-
-#ifndef __TIBETANREORDERING_H
-#define __TIBETANREORDERING_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "OpenTypeTables.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-// Vocabulary 
-//     Base ->         A consonant in its full (not subscript) form. It is the 
-//                     center of the syllable, it can be souranded by subjoined consonants, vowels,
-//                     signs... but there is only one base in a stack, it has to be coded as
-//                     the first character of the syllable.Included here are also groups of base + subjoined 
-//                                                                              which are represented by one single code point in unicode (e.g. 0F43) Also other characters that might take 
-//                     subjoined consonants or other combining characters.                                                                                     
-//     Subjoined ->    Subjoined consonants and groups of subjoined consonants which have a single code-point 
-//                     to repersent the group (even if each subjoined consonant is represented independently
-//                     by anothe code-point
-//     Tsa Phru -->    Tsa Phru character, Bhutanese people will always place it right after the base, but sometimes, due to 
-//                                                                             "normalization"                                                 
-//                                                                              is placed after all the subjoined consonants, and it is also permitted there.
-//     A Chung  Vowel lengthening mark --> . 0F71 It is placed after the base and any subjoined consonants but before any vowels
-//     Precomposed Sanskrit vowels --> The are combinations of subjoined consonants + vowels that have been assigned
-//                     a given code-point (in spite of each single part of them having also a code-point
-//                     They are avoided, and users are encouraged to use the combination of code-points that
-//                     represents the same sound instead of using this combined characters. This is included here
-//                     for compatibility with possible texts that use them (they are not in the Dzongkha keyboard).
-//     Halanta ->      The Halanta or Virama character 0F84 indicates that a consonant should not use its inheernt vowel, 
-//                     in spite of not having other vowels present. It is usually placed immediatly after a base consonant,
-//                     but in some special cases it can also be placed after a subjoined consonant, so this is also
-//                     permitted in this algorithm. (Halanta is always displayed in Tibetan not used as a connecting char)
-//
-//     Subjoined vowels -> Dependent vowels (matras) placed below the base and below all subjoined consonants. There
-//                     might be as much as three subjoined vowels in a given stack (only one in general text, but up 
-//                     to three for abreviations, they have to be permitted).
-//     Superscript vowels -> There are three superscript vowels, and they can be repeated or combined (up to three
-//                     times. They can combine with subjoined vowels, and are always coded after these.
-//     Anusvara -->    Nasalisation sign. Traditioinally placed in absence of vowels, but also after vowels. In some
-//                     special cases it can be placed before a vowel, so this is also permitted
-//     Candrabindu ->  Forms of the Anusvara with different glyphs (and different in identity) which can be placed
-//                     without vowel or after the vowel, but never before. Cannot combine with Anusvara.
-//     Stress marks -> Marks placed above or below a syllable, affecting the whole syllable. They are combining
-//                     marks, so they have to be attached to a specific stack. The are using to emphasise a syllable.
-//
-//     Digits ->       Digits are not considered as non-combining characters because there are a few characters which
-//                     combine with them, so they have to be considered independently.
-//     Digit combining marks -> dependent marks that combine with digits.
-//     
-//     TODO
-//     There are a number of characters in the CJK block that are used in Tibetan script, two of these are symbols
-//     are used as bases for combining glyphs, and have not been encoded in Tibetan. As these characters are outside
-//     of the tibetan block, they have not been treated in this program.
-    
-
-struct TibetanClassTable    // This list must include all types of components that can be used inside a syllable
-{
-    enum CharClassValues  // order is important here! This order must be the same that is found in each horizontal 
-                          // line in the statetable for Tibetan (file TibetanReordering.cpp). It assigns one number
-                          // to each type of character that has to be considered when analysing the order in which
-                          // characters can be placed
-    {
-        CC_RESERVED             =  0, //Non Combining Characters
-        CC_BASE                 =  1, // Base Consonants, Base Consonants with Subjoined attached in code point, Sanskrit base marks
-        CC_SUBJOINED            =  2, // Subjoined Consonats, combination of more than Subjoined Consonants in the code point
-        CC_TSA_PHRU             =  3, // Tsa-Phru character 0F39 
-        CC_A_CHUNG              =  4, // Vowel Lenthening a-chung mark 0F71
-        CC_COMP_SANSKRIT        =  5, // Precomposed Sanskrit vowels including Subjoined characters and vowels
-        CC_HALANTA              =  6, // Halanta Character 0F84
-        CC_BELOW_VOWEL          =  7, // Subjoined vowels
-        CC_ABOVE_VOWEL          =  8, // Superscript vowels
-        CC_ANUSVARA             =  9, // Tibetan sign Rjes Su Nga Ro 0F7E
-        CC_CANDRABINDU          = 10, // Tibetan sign Sna Ldan and Nyi Zla Naa Da 0F82, 0F83
-        CC_VISARGA              = 11, // Tibetan sign Rnam Bcad (0F7F)
-        CC_ABOVE_S_MARK         = 12, // Stress Marks placed above the text
-        CC_BELOW_S_MARK         = 13, // Stress Marks placed below the text
-        CC_DIGIT                = 14, // Dzongkha Digits
-        CC_PRE_DIGIT_MARK       = 15, // Mark placed before the digit
-        CC_POST_BELOW_DIGIT_M   = 16, // Mark placed below or after the digit
-        CC_COUNT                = 17  // This is the number of character classes
-    };
-
-    enum CharClassFlags
-    {
-        CF_CLASS_MASK    = 0x0000FFFF,
-
-        CF_DOTTED_CIRCLE = 0x04000000,  // add a dotted circle if a character with this flag is the first in a syllable
-        CF_DIGIT         = 0x01000000,  // flag to speed up comparaisson
-        CF_PREDIGIT      = 0x02000000,  // flag to detect pre-digit marks for reordering
-
-        // position flags
-        CF_POS_BEFORE    = 0x00080000,
-        CF_POS_BELOW     = 0x00040000,
-        CF_POS_ABOVE     = 0x00020000,
-        CF_POS_AFTER     = 0x00010000,
-        CF_POS_MASK      = 0x000f0000
-    };
-
-    typedef le_uint32 CharClass;
-
-    typedef le_int32 ScriptFlags;
-
-    LEUnicode firstChar;   // for Tibetan this will become xOF00
-    LEUnicode lastChar;    //  and this x0FFF
-    const CharClass *classTable;
-
-    CharClass getCharClass(LEUnicode ch) const;
-
-    static const TibetanClassTable *getTibetanClassTable();
-};
-
-
-class TibetanReordering /* not : public UObject because all methods are static */ {
-public:
-    static le_int32 reorder(const LEUnicode *theChars, le_int32 charCount, le_int32 scriptCode,
-        LEUnicode *outChars, LEGlyphStorage &glyphStorage);
-
-    static const FeatureMap *getFeatureMap(le_int32 &count);
-
-private:
-    // do not instantiate
-    TibetanReordering();
-
-    static le_int32 findSyllable(const TibetanClassTable *classTable, const LEUnicode *chars, le_int32 prev, le_int32 charCount);
-
-};
-
-
-U_NAMESPACE_END
-#endif
diff --git a/icu4c/source/layout/TrimmedArrayProcessor.cpp b/icu4c/source/layout/TrimmedArrayProcessor.cpp
deleted file mode 100644 (file)
index 9e27801..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc.h"
-#include "TrimmedArrayProcessor.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(TrimmedArrayProcessor)
-
-TrimmedArrayProcessor::TrimmedArrayProcessor()
-{
-}
-
-TrimmedArrayProcessor::TrimmedArrayProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success)
-  : NonContextualGlyphSubstitutionProcessor(morphSubtableHeader, success), firstGlyph(0), lastGlyph(0)
-{
-  LEReferenceTo<NonContextualGlyphSubstitutionHeader> header(morphSubtableHeader, success);
-
-  if(LE_FAILURE(success)) return;
-
-  trimmedArrayLookupTable = LEReferenceTo<TrimmedArrayLookupTable>(morphSubtableHeader, success, (const TrimmedArrayLookupTable*)&header->table);
-
-  if(LE_FAILURE(success)) return;
-
-  firstGlyph = SWAPW(trimmedArrayLookupTable->firstGlyph);
-  lastGlyph = firstGlyph + SWAPW(trimmedArrayLookupTable->glyphCount);
-}
-
-TrimmedArrayProcessor::~TrimmedArrayProcessor()
-{
-}
-
-void TrimmedArrayProcessor::process(LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-  if(LE_FAILURE(success)) return;
-    le_int32 glyphCount = glyphStorage.getGlyphCount();
-    le_int32 glyph;
-
-    for (glyph = 0; glyph < glyphCount; glyph += 1) {
-        LEGlyphID thisGlyph = glyphStorage[glyph];
-        TTGlyphID ttGlyph = (TTGlyphID) LE_GET_GLYPH(thisGlyph);
-
-        if ((ttGlyph > firstGlyph) && (ttGlyph < lastGlyph)) {
-            TTGlyphID newGlyph = SWAPW(trimmedArrayLookupTable->valueArray[ttGlyph - firstGlyph]);
-
-            glyphStorage[glyph] = LE_SET_GLYPH(thisGlyph, newGlyph);
-        }
-    }
-} 
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/TrimmedArrayProcessor.h b/icu4c/source/layout/TrimmedArrayProcessor.h
deleted file mode 100644 (file)
index 7cb9057..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2014 - All Rights Reserved
- *
- */
-
-#ifndef __TRIMMEDARRAYPROCESSOR_H
-#define __TRIMMEDARRAYPROCESSOR_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class TrimmedArrayProcessor : public NonContextualGlyphSubstitutionProcessor
-{
-public:
-    virtual void process(LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    TrimmedArrayProcessor(const LEReferenceTo<MorphSubtableHeader> &morphSubtableHeader, LEErrorCode &success);
-
-    virtual ~TrimmedArrayProcessor();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    static UClassID getStaticClassID();
-
-private:
-    TrimmedArrayProcessor();
-
-protected:
-    TTGlyphID firstGlyph;
-    TTGlyphID lastGlyph;
-    LEReferenceTo<TrimmedArrayLookupTable> trimmedArrayLookupTable;
-
-};
-
-U_NAMESPACE_END
-#endif
-
diff --git a/icu4c/source/layout/TrimmedArrayProcessor2.cpp b/icu4c/source/layout/TrimmedArrayProcessor2.cpp
deleted file mode 100644 (file)
index e958fe3..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2013 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor2.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc2.h"
-#include "TrimmedArrayProcessor2.h"
-#include "LEGlyphStorage.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-UOBJECT_DEFINE_RTTI_IMPLEMENTATION(TrimmedArrayProcessor2)
-
-TrimmedArrayProcessor2::TrimmedArrayProcessor2()
-{
-}
-
-TrimmedArrayProcessor2::TrimmedArrayProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success)
-  : NonContextualGlyphSubstitutionProcessor2(morphSubtableHeader, success)
-{
-    const LEReferenceTo<NonContextualGlyphSubstitutionHeader2> header(morphSubtableHeader, success);
-
-    trimmedArrayLookupTable = LEReferenceTo<TrimmedArrayLookupTable>(morphSubtableHeader, success, &header->table);
-    firstGlyph = SWAPW(trimmedArrayLookupTable->firstGlyph);
-    lastGlyph = firstGlyph + SWAPW(trimmedArrayLookupTable->glyphCount);
-    valueArray = LEReferenceToArrayOf<LookupValue>(morphSubtableHeader, success, &trimmedArrayLookupTable->valueArray[0], LE_UNBOUNDED_ARRAY);
-}
-
-TrimmedArrayProcessor2::~TrimmedArrayProcessor2()
-{
-}
-
-void TrimmedArrayProcessor2::process(LEGlyphStorage &glyphStorage, LEErrorCode &success)
-{
-    if(LE_FAILURE(success)) return;
-    le_int32 glyphCount = glyphStorage.getGlyphCount();
-    le_int32 glyph;
-
-    for (glyph = 0; glyph < glyphCount; glyph += 1) {
-        LEGlyphID thisGlyph = glyphStorage[glyph];
-        TTGlyphID ttGlyph = (TTGlyphID) LE_GET_GLYPH(thisGlyph);
-
-        if ((ttGlyph > firstGlyph) && (ttGlyph < lastGlyph)) {
-            TTGlyphID newGlyph = SWAPW(valueArray(ttGlyph - firstGlyph, success));
-
-            glyphStorage[glyph] = LE_SET_GLYPH(thisGlyph, newGlyph);
-        }
-    }
-} 
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/TrimmedArrayProcessor2.h b/icu4c/source/layout/TrimmedArrayProcessor2.h
deleted file mode 100644 (file)
index 501331d..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp.  and others 1998-2014 - All Rights Reserved
- *
- */
-
-#ifndef __TRIMMEDARRAYPROCESSOR2_H
-#define __TRIMMEDARRAYPROCESSOR2_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "MorphTables.h"
-#include "SubtableProcessor2.h"
-#include "NonContextualGlyphSubst.h"
-#include "NonContextualGlyphSubstProc2.h"
-
-U_NAMESPACE_BEGIN
-
-class LEGlyphStorage;
-
-class TrimmedArrayProcessor2 : public NonContextualGlyphSubstitutionProcessor2
-{
-public:
-    virtual void process(LEGlyphStorage &glyphStorage, LEErrorCode &success);
-
-    TrimmedArrayProcessor2(const LEReferenceTo<MorphSubtableHeader2> &morphSubtableHeader, LEErrorCode &success);
-
-    virtual ~TrimmedArrayProcessor2();
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    virtual UClassID getDynamicClassID() const;
-
-    /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
-     *
-     * @deprecated ICU 54. See {@link icu::LayoutEngine}
-     */
-    static UClassID getStaticClassID();
-
-private:
-    TrimmedArrayProcessor2();
-
-protected:
-    TTGlyphID firstGlyph;
-    TTGlyphID lastGlyph;
-    LEReferenceTo<TrimmedArrayLookupTable> trimmedArrayLookupTable;
-    LEReferenceToArrayOf<LookupValue> valueArray;
-};
-
-U_NAMESPACE_END
-#endif
-
diff --git a/icu4c/source/layout/ValueRecords.cpp b/icu4c/source/layout/ValueRecords.cpp
deleted file mode 100644 (file)
index 0abb3c1..0000000
+++ /dev/null
@@ -1,306 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2005 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "ValueRecords.h"
-#include "DeviceTables.h"
-#include "GlyphIterator.h"
-#include "LESwaps.h"
-
-U_NAMESPACE_BEGIN
-
-#define Nibble(value, nibble) ((value >> (nibble * 4)) & 0xF)
-#define NibbleBits(value, nibble) (bitsInNibble[Nibble(value, nibble)])
-
-le_int16 ValueRecord::getFieldValue(ValueFormat valueFormat, ValueRecordField field) const
-{
-    le_int16 valueIndex = getFieldIndex(valueFormat, field);
-    le_int16 value = values[valueIndex];
-
-    return SWAPW(value);
-}
-
-le_int16 ValueRecord::getFieldValue(le_int16 index, ValueFormat valueFormat, ValueRecordField field) const
-{
-    le_int16 baseIndex = getFieldCount(valueFormat) * index;
-    le_int16 valueIndex = getFieldIndex(valueFormat, field);
-    le_int16 value = values[baseIndex + valueIndex];
-
-    return SWAPW(value);
-}
-
-void ValueRecord::adjustPosition(ValueFormat valueFormat, const char *base, GlyphIterator &glyphIterator,
-                                 const LEFontInstance *fontInstance) const
-{
-    float xPlacementAdjustment = 0;
-    float yPlacementAdjustment = 0;
-    float xAdvanceAdjustment   = 0;
-    float yAdvanceAdjustment   = 0;
-
-    if ((valueFormat & vfbXPlacement) != 0) {
-        le_int16 value = getFieldValue(valueFormat, vrfXPlacement);
-        LEPoint pixels;
-
-        fontInstance->transformFunits(value, 0, pixels);
-
-        xPlacementAdjustment += fontInstance->xPixelsToUnits(pixels.fX);
-        yPlacementAdjustment += fontInstance->yPixelsToUnits(pixels.fY);
-    }
-
-    if ((valueFormat & vfbYPlacement) != 0) {
-        le_int16 value = getFieldValue(valueFormat, vrfYPlacement);
-        LEPoint pixels;
-
-        fontInstance->transformFunits(0, value, pixels);
-
-        xPlacementAdjustment += fontInstance->xPixelsToUnits(pixels.fX);
-        yPlacementAdjustment += fontInstance->yPixelsToUnits(pixels.fY);
-    }
-
-    if ((valueFormat & vfbXAdvance) != 0) {
-        le_int16 value = getFieldValue(valueFormat, vrfXAdvance);
-        LEPoint pixels;
-
-        fontInstance->transformFunits(value, 0, pixels);
-
-        xAdvanceAdjustment += fontInstance->xPixelsToUnits(pixels.fX);
-        yAdvanceAdjustment += fontInstance->yPixelsToUnits(pixels.fY);
-    }
-
-    if ((valueFormat & vfbYAdvance) != 0) {
-        le_int16 value = getFieldValue(valueFormat, vrfYAdvance);
-        LEPoint pixels;
-
-        fontInstance->transformFunits(0, value, pixels);
-
-        xAdvanceAdjustment += fontInstance->xPixelsToUnits(pixels.fX);
-        yAdvanceAdjustment += fontInstance->yPixelsToUnits(pixels.fY);
-    }
-
-    // FIXME: The device adjustments should really be transformed, but
-    // the only way I know how to do that is to convert them to le_int16 units,
-    // transform them, and then convert them back to pixels. Sigh...
-    if ((valueFormat & vfbAnyDevice) != 0) {
-        le_int16 xppem = (le_int16) fontInstance->getXPixelsPerEm();
-        le_int16 yppem = (le_int16) fontInstance->getYPixelsPerEm();
-
-        if ((valueFormat & vfbXPlaDevice) != 0) {
-            Offset dtOffset = getFieldValue(valueFormat, vrfXPlaDevice);
-
-            if (dtOffset != 0) {
-                const DeviceTable *dt = (const DeviceTable *) (base + dtOffset);
-                le_int16 xAdj = dt->getAdjustment(xppem);
-
-                xPlacementAdjustment += fontInstance->xPixelsToUnits(xAdj);
-            }
-        }
-
-        if ((valueFormat & vfbYPlaDevice) != 0) {
-            Offset dtOffset = getFieldValue(valueFormat, vrfYPlaDevice);
-
-            if (dtOffset != 0) {
-                const DeviceTable *dt = (const DeviceTable *) (base + dtOffset);
-                le_int16 yAdj = dt->getAdjustment(yppem);
-
-                yPlacementAdjustment += fontInstance->yPixelsToUnits(yAdj);
-            }
-        }
-
-        if ((valueFormat & vfbXAdvDevice) != 0) {
-            Offset dtOffset = getFieldValue(valueFormat, vrfXAdvDevice);
-
-            if (dtOffset != 0) {
-                const DeviceTable *dt = (const DeviceTable *) (base + dtOffset);
-                le_int16 xAdj = dt->getAdjustment(xppem);
-
-                xAdvanceAdjustment += fontInstance->xPixelsToUnits(xAdj);
-            }
-        }
-
-        if ((valueFormat & vfbYAdvDevice) != 0) {
-            Offset dtOffset = getFieldValue(valueFormat, vrfYAdvDevice);
-
-            if (dtOffset != 0) {
-                const DeviceTable *dt = (const DeviceTable *) (base + dtOffset);
-                le_int16 yAdj = dt->getAdjustment(yppem);
-
-                yAdvanceAdjustment += fontInstance->yPixelsToUnits(yAdj);
-            }
-        }
-    }
-
-    glyphIterator.adjustCurrGlyphPositionAdjustment(
-        xPlacementAdjustment, yPlacementAdjustment, xAdvanceAdjustment, yAdvanceAdjustment);
-}
-
-void ValueRecord::adjustPosition(le_int16 index, ValueFormat valueFormat, const char *base, GlyphIterator &glyphIterator,
-                                 const LEFontInstance *fontInstance) const
-{
-    float xPlacementAdjustment = 0;
-    float yPlacementAdjustment = 0;
-    float xAdvanceAdjustment   = 0;
-    float yAdvanceAdjustment   = 0;
-
-    if ((valueFormat & vfbXPlacement) != 0) {
-        le_int16 value = getFieldValue(index, valueFormat, vrfXPlacement);
-        LEPoint pixels;
-
-        fontInstance->transformFunits(value, 0, pixels);
-
-        xPlacementAdjustment += fontInstance->xPixelsToUnits(pixels.fX);
-        yPlacementAdjustment += fontInstance->yPixelsToUnits(pixels.fY);
-    }
-
-    if ((valueFormat & vfbYPlacement) != 0) {
-        le_int16 value = getFieldValue(index, valueFormat, vrfYPlacement);
-        LEPoint pixels;
-
-        fontInstance->transformFunits(0, value, pixels);
-
-        xPlacementAdjustment += fontInstance->xPixelsToUnits(pixels.fX);
-        yPlacementAdjustment += fontInstance->yPixelsToUnits(pixels.fY);
-    }
-
-    if ((valueFormat & vfbXAdvance) != 0) {
-        le_int16 value = getFieldValue(index, valueFormat, vrfXAdvance);
-        LEPoint pixels;
-
-        fontInstance->transformFunits(value, 0, pixels);
-
-        xAdvanceAdjustment += fontInstance->xPixelsToUnits(pixels.fX);
-        yAdvanceAdjustment += fontInstance->yPixelsToUnits(pixels.fY);
-    }
-
-    if ((valueFormat & vfbYAdvance) != 0) {
-        le_int16 value = getFieldValue(index, valueFormat, vrfYAdvance);
-        LEPoint pixels;
-
-        fontInstance->transformFunits(0, value, pixels);
-
-        xAdvanceAdjustment += fontInstance->xPixelsToUnits(pixels.fX);
-        yAdvanceAdjustment += fontInstance->yPixelsToUnits(pixels.fY);
-    }
-
-    // FIXME: The device adjustments should really be transformed, but
-    // the only way I know how to do that is to convert them to le_int16 units,
-    // transform them, and then convert them back to pixels. Sigh...
-    if ((valueFormat & vfbAnyDevice) != 0) {
-        le_int16 xppem = (le_int16) fontInstance->getXPixelsPerEm();
-        le_int16 yppem = (le_int16) fontInstance->getYPixelsPerEm();
-
-        if ((valueFormat & vfbXPlaDevice) != 0) {
-            Offset dtOffset = getFieldValue(index, valueFormat, vrfXPlaDevice);
-
-            if (dtOffset != 0) {
-                const DeviceTable *dt = (const DeviceTable *) (base + dtOffset);
-                le_int16 xAdj = dt->getAdjustment(xppem);
-
-                xPlacementAdjustment += fontInstance->xPixelsToUnits(xAdj);
-            }
-        }
-
-        if ((valueFormat & vfbYPlaDevice) != 0) {
-            Offset dtOffset = getFieldValue(index, valueFormat, vrfYPlaDevice);
-
-            if (dtOffset != 0) {
-                const DeviceTable *dt = (const DeviceTable *) (base + dtOffset);
-                le_int16 yAdj = dt->getAdjustment(yppem);
-
-                yPlacementAdjustment += fontInstance->yPixelsToUnits(yAdj);
-            }
-        }
-
-        if ((valueFormat & vfbXAdvDevice) != 0) {
-            Offset dtOffset = getFieldValue(index, valueFormat, vrfXAdvDevice);
-
-            if (dtOffset != 0) {
-                const DeviceTable *dt = (const DeviceTable *) (base + dtOffset);
-                le_int16 xAdj = dt->getAdjustment(xppem);
-
-                xAdvanceAdjustment += fontInstance->xPixelsToUnits(xAdj);
-            }
-        }
-
-        if ((valueFormat & vfbYAdvDevice) != 0) {
-            Offset dtOffset = getFieldValue(index, valueFormat, vrfYAdvDevice);
-
-            if (dtOffset != 0) {
-                const DeviceTable *dt = (const DeviceTable *) (base + dtOffset);
-                le_int16 yAdj = dt->getAdjustment(yppem);
-
-                yAdvanceAdjustment += fontInstance->yPixelsToUnits(yAdj);
-            }
-        }
-    }
-
-    glyphIterator.adjustCurrGlyphPositionAdjustment(
-        xPlacementAdjustment, yPlacementAdjustment, xAdvanceAdjustment, yAdvanceAdjustment);
-}
-
-le_int16 ValueRecord::getSize(ValueFormat valueFormat)
-{
-    return getFieldCount(valueFormat) * sizeof(le_int16);
-}
-
-le_int16 ValueRecord::getFieldCount(ValueFormat valueFormat)
-{
-    static const le_int16 bitsInNibble[] =
-    {
-        0 + 0 + 0 + 0,
-        0 + 0 + 0 + 1,
-        0 + 0 + 1 + 0,
-        0 + 0 + 1 + 1,
-        0 + 1 + 0 + 0,
-        0 + 1 + 0 + 1,
-        0 + 1 + 1 + 0,
-        0 + 1 + 1 + 1,
-        1 + 0 + 0 + 0,
-        1 + 0 + 0 + 1,
-        1 + 0 + 1 + 0,
-        1 + 0 + 1 + 1,
-        1 + 1 + 0 + 0,
-        1 + 1 + 0 + 1,
-        1 + 1 + 1 + 0,
-        1 + 1 + 1 + 1
-    };
-
-    valueFormat &= ~vfbReserved;
-
-    return NibbleBits(valueFormat, 0) + NibbleBits(valueFormat, 1) +
-           NibbleBits(valueFormat, 2) + NibbleBits(valueFormat, 3);
-}
-
-le_int16 ValueRecord::getFieldIndex(ValueFormat valueFormat, ValueRecordField field)
-{
-    static const le_uint16 beforeMasks[] = 
-    {
-        0x0000,
-        0x0001,
-        0x0003,
-        0x0007,
-        0x000F,
-        0x001F,
-        0x003F,
-        0x007F,
-        0x00FF,
-        0x01FF,
-        0x03FF,
-        0x07FF,
-        0x0FFF,
-        0x1FFF,
-        0x3FFF,
-        0x7FFF,
-        0xFFFF
-    };
-
-    return getFieldCount(valueFormat & beforeMasks[field]);
-}
-
-U_NAMESPACE_END
diff --git a/icu4c/source/layout/ValueRecords.h b/icu4c/source/layout/ValueRecords.h
deleted file mode 100644 (file)
index 9c7f710..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved
- *
- */
-
-#ifndef __VALUERECORDS_H
-#define __VALUERECORDS_H
-
-/**
- * \file
- * \internal
- */
-
-#include "LETypes.h"
-#include "LEFontInstance.h"
-#include "OpenTypeTables.h"
-#include "GlyphIterator.h"
-
-U_NAMESPACE_BEGIN
-
-typedef le_uint16 ValueFormat;
-typedef le_int16 ValueRecordField;
-
-struct ValueRecord
-{
-    le_int16   values[ANY_NUMBER];
-
-    le_int16   getFieldValue(ValueFormat valueFormat, ValueRecordField field) const;
-    le_int16   getFieldValue(le_int16 index, ValueFormat valueFormat, ValueRecordField field) const;
-    void    adjustPosition(ValueFormat valueFormat, const char *base, GlyphIterator &glyphIterator,
-                const LEFontInstance *fontInstance) const;
-    void    adjustPosition(le_int16 index, ValueFormat valueFormat, const char *base, GlyphIterator &glyphIterator,
-                const LEFontInstance *fontInstance) const;
-
-    static le_int16    getSize(ValueFormat valueFormat);
-
-private:
-    static le_int16    getFieldCount(ValueFormat valueFormat);
-    static le_int16    getFieldIndex(ValueFormat valueFormat, ValueRecordField field);
-};
-LE_VAR_ARRAY(ValueRecord, values)
-
-enum ValueRecordFields
-{
-    vrfXPlacement   = 0,
-    vrfYPlacement   = 1,
-    vrfXAdvance     = 2,
-    vrfYAdvance     = 3,
-    vrfXPlaDevice   = 4,
-    vrfYPlaDevice   = 5,
-    vrfXAdvDevice   = 6,
-    vrfYAdvDevice   = 7
-};
-
-enum ValueFormatBits
-{
-    vfbXPlacement   = 0x0001,
-    vfbYPlacement   = 0x0002,
-    vfbXAdvance     = 0x0004,
-    vfbYAdvance     = 0x0008,
-    vfbXPlaDevice   = 0x0010,
-    vfbYPlaDevice   = 0x0020,
-    vfbXAdvDevice   = 0x0040,
-    vfbYAdvDevice   = 0x0080,
-    vfbReserved     = 0xFF00,
-    vfbAnyDevice    = vfbXPlaDevice + vfbYPlaDevice + vfbXAdvDevice + vfbYAdvDevice
-};
-
-U_NAMESPACE_END
-#endif
-
-
diff --git a/icu4c/source/layout/layout.rc b/icu4c/source/layout/layout.rc
deleted file mode 100644 (file)
index 3507f5f..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-// Do not edit with Microsoft Developer Studio Resource Editor.
-//   It will permanently substitute version numbers that are intended to be
-//   picked up by the pre-processor during each build.
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-// Copyright (c) 2001-2010 International Business Machines
-// Corporation and others. All Rights Reserved.
-//
-#include "../common/msvcres.h"
-
-#define APSTUDIO_READONLY_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 2 resource.
-//
-#include <winresrc.h>
-/////////////////////////////////////////////////////////////////////////////
-#undef APSTUDIO_READONLY_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-// 
-
-LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
-#pragma code_page(1252)
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-
-1 TEXTINCLUDE 
-BEGIN
-    "../common/msvcres.h\0"
-END
-
-2 TEXTINCLUDE 
-BEGIN
-    "#include <winresrc.h>\0"
-END
-
-3 TEXTINCLUDE 
-BEGIN
-    "\r\n"
-    "\0"
-END
-
-#endif    // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Version
-//
-#define STR(s) #s
-#define CommaVersionString(a, b, c, d) STR(a) ", " STR(b) ", " STR(c) ", " STR(d) "\0"
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, U_ICU_VERSION_BUILDLEVEL_NUM
- PRODUCTVERSION U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, U_ICU_VERSION_BUILDLEVEL_NUM
- FILEFLAGSMASK 0x3fL
-#ifdef _DEBUG
- FILEFLAGS 0x1L
-#else
- FILEFLAGS 0x0L
-#endif
- FILEOS VOS__WINDOWS32
- FILETYPE VFT_DLL
- FILESUBTYPE 0x0L
-BEGIN
-    BLOCK "StringFileInfo"
-    BEGIN
-        BLOCK "00000000"
-        BEGIN
-            VALUE "Comments", ICU_WEBSITE "\0"
-            VALUE "CompanyName", ICU_COMPANY "\0"
-            VALUE "FileDescription", ICU_PRODUCT_PREFIX " Layout DLL\0"
-            VALUE "FileVersion",  CommaVersionString(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, U_ICU_VERSION_BUILDLEVEL_NUM)
-            VALUE "LegalCopyright", U_COPYRIGHT_STRING "\0"
-#ifdef _DEBUG
-            VALUE "OriginalFilename", "icule" U_ICU_VERSION_SHORT "d.dll\0"
-#else
-            VALUE "OriginalFilename", "icule" U_ICU_VERSION_SHORT ".dll\0"
-#endif
-            VALUE "PrivateBuild", "\0"
-            VALUE "ProductName", ICU_PRODUCT "\0"
-            VALUE "ProductVersion", CommaVersionString(U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM, U_ICU_VERSION_PATCHLEVEL_NUM, U_ICU_VERSION_BUILDLEVEL_NUM)
-            VALUE "SpecialBuild", "\0"
-        END
-    END
-    BLOCK "VarFileInfo"
-    BEGIN
-        VALUE "Translation", 0x000, 0000
-    END
-END
-
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-#ifndef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 3 resource.
-//
-
-
-/////////////////////////////////////////////////////////////////////////////
-#endif    // not APSTUDIO_INVOKED
-
diff --git a/icu4c/source/layout/layout.vcxproj b/icu4c/source/layout/layout.vcxproj
deleted file mode 100644 (file)
index 62e4795..0000000
+++ /dev/null
@@ -1,583 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{C920062A-0647-4553-A3B2-37C58065664B}</ProjectGuid>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-    <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v140</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-    <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v140</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-    <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v140</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
-    <UseOfMfc>false</UseOfMfc>
-    <CharacterSet>MultiByte</CharacterSet>
-    <PlatformToolset>v140</PlatformToolset>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-    <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup>
-    <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\..\..\lib\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\x86\Debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\..\..\lib\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\x86\Release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\x64\Debug\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\x64\Debug\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\x64\Release\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\x64\Release\</IntDir>
-    <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\..\..\lib\iculed.tlb</TypeLibraryName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>..\..\include;..\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;U_LAYOUT_IMPLEMENTATION;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <BufferSecurityCheck>true</BufferSecurityCheck>
-      <DisableLanguageExtensions>true</DisableLanguageExtensions>
-      <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
-      <PrecompiledHeaderOutputFile>.\x86\Debug/layout.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\x86\Debug/</AssemblerListingLocation>
-      <ObjectFileName>.\x86\Debug/</ObjectFileName>
-      <ProgramDataBaseFileName>.\x86\Debug/</ProgramDataBaseFileName>
-      <BrowseInformation>true</BrowseInformation>
-      <WarningLevel>Level3</WarningLevel>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-      <AdditionalIncludeDirectories>..\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-    </ResourceCompile>
-    <Link>
-      <OutputFile>..\..\bin\icule58d.dll</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>.\..\..\lib\iculed.pdb</ProgramDatabaseFile>
-      <BaseAddress>0x4ac00000</BaseAddress>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <ImportLibrary>..\..\lib\iculed.lib</ImportLibrary>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>Win32</TargetEnvironment>
-      <TypeLibraryName>.\..\..\lib\icule.tlb</TypeLibraryName>
-    </Midl>
-    <ClCompile>
-      <AdditionalIncludeDirectories>..\..\include;..\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_CRT_SECURE_NO_DEPRECATE;U_LAYOUT_IMPLEMENTATION;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <StringPooling>true</StringPooling>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <DisableLanguageExtensions>true</DisableLanguageExtensions>
-      <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
-      <PrecompiledHeaderOutputFile>.\x86\Release/layout.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\x86\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\x86\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\x86\Release/</ProgramDataBaseFileName>
-      <WarningLevel>Level3</WarningLevel>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-      <AdditionalIncludeDirectories>..\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-    </ResourceCompile>
-    <Link>
-      <OutputFile>..\..\bin\icule58.dll</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <ProgramDatabaseFile>.\..\..\lib\icule.pdb</ProgramDatabaseFile>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <BaseAddress>0x4ac00000</BaseAddress>
-      <RandomizedBaseAddress>false</RandomizedBaseAddress>
-      <DataExecutionPrevention>
-      </DataExecutionPrevention>
-      <ImportLibrary>..\..\lib\icule.lib</ImportLibrary>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Midl>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>X64</TargetEnvironment>
-      <TypeLibraryName>.\..\..\lib64\iculed.tlb</TypeLibraryName>
-    </Midl>
-    <ClCompile>
-      <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>..\..\include;..\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;WIN32;_DEBUG;_CRT_SECURE_NO_DEPRECATE;U_LAYOUT_IMPLEMENTATION;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
-      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
-      <BufferSecurityCheck>true</BufferSecurityCheck>
-      <DisableLanguageExtensions>true</DisableLanguageExtensions>
-      <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
-      <PrecompiledHeaderOutputFile>.\x64\Debug/layout.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\x64\Debug/</AssemblerListingLocation>
-      <ObjectFileName>.\x64\Debug/</ObjectFileName>
-      <ProgramDataBaseFileName>.\x64\Debug/</ProgramDataBaseFileName>
-      <BrowseInformation>true</BrowseInformation>
-      <WarningLevel>Level3</WarningLevel>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-      <AdditionalIncludeDirectories>..\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-    </ResourceCompile>
-    <Link>
-      <OutputFile>..\..\bin64\icule58d.dll</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <ProgramDatabaseFile>.\..\..\lib64\iculed.pdb</ProgramDatabaseFile>
-      <BaseAddress>0x4ac00000</BaseAddress>
-      <ImportLibrary>..\..\lib64\iculed.lib</ImportLibrary>
-      <TargetMachine>MachineX64</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Midl>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <MkTypLibCompatible>true</MkTypLibCompatible>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <TargetEnvironment>X64</TargetEnvironment>
-      <TypeLibraryName>.\..\..\lib64\icule.tlb</TypeLibraryName>
-    </Midl>
-    <ClCompile>
-      <AdditionalIncludeDirectories>..\..\include;..\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <PreprocessorDefinitions>WIN64;WIN32;NDEBUG;_CRT_SECURE_NO_DEPRECATE;U_LAYOUT_IMPLEMENTATION;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <StringPooling>true</StringPooling>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <DisableLanguageExtensions>true</DisableLanguageExtensions>
-      <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
-      <PrecompiledHeaderOutputFile>.\x64\Release/layout.pch</PrecompiledHeaderOutputFile>
-      <AssemblerListingLocation>.\x64\Release/</AssemblerListingLocation>
-      <ObjectFileName>.\x64\Release/</ObjectFileName>
-      <ProgramDataBaseFileName>.\x64\Release/</ProgramDataBaseFileName>
-      <WarningLevel>Level3</WarningLevel>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <CompileAs>Default</CompileAs>
-    </ClCompile>
-    <ResourceCompile>
-      <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <Culture>0x0409</Culture>
-      <AdditionalIncludeDirectories>..\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-    </ResourceCompile>
-    <Link>
-      <OutputFile>..\..\bin64\icule58.dll</OutputFile>
-      <SuppressStartupBanner>true</SuppressStartupBanner>
-      <ProgramDatabaseFile>.\..\..\lib64\icule.pdb</ProgramDatabaseFile>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <BaseAddress>0x4ac00000</BaseAddress>
-      <ImportLibrary>..\..\lib64\icule.lib</ImportLibrary>
-      <TargetMachine>MachineX64</TargetMachine>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClCompile Include="AlternateSubstSubtables.cpp" />
-    <ClCompile Include="AnchorTables.cpp" />
-    <ClCompile Include="ArabicLayoutEngine.cpp" />
-    <ClCompile Include="ArabicShaping.cpp" />
-    <ClCompile Include="CanonData.cpp" />
-    <ClCompile Include="CanonShaping.cpp" />
-    <ClCompile Include="ClassDefinitionTables.cpp" />
-    <ClCompile Include="ContextualGlyphInsertionProc2.cpp" />
-    <ClCompile Include="ContextualGlyphSubstProc.cpp" />
-    <ClCompile Include="ContextualGlyphSubstProc2.cpp" />
-    <ClCompile Include="ContextualSubstSubtables.cpp" />
-    <ClCompile Include="CoverageTables.cpp" />
-    <ClCompile Include="CursiveAttachmentSubtables.cpp" />
-    <ClCompile Include="DeviceTables.cpp" />
-    <ClCompile Include="ExtensionSubtables.cpp" />
-    <ClCompile Include="Features.cpp" />
-    <ClCompile Include="GDEFMarkFilter.cpp" />
-    <ClCompile Include="GlyphDefinitionTables.cpp" />
-    <ClCompile Include="GlyphIterator.cpp" />
-    <ClCompile Include="GlyphLookupTables.cpp" />
-    <ClCompile Include="GlyphPositionAdjustments.cpp" />
-    <ClCompile Include="GlyphPositioningTables.cpp" />
-    <ClCompile Include="GlyphPosnLookupProc.cpp" />
-    <ClCompile Include="GlyphSubstitutionTables.cpp" />
-    <ClCompile Include="GlyphSubstLookupProc.cpp" />
-    <ClCompile Include="GXLayoutEngine.cpp" />
-    <ClCompile Include="GXLayoutEngine2.cpp" />
-    <ClCompile Include="HangulLayoutEngine.cpp" />
-    <ClCompile Include="HanLayoutEngine.cpp" />
-    <ClCompile Include="IndicClassTables.cpp" />
-    <ClCompile Include="IndicLayoutEngine.cpp" />
-    <ClCompile Include="IndicRearrangementProcessor.cpp" />
-    <ClCompile Include="IndicRearrangementProcessor2.cpp" />
-    <ClCompile Include="IndicReordering.cpp" />
-    <ClCompile Include="KernTable.cpp" />
-    <ClCompile Include="KhmerLayoutEngine.cpp" />
-    <ClCompile Include="KhmerReordering.cpp" />
-    <ClCompile Include="LayoutEngine.cpp" />
-    <ClCompile Include="LEFontInstance.cpp" />
-    <ClCompile Include="LEGlyphStorage.cpp" />
-    <ClCompile Include="LEInsertionList.cpp" />
-    <ClCompile Include="LigatureSubstProc.cpp" />
-    <ClCompile Include="LigatureSubstProc2.cpp" />
-    <ClCompile Include="LigatureSubstSubtables.cpp" />
-    <ClCompile Include="loengine.cpp" />
-    <ClCompile Include="LookupProcessor.cpp" />
-    <ClCompile Include="Lookups.cpp" />
-    <ClCompile Include="LookupTables.cpp" />
-    <ClCompile Include="MarkArrays.cpp" />
-    <ClCompile Include="MarkToBasePosnSubtables.cpp" />
-    <ClCompile Include="MarkToLigaturePosnSubtables.cpp" />
-    <ClCompile Include="MarkToMarkPosnSubtables.cpp" />
-    <ClCompile Include="MirroredCharData.cpp" />
-    <ClCompile Include="MorphTables.cpp" />
-    <ClCompile Include="MorphTables2.cpp" />
-    <ClCompile Include="MPreFixups.cpp" />
-    <ClCompile Include="MultipleSubstSubtables.cpp" />
-    <ClCompile Include="NonContextualGlyphSubstProc.cpp" />
-    <ClCompile Include="NonContextualGlyphSubstProc2.cpp" />
-    <ClCompile Include="OpenTypeLayoutEngine.cpp" />
-    <ClCompile Include="OpenTypeUtilities.cpp" />
-    <ClCompile Include="PairPositioningSubtables.cpp" />
-    <ClCompile Include="ScriptAndLanguage.cpp" />
-    <ClCompile Include="ScriptAndLanguageTags.cpp" />
-    <ClCompile Include="SegmentArrayProcessor.cpp" />
-    <ClCompile Include="SegmentArrayProcessor2.cpp" />
-    <ClCompile Include="SegmentSingleProcessor.cpp" />
-    <ClCompile Include="SegmentSingleProcessor2.cpp" />
-    <ClCompile Include="ShapingTypeData.cpp" />
-    <ClCompile Include="SimpleArrayProcessor.cpp" />
-    <ClCompile Include="SimpleArrayProcessor2.cpp" />
-    <ClCompile Include="SinglePositioningSubtables.cpp" />
-    <ClCompile Include="SingleSubstitutionSubtables.cpp" />
-    <ClCompile Include="SingleTableProcessor.cpp" />
-    <ClCompile Include="SingleTableProcessor2.cpp" />
-    <ClCompile Include="StateTableProcessor.cpp" />
-    <ClCompile Include="StateTableProcessor2.cpp" />
-    <ClCompile Include="SubstitutionLookups.cpp" />
-    <ClCompile Include="SubtableProcessor.cpp" />
-    <ClCompile Include="SubtableProcessor2.cpp" />
-    <ClCompile Include="ThaiLayoutEngine.cpp" />
-    <ClCompile Include="ThaiShaping.cpp" />
-    <ClCompile Include="ThaiStateTables.cpp" />
-    <ClCompile Include="TibetanLayoutEngine.cpp" />
-    <ClCompile Include="TibetanReordering.cpp" />
-    <ClCompile Include="TrimmedArrayProcessor.cpp" />
-    <ClCompile Include="TrimmedArrayProcessor2.cpp" />
-    <ClCompile Include="ValueRecords.cpp" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="AlternateSubstSubtables.h" />
-    <ClInclude Include="AnchorTables.h" />
-    <ClInclude Include="ArabicLayoutEngine.h" />
-    <ClInclude Include="ArabicShaping.h" />
-    <ClInclude Include="AttachmentPosnSubtables.h" />
-    <ClInclude Include="CanonShaping.h" />
-    <ClInclude Include="CharSubstitutionFilter.h" />
-    <ClInclude Include="ClassDefinitionTables.h" />
-    <ClInclude Include="ContextualGlyphInsertion.h" />
-    <ClInclude Include="ContextualGlyphInsertionProc2.h" />
-    <ClInclude Include="ContextualGlyphSubstitution.h" />
-    <ClInclude Include="ContextualGlyphSubstProc.h" />
-    <ClInclude Include="ContextualGlyphSubstProc2.h" />
-    <ClInclude Include="ContextualSubstSubtables.h" />
-    <ClInclude Include="CoverageTables.h" />
-    <ClInclude Include="CursiveAttachmentSubtables.h" />
-    <ClInclude Include="DefaultCharMapper.h" />
-    <ClInclude Include="DeviceTables.h" />
-    <ClInclude Include="ExtensionSubtables.h" />
-    <ClInclude Include="GDEFMarkFilter.h" />
-    <ClInclude Include="GlyphDefinitionTables.h" />
-    <ClInclude Include="GlyphIterator.h" />
-    <ClInclude Include="GlyphLookupTables.h" />
-    <ClInclude Include="GlyphPositionAdjustments.h" />
-    <ClInclude Include="GlyphPositioningTables.h" />
-    <ClInclude Include="GlyphPosnLookupProc.h" />
-    <ClInclude Include="GlyphSubstitutionTables.h" />
-    <ClInclude Include="GlyphSubstLookupProc.h" />
-    <ClInclude Include="GXLayoutEngine.h" />
-    <ClInclude Include="GXLayoutEngine2.h" />
-    <ClInclude Include="HangulLayoutEngine.h" />
-    <ClInclude Include="HanLayoutEngine.h" />
-    <ClInclude Include="ICUFeatures.h" />
-    <ClInclude Include="IndicLayoutEngine.h" />
-    <ClInclude Include="IndicRearrangement.h" />
-    <ClInclude Include="IndicRearrangementProcessor.h" />
-    <ClInclude Include="IndicRearrangementProcessor2.h" />
-    <ClInclude Include="IndicReordering.h" />
-    <ClInclude Include="KernTable.h" />
-    <ClInclude Include="KhmerLayoutEngine.h" />
-    <ClInclude Include="KhmerReordering.h" />
-    <CustomBuild Include="LayoutEngine.h">
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-    </CustomBuild>
-    <ClInclude Include="LayoutTables.h" />
-    <CustomBuild Include="LEFontInstance.h">
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-    </CustomBuild>
-    <CustomBuild Include="LEGlyphFilter.h">
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-    </CustomBuild>
-    <CustomBuild Include="LEGlyphStorage.h">
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-    </CustomBuild>
-    <CustomBuild Include="LEInsertionList.h">
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-    </CustomBuild>
-    <CustomBuild Include="LELanguages.h">
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-    </CustomBuild>
-    <CustomBuild Include="LEScripts.h">
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-    </CustomBuild>
-    <CustomBuild Include="LESwaps.h">
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-    </CustomBuild>
-    <CustomBuild Include="LETypes.h">
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-    </CustomBuild>
-    <ClInclude Include="LigatureSubstitution.h" />
-    <ClInclude Include="LigatureSubstProc.h" />
-    <ClInclude Include="LigatureSubstProc2.h" />
-    <ClInclude Include="LigatureSubstSubtables.h" />
-    <CustomBuild Include="loengine.h">
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">copy "%(FullPath)" ..\..\include\layout
-</Command>
-      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\..\include\layout\%(Filename)%(Extension);%(Outputs)</Outputs>
-    </CustomBuild>
-    <ClInclude Include="LookupProcessor.h" />
-    <ClInclude Include="Lookups.h" />
-    <ClInclude Include="LookupTables.h" />
-    <ClInclude Include="MarkArrays.h" />
-    <ClInclude Include="MarkToBasePosnSubtables.h" />
-    <ClInclude Include="MarkToLigaturePosnSubtables.h" />
-    <ClInclude Include="MarkToMarkPosnSubtables.h" />
-    <ClInclude Include="MorphStateTables.h" />
-    <ClInclude Include="MorphTables.h" />
-    <ClInclude Include="MPreFixups.h" />
-    <ClInclude Include="MultipleSubstSubtables.h" />
-    <ClInclude Include="NonContextualGlyphSubst.h" />
-    <ClInclude Include="NonContextualGlyphSubstProc.h" />
-    <ClInclude Include="NonContextualGlyphSubstProc2.h" />
-    <ClInclude Include="OpenTypeLayoutEngine.h" />
-    <ClInclude Include="OpenTypeTables.h" />
-    <ClInclude Include="OpenTypeUtilities.h" />
-    <ClInclude Include="PairPositioningSubtables.h" />
-    <ClInclude Include="ScriptAndLanguage.h" />
-    <ClInclude Include="ScriptAndLanguageTags.h" />
-    <ClInclude Include="SegmentArrayProcessor.h" />
-    <ClInclude Include="SegmentArrayProcessor2.h" />
-    <ClInclude Include="SegmentSingleProcessor.h" />
-    <ClInclude Include="SegmentSingleProcessor2.h" />
-    <ClInclude Include="SimpleArrayProcessor.h" />
-    <ClInclude Include="SimpleArrayProcessor2.h" />
-    <ClInclude Include="SinglePositioningSubtables.h" />
-    <ClInclude Include="SingleSubstitutionSubtables.h" />
-    <ClInclude Include="SingleTableProcessor.h" />
-    <ClInclude Include="SingleTableProcessor2.h" />
-    <ClInclude Include="StateTableProcessor.h" />
-    <ClInclude Include="StateTableProcessor2.h" />
-    <ClInclude Include="StateTables.h" />
-    <ClInclude Include="SubstitutionLookups.h" />
-    <ClInclude Include="SubtableProcessor.h" />
-    <ClInclude Include="SubtableProcessor2.h" />
-    <ClInclude Include="ThaiLayoutEngine.h" />
-    <ClInclude Include="ThaiShaping.h" />
-    <ClInclude Include="TibetanLayoutEngine.h" />
-    <ClInclude Include="TibetanReordering.h" />
-    <ClInclude Include="TrimmedArrayProcessor.h" />
-    <ClInclude Include="TrimmedArrayProcessor2.h" />
-    <ClInclude Include="ValueRecords.h" />
-  </ItemGroup>
-  <ItemGroup>
-    <ResourceCompile Include="layout.rc" />
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="..\common\common.vcxproj">
-      <Project>{73c0a65b-d1f2-4de1-b3a6-15dad2c23f3d}</Project>
-      <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
-</Project>
\ No newline at end of file
diff --git a/icu4c/source/layout/layout.vcxproj.filters b/icu4c/source/layout/layout.vcxproj.filters
deleted file mode 100644 (file)
index a409d56..0000000
+++ /dev/null
@@ -1,589 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup>
-    <Filter Include="Source Files">
-      <UniqueIdentifier>{612bee68-b22e-47ed-8cb2-2c5ca5ea6350}</UniqueIdentifier>
-      <Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>
-    </Filter>
-    <Filter Include="Header Files">
-      <UniqueIdentifier>{6ccc0372-c74a-4a85-b31a-da1c0c72b56d}</UniqueIdentifier>
-      <Extensions>h;hpp;hxx;hm;inl</Extensions>
-    </Filter>
-    <Filter Include="Resource Files">
-      <UniqueIdentifier>{ea7162f2-e3c7-47a7-98aa-e19c06f9e195}</UniqueIdentifier>
-      <Extensions>ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>
-    </Filter>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="AlternateSubstSubtables.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="AnchorTables.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="ArabicLayoutEngine.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="ArabicShaping.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="CanonData.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="CanonShaping.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="ClassDefinitionTables.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="ContextualGlyphInsertionProc2.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="ContextualGlyphSubstProc.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="ContextualGlyphSubstProc2.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="ContextualSubstSubtables.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="CoverageTables.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="CursiveAttachmentSubtables.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="DeviceTables.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="ExtensionSubtables.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="Features.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="GDEFMarkFilter.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="GlyphDefinitionTables.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="GlyphIterator.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="GlyphLookupTables.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="GlyphPositionAdjustments.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="GlyphPositioningTables.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="GlyphPosnLookupProc.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="GlyphSubstitutionTables.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="GlyphSubstLookupProc.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="GXLayoutEngine.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="GXLayoutEngine2.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="HangulLayoutEngine.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="HanLayoutEngine.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="IndicClassTables.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="IndicLayoutEngine.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="IndicRearrangementProcessor.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="IndicRearrangementProcessor2.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="IndicReordering.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="KernTable.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="KhmerLayoutEngine.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="KhmerReordering.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="LayoutEngine.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="LEFontInstance.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="LEGlyphStorage.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="LEInsertionList.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="LigatureSubstProc.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="LigatureSubstProc2.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="LigatureSubstSubtables.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="loengine.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="LookupProcessor.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="Lookups.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="LookupTables.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="MarkArrays.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="MarkToBasePosnSubtables.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="MarkToLigaturePosnSubtables.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="MarkToMarkPosnSubtables.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="MirroredCharData.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="MorphTables.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="MorphTables2.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="MPreFixups.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="MultipleSubstSubtables.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="NonContextualGlyphSubstProc.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="NonContextualGlyphSubstProc2.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="OpenTypeLayoutEngine.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="OpenTypeUtilities.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="PairPositioningSubtables.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="ScriptAndLanguage.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="ScriptAndLanguageTags.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="SegmentArrayProcessor.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="SegmentArrayProcessor2.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="SegmentSingleProcessor.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="SegmentSingleProcessor2.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="ShapingTypeData.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="SimpleArrayProcessor.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="SimpleArrayProcessor2.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="SinglePositioningSubtables.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="SingleSubstitutionSubtables.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="SingleTableProcessor.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="SingleTableProcessor2.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="StateTableProcessor.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="StateTableProcessor2.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="SubstitutionLookups.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="SubtableProcessor.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="SubtableProcessor2.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="ThaiLayoutEngine.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="ThaiShaping.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="ThaiStateTables.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="TibetanLayoutEngine.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="TibetanReordering.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="TrimmedArrayProcessor.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="TrimmedArrayProcessor2.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-    <ClCompile Include="ValueRecords.cpp">
-      <Filter>Source Files</Filter>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="AlternateSubstSubtables.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="AnchorTables.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="ArabicLayoutEngine.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="ArabicShaping.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="AttachmentPosnSubtables.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="CanonShaping.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="CharSubstitutionFilter.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="ClassDefinitionTables.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="ContextualGlyphInsertion.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="ContextualGlyphInsertionProc2.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="ContextualGlyphSubstitution.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="ContextualGlyphSubstProc.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="ContextualGlyphSubstProc2.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="ContextualSubstSubtables.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="CoverageTables.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="CursiveAttachmentSubtables.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="DefaultCharMapper.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="DeviceTables.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="ExtensionSubtables.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="GDEFMarkFilter.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="GlyphDefinitionTables.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="GlyphIterator.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="GlyphLookupTables.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="GlyphPositionAdjustments.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="GlyphPositioningTables.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="GlyphPosnLookupProc.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="GlyphSubstitutionTables.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="GlyphSubstLookupProc.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="GXLayoutEngine.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="GXLayoutEngine2.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="HangulLayoutEngine.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="HanLayoutEngine.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="ICUFeatures.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="IndicLayoutEngine.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="IndicRearrangement.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="IndicRearrangementProcessor.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="IndicRearrangementProcessor2.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="IndicReordering.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="KernTable.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="KhmerLayoutEngine.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="KhmerReordering.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="LayoutTables.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="LigatureSubstitution.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="LigatureSubstProc.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="LigatureSubstProc2.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="LigatureSubstSubtables.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="LookupProcessor.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="Lookups.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="LookupTables.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="MarkArrays.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="MarkToBasePosnSubtables.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="MarkToLigaturePosnSubtables.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="MarkToMarkPosnSubtables.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="MorphStateTables.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="MorphTables.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="MPreFixups.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="MultipleSubstSubtables.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="NonContextualGlyphSubst.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="NonContextualGlyphSubstProc.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="NonContextualGlyphSubstProc2.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="OpenTypeLayoutEngine.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="OpenTypeTables.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="OpenTypeUtilities.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="PairPositioningSubtables.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="ScriptAndLanguage.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="ScriptAndLanguageTags.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="SegmentArrayProcessor.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="SegmentArrayProcessor2.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="SegmentSingleProcessor.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="SegmentSingleProcessor2.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="SimpleArrayProcessor.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="SimpleArrayProcessor2.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="SinglePositioningSubtables.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="SingleSubstitutionSubtables.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="SingleTableProcessor.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="SingleTableProcessor2.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="StateTableProcessor.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="StateTableProcessor2.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="StateTables.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="SubstitutionLookups.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="SubtableProcessor.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="SubtableProcessor2.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="ThaiLayoutEngine.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="ThaiShaping.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="TibetanLayoutEngine.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="TibetanReordering.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="TrimmedArrayProcessor.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="TrimmedArrayProcessor2.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="ValueRecords.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-  </ItemGroup>
-  <ItemGroup>
-    <ResourceCompile Include="layout.rc">
-      <Filter>Resource Files</Filter>
-    </ResourceCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <CustomBuild Include="LayoutEngine.h">
-      <Filter>Header Files</Filter>
-    </CustomBuild>
-    <CustomBuild Include="LEFontInstance.h">
-      <Filter>Header Files</Filter>
-    </CustomBuild>
-    <CustomBuild Include="LEGlyphFilter.h">
-      <Filter>Header Files</Filter>
-    </CustomBuild>
-    <CustomBuild Include="LEGlyphStorage.h">
-      <Filter>Header Files</Filter>
-    </CustomBuild>
-    <CustomBuild Include="LEInsertionList.h">
-      <Filter>Header Files</Filter>
-    </CustomBuild>
-    <CustomBuild Include="LELanguages.h">
-      <Filter>Header Files</Filter>
-    </CustomBuild>
-    <CustomBuild Include="LEScripts.h">
-      <Filter>Header Files</Filter>
-    </CustomBuild>
-    <CustomBuild Include="LESwaps.h">
-      <Filter>Header Files</Filter>
-    </CustomBuild>
-    <CustomBuild Include="LETypes.h">
-      <Filter>Header Files</Filter>
-    </CustomBuild>
-    <CustomBuild Include="loengine.h">
-      <Filter>Header Files</Filter>
-    </CustomBuild>
-  </ItemGroup>
-</Project>
\ No newline at end of file
diff --git a/icu4c/source/layout/loengine.cpp b/icu4c/source/layout/loengine.cpp
deleted file mode 100644 (file)
index 3fdd1f2..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2007 - All Rights Reserved
- *
- */
-
-#include "LETypes.h"
-#include "loengine.h"
-#include "LayoutEngine.h"
-
-/**
- * \file 
- * \brief C API for complex text layout.
- */
-
-U_NAMESPACE_USE
-
-U_CAPI le_engine * U_EXPORT2
-le_create(const le_font *font,
-                 le_int32 scriptCode,
-                 le_int32 languageCode,
-                 le_int32 typo_flags,
-                 LEErrorCode *success)
-{
-       LEFontInstance *fontInstance = (LEFontInstance *) font;
-
-       return (le_engine *) LayoutEngine::layoutEngineFactory(fontInstance, scriptCode, languageCode, typo_flags, *success);
-}
-
-U_CAPI void U_EXPORT2
-le_close(le_engine *engine)
-{
-       LayoutEngine *le = (LayoutEngine *) engine;
-
-       delete le;
-}
-
-U_CAPI le_int32 U_EXPORT2
-le_layoutChars(le_engine *engine,
-                          const LEUnicode chars[],
-                          le_int32 offset,
-                          le_int32 count,
-                          le_int32 max,
-                          le_bool rightToLeft,
-                          float x,
-                          float y,
-                          LEErrorCode *success)
-{
-       LayoutEngine *le = (LayoutEngine *) engine;
-
-       if (le == NULL) {
-               *success = LE_ILLEGAL_ARGUMENT_ERROR;
-               return -1;
-       }
-
-       return le->layoutChars(chars, offset, count, max, rightToLeft, x, y, *success);
-}
-
-U_CAPI le_int32 U_EXPORT2
-le_getGlyphCount(le_engine *engine,
-                                LEErrorCode *success)
-{
-       LayoutEngine *le = (LayoutEngine *) engine;
-
-       if (le == NULL) {
-               *success = LE_ILLEGAL_ARGUMENT_ERROR;
-               return -1;
-       }
-
-       return le->getGlyphCount();
-}
-
-U_CAPI void U_EXPORT2
-le_getGlyphs(le_engine *engine,
-                        LEGlyphID glyphs[],
-                        LEErrorCode *success)
-{
-       LayoutEngine *le = (LayoutEngine *) engine;
-
-       if (le == NULL) {
-               *success = LE_ILLEGAL_ARGUMENT_ERROR;
-               return;
-       }
-
-       le->getGlyphs(glyphs, *success);
-}
-
-U_CAPI void U_EXPORT2
-le_getCharIndices(le_engine *engine,
-                                 le_int32 charIndices[],
-                                 LEErrorCode *success)
-{
-       LayoutEngine *le = (LayoutEngine *) engine;
-
-       if (le == NULL) {
-               *success = LE_ILLEGAL_ARGUMENT_ERROR;
-               return;
-       }
-
-       le->getCharIndices(charIndices, *success);
-}
-
-U_CAPI void U_EXPORT2
-le_getCharIndicesWithBase(le_engine *engine,
-                                         le_int32 charIndices[],
-                                         le_int32 indexBase,
-                                         LEErrorCode *success)
-{
-       LayoutEngine *le = (LayoutEngine *) engine;
-
-       if (le == NULL) {
-               *success = LE_ILLEGAL_ARGUMENT_ERROR;
-               return;
-       }
-
-       le->getCharIndices(charIndices, indexBase, *success);
-}
-
-U_CAPI void U_EXPORT2
-le_getGlyphPositions(le_engine *engine,
-                                        float positions[],
-                                        LEErrorCode *success)
-{
-       LayoutEngine *le = (LayoutEngine *) engine;
-
-       if (le == NULL) {
-               *success = LE_ILLEGAL_ARGUMENT_ERROR;
-               return;
-       }
-
-       le->getGlyphPositions(positions, *success);
-}
-
-U_CAPI void U_EXPORT2
-le_getGlyphPosition(le_engine *engine,
-                                       le_int32 glyphIndex,
-                                       float *x,
-                                       float *y,
-                                       LEErrorCode *success)
-{
-       LayoutEngine *le = (LayoutEngine *) engine;
-
-       if (le == NULL) {
-               *success = LE_ILLEGAL_ARGUMENT_ERROR;
-               return;
-       }
-
-       le->getGlyphPosition(glyphIndex, *x, *y, *success);
-}
-
-U_CAPI void U_EXPORT2
-le_reset(le_engine *engine,
-                LEErrorCode *success)
-{
-       LayoutEngine *le = (LayoutEngine *) engine;
-
-       if (le == NULL) {
-               *success = LE_ILLEGAL_ARGUMENT_ERROR;
-               return;
-       }
-
-       le->reset();
-}
diff --git a/icu4c/source/layout/loengine.h b/icu4c/source/layout/loengine.h
deleted file mode 100644 (file)
index ba5cc76..0000000
+++ /dev/null
@@ -1,227 +0,0 @@
-// Copyright (C) 2016 and later: Unicode, Inc. and others.
-// License & terms of use: http://www.unicode.org/copyright.html
-/*
- *
- * (C) Copyright IBM Corp. 1998-2011 - All Rights Reserved
- *
- */
-
-#ifndef __LOENGINE_H
-#define __LOENGINE_H
-
-#include "LETypes.h"
-
-#ifndef U_HIDE_INTERNAL_API
-/**
- * \file 
- * \brief C API for complex text layout.
- * \internal
- *
- * This is a technology preview. The API may
- * change significantly.
- *
- */
-
-/**
- * The opaque type for a LayoutEngine.
- *
- * @internal
- */
-typedef void le_engine;
-
-/**
- * The opaque type for a font instance.
- *
- * @internal
- */
-typedef void le_font;
-
-/**
- * This function returns an le_engine capable of laying out text
- * in the given font, script and langauge. Note that the LayoutEngine
- * returned may be a subclass of LayoutEngine.
- *
- * @param font - the font of the text
- * @param scriptCode - the script of the text
- * @param languageCode - the language of the text
- * @param typo_flags - flags that control layout features like kerning and ligatures.
- * @param success - output parameter set to an error code if the operation fails
- *
- * @return an le_engine which can layout text in the given font.
- *
- * @internal
- */
-U_INTERNAL le_engine * U_EXPORT2
-le_create(const le_font *font,
-          le_int32 scriptCode,
-          le_int32 languageCode,
-          le_int32 typo_flags,
-          LEErrorCode *success);
-
-/**
- * This function closes the given LayoutEngine. After
- * it returns, the le_engine is no longer valid.
- *
- * @param engine - the LayoutEngine to close.
- *
- * @internal
- */
-U_INTERNAL void U_EXPORT2
-le_close(le_engine *engine);
-
-/**
- * This routine will compute the glyph, character index and position arrays.
- *
- * @param engine - the LayoutEngine
- * @param chars - the input character context
- * @param offset - the offset of the first character to process
- * @param count - the number of characters to process
- * @param max - the number of characters in the input context
- * @param rightToLeft - TRUE if the characers are in a right to left directional run
- * @param x - the initial X position
- * @param y - the initial Y position
- * @param success - output parameter set to an error code if the operation fails
- *
- * @return the number of glyphs in the glyph array
- *
- * Note: The glyph, character index and position array can be accessed
- * using the getter routines below.
- *
- * Note: If you call this function more than once, you must call the reset()
- * function first to free the glyph, character index and position arrays
- * allocated by the previous call.
- *
- * @internal
- */
-U_INTERNAL le_int32 U_EXPORT2
-le_layoutChars(le_engine *engine,
-               const LEUnicode chars[],
-               le_int32 offset,
-               le_int32 count,
-               le_int32 max,
-               le_bool rightToLeft,
-               float x,
-               float y,
-               LEErrorCode *success);
-
-/**
- * This function returns the number of glyphs in the glyph array. Note
- * that the number of glyphs will be greater than or equal to the number
- * of characters used to create the LayoutEngine.
- *
- * @param engine - the LayoutEngine
- * @param success - output parameter set to an error code if the operation fails.
- *
- * @return the number of glyphs in the glyph array
- *
- * @internal
- */
-U_INTERNAL le_int32 U_EXPORT2
-le_getGlyphCount(le_engine *engine,
-                 LEErrorCode *success);
-
-/**
- * This function copies the glyph array into a caller supplied array.
- * The caller must ensure that the array is large enough to hold all
- * the glyphs.
- *
- * @param engine - the LayoutEngine
- * @param glyphs - the destiniation glyph array
- * @param success - set to an error code if the operation fails
- *
- * @internal
- */
-U_INTERNAL void U_EXPORT2
-le_getGlyphs(le_engine *engine,
-             LEGlyphID glyphs[],
-             LEErrorCode *success);
-
-/**
- * This function copies the character index array into a caller supplied array.
- * The caller must ensure that the array is large enough to hold a
- * character index for each glyph.
- *
- * @param engine - the LayoutEngine
- * @param charIndices - the destiniation character index array
- * @param success - set to an error code if the operation fails
- *
- * @internal
- */
-U_INTERNAL void U_EXPORT2
-le_getCharIndices(le_engine *engine,
-                  le_int32 charIndices[],
-                  LEErrorCode *success);
-
-/**
- * This function copies the character index array into a caller supplied array.
- * The caller must ensure that the array is large enough to hold a
- * character index for each glyph.
- *
- * @param engine - the LayoutEngine
- * @param charIndices - the destiniation character index array
- * @param indexBase - an offset that will be added to each index.
- * @param success - set to an error code if the operation fails
- *
- * @internal
- */
-U_INTERNAL void U_EXPORT2
-le_getCharIndicesWithBase(le_engine *engine,
-                  le_int32 charIndices[],
-                  le_int32 indexBase,
-                  LEErrorCode *success);
-
-/**
- * This function copies the position array into a caller supplied array.
- * The caller must ensure that the array is large enough to hold an
- * X and Y position for each glyph, plus an extra X and Y for the
- * advance of the last glyph.
- *
- * @param engine - the LayoutEngine
- * @param positions - the destiniation position array
- * @param success - set to an error code if the operation fails
- *
- * @internal
- */
-U_INTERNAL void U_EXPORT2
-le_getGlyphPositions(le_engine *engine,
-                     float positions[],
-                     LEErrorCode *success);
-
-/**
- * This function returns the X and Y position of the glyph at
- * the given index.
- *
- * Input parameters:
- * @param engine - the LayoutEngine
- * @param glyphIndex - the index of the glyph
- *
- * Output parameters:
- * @param x - the glyph's X position
- * @param y - the glyph's Y position
- * @param success - set to an error code if the operation fails
- *
- * @internal
- */
-U_INTERNAL void U_EXPORT2
-le_getGlyphPosition(le_engine *engine,
-                    le_int32 glyphIndex,
-                    float *x,
-                    float *y,
-                    LEErrorCode *success);
-
-/**
- * This function frees the glyph, character index and position arrays
- * so that the LayoutEngine can be reused to layout a different
- * characer array. (This function is also called by le_close)
- *
- * @param engine - the LayoutEngine
- * @param success - set to an error code if the operation fails
- *
- * @internal
- */
-U_INTERNAL void U_EXPORT2
-le_reset(le_engine *engine,
-         LEErrorCode *success);
-#endif  /* U_HIDE_INTERNAL_API */
-
-#endif
index f06d1e7d07dc0c0159e9ad4122491fe34eebcad6..46802b91a11a547d6c743761128a860f97509c36 100644 (file)
@@ -30,12 +30,9 @@ BUILDDIR := $(BUILDDIR:test\\cintltst/../../=)
 # Simplify the path for Windows 98
 BUILDDIR := $(BUILDDIR:TEST\\CINTLTST/../../=)
 
-CPPFLAGS += -I$(top_srcdir)/common -I$(top_srcdir)/i18n -I$(top_srcdir)/tools/ctestfw -I$(top_srcdir)/tools/toolutil -I$(top_srcdir)/layoutex $(ICULE_CFLAGS)
-ifeq ($(USING_ICULEHB),no)
-CPPFLAGS+=-I$(top_srcdir)/layout
-endif
+CPPFLAGS += -I$(top_srcdir)/common -I$(top_srcdir)/i18n -I$(top_srcdir)/tools/ctestfw -I$(top_srcdir)/tools/toolutil -I$(top_srcdir)/layoutex $(ICULE_CFLAGS) $(ICULEHB_CFLAGS)
 DEFS += -D'U_TOPSRCDIR="$(top_srcdir)/"' -D'U_TOPBUILDDIR="$(BUILDDIR)"'
-LIBS = $(LIBICULX) $(LIBICULE) $(LIBICUUC) $(LIBICUI18N) $(LIBCTESTFW) $(LIBICUTOOLUTIL) $(DEFAULT_LIBS) $(LIB_M) 
+LIBS = $(LIBICULX) $(LIBICUUC) $(LIBICUI18N) $(LIBCTESTFW) $(LIBICUTOOLUTIL) $(DEFAULT_LIBS) $(LIB_M) $(ICULEHB_LIBS)
 
 COMMONOBJECTS = letsutil.o cmaps.o FontTableCache.o SimpleFontInstance.o PortableFontInstance.o
 TESTOBJECTS   = letest.o
index 096e5265ab0444c89239dd2fe6474777a4db54ba..323defc0188c6f0ca2b60d86e7a6ddfbd5c2b6c3 100644 (file)
@@ -112,8 +112,17 @@ le_int32 getLanguageCode(const char *lang)
             return i;
         }
     }
+#else
+    if (!strcmp(lang, "JAN")) return janLanguageCode;
+    if (!strcmp(lang, "KOR")) return korLanguageCode;
+    if (!strcmp(lang, "ZHT")) return zhtLanguageCode;
+    if (!strcmp(lang, "ZHS")) return zhsLanguageCode;
+    if (!strcmp(lang, "HIN")) return hinLanguageCode;
+    if (!strcmp(lang, "MAR")) return marLanguageCode;
+    if (!strcmp(lang, "ROM")) return romLanguageCode;
 #endif
 
+
     return -1;
 }