summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSam Varshavchik2017-03-06 19:51:02 -0500
committerSam Varshavchik2017-03-06 19:51:02 -0500
commitf25724f8807dddededb347e4740bfed93fda7bf5 (patch)
treef91dab87d22a2363fb95eca8071d9b72be1ea0cb
parent7b444198abbc9d46d1ae191f3153b959a13b11a1 (diff)
downloadcourier-libs-f25724f8807dddededb347e4740bfed93fda7bf5.tar.bz2
courier-unicode: C++11 update.
* Migrate to C++11: remove unicode_char, use char32_t. Replace std::vector<unicode_char> with std::u32string.
-rw-r--r--unicode/ChangeLog5
-rw-r--r--unicode/Makefile.am4
-rw-r--r--unicode/book.xml161
-rw-r--r--unicode/configure.ac17
-rw-r--r--unicode/courier-unicode.h.in176
-rw-r--r--unicode/eastasianwidth.h2
-rw-r--r--unicode/enttest.c2
-rw-r--r--unicode/linebreaktab_internal.h2
-rw-r--r--unicode/linebreaktest.C22
-rw-r--r--unicode/mkeastasianwidth.pl2
-rw-r--r--unicode/mkultcase.pl2
-rw-r--r--unicode/unicode.c38
-rw-r--r--unicode/unicode_categories.c20
-rw-r--r--unicode/unicode_graphemebreak.c2
-rw-r--r--unicode/unicode_htmlent.c6
-rw-r--r--unicode/unicode_linebreak.c14
-rw-r--r--unicode/unicode_scripts.c2
-rw-r--r--unicode/unicode_tablookup.c4
-rw-r--r--unicode/unicode_ultcase.c14
-rw-r--r--unicode/unicode_ultcasetab.c776
-rw-r--r--unicode/unicode_wcwidth.c4
-rw-r--r--unicode/unicode_wordbreak.c6
-rw-r--r--unicode/unicodebuf.c12
-rw-r--r--unicode/unicodecpp.C54
-rw-r--r--unicode/unicodetest.c2
-rw-r--r--unicode/wordbreaktest.C4
26 files changed, 702 insertions, 651 deletions
diff --git a/unicode/ChangeLog b/unicode/ChangeLog
index 68d0427..95f525f 100644
--- a/unicode/ChangeLog
+++ b/unicode/ChangeLog
@@ -1,3 +1,8 @@
+2017-03-06 Sam Varshavchik <mrsam@courier-mta.com>
+
+ * Migrate to C++11: remove unicode_char, use char32_t. Replace
+ std::vector<unicode_char> with std::u32string.
+
1.5
2016-02-19 Sam Varshavchik <mrsam@courier-mta.com>
diff --git a/unicode/Makefile.am b/unicode/Makefile.am
index 0618602..d2232eb 100644
--- a/unicode/Makefile.am
+++ b/unicode/Makefile.am
@@ -1,5 +1,5 @@
#
-# Copyright 2000-2014 Double Precision, Inc. See COPYING for
+# Copyright 2000-2017 Double Precision, Inc. See COPYING for
# distribution information.
@@ -77,7 +77,7 @@ libcourier_unicode_la_SOURCES=\
categoriestab.h \
unicode_categories.c
-libcourier_unicode_la_LDFLAGS=-version-info 3:0:0
+libcourier_unicode_la_LDFLAGS=-version-info 4:0:0
EXTRA_DIST=$(noinst_SCRIPTS) $(man_MANS) $(PACKAGE).spec \
packaging/freebsd10/pkg-descr
diff --git a/unicode/book.xml b/unicode/book.xml
index b9a7000..abd4115 100644
--- a/unicode/book.xml
+++ b/unicode/book.xml
@@ -100,6 +100,15 @@ See COPYING for distribution information.
<para>
To use the library, <quote>#include &lt;courier-unicode.h&gt;</quote> and link
with <literal>-lcourier-unicode</literal>.
+ The C++ compiler must have C++11 support. Minimum usable version of
+ gcc appears to be gcc 4.4 with the <literal>-std=c++0x</literal> flag.
+ Current versions of gcc use C++11, or higher, by default and do not
+ require extra flags. Like with all C++ code, the same compiler, and flags,
+ must be used to build code that uses this library that was used to
+ build the library itself.
+ </para>
+
+ <para>
The starting point is
<link linkend="courier-unicode">
<citerefentry>
@@ -158,6 +167,16 @@ See COPYING for distribution information.
characters, in addition to unicode characters, with
modified-UTF7.
</para>
+
+ <para>
+ The C++ compiler must have C++11 support. Minimum usable version of
+ gcc appears to be gcc 4.4 with the <literal>-std=c++0x</literal>
+ flag. Current versions of gcc use C++11, or higher, by default and
+ do not require extra flags. Consult the packaging documentation
+ for the Courier Unicode Library for information on any
+ compiler flags that are needed to build software that links
+ with this library.
+ </para>
</refsect1>
<refsect1>
<title>SEE ALSO</title>
@@ -302,7 +321,7 @@ See COPYING for distribution information.
<funcprototype>
<funcdef>unicode_convert_handle_t <function>unicode_convert_tou_init</function></funcdef>
<paramdef>const char *<parameter>src_chset</parameter></paramdef>
- <paramdef>unicode_char **<parameter>ucptr_ret</parameter></paramdef>
+ <paramdef>char32_t **<parameter>ucptr_ret</parameter></paramdef>
<paramdef>size_t *<parameter>ucsize_ret</parameter></paramdef>
<paramdef>int <parameter>nullterminate</parameter></paramdef>
</funcprototype>
@@ -318,7 +337,7 @@ See COPYING for distribution information.
<funcprototype>
<funcdef>int <function>unicode_convert_uc</function></funcdef>
<paramdef>unicode_convert_handle_t <parameter>handle</parameter></paramdef>
- <paramdef>const unicode_char *<parameter>text</parameter></paramdef>
+ <paramdef>const char32_t *<parameter>text</parameter></paramdef>
<paramdef>size_t <parameter>cnt</parameter></paramdef>
</funcprototype>
@@ -349,14 +368,14 @@ See COPYING for distribution information.
<paramdef>const char *<parameter>text</parameter></paramdef>
<paramdef>size_t <parameter>text_l</parameter></paramdef>
<paramdef>const char *<parameter>charset</parameter></paramdef>
- <paramdef>unicode_char **<parameter>uc</parameter></paramdef>
+ <paramdef>char32_t **<parameter>uc</parameter></paramdef>
<paramdef>size_t *<parameter>ucsize</parameter></paramdef>
<paramdef>int *<parameter>error</parameter></paramdef>
</funcprototype>
<funcprototype>
<funcdef>int <function>unicode_convert_fromu_tobuf</function></funcdef>
- <paramdef>const unicode_char *<parameter>utext</parameter></paramdef>
+ <paramdef>const char32_t *<parameter>utext</parameter></paramdef>
<paramdef>size_t <parameter>utext_l</parameter></paramdef>
<paramdef>const char *<parameter>charset</parameter></paramdef>
<paramdef>char **<parameter>c</parameter></paramdef>
@@ -374,13 +393,13 @@ See COPYING for distribution information.
<para>
<varname>unicode_u_ucs4_native</varname>[] contains the
string <quote>UCS-4BE</quote> or <quote>UCS-4LE</quote>,
- matching the native <classname>unicode_char</classname> endianness.
+ matching the native <classname>char32_t</classname> endianness.
</para>
<para>
<varname>unicode_u_ucs2_native</varname>[] contains the
string <quote>UCS-2BE</quote> or <quote>UCS-2LE</quote>,
- matching the native <classname>unicode_char</classname> endianness.
+ matching the native <classname>char32_t</classname> endianness.
</para>
<para>
@@ -520,26 +539,26 @@ See COPYING for distribution information.
<para>
<function>unicode_convert_tou_init</function>()
- converts character text into a <classname>unicode_char</classname>
+ converts character text into a <classname>char32_t</classname>
buffer.
It works just like
<function>unicode_convert_tocbuf_init</function>(), except
that only the source character set gets specified and the output
- buffer is a <classname>unicode_char</classname> buffer.
+ buffer is a <classname>char32_t</classname> buffer.
<parameter>nullterminate</parameter> terminates the converted
unicode characters with a <literal>U+0000</literal>.
</para>
<para>
<function>unicode_convert_fromu_init</function>()
- converts <classname>unicode_char</classname>s to the output
+ converts <classname>char32_t</classname>s to the output
character set, and also works like
<function>unicode_convert_tocbuf_init</function>().
Additionally, in this case,
<function>unicode_convert_uc</function>() works just like
<function>unicode_convert</function>() except that the
input sequence is a
- <classname>unicode_char</classname> sequence, and the
+ <classname>char32_t</classname> sequence, and the
count parameter is th enumber of unicode characters.
</para>
</refsect2>
@@ -680,7 +699,7 @@ See COPYING for distribution information.
<funcsynopsis>
<funcsynopsisinfo>#include &lt;courier-unicode.h&gt;</funcsynopsisinfo>
<funcprototype>
- <funcdef>unicode_char <function>unicode_html40ent_lookup</function></funcdef>
+ <funcdef>char32_t <function>unicode_html40ent_lookup</function></funcdef>
<paramdef>const char *<parameter>entity</parameter></paramdef>
</funcprototype>
</funcsynopsis>
@@ -751,52 +770,52 @@ See COPYING for distribution information.
<funcsynopsisinfo>#include &lt;courier-unicode.h&gt;</funcsynopsisinfo>
<funcprototype>
<funcdef>uint32_t <function>unicode_category_lookup</function></funcdef>
- <paramdef>unicode_char <parameter>c</parameter></paramdef>
+ <paramdef>char32_t <parameter>c</parameter></paramdef>
</funcprototype>
<funcprototype>
<funcdef>int <function>unicode_isalnum</function></funcdef>
- <paramdef>unicode_char <parameter>c</parameter></paramdef>
+ <paramdef>char32_t <parameter>c</parameter></paramdef>
</funcprototype>
<funcprototype>
<funcdef>int <function>unicode_isalpha</function></funcdef>
- <paramdef>unicode_char <parameter>c</parameter></paramdef>
+ <paramdef>char32_t <parameter>c</parameter></paramdef>
</funcprototype>
<funcprototype>
<funcdef>int <function>unicode_isblank</function></funcdef>
- <paramdef>unicode_char <parameter>c</parameter></paramdef>
+ <paramdef>char32_t <parameter>c</parameter></paramdef>
</funcprototype>
<funcprototype>
<funcdef>int <function>unicode_isdigit</function></funcdef>
- <paramdef>unicode_char <parameter>c</parameter></paramdef>
+ <paramdef>char32_t <parameter>c</parameter></paramdef>
</funcprototype>
<funcprototype>
<funcdef>int <function>unicode_isgraph</function></funcdef>
- <paramdef>unicode_char <parameter>c</parameter></paramdef>
+ <paramdef>char32_t <parameter>c</parameter></paramdef>
</funcprototype>
<funcprototype>
<funcdef>int <function>unicode_islower</function></funcdef>
- <paramdef>unicode_char <parameter>c</parameter></paramdef>
+ <paramdef>char32_t <parameter>c</parameter></paramdef>
</funcprototype>
<funcprototype>
<funcdef>int <function>unicode_ispunct</function></funcdef>
- <paramdef>unicode_char <parameter>c</parameter></paramdef>
+ <paramdef>char32_t <parameter>c</parameter></paramdef>
</funcprototype>
<funcprototype>
<funcdef>int <function>unicode_isspace</function></funcdef>
- <paramdef>unicode_char <parameter>c</parameter></paramdef>
+ <paramdef>char32_t <parameter>c</parameter></paramdef>
</funcprototype>
<funcprototype>
<funcdef>int <function>unicode_isupper</function></funcdef>
- <paramdef>unicode_char <parameter>c</parameter></paramdef>
+ <paramdef>char32_t <parameter>c</parameter></paramdef>
</funcprototype>
</funcsynopsis>
</refsynopsisdiv>
@@ -973,8 +992,8 @@ See COPYING for distribution information.
<funcsynopsisinfo>#include &lt;courier-unicode.h&gt;</funcsynopsisinfo>
<funcprototype>
<funcdef>int <function>unicode_grapheme_break</function></funcdef>
- <paramdef>unicode_char <parameter>a</parameter></paramdef>
- <paramdef>unicode_char <parameter>b</parameter></paramdef>
+ <paramdef>char32_t <parameter>a</parameter></paramdef>
+ <paramdef>char32_t <parameter>b</parameter></paramdef>
</funcprototype>
</funcsynopsis>
</refsynopsisdiv>
@@ -1027,7 +1046,7 @@ See COPYING for distribution information.
<funcsynopsisinfo>#include &lt;courier-unicode.h&gt;</funcsynopsisinfo>
<funcprototype>
<funcdef>unicode_script_t <function>unicode_script</function></funcdef>
- <paramdef>unicode_char <parameter>ch</parameter></paramdef>
+ <paramdef>char32_t <parameter>ch</parameter></paramdef>
</funcprototype>
</funcsynopsis>
</refsynopsisdiv>
@@ -1096,13 +1115,13 @@ See COPYING for distribution information.
<funcprototype>
<funcdef>int <function>unicode_lb_next</function></funcdef>
<paramdef>unicode_lb_info_t <parameter>lb</parameter></paramdef>
- <paramdef>unicode_char <parameter>c</parameter></paramdef>
+ <paramdef>char32_t <parameter>c</parameter></paramdef>
</funcprototype>
<funcprototype>
<funcdef>int <function>unicode_lb_next_cnt</function></funcdef>
<paramdef>unicode_lb_info_t <parameter>lb</parameter></paramdef>
- <paramdef>const unicode_char *<parameter>cptr</parameter></paramdef>
+ <paramdef>const char32_t *<parameter>cptr</parameter></paramdef>
<paramdef>size_t <parameter>cnt</parameter></paramdef>
</funcprototype>
@@ -1115,7 +1134,7 @@ See COPYING for distribution information.
<funcsynopsis>
<funcprototype>
<funcdef>unicode_lbc_info_t <function>unicode_lbc_init</function></funcdef>
- <paramdef>int (*<parameter>cb_func</parameter>)(int, unicode_char, void *)</paramdef>
+ <paramdef>int (*<parameter>cb_func</parameter>)(int, char32_t, void *)</paramdef>
<paramdef>void *<parameter>cb_arg</parameter></paramdef>
</funcprototype>
@@ -1128,13 +1147,13 @@ See COPYING for distribution information.
<funcprototype>
<funcdef>int <function>unicode_lbc_next</function></funcdef>
<paramdef>unicode_lb_info_t <parameter>lb</parameter></paramdef>
- <paramdef>unicode_char <parameter>c</parameter></paramdef>
+ <paramdef>char32_t <parameter>c</parameter></paramdef>
</funcprototype>
<funcprototype>
<funcdef>int <function>unicode_lbc_next_cnt</function></funcdef>
<paramdef>unicode_lb_info_t <parameter>lb</parameter></paramdef>
- <paramdef>const unicode_char *<parameter>cptr</parameter></paramdef>
+ <paramdef>const char32_t *<parameter>cptr</parameter></paramdef>
<paramdef>size_t <parameter>cnt</parameter></paramdef>
</funcprototype>
@@ -1414,13 +1433,13 @@ See COPYING for distribution information.
<funcprototype>
<funcdef>int <function>unicode_wb_next</function></funcdef>
<paramdef>unicode_wb_info_t <parameter>wb</parameter></paramdef>
- <paramdef>unicode_char <parameter>c</parameter></paramdef>
+ <paramdef>char32_t <parameter>c</parameter></paramdef>
</funcprototype>
<funcprototype>
<funcdef>int <function>unicode_wb_next_cnt</function></funcdef>
<paramdef>unicode_wb_info_t <parameter>wb</parameter></paramdef>
- <paramdef>const unicode_char *<parameter>cptr</parameter></paramdef>
+ <paramdef>const char32_t *<parameter>cptr</parameter></paramdef>
<paramdef>size_t <parameter>cnt</parameter></paramdef>
</funcprototype>
@@ -1437,7 +1456,7 @@ See COPYING for distribution information.
<funcprototype>
<funcdef>int <function>unicode_wbscan_next</function></funcdef>
<paramdef>unicode_wbscan_info_t <parameter>wbs</parameter></paramdef>
- <paramdef>unicode_char <parameter>c</parameter></paramdef>
+ <paramdef>char32_t <parameter>c</parameter></paramdef>
</funcprototype>
<funcprototype>
@@ -1616,20 +1635,20 @@ See COPYING for distribution information.
<funcsynopsis>
<funcsynopsisinfo>#include &lt;courier-unicode.h&gt;</funcsynopsisinfo>
<funcprototype>
- <funcdef>unicode_char <function>unicode_uc</function></funcdef>
- <paramdef>unicode_char <parameter>c</parameter></paramdef>
+ <funcdef>char32_t <function>unicode_uc</function></funcdef>
+ <paramdef>char32_t <parameter>c</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<funcsynopsis>
<funcprototype>
- <funcdef>unicode_char <function>unicode_lc</function></funcdef>
- <paramdef>unicode_char <parameter>c</parameter></paramdef>
+ <funcdef>char32_t <function>unicode_lc</function></funcdef>
+ <paramdef>char32_t <parameter>c</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<funcsynopsis>
<funcprototype>
- <funcdef>unicode_char <function>unicode_tc</function></funcdef>
- <paramdef>unicode_char <parameter>c</parameter></paramdef>
+ <funcdef>char32_t <function>unicode_tc</function></funcdef>
+ <paramdef>char32_t <parameter>c</parameter></paramdef>
</funcprototype>
</funcsynopsis>
<funcsynopsis>
@@ -1637,8 +1656,8 @@ See COPYING for distribution information.
<funcdef>char *<function>unicode_convert_tocase</function></funcdef>
<paramdef>const char *<parameter>str</parameter></paramdef>
<paramdef>const char *<parameter>charset</parameter></paramdef>
- <paramdef>unicode_char (*<parameter>first_char_func</parameter>)(uncode_char)</paramdef>
- <paramdef>unicode_char (*<parameter>char_func</parameter>)(uncode_char)</paramdef>
+ <paramdef>char32_t (*<parameter>first_char_func</parameter>)(uncode_char)</paramdef>
+ <paramdef>char32_t (*<parameter>char_func</parameter>)(uncode_char)</paramdef>
</funcprototype>
</funcsynopsis>
</refsynopsisdiv>
@@ -1754,13 +1773,13 @@ extern const char unicode::iso_8859_1[];</funcsynopsisinfo>
<funcprototype>
<funcdef>std::string <function>unicode::iconvert::convert</function></funcdef>
- <paramdef>const std::vector&lt;unicode_char&gt; &amp;<parameter>text</parameter></paramdef>
+ <paramdef>const std::vector&lt;char32_t&gt; &amp;<parameter>text</parameter></paramdef>
<paramdef>const std::string &amp;<parameter>dstcharset</parameter></paramdef>
</funcprototype>
<funcprototype>
<funcdef>std::string <function>unicode::iconvert::convert</function></funcdef>
- <paramdef>const std::vector&lt;unicode_char&gt; &amp;<parameter>text</parameter></paramdef>
+ <paramdef>const std::vector&lt;char32_t&gt; &amp;<parameter>text</parameter></paramdef>
<paramdef>const std::string &amp;<parameter>dstcharset</parameter></paramdef>
<paramdef>bool &amp;<parameter>errflag</parameter></paramdef>
</funcprototype>
@@ -1769,7 +1788,7 @@ extern const char unicode::iso_8859_1[];</funcsynopsisinfo>
<funcdef>bool <function>unicode::iconvert::convert</function></funcdef>
<paramdef>const std::string &amp;<parameter>text</parameter></paramdef>
<paramdef>const std::string &amp;<parameter>charset</parameter></paramdef>
- <paramdef>std::vector&lt;unicode_char&gt; &amp;<parameter>text</parameter></paramdef>
+ <paramdef>std::vector&lt;char32_t&gt; &amp;<parameter>text</parameter></paramdef>
</funcprototype>
</funcsynopsis>
</refsynopsisdiv>
@@ -1875,8 +1894,8 @@ extern const char unicode::iso_8859_1[];</funcsynopsisinfo>
<funcdef>std::string <function>unicode::iconvert::convert_tocase</function></funcdef>
<paramdef>const std::string &amp;<parameter>text</parameter></paramdef>
<paramdef>const std::string &amp;<parameter>charset</parameter></paramdef>
- <paramdef>unicode_char (*<parameter>first_char_func</parameter>)(unicode_char)</paramdef>
- <paramdef>unicode_char (*<parameter>char_func</parameter>)(unicode_char)</paramdef>
+ <paramdef>char32_t (*<parameter>first_char_func</parameter>)(char32_t)</paramdef>
+ <paramdef>char32_t (*<parameter>char_func</parameter>)(char32_t)</paramdef>
</funcprototype>
<funcprototype>
@@ -1884,8 +1903,8 @@ extern const char unicode::iso_8859_1[];</funcsynopsisinfo>
<paramdef>const std::string &amp;<parameter>text</parameter></paramdef>
<paramdef>const std::string &amp;<parameter>charset</parameter></paramdef>
<paramdef>bool &amp;<parameter>err</parameter></paramdef>
- <paramdef>unicode_char (*<parameter>first_char_func</parameter>)(unicode_char)</paramdef>
- <paramdef>unicode_char (*<parameter>char_func</parameter>)(unicode_char)</paramdef>
+ <paramdef>char32_t (*<parameter>first_char_func</parameter>)(char32_t)</paramdef>
+ <paramdef>char32_t (*<parameter>char_func</parameter>)(char32_t)</paramdef>
</funcprototype>
</funcsynopsis>
</refsynopsisdiv>
@@ -1981,7 +2000,7 @@ extern const char unicode::iso_8859_1[];</funcsynopsisinfo>
<funcprototype>
<funcdef>std::pair&lt;std::string, bool&gt; <function>unicode::iconvert::fromu::convert</function></funcdef>
- <paramdef>const std::vector&lt;unicode_char&gt; &amp;<parameter>text</parameter></paramdef>
+ <paramdef>const std::u32string &amp;<parameter>text</parameter></paramdef>
<paramdef>const std::string &amp;<parameter>charset</parameter></paramdef>
</funcprototype>
</funcsynopsis>
@@ -1995,7 +2014,7 @@ extern const char unicode::iso_8859_1[];</funcsynopsisinfo>
text in the given character set.
<parameter>beg_iter</parameter> and
<parameter>end_iter</parameter> define an input sequence of
- <classname>unicode_char</classname>s.
+ <classname>char32_t</classname>s.
They get converted to unicode characters.
<parameter>output_iter</parameter> is an output iterator that
<function>convert</function>()
@@ -2013,7 +2032,7 @@ extern const char unicode::iso_8859_1[];</funcsynopsisinfo>
into a <classname>std::string</classname>, instead of using
an output iterator.
Finally, a single
- <classname>std::vector&lt;unicode_char&gt;</classname>
+ <classname>std::u32string</classname>
specifies the character string, instead of a beginning and an
ending iterator.
</para>
@@ -2072,11 +2091,11 @@ extern const char unicode::iso_8859_1[];</funcsynopsisinfo>
<paramdef>input_iter_t <parameter>beg_iter</parameter></paramdef>
<paramdef>input_iter_t <parameter>end_iter</parameter></paramdef>
<paramdef>const std::string &amp;<parameter>charset</parameter></paramdef>
- <paramdef>std::vector&lt;unicode_char&gt; &amp;<parameter>out_buf</parameter></paramdef>
+ <paramdef>std::u32string &amp;<parameter>out_buf</parameter></paramdef>
</funcprototype>
<funcprototype>
- <funcdef>std::pair&lt;std::vector&lt;unicode_char&gt;, bool&gt; <function>convert</function></funcdef>
+ <funcdef>std::pair&lt;std::u32string, bool&gt; <function>convert</function></funcdef>
<paramdef>const std::string &amp;<parameter>text</parameter></paramdef>
<paramdef>const std::string &amp;<parameter>charset</parameter></paramdef>
</funcprototype>
@@ -2095,7 +2114,7 @@ extern const char unicode::iso_8859_1[];</funcsynopsisinfo>
character set. They get converted to unicode characters.
<parameter>output_iter</parameter> is an output iterator that
<function>convert</function>()
- iterates over <classname>unicode_char</classname>s.
+ iterates over <classname>char32_t</classname>s.
<function>convert</function>() returns the value of the output
iterator after iterating over the converted character sequence.
<parameter>errflag</parameter>, passed by reference, gets set to
@@ -2108,7 +2127,7 @@ extern const char unicode::iso_8859_1[];</funcsynopsisinfo>
<para>
An overloaded <function>convert</function>() puts the unicode
character sequence into a vector of
- <classname>unicode_char</classname>s, instead of an output
+ <classname>char32_t</classname>s, instead of an output
sequence, and returned the error flag.
Finally, a single <classname>std::string</classname>
specifies the character string, instead of a beginning and an
@@ -2173,8 +2192,8 @@ public:
}
};
-unicode_char c;
-std::vector&lt;unicode_char&gt; buf;
+char32_t c;
+std::u32string buf;
linebreak compute_linebreak;
@@ -2198,7 +2217,7 @@ public:
using unicode::linebreak_callback_base::operator&lt;&lt;;
using unicode::linebreak_callback_base::operator();
- int callback(int linebreak_code, unicode_char ch)
+ int callback(int linebreak_code, char32_t ch)
{
// ...
}
@@ -2206,9 +2225,9 @@ public:
// ...
-std::vector&lt;unicode_char&gt; buf;
+std::u32string buf;
-typedef unicode::linebreak_iter&lt;std::vector&lt;unicode_char&gt;::const_iterator&gt; iter_t;
+typedef unicode::linebreak_iter&lt;std::u32string::const_iterator&gt; iter_t;
iter_t beg_iter(buf.begin(), buf.end()), end_iter;
@@ -2220,13 +2239,13 @@ std::copy(beg_iter, end_iter, std::back_insert_iterator&lt;std::vector&lt;int&gt
// ...
-typedef unicode::linebreakc_iter&lt;std::vector&lt;unicode_char&gt;::const_iterator&gt; iter_t;
+typedef unicode::linebreakc_iter&lt;std::u32string::const_iterator&gt; iter_t;
iter_t beg_iter(buf.begin(), buf.end()), end_iter;
beg_iter.set_opts(UNICODE_LB_OPT_SYBREAK);
-std::vector&lt;std::pair&lt;int, unicode_char&gt;&gt; linebreaks;
+std::vector&lt;std::pair&lt;int, char32_t&gt;&gt; linebreaks;
std::copy(beg_iter, end_iter, std::back_insert_iterator&lt;std::vector&lt;int&gt;&gt;(linebreaks));</programlisting>
</refsynopsisdiv>
@@ -2301,13 +2320,13 @@ std::copy(beg_iter, end_iter, std::back_insert_iterator&lt;std::vector&lt;int&gt
The template parameter is an input iterator over
<classname>unicode</classname> chars. The constructor's parameters
are a beginning and an ending iterator value for a sequence of
- <classname>unicode_char</classname>. This constructs the beginning
+ <classname>char32_t</classname>. This constructs the beginning
iterator value for a sequence of <classname>int</classname>s
consisting of line-break values
(<literal>UNICODE_LB_MANDATORY</literal>,
<literal>UNICODE_LB_NONE</literal>, or
<literal>UNICODE_LB_ALLOWED</literal>) corresponding to each
- <classname>unicode_char</classname> in the underlying sequence.
+ <classname>char32_t</classname> in the underlying sequence.
The default constructor creates the ending iterator value for the
sequence.
</para>
@@ -2321,7 +2340,7 @@ std::copy(beg_iter, end_iter, std::back_insert_iterator&lt;std::vector&lt;int&gt
The <classname>linebreakc_iter</classname> template implements a
similar input iterator, with the difference that it ends up iterating
over a <classname>std::pair</classname> of line-breaking values and
- the corresponding <classname>unicode_char</classname> from the
+ the corresponding <classname>char32_t</classname> from the
underlying input sequence.
</para>
</refsect1>
@@ -2375,8 +2394,8 @@ std::copy(beg_iter, end_iter, std::back_insert_iterator&lt;std::vector&lt;int&gt
</funcprototype>
<funcprototype>
- <funcdef>std::vector&lt;unicode_char&gt; <function>unicode::tolower</function></funcdef>
- <paramdef>const std::vector&lt;unicode_char&gt; &amp;<parameter>u</parameter></paramdef>
+ <funcdef>std::u32string <function>unicode::tolower</function></funcdef>
+ <paramdef>const std::u32string &amp;<parameter>u</parameter></paramdef>
</funcprototype>
<funcprototype>
@@ -2391,8 +2410,8 @@ std::copy(beg_iter, end_iter, std::back_insert_iterator&lt;std::vector&lt;int&gt
</funcprototype>
<funcprototype>
- <funcdef>std::vector&lt;unicode_char&gt; <function>unicode::toupper</function></funcdef>
- <paramdef>const std::vector&lt;unicode_char&gt; &amp;<parameter>u</parameter></paramdef>
+ <funcdef>std::u32string <function>unicode::toupper</function></funcdef>
+ <paramdef>const std::u32string &amp;<parameter>u</parameter></paramdef>
</funcprototype>
</funcsynopsis>
</refsynopsisdiv>
@@ -2419,7 +2438,7 @@ std::copy(beg_iter, end_iter, std::back_insert_iterator&lt;std::vector&lt;int&gt
<para>
Passing a
- <classname>const std::vector&lt;unicode_char&gt; &amp;</classname>
+ <classname>const std::u32string &amp;</classname>
directly also converts it accordingly, returning the converted
unicode string.
</para>
@@ -2477,8 +2496,8 @@ public:
}
};
-unicode_char c;
-std::vector&lt;unicode_char&gt; buf;
+char32_t c;
+std::u32string buf;
wordbreak compute_wordbreak;
diff --git a/unicode/configure.ac b/unicode/configure.ac
index 079f461..7d71cf8 100644
--- a/unicode/configure.ac
+++ b/unicode/configure.ac
@@ -1,6 +1,6 @@
dnl Process this file with autoconf to produce a configure script.
-AC_INIT([courier-unicode], [1.5], [courier-users@lists.sourceforge.net])
+AC_INIT([courier-unicode], [1.5.20170306], [courier-users@lists.sourceforge.net])
>confdefs.h # Kill PACKAGE_ macros
@@ -54,6 +54,21 @@ else
AC_SUBST(LANGINFO_L,0)
fi
+
+AC_TRY_COMPILE([
+#include <uchar.h>
+],[
+char32_t c=0;
+],
+[
+HAVE_UCHAR_H=1
+],
+[
+HAVE_UCHAR_H=0
+])
+
+AC_SUBST(HAVE_UCHAR_H)
+
AM_CONDITIONAL(UPDATE_UNICODE, test -f ${srcdir}/UnicodeData.txt)
AC_SYS_LARGEFILE
diff --git a/unicode/courier-unicode.h.in b/unicode/courier-unicode.h.in
index 9b58f5c..ac12d25 100644
--- a/unicode/courier-unicode.h.in
+++ b/unicode/courier-unicode.h.in
@@ -2,7 +2,7 @@
#define courier_unicode_h
/*
-** Copyright 2000-2015 Double Precision, Inc.
+** Copyright 2000-2017 Double Precision, Inc.
** See COPYING for distribution information.
**
*/
@@ -26,7 +26,19 @@ extern "C" {
#include <sys/types.h>
#include <locale.h>
-typedef uint32_t unicode_char;
+#ifdef __cplusplus
+
+#else
+
+#if @HAVE_UCHAR_H@
+
+#include <uchar.h>
+
+#else
+
+typedef uint32_t char32_t;
+#endif
+#endif
/*
** The system default character set, from the locale.
@@ -46,9 +58,9 @@ extern const char *unicode_locale_chset_l(locale_t l);
/* Unicode upper/lower/title case conversion functions */
-extern unicode_char unicode_uc(unicode_char);
-extern unicode_char unicode_lc(unicode_char);
-extern unicode_char unicode_tc(unicode_char);
+extern char32_t unicode_uc(char32_t);
+extern char32_t unicode_lc(char32_t);
+extern char32_t unicode_tc(char32_t);
/*
** Look up HTML 4.0/XHTML entity.
@@ -58,7 +70,7 @@ extern unicode_char unicode_tc(unicode_char);
** Returns the unicode entity value, or 0 if no such entity is defined.
*/
-unicode_char unicode_html40ent_lookup(const char *n);
+char32_t unicode_html40ent_lookup(const char *n);
/*
**
@@ -75,19 +87,19 @@ unicode_char unicode_html40ent_lookup(const char *n);
** shown on a text console.
*/
-extern int unicode_wcwidth(unicode_char c);
-extern size_t unicode_wcwidth_str(const unicode_char *c);
+extern int unicode_wcwidth(char32_t c);
+extern size_t unicode_wcwidth_str(const char32_t *c);
/* Internal unicode table lookup functions */
-extern uint8_t unicode_tab_lookup(unicode_char ch,
+extern uint8_t unicode_tab_lookup(char32_t ch,
const size_t *unicode_indextab,
size_t unicode_indextab_sizeof,
const uint8_t (*unicode_rangetab)[2],
const uint8_t *unicode_classtab,
uint8_t uclass);
-extern uint32_t unicode_tab32_lookup(unicode_char ch,
+extern uint32_t unicode_tab32_lookup(char32_t ch,
const size_t *unicode_indextab,
size_t unicode_indextab_sizeof,
const uint8_t (*unicode_rangetab)[2],
@@ -108,63 +120,63 @@ extern uint32_t unicode_tab32_lookup(unicode_char ch,
#include <courier-unicode-categories-tab.h>
-uint32_t unicode_category_lookup(unicode_char);
+uint32_t unicode_category_lookup(char32_t);
/*
** Return non-0 for TAB, and all UNICODE_CATEGORY_2_SPACE.
*/
-extern int unicode_isblank(unicode_char ch);
+extern int unicode_isblank(char32_t ch);
/*
** The unicode-ish isspace(). In addition to return non-0 for
** unicode_isblank(), this also returns non-0 for unicode characters
** with linebreaking properties of BK, CR, LF, NL, and SP.
*/
-extern int unicode_isspace(unicode_char ch);
+extern int unicode_isspace(char32_t ch);
/*
** Return non-0 for all UNICODE_CATEGORY_1_LETTER
*/
-extern int unicode_isalpha(unicode_char ch);
+extern int unicode_isalpha(char32_t ch);
/*
** Return non-0 for all UNICODE_CATEGORY_1_NUMBER | UNICODE_CATEGORY_2_DIGIT,
** only (no third categories).
*/
-extern int unicode_isdigit(unicode_char ch);
+extern int unicode_isdigit(char32_t ch);
/*
** Return non-0 for all unicode_isalpha() or unicode_isdigit().
*/
-extern int unicode_isalnum(unicode_char ch);
+extern int unicode_isalnum(char32_t ch);
/*
** Returns non-0 for all codepoints above SPACE which are not
** unicode_isspace().
*/
-extern int unicode_isgraph(unicode_char ch);
+extern int unicode_isgraph(char32_t ch);
/*
** Return non-0 for all UNICODE_CATEGORY_1_PUNCTUATION.
*/
-extern int unicode_ispunct(unicode_char ch);
+extern int unicode_ispunct(char32_t ch);
/*
** Return non-0 for all unicode_isalpha() for which the character is
** equal to unicode_lc() of itself.
*/
-extern int unicode_islower(unicode_char ch);
+extern int unicode_islower(char32_t ch);
/*
** Return non-0 for all unicode_isalpha() for which the character is
** equal to unicode_uc() of itself.
*/
-extern int unicode_isupper(unicode_char ch);
+extern int unicode_isupper(char32_t ch);
/*
** Implementation of grapheme cluster boundary rules, as per
@@ -175,7 +187,7 @@ extern int unicode_isupper(unicode_char ch);
** characters.
*/
-int unicode_grapheme_break(unicode_char a, unicode_char b);
+int unicode_grapheme_break(char32_t a, char32_t b);
typedef enum {
@@ -188,7 +200,7 @@ typedef enum {
** http://www.unicode.org/reports/tr24/tr24-24.html
*/
-unicode_script_t unicode_script(unicode_char a);
+unicode_script_t unicode_script(char32_t a);
/*
** Implementation of line break rules, as per
@@ -251,7 +263,7 @@ extern unicode_lb_info_t unicode_lb_init(int (*cb_func)(int, void *),
** it returned 0.
*/
-extern int unicode_lb_next(unicode_lb_info_t i, unicode_char ch);
+extern int unicode_lb_next(unicode_lb_info_t i, char32_t ch);
/*
** Convenience function that invokes unicode_lb_next() with a list of
@@ -260,7 +272,7 @@ extern int unicode_lb_next(unicode_lb_info_t i, unicode_char ch);
*/
extern int unicode_lb_next_cnt(unicode_lb_info_t i,
- const unicode_char *chars,
+ const char32_t *chars,
size_t cnt);
/*
@@ -292,12 +304,12 @@ struct unicode_lbc_info;
typedef struct unicode_lbc_info *unicode_lbc_info_t;
-extern unicode_lbc_info_t unicode_lbc_init(int (*cb_func)(int, unicode_char,
+extern unicode_lbc_info_t unicode_lbc_init(int (*cb_func)(int, char32_t,
void *),
void *cb_arg);
-extern int unicode_lbc_next(unicode_lbc_info_t i, unicode_char ch);
+extern int unicode_lbc_next(unicode_lbc_info_t i, char32_t ch);
extern int unicode_lbc_next_cnt(unicode_lbc_info_t i,
- const unicode_char *chars,
+ const char32_t *chars,
size_t cnt);
extern int unicode_lbc_end(unicode_lbc_info_t i);
@@ -399,7 +411,7 @@ extern unicode_wb_info_t unicode_wb_init(int (*cb_func)(int, void *),
** it returned 0.
*/
-extern int unicode_wb_next(unicode_wb_info_t i, unicode_char ch);
+extern int unicode_wb_next(unicode_wb_info_t i, char32_t ch);
/*
** Convenience function that invokes unicode_wb_next() with a list of
@@ -408,7 +420,7 @@ extern int unicode_wb_next(unicode_wb_info_t i, unicode_char ch);
*/
extern int unicode_wb_next_cnt(unicode_wb_info_t i,
- const unicode_char *chars,
+ const char32_t *chars,
size_t cnt);
/*
@@ -448,7 +460,7 @@ typedef struct unicode_wbscan_info *unicode_wbscan_info_t;
unicode_wbscan_info_t unicode_wbscan_init();
-int unicode_wbscan_next(unicode_wbscan_info_t i, unicode_char ch);
+int unicode_wbscan_next(unicode_wbscan_info_t i, char32_t ch);
size_t unicode_wbscan_end(unicode_wbscan_info_t i);
@@ -457,7 +469,7 @@ size_t unicode_wbscan_end(unicode_wbscan_info_t i);
*/
struct unicode_buf {
- unicode_char *ptr; /* The unicode characters */
+ char32_t *ptr; /* The unicode characters */
size_t size, /* Buffer size */
len, /* How many characters in ptr are initialized */
max; /* Maximum size the buffer can grow to */
@@ -519,7 +531,7 @@ void unicode_buf_deinit(struct unicode_buf *p);
*/
int unicode_buf_append(struct unicode_buf *p, /* The buffer */
- const unicode_char *uc, /* Characters to append */
+ const char32_t *uc, /* Characters to append */
size_t l); /* How many of them */
/*
@@ -681,12 +693,12 @@ unicode_convert_tocbuf_init(/* Convert from this chset */
/*
-** Specialization: convert some character text to a unicode_char array.
+** Specialization: convert some character text to a char32_t array.
**
-** This is like unicode_convert_tocbuf_init(), but converts to a unicode_char
+** This is like unicode_convert_tocbuf_init(), but converts to a char32_t
** array.
**
-** The returned *ucsize_ret is initialized with the number of unicode_chars,
+** The returned *ucsize_ret is initialized with the number of char32_ts,
** rather than the byte count.
**
** In all other ways, this function behaves identically to
@@ -698,7 +710,7 @@ unicode_convert_tou_init(/* Convert from this chset */
const char *src_chset,
/* malloc()ed buffer pointer, on exit. */
- unicode_char **ucptr_ret,
+ char32_t **ucptr_ret,
/* size of the malloc()ed buffer, upon exit */
size_t *ucsize_ret,
@@ -708,7 +720,7 @@ unicode_convert_tou_init(/* Convert from this chset */
);
/*
-** Specialization: convert a unicode_char array to some character text.
+** Specialization: convert a char32_t array to some character text.
**
** This is the opposite of unicode_convert_tou_init(). Call this to
** initialize the conversion handle, then use unicode_convert_uc()
@@ -733,7 +745,7 @@ int unicode_convert_uc(/* The conversion handle */
unicode_convert_handle_t handle,
/* Text to convert */
- const unicode_char *text,
+ const char32_t *text,
/* Number of bytes to convert */
size_t cnt);
@@ -858,7 +870,7 @@ int unicode_convert_tou_tobuf(/* Character text to convert */
** If this function returns 0, this gets
** initialized
*/
- unicode_char **uc,
+ char32_t **uc,
/*
** Size of the allocated buffer
@@ -884,7 +896,7 @@ int unicode_convert_tou_tobuf(/* Character text to convert */
*/
int unicode_convert_fromu_tobuf(/* Unicode array to convert to a char str */
- const unicode_char *utext,
+ const char32_t *utext,
/*
** Size of the unicode array.
@@ -944,22 +956,22 @@ char *unicode_convert_tocase( /* String to convert */
** str: unicode_uc, unicode_lc, or unicode_tc:
*/
- unicode_char (*first_char_func)(unicode_char),
+ char32_t (*first_char_func)(char32_t),
/*
** Conversion of the second and the remaining
** character in str. If NULL, same as
** first_char_func.
*/
- unicode_char (*char_func)(unicode_char));
+ char32_t (*char_func)(char32_t));
-/* Either UCS-4BE or UCS-4LE, matching the native unicode_char endianness */
+/* Either UCS-4BE or UCS-4LE, matching the native char32_t endianness */
extern const char unicode_u_ucs4_native[];
-/* Either UCS-2BE or UCS-2LE, matching the native unicode_char endianness */
+/* Either UCS-2BE or UCS-2LE, matching the native char32_t endianness */
extern const char unicode_u_ucs2_native[];
@@ -980,7 +992,7 @@ extern const char unicode_u_ucs2_native[];
#ifdef __cplusplus
}
-extern size_t unicode_wcwidth(const std::vector<unicode_char> &uc);
+extern size_t unicode_wcwidth(const std::u32string &uc);
namespace unicode {
@@ -1025,7 +1037,7 @@ class iconvert {
bool operator()(const char *, size_t);
- bool operator()(const unicode_char *, size_t);
+ bool operator()(const char32_t *, size_t);
/*
** Get the results here. If the subclass returns a non-0
@@ -1074,13 +1086,13 @@ class iconvert {
/* Convert from unicode to a charset */
- static std::string convert(const std::vector<unicode_char> &uc,
+ static std::string convert(const std::u32string &uc,
const std::string &dstcharset,
bool &errflag);
/* Convert from unicode to a charset */
- static std::string convert(const std::vector<unicode_char> &uc,
+ static std::string convert(const std::u32string &uc,
const std::string &dstcharset)
{
bool dummy;
@@ -1092,7 +1104,7 @@ class iconvert {
static bool convert(const std::string &text,
const std::string &charset,
- std::vector<unicode_char> &uc);
+ std::u32string &uc);
/* Convert to upper/lower/title case */
@@ -1105,10 +1117,10 @@ class iconvert {
const std::string &charset,
/* First character: unicode_uc, unicode_lc, or unicode_tc */
- unicode_char (*first_char_func)(unicode_char),
+ char32_t (*first_char_func)(char32_t),
/* If not NULL, second and subsequent chars */
- unicode_char (*char_func)(unicode_char)
+ char32_t (*char_func)(char32_t)
=NULL)
{
bool dummy;
@@ -1131,10 +1143,10 @@ class iconvert {
bool &err,
/* First character: unicode_uc, unicode_lc, or unicode_tc */
- unicode_char (*first_char_func)(unicode_char),
+ char32_t (*first_char_func)(char32_t),
/* If not NULL, second and subsequent chars */
- unicode_char (*char_func)(unicode_char)
+ char32_t (*char_func)(char32_t)
=NULL);
private:
bool end(bool *);
@@ -1144,14 +1156,14 @@ class iconvert {
class fromu;
};
-/* Convert output of iconvert to unicode_chars. */
+/* Convert output of iconvert to char32_ts. */
class iconvert::tou : public iconvert {
public:
bool begin(const std::string &chset);
- virtual int converted(const unicode_char *, size_t);
+ virtual int converted(const char32_t *, size_t);
using iconvert::operator();
private:
@@ -1172,12 +1184,12 @@ class iconvert::tou : public iconvert {
static bool convert(input_iter_t from_iter,
input_iter_t to_iter,
const std::string &chset,
- std::vector<unicode_char> &out_buf)
+ std::u32string &out_buf)
{
bool flag;
out_buf.clear();
- std::back_insert_iterator<std::vector<unicode_char> >
+ std::back_insert_iterator<std::u32string >
insert_iter(out_buf);
convert(from_iter, to_iter, chset, flag, insert_iter);
@@ -1185,7 +1197,7 @@ class iconvert::tou : public iconvert {
return flag;
}
- static std::pair<std::vector<unicode_char>, bool>
+ static std::pair<std::u32string, bool>
convert(const std::string &str,
const std::string &chset);
};
@@ -1206,7 +1218,7 @@ class iconvert::tou::to_iter_class : public iconvert::tou {
operator iter_t() const { return iter; }
private:
- int converted(const unicode_char *ptr, size_t cnt)
+ int converted(const char32_t *ptr, size_t cnt)
{
while (cnt)
{
@@ -1253,7 +1265,7 @@ template<typename input_iter_t,
return out;
}
-/* Convert output of iconvert from unicode_chars. */
+/* Convert output of iconvert from char32_ts. */
class iconvert::fromu : public iconvert {
@@ -1288,7 +1300,7 @@ class iconvert::fromu : public iconvert {
}
static std::pair<std::string, bool>
- convert(const std::vector<unicode_char> &ubuf,
+ convert(const std::u32string &ubuf,
const std::string &chset);
};
@@ -1337,7 +1349,7 @@ template<typename input_iter_t,
if (!out.begin(chset))
return out;
- std::vector<unicode_char> string;
+ std::u32string string;
while (from_iter != to_iter)
{
@@ -1362,14 +1374,14 @@ template<typename input_iter_t,
*/
extern "C" int linebreak_trampoline(int value, void *ptr);
-extern "C" int linebreakc_trampoline(int value, unicode_char ch,
+extern "C" int linebreakc_trampoline(int value, char32_t ch,
void *ptr);
/*
** Subclass linebreak_callback_base, implement operator()(int).
**
** Use operator<< or operator()(iterator, iterator) to feed
-** unicode_chars into the linebreaking algorithm. The subclass receives
+** char32_ts into the linebreaking algorithm. The subclass receives
** UNICODE_LB values, as they become available.
*/
@@ -1403,7 +1415,7 @@ class linebreak_callback_base {
friend int linebreak_trampoline(int, void *);
- linebreak_callback_base &operator<<(unicode_char uc);
+ linebreak_callback_base &operator<<(char32_t uc);
template<typename iter_type>
linebreak_callback_base &operator()(iter_type beg_iter,
@@ -1438,7 +1450,7 @@ class linebreak_callback_save_buf : public linebreak_callback_base {
};
/*
-** Convert an input iterator sequence over unicode_chars into
+** Convert an input iterator sequence over char32_ts into
** an input iterator sequence over linebreak values.
*/
@@ -1590,9 +1602,9 @@ class linebreakc_callback_base {
void set_opts(int opts);
- friend int linebreakc_trampoline(int, unicode_char, void *);
+ friend int linebreakc_trampoline(int, char32_t, void *);
- linebreakc_callback_base &operator<<(unicode_char uc);
+ linebreakc_callback_base &operator<<(char32_t uc);
template<typename iter_type>
linebreakc_callback_base &operator()(iter_type beg_iter,
@@ -1604,19 +1616,19 @@ class linebreakc_callback_base {
}
linebreakc_callback_base &operator<<(const
- std::vector<unicode_char>
+ std::u32string
&vec)
{
return operator()(vec.begin(), vec.end());
}
private:
- virtual int callback(int, unicode_char);
+ virtual int callback(int, char32_t);
};
class linebreakc_callback_save_buf : public linebreakc_callback_base {
public:
- std::list<std::pair<int, unicode_char> > lb_buf;
+ std::list<std::pair<int, char32_t> > lb_buf;
linebreakc_callback_save_buf();
~linebreakc_callback_save_buf();
@@ -1624,20 +1636,20 @@ class linebreakc_callback_save_buf : public linebreakc_callback_base {
using linebreakc_callback_base::operator<<;
using linebreakc_callback_base::operator();
private:
- int callback(int, unicode_char);
+ int callback(int, char32_t);
};
/*
-** Convert an input iterator sequence over unicode_chars into
-** an input iterator sequence over std::pair<int, unicode_char>,
+** Convert an input iterator sequence over char32_ts into
+** an input iterator sequence over std::pair<int, char32_t>,
** the original unicode character, and the linebreaking value before
** the character.
*/
template<typename input_t> class linebreakc_iter
: public std::iterator<std::input_iterator_tag,
- std::pair<int, unicode_char>, void>
+ std::pair<int, char32_t>, void>
{
mutable input_t iter_value, end_iter_value;
@@ -1723,7 +1735,7 @@ template<typename input_t> class linebreakc_iter
fill();
return buf == NULL ?
std::make_pair(UNICODE_LB_MANDATORY,
- (unicode_char)0):
+ (char32_t)0):
buf->lb_buf.front();
}
@@ -1748,7 +1760,7 @@ template<typename input_t> class linebreakc_iter
** Subclass wordbreak_callback_base, implement operator()(int).
**
** Use operator<< or operator()(iterator, iterator) to feed
-** unicode_chars into the wordbreaking algorithm. The subclass receives
+** char32_ts into the wordbreaking algorithm. The subclass receives
** word flags, as they become available.
*/
@@ -1782,7 +1794,7 @@ class wordbreak_callback_base {
friend int wordbreak_trampoline(int, void *);
- wordbreak_callback_base &operator<<(unicode_char uc);
+ wordbreak_callback_base &operator<<(char32_t uc);
template<typename iter_type>
wordbreak_callback_base &operator()(iter_type beg_iter,
@@ -1794,7 +1806,7 @@ class wordbreak_callback_base {
}
wordbreak_callback_base &operator<<(const
- std::vector<unicode_char>
+ std::u32string
&vec)
{
return operator()(vec.begin(), vec.end());
@@ -1828,7 +1840,7 @@ class wordbreakscan {
wordbreakscan();
~wordbreakscan();
- bool operator<<(unicode_char uc);
+ bool operator<<(char32_t uc);
size_t finish();
};
@@ -1853,11 +1865,11 @@ std::string toupper(const std::string &string,
//! Convert unicode to lowercase
-std::vector<unicode_char> tolower(const std::vector<unicode_char> &u);
+std::u32string tolower(const std::u32string &u);
//! Convert unicode to uppercase
-std::vector<unicode_char> toupper(const std::vector<unicode_char> &u);
+std::u32string toupper(const std::u32string &u);
#if 0
{
diff --git a/unicode/eastasianwidth.h b/unicode/eastasianwidth.h
index 03eb91e..456b04b 100644
--- a/unicode/eastasianwidth.h
+++ b/unicode/eastasianwidth.h
@@ -1,4 +1,4 @@
-static const unicode_char unicode_wcwidth_tab[][2]={
+static const char32_t unicode_wcwidth_tab[][2]={
{0x1100, 0x115f},
{0x2329, 0x232a},
{0x2e80, 0x2e99},
diff --git a/unicode/enttest.c b/unicode/enttest.c
index aa9f208..8db070a 100644
--- a/unicode/enttest.c
+++ b/unicode/enttest.c
@@ -8,7 +8,7 @@
struct i {
size_t n_start;
size_t n_size;
- unicode_char v;
+ char32_t v;
};
#include "unicode_htmlent.h"
diff --git a/unicode/linebreaktab_internal.h b/unicode/linebreaktab_internal.h
index 2f6c165..56beed0 100644
--- a/unicode/linebreaktab_internal.h
+++ b/unicode/linebreaktab_internal.h
@@ -46,6 +46,6 @@
#define UNICODE_LB_RI 0x49
#define UNICODE_LB_SA 0x4A
-extern int unicode_lb_lookup(unicode_char ch);
+extern int unicode_lb_lookup(char32_t ch);
#endif
diff --git a/unicode/linebreaktest.C b/unicode/linebreaktest.C
index 46bbfee..effd7f4 100644
--- a/unicode/linebreaktest.C
+++ b/unicode/linebreaktest.C
@@ -59,7 +59,7 @@ static void testsuite()
words.push_back(std::string(p, b));
}
- std::vector<unicode_char> ubuf;
+ std::u32string ubuf;
std::vector<int> status;
while (1)
@@ -90,7 +90,7 @@ static void testsuite()
std::istringstream i(words.front());
- unicode_char uc;
+ uint32_t uc;
i >> std::hex >> uc;
@@ -110,7 +110,7 @@ static void testsuite()
std::vector<int> computed_status;
- typedef std::vector<unicode_char>::const_iterator ubuf_iter;
+ typedef std::u32string::const_iterator ubuf_iter;
typedef unicode::linebreak_iter<ubuf_iter> lb_iter;
std::copy(lb_iter(ubuf.begin(), ubuf.end()), lb_iter(),
@@ -138,18 +138,18 @@ static void testsuite()
static void testlinebreakc()
{
- static unicode_char str[]={'$', '(', 0x0300, 0x0301, 0x0302, 0x0303,
+ static char32_t str[]={'$', '(', 0x0300, 0x0301, 0x0302, 0x0303,
0x0304, 0x0305, 0x0306, 0x0307, '1', '.',
'2', ' ', 'A'};
- typedef std::vector<std::pair<int, unicode_char> > linebreakvec_t;
+ typedef std::vector<std::pair<int, char32_t> > linebreakvec_t;
linebreakvec_t linebreakvec;
- std::copy(unicode::linebreakc_iter<unicode_char *>(str,
+ std::copy(unicode::linebreakc_iter<char32_t *>(str,
str + sizeof(str)
/sizeof(str[0])),
- unicode::linebreakc_iter<unicode_char *>(),
+ unicode::linebreakc_iter<char32_t *>(),
std::back_insert_iterator<linebreakvec_t>
(linebreakvec));
@@ -179,7 +179,7 @@ int main(int argc, char **argv)
std::string convteststr="0000000000000000000000000000000\xe3\x82\xa2";
- std::pair<std::vector<unicode_char>, bool> uc;
+ std::pair<std::u32string, bool> uc;
uc=unicode::iconvert::tou::convert(convteststr, "utf-8");
@@ -189,11 +189,11 @@ int main(int argc, char **argv)
exit(1);
}
- std::vector<unicode_char>::iterator e(uc.first.end()),
+ std::u32string::iterator e(uc.first.end()),
b(std::find_if(uc.first.begin(), e,
- std::not1(std::bind2nd(std::equal_to<unicode_char>
+ std::not1(std::bind2nd(std::equal_to<char32_t>
(),
- unicode_char('0')))));
+ char32_t('0')))));
if (b == e || *b++ != 0x30A2 || b != e)
{
diff --git a/unicode/mkeastasianwidth.pl b/unicode/mkeastasianwidth.pl
index 0ddf800..d34f064 100644
--- a/unicode/mkeastasianwidth.pl
+++ b/unicode/mkeastasianwidth.pl
@@ -9,7 +9,7 @@ my $fh=new IO::File "<EastAsianWidth.txt";
my $pb=-1;
my $pe=-1;
-print "static const unicode_char unicode_wcwidth_tab[][2]={\n";
+print "static const char32_t unicode_wcwidth_tab[][2]={\n";
sub full($$) {
my $b=hex(shift);
diff --git a/unicode/mkultcase.pl b/unicode/mkultcase.pl
index 2a2632a..93a08d1 100644
--- a/unicode/mkultcase.pl
+++ b/unicode/mkultcase.pl
@@ -75,7 +75,7 @@ print "const unsigned unicode_case_hash=$tabsize;\n";
print "/* unicode_case_maxbucket="
. ($maxcnt+2) . "*/\n";
-print "const unicode_char unicode_case_tab[][4]={\n";
+print "const char32_t unicode_case_tab[][4]={\n";
my $idx=0;
diff --git a/unicode/unicode.c b/unicode/unicode.c
index 462ca2b..71e6439 100644
--- a/unicode/unicode.c
+++ b/unicode/unicode.c
@@ -1300,15 +1300,15 @@ char *unicode_convert_tobuf(const char *text,
/*****************************************************************************/
/*
-** Convert text to unicode_chars. Same basic approach as
+** Convert text to char32_ts. Same basic approach as
** unicode_convert_tocbuf_init(). The output character set gets specified
** as UCS-4, the final output size is divided by 4, and the output buffer gets
-** typed as a unicode_char array.
+** typed as a char32_t array.
*/
struct unicode_convert_buf {
struct unicode_convert_buf *next;
- unicode_char *fragment;
+ char32_t *fragment;
size_t fragment_size;
size_t max_fragment_size;
};
@@ -1316,7 +1316,7 @@ struct unicode_convert_buf {
struct unicode_convert_tou {
struct unicode_convert_hdr hdr;
- unicode_char **ucptr_ret;
+ char32_t **ucptr_ret;
size_t *ucsize_ret;
int errflag;
size_t tot_size;
@@ -1332,7 +1332,7 @@ static int deinit_tounicode(void *ptr, int *errptr);
unicode_convert_handle_t
unicode_convert_tou_init(const char *src_chset,
- unicode_char **ucptr_ret,
+ char32_t **ucptr_ret,
size_t *ucsize_ret,
int nullterminate
)
@@ -1381,7 +1381,7 @@ unicode_convert_fromu_init(const char *dst_chset,
}
int unicode_convert_uc(unicode_convert_handle_t handle,
- const unicode_char *text,
+ const char32_t *text,
size_t cnt)
{
return unicode_convert(handle, (const char *)text,
@@ -1397,9 +1397,9 @@ static int save_unicode(const char *text, size_t cnt, void *ptr)
struct unicode_convert_buf *fragment;
size_t tot_size;
- cnt /= sizeof(unicode_char);
+ cnt /= sizeof(char32_t);
- tot_size=p->tot_size + cnt*sizeof(unicode_char);
+ tot_size=p->tot_size + cnt*sizeof(char32_t);
/* Keep track of the total size saved */
if (p->tail)
@@ -1412,10 +1412,10 @@ static int save_unicode(const char *text, size_t cnt, void *ptr)
if (n)
{
memcpy(p->tail->fragment+p->tail->fragment_size,
- text, n*sizeof(unicode_char));
+ text, n*sizeof(char32_t));
cnt -= n;
- text += n*sizeof(unicode_char);
+ text += n*sizeof(char32_t);
p->tail->fragment_size += n;
}
}
@@ -1428,7 +1428,7 @@ static int save_unicode(const char *text, size_t cnt, void *ptr)
cnt_alloc=16;
if ((fragment=malloc(sizeof(struct unicode_convert_buf)
- +cnt_alloc*sizeof(unicode_char)))
+ +cnt_alloc*sizeof(char32_t)))
== NULL)
{
p->errflag=1;
@@ -1436,10 +1436,10 @@ static int save_unicode(const char *text, size_t cnt, void *ptr)
}
fragment->next=NULL;
- fragment->fragment=(unicode_char *)(fragment+1);
+ fragment->fragment=(char32_t *)(fragment+1);
fragment->max_fragment_size=cnt_alloc;
fragment->fragment_size=cnt;
- memcpy(fragment->fragment, text, cnt*sizeof(unicode_char));
+ memcpy(fragment->fragment, text, cnt*sizeof(char32_t));
*(p->last)=fragment;
p->last=&fragment->next;
@@ -1480,7 +1480,7 @@ static int deinit_tounicode(void *ptr, int *errptr)
if (rc == 0 && p->nullterminate)
{
- unicode_char zero=0;
+ char32_t zero=0;
rc=save_unicode( (const char *)&zero, sizeof(zero),
p->hdr.ptr);
@@ -1526,7 +1526,7 @@ static int deinit_tounicode(void *ptr, int *errptr)
int unicode_convert_tou_tobuf(const char *text,
size_t text_l,
const char *charset,
- unicode_char **uc,
+ char32_t **uc,
size_t *ucsize,
int *err)
{
@@ -1547,7 +1547,7 @@ int unicode_convert_tou_tobuf(const char *text,
return 0;
}
-int unicode_convert_fromu_tobuf(const unicode_char *utext,
+int unicode_convert_fromu_tobuf(const char32_t *utext,
size_t utext_l,
const char *charset,
char **c,
@@ -1579,10 +1579,10 @@ int unicode_convert_fromu_tobuf(const unicode_char *utext,
char *unicode_convert_tocase(const char *str,
const char *charset,
- unicode_char (*first_char_func)(unicode_char),
- unicode_char (*char_func)(unicode_char))
+ char32_t (*first_char_func)(char32_t),
+ char32_t (*char_func)(char32_t))
{
- unicode_char *uc;
+ char32_t *uc;
size_t ucsize;
size_t i;
int err;
diff --git a/unicode/unicode_categories.c b/unicode/unicode_categories.c
index bdbdbe1..5e57e40 100644
--- a/unicode/unicode_categories.c
+++ b/unicode/unicode_categories.c
@@ -9,7 +9,7 @@
#include "categoriestab.h"
#include "linebreaktab_internal.h"
-uint32_t unicode_category_lookup(unicode_char ch)
+uint32_t unicode_category_lookup(char32_t ch)
{
return unicode_tab32_lookup(ch,
unicode_indextab,
@@ -20,7 +20,7 @@ uint32_t unicode_category_lookup(unicode_char ch)
0);
}
-int unicode_isspace(unicode_char ch)
+int unicode_isspace(char32_t ch)
{
switch (unicode_lb_lookup(ch)) {
case UNICODE_LB_BK:
@@ -34,7 +34,7 @@ int unicode_isspace(unicode_char ch)
return unicode_isblank(ch);
}
-int unicode_isblank(unicode_char ch)
+int unicode_isblank(char32_t ch)
{
if (ch == 9)
return 1;
@@ -45,40 +45,40 @@ int unicode_isblank(unicode_char ch)
return 0;
}
-int unicode_isalpha(unicode_char ch)
+int unicode_isalpha(char32_t ch)
{
return (unicode_category_lookup(ch) & UNICODE_CATEGORY_1) ==
UNICODE_CATEGORY_1_LETTER;
}
-int unicode_isdigit(unicode_char ch)
+int unicode_isdigit(char32_t ch)
{
return unicode_category_lookup(ch) ==
(UNICODE_CATEGORY_1_NUMBER | UNICODE_CATEGORY_2_DIGIT);
}
-int unicode_isalnum(unicode_char ch)
+int unicode_isalnum(char32_t ch)
{
return unicode_isalpha(ch) || unicode_isdigit(ch);
}
-int unicode_isgraph(unicode_char ch)
+int unicode_isgraph(char32_t ch)
{
return (ch >= ' ' && !unicode_isspace(ch));
}
-int unicode_ispunct(unicode_char ch)
+int unicode_ispunct(char32_t ch)
{
return (unicode_category_lookup(ch) & UNICODE_CATEGORY_1) ==
UNICODE_CATEGORY_1_PUNCTUATION;
}
-int unicode_islower(unicode_char ch)
+int unicode_islower(char32_t ch)
{
return unicode_isalpha(ch) && ch == unicode_lc(ch);
}
-int unicode_isupper(unicode_char ch)
+int unicode_isupper(char32_t ch)
{
return unicode_isalpha(ch) && ch == unicode_uc(ch);
}
diff --git a/unicode/unicode_graphemebreak.c b/unicode/unicode_graphemebreak.c
index 7df3164..926bfb1 100644
--- a/unicode/unicode_graphemebreak.c
+++ b/unicode/unicode_graphemebreak.c
@@ -26,7 +26,7 @@
#include "graphemebreaktab.h"
-int unicode_grapheme_break(unicode_char a, unicode_char b)
+int unicode_grapheme_break(char32_t a, char32_t b)
{
uint8_t ac=unicode_tab_lookup(a, unicode_indextab,
sizeof(unicode_indextab)/sizeof(unicode_indextab[0]),
diff --git a/unicode/unicode_htmlent.c b/unicode/unicode_htmlent.c
index b1111ce..5472db8 100644
--- a/unicode/unicode_htmlent.c
+++ b/unicode/unicode_htmlent.c
@@ -12,7 +12,7 @@
struct i {
size_t n_start;
size_t n_size;
- unicode_char v;
+ char32_t v;
};
#include "unicode_htmlent.h"
@@ -42,14 +42,14 @@ static int compar(const void *key, const void *obj)
return 0;
}
-unicode_char unicode_html40ent_lookup(const char *n)
+char32_t unicode_html40ent_lookup(const char *n)
{
const struct i *ptr;
if (*n == '#')
{
const char *p=n;
- unicode_char uc;
+ char32_t uc;
char *endptr;
++p;
diff --git a/unicode/unicode_linebreak.c b/unicode/unicode_linebreak.c
index 85421fd..a843c6c 100644
--- a/unicode/unicode_linebreak.c
+++ b/unicode/unicode_linebreak.c
@@ -91,7 +91,7 @@ static int end_def(unicode_lb_info_t i)
#define RESULT(x) (*i->cb_func)((x), i->cb_arg)
int unicode_lb_next_cnt(unicode_lb_info_t i,
- const unicode_char *chars,
+ const char32_t *chars,
size_t cnt)
{
while (cnt)
@@ -107,7 +107,7 @@ int unicode_lb_next_cnt(unicode_lb_info_t i,
return 0;
}
-int unicode_lb_lookup(unicode_char ch)
+int unicode_lb_lookup(char32_t ch)
{
return unicode_tab_lookup(ch,
unicode_indextab,
@@ -119,7 +119,7 @@ int unicode_lb_lookup(unicode_char ch)
}
int unicode_lb_next(unicode_lb_info_t i,
- unicode_char ch)
+ char32_t ch)
{
return (*i->next_handler)(i, (i->opts & UNICODE_LB_OPT_DASHWJ) &&
(ch == 0x2012 || ch == 0x2013)
@@ -596,7 +596,7 @@ struct unicode_lbc_info {
size_t buf_ptr;
- int (*cb_func)(int, unicode_char, void *);
+ int (*cb_func)(int, char32_t, void *);
void *cb_arg;
};
@@ -614,7 +614,7 @@ static int unicode_lbc_callback(int value, void *ptr)
h->cb_arg);
}
-unicode_lbc_info_t unicode_lbc_init(int (*cb_func)(int, unicode_char, void *),
+unicode_lbc_info_t unicode_lbc_init(int (*cb_func)(int, char32_t, void *),
void *cb_arg)
{
unicode_lbc_info_t h=
@@ -641,7 +641,7 @@ void unicode_lbc_set_opts(unicode_lbc_info_t i, int opts)
}
int unicode_lbc_next_cnt(unicode_lbc_info_t i,
- const unicode_char *chars,
+ const char32_t *chars,
size_t cnt)
{
while (cnt)
@@ -657,7 +657,7 @@ int unicode_lbc_next_cnt(unicode_lbc_info_t i,
return 0;
}
-int unicode_lbc_next(unicode_lbc_info_t i, unicode_char ch)
+int unicode_lbc_next(unicode_lbc_info_t i, char32_t ch)
{
if (i->buf_ptr >= unicode_buf_len(&i->buf))
{
diff --git a/unicode/unicode_scripts.c b/unicode/unicode_scripts.c
index 6d52b40..713846b 100644
--- a/unicode/unicode_scripts.c
+++ b/unicode/unicode_scripts.c
@@ -8,7 +8,7 @@
#include "courier-unicode.h"
#include "scriptstab.h"
-unicode_script_t unicode_script(unicode_char a)
+unicode_script_t unicode_script(char32_t a)
{
return unicode_tab_lookup(a, unicode_indextab,
sizeof(unicode_indextab)
diff --git a/unicode/unicode_tablookup.c b/unicode/unicode_tablookup.c
index 067aa5d..1f04652 100644
--- a/unicode/unicode_tablookup.c
+++ b/unicode/unicode_tablookup.c
@@ -9,7 +9,7 @@
#define BLOCK_SIZE 256
-uint8_t unicode_tab_lookup(unicode_char ch,
+uint8_t unicode_tab_lookup(char32_t ch,
const size_t *unicode_indextab,
size_t unicode_indextab_sizeof,
const uint8_t (*unicode_rangetab)[2],
@@ -48,7 +48,7 @@ uint8_t unicode_tab_lookup(unicode_char ch,
return uclass;
}
-uint32_t unicode_tab32_lookup(unicode_char ch,
+uint32_t unicode_tab32_lookup(char32_t ch,
const size_t *unicode_indextab,
size_t unicode_indextab_sizeof,
const uint8_t (*unicode_rangetab)[2],
diff --git a/unicode/unicode_ultcase.c b/unicode/unicode_ultcase.c
index 44da797..3ddd9e3 100644
--- a/unicode/unicode_ultcase.c
+++ b/unicode/unicode_ultcase.c
@@ -8,16 +8,16 @@
#include "courier-unicode.h"
extern const unsigned unicode_case_hash;
-extern const unicode_char unicode_case_tab[][4];
+extern const char32_t unicode_case_tab[][4];
extern const unsigned unicode_case_offset[];
-static unsigned find_case(unicode_char c)
+static unsigned find_case(char32_t c)
{
unsigned idx= c % unicode_case_hash;
unsigned i=unicode_case_offset[idx];
- unicode_char uc;
+ char32_t uc;
--i;
@@ -31,24 +31,24 @@ static unsigned find_case(unicode_char c)
return (0);
}
-unicode_char unicode_uc(unicode_char c)
+char32_t unicode_uc(char32_t c)
{
unsigned i=find_case(c);
return (unicode_case_tab[i][0] != c ? c:unicode_case_tab[i][1]);
}
-unicode_char unicode_lc(unicode_char c)
+char32_t unicode_lc(char32_t c)
{
unsigned i=find_case(c);
return (unicode_case_tab[i][0] != c ? c:unicode_case_tab[i][2]);
}
-unicode_char unicode_tc(unicode_char c)
+char32_t unicode_tc(char32_t c)
{
unsigned i;
- unicode_char oc=c;
+ char32_t oc=c;
c=unicode_lc(c);
i=find_case(c);
diff --git a/unicode/unicode_ultcasetab.c b/unicode/unicode_ultcasetab.c
index 747f9c6..5b8fee2 100644
--- a/unicode/unicode_ultcasetab.c
+++ b/unicode/unicode_ultcasetab.c
@@ -8,7 +8,7 @@
const unsigned unicode_case_hash=2048;
/* unicode_case_maxbucket=6*/
-const unicode_char unicode_case_tab[][4]={
+const char32_t unicode_case_tab[][4]={
{0x0041,0x0041,0x0061,0x0041},{0x0042,0x0042,0x0062,0x0042},{0x0043,0x0043,0x0063,0x0043},{0x0044,0x0044,0x0064,0x0044},
{0x0045,0x0045,0x0065,0x0045},{0x0046,0x0046,0x0066,0x0046},{0x0047,0x0047,0x0067,0x0047},{0x0048,0x0048,0x0068,0x0048},
{0x0049,0x0049,0x0069,0x0049},{0x004a,0x004a,0x006a,0x004a},{0x004b,0x004b,0x006b,0x004b},{0x004c,0x004c,0x006c,0x004c},
@@ -22,39 +22,39 @@ const unicode_char unicode_case_tab[][4]={
{0x006f,0x004f,0x006f,0x004f},{0x0070,0x0050,0x0070,0x0050},{0x0071,0x0051,0x0071,0x0051},{0x0072,0x0052,0x0072,0x0052},
{0x0073,0x0053,0x0073,0x0053},{0x0074,0x0054,0x0074,0x0054},{0x0075,0x0055,0x0075,0x0055},{0x0076,0x0056,0x0076,0x0056},
{0x0077,0x0057,0x0077,0x0057},{0x0078,0x0058,0x0078,0x0058},{0x0079,0x0059,0x0079,0x0059},{0x007a,0x005a,0x007a,0x005a},
-{0x118a0,0x118a0,0x118c0,0x118a0},{0x10a0,0x10a0,0x2d00,0x10a0},{0x10a1,0x10a1,0x2d01,0x10a1},{0x118a1,0x118a1,0x118c1,0x118a1},
-{0x10a2,0x10a2,0x2d02,0x10a2},{0x118a2,0x118a2,0x118c2,0x118a2},{0x118a3,0x118a3,0x118c3,0x118a3},{0x10a3,0x10a3,0x2d03,0x10a3},
-{0x10a4,0x10a4,0x2d04,0x10a4},{0x118a4,0x118a4,0x118c4,0x118a4},{0x10a5,0x10a5,0x2d05,0x10a5},{0x118a5,0x118a5,0x118c5,0x118a5},
-{0x118a6,0x118a6,0x118c6,0x118a6},{0x10a6,0x10a6,0x2d06,0x10a6},{0x10a7,0x10a7,0x2d07,0x10a7},{0x118a7,0x118a7,0x118c7,0x118a7},
-{0x118a8,0x118a8,0x118c8,0x118a8},{0x10a8,0x10a8,0x2d08,0x10a8},{0x10a9,0x10a9,0x2d09,0x10a9},{0x118a9,0x118a9,0x118c9,0x118a9},
+{0x10a0,0x10a0,0x2d00,0x10a0},{0x118a0,0x118a0,0x118c0,0x118a0},{0x118a1,0x118a1,0x118c1,0x118a1},{0x10a1,0x10a1,0x2d01,0x10a1},
+{0x118a2,0x118a2,0x118c2,0x118a2},{0x10a2,0x10a2,0x2d02,0x10a2},{0x118a3,0x118a3,0x118c3,0x118a3},{0x10a3,0x10a3,0x2d03,0x10a3},
+{0x118a4,0x118a4,0x118c4,0x118a4},{0x10a4,0x10a4,0x2d04,0x10a4},{0x118a5,0x118a5,0x118c5,0x118a5},{0x10a5,0x10a5,0x2d05,0x10a5},
+{0x118a6,0x118a6,0x118c6,0x118a6},{0x10a6,0x10a6,0x2d06,0x10a6},{0x118a7,0x118a7,0x118c7,0x118a7},{0x10a7,0x10a7,0x2d07,0x10a7},
+{0x10a8,0x10a8,0x2d08,0x10a8},{0x118a8,0x118a8,0x118c8,0x118a8},{0x118a9,0x118a9,0x118c9,0x118a9},{0x10a9,0x10a9,0x2d09,0x10a9},
{0x10aa,0x10aa,0x2d0a,0x10aa},{0x118aa,0x118aa,0x118ca,0x118aa},{0x118ab,0x118ab,0x118cb,0x118ab},{0x10ab,0x10ab,0x2d0b,0x10ab},
-{0x118ac,0x118ac,0x118cc,0x118ac},{0x10ac,0x10ac,0x2d0c,0x10ac},{0x118ad,0x118ad,0x118cd,0x118ad},{0x10ad,0x10ad,0x2d0d,0x10ad},
-{0x10ae,0x10ae,0x2d0e,0x10ae},{0x118ae,0x118ae,0x118ce,0x118ae},{0x118af,0x118af,0x118cf,0x118af},{0x10af,0x10af,0x2d0f,0x10af},
-{0x118b0,0x118b0,0x118d0,0x118b0},{0x10b0,0x10b0,0x2d10,0x10b0},{0x10b1,0x10b1,0x2d11,0x10b1},{0x118b1,0x118b1,0x118d1,0x118b1},
+{0x10ac,0x10ac,0x2d0c,0x10ac},{0x118ac,0x118ac,0x118cc,0x118ac},{0x10ad,0x10ad,0x2d0d,0x10ad},{0x118ad,0x118ad,0x118cd,0x118ad},
+{0x118ae,0x118ae,0x118ce,0x118ae},{0x10ae,0x10ae,0x2d0e,0x10ae},{0x10af,0x10af,0x2d0f,0x10af},{0x118af,0x118af,0x118cf,0x118af},
+{0x10b0,0x10b0,0x2d10,0x10b0},{0x118b0,0x118b0,0x118d0,0x118b0},{0x10b1,0x10b1,0x2d11,0x10b1},{0x118b1,0x118b1,0x118d1,0x118b1},
{0x10b2,0x10b2,0x2d12,0x10b2},{0x118b2,0x118b2,0x118d2,0x118b2},{0x10b3,0x10b3,0x2d13,0x10b3},{0x118b3,0x118b3,0x118d3,0x118b3},
-{0x118b4,0x118b4,0x118d4,0x118b4},{0x10b4,0x10b4,0x2d14,0x10b4},{0x118b5,0x118b5,0x118d5,0x118b5},{0x00b5,0x039c,0x00b5,0x039c},
-{0x10b5,0x10b5,0x2d15,0x10b5},{0x118b6,0x118b6,0x118d6,0x118b6},{0x10b6,0x10b6,0x2d16,0x10b6},{0x118b7,0x118b7,0x118d7,0x118b7},
-{0x10b7,0x10b7,0x2d17,0x10b7},{0x118b8,0x118b8,0x118d8,0x118b8},{0x10b8,0x10b8,0x2d18,0x10b8},{0x10b9,0x10b9,0x2d19,0x10b9},
-{0x118b9,0x118b9,0x118d9,0x118b9},{0x10ba,0x10ba,0x2d1a,0x10ba},{0x118ba,0x118ba,0x118da,0x118ba},{0x118bb,0x118bb,0x118db,0x118bb},
-{0x10bb,0x10bb,0x2d1b,0x10bb},{0x118bc,0x118bc,0x118dc,0x118bc},{0x10bc,0x10bc,0x2d1c,0x10bc},{0x118bd,0x118bd,0x118dd,0x118bd},
-{0x10bd,0x10bd,0x2d1d,0x10bd},{0x118be,0x118be,0x118de,0x118be},{0x10be,0x10be,0x2d1e,0x10be},{0x10bf,0x10bf,0x2d1f,0x10bf},
-{0x118bf,0x118bf,0x118df,0x118bf},{0x00c0,0x00c0,0x00e0,0x00c0},{0x10c0,0x10c0,0x2d20,0x10c0},{0x118c0,0x118a0,0x118c0,0x118a0},
-{0x10c1,0x10c1,0x2d21,0x10c1},{0x00c1,0x00c1,0x00e1,0x00c1},{0x118c1,0x118a1,0x118c1,0x118a1},{0x118c2,0x118a2,0x118c2,0x118a2},
-{0x10c2,0x10c2,0x2d22,0x10c2},{0x00c2,0x00c2,0x00e2,0x00c2},{0x118c3,0x118a3,0x118c3,0x118a3},{0x10c3,0x10c3,0x2d23,0x10c3},
-{0x00c3,0x00c3,0x00e3,0x00c3},{0x118c4,0x118a4,0x118c4,0x118a4},{0x10c4,0x10c4,0x2d24,0x10c4},{0x00c4,0x00c4,0x00e4,0x00c4},
-{0x10c5,0x10c5,0x2d25,0x10c5},{0x118c5,0x118a5,0x118c5,0x118a5},{0x00c5,0x00c5,0x00e5,0x00c5},{0x00c6,0x00c6,0x00e6,0x00c6},
+{0x10b4,0x10b4,0x2d14,0x10b4},{0x118b4,0x118b4,0x118d4,0x118b4},{0x118b5,0x118b5,0x118d5,0x118b5},{0x00b5,0x039c,0x00b5,0x039c},
+{0x10b5,0x10b5,0x2d15,0x10b5},{0x10b6,0x10b6,0x2d16,0x10b6},{0x118b6,0x118b6,0x118d6,0x118b6},{0x10b7,0x10b7,0x2d17,0x10b7},
+{0x118b7,0x118b7,0x118d7,0x118b7},{0x118b8,0x118b8,0x118d8,0x118b8},{0x10b8,0x10b8,0x2d18,0x10b8},{0x118b9,0x118b9,0x118d9,0x118b9},
+{0x10b9,0x10b9,0x2d19,0x10b9},{0x118ba,0x118ba,0x118da,0x118ba},{0x10ba,0x10ba,0x2d1a,0x10ba},{0x118bb,0x118bb,0x118db,0x118bb},
+{0x10bb,0x10bb,0x2d1b,0x10bb},{0x10bc,0x10bc,0x2d1c,0x10bc},{0x118bc,0x118bc,0x118dc,0x118bc},{0x118bd,0x118bd,0x118dd,0x118bd},
+{0x10bd,0x10bd,0x2d1d,0x10bd},{0x118be,0x118be,0x118de,0x118be},{0x10be,0x10be,0x2d1e,0x10be},{0x118bf,0x118bf,0x118df,0x118bf},
+{0x10bf,0x10bf,0x2d1f,0x10bf},{0x10c0,0x10c0,0x2d20,0x10c0},{0x118c0,0x118a0,0x118c0,0x118a0},{0x00c0,0x00c0,0x00e0,0x00c0},
+{0x00c1,0x00c1,0x00e1,0x00c1},{0x10c1,0x10c1,0x2d21,0x10c1},{0x118c1,0x118a1,0x118c1,0x118a1},{0x118c2,0x118a2,0x118c2,0x118a2},
+{0x00c2,0x00c2,0x00e2,0x00c2},{0x10c2,0x10c2,0x2d22,0x10c2},{0x10c3,0x10c3,0x2d23,0x10c3},{0x118c3,0x118a3,0x118c3,0x118a3},
+{0x00c3,0x00c3,0x00e3,0x00c3},{0x10c4,0x10c4,0x2d24,0x10c4},{0x118c4,0x118a4,0x118c4,0x118a4},{0x00c4,0x00c4,0x00e4,0x00c4},
+{0x118c5,0x118a5,0x118c5,0x118a5},{0x10c5,0x10c5,0x2d25,0x10c5},{0x00c5,0x00c5,0x00e5,0x00c5},{0x00c6,0x00c6,0x00e6,0x00c6},
{0x118c6,0x118a6,0x118c6,0x118a6},{0x10c7,0x10c7,0x2d27,0x10c7},{0x118c7,0x118a7,0x118c7,0x118a7},{0x00c7,0x00c7,0x00e7,0x00c7},
-{0x00c8,0x00c8,0x00e8,0x00c8},{0x118c8,0x118a8,0x118c8,0x118a8},{0x118c9,0x118a9,0x118c9,0x118a9},{0x00c9,0x00c9,0x00e9,0x00c9},
-{0x118ca,0x118aa,0x118ca,0x118aa},{0x00ca,0x00ca,0x00ea,0x00ca},{0x00cb,0x00cb,0x00eb,0x00cb},{0x118cb,0x118ab,0x118cb,0x118ab},
-{0x00cc,0x00cc,0x00ec,0x00cc},{0x118cc,0x118ac,0x118cc,0x118ac},{0x00cd,0x00cd,0x00ed,0x00cd},{0x118cd,0x118ad,0x118cd,0x118ad},
-{0x10cd,0x10cd,0x2d2d,0x10cd},{0x00ce,0x00ce,0x00ee,0x00ce},{0x118ce,0x118ae,0x118ce,0x118ae},{0x118cf,0x118af,0x118cf,0x118af},
-{0x00cf,0x00cf,0x00ef,0x00cf},{0x00d0,0x00d0,0x00f0,0x00d0},{0x118d0,0x118b0,0x118d0,0x118b0},{0x00d1,0x00d1,0x00f1,0x00d1},
-{0x118d1,0x118b1,0x118d1,0x118b1},{0x118d2,0x118b2,0x118d2,0x118b2},{0x00d2,0x00d2,0x00f2,0x00d2},{0x00d3,0x00d3,0x00f3,0x00d3},
-{0x118d3,0x118b3,0x118d3,0x118b3},{0x118d4,0x118b4,0x118d4,0x118b4},{0x00d4,0x00d4,0x00f4,0x00d4},{0x00d5,0x00d5,0x00f5,0x00d5},
-{0x118d5,0x118b5,0x118d5,0x118b5},{0x00d6,0x00d6,0x00f6,0x00d6},{0x118d6,0x118b6,0x118d6,0x118b6},{0x118d7,0x118b7,0x118d7,0x118b7},
+{0x118c8,0x118a8,0x118c8,0x118a8},{0x00c8,0x00c8,0x00e8,0x00c8},{0x118c9,0x118a9,0x118c9,0x118a9},{0x00c9,0x00c9,0x00e9,0x00c9},
+{0x00ca,0x00ca,0x00ea,0x00ca},{0x118ca,0x118aa,0x118ca,0x118aa},{0x00cb,0x00cb,0x00eb,0x00cb},{0x118cb,0x118ab,0x118cb,0x118ab},
+{0x118cc,0x118ac,0x118cc,0x118ac},{0x00cc,0x00cc,0x00ec,0x00cc},{0x118cd,0x118ad,0x118cd,0x118ad},{0x10cd,0x10cd,0x2d2d,0x10cd},
+{0x00cd,0x00cd,0x00ed,0x00cd},{0x00ce,0x00ce,0x00ee,0x00ce},{0x118ce,0x118ae,0x118ce,0x118ae},{0x00cf,0x00cf,0x00ef,0x00cf},
+{0x118cf,0x118af,0x118cf,0x118af},{0x118d0,0x118b0,0x118d0,0x118b0},{0x00d0,0x00d0,0x00f0,0x00d0},{0x00d1,0x00d1,0x00f1,0x00d1},
+{0x118d1,0x118b1,0x118d1,0x118b1},{0x00d2,0x00d2,0x00f2,0x00d2},{0x118d2,0x118b2,0x118d2,0x118b2},{0x00d3,0x00d3,0x00f3,0x00d3},
+{0x118d3,0x118b3,0x118d3,0x118b3},{0x118d4,0x118b4,0x118d4,0x118b4},{0x00d4,0x00d4,0x00f4,0x00d4},{0x118d5,0x118b5,0x118d5,0x118b5},
+{0x00d5,0x00d5,0x00f5,0x00d5},{0x00d6,0x00d6,0x00f6,0x00d6},{0x118d6,0x118b6,0x118d6,0x118b6},{0x118d7,0x118b7,0x118d7,0x118b7},
{0x00d8,0x00d8,0x00f8,0x00d8},{0x118d8,0x118b8,0x118d8,0x118b8},{0x118d9,0x118b9,0x118d9,0x118b9},{0x00d9,0x00d9,0x00f9,0x00d9},
-{0x118da,0x118ba,0x118da,0x118ba},{0x00da,0x00da,0x00fa,0x00da},{0x118db,0x118bb,0x118db,0x118bb},{0x00db,0x00db,0x00fb,0x00db},
-{0x00dc,0x00dc,0x00fc,0x00dc},{0x118dc,0x118bc,0x118dc,0x118bc},{0x00dd,0x00dd,0x00fd,0x00dd},{0x118dd,0x118bd,0x118dd,0x118bd},
+{0x00da,0x00da,0x00fa,0x00da},{0x118da,0x118ba,0x118da,0x118ba},{0x00db,0x00db,0x00fb,0x00db},{0x118db,0x118bb,0x118db,0x118bb},
+{0x118dc,0x118bc,0x118dc,0x118bc},{0x00dc,0x00dc,0x00fc,0x00dc},{0x118dd,0x118bd,0x118dd,0x118bd},{0x00dd,0x00dd,0x00fd,0x00dd},
{0x00de,0x00de,0x00fe,0x00de},{0x118de,0x118be,0x118de,0x118be},{0x118df,0x118bf,0x118df,0x118bf},{0x00e0,0x00c0,0x00e0,0x00c0},
{0x00e1,0x00c1,0x00e1,0x00c1},{0x00e2,0x00c2,0x00e2,0x00c2},{0x00e3,0x00c3,0x00e3,0x00c3},{0x00e4,0x00c4,0x00e4,0x00c4},
{0x00e5,0x00c5,0x00e5,0x00c5},{0x00e6,0x00c6,0x00e6,0x00c6},{0x00e7,0x00c7,0x00e7,0x00c7},{0x00e8,0x00c8,0x00e8,0x00c8},
@@ -73,9 +73,9 @@ const unicode_char unicode_case_tab[][4]={
{0x011a,0x011a,0x011b,0x011a},{0x011b,0x011a,0x011b,0x011a},{0x011c,0x011c,0x011d,0x011c},{0x011d,0x011c,0x011d,0x011c},
{0x011e,0x011e,0x011f,0x011e},{0x011f,0x011e,0x011f,0x011e},{0x0120,0x0120,0x0121,0x0120},{0x0121,0x0120,0x0121,0x0120},
{0x0122,0x0122,0x0123,0x0122},{0x0123,0x0122,0x0123,0x0122},{0x0124,0x0124,0x0125,0x0124},{0x0125,0x0124,0x0125,0x0124},
-{0x0126,0x0126,0x0127,0x0126},{0x2126,0x2126,0x03c9,0x2126},{0x0127,0x0126,0x0127,0x0126},{0x0128,0x0128,0x0129,0x0128},
-{0x0129,0x0128,0x0129,0x0128},{0x012a,0x012a,0x012b,0x012a},{0x212a,0x212a,0x006b,0x212a},{0x012b,0x012a,0x012b,0x012a},
-{0x212b,0x212b,0x00e5,0x212b},{0x012c,0x012c,0x012d,0x012c},{0x012d,0x012c,0x012d,0x012c},{0x012e,0x012e,0x012f,0x012e},
+{0x2126,0x2126,0x03c9,0x2126},{0x0126,0x0126,0x0127,0x0126},{0x0127,0x0126,0x0127,0x0126},{0x0128,0x0128,0x0129,0x0128},
+{0x0129,0x0128,0x0129,0x0128},{0x012a,0x012a,0x012b,0x012a},{0x212a,0x212a,0x006b,0x212a},{0x212b,0x212b,0x00e5,0x212b},
+{0x012b,0x012a,0x012b,0x012a},{0x012c,0x012c,0x012d,0x012c},{0x012d,0x012c,0x012d,0x012c},{0x012e,0x012e,0x012f,0x012e},
{0x012f,0x012e,0x012f,0x012e},{0x0130,0x0130,0x0069,0x0130},{0x0131,0x0049,0x0131,0x0049},{0x2132,0x2132,0x214e,0x2132},
{0x0132,0x0132,0x0133,0x0132},{0x0133,0x0132,0x0133,0x0132},{0x0134,0x0134,0x0135,0x0134},{0x0135,0x0134,0x0135,0x0134},
{0x0136,0x0136,0x0137,0x0136},{0x0137,0x0136,0x0137,0x0136},{0x0139,0x0139,0x013a,0x0139},{0x013a,0x0139,0x013a,0x0139},
@@ -88,24 +88,24 @@ const unicode_char unicode_case_tab[][4]={
{0x0153,0x0152,0x0153,0x0152},{0x0154,0x0154,0x0155,0x0154},{0x0155,0x0154,0x0155,0x0154},{0x0156,0x0156,0x0157,0x0156},
{0x0157,0x0156,0x0157,0x0156},{0x0158,0x0158,0x0159,0x0158},{0x0159,0x0158,0x0159,0x0158},{0x015a,0x015a,0x015b,0x015a},
{0x015b,0x015a,0x015b,0x015a},{0x015c,0x015c,0x015d,0x015c},{0x015d,0x015c,0x015d,0x015c},{0x015e,0x015e,0x015f,0x015e},
-{0x015f,0x015e,0x015f,0x015e},{0x0160,0x0160,0x0161,0x0160},{0x2160,0x2160,0x2170,0x2160},{0x2161,0x2161,0x2171,0x2161},
-{0x0161,0x0160,0x0161,0x0160},{0x0162,0x0162,0x0163,0x0162},{0x2162,0x2162,0x2172,0x2162},{0x0163,0x0162,0x0163,0x0162},
-{0x2163,0x2163,0x2173,0x2163},{0x2164,0x2164,0x2174,0x2164},{0x0164,0x0164,0x0165,0x0164},{0x2165,0x2165,0x2175,0x2165},
-{0x0165,0x0164,0x0165,0x0164},{0x2166,0x2166,0x2176,0x2166},{0x0166,0x0166,0x0167,0x0166},{0x2167,0x2167,0x2177,0x2167},
+{0x015f,0x015e,0x015f,0x015e},{0x2160,0x2160,0x2170,0x2160},{0x0160,0x0160,0x0161,0x0160},{0x0161,0x0160,0x0161,0x0160},
+{0x2161,0x2161,0x2171,0x2161},{0x2162,0x2162,0x2172,0x2162},{0x0162,0x0162,0x0163,0x0162},{0x0163,0x0162,0x0163,0x0162},
+{0x2163,0x2163,0x2173,0x2163},{0x2164,0x2164,0x2174,0x2164},{0x0164,0x0164,0x0165,0x0164},{0x0165,0x0164,0x0165,0x0164},
+{0x2165,0x2165,0x2175,0x2165},{0x0166,0x0166,0x0167,0x0166},{0x2166,0x2166,0x2176,0x2166},{0x2167,0x2167,0x2177,0x2167},
{0x0167,0x0166,0x0167,0x0166},{0x0168,0x0168,0x0169,0x0168},{0x2168,0x2168,0x2178,0x2168},{0x2169,0x2169,0x2179,0x2169},
-{0x0169,0x0168,0x0169,0x0168},{0x216a,0x216a,0x217a,0x216a},{0x016a,0x016a,0x016b,0x016a},{0x016b,0x016a,0x016b,0x016a},
-{0x216b,0x216b,0x217b,0x216b},{0x216c,0x216c,0x217c,0x216c},{0x016c,0x016c,0x016d,0x016c},{0x216d,0x216d,0x217d,0x216d},
+{0x0169,0x0168,0x0169,0x0168},{0x016a,0x016a,0x016b,0x016a},{0x216a,0x216a,0x217a,0x216a},{0x016b,0x016a,0x016b,0x016a},
+{0x216b,0x216b,0x217b,0x216b},{0x016c,0x016c,0x016d,0x016c},{0x216c,0x216c,0x217c,0x216c},{0x216d,0x216d,0x217d,0x216d},
{0x016d,0x016c,0x016d,0x016c},{0x216e,0x216e,0x217e,0x216e},{0x016e,0x016e,0x016f,0x016e},{0x016f,0x016e,0x016f,0x016e},
-{0x216f,0x216f,0x217f,0x216f},{0x2170,0x2160,0x2170,0x2160},{0x0170,0x0170,0x0171,0x0170},{0x2171,0x2161,0x2171,0x2161},
-{0x0171,0x0170,0x0171,0x0170},{0x2172,0x2162,0x2172,0x2162},{0x0172,0x0172,0x0173,0x0172},{0x0173,0x0172,0x0173,0x0172},
-{0x2173,0x2163,0x2173,0x2163},{0x2174,0x2164,0x2174,0x2164},{0x0174,0x0174,0x0175,0x0174},{0x0175,0x0174,0x0175,0x0174},
-{0x2175,0x2165,0x2175,0x2165},{0x2176,0x2166,0x2176,0x2166},{0x0176,0x0176,0x0177,0x0176},{0x0177,0x0176,0x0177,0x0176},
-{0x2177,0x2167,0x2177,0x2167},{0x2178,0x2168,0x2178,0x2168},{0x0178,0x0178,0x00ff,0x0178},{0x2179,0x2169,0x2179,0x2169},
-{0x0179,0x0179,0x017a,0x0179},{0x017a,0x0179,0x017a,0x0179},{0x217a,0x216a,0x217a,0x216a},{0x217b,0x216b,0x217b,0x216b},
-{0x017b,0x017b,0x017c,0x017b},{0x017c,0x017b,0x017c,0x017b},{0x217c,0x216c,0x217c,0x216c},{0x017d,0x017d,0x017e,0x017d},
-{0x217d,0x216d,0x217d,0x216d},{0x217e,0x216e,0x217e,0x216e},{0x017e,0x017d,0x017e,0x017d},{0x217f,0x216f,0x217f,0x216f},
-{0x017f,0x0053,0x017f,0x0053},{0x0180,0x0243,0x0180,0x0243},{0x0181,0x0181,0x0253,0x0181},{0x0182,0x0182,0x0183,0x0182},
-{0x0183,0x0182,0x0183,0x0182},{0x2183,0x2183,0x2184,0x2183},{0x2184,0x2183,0x2184,0x2183},{0x0184,0x0184,0x0185,0x0184},
+{0x216f,0x216f,0x217f,0x216f},{0x0170,0x0170,0x0171,0x0170},{0x2170,0x2160,0x2170,0x2160},{0x0171,0x0170,0x0171,0x0170},
+{0x2171,0x2161,0x2171,0x2161},{0x2172,0x2162,0x2172,0x2162},{0x0172,0x0172,0x0173,0x0172},{0x0173,0x0172,0x0173,0x0172},
+{0x2173,0x2163,0x2173,0x2163},{0x0174,0x0174,0x0175,0x0174},{0x2174,0x2164,0x2174,0x2164},{0x2175,0x2165,0x2175,0x2165},
+{0x0175,0x0174,0x0175,0x0174},{0x2176,0x2166,0x2176,0x2166},{0x0176,0x0176,0x0177,0x0176},{0x2177,0x2167,0x2177,0x2167},
+{0x0177,0x0176,0x0177,0x0176},{0x2178,0x2168,0x2178,0x2168},{0x0178,0x0178,0x00ff,0x0178},{0x0179,0x0179,0x017a,0x0179},
+{0x2179,0x2169,0x2179,0x2169},{0x217a,0x216a,0x217a,0x216a},{0x017a,0x0179,0x017a,0x0179},{0x217b,0x216b,0x217b,0x216b},
+{0x017b,0x017b,0x017c,0x017b},{0x217c,0x216c,0x217c,0x216c},{0x017c,0x017b,0x017c,0x017b},{0x017d,0x017d,0x017e,0x017d},
+{0x217d,0x216d,0x217d,0x216d},{0x017e,0x017d,0x017e,0x017d},{0x217e,0x216e,0x217e,0x216e},{0x017f,0x0053,0x017f,0x0053},
+{0x217f,0x216f,0x217f,0x216f},{0x0180,0x0243,0x0180,0x0243},{0x0181,0x0181,0x0253,0x0181},{0x0182,0x0182,0x0183,0x0182},
+{0x2183,0x2183,0x2184,0x2183},{0x0183,0x0182,0x0183,0x0182},{0x2184,0x2183,0x2184,0x2183},{0x0184,0x0184,0x0185,0x0184},
{0x0185,0x0184,0x0185,0x0184},{0x0186,0x0186,0x0254,0x0186},{0x0187,0x0187,0x0188,0x0187},{0x0188,0x0187,0x0188,0x0187},
{0x0189,0x0189,0x0256,0x0189},{0x018a,0x018a,0x0257,0x018a},{0x018b,0x018b,0x018c,0x018b},{0x018c,0x018b,0x018c,0x018b},
{0x018e,0x018e,0x01dd,0x018e},{0x018f,0x018f,0x0259,0x018f},{0x0190,0x0190,0x025b,0x0190},{0x0191,0x0191,0x0192,0x0191},
@@ -161,278 +161,278 @@ const unicode_char unicode_case_tab[][4]={
{0x0280,0x01a6,0x0280,0x01a6},{0x0283,0x01a9,0x0283,0x01a9},{0x0287,0xa7b1,0x0287,0xa7b1},{0x0288,0x01ae,0x0288,0x01ae},
{0x0289,0x0244,0x0289,0x0244},{0x028a,0x01b1,0x028a,0x01b1},{0x028b,0x01b2,0x028b,0x01b2},{0x028c,0x0245,0x028c,0x0245},
{0x0292,0x01b7,0x0292,0x01b7},{0x029d,0xa7b2,0x029d,0xa7b2},{0x029e,0xa7b0,0x029e,0xa7b0},{0x0345,0x0399,0x0345,0x0399},
-{0xab53,0xa7b3,0xab53,0xa7b3},{0xab70,0x13a0,0xab70,0x13a0},{0x0370,0x0370,0x0371,0x0370},{0xab71,0x13a1,0xab71,0x13a1},
-{0x0371,0x0370,0x0371,0x0370},{0xab72,0x13a2,0xab72,0x13a2},{0x0372,0x0372,0x0373,0x0372},{0xab73,0x13a3,0xab73,0x13a3},
-{0x0373,0x0372,0x0373,0x0372},{0xab74,0x13a4,0xab74,0x13a4},{0xab75,0x13a5,0xab75,0x13a5},{0x0376,0x0376,0x0377,0x0376},
-{0xab76,0x13a6,0xab76,0x13a6},{0x0377,0x0376,0x0377,0x0376},{0xab77,0x13a7,0xab77,0x13a7},{0xab78,0x13a8,0xab78,0x13a8},
+{0xab53,0xa7b3,0xab53,0xa7b3},{0x0370,0x0370,0x0371,0x0370},{0xab70,0x13a0,0xab70,0x13a0},{0x0371,0x0370,0x0371,0x0370},
+{0xab71,0x13a1,0xab71,0x13a1},{0xab72,0x13a2,0xab72,0x13a2},{0x0372,0x0372,0x0373,0x0372},{0xab73,0x13a3,0xab73,0x13a3},
+{0x0373,0x0372,0x0373,0x0372},{0xab74,0x13a4,0xab74,0x13a4},{0xab75,0x13a5,0xab75,0x13a5},{0xab76,0x13a6,0xab76,0x13a6},
+{0x0376,0x0376,0x0377,0x0376},{0x0377,0x0376,0x0377,0x0376},{0xab77,0x13a7,0xab77,0x13a7},{0xab78,0x13a8,0xab78,0x13a8},
{0xab79,0x13a9,0xab79,0x13a9},{0xab7a,0x13aa,0xab7a,0x13aa},{0xab7b,0x13ab,0xab7b,0x13ab},{0x037b,0x03fd,0x037b,0x03fd},
-{0x037c,0x03fe,0x037c,0x03fe},{0xab7c,0x13ac,0xab7c,0x13ac},{0xab7d,0x13ad,0xab7d,0x13ad},{0x037d,0x03ff,0x037d,0x03ff},
-{0xab7e,0x13ae,0xab7e,0x13ae},{0xab7f,0x13af,0xab7f,0x13af},{0x037f,0x037f,0x03f3,0x037f},{0xab80,0x13b0,0xab80,0x13b0},
+{0xab7c,0x13ac,0xab7c,0x13ac},{0x037c,0x03fe,0x037c,0x03fe},{0x037d,0x03ff,0x037d,0x03ff},{0xab7d,0x13ad,0xab7d,0x13ad},
+{0xab7e,0x13ae,0xab7e,0x13ae},{0x037f,0x037f,0x03f3,0x037f},{0xab7f,0x13af,0xab7f,0x13af},{0xab80,0x13b0,0xab80,0x13b0},
{0xab81,0x13b1,0xab81,0x13b1},{0xab82,0x13b2,0xab82,0x13b2},{0xab83,0x13b3,0xab83,0x13b3},{0xab84,0x13b4,0xab84,0x13b4},
-{0xab85,0x13b5,0xab85,0x13b5},{0xab86,0x13b6,0xab86,0x13b6},{0x0386,0x0386,0x03ac,0x0386},{0xab87,0x13b7,0xab87,0x13b7},
-{0x0388,0x0388,0x03ad,0x0388},{0xab88,0x13b8,0xab88,0x13b8},{0xab89,0x13b9,0xab89,0x13b9},{0x0389,0x0389,0x03ae,0x0389},
-{0x038a,0x038a,0x03af,0x038a},{0xab8a,0x13ba,0xab8a,0x13ba},{0xab8b,0x13bb,0xab8b,0x13bb},{0xab8c,0x13bc,0xab8c,0x13bc},
-{0x038c,0x038c,0x03cc,0x038c},{0xab8d,0x13bd,0xab8d,0x13bd},{0x038e,0x038e,0x03cd,0x038e},{0xab8e,0x13be,0xab8e,0x13be},
-{0x038f,0x038f,0x03ce,0x038f},{0xab8f,0x13bf,0xab8f,0x13bf},{0xab90,0x13c0,0xab90,0x13c0},{0x0391,0x0391,0x03b1,0x0391},
-{0xab91,0x13c1,0xab91,0x13c1},{0xab92,0x13c2,0xab92,0x13c2},{0x0392,0x0392,0x03b2,0x0392},{0xab93,0x13c3,0xab93,0x13c3},
-{0x0393,0x0393,0x03b3,0x0393},{0x0394,0x0394,0x03b4,0x0394},{0xab94,0x13c4,0xab94,0x13c4},{0x0395,0x0395,0x03b5,0x0395},
-{0xab95,0x13c5,0xab95,0x13c5},{0xab96,0x13c6,0xab96,0x13c6},{0x0396,0x0396,0x03b6,0x0396},{0x0397,0x0397,0x03b7,0x0397},
-{0xab97,0x13c7,0xab97,0x13c7},{0x0398,0x0398,0x03b8,0x0398},{0xab98,0x13c8,0xab98,0x13c8},{0xab99,0x13c9,0xab99,0x13c9},
+{0xab85,0x13b5,0xab85,0x13b5},{0x0386,0x0386,0x03ac,0x0386},{0xab86,0x13b6,0xab86,0x13b6},{0xab87,0x13b7,0xab87,0x13b7},
+{0xab88,0x13b8,0xab88,0x13b8},{0x0388,0x0388,0x03ad,0x0388},{0x0389,0x0389,0x03ae,0x0389},{0xab89,0x13b9,0xab89,0x13b9},
+{0x038a,0x038a,0x03af,0x038a},{0xab8a,0x13ba,0xab8a,0x13ba},{0xab8b,0x13bb,0xab8b,0x13bb},{0x038c,0x038c,0x03cc,0x038c},
+{0xab8c,0x13bc,0xab8c,0x13bc},{0xab8d,0x13bd,0xab8d,0x13bd},{0x038e,0x038e,0x03cd,0x038e},{0xab8e,0x13be,0xab8e,0x13be},
+{0xab8f,0x13bf,0xab8f,0x13bf},{0x038f,0x038f,0x03ce,0x038f},{0xab90,0x13c0,0xab90,0x13c0},{0x0391,0x0391,0x03b1,0x0391},
+{0xab91,0x13c1,0xab91,0x13c1},{0x0392,0x0392,0x03b2,0x0392},{0xab92,0x13c2,0xab92,0x13c2},{0xab93,0x13c3,0xab93,0x13c3},
+{0x0393,0x0393,0x03b3,0x0393},{0xab94,0x13c4,0xab94,0x13c4},{0x0394,0x0394,0x03b4,0x0394},{0x0395,0x0395,0x03b5,0x0395},
+{0xab95,0x13c5,0xab95,0x13c5},{0x0396,0x0396,0x03b6,0x0396},{0xab96,0x13c6,0xab96,0x13c6},{0x0397,0x0397,0x03b7,0x0397},
+{0xab97,0x13c7,0xab97,0x13c7},{0xab98,0x13c8,0xab98,0x13c8},{0x0398,0x0398,0x03b8,0x0398},{0xab99,0x13c9,0xab99,0x13c9},
{0x0399,0x0399,0x03b9,0x0399},{0x039a,0x039a,0x03ba,0x039a},{0xab9a,0x13ca,0xab9a,0x13ca},{0x039b,0x039b,0x03bb,0x039b},
-{0xab9b,0x13cb,0xab9b,0x13cb},{0x039c,0x039c,0x03bc,0x039c},{0xab9c,0x13cc,0xab9c,0x13cc},{0xab9d,0x13cd,0xab9d,0x13cd},
-{0x039d,0x039d,0x03bd,0x039d},{0x039e,0x039e,0x03be,0x039e},{0xab9e,0x13ce,0xab9e,0x13ce},{0x039f,0x039f,0x03bf,0x039f},
-{0xab9f,0x13cf,0xab9f,0x13cf},{0xaba0,0x13d0,0xaba0,0x13d0},{0x03a0,0x03a0,0x03c0,0x03a0},{0x13a0,0x13a0,0xab70,0x13a0},
-{0xaba1,0x13d1,0xaba1,0x13d1},{0x13a1,0x13a1,0xab71,0x13a1},{0x03a1,0x03a1,0x03c1,0x03a1},{0x13a2,0x13a2,0xab72,0x13a2},
-{0xaba2,0x13d2,0xaba2,0x13d2},{0xaba3,0x13d3,0xaba3,0x13d3},{0x13a3,0x13a3,0xab73,0x13a3},{0x03a3,0x03a3,0x03c3,0x03a3},
+{0xab9b,0x13cb,0xab9b,0x13cb},{0xab9c,0x13cc,0xab9c,0x13cc},{0x039c,0x039c,0x03bc,0x039c},{0xab9d,0x13cd,0xab9d,0x13cd},
+{0x039d,0x039d,0x03bd,0x039d},{0xab9e,0x13ce,0xab9e,0x13ce},{0x039e,0x039e,0x03be,0x039e},{0x039f,0x039f,0x03bf,0x039f},
+{0xab9f,0x13cf,0xab9f,0x13cf},{0x13a0,0x13a0,0xab70,0x13a0},{0x03a0,0x03a0,0x03c0,0x03a0},{0xaba0,0x13d0,0xaba0,0x13d0},
+{0x03a1,0x03a1,0x03c1,0x03a1},{0x13a1,0x13a1,0xab71,0x13a1},{0xaba1,0x13d1,0xaba1,0x13d1},{0x13a2,0x13a2,0xab72,0x13a2},
+{0xaba2,0x13d2,0xaba2,0x13d2},{0x03a3,0x03a3,0x03c3,0x03a3},{0x13a3,0x13a3,0xab73,0x13a3},{0xaba3,0x13d3,0xaba3,0x13d3},
{0x03a4,0x03a4,0x03c4,0x03a4},{0x13a4,0x13a4,0xab74,0x13a4},{0xaba4,0x13d4,0xaba4,0x13d4},{0xaba5,0x13d5,0xaba5,0x13d5},
-{0x13a5,0x13a5,0xab75,0x13a5},{0x03a5,0x03a5,0x03c5,0x03a5},{0x03a6,0x03a6,0x03c6,0x03a6},{0xaba6,0x13d6,0xaba6,0x13d6},
-{0x13a6,0x13a6,0xab76,0x13a6},{0xaba7,0x13d7,0xaba7,0x13d7},{0x13a7,0x13a7,0xab77,0x13a7},{0x03a7,0x03a7,0x03c7,0x03a7},
-{0x03a8,0x03a8,0x03c8,0x03a8},{0x13a8,0x13a8,0xab78,0x13a8},{0xaba8,0x13d8,0xaba8,0x13d8},{0x13a9,0x13a9,0xab79,0x13a9},
-{0xaba9,0x13d9,0xaba9,0x13d9},{0x03a9,0x03a9,0x03c9,0x03a9},{0x13aa,0x13aa,0xab7a,0x13aa},{0x03aa,0x03aa,0x03ca,0x03aa},
-{0xabaa,0x13da,0xabaa,0x13da},{0x13ab,0x13ab,0xab7b,0x13ab},{0xabab,0x13db,0xabab,0x13db},{0x03ab,0x03ab,0x03cb,0x03ab},
-{0xabac,0x13dc,0xabac,0x13dc},{0x13ac,0x13ac,0xab7c,0x13ac},{0x03ac,0x0386,0x03ac,0x0386},{0x13ad,0x13ad,0xab7d,0x13ad},
-{0x03ad,0x0388,0x03ad,0x0388},{0xabad,0x13dd,0xabad,0x13dd},{0x03ae,0x0389,0x03ae,0x0389},{0x13ae,0x13ae,0xab7e,0x13ae},
-{0xabae,0x13de,0xabae,0x13de},{0xabaf,0x13df,0xabaf,0x13df},{0x03af,0x038a,0x03af,0x038a},{0x13af,0x13af,0xab7f,0x13af},
-{0xabb0,0x13e0,0xabb0,0x13e0},{0x13b0,0x13b0,0xab80,0x13b0},{0xabb1,0x13e1,0xabb1,0x13e1},{0x13b1,0x13b1,0xab81,0x13b1},
-{0x03b1,0x0391,0x03b1,0x0391},{0x13b2,0x13b2,0xab82,0x13b2},{0x03b2,0x0392,0x03b2,0x0392},{0xabb2,0x13e2,0xabb2,0x13e2},
-{0xabb3,0x13e3,0xabb3,0x13e3},{0x03b3,0x0393,0x03b3,0x0393},{0x13b3,0x13b3,0xab83,0x13b3},{0xabb4,0x13e4,0xabb4,0x13e4},
-{0x03b4,0x0394,0x03b4,0x0394},{0x13b4,0x13b4,0xab84,0x13b4},{0xabb5,0x13e5,0xabb5,0x13e5},{0x13b5,0x13b5,0xab85,0x13b5},
-{0x03b5,0x0395,0x03b5,0x0395},{0x03b6,0x0396,0x03b6,0x0396},{0xabb6,0x13e6,0xabb6,0x13e6},{0x13b6,0x13b6,0xab86,0x13b6},
-{0xabb7,0x13e7,0xabb7,0x13e7},{0x03b7,0x0397,0x03b7,0x0397},{0x13b7,0x13b7,0xab87,0x13b7},{0x03b8,0x0398,0x03b8,0x0398},
-{0x13b8,0x13b8,0xab88,0x13b8},{0xabb8,0x13e8,0xabb8,0x13e8},{0x03b9,0x0399,0x03b9,0x0399},{0x13b9,0x13b9,0xab89,0x13b9},
-{0xabb9,0x13e9,0xabb9,0x13e9},{0x03ba,0x039a,0x03ba,0x039a},{0x13ba,0x13ba,0xab8a,0x13ba},{0xabba,0x13ea,0xabba,0x13ea},
-{0x03bb,0x039b,0x03bb,0x039b},{0xabbb,0x13eb,0xabbb,0x13eb},{0x13bb,0x13bb,0xab8b,0x13bb},{0x03bc,0x039c,0x03bc,0x039c},
-{0x13bc,0x13bc,0xab8c,0x13bc},{0xabbc,0x13ec,0xabbc,0x13ec},{0x03bd,0x039d,0x03bd,0x039d},{0xabbd,0x13ed,0xabbd,0x13ed},
-{0x13bd,0x13bd,0xab8d,0x13bd},{0x13be,0x13be,0xab8e,0x13be},{0x03be,0x039e,0x03be,0x039e},{0xabbe,0x13ee,0xabbe,0x13ee},
-{0x03bf,0x039f,0x03bf,0x039f},{0x13bf,0x13bf,0xab8f,0x13bf},{0xabbf,0x13ef,0xabbf,0x13ef},{0x03c0,0x03a0,0x03c0,0x03a0},
-{0x13c0,0x13c0,0xab90,0x13c0},{0x13c1,0x13c1,0xab91,0x13c1},{0x03c1,0x03a1,0x03c1,0x03a1},{0x13c2,0x13c2,0xab92,0x13c2},
-{0x03c2,0x03a3,0x03c2,0x03a3},{0x03c3,0x03a3,0x03c3,0x03a3},{0x13c3,0x13c3,0xab93,0x13c3},{0x03c4,0x03a4,0x03c4,0x03a4},
-{0x13c4,0x13c4,0xab94,0x13c4},{0x03c5,0x03a5,0x03c5,0x03a5},{0x13c5,0x13c5,0xab95,0x13c5},{0x13c6,0x13c6,0xab96,0x13c6},
-{0x03c6,0x03a6,0x03c6,0x03a6},{0x03c7,0x03a7,0x03c7,0x03a7},{0x13c7,0x13c7,0xab97,0x13c7},{0x03c8,0x03a8,0x03c8,0x03a8},
-{0x13c8,0x13c8,0xab98,0x13c8},{0x03c9,0x03a9,0x03c9,0x03a9},{0x13c9,0x13c9,0xab99,0x13c9},{0x03ca,0x03aa,0x03ca,0x03aa},
-{0x13ca,0x13ca,0xab9a,0x13ca},{0x03cb,0x03ab,0x03cb,0x03ab},{0x13cb,0x13cb,0xab9b,0x13cb},{0x13cc,0x13cc,0xab9c,0x13cc},
-{0x03cc,0x038c,0x03cc,0x038c},{0x03cd,0x038e,0x03cd,0x038e},{0x13cd,0x13cd,0xab9d,0x13cd},{0x13ce,0x13ce,0xab9e,0x13ce},
-{0x03ce,0x038f,0x03ce,0x038f},{0x03cf,0x03cf,0x03d7,0x03cf},{0x13cf,0x13cf,0xab9f,0x13cf},{0x13d0,0x13d0,0xaba0,0x13d0},
-{0x03d0,0x0392,0x03d0,0x0392},{0x13d1,0x13d1,0xaba1,0x13d1},{0x03d1,0x0398,0x03d1,0x0398},{0x13d2,0x13d2,0xaba2,0x13d2},
-{0x13d3,0x13d3,0xaba3,0x13d3},{0x13d4,0x13d4,0xaba4,0x13d4},{0x13d5,0x13d5,0xaba5,0x13d5},{0x03d5,0x03a6,0x03d5,0x03a6},
-{0x13d6,0x13d6,0xaba6,0x13d6},{0x03d6,0x03a0,0x03d6,0x03a0},{0x03d7,0x03cf,0x03d7,0x03cf},{0x13d7,0x13d7,0xaba7,0x13d7},
-{0x03d8,0x03d8,0x03d9,0x03d8},{0x13d8,0x13d8,0xaba8,0x13d8},{0x03d9,0x03d8,0x03d9,0x03d8},{0x13d9,0x13d9,0xaba9,0x13d9},
-{0x13da,0x13da,0xabaa,0x13da},{0x03da,0x03da,0x03db,0x03da},{0x13db,0x13db,0xabab,0x13db},{0x03db,0x03da,0x03db,0x03da},
+{0x13a5,0x13a5,0xab75,0x13a5},{0x03a5,0x03a5,0x03c5,0x03a5},{0xaba6,0x13d6,0xaba6,0x13d6},{0x13a6,0x13a6,0xab76,0x13a6},
+{0x03a6,0x03a6,0x03c6,0x03a6},{0x13a7,0x13a7,0xab77,0x13a7},{0xaba7,0x13d7,0xaba7,0x13d7},{0x03a7,0x03a7,0x03c7,0x03a7},
+{0xaba8,0x13d8,0xaba8,0x13d8},{0x13a8,0x13a8,0xab78,0x13a8},{0x03a8,0x03a8,0x03c8,0x03a8},{0xaba9,0x13d9,0xaba9,0x13d9},
+{0x03a9,0x03a9,0x03c9,0x03a9},{0x13a9,0x13a9,0xab79,0x13a9},{0x13aa,0x13aa,0xab7a,0x13aa},{0xabaa,0x13da,0xabaa,0x13da},
+{0x03aa,0x03aa,0x03ca,0x03aa},{0x13ab,0x13ab,0xab7b,0x13ab},{0xabab,0x13db,0xabab,0x13db},{0x03ab,0x03ab,0x03cb,0x03ab},
+{0xabac,0x13dc,0xabac,0x13dc},{0x13ac,0x13ac,0xab7c,0x13ac},{0x03ac,0x0386,0x03ac,0x0386},{0x03ad,0x0388,0x03ad,0x0388},
+{0x13ad,0x13ad,0xab7d,0x13ad},{0xabad,0x13dd,0xabad,0x13dd},{0xabae,0x13de,0xabae,0x13de},{0x03ae,0x0389,0x03ae,0x0389},
+{0x13ae,0x13ae,0xab7e,0x13ae},{0x13af,0x13af,0xab7f,0x13af},{0xabaf,0x13df,0xabaf,0x13df},{0x03af,0x038a,0x03af,0x038a},
+{0x13b0,0x13b0,0xab80,0x13b0},{0xabb0,0x13e0,0xabb0,0x13e0},{0x13b1,0x13b1,0xab81,0x13b1},{0x03b1,0x0391,0x03b1,0x0391},
+{0xabb1,0x13e1,0xabb1,0x13e1},{0x13b2,0x13b2,0xab82,0x13b2},{0xabb2,0x13e2,0xabb2,0x13e2},{0x03b2,0x0392,0x03b2,0x0392},
+{0x03b3,0x0393,0x03b3,0x0393},{0xabb3,0x13e3,0xabb3,0x13e3},{0x13b3,0x13b3,0xab83,0x13b3},{0x13b4,0x13b4,0xab84,0x13b4},
+{0xabb4,0x13e4,0xabb4,0x13e4},{0x03b4,0x0394,0x03b4,0x0394},{0x13b5,0x13b5,0xab85,0x13b5},{0x03b5,0x0395,0x03b5,0x0395},
+{0xabb5,0x13e5,0xabb5,0x13e5},{0x13b6,0x13b6,0xab86,0x13b6},{0xabb6,0x13e6,0xabb6,0x13e6},{0x03b6,0x0396,0x03b6,0x0396},
+{0x03b7,0x0397,0x03b7,0x0397},{0xabb7,0x13e7,0xabb7,0x13e7},{0x13b7,0x13b7,0xab87,0x13b7},{0x03b8,0x0398,0x03b8,0x0398},
+{0x13b8,0x13b8,0xab88,0x13b8},{0xabb8,0x13e8,0xabb8,0x13e8},{0xabb9,0x13e9,0xabb9,0x13e9},{0x13b9,0x13b9,0xab89,0x13b9},
+{0x03b9,0x0399,0x03b9,0x0399},{0x03ba,0x039a,0x03ba,0x039a},{0x13ba,0x13ba,0xab8a,0x13ba},{0xabba,0x13ea,0xabba,0x13ea},
+{0xabbb,0x13eb,0xabbb,0x13eb},{0x03bb,0x039b,0x03bb,0x039b},{0x13bb,0x13bb,0xab8b,0x13bb},{0xabbc,0x13ec,0xabbc,0x13ec},
+{0x13bc,0x13bc,0xab8c,0x13bc},{0x03bc,0x039c,0x03bc,0x039c},{0x03bd,0x039d,0x03bd,0x039d},{0x13bd,0x13bd,0xab8d,0x13bd},
+{0xabbd,0x13ed,0xabbd,0x13ed},{0x03be,0x039e,0x03be,0x039e},{0x13be,0x13be,0xab8e,0x13be},{0xabbe,0x13ee,0xabbe,0x13ee},
+{0x13bf,0x13bf,0xab8f,0x13bf},{0x03bf,0x039f,0x03bf,0x039f},{0xabbf,0x13ef,0xabbf,0x13ef},{0x13c0,0x13c0,0xab90,0x13c0},
+{0x03c0,0x03a0,0x03c0,0x03a0},{0x13c1,0x13c1,0xab91,0x13c1},{0x03c1,0x03a1,0x03c1,0x03a1},{0x13c2,0x13c2,0xab92,0x13c2},
+{0x03c2,0x03a3,0x03c2,0x03a3},{0x13c3,0x13c3,0xab93,0x13c3},{0x03c3,0x03a3,0x03c3,0x03a3},{0x03c4,0x03a4,0x03c4,0x03a4},
+{0x13c4,0x13c4,0xab94,0x13c4},{0x13c5,0x13c5,0xab95,0x13c5},{0x03c5,0x03a5,0x03c5,0x03a5},{0x03c6,0x03a6,0x03c6,0x03a6},
+{0x13c6,0x13c6,0xab96,0x13c6},{0x03c7,0x03a7,0x03c7,0x03a7},{0x13c7,0x13c7,0xab97,0x13c7},{0x13c8,0x13c8,0xab98,0x13c8},
+{0x03c8,0x03a8,0x03c8,0x03a8},{0x03c9,0x03a9,0x03c9,0x03a9},{0x13c9,0x13c9,0xab99,0x13c9},{0x13ca,0x13ca,0xab9a,0x13ca},
+{0x03ca,0x03aa,0x03ca,0x03aa},{0x13cb,0x13cb,0xab9b,0x13cb},{0x03cb,0x03ab,0x03cb,0x03ab},{0x13cc,0x13cc,0xab9c,0x13cc},
+{0x03cc,0x038c,0x03cc,0x038c},{0x13cd,0x13cd,0xab9d,0x13cd},{0x03cd,0x038e,0x03cd,0x038e},{0x03ce,0x038f,0x03ce,0x038f},
+{0x13ce,0x13ce,0xab9e,0x13ce},{0x03cf,0x03cf,0x03d7,0x03cf},{0x13cf,0x13cf,0xab9f,0x13cf},{0x03d0,0x0392,0x03d0,0x0392},
+{0x13d0,0x13d0,0xaba0,0x13d0},{0x13d1,0x13d1,0xaba1,0x13d1},{0x03d1,0x0398,0x03d1,0x0398},{0x13d2,0x13d2,0xaba2,0x13d2},
+{0x13d3,0x13d3,0xaba3,0x13d3},{0x13d4,0x13d4,0xaba4,0x13d4},{0x03d5,0x03a6,0x03d5,0x03a6},{0x13d5,0x13d5,0xaba5,0x13d5},
+{0x03d6,0x03a0,0x03d6,0x03a0},{0x13d6,0x13d6,0xaba6,0x13d6},{0x13d7,0x13d7,0xaba7,0x13d7},{0x03d7,0x03cf,0x03d7,0x03cf},
+{0x03d8,0x03d8,0x03d9,0x03d8},{0x13d8,0x13d8,0xaba8,0x13d8},{0x13d9,0x13d9,0xaba9,0x13d9},{0x03d9,0x03d8,0x03d9,0x03d8},
+{0x03da,0x03da,0x03db,0x03da},{0x13da,0x13da,0xabaa,0x13da},{0x13db,0x13db,0xabab,0x13db},{0x03db,0x03da,0x03db,0x03da},
{0x13dc,0x13dc,0xabac,0x13dc},{0x03dc,0x03dc,0x03dd,0x03dc},{0x03dd,0x03dc,0x03dd,0x03dc},{0x13dd,0x13dd,0xabad,0x13dd},
-{0x03de,0x03de,0x03df,0x03de},{0x13de,0x13de,0xabae,0x13de},{0x13df,0x13df,0xabaf,0x13df},{0x03df,0x03de,0x03df,0x03de},
+{0x13de,0x13de,0xabae,0x13de},{0x03de,0x03de,0x03df,0x03de},{0x03df,0x03de,0x03df,0x03de},{0x13df,0x13df,0xabaf,0x13df},
{0x03e0,0x03e0,0x03e1,0x03e0},{0x13e0,0x13e0,0xabb0,0x13e0},{0x03e1,0x03e0,0x03e1,0x03e0},{0x13e1,0x13e1,0xabb1,0x13e1},
-{0x13e2,0x13e2,0xabb2,0x13e2},{0x03e2,0x03e2,0x03e3,0x03e2},{0x03e3,0x03e2,0x03e3,0x03e2},{0x13e3,0x13e3,0xabb3,0x13e3},
-{0x13e4,0x13e4,0xabb4,0x13e4},{0x03e4,0x03e4,0x03e5,0x03e4},{0x03e5,0x03e4,0x03e5,0x03e4},{0x13e5,0x13e5,0xabb5,0x13e5},
-{0x03e6,0x03e6,0x03e7,0x03e6},{0x13e6,0x13e6,0xabb6,0x13e6},{0x13e7,0x13e7,0xabb7,0x13e7},{0x03e7,0x03e6,0x03e7,0x03e6},
-{0x13e8,0x13e8,0xabb8,0x13e8},{0x03e8,0x03e8,0x03e9,0x03e8},{0x03e9,0x03e8,0x03e9,0x03e8},{0x13e9,0x13e9,0xabb9,0x13e9},
-{0x13ea,0x13ea,0xabba,0x13ea},{0x03ea,0x03ea,0x03eb,0x03ea},{0x13eb,0x13eb,0xabbb,0x13eb},{0x03eb,0x03ea,0x03eb,0x03ea},
-{0x03ec,0x03ec,0x03ed,0x03ec},{0x13ec,0x13ec,0xabbc,0x13ec},{0x03ed,0x03ec,0x03ed,0x03ec},{0x13ed,0x13ed,0xabbd,0x13ed},
-{0x03ee,0x03ee,0x03ef,0x03ee},{0x13ee,0x13ee,0xabbe,0x13ee},{0x13ef,0x13ef,0xabbf,0x13ef},{0x03ef,0x03ee,0x03ef,0x03ee},
-{0x03f0,0x039a,0x03f0,0x039a},{0x13f0,0x13f0,0x13f8,0x13f0},{0x13f1,0x13f1,0x13f9,0x13f1},{0x03f1,0x03a1,0x03f1,0x03a1},
-{0x13f2,0x13f2,0x13fa,0x13f2},{0x03f2,0x03f9,0x03f2,0x03f9},{0x13f3,0x13f3,0x13fb,0x13f3},{0x03f3,0x037f,0x03f3,0x037f},
-{0x03f4,0x03f4,0x03b8,0x03f4},{0x13f4,0x13f4,0x13fc,0x13f4},{0x13f5,0x13f5,0x13fd,0x13f5},{0x03f5,0x0395,0x03f5,0x0395},
+{0x03e2,0x03e2,0x03e3,0x03e2},{0x13e2,0x13e2,0xabb2,0x13e2},{0x03e3,0x03e2,0x03e3,0x03e2},{0x13e3,0x13e3,0xabb3,0x13e3},
+{0x13e4,0x13e4,0xabb4,0x13e4},{0x03e4,0x03e4,0x03e5,0x03e4},{0x13e5,0x13e5,0xabb5,0x13e5},{0x03e5,0x03e4,0x03e5,0x03e4},
+{0x13e6,0x13e6,0xabb6,0x13e6},{0x03e6,0x03e6,0x03e7,0x03e6},{0x13e7,0x13e7,0xabb7,0x13e7},{0x03e7,0x03e6,0x03e7,0x03e6},
+{0x03e8,0x03e8,0x03e9,0x03e8},{0x13e8,0x13e8,0xabb8,0x13e8},{0x03e9,0x03e8,0x03e9,0x03e8},{0x13e9,0x13e9,0xabb9,0x13e9},
+{0x03ea,0x03ea,0x03eb,0x03ea},{0x13ea,0x13ea,0xabba,0x13ea},{0x13eb,0x13eb,0xabbb,0x13eb},{0x03eb,0x03ea,0x03eb,0x03ea},
+{0x03ec,0x03ec,0x03ed,0x03ec},{0x13ec,0x13ec,0xabbc,0x13ec},{0x13ed,0x13ed,0xabbd,0x13ed},{0x03ed,0x03ec,0x03ed,0x03ec},
+{0x13ee,0x13ee,0xabbe,0x13ee},{0x03ee,0x03ee,0x03ef,0x03ee},{0x13ef,0x13ef,0xabbf,0x13ef},{0x03ef,0x03ee,0x03ef,0x03ee},
+{0x13f0,0x13f0,0x13f8,0x13f0},{0x03f0,0x039a,0x03f0,0x039a},{0x13f1,0x13f1,0x13f9,0x13f1},{0x03f1,0x03a1,0x03f1,0x03a1},
+{0x03f2,0x03f9,0x03f2,0x03f9},{0x13f2,0x13f2,0x13fa,0x13f2},{0x13f3,0x13f3,0x13fb,0x13f3},{0x03f3,0x037f,0x03f3,0x037f},
+{0x03f4,0x03f4,0x03b8,0x03f4},{0x13f4,0x13f4,0x13fc,0x13f4},{0x03f5,0x0395,0x03f5,0x0395},{0x13f5,0x13f5,0x13fd,0x13f5},
{0x03f7,0x03f7,0x03f8,0x03f7},{0x03f8,0x03f7,0x03f8,0x03f7},{0x13f8,0x13f0,0x13f8,0x13f0},{0x03f9,0x03f9,0x03f2,0x03f9},
-{0x13f9,0x13f1,0x13f9,0x13f1},{0x03fa,0x03fa,0x03fb,0x03fa},{0x13fa,0x13f2,0x13fa,0x13f2},{0x13fb,0x13f3,0x13fb,0x13f3},
+{0x13f9,0x13f1,0x13f9,0x13f1},{0x13fa,0x13f2,0x13fa,0x13f2},{0x03fa,0x03fa,0x03fb,0x03fa},{0x13fb,0x13f3,0x13fb,0x13f3},
{0x03fb,0x03fa,0x03fb,0x03fa},{0x13fc,0x13f4,0x13fc,0x13f4},{0x03fd,0x03fd,0x037b,0x03fd},{0x13fd,0x13f5,0x13fd,0x13f5},
-{0x03fe,0x03fe,0x037c,0x03fe},{0x03ff,0x03ff,0x037d,0x03ff},{0x2c00,0x2c00,0x2c30,0x2c00},{0x10400,0x10400,0x10428,0x10400},
-{0x0400,0x0400,0x0450,0x0400},{0x2c01,0x2c01,0x2c31,0x2c01},{0x0401,0x0401,0x0451,0x0401},{0x10401,0x10401,0x10429,0x10401},
-{0x0402,0x0402,0x0452,0x0402},{0x2c02,0x2c02,0x2c32,0x2c02},{0x10402,0x10402,0x1042a,0x10402},{0x10403,0x10403,0x1042b,0x10403},
-{0x2c03,0x2c03,0x2c33,0x2c03},{0x0403,0x0403,0x0453,0x0403},{0x10404,0x10404,0x1042c,0x10404},{0x2c04,0x2c04,0x2c34,0x2c04},
-{0x0404,0x0404,0x0454,0x0404},{0x10405,0x10405,0x1042d,0x10405},{0x2c05,0x2c05,0x2c35,0x2c05},{0x0405,0x0405,0x0455,0x0405},
-{0x0406,0x0406,0x0456,0x0406},{0x2c06,0x2c06,0x2c36,0x2c06},{0x10406,0x10406,0x1042e,0x10406},{0x2c07,0x2c07,0x2c37,0x2c07},
-{0x0407,0x0407,0x0457,0x0407},{0x10407,0x10407,0x1042f,0x10407},{0x10408,0x10408,0x10430,0x10408},{0x0408,0x0408,0x0458,0x0408},
-{0x2c08,0x2c08,0x2c38,0x2c08},{0x2c09,0x2c09,0x2c39,0x2c09},{0x10409,0x10409,0x10431,0x10409},{0x0409,0x0409,0x0459,0x0409},
-{0x2c0a,0x2c0a,0x2c3a,0x2c0a},{0x040a,0x040a,0x045a,0x040a},{0x1040a,0x1040a,0x10432,0x1040a},{0x1040b,0x1040b,0x10433,0x1040b},
-{0x2c0b,0x2c0b,0x2c3b,0x2c0b},{0x040b,0x040b,0x045b,0x040b},{0x1040c,0x1040c,0x10434,0x1040c},{0x040c,0x040c,0x045c,0x040c},
-{0x2c0c,0x2c0c,0x2c3c,0x2c0c},{0x040d,0x040d,0x045d,0x040d},{0x2c0d,0x2c0d,0x2c3d,0x2c0d},{0x1040d,0x1040d,0x10435,0x1040d},
-{0x1040e,0x1040e,0x10436,0x1040e},{0x040e,0x040e,0x045e,0x040e},{0x2c0e,0x2c0e,0x2c3e,0x2c0e},{0x2c0f,0x2c0f,0x2c3f,0x2c0f},
-{0x1040f,0x1040f,0x10437,0x1040f},{0x040f,0x040f,0x045f,0x040f},{0x0410,0x0410,0x0430,0x0410},{0x2c10,0x2c10,0x2c40,0x2c10},
+{0x03fe,0x03fe,0x037c,0x03fe},{0x03ff,0x03ff,0x037d,0x03ff},{0x0400,0x0400,0x0450,0x0400},{0x2c00,0x2c00,0x2c30,0x2c00},
+{0x10400,0x10400,0x10428,0x10400},{0x0401,0x0401,0x0451,0x0401},{0x10401,0x10401,0x10429,0x10401},{0x2c01,0x2c01,0x2c31,0x2c01},
+{0x0402,0x0402,0x0452,0x0402},{0x10402,0x10402,0x1042a,0x10402},{0x2c02,0x2c02,0x2c32,0x2c02},{0x10403,0x10403,0x1042b,0x10403},
+{0x0403,0x0403,0x0453,0x0403},{0x2c03,0x2c03,0x2c33,0x2c03},{0x0404,0x0404,0x0454,0x0404},{0x2c04,0x2c04,0x2c34,0x2c04},
+{0x10404,0x10404,0x1042c,0x10404},{0x0405,0x0405,0x0455,0x0405},{0x10405,0x10405,0x1042d,0x10405},{0x2c05,0x2c05,0x2c35,0x2c05},
+{0x10406,0x10406,0x1042e,0x10406},{0x0406,0x0406,0x0456,0x0406},{0x2c06,0x2c06,0x2c36,0x2c06},{0x0407,0x0407,0x0457,0x0407},
+{0x2c07,0x2c07,0x2c37,0x2c07},{0x10407,0x10407,0x1042f,0x10407},{0x0408,0x0408,0x0458,0x0408},{0x2c08,0x2c08,0x2c38,0x2c08},
+{0x10408,0x10408,0x10430,0x10408},{0x2c09,0x2c09,0x2c39,0x2c09},{0x0409,0x0409,0x0459,0x0409},{0x10409,0x10409,0x10431,0x10409},
+{0x1040a,0x1040a,0x10432,0x1040a},{0x040a,0x040a,0x045a,0x040a},{0x2c0a,0x2c0a,0x2c3a,0x2c0a},{0x1040b,0x1040b,0x10433,0x1040b},
+{0x040b,0x040b,0x045b,0x040b},{0x2c0b,0x2c0b,0x2c3b,0x2c0b},{0x040c,0x040c,0x045c,0x040c},{0x2c0c,0x2c0c,0x2c3c,0x2c0c},
+{0x1040c,0x1040c,0x10434,0x1040c},{0x040d,0x040d,0x045d,0x040d},{0x1040d,0x1040d,0x10435,0x1040d},{0x2c0d,0x2c0d,0x2c3d,0x2c0d},
+{0x040e,0x040e,0x045e,0x040e},{0x2c0e,0x2c0e,0x2c3e,0x2c0e},{0x1040e,0x1040e,0x10436,0x1040e},{0x2c0f,0x2c0f,0x2c3f,0x2c0f},
+{0x1040f,0x1040f,0x10437,0x1040f},{0x040f,0x040f,0x045f,0x040f},{0x2c10,0x2c10,0x2c40,0x2c10},{0x0410,0x0410,0x0430,0x0410},
{0x10410,0x10410,0x10438,0x10410},{0x2c11,0x2c11,0x2c41,0x2c11},{0x10411,0x10411,0x10439,0x10411},{0x0411,0x0411,0x0431,0x0411},
-{0x10412,0x10412,0x1043a,0x10412},{0x2c12,0x2c12,0x2c42,0x2c12},{0x0412,0x0412,0x0432,0x0412},{0x0413,0x0413,0x0433,0x0413},
-{0x10413,0x10413,0x1043b,0x10413},{0x2c13,0x2c13,0x2c43,0x2c13},{0x2c14,0x2c14,0x2c44,0x2c14},{0x10414,0x10414,0x1043c,0x10414},
-{0x0414,0x0414,0x0434,0x0414},{0x10415,0x10415,0x1043d,0x10415},{0x0415,0x0415,0x0435,0x0415},{0x2c15,0x2c15,0x2c45,0x2c15},
-{0x2c16,0x2c16,0x2c46,0x2c16},{0x0416,0x0416,0x0436,0x0416},{0x10416,0x10416,0x1043e,0x10416},{0x0417,0x0417,0x0437,0x0417},
-{0x10417,0x10417,0x1043f,0x10417},{0x2c17,0x2c17,0x2c47,0x2c17},{0x2c18,0x2c18,0x2c48,0x2c18},{0x0418,0x0418,0x0438,0x0418},
-{0x10418,0x10418,0x10440,0x10418},{0x10419,0x10419,0x10441,0x10419},{0x0419,0x0419,0x0439,0x0419},{0x2c19,0x2c19,0x2c49,0x2c19},
-{0x1041a,0x1041a,0x10442,0x1041a},{0x041a,0x041a,0x043a,0x041a},{0x2c1a,0x2c1a,0x2c4a,0x2c1a},{0x2c1b,0x2c1b,0x2c4b,0x2c1b},
-{0x1041b,0x1041b,0x10443,0x1041b},{0x041b,0x041b,0x043b,0x041b},{0x2c1c,0x2c1c,0x2c4c,0x2c1c},{0x1041c,0x1041c,0x10444,0x1041c},
-{0x041c,0x041c,0x043c,0x041c},{0x041d,0x041d,0x043d,0x041d},{0x2c1d,0x2c1d,0x2c4d,0x2c1d},{0x1041d,0x1041d,0x10445,0x1041d},
-{0x041e,0x041e,0x043e,0x041e},{0x1041e,0x1041e,0x10446,0x1041e},{0x2c1e,0x2c1e,0x2c4e,0x2c1e},{0x1041f,0x1041f,0x10447,0x1041f},
-{0x041f,0x041f,0x043f,0x041f},{0x2c1f,0x2c1f,0x2c4f,0x2c1f},{0x2c20,0x2c20,0x2c50,0x2c20},{0x10420,0x10420,0x10448,0x10420},
-{0x0420,0x0420,0x0440,0x0420},{0x2c21,0x2c21,0x2c51,0x2c21},{0x10421,0x10421,0x10449,0x10421},{0x0421,0x0421,0x0441,0x0421},
-{0x10422,0x10422,0x1044a,0x10422},{0x2c22,0x2c22,0x2c52,0x2c22},{0x0422,0x0422,0x0442,0x0422},{0x2c23,0x2c23,0x2c53,0x2c23},
-{0x0423,0x0423,0x0443,0x0423},{0x10423,0x10423,0x1044b,0x10423},{0x0424,0x0424,0x0444,0x0424},{0x2c24,0x2c24,0x2c54,0x2c24},
-{0x10424,0x10424,0x1044c,0x10424},{0x2c25,0x2c25,0x2c55,0x2c25},{0x0425,0x0425,0x0445,0x0425},{0x10425,0x10425,0x1044d,0x10425},
-{0x0426,0x0426,0x0446,0x0426},{0x2c26,0x2c26,0x2c56,0x2c26},{0x10426,0x10426,0x1044e,0x10426},{0x10427,0x10427,0x1044f,0x10427},
-{0x0427,0x0427,0x0447,0x0427},{0x2c27,0x2c27,0x2c57,0x2c27},{0x10428,0x10400,0x10428,0x10400},{0x0428,0x0428,0x0448,0x0428},
-{0x2c28,0x2c28,0x2c58,0x2c28},{0x2c29,0x2c29,0x2c59,0x2c29},{0x10429,0x10401,0x10429,0x10401},{0x0429,0x0429,0x0449,0x0429},
-{0x1042a,0x10402,0x1042a,0x10402},{0x2c2a,0x2c2a,0x2c5a,0x2c2a},{0x042a,0x042a,0x044a,0x042a},{0x042b,0x042b,0x044b,0x042b},
-{0x2c2b,0x2c2b,0x2c5b,0x2c2b},{0x1042b,0x10403,0x1042b,0x10403},{0x2c2c,0x2c2c,0x2c5c,0x2c2c},{0x042c,0x042c,0x044c,0x042c},
-{0x1042c,0x10404,0x1042c,0x10404},{0x2c2d,0x2c2d,0x2c5d,0x2c2d},{0x042d,0x042d,0x044d,0x042d},{0x1042d,0x10405,0x1042d,0x10405},
-{0x1042e,0x10406,0x1042e,0x10406},{0x042e,0x042e,0x044e,0x042e},{0x2c2e,0x2c2e,0x2c5e,0x2c2e},{0x1042f,0x10407,0x1042f,0x10407},
+{0x2c12,0x2c12,0x2c42,0x2c12},{0x10412,0x10412,0x1043a,0x10412},{0x0412,0x0412,0x0432,0x0412},{0x10413,0x10413,0x1043b,0x10413},
+{0x2c13,0x2c13,0x2c43,0x2c13},{0x0413,0x0413,0x0433,0x0413},{0x10414,0x10414,0x1043c,0x10414},{0x2c14,0x2c14,0x2c44,0x2c14},
+{0x0414,0x0414,0x0434,0x0414},{0x0415,0x0415,0x0435,0x0415},{0x2c15,0x2c15,0x2c45,0x2c15},{0x10415,0x10415,0x1043d,0x10415},
+{0x10416,0x10416,0x1043e,0x10416},{0x2c16,0x2c16,0x2c46,0x2c16},{0x0416,0x0416,0x0436,0x0416},{0x2c17,0x2c17,0x2c47,0x2c17},
+{0x10417,0x10417,0x1043f,0x10417},{0x0417,0x0417,0x0437,0x0417},{0x10418,0x10418,0x10440,0x10418},{0x0418,0x0418,0x0438,0x0418},
+{0x2c18,0x2c18,0x2c48,0x2c18},{0x2c19,0x2c19,0x2c49,0x2c19},{0x10419,0x10419,0x10441,0x10419},{0x0419,0x0419,0x0439,0x0419},
+{0x041a,0x041a,0x043a,0x041a},{0x2c1a,0x2c1a,0x2c4a,0x2c1a},{0x1041a,0x1041a,0x10442,0x1041a},{0x1041b,0x1041b,0x10443,0x1041b},
+{0x2c1b,0x2c1b,0x2c4b,0x2c1b},{0x041b,0x041b,0x043b,0x041b},{0x041c,0x041c,0x043c,0x041c},{0x2c1c,0x2c1c,0x2c4c,0x2c1c},
+{0x1041c,0x1041c,0x10444,0x1041c},{0x041d,0x041d,0x043d,0x041d},{0x1041d,0x1041d,0x10445,0x1041d},{0x2c1d,0x2c1d,0x2c4d,0x2c1d},
+{0x041e,0x041e,0x043e,0x041e},{0x1041e,0x1041e,0x10446,0x1041e},{0x2c1e,0x2c1e,0x2c4e,0x2c1e},{0x2c1f,0x2c1f,0x2c4f,0x2c1f},
+{0x1041f,0x1041f,0x10447,0x1041f},{0x041f,0x041f,0x043f,0x041f},{0x0420,0x0420,0x0440,0x0420},{0x10420,0x10420,0x10448,0x10420},
+{0x2c20,0x2c20,0x2c50,0x2c20},{0x10421,0x10421,0x10449,0x10421},{0x0421,0x0421,0x0441,0x0421},{0x2c21,0x2c21,0x2c51,0x2c21},
+{0x0422,0x0422,0x0442,0x0422},{0x2c22,0x2c22,0x2c52,0x2c22},{0x10422,0x10422,0x1044a,0x10422},{0x10423,0x10423,0x1044b,0x10423},
+{0x2c23,0x2c23,0x2c53,0x2c23},{0x0423,0x0423,0x0443,0x0423},{0x2c24,0x2c24,0x2c54,0x2c24},{0x0424,0x0424,0x0444,0x0424},
+{0x10424,0x10424,0x1044c,0x10424},{0x10425,0x10425,0x1044d,0x10425},{0x2c25,0x2c25,0x2c55,0x2c25},{0x0425,0x0425,0x0445,0x0425},
+{0x10426,0x10426,0x1044e,0x10426},{0x0426,0x0426,0x0446,0x0426},{0x2c26,0x2c26,0x2c56,0x2c26},{0x0427,0x0427,0x0447,0x0427},
+{0x10427,0x10427,0x1044f,0x10427},{0x2c27,0x2c27,0x2c57,0x2c27},{0x2c28,0x2c28,0x2c58,0x2c28},{0x0428,0x0428,0x0448,0x0428},
+{0x10428,0x10400,0x10428,0x10400},{0x0429,0x0429,0x0449,0x0429},{0x2c29,0x2c29,0x2c59,0x2c29},{0x10429,0x10401,0x10429,0x10401},
+{0x042a,0x042a,0x044a,0x042a},{0x1042a,0x10402,0x1042a,0x10402},{0x2c2a,0x2c2a,0x2c5a,0x2c2a},{0x1042b,0x10403,0x1042b,0x10403},
+{0x042b,0x042b,0x044b,0x042b},{0x2c2b,0x2c2b,0x2c5b,0x2c2b},{0x042c,0x042c,0x044c,0x042c},{0x1042c,0x10404,0x1042c,0x10404},
+{0x2c2c,0x2c2c,0x2c5c,0x2c2c},{0x042d,0x042d,0x044d,0x042d},{0x2c2d,0x2c2d,0x2c5d,0x2c2d},{0x1042d,0x10405,0x1042d,0x10405},
+{0x042e,0x042e,0x044e,0x042e},{0x1042e,0x10406,0x1042e,0x10406},{0x2c2e,0x2c2e,0x2c5e,0x2c2e},{0x1042f,0x10407,0x1042f,0x10407},
{0x042f,0x042f,0x044f,0x042f},{0x2c30,0x2c00,0x2c30,0x2c00},{0x10430,0x10408,0x10430,0x10408},{0x0430,0x0410,0x0430,0x0410},
-{0x10431,0x10409,0x10431,0x10409},{0x0431,0x0411,0x0431,0x0411},{0x2c31,0x2c01,0x2c31,0x2c01},{0x0432,0x0412,0x0432,0x0412},
+{0x10431,0x10409,0x10431,0x10409},{0x2c31,0x2c01,0x2c31,0x2c01},{0x0431,0x0411,0x0431,0x0411},{0x0432,0x0412,0x0432,0x0412},
{0x10432,0x1040a,0x10432,0x1040a},{0x2c32,0x2c02,0x2c32,0x2c02},{0x0433,0x0413,0x0433,0x0413},{0x10433,0x1040b,0x10433,0x1040b},
-{0x2c33,0x2c03,0x2c33,0x2c03},{0x0434,0x0414,0x0434,0x0414},{0x2c34,0x2c04,0x2c34,0x2c04},{0x10434,0x1040c,0x10434,0x1040c},
-{0x10435,0x1040d,0x10435,0x1040d},{0x0435,0x0415,0x0435,0x0415},{0x2c35,0x2c05,0x2c35,0x2c05},{0x10436,0x1040e,0x10436,0x1040e},
-{0x2c36,0x2c06,0x2c36,0x2c06},{0x0436,0x0416,0x0436,0x0416},{0x10437,0x1040f,0x10437,0x1040f},{0x0437,0x0417,0x0437,0x0417},
-{0x2c37,0x2c07,0x2c37,0x2c07},{0x0438,0x0418,0x0438,0x0418},{0x2c38,0x2c08,0x2c38,0x2c08},{0x10438,0x10410,0x10438,0x10410},
-{0x2c39,0x2c09,0x2c39,0x2c09},{0x10439,0x10411,0x10439,0x10411},{0x0439,0x0419,0x0439,0x0419},{0x043a,0x041a,0x043a,0x041a},
-{0x1043a,0x10412,0x1043a,0x10412},{0x2c3a,0x2c0a,0x2c3a,0x2c0a},{0x1043b,0x10413,0x1043b,0x10413},{0x043b,0x041b,0x043b,0x041b},
-{0x2c3b,0x2c0b,0x2c3b,0x2c0b},{0x1043c,0x10414,0x1043c,0x10414},{0x2c3c,0x2c0c,0x2c3c,0x2c0c},{0x043c,0x041c,0x043c,0x041c},
-{0x043d,0x041d,0x043d,0x041d},{0x1043d,0x10415,0x1043d,0x10415},{0x2c3d,0x2c0d,0x2c3d,0x2c0d},{0x2c3e,0x2c0e,0x2c3e,0x2c0e},
-{0x043e,0x041e,0x043e,0x041e},{0x1043e,0x10416,0x1043e,0x10416},{0x2c3f,0x2c0f,0x2c3f,0x2c0f},{0x1043f,0x10417,0x1043f,0x10417},
-{0x043f,0x041f,0x043f,0x041f},{0x10440,0x10418,0x10440,0x10418},{0x2c40,0x2c10,0x2c40,0x2c10},{0x0440,0x0420,0x0440,0x0420},
-{0x2c41,0x2c11,0x2c41,0x2c11},{0x10441,0x10419,0x10441,0x10419},{0x0441,0x0421,0x0441,0x0421},{0x10442,0x1041a,0x10442,0x1041a},
-{0x2c42,0x2c12,0x2c42,0x2c12},{0x0442,0x0422,0x0442,0x0422},{0x0443,0x0423,0x0443,0x0423},{0x2c43,0x2c13,0x2c43,0x2c13},
+{0x2c33,0x2c03,0x2c33,0x2c03},{0x10434,0x1040c,0x10434,0x1040c},{0x0434,0x0414,0x0434,0x0414},{0x2c34,0x2c04,0x2c34,0x2c04},
+{0x10435,0x1040d,0x10435,0x1040d},{0x2c35,0x2c05,0x2c35,0x2c05},{0x0435,0x0415,0x0435,0x0415},{0x2c36,0x2c06,0x2c36,0x2c06},
+{0x0436,0x0416,0x0436,0x0416},{0x10436,0x1040e,0x10436,0x1040e},{0x2c37,0x2c07,0x2c37,0x2c07},{0x10437,0x1040f,0x10437,0x1040f},
+{0x0437,0x0417,0x0437,0x0417},{0x2c38,0x2c08,0x2c38,0x2c08},{0x10438,0x10410,0x10438,0x10410},{0x0438,0x0418,0x0438,0x0418},
+{0x2c39,0x2c09,0x2c39,0x2c09},{0x0439,0x0419,0x0439,0x0419},{0x10439,0x10411,0x10439,0x10411},{0x1043a,0x10412,0x1043a,0x10412},
+{0x2c3a,0x2c0a,0x2c3a,0x2c0a},{0x043a,0x041a,0x043a,0x041a},{0x2c3b,0x2c0b,0x2c3b,0x2c0b},{0x1043b,0x10413,0x1043b,0x10413},
+{0x043b,0x041b,0x043b,0x041b},{0x043c,0x041c,0x043c,0x041c},{0x2c3c,0x2c0c,0x2c3c,0x2c0c},{0x1043c,0x10414,0x1043c,0x10414},
+{0x043d,0x041d,0x043d,0x041d},{0x2c3d,0x2c0d,0x2c3d,0x2c0d},{0x1043d,0x10415,0x1043d,0x10415},{0x043e,0x041e,0x043e,0x041e},
+{0x2c3e,0x2c0e,0x2c3e,0x2c0e},{0x1043e,0x10416,0x1043e,0x10416},{0x2c3f,0x2c0f,0x2c3f,0x2c0f},{0x043f,0x041f,0x043f,0x041f},
+{0x1043f,0x10417,0x1043f,0x10417},{0x10440,0x10418,0x10440,0x10418},{0x0440,0x0420,0x0440,0x0420},{0x2c40,0x2c10,0x2c40,0x2c10},
+{0x10441,0x10419,0x10441,0x10419},{0x2c41,0x2c11,0x2c41,0x2c11},{0x0441,0x0421,0x0441,0x0421},{0x2c42,0x2c12,0x2c42,0x2c12},
+{0x10442,0x1041a,0x10442,0x1041a},{0x0442,0x0422,0x0442,0x0422},{0x0443,0x0423,0x0443,0x0423},{0x2c43,0x2c13,0x2c43,0x2c13},
{0x10443,0x1041b,0x10443,0x1041b},{0x0444,0x0424,0x0444,0x0424},{0x2c44,0x2c14,0x2c44,0x2c14},{0x10444,0x1041c,0x10444,0x1041c},
-{0x2c45,0x2c15,0x2c45,0x2c15},{0x10445,0x1041d,0x10445,0x1041d},{0x0445,0x0425,0x0445,0x0425},{0x2c46,0x2c16,0x2c46,0x2c16},
-{0x0446,0x0426,0x0446,0x0426},{0x10446,0x1041e,0x10446,0x1041e},{0x10447,0x1041f,0x10447,0x1041f},{0x2c47,0x2c17,0x2c47,0x2c17},
-{0x0447,0x0427,0x0447,0x0427},{0x10448,0x10420,0x10448,0x10420},{0x0448,0x0428,0x0448,0x0428},{0x2c48,0x2c18,0x2c48,0x2c18},
-{0x10449,0x10421,0x10449,0x10421},{0x2c49,0x2c19,0x2c49,0x2c19},{0x0449,0x0429,0x0449,0x0429},{0x2c4a,0x2c1a,0x2c4a,0x2c1a},
-{0x044a,0x042a,0x044a,0x042a},{0x1044a,0x10422,0x1044a,0x10422},{0x1044b,0x10423,0x1044b,0x10423},{0x2c4b,0x2c1b,0x2c4b,0x2c1b},
-{0x044b,0x042b,0x044b,0x042b},{0x1044c,0x10424,0x1044c,0x10424},{0x044c,0x042c,0x044c,0x042c},{0x2c4c,0x2c1c,0x2c4c,0x2c1c},
-{0x2c4d,0x2c1d,0x2c4d,0x2c1d},{0x044d,0x042d,0x044d,0x042d},{0x1044d,0x10425,0x1044d,0x10425},{0x2c4e,0x2c1e,0x2c4e,0x2c1e},
-{0x1044e,0x10426,0x1044e,0x10426},{0x044e,0x042e,0x044e,0x042e},{0x1044f,0x10427,0x1044f,0x10427},{0x044f,0x042f,0x044f,0x042f},
+{0x2c45,0x2c15,0x2c45,0x2c15},{0x10445,0x1041d,0x10445,0x1041d},{0x0445,0x0425,0x0445,0x0425},{0x10446,0x1041e,0x10446,0x1041e},
+{0x0446,0x0426,0x0446,0x0426},{0x2c46,0x2c16,0x2c46,0x2c16},{0x2c47,0x2c17,0x2c47,0x2c17},{0x10447,0x1041f,0x10447,0x1041f},
+{0x0447,0x0427,0x0447,0x0427},{0x0448,0x0428,0x0448,0x0428},{0x2c48,0x2c18,0x2c48,0x2c18},{0x10448,0x10420,0x10448,0x10420},
+{0x2c49,0x2c19,0x2c49,0x2c19},{0x0449,0x0429,0x0449,0x0429},{0x10449,0x10421,0x10449,0x10421},{0x2c4a,0x2c1a,0x2c4a,0x2c1a},
+{0x044a,0x042a,0x044a,0x042a},{0x1044a,0x10422,0x1044a,0x10422},{0x1044b,0x10423,0x1044b,0x10423},{0x044b,0x042b,0x044b,0x042b},
+{0x2c4b,0x2c1b,0x2c4b,0x2c1b},{0x1044c,0x10424,0x1044c,0x10424},{0x044c,0x042c,0x044c,0x042c},{0x2c4c,0x2c1c,0x2c4c,0x2c1c},
+{0x2c4d,0x2c1d,0x2c4d,0x2c1d},{0x1044d,0x10425,0x1044d,0x10425},{0x044d,0x042d,0x044d,0x042d},{0x2c4e,0x2c1e,0x2c4e,0x2c1e},
+{0x044e,0x042e,0x044e,0x042e},{0x1044e,0x10426,0x1044e,0x10426},{0x1044f,0x10427,0x1044f,0x10427},{0x044f,0x042f,0x044f,0x042f},
{0x2c4f,0x2c1f,0x2c4f,0x2c1f},{0x0450,0x0400,0x0450,0x0400},{0x2c50,0x2c20,0x2c50,0x2c20},{0x2c51,0x2c21,0x2c51,0x2c21},
-{0x0451,0x0401,0x0451,0x0401},{0x2c52,0x2c22,0x2c52,0x2c22},{0x0452,0x0402,0x0452,0x0402},{0x2c53,0x2c23,0x2c53,0x2c23},
-{0x0453,0x0403,0x0453,0x0403},{0x0454,0x0404,0x0454,0x0404},{0x2c54,0x2c24,0x2c54,0x2c24},{0x2c55,0x2c25,0x2c55,0x2c25},
-{0x0455,0x0405,0x0455,0x0405},{0x0456,0x0406,0x0456,0x0406},{0x2c56,0x2c26,0x2c56,0x2c26},{0x0457,0x0407,0x0457,0x0407},
-{0x2c57,0x2c27,0x2c57,0x2c27},{0x2c58,0x2c28,0x2c58,0x2c28},{0x0458,0x0408,0x0458,0x0408},{0x2c59,0x2c29,0x2c59,0x2c29},
-{0x0459,0x0409,0x0459,0x0409},{0x045a,0x040a,0x045a,0x040a},{0x2c5a,0x2c2a,0x2c5a,0x2c2a},{0x045b,0x040b,0x045b,0x040b},
-{0x2c5b,0x2c2b,0x2c5b,0x2c2b},{0x2c5c,0x2c2c,0x2c5c,0x2c2c},{0x045c,0x040c,0x045c,0x040c},{0x045d,0x040d,0x045d,0x040d},
-{0x2c5d,0x2c2d,0x2c5d,0x2c2d},{0x2c5e,0x2c2e,0x2c5e,0x2c2e},{0x045e,0x040e,0x045e,0x040e},{0x045f,0x040f,0x045f,0x040f},
-{0x0460,0x0460,0x0461,0x0460},{0x2c60,0x2c60,0x2c61,0x2c60},{0x0461,0x0460,0x0461,0x0460},{0x2c61,0x2c60,0x2c61,0x2c60},
-{0x0462,0x0462,0x0463,0x0462},{0x2c62,0x2c62,0x026b,0x2c62},{0x0463,0x0462,0x0463,0x0462},{0x2c63,0x2c63,0x1d7d,0x2c63},
-{0x0464,0x0464,0x0465,0x0464},{0x2c64,0x2c64,0x027d,0x2c64},{0x0465,0x0464,0x0465,0x0464},{0x2c65,0x023a,0x2c65,0x023a},
+{0x0451,0x0401,0x0451,0x0401},{0x0452,0x0402,0x0452,0x0402},{0x2c52,0x2c22,0x2c52,0x2c22},{0x2c53,0x2c23,0x2c53,0x2c23},
+{0x0453,0x0403,0x0453,0x0403},{0x2c54,0x2c24,0x2c54,0x2c24},{0x0454,0x0404,0x0454,0x0404},{0x0455,0x0405,0x0455,0x0405},
+{0x2c55,0x2c25,0x2c55,0x2c25},{0x0456,0x0406,0x0456,0x0406},{0x2c56,0x2c26,0x2c56,0x2c26},{0x0457,0x0407,0x0457,0x0407},
+{0x2c57,0x2c27,0x2c57,0x2c27},{0x2c58,0x2c28,0x2c58,0x2c28},{0x0458,0x0408,0x0458,0x0408},{0x0459,0x0409,0x0459,0x0409},
+{0x2c59,0x2c29,0x2c59,0x2c29},{0x2c5a,0x2c2a,0x2c5a,0x2c2a},{0x045a,0x040a,0x045a,0x040a},{0x045b,0x040b,0x045b,0x040b},
+{0x2c5b,0x2c2b,0x2c5b,0x2c2b},{0x2c5c,0x2c2c,0x2c5c,0x2c2c},{0x045c,0x040c,0x045c,0x040c},{0x2c5d,0x2c2d,0x2c5d,0x2c2d},
+{0x045d,0x040d,0x045d,0x040d},{0x045e,0x040e,0x045e,0x040e},{0x2c5e,0x2c2e,0x2c5e,0x2c2e},{0x045f,0x040f,0x045f,0x040f},
+{0x2c60,0x2c60,0x2c61,0x2c60},{0x0460,0x0460,0x0461,0x0460},{0x2c61,0x2c60,0x2c61,0x2c60},{0x0461,0x0460,0x0461,0x0460},
+{0x2c62,0x2c62,0x026b,0x2c62},{0x0462,0x0462,0x0463,0x0462},{0x0463,0x0462,0x0463,0x0462},{0x2c63,0x2c63,0x1d7d,0x2c63},
+{0x2c64,0x2c64,0x027d,0x2c64},{0x0464,0x0464,0x0465,0x0464},{0x0465,0x0464,0x0465,0x0464},{0x2c65,0x023a,0x2c65,0x023a},
{0x2c66,0x023e,0x2c66,0x023e},{0x0466,0x0466,0x0467,0x0466},{0x0467,0x0466,0x0467,0x0466},{0x2c67,0x2c67,0x2c68,0x2c67},
{0x2c68,0x2c67,0x2c68,0x2c67},{0x0468,0x0468,0x0469,0x0468},{0x0469,0x0468,0x0469,0x0468},{0x2c69,0x2c69,0x2c6a,0x2c69},
-{0x046a,0x046a,0x046b,0x046a},{0x2c6a,0x2c69,0x2c6a,0x2c69},{0x2c6b,0x2c6b,0x2c6c,0x2c6b},{0x046b,0x046a,0x046b,0x046a},
-{0x2c6c,0x2c6b,0x2c6c,0x2c6b},{0x046c,0x046c,0x046d,0x046c},{0x046d,0x046c,0x046d,0x046c},{0x2c6d,0x2c6d,0x0251,0x2c6d},
+{0x2c6a,0x2c69,0x2c6a,0x2c69},{0x046a,0x046a,0x046b,0x046a},{0x046b,0x046a,0x046b,0x046a},{0x2c6b,0x2c6b,0x2c6c,0x2c6b},
+{0x2c6c,0x2c6b,0x2c6c,0x2c6b},{0x046c,0x046c,0x046d,0x046c},{0x2c6d,0x2c6d,0x0251,0x2c6d},{0x046d,0x046c,0x046d,0x046c},
{0x2c6e,0x2c6e,0x0271,0x2c6e},{0x046e,0x046e,0x046f,0x046e},{0x046f,0x046e,0x046f,0x046e},{0x2c6f,0x2c6f,0x0250,0x2c6f},
-{0x2c70,0x2c70,0x0252,0x2c70},{0x0470,0x0470,0x0471,0x0470},{0x0471,0x0470,0x0471,0x0470},{0x0472,0x0472,0x0473,0x0472},
-{0x2c72,0x2c72,0x2c73,0x2c72},{0x2c73,0x2c72,0x2c73,0x2c72},{0x0473,0x0472,0x0473,0x0472},{0x0474,0x0474,0x0475,0x0474},
-{0x0475,0x0474,0x0475,0x0474},{0x2c75,0x2c75,0x2c76,0x2c75},{0x2c76,0x2c75,0x2c76,0x2c75},{0x0476,0x0476,0x0477,0x0476},
+{0x2c70,0x2c70,0x0252,0x2c70},{0x0470,0x0470,0x0471,0x0470},{0x0471,0x0470,0x0471,0x0470},{0x2c72,0x2c72,0x2c73,0x2c72},
+{0x0472,0x0472,0x0473,0x0472},{0x2c73,0x2c72,0x2c73,0x2c72},{0x0473,0x0472,0x0473,0x0472},{0x0474,0x0474,0x0475,0x0474},
+{0x2c75,0x2c75,0x2c76,0x2c75},{0x0475,0x0474,0x0475,0x0474},{0x0476,0x0476,0x0477,0x0476},{0x2c76,0x2c75,0x2c76,0x2c75},
{0x0477,0x0476,0x0477,0x0476},{0x0478,0x0478,0x0479,0x0478},{0x0479,0x0478,0x0479,0x0478},{0x047a,0x047a,0x047b,0x047a},
-{0x047b,0x047a,0x047b,0x047a},{0x047c,0x047c,0x047d,0x047c},{0x047d,0x047c,0x047d,0x047c},{0x047e,0x047e,0x047f,0x047e},
-{0x2c7e,0x2c7e,0x023f,0x2c7e},{0x047f,0x047e,0x047f,0x047e},{0x2c7f,0x2c7f,0x0240,0x2c7f},{0x10c80,0x10c80,0x10cc0,0x10c80},
-{0x2c80,0x2c80,0x2c81,0x2c80},{0x0480,0x0480,0x0481,0x0480},{0x2c81,0x2c80,0x2c81,0x2c80},{0x10c81,0x10c81,0x10cc1,0x10c81},
-{0x0481,0x0480,0x0481,0x0480},{0x2c82,0x2c82,0x2c83,0x2c82},{0x10c82,0x10c82,0x10cc2,0x10c82},{0x2c83,0x2c82,0x2c83,0x2c82},
-{0x10c83,0x10c83,0x10cc3,0x10c83},{0x10c84,0x10c84,0x10cc4,0x10c84},{0x2c84,0x2c84,0x2c85,0x2c84},{0x10c85,0x10c85,0x10cc5,0x10c85},
-{0x2c85,0x2c84,0x2c85,0x2c84},{0x10c86,0x10c86,0x10cc6,0x10c86},{0x2c86,0x2c86,0x2c87,0x2c86},{0x10c87,0x10c87,0x10cc7,0x10c87},
-{0x2c87,0x2c86,0x2c87,0x2c86},{0x2c88,0x2c88,0x2c89,0x2c88},{0x10c88,0x10c88,0x10cc8,0x10c88},{0x10c89,0x10c89,0x10cc9,0x10c89},
-{0x2c89,0x2c88,0x2c89,0x2c88},{0x2c8a,0x2c8a,0x2c8b,0x2c8a},{0x10c8a,0x10c8a,0x10cca,0x10c8a},{0x048a,0x048a,0x048b,0x048a},
+{0x047b,0x047a,0x047b,0x047a},{0x047c,0x047c,0x047d,0x047c},{0x047d,0x047c,0x047d,0x047c},{0x2c7e,0x2c7e,0x023f,0x2c7e},
+{0x047e,0x047e,0x047f,0x047e},{0x047f,0x047e,0x047f,0x047e},{0x2c7f,0x2c7f,0x0240,0x2c7f},{0x10c80,0x10c80,0x10cc0,0x10c80},
+{0x2c80,0x2c80,0x2c81,0x2c80},{0x0480,0x0480,0x0481,0x0480},{0x2c81,0x2c80,0x2c81,0x2c80},{0x0481,0x0480,0x0481,0x0480},
+{0x10c81,0x10c81,0x10cc1,0x10c81},{0x10c82,0x10c82,0x10cc2,0x10c82},{0x2c82,0x2c82,0x2c83,0x2c82},{0x2c83,0x2c82,0x2c83,0x2c82},
+{0x10c83,0x10c83,0x10cc3,0x10c83},{0x2c84,0x2c84,0x2c85,0x2c84},{0x10c84,0x10c84,0x10cc4,0x10c84},{0x2c85,0x2c84,0x2c85,0x2c84},
+{0x10c85,0x10c85,0x10cc5,0x10c85},{0x10c86,0x10c86,0x10cc6,0x10c86},{0x2c86,0x2c86,0x2c87,0x2c86},{0x2c87,0x2c86,0x2c87,0x2c86},
+{0x10c87,0x10c87,0x10cc7,0x10c87},{0x10c88,0x10c88,0x10cc8,0x10c88},{0x2c88,0x2c88,0x2c89,0x2c88},{0x2c89,0x2c88,0x2c89,0x2c88},
+{0x10c89,0x10c89,0x10cc9,0x10c89},{0x048a,0x048a,0x048b,0x048a},{0x2c8a,0x2c8a,0x2c8b,0x2c8a},{0x10c8a,0x10c8a,0x10cca,0x10c8a},
{0x10c8b,0x10c8b,0x10ccb,0x10c8b},{0x048b,0x048a,0x048b,0x048a},{0x2c8b,0x2c8a,0x2c8b,0x2c8a},{0x048c,0x048c,0x048d,0x048c},
-{0x2c8c,0x2c8c,0x2c8d,0x2c8c},{0x10c8c,0x10c8c,0x10ccc,0x10c8c},{0x048d,0x048c,0x048d,0x048c},{0x10c8d,0x10c8d,0x10ccd,0x10c8d},
-{0x2c8d,0x2c8c,0x2c8d,0x2c8c},{0x2c8e,0x2c8e,0x2c8f,0x2c8e},{0x048e,0x048e,0x048f,0x048e},{0x10c8e,0x10c8e,0x10cce,0x10c8e},
-{0x10c8f,0x10c8f,0x10ccf,0x10c8f},{0x2c8f,0x2c8e,0x2c8f,0x2c8e},{0x048f,0x048e,0x048f,0x048e},{0x2c90,0x2c90,0x2c91,0x2c90},
-{0x0490,0x0490,0x0491,0x0490},{0x10c90,0x10c90,0x10cd0,0x10c90},{0x10c91,0x10c91,0x10cd1,0x10c91},{0x2c91,0x2c90,0x2c91,0x2c90},
-{0x0491,0x0490,0x0491,0x0490},{0x10c92,0x10c92,0x10cd2,0x10c92},{0x2c92,0x2c92,0x2c93,0x2c92},{0x0492,0x0492,0x0493,0x0492},
-{0x0493,0x0492,0x0493,0x0492},{0x10c93,0x10c93,0x10cd3,0x10c93},{0x2c93,0x2c92,0x2c93,0x2c92},{0x2c94,0x2c94,0x2c95,0x2c94},
-{0x0494,0x0494,0x0495,0x0494},{0x10c94,0x10c94,0x10cd4,0x10c94},{0x0495,0x0494,0x0495,0x0494},{0x2c95,0x2c94,0x2c95,0x2c94},
+{0x2c8c,0x2c8c,0x2c8d,0x2c8c},{0x10c8c,0x10c8c,0x10ccc,0x10c8c},{0x2c8d,0x2c8c,0x2c8d,0x2c8c},{0x10c8d,0x10c8d,0x10ccd,0x10c8d},
+{0x048d,0x048c,0x048d,0x048c},{0x048e,0x048e,0x048f,0x048e},{0x2c8e,0x2c8e,0x2c8f,0x2c8e},{0x10c8e,0x10c8e,0x10cce,0x10c8e},
+{0x2c8f,0x2c8e,0x2c8f,0x2c8e},{0x10c8f,0x10c8f,0x10ccf,0x10c8f},{0x048f,0x048e,0x048f,0x048e},{0x10c90,0x10c90,0x10cd0,0x10c90},
+{0x0490,0x0490,0x0491,0x0490},{0x2c90,0x2c90,0x2c91,0x2c90},{0x0491,0x0490,0x0491,0x0490},{0x2c91,0x2c90,0x2c91,0x2c90},
+{0x10c91,0x10c91,0x10cd1,0x10c91},{0x0492,0x0492,0x0493,0x0492},{0x2c92,0x2c92,0x2c93,0x2c92},{0x10c92,0x10c92,0x10cd2,0x10c92},
+{0x10c93,0x10c93,0x10cd3,0x10c93},{0x2c93,0x2c92,0x2c93,0x2c92},{0x0493,0x0492,0x0493,0x0492},{0x10c94,0x10c94,0x10cd4,0x10c94},
+{0x2c94,0x2c94,0x2c95,0x2c94},{0x0494,0x0494,0x0495,0x0494},{0x0495,0x0494,0x0495,0x0494},{0x2c95,0x2c94,0x2c95,0x2c94},
{0x10c95,0x10c95,0x10cd5,0x10c95},{0x0496,0x0496,0x0497,0x0496},{0x10c96,0x10c96,0x10cd6,0x10c96},{0x2c96,0x2c96,0x2c97,0x2c96},
-{0x0497,0x0496,0x0497,0x0496},{0x2c97,0x2c96,0x2c97,0x2c96},{0x10c97,0x10c97,0x10cd7,0x10c97},{0x2c98,0x2c98,0x2c99,0x2c98},
-{0x0498,0x0498,0x0499,0x0498},{0x10c98,0x10c98,0x10cd8,0x10c98},{0x10c99,0x10c99,0x10cd9,0x10c99},{0x2c99,0x2c98,0x2c99,0x2c98},
-{0x0499,0x0498,0x0499,0x0498},{0x2c9a,0x2c9a,0x2c9b,0x2c9a},{0x10c9a,0x10c9a,0x10cda,0x10c9a},{0x049a,0x049a,0x049b,0x049a},
-{0x2c9b,0x2c9a,0x2c9b,0x2c9a},{0x049b,0x049a,0x049b,0x049a},{0x10c9b,0x10c9b,0x10cdb,0x10c9b},{0x10c9c,0x10c9c,0x10cdc,0x10c9c},
-{0x2c9c,0x2c9c,0x2c9d,0x2c9c},{0x049c,0x049c,0x049d,0x049c},{0x2c9d,0x2c9c,0x2c9d,0x2c9c},{0x049d,0x049c,0x049d,0x049c},
-{0x10c9d,0x10c9d,0x10cdd,0x10c9d},{0x2c9e,0x2c9e,0x2c9f,0x2c9e},{0x10c9e,0x10c9e,0x10cde,0x10c9e},{0x049e,0x049e,0x049f,0x049e},
-{0x049f,0x049e,0x049f,0x049e},{0x2c9f,0x2c9e,0x2c9f,0x2c9e},{0x10c9f,0x10c9f,0x10cdf,0x10c9f},{0x10ca0,0x10ca0,0x10ce0,0x10ca0},
-{0x2ca0,0x2ca0,0x2ca1,0x2ca0},{0x04a0,0x04a0,0x04a1,0x04a0},{0x10ca1,0x10ca1,0x10ce1,0x10ca1},{0x2ca1,0x2ca0,0x2ca1,0x2ca0},
-{0x04a1,0x04a0,0x04a1,0x04a0},{0x04a2,0x04a2,0x04a3,0x04a2},{0x2ca2,0x2ca2,0x2ca3,0x2ca2},{0x10ca2,0x10ca2,0x10ce2,0x10ca2},
-{0x2ca3,0x2ca2,0x2ca3,0x2ca2},{0x10ca3,0x10ca3,0x10ce3,0x10ca3},{0x04a3,0x04a2,0x04a3,0x04a2},{0x2ca4,0x2ca4,0x2ca5,0x2ca4},
-{0x04a4,0x04a4,0x04a5,0x04a4},{0x10ca4,0x10ca4,0x10ce4,0x10ca4},{0x2ca5,0x2ca4,0x2ca5,0x2ca4},{0x10ca5,0x10ca5,0x10ce5,0x10ca5},
-{0x04a5,0x04a4,0x04a5,0x04a4},{0x04a6,0x04a6,0x04a7,0x04a6},{0x2ca6,0x2ca6,0x2ca7,0x2ca6},{0x10ca6,0x10ca6,0x10ce6,0x10ca6},
-{0x10ca7,0x10ca7,0x10ce7,0x10ca7},{0x2ca7,0x2ca6,0x2ca7,0x2ca6},{0x04a7,0x04a6,0x04a7,0x04a6},{0x2ca8,0x2ca8,0x2ca9,0x2ca8},
-{0x10ca8,0x10ca8,0x10ce8,0x10ca8},{0x04a8,0x04a8,0x04a9,0x04a8},{0x2ca9,0x2ca8,0x2ca9,0x2ca8},{0x04a9,0x04a8,0x04a9,0x04a8},
-{0x10ca9,0x10ca9,0x10ce9,0x10ca9},{0x04aa,0x04aa,0x04ab,0x04aa},{0x2caa,0x2caa,0x2cab,0x2caa},{0x10caa,0x10caa,0x10cea,0x10caa},
-{0x2cab,0x2caa,0x2cab,0x2caa},{0x04ab,0x04aa,0x04ab,0x04aa},{0x10cab,0x10cab,0x10ceb,0x10cab},{0x2cac,0x2cac,0x2cad,0x2cac},
-{0x04ac,0x04ac,0x04ad,0x04ac},{0x10cac,0x10cac,0x10cec,0x10cac},{0x04ad,0x04ac,0x04ad,0x04ac},{0x2cad,0x2cac,0x2cad,0x2cac},
-{0x10cad,0x10cad,0x10ced,0x10cad},{0x10cae,0x10cae,0x10cee,0x10cae},{0x04ae,0x04ae,0x04af,0x04ae},{0x2cae,0x2cae,0x2caf,0x2cae},
-{0x04af,0x04ae,0x04af,0x04ae},{0x10caf,0x10caf,0x10cef,0x10caf},{0x2caf,0x2cae,0x2caf,0x2cae},{0x2cb0,0x2cb0,0x2cb1,0x2cb0},
-{0x10cb0,0x10cb0,0x10cf0,0x10cb0},{0x04b0,0x04b0,0x04b1,0x04b0},{0x2cb1,0x2cb0,0x2cb1,0x2cb0},{0x10cb1,0x10cb1,0x10cf1,0x10cb1},
-{0x04b1,0x04b0,0x04b1,0x04b0},{0x2cb2,0x2cb2,0x2cb3,0x2cb2},{0x04b2,0x04b2,0x04b3,0x04b2},{0x10cb2,0x10cb2,0x10cf2,0x10cb2},
+{0x0497,0x0496,0x0497,0x0496},{0x2c97,0x2c96,0x2c97,0x2c96},{0x10c97,0x10c97,0x10cd7,0x10c97},{0x0498,0x0498,0x0499,0x0498},
+{0x10c98,0x10c98,0x10cd8,0x10c98},{0x2c98,0x2c98,0x2c99,0x2c98},{0x2c99,0x2c98,0x2c99,0x2c98},{0x10c99,0x10c99,0x10cd9,0x10c99},
+{0x0499,0x0498,0x0499,0x0498},{0x049a,0x049a,0x049b,0x049a},{0x2c9a,0x2c9a,0x2c9b,0x2c9a},{0x10c9a,0x10c9a,0x10cda,0x10c9a},
+{0x10c9b,0x10c9b,0x10cdb,0x10c9b},{0x049b,0x049a,0x049b,0x049a},{0x2c9b,0x2c9a,0x2c9b,0x2c9a},{0x049c,0x049c,0x049d,0x049c},
+{0x10c9c,0x10c9c,0x10cdc,0x10c9c},{0x2c9c,0x2c9c,0x2c9d,0x2c9c},{0x2c9d,0x2c9c,0x2c9d,0x2c9c},{0x049d,0x049c,0x049d,0x049c},
+{0x10c9d,0x10c9d,0x10cdd,0x10c9d},{0x049e,0x049e,0x049f,0x049e},{0x2c9e,0x2c9e,0x2c9f,0x2c9e},{0x10c9e,0x10c9e,0x10cde,0x10c9e},
+{0x049f,0x049e,0x049f,0x049e},{0x2c9f,0x2c9e,0x2c9f,0x2c9e},{0x10c9f,0x10c9f,0x10cdf,0x10c9f},{0x04a0,0x04a0,0x04a1,0x04a0},
+{0x10ca0,0x10ca0,0x10ce0,0x10ca0},{0x2ca0,0x2ca0,0x2ca1,0x2ca0},{0x2ca1,0x2ca0,0x2ca1,0x2ca0},{0x10ca1,0x10ca1,0x10ce1,0x10ca1},
+{0x04a1,0x04a0,0x04a1,0x04a0},{0x2ca2,0x2ca2,0x2ca3,0x2ca2},{0x10ca2,0x10ca2,0x10ce2,0x10ca2},{0x04a2,0x04a2,0x04a3,0x04a2},
+{0x04a3,0x04a2,0x04a3,0x04a2},{0x10ca3,0x10ca3,0x10ce3,0x10ca3},{0x2ca3,0x2ca2,0x2ca3,0x2ca2},{0x10ca4,0x10ca4,0x10ce4,0x10ca4},
+{0x04a4,0x04a4,0x04a5,0x04a4},{0x2ca4,0x2ca4,0x2ca5,0x2ca4},{0x10ca5,0x10ca5,0x10ce5,0x10ca5},{0x2ca5,0x2ca4,0x2ca5,0x2ca4},
+{0x04a5,0x04a4,0x04a5,0x04a4},{0x10ca6,0x10ca6,0x10ce6,0x10ca6},{0x2ca6,0x2ca6,0x2ca7,0x2ca6},{0x04a6,0x04a6,0x04a7,0x04a6},
+{0x10ca7,0x10ca7,0x10ce7,0x10ca7},{0x2ca7,0x2ca6,0x2ca7,0x2ca6},{0x04a7,0x04a6,0x04a7,0x04a6},{0x04a8,0x04a8,0x04a9,0x04a8},
+{0x2ca8,0x2ca8,0x2ca9,0x2ca8},{0x10ca8,0x10ca8,0x10ce8,0x10ca8},{0x04a9,0x04a8,0x04a9,0x04a8},{0x10ca9,0x10ca9,0x10ce9,0x10ca9},
+{0x2ca9,0x2ca8,0x2ca9,0x2ca8},{0x2caa,0x2caa,0x2cab,0x2caa},{0x10caa,0x10caa,0x10cea,0x10caa},{0x04aa,0x04aa,0x04ab,0x04aa},
+{0x04ab,0x04aa,0x04ab,0x04aa},{0x2cab,0x2caa,0x2cab,0x2caa},{0x10cab,0x10cab,0x10ceb,0x10cab},{0x10cac,0x10cac,0x10cec,0x10cac},
+{0x04ac,0x04ac,0x04ad,0x04ac},{0x2cac,0x2cac,0x2cad,0x2cac},{0x04ad,0x04ac,0x04ad,0x04ac},{0x2cad,0x2cac,0x2cad,0x2cac},
+{0x10cad,0x10cad,0x10ced,0x10cad},{0x2cae,0x2cae,0x2caf,0x2cae},{0x10cae,0x10cae,0x10cee,0x10cae},{0x04ae,0x04ae,0x04af,0x04ae},
+{0x04af,0x04ae,0x04af,0x04ae},{0x2caf,0x2cae,0x2caf,0x2cae},{0x10caf,0x10caf,0x10cef,0x10caf},{0x2cb0,0x2cb0,0x2cb1,0x2cb0},
+{0x04b0,0x04b0,0x04b1,0x04b0},{0x10cb0,0x10cb0,0x10cf0,0x10cb0},{0x04b1,0x04b0,0x04b1,0x04b0},{0x2cb1,0x2cb0,0x2cb1,0x2cb0},
+{0x10cb1,0x10cb1,0x10cf1,0x10cb1},{0x2cb2,0x2cb2,0x2cb3,0x2cb2},{0x10cb2,0x10cb2,0x10cf2,0x10cb2},{0x04b2,0x04b2,0x04b3,0x04b2},
{0x04b3,0x04b2,0x04b3,0x04b2},{0x2cb3,0x2cb2,0x2cb3,0x2cb2},{0x04b4,0x04b4,0x04b5,0x04b4},{0x2cb4,0x2cb4,0x2cb5,0x2cb4},
-{0x04b5,0x04b4,0x04b5,0x04b4},{0x2cb5,0x2cb4,0x2cb5,0x2cb4},{0x04b6,0x04b6,0x04b7,0x04b6},{0x24b6,0x24b6,0x24d0,0x24b6},
-{0x2cb6,0x2cb6,0x2cb7,0x2cb6},{0x04b7,0x04b6,0x04b7,0x04b6},{0x24b7,0x24b7,0x24d1,0x24b7},{0x2cb7,0x2cb6,0x2cb7,0x2cb6},
-{0x24b8,0x24b8,0x24d2,0x24b8},{0x04b8,0x04b8,0x04b9,0x04b8},{0x2cb8,0x2cb8,0x2cb9,0x2cb8},{0x04b9,0x04b8,0x04b9,0x04b8},
-{0x24b9,0x24b9,0x24d3,0x24b9},{0x2cb9,0x2cb8,0x2cb9,0x2cb8},{0x2cba,0x2cba,0x2cbb,0x2cba},{0x24ba,0x24ba,0x24d4,0x24ba},
-{0x04ba,0x04ba,0x04bb,0x04ba},{0x2cbb,0x2cba,0x2cbb,0x2cba},{0x24bb,0x24bb,0x24d5,0x24bb},{0x04bb,0x04ba,0x04bb,0x04ba},
-{0x2cbc,0x2cbc,0x2cbd,0x2cbc},{0x24bc,0x24bc,0x24d6,0x24bc},{0x04bc,0x04bc,0x04bd,0x04bc},{0x04bd,0x04bc,0x04bd,0x04bc},
-{0x24bd,0x24bd,0x24d7,0x24bd},{0x2cbd,0x2cbc,0x2cbd,0x2cbc},{0x04be,0x04be,0x04bf,0x04be},{0x24be,0x24be,0x24d8,0x24be},
-{0x2cbe,0x2cbe,0x2cbf,0x2cbe},{0x24bf,0x24bf,0x24d9,0x24bf},{0x04bf,0x04be,0x04bf,0x04be},{0x2cbf,0x2cbe,0x2cbf,0x2cbe},
-{0x10cc0,0x10c80,0x10cc0,0x10c80},{0x2cc0,0x2cc0,0x2cc1,0x2cc0},{0x04c0,0x04c0,0x04cf,0x04c0},{0x24c0,0x24c0,0x24da,0x24c0},
-{0x04c1,0x04c1,0x04c2,0x04c1},{0x24c1,0x24c1,0x24db,0x24c1},{0x10cc1,0x10c81,0x10cc1,0x10c81},{0x2cc1,0x2cc0,0x2cc1,0x2cc0},
-{0x10cc2,0x10c82,0x10cc2,0x10c82},{0x24c2,0x24c2,0x24dc,0x24c2},{0x2cc2,0x2cc2,0x2cc3,0x2cc2},{0x04c2,0x04c1,0x04c2,0x04c1},
-{0x10cc3,0x10c83,0x10cc3,0x10c83},{0x04c3,0x04c3,0x04c4,0x04c3},{0x24c3,0x24c3,0x24dd,0x24c3},{0x2cc3,0x2cc2,0x2cc3,0x2cc2},
-{0x10cc4,0x10c84,0x10cc4,0x10c84},{0x2cc4,0x2cc4,0x2cc5,0x2cc4},{0x24c4,0x24c4,0x24de,0x24c4},{0x04c4,0x04c3,0x04c4,0x04c3},
-{0x10cc5,0x10c85,0x10cc5,0x10c85},{0x2cc5,0x2cc4,0x2cc5,0x2cc4},{0x24c5,0x24c5,0x24df,0x24c5},{0x04c5,0x04c5,0x04c6,0x04c5},
-{0x24c6,0x24c6,0x24e0,0x24c6},{0x2cc6,0x2cc6,0x2cc7,0x2cc6},{0x10cc6,0x10c86,0x10cc6,0x10c86},{0x04c6,0x04c5,0x04c6,0x04c5},
+{0x2cb5,0x2cb4,0x2cb5,0x2cb4},{0x04b5,0x04b4,0x04b5,0x04b4},{0x04b6,0x04b6,0x04b7,0x04b6},{0x2cb6,0x2cb6,0x2cb7,0x2cb6},
+{0x24b6,0x24b6,0x24d0,0x24b6},{0x04b7,0x04b6,0x04b7,0x04b6},{0x2cb7,0x2cb6,0x2cb7,0x2cb6},{0x24b7,0x24b7,0x24d1,0x24b7},
+{0x04b8,0x04b8,0x04b9,0x04b8},{0x2cb8,0x2cb8,0x2cb9,0x2cb8},{0x24b8,0x24b8,0x24d2,0x24b8},{0x24b9,0x24b9,0x24d3,0x24b9},
+{0x04b9,0x04b8,0x04b9,0x04b8},{0x2cb9,0x2cb8,0x2cb9,0x2cb8},{0x04ba,0x04ba,0x04bb,0x04ba},{0x24ba,0x24ba,0x24d4,0x24ba},
+{0x2cba,0x2cba,0x2cbb,0x2cba},{0x24bb,0x24bb,0x24d5,0x24bb},{0x2cbb,0x2cba,0x2cbb,0x2cba},{0x04bb,0x04ba,0x04bb,0x04ba},
+{0x04bc,0x04bc,0x04bd,0x04bc},{0x2cbc,0x2cbc,0x2cbd,0x2cbc},{0x24bc,0x24bc,0x24d6,0x24bc},{0x04bd,0x04bc,0x04bd,0x04bc},
+{0x24bd,0x24bd,0x24d7,0x24bd},{0x2cbd,0x2cbc,0x2cbd,0x2cbc},{0x2cbe,0x2cbe,0x2cbf,0x2cbe},{0x04be,0x04be,0x04bf,0x04be},
+{0x24be,0x24be,0x24d8,0x24be},{0x2cbf,0x2cbe,0x2cbf,0x2cbe},{0x04bf,0x04be,0x04bf,0x04be},{0x24bf,0x24bf,0x24d9,0x24bf},
+{0x10cc0,0x10c80,0x10cc0,0x10c80},{0x2cc0,0x2cc0,0x2cc1,0x2cc0},{0x24c0,0x24c0,0x24da,0x24c0},{0x04c0,0x04c0,0x04cf,0x04c0},
+{0x10cc1,0x10c81,0x10cc1,0x10c81},{0x04c1,0x04c1,0x04c2,0x04c1},{0x24c1,0x24c1,0x24db,0x24c1},{0x2cc1,0x2cc0,0x2cc1,0x2cc0},
+{0x2cc2,0x2cc2,0x2cc3,0x2cc2},{0x10cc2,0x10c82,0x10cc2,0x10c82},{0x24c2,0x24c2,0x24dc,0x24c2},{0x04c2,0x04c1,0x04c2,0x04c1},
+{0x24c3,0x24c3,0x24dd,0x24c3},{0x2cc3,0x2cc2,0x2cc3,0x2cc2},{0x04c3,0x04c3,0x04c4,0x04c3},{0x10cc3,0x10c83,0x10cc3,0x10c83},
+{0x2cc4,0x2cc4,0x2cc5,0x2cc4},{0x04c4,0x04c3,0x04c4,0x04c3},{0x24c4,0x24c4,0x24de,0x24c4},{0x10cc4,0x10c84,0x10cc4,0x10c84},
+{0x04c5,0x04c5,0x04c6,0x04c5},{0x10cc5,0x10c85,0x10cc5,0x10c85},{0x24c5,0x24c5,0x24df,0x24c5},{0x2cc5,0x2cc4,0x2cc5,0x2cc4},
+{0x24c6,0x24c6,0x24e0,0x24c6},{0x2cc6,0x2cc6,0x2cc7,0x2cc6},{0x04c6,0x04c5,0x04c6,0x04c5},{0x10cc6,0x10c86,0x10cc6,0x10c86},
{0x04c7,0x04c7,0x04c8,0x04c7},{0x24c7,0x24c7,0x24e1,0x24c7},{0x10cc7,0x10c87,0x10cc7,0x10c87},{0x2cc7,0x2cc6,0x2cc7,0x2cc6},
{0x24c8,0x24c8,0x24e2,0x24c8},{0x04c8,0x04c7,0x04c8,0x04c7},{0x2cc8,0x2cc8,0x2cc9,0x2cc8},{0x10cc8,0x10c88,0x10cc8,0x10c88},
-{0x10cc9,0x10c89,0x10cc9,0x10c89},{0x24c9,0x24c9,0x24e3,0x24c9},{0x2cc9,0x2cc8,0x2cc9,0x2cc8},{0x04c9,0x04c9,0x04ca,0x04c9},
-{0x2cca,0x2cca,0x2ccb,0x2cca},{0x10cca,0x10c8a,0x10cca,0x10c8a},{0x24ca,0x24ca,0x24e4,0x24ca},{0x04ca,0x04c9,0x04ca,0x04c9},
-{0x2ccb,0x2cca,0x2ccb,0x2cca},{0x10ccb,0x10c8b,0x10ccb,0x10c8b},{0x24cb,0x24cb,0x24e5,0x24cb},{0x04cb,0x04cb,0x04cc,0x04cb},
-{0x24cc,0x24cc,0x24e6,0x24cc},{0x04cc,0x04cb,0x04cc,0x04cb},{0x10ccc,0x10c8c,0x10ccc,0x10c8c},{0x2ccc,0x2ccc,0x2ccd,0x2ccc},
-{0x2ccd,0x2ccc,0x2ccd,0x2ccc},{0x04cd,0x04cd,0x04ce,0x04cd},{0x10ccd,0x10c8d,0x10ccd,0x10c8d},{0x24cd,0x24cd,0x24e7,0x24cd},
-{0x24ce,0x24ce,0x24e8,0x24ce},{0x04ce,0x04cd,0x04ce,0x04cd},{0x2cce,0x2cce,0x2ccf,0x2cce},{0x10cce,0x10c8e,0x10cce,0x10c8e},
-{0x10ccf,0x10c8f,0x10ccf,0x10c8f},{0x04cf,0x04c0,0x04cf,0x04c0},{0x2ccf,0x2cce,0x2ccf,0x2cce},{0x24cf,0x24cf,0x24e9,0x24cf},
-{0x2cd0,0x2cd0,0x2cd1,0x2cd0},{0x24d0,0x24b6,0x24d0,0x24b6},{0x10cd0,0x10c90,0x10cd0,0x10c90},{0x04d0,0x04d0,0x04d1,0x04d0},
-{0x04d1,0x04d0,0x04d1,0x04d0},{0x10cd1,0x10c91,0x10cd1,0x10c91},{0x24d1,0x24b7,0x24d1,0x24b7},{0x2cd1,0x2cd0,0x2cd1,0x2cd0},
-{0x2cd2,0x2cd2,0x2cd3,0x2cd2},{0x10cd2,0x10c92,0x10cd2,0x10c92},{0x24d2,0x24b8,0x24d2,0x24b8},{0x04d2,0x04d2,0x04d3,0x04d2},
-{0x04d3,0x04d2,0x04d3,0x04d2},{0x24d3,0x24b9,0x24d3,0x24b9},{0x2cd3,0x2cd2,0x2cd3,0x2cd2},{0x10cd3,0x10c93,0x10cd3,0x10c93},
-{0x2cd4,0x2cd4,0x2cd5,0x2cd4},{0x10cd4,0x10c94,0x10cd4,0x10c94},{0x24d4,0x24ba,0x24d4,0x24ba},{0x04d4,0x04d4,0x04d5,0x04d4},
-{0x24d5,0x24bb,0x24d5,0x24bb},{0x10cd5,0x10c95,0x10cd5,0x10c95},{0x2cd5,0x2cd4,0x2cd5,0x2cd4},{0x04d5,0x04d4,0x04d5,0x04d4},
-{0x24d6,0x24bc,0x24d6,0x24bc},{0x04d6,0x04d6,0x04d7,0x04d6},{0x10cd6,0x10c96,0x10cd6,0x10c96},{0x2cd6,0x2cd6,0x2cd7,0x2cd6},
-{0x04d7,0x04d6,0x04d7,0x04d6},{0x10cd7,0x10c97,0x10cd7,0x10c97},{0x2cd7,0x2cd6,0x2cd7,0x2cd6},{0x24d7,0x24bd,0x24d7,0x24bd},
-{0x24d8,0x24be,0x24d8,0x24be},{0x10cd8,0x10c98,0x10cd8,0x10c98},{0x04d8,0x04d8,0x04d9,0x04d8},{0x2cd8,0x2cd8,0x2cd9,0x2cd8},
-{0x24d9,0x24bf,0x24d9,0x24bf},{0x10cd9,0x10c99,0x10cd9,0x10c99},{0x04d9,0x04d8,0x04d9,0x04d8},{0x2cd9,0x2cd8,0x2cd9,0x2cd8},
-{0x2cda,0x2cda,0x2cdb,0x2cda},{0x04da,0x04da,0x04db,0x04da},{0x24da,0x24c0,0x24da,0x24c0},{0x10cda,0x10c9a,0x10cda,0x10c9a},
-{0x24db,0x24c1,0x24db,0x24c1},{0x10cdb,0x10c9b,0x10cdb,0x10c9b},{0x2cdb,0x2cda,0x2cdb,0x2cda},{0x04db,0x04da,0x04db,0x04da},
-{0x2cdc,0x2cdc,0x2cdd,0x2cdc},{0x04dc,0x04dc,0x04dd,0x04dc},{0x10cdc,0x10c9c,0x10cdc,0x10c9c},{0x24dc,0x24c2,0x24dc,0x24c2},
-{0x04dd,0x04dc,0x04dd,0x04dc},{0x2cdd,0x2cdc,0x2cdd,0x2cdc},{0x10cdd,0x10c9d,0x10cdd,0x10c9d},{0x24dd,0x24c3,0x24dd,0x24c3},
-{0x24de,0x24c4,0x24de,0x24c4},{0x04de,0x04de,0x04df,0x04de},{0x10cde,0x10c9e,0x10cde,0x10c9e},{0x2cde,0x2cde,0x2cdf,0x2cde},
-{0x04df,0x04de,0x04df,0x04de},{0x24df,0x24c5,0x24df,0x24c5},{0x10cdf,0x10c9f,0x10cdf,0x10c9f},{0x2cdf,0x2cde,0x2cdf,0x2cde},
-{0x24e0,0x24c6,0x24e0,0x24c6},{0x2ce0,0x2ce0,0x2ce1,0x2ce0},{0x10ce0,0x10ca0,0x10ce0,0x10ca0},{0x04e0,0x04e0,0x04e1,0x04e0},
+{0x04c9,0x04c9,0x04ca,0x04c9},{0x2cc9,0x2cc8,0x2cc9,0x2cc8},{0x24c9,0x24c9,0x24e3,0x24c9},{0x10cc9,0x10c89,0x10cc9,0x10c89},
+{0x04ca,0x04c9,0x04ca,0x04c9},{0x10cca,0x10c8a,0x10cca,0x10c8a},{0x2cca,0x2cca,0x2ccb,0x2cca},{0x24ca,0x24ca,0x24e4,0x24ca},
+{0x10ccb,0x10c8b,0x10ccb,0x10c8b},{0x24cb,0x24cb,0x24e5,0x24cb},{0x2ccb,0x2cca,0x2ccb,0x2cca},{0x04cb,0x04cb,0x04cc,0x04cb},
+{0x10ccc,0x10c8c,0x10ccc,0x10c8c},{0x2ccc,0x2ccc,0x2ccd,0x2ccc},{0x04cc,0x04cb,0x04cc,0x04cb},{0x24cc,0x24cc,0x24e6,0x24cc},
+{0x24cd,0x24cd,0x24e7,0x24cd},{0x2ccd,0x2ccc,0x2ccd,0x2ccc},{0x04cd,0x04cd,0x04ce,0x04cd},{0x10ccd,0x10c8d,0x10ccd,0x10c8d},
+{0x24ce,0x24ce,0x24e8,0x24ce},{0x10cce,0x10c8e,0x10cce,0x10c8e},{0x2cce,0x2cce,0x2ccf,0x2cce},{0x04ce,0x04cd,0x04ce,0x04cd},
+{0x04cf,0x04c0,0x04cf,0x04c0},{0x2ccf,0x2cce,0x2ccf,0x2cce},{0x10ccf,0x10c8f,0x10ccf,0x10c8f},{0x24cf,0x24cf,0x24e9,0x24cf},
+{0x2cd0,0x2cd0,0x2cd1,0x2cd0},{0x10cd0,0x10c90,0x10cd0,0x10c90},{0x24d0,0x24b6,0x24d0,0x24b6},{0x04d0,0x04d0,0x04d1,0x04d0},
+{0x24d1,0x24b7,0x24d1,0x24b7},{0x2cd1,0x2cd0,0x2cd1,0x2cd0},{0x10cd1,0x10c91,0x10cd1,0x10c91},{0x04d1,0x04d0,0x04d1,0x04d0},
+{0x2cd2,0x2cd2,0x2cd3,0x2cd2},{0x04d2,0x04d2,0x04d3,0x04d2},{0x10cd2,0x10c92,0x10cd2,0x10c92},{0x24d2,0x24b8,0x24d2,0x24b8},
+{0x10cd3,0x10c93,0x10cd3,0x10c93},{0x04d3,0x04d2,0x04d3,0x04d2},{0x2cd3,0x2cd2,0x2cd3,0x2cd2},{0x24d3,0x24b9,0x24d3,0x24b9},
+{0x24d4,0x24ba,0x24d4,0x24ba},{0x04d4,0x04d4,0x04d5,0x04d4},{0x2cd4,0x2cd4,0x2cd5,0x2cd4},{0x10cd4,0x10c94,0x10cd4,0x10c94},
+{0x24d5,0x24bb,0x24d5,0x24bb},{0x2cd5,0x2cd4,0x2cd5,0x2cd4},{0x04d5,0x04d4,0x04d5,0x04d4},{0x10cd5,0x10c95,0x10cd5,0x10c95},
+{0x10cd6,0x10c96,0x10cd6,0x10c96},{0x04d6,0x04d6,0x04d7,0x04d6},{0x24d6,0x24bc,0x24d6,0x24bc},{0x2cd6,0x2cd6,0x2cd7,0x2cd6},
+{0x2cd7,0x2cd6,0x2cd7,0x2cd6},{0x10cd7,0x10c97,0x10cd7,0x10c97},{0x24d7,0x24bd,0x24d7,0x24bd},{0x04d7,0x04d6,0x04d7,0x04d6},
+{0x10cd8,0x10c98,0x10cd8,0x10c98},{0x24d8,0x24be,0x24d8,0x24be},{0x2cd8,0x2cd8,0x2cd9,0x2cd8},{0x04d8,0x04d8,0x04d9,0x04d8},
+{0x10cd9,0x10c99,0x10cd9,0x10c99},{0x04d9,0x04d8,0x04d9,0x04d8},{0x2cd9,0x2cd8,0x2cd9,0x2cd8},{0x24d9,0x24bf,0x24d9,0x24bf},
+{0x04da,0x04da,0x04db,0x04da},{0x10cda,0x10c9a,0x10cda,0x10c9a},{0x24da,0x24c0,0x24da,0x24c0},{0x2cda,0x2cda,0x2cdb,0x2cda},
+{0x04db,0x04da,0x04db,0x04da},{0x2cdb,0x2cda,0x2cdb,0x2cda},{0x10cdb,0x10c9b,0x10cdb,0x10c9b},{0x24db,0x24c1,0x24db,0x24c1},
+{0x2cdc,0x2cdc,0x2cdd,0x2cdc},{0x10cdc,0x10c9c,0x10cdc,0x10c9c},{0x24dc,0x24c2,0x24dc,0x24c2},{0x04dc,0x04dc,0x04dd,0x04dc},
+{0x10cdd,0x10c9d,0x10cdd,0x10c9d},{0x04dd,0x04dc,0x04dd,0x04dc},{0x24dd,0x24c3,0x24dd,0x24c3},{0x2cdd,0x2cdc,0x2cdd,0x2cdc},
+{0x04de,0x04de,0x04df,0x04de},{0x24de,0x24c4,0x24de,0x24c4},{0x2cde,0x2cde,0x2cdf,0x2cde},{0x10cde,0x10c9e,0x10cde,0x10c9e},
+{0x04df,0x04de,0x04df,0x04de},{0x2cdf,0x2cde,0x2cdf,0x2cde},{0x10cdf,0x10c9f,0x10cdf,0x10c9f},{0x24df,0x24c5,0x24df,0x24c5},
+{0x2ce0,0x2ce0,0x2ce1,0x2ce0},{0x24e0,0x24c6,0x24e0,0x24c6},{0x10ce0,0x10ca0,0x10ce0,0x10ca0},{0x04e0,0x04e0,0x04e1,0x04e0},
{0x04e1,0x04e0,0x04e1,0x04e0},{0x24e1,0x24c7,0x24e1,0x24c7},{0x10ce1,0x10ca1,0x10ce1,0x10ca1},{0x2ce1,0x2ce0,0x2ce1,0x2ce0},
-{0x04e2,0x04e2,0x04e3,0x04e2},{0x24e2,0x24c8,0x24e2,0x24c8},{0x10ce2,0x10ca2,0x10ce2,0x10ca2},{0x2ce2,0x2ce2,0x2ce3,0x2ce2},
-{0x2ce3,0x2ce2,0x2ce3,0x2ce2},{0x10ce3,0x10ca3,0x10ce3,0x10ca3},{0x24e3,0x24c9,0x24e3,0x24c9},{0x04e3,0x04e2,0x04e3,0x04e2},
+{0x24e2,0x24c8,0x24e2,0x24c8},{0x2ce2,0x2ce2,0x2ce3,0x2ce2},{0x04e2,0x04e2,0x04e3,0x04e2},{0x10ce2,0x10ca2,0x10ce2,0x10ca2},
+{0x04e3,0x04e2,0x04e3,0x04e2},{0x10ce3,0x10ca3,0x10ce3,0x10ca3},{0x24e3,0x24c9,0x24e3,0x24c9},{0x2ce3,0x2ce2,0x2ce3,0x2ce2},
{0x24e4,0x24ca,0x24e4,0x24ca},{0x04e4,0x04e4,0x04e5,0x04e4},{0x10ce4,0x10ca4,0x10ce4,0x10ca4},{0x24e5,0x24cb,0x24e5,0x24cb},
-{0x04e5,0x04e4,0x04e5,0x04e4},{0x10ce5,0x10ca5,0x10ce5,0x10ca5},{0x24e6,0x24cc,0x24e6,0x24cc},{0x10ce6,0x10ca6,0x10ce6,0x10ca6},
-{0x04e6,0x04e6,0x04e7,0x04e6},{0x04e7,0x04e6,0x04e7,0x04e6},{0x24e7,0x24cd,0x24e7,0x24cd},{0x10ce7,0x10ca7,0x10ce7,0x10ca7},
-{0x10ce8,0x10ca8,0x10ce8,0x10ca8},{0x24e8,0x24ce,0x24e8,0x24ce},{0x04e8,0x04e8,0x04e9,0x04e8},{0x24e9,0x24cf,0x24e9,0x24cf},
-{0x10ce9,0x10ca9,0x10ce9,0x10ca9},{0x04e9,0x04e8,0x04e9,0x04e8},{0x04ea,0x04ea,0x04eb,0x04ea},{0x10cea,0x10caa,0x10cea,0x10caa},
-{0x10ceb,0x10cab,0x10ceb,0x10cab},{0x2ceb,0x2ceb,0x2cec,0x2ceb},{0x04eb,0x04ea,0x04eb,0x04ea},{0x04ec,0x04ec,0x04ed,0x04ec},
-{0x10cec,0x10cac,0x10cec,0x10cac},{0x2cec,0x2ceb,0x2cec,0x2ceb},{0x2ced,0x2ced,0x2cee,0x2ced},{0x10ced,0x10cad,0x10ced,0x10cad},
-{0x04ed,0x04ec,0x04ed,0x04ec},{0x10cee,0x10cae,0x10cee,0x10cae},{0x2cee,0x2ced,0x2cee,0x2ced},{0x04ee,0x04ee,0x04ef,0x04ee},
-{0x04ef,0x04ee,0x04ef,0x04ee},{0x10cef,0x10caf,0x10cef,0x10caf},{0x10cf0,0x10cb0,0x10cf0,0x10cb0},{0x04f0,0x04f0,0x04f1,0x04f0},
+{0x10ce5,0x10ca5,0x10ce5,0x10ca5},{0x04e5,0x04e4,0x04e5,0x04e4},{0x24e6,0x24cc,0x24e6,0x24cc},{0x04e6,0x04e6,0x04e7,0x04e6},
+{0x10ce6,0x10ca6,0x10ce6,0x10ca6},{0x04e7,0x04e6,0x04e7,0x04e6},{0x10ce7,0x10ca7,0x10ce7,0x10ca7},{0x24e7,0x24cd,0x24e7,0x24cd},
+{0x10ce8,0x10ca8,0x10ce8,0x10ca8},{0x24e8,0x24ce,0x24e8,0x24ce},{0x04e8,0x04e8,0x04e9,0x04e8},{0x04e9,0x04e8,0x04e9,0x04e8},
+{0x10ce9,0x10ca9,0x10ce9,0x10ca9},{0x24e9,0x24cf,0x24e9,0x24cf},{0x04ea,0x04ea,0x04eb,0x04ea},{0x10cea,0x10caa,0x10cea,0x10caa},
+{0x04eb,0x04ea,0x04eb,0x04ea},{0x2ceb,0x2ceb,0x2cec,0x2ceb},{0x10ceb,0x10cab,0x10ceb,0x10cab},{0x04ec,0x04ec,0x04ed,0x04ec},
+{0x2cec,0x2ceb,0x2cec,0x2ceb},{0x10cec,0x10cac,0x10cec,0x10cac},{0x04ed,0x04ec,0x04ed,0x04ec},{0x2ced,0x2ced,0x2cee,0x2ced},
+{0x10ced,0x10cad,0x10ced,0x10cad},{0x2cee,0x2ced,0x2cee,0x2ced},{0x04ee,0x04ee,0x04ef,0x04ee},{0x10cee,0x10cae,0x10cee,0x10cae},
+{0x04ef,0x04ee,0x04ef,0x04ee},{0x10cef,0x10caf,0x10cef,0x10caf},{0x04f0,0x04f0,0x04f1,0x04f0},{0x10cf0,0x10cb0,0x10cf0,0x10cb0},
{0x04f1,0x04f0,0x04f1,0x04f0},{0x10cf1,0x10cb1,0x10cf1,0x10cb1},{0x04f2,0x04f2,0x04f3,0x04f2},{0x10cf2,0x10cb2,0x10cf2,0x10cb2},
-{0x2cf2,0x2cf2,0x2cf3,0x2cf2},{0x2cf3,0x2cf2,0x2cf3,0x2cf2},{0x04f3,0x04f2,0x04f3,0x04f2},{0x04f4,0x04f4,0x04f5,0x04f4},
+{0x2cf2,0x2cf2,0x2cf3,0x2cf2},{0x04f3,0x04f2,0x04f3,0x04f2},{0x2cf3,0x2cf2,0x2cf3,0x2cf2},{0x04f4,0x04f4,0x04f5,0x04f4},
{0x04f5,0x04f4,0x04f5,0x04f4},{0x04f6,0x04f6,0x04f7,0x04f6},{0x04f7,0x04f6,0x04f7,0x04f6},{0x04f8,0x04f8,0x04f9,0x04f8},
{0x04f9,0x04f8,0x04f9,0x04f8},{0x04fa,0x04fa,0x04fb,0x04fa},{0x04fb,0x04fa,0x04fb,0x04fa},{0x04fc,0x04fc,0x04fd,0x04fc},
-{0x04fd,0x04fc,0x04fd,0x04fc},{0x04fe,0x04fe,0x04ff,0x04fe},{0x04ff,0x04fe,0x04ff,0x04fe},{0x2d00,0x10a0,0x2d00,0x10a0},
-{0x0500,0x0500,0x0501,0x0500},{0x2d01,0x10a1,0x2d01,0x10a1},{0x0501,0x0500,0x0501,0x0500},{0x2d02,0x10a2,0x2d02,0x10a2},
-{0x0502,0x0502,0x0503,0x0502},{0x0503,0x0502,0x0503,0x0502},{0x2d03,0x10a3,0x2d03,0x10a3},{0x0504,0x0504,0x0505,0x0504},
-{0x2d04,0x10a4,0x2d04,0x10a4},{0x2d05,0x10a5,0x2d05,0x10a5},{0x0505,0x0504,0x0505,0x0504},{0x0506,0x0506,0x0507,0x0506},
-{0x2d06,0x10a6,0x2d06,0x10a6},{0x2d07,0x10a7,0x2d07,0x10a7},{0x0507,0x0506,0x0507,0x0506},{0x2d08,0x10a8,0x2d08,0x10a8},
-{0x0508,0x0508,0x0509,0x0508},{0x2d09,0x10a9,0x2d09,0x10a9},{0x0509,0x0508,0x0509,0x0508},{0x050a,0x050a,0x050b,0x050a},
-{0x2d0a,0x10aa,0x2d0a,0x10aa},{0x2d0b,0x10ab,0x2d0b,0x10ab},{0x050b,0x050a,0x050b,0x050a},{0x050c,0x050c,0x050d,0x050c},
-{0x2d0c,0x10ac,0x2d0c,0x10ac},{0x2d0d,0x10ad,0x2d0d,0x10ad},{0x050d,0x050c,0x050d,0x050c},{0x2d0e,0x10ae,0x2d0e,0x10ae},
-{0x050e,0x050e,0x050f,0x050e},{0x2d0f,0x10af,0x2d0f,0x10af},{0x050f,0x050e,0x050f,0x050e},{0x2d10,0x10b0,0x2d10,0x10b0},
-{0x0510,0x0510,0x0511,0x0510},{0x0511,0x0510,0x0511,0x0510},{0x2d11,0x10b1,0x2d11,0x10b1},{0x0512,0x0512,0x0513,0x0512},
+{0x04fd,0x04fc,0x04fd,0x04fc},{0x04fe,0x04fe,0x04ff,0x04fe},{0x04ff,0x04fe,0x04ff,0x04fe},{0x0500,0x0500,0x0501,0x0500},
+{0x2d00,0x10a0,0x2d00,0x10a0},{0x2d01,0x10a1,0x2d01,0x10a1},{0x0501,0x0500,0x0501,0x0500},{0x2d02,0x10a2,0x2d02,0x10a2},
+{0x0502,0x0502,0x0503,0x0502},{0x2d03,0x10a3,0x2d03,0x10a3},{0x0503,0x0502,0x0503,0x0502},{0x2d04,0x10a4,0x2d04,0x10a4},
+{0x0504,0x0504,0x0505,0x0504},{0x0505,0x0504,0x0505,0x0504},{0x2d05,0x10a5,0x2d05,0x10a5},{0x2d06,0x10a6,0x2d06,0x10a6},
+{0x0506,0x0506,0x0507,0x0506},{0x0507,0x0506,0x0507,0x0506},{0x2d07,0x10a7,0x2d07,0x10a7},{0x0508,0x0508,0x0509,0x0508},
+{0x2d08,0x10a8,0x2d08,0x10a8},{0x2d09,0x10a9,0x2d09,0x10a9},{0x0509,0x0508,0x0509,0x0508},{0x2d0a,0x10aa,0x2d0a,0x10aa},
+{0x050a,0x050a,0x050b,0x050a},{0x050b,0x050a,0x050b,0x050a},{0x2d0b,0x10ab,0x2d0b,0x10ab},{0x2d0c,0x10ac,0x2d0c,0x10ac},
+{0x050c,0x050c,0x050d,0x050c},{0x050d,0x050c,0x050d,0x050c},{0x2d0d,0x10ad,0x2d0d,0x10ad},{0x050e,0x050e,0x050f,0x050e},
+{0x2d0e,0x10ae,0x2d0e,0x10ae},{0x050f,0x050e,0x050f,0x050e},{0x2d0f,0x10af,0x2d0f,0x10af},{0x0510,0x0510,0x0511,0x0510},
+{0x2d10,0x10b0,0x2d10,0x10b0},{0x2d11,0x10b1,0x2d11,0x10b1},{0x0511,0x0510,0x0511,0x0510},{0x0512,0x0512,0x0513,0x0512},
{0x2d12,0x10b2,0x2d12,0x10b2},{0x0513,0x0512,0x0513,0x0512},{0x2d13,0x10b3,0x2d13,0x10b3},{0x2d14,0x10b4,0x2d14,0x10b4},
-{0x0514,0x0514,0x0515,0x0514},{0x0515,0x0514,0x0515,0x0514},{0x2d15,0x10b5,0x2d15,0x10b5},{0x2d16,0x10b6,0x2d16,0x10b6},
-{0x0516,0x0516,0x0517,0x0516},{0x0517,0x0516,0x0517,0x0516},{0x2d17,0x10b7,0x2d17,0x10b7},{0x0518,0x0518,0x0519,0x0518},
-{0x2d18,0x10b8,0x2d18,0x10b8},{0x0519,0x0518,0x0519,0x0518},{0x2d19,0x10b9,0x2d19,0x10b9},{0x2d1a,0x10ba,0x2d1a,0x10ba},
-{0x051a,0x051a,0x051b,0x051a},{0x051b,0x051a,0x051b,0x051a},{0x2d1b,0x10bb,0x2d1b,0x10bb},{0x051c,0x051c,0x051d,0x051c},
-{0x2d1c,0x10bc,0x2d1c,0x10bc},{0x2d1d,0x10bd,0x2d1d,0x10bd},{0x051d,0x051c,0x051d,0x051c},{0x2d1e,0x10be,0x2d1e,0x10be},
+{0x0514,0x0514,0x0515,0x0514},{0x2d15,0x10b5,0x2d15,0x10b5},{0x0515,0x0514,0x0515,0x0514},{0x0516,0x0516,0x0517,0x0516},
+{0x2d16,0x10b6,0x2d16,0x10b6},{0x0517,0x0516,0x0517,0x0516},{0x2d17,0x10b7,0x2d17,0x10b7},{0x2d18,0x10b8,0x2d18,0x10b8},
+{0x0518,0x0518,0x0519,0x0518},{0x0519,0x0518,0x0519,0x0518},{0x2d19,0x10b9,0x2d19,0x10b9},{0x051a,0x051a,0x051b,0x051a},
+{0x2d1a,0x10ba,0x2d1a,0x10ba},{0x051b,0x051a,0x051b,0x051a},{0x2d1b,0x10bb,0x2d1b,0x10bb},{0x2d1c,0x10bc,0x2d1c,0x10bc},
+{0x051c,0x051c,0x051d,0x051c},{0x051d,0x051c,0x051d,0x051c},{0x2d1d,0x10bd,0x2d1d,0x10bd},{0x2d1e,0x10be,0x2d1e,0x10be},
{0x051e,0x051e,0x051f,0x051e},{0x051f,0x051e,0x051f,0x051e},{0x2d1f,0x10bf,0x2d1f,0x10bf},{0x0520,0x0520,0x0521,0x0520},
-{0x2d20,0x10c0,0x2d20,0x10c0},{0x2d21,0x10c1,0x2d21,0x10c1},{0x0521,0x0520,0x0521,0x0520},{0x0522,0x0522,0x0523,0x0522},
-{0x2d22,0x10c2,0x2d22,0x10c2},{0x2d23,0x10c3,0x2d23,0x10c3},{0x0523,0x0522,0x0523,0x0522},{0x2d24,0x10c4,0x2d24,0x10c4},
-{0x0524,0x0524,0x0525,0x0524},{0x2d25,0x10c5,0x2d25,0x10c5},{0x0525,0x0524,0x0525,0x0524},{0x0526,0x0526,0x0527,0x0526},
+{0x2d20,0x10c0,0x2d20,0x10c0},{0x0521,0x0520,0x0521,0x0520},{0x2d21,0x10c1,0x2d21,0x10c1},{0x0522,0x0522,0x0523,0x0522},
+{0x2d22,0x10c2,0x2d22,0x10c2},{0x0523,0x0522,0x0523,0x0522},{0x2d23,0x10c3,0x2d23,0x10c3},{0x0524,0x0524,0x0525,0x0524},
+{0x2d24,0x10c4,0x2d24,0x10c4},{0x2d25,0x10c5,0x2d25,0x10c5},{0x0525,0x0524,0x0525,0x0524},{0x0526,0x0526,0x0527,0x0526},
{0x2d27,0x10c7,0x2d27,0x10c7},{0x0527,0x0526,0x0527,0x0526},{0x0528,0x0528,0x0529,0x0528},{0x0529,0x0528,0x0529,0x0528},
-{0x052a,0x052a,0x052b,0x052a},{0x052b,0x052a,0x052b,0x052a},{0x052c,0x052c,0x052d,0x052c},{0x2d2d,0x10cd,0x2d2d,0x10cd},
-{0x052d,0x052c,0x052d,0x052c},{0x052e,0x052e,0x052f,0x052e},{0x052f,0x052e,0x052f,0x052e},{0x0531,0x0531,0x0561,0x0531},
+{0x052a,0x052a,0x052b,0x052a},{0x052b,0x052a,0x052b,0x052a},{0x052c,0x052c,0x052d,0x052c},{0x052d,0x052c,0x052d,0x052c},
+{0x2d2d,0x10cd,0x2d2d,0x10cd},{0x052e,0x052e,0x052f,0x052e},{0x052f,0x052e,0x052f,0x052e},{0x0531,0x0531,0x0561,0x0531},
{0x0532,0x0532,0x0562,0x0532},{0x0533,0x0533,0x0563,0x0533},{0x0534,0x0534,0x0564,0x0534},{0x0535,0x0535,0x0565,0x0535},
{0x0536,0x0536,0x0566,0x0536},{0x0537,0x0537,0x0567,0x0537},{0x0538,0x0538,0x0568,0x0538},{0x0539,0x0539,0x0569,0x0539},
{0x053a,0x053a,0x056a,0x053a},{0x053b,0x053b,0x056b,0x053b},{0x053c,0x053c,0x056c,0x053c},{0x053d,0x053d,0x056d,0x053d},
@@ -468,45 +468,45 @@ const unicode_char unicode_case_tab[][4]={
{0x1e33,0x1e32,0x1e33,0x1e32},{0x1e34,0x1e34,0x1e35,0x1e34},{0x1e35,0x1e34,0x1e35,0x1e34},{0x1e36,0x1e36,0x1e37,0x1e36},
{0x1e37,0x1e36,0x1e37,0x1e36},{0x1e38,0x1e38,0x1e39,0x1e38},{0x1e39,0x1e38,0x1e39,0x1e38},{0x1e3a,0x1e3a,0x1e3b,0x1e3a},
{0x1e3b,0x1e3a,0x1e3b,0x1e3a},{0x1e3c,0x1e3c,0x1e3d,0x1e3c},{0x1e3d,0x1e3c,0x1e3d,0x1e3c},{0x1e3e,0x1e3e,0x1e3f,0x1e3e},
-{0x1e3f,0x1e3e,0x1e3f,0x1e3e},{0xa640,0xa640,0xa641,0xa640},{0x1e40,0x1e40,0x1e41,0x1e40},{0xa641,0xa640,0xa641,0xa640},
-{0x1e41,0x1e40,0x1e41,0x1e40},{0x1e42,0x1e42,0x1e43,0x1e42},{0xa642,0xa642,0xa643,0xa642},{0x1e43,0x1e42,0x1e43,0x1e42},
-{0xa643,0xa642,0xa643,0xa642},{0xa644,0xa644,0xa645,0xa644},{0x1e44,0x1e44,0x1e45,0x1e44},{0x1e45,0x1e44,0x1e45,0x1e44},
-{0xa645,0xa644,0xa645,0xa644},{0xa646,0xa646,0xa647,0xa646},{0x1e46,0x1e46,0x1e47,0x1e46},{0x1e47,0x1e46,0x1e47,0x1e46},
-{0xa647,0xa646,0xa647,0xa646},{0xa648,0xa648,0xa649,0xa648},{0x1e48,0x1e48,0x1e49,0x1e48},{0x1e49,0x1e48,0x1e49,0x1e48},
-{0xa649,0xa648,0xa649,0xa648},{0xa64a,0xa64a,0xa64b,0xa64a},{0x1e4a,0x1e4a,0x1e4b,0x1e4a},{0x1e4b,0x1e4a,0x1e4b,0x1e4a},
-{0xa64b,0xa64a,0xa64b,0xa64a},{0x1e4c,0x1e4c,0x1e4d,0x1e4c},{0xa64c,0xa64c,0xa64d,0xa64c},{0x1e4d,0x1e4c,0x1e4d,0x1e4c},
-{0xa64d,0xa64c,0xa64d,0xa64c},{0xa64e,0xa64e,0xa64f,0xa64e},{0x1e4e,0x1e4e,0x1e4f,0x1e4e},{0xa64f,0xa64e,0xa64f,0xa64e},
-{0x1e4f,0x1e4e,0x1e4f,0x1e4e},{0x1e50,0x1e50,0x1e51,0x1e50},{0xa650,0xa650,0xa651,0xa650},{0xa651,0xa650,0xa651,0xa650},
-{0x1e51,0x1e50,0x1e51,0x1e50},{0xa652,0xa652,0xa653,0xa652},{0x1e52,0x1e52,0x1e53,0x1e52},{0x1e53,0x1e52,0x1e53,0x1e52},
+{0x1e3f,0x1e3e,0x1e3f,0x1e3e},{0xa640,0xa640,0xa641,0xa640},{0x1e40,0x1e40,0x1e41,0x1e40},{0x1e41,0x1e40,0x1e41,0x1e40},
+{0xa641,0xa640,0xa641,0xa640},{0xa642,0xa642,0xa643,0xa642},{0x1e42,0x1e42,0x1e43,0x1e42},{0xa643,0xa642,0xa643,0xa642},
+{0x1e43,0x1e42,0x1e43,0x1e42},{0x1e44,0x1e44,0x1e45,0x1e44},{0xa644,0xa644,0xa645,0xa644},{0xa645,0xa644,0xa645,0xa644},
+{0x1e45,0x1e44,0x1e45,0x1e44},{0x1e46,0x1e46,0x1e47,0x1e46},{0xa646,0xa646,0xa647,0xa646},{0xa647,0xa646,0xa647,0xa646},
+{0x1e47,0x1e46,0x1e47,0x1e46},{0x1e48,0x1e48,0x1e49,0x1e48},{0xa648,0xa648,0xa649,0xa648},{0x1e49,0x1e48,0x1e49,0x1e48},
+{0xa649,0xa648,0xa649,0xa648},{0xa64a,0xa64a,0xa64b,0xa64a},{0x1e4a,0x1e4a,0x1e4b,0x1e4a},{0xa64b,0xa64a,0xa64b,0xa64a},
+{0x1e4b,0x1e4a,0x1e4b,0x1e4a},{0xa64c,0xa64c,0xa64d,0xa64c},{0x1e4c,0x1e4c,0x1e4d,0x1e4c},{0x1e4d,0x1e4c,0x1e4d,0x1e4c},
+{0xa64d,0xa64c,0xa64d,0xa64c},{0x1e4e,0x1e4e,0x1e4f,0x1e4e},{0xa64e,0xa64e,0xa64f,0xa64e},{0x1e4f,0x1e4e,0x1e4f,0x1e4e},
+{0xa64f,0xa64e,0xa64f,0xa64e},{0xa650,0xa650,0xa651,0xa650},{0x1e50,0x1e50,0x1e51,0x1e50},{0xa651,0xa650,0xa651,0xa650},
+{0x1e51,0x1e50,0x1e51,0x1e50},{0x1e52,0x1e52,0x1e53,0x1e52},{0xa652,0xa652,0xa653,0xa652},{0x1e53,0x1e52,0x1e53,0x1e52},
{0xa653,0xa652,0xa653,0xa652},{0x1e54,0x1e54,0x1e55,0x1e54},{0xa654,0xa654,0xa655,0xa654},{0x1e55,0x1e54,0x1e55,0x1e54},
-{0xa655,0xa654,0xa655,0xa654},{0x1e56,0x1e56,0x1e57,0x1e56},{0xa656,0xa656,0xa657,0xa656},{0x1e57,0x1e56,0x1e57,0x1e56},
-{0xa657,0xa656,0xa657,0xa656},{0xa658,0xa658,0xa659,0xa658},{0x1e58,0x1e58,0x1e59,0x1e58},{0xa659,0xa658,0xa659,0xa658},
-{0x1e59,0x1e58,0x1e59,0x1e58},{0x1e5a,0x1e5a,0x1e5b,0x1e5a},{0xa65a,0xa65a,0xa65b,0xa65a},{0x1e5b,0x1e5a,0x1e5b,0x1e5a},
-{0xa65b,0xa65a,0xa65b,0xa65a},{0xa65c,0xa65c,0xa65d,0xa65c},{0x1e5c,0x1e5c,0x1e5d,0x1e5c},{0xa65d,0xa65c,0xa65d,0xa65c},
-{0x1e5d,0x1e5c,0x1e5d,0x1e5c},{0x1e5e,0x1e5e,0x1e5f,0x1e5e},{0xa65e,0xa65e,0xa65f,0xa65e},{0xa65f,0xa65e,0xa65f,0xa65e},
-{0x1e5f,0x1e5e,0x1e5f,0x1e5e},{0xa660,0xa660,0xa661,0xa660},{0x1e60,0x1e60,0x1e61,0x1e60},{0x1e61,0x1e60,0x1e61,0x1e60},
-{0xa661,0xa660,0xa661,0xa660},{0x1e62,0x1e62,0x1e63,0x1e62},{0xa662,0xa662,0xa663,0xa662},{0x1e63,0x1e62,0x1e63,0x1e62},
-{0xa663,0xa662,0xa663,0xa662},{0xa664,0xa664,0xa665,0xa664},{0x1e64,0x1e64,0x1e65,0x1e64},{0x1e65,0x1e64,0x1e65,0x1e64},
-{0xa665,0xa664,0xa665,0xa664},{0xa666,0xa666,0xa667,0xa666},{0x1e66,0x1e66,0x1e67,0x1e66},{0x1e67,0x1e66,0x1e67,0x1e66},
-{0xa667,0xa666,0xa667,0xa666},{0x1e68,0x1e68,0x1e69,0x1e68},{0xa668,0xa668,0xa669,0xa668},{0xa669,0xa668,0xa669,0xa668},
-{0x1e69,0x1e68,0x1e69,0x1e68},{0xa66a,0xa66a,0xa66b,0xa66a},{0x1e6a,0x1e6a,0x1e6b,0x1e6a},{0x1e6b,0x1e6a,0x1e6b,0x1e6a},
-{0xa66b,0xa66a,0xa66b,0xa66a},{0xa66c,0xa66c,0xa66d,0xa66c},{0x1e6c,0x1e6c,0x1e6d,0x1e6c},{0xa66d,0xa66c,0xa66d,0xa66c},
-{0x1e6d,0x1e6c,0x1e6d,0x1e6c},{0x1e6e,0x1e6e,0x1e6f,0x1e6e},{0x1e6f,0x1e6e,0x1e6f,0x1e6e},{0x1e70,0x1e70,0x1e71,0x1e70},
+{0xa655,0xa654,0xa655,0xa654},{0x1e56,0x1e56,0x1e57,0x1e56},{0xa656,0xa656,0xa657,0xa656},{0xa657,0xa656,0xa657,0xa656},
+{0x1e57,0x1e56,0x1e57,0x1e56},{0x1e58,0x1e58,0x1e59,0x1e58},{0xa658,0xa658,0xa659,0xa658},{0xa659,0xa658,0xa659,0xa658},
+{0x1e59,0x1e58,0x1e59,0x1e58},{0xa65a,0xa65a,0xa65b,0xa65a},{0x1e5a,0x1e5a,0x1e5b,0x1e5a},{0x1e5b,0x1e5a,0x1e5b,0x1e5a},
+{0xa65b,0xa65a,0xa65b,0xa65a},{0x1e5c,0x1e5c,0x1e5d,0x1e5c},{0xa65c,0xa65c,0xa65d,0xa65c},{0xa65d,0xa65c,0xa65d,0xa65c},
+{0x1e5d,0x1e5c,0x1e5d,0x1e5c},{0x1e5e,0x1e5e,0x1e5f,0x1e5e},{0xa65e,0xa65e,0xa65f,0xa65e},{0x1e5f,0x1e5e,0x1e5f,0x1e5e},
+{0xa65f,0xa65e,0xa65f,0xa65e},{0xa660,0xa660,0xa661,0xa660},{0x1e60,0x1e60,0x1e61,0x1e60},{0x1e61,0x1e60,0x1e61,0x1e60},
+{0xa661,0xa660,0xa661,0xa660},{0x1e62,0x1e62,0x1e63,0x1e62},{0xa662,0xa662,0xa663,0xa662},{0xa663,0xa662,0xa663,0xa662},
+{0x1e63,0x1e62,0x1e63,0x1e62},{0xa664,0xa664,0xa665,0xa664},{0x1e64,0x1e64,0x1e65,0x1e64},{0xa665,0xa664,0xa665,0xa664},
+{0x1e65,0x1e64,0x1e65,0x1e64},{0x1e66,0x1e66,0x1e67,0x1e66},{0xa666,0xa666,0xa667,0xa666},{0xa667,0xa666,0xa667,0xa666},
+{0x1e67,0x1e66,0x1e67,0x1e66},{0x1e68,0x1e68,0x1e69,0x1e68},{0xa668,0xa668,0xa669,0xa668},{0x1e69,0x1e68,0x1e69,0x1e68},
+{0xa669,0xa668,0xa669,0xa668},{0x1e6a,0x1e6a,0x1e6b,0x1e6a},{0xa66a,0xa66a,0xa66b,0xa66a},{0xa66b,0xa66a,0xa66b,0xa66a},
+{0x1e6b,0x1e6a,0x1e6b,0x1e6a},{0xa66c,0xa66c,0xa66d,0xa66c},{0x1e6c,0x1e6c,0x1e6d,0x1e6c},{0x1e6d,0x1e6c,0x1e6d,0x1e6c},
+{0xa66d,0xa66c,0xa66d,0xa66c},{0x1e6e,0x1e6e,0x1e6f,0x1e6e},{0x1e6f,0x1e6e,0x1e6f,0x1e6e},{0x1e70,0x1e70,0x1e71,0x1e70},
{0x1e71,0x1e70,0x1e71,0x1e70},{0x1e72,0x1e72,0x1e73,0x1e72},{0x1e73,0x1e72,0x1e73,0x1e72},{0x1e74,0x1e74,0x1e75,0x1e74},
{0x1e75,0x1e74,0x1e75,0x1e74},{0x1e76,0x1e76,0x1e77,0x1e76},{0x1e77,0x1e76,0x1e77,0x1e76},{0x1e78,0x1e78,0x1e79,0x1e78},
{0x1e79,0x1e78,0x1e79,0x1e78},{0x1e7a,0x1e7a,0x1e7b,0x1e7a},{0x1e7b,0x1e7a,0x1e7b,0x1e7a},{0x1e7c,0x1e7c,0x1e7d,0x1e7c},
-{0x1e7d,0x1e7c,0x1e7d,0x1e7c},{0x1e7e,0x1e7e,0x1e7f,0x1e7e},{0x1e7f,0x1e7e,0x1e7f,0x1e7e},{0x1e80,0x1e80,0x1e81,0x1e80},
-{0xa680,0xa680,0xa681,0xa680},{0xa681,0xa680,0xa681,0xa680},{0x1e81,0x1e80,0x1e81,0x1e80},{0x1e82,0x1e82,0x1e83,0x1e82},
-{0xa682,0xa682,0xa683,0xa682},{0xa683,0xa682,0xa683,0xa682},{0x1e83,0x1e82,0x1e83,0x1e82},{0xa684,0xa684,0xa685,0xa684},
-{0x1e84,0x1e84,0x1e85,0x1e84},{0xa685,0xa684,0xa685,0xa684},{0x1e85,0x1e84,0x1e85,0x1e84},{0x1e86,0x1e86,0x1e87,0x1e86},
-{0xa686,0xa686,0xa687,0xa686},{0xa687,0xa686,0xa687,0xa686},{0x1e87,0x1e86,0x1e87,0x1e86},{0x1e88,0x1e88,0x1e89,0x1e88},
-{0xa688,0xa688,0xa689,0xa688},{0xa689,0xa688,0xa689,0xa688},{0x1e89,0x1e88,0x1e89,0x1e88},{0x1e8a,0x1e8a,0x1e8b,0x1e8a},
+{0x1e7d,0x1e7c,0x1e7d,0x1e7c},{0x1e7e,0x1e7e,0x1e7f,0x1e7e},{0x1e7f,0x1e7e,0x1e7f,0x1e7e},{0xa680,0xa680,0xa681,0xa680},
+{0x1e80,0x1e80,0x1e81,0x1e80},{0xa681,0xa680,0xa681,0xa680},{0x1e81,0x1e80,0x1e81,0x1e80},{0xa682,0xa682,0xa683,0xa682},
+{0x1e82,0x1e82,0x1e83,0x1e82},{0xa683,0xa682,0xa683,0xa682},{0x1e83,0x1e82,0x1e83,0x1e82},{0xa684,0xa684,0xa685,0xa684},
+{0x1e84,0x1e84,0x1e85,0x1e84},{0x1e85,0x1e84,0x1e85,0x1e84},{0xa685,0xa684,0xa685,0xa684},{0x1e86,0x1e86,0x1e87,0x1e86},
+{0xa686,0xa686,0xa687,0xa686},{0xa687,0xa686,0xa687,0xa686},{0x1e87,0x1e86,0x1e87,0x1e86},{0xa688,0xa688,0xa689,0xa688},
+{0x1e88,0x1e88,0x1e89,0x1e88},{0x1e89,0x1e88,0x1e89,0x1e88},{0xa689,0xa688,0xa689,0xa688},{0x1e8a,0x1e8a,0x1e8b,0x1e8a},
{0xa68a,0xa68a,0xa68b,0xa68a},{0xa68b,0xa68a,0xa68b,0xa68a},{0x1e8b,0x1e8a,0x1e8b,0x1e8a},{0x1e8c,0x1e8c,0x1e8d,0x1e8c},
-{0xa68c,0xa68c,0xa68d,0xa68c},{0xa68d,0xa68c,0xa68d,0xa68c},{0x1e8d,0x1e8c,0x1e8d,0x1e8c},{0x1e8e,0x1e8e,0x1e8f,0x1e8e},
-{0xa68e,0xa68e,0xa68f,0xa68e},{0xa68f,0xa68e,0xa68f,0xa68e},{0x1e8f,0x1e8e,0x1e8f,0x1e8e},{0xa690,0xa690,0xa691,0xa690},
+{0xa68c,0xa68c,0xa68d,0xa68c},{0x1e8d,0x1e8c,0x1e8d,0x1e8c},{0xa68d,0xa68c,0xa68d,0xa68c},{0xa68e,0xa68e,0xa68f,0xa68e},
+{0x1e8e,0x1e8e,0x1e8f,0x1e8e},{0x1e8f,0x1e8e,0x1e8f,0x1e8e},{0xa68f,0xa68e,0xa68f,0xa68e},{0xa690,0xa690,0xa691,0xa690},
{0x1e90,0x1e90,0x1e91,0x1e90},{0xa691,0xa690,0xa691,0xa690},{0x1e91,0x1e90,0x1e91,0x1e90},{0x1e92,0x1e92,0x1e93,0x1e92},
-{0xa692,0xa692,0xa693,0xa692},{0x1e93,0x1e92,0x1e93,0x1e92},{0xa693,0xa692,0xa693,0xa692},{0xa694,0xa694,0xa695,0xa694},
-{0x1e94,0x1e94,0x1e95,0x1e94},{0xa695,0xa694,0xa695,0xa694},{0x1e95,0x1e94,0x1e95,0x1e94},{0xa696,0xa696,0xa697,0xa696},
+{0xa692,0xa692,0xa693,0xa692},{0xa693,0xa692,0xa693,0xa692},{0x1e93,0x1e92,0x1e93,0x1e92},{0xa694,0xa694,0xa695,0xa694},
+{0x1e94,0x1e94,0x1e95,0x1e94},{0x1e95,0x1e94,0x1e95,0x1e94},{0xa695,0xa694,0xa695,0xa694},{0xa696,0xa696,0xa697,0xa696},
{0xa697,0xa696,0xa697,0xa696},{0xa698,0xa698,0xa699,0xa698},{0xa699,0xa698,0xa699,0xa698},{0xa69a,0xa69a,0xa69b,0xa69a},
{0x1e9b,0x1e60,0x1e9b,0x1e60},{0xa69b,0xa69a,0xa69b,0xa69a},{0x1e9e,0x1e9e,0x00df,0x1e9e},{0x1ea0,0x1ea0,0x1ea1,0x1ea0},
{0x1ea1,0x1ea0,0x1ea1,0x1ea0},{0x1ea2,0x1ea2,0x1ea3,0x1ea2},{0x1ea3,0x1ea2,0x1ea3,0x1ea2},{0x1ea4,0x1ea4,0x1ea5,0x1ea4},
@@ -540,82 +540,82 @@ const unicode_char unicode_case_tab[][4]={
{0x1f11,0x1f19,0x1f11,0x1f19},{0x1f12,0x1f1a,0x1f12,0x1f1a},{0x1f13,0x1f1b,0x1f13,0x1f1b},{0x1f14,0x1f1c,0x1f14,0x1f1c},
{0x1f15,0x1f1d,0x1f15,0x1f1d},{0x1f18,0x1f18,0x1f10,0x1f18},{0x1f19,0x1f19,0x1f11,0x1f19},{0x1f1a,0x1f1a,0x1f12,0x1f1a},
{0x1f1b,0x1f1b,0x1f13,0x1f1b},{0x1f1c,0x1f1c,0x1f14,0x1f1c},{0x1f1d,0x1f1d,0x1f15,0x1f1d},{0x1f20,0x1f28,0x1f20,0x1f28},
-{0xff21,0xff21,0xff41,0xff21},{0x1f21,0x1f29,0x1f21,0x1f29},{0xa722,0xa722,0xa723,0xa722},{0x1f22,0x1f2a,0x1f22,0x1f2a},
-{0xff22,0xff22,0xff42,0xff22},{0x1f23,0x1f2b,0x1f23,0x1f2b},{0xa723,0xa722,0xa723,0xa722},{0xff23,0xff23,0xff43,0xff23},
-{0x1f24,0x1f2c,0x1f24,0x1f2c},{0xff24,0xff24,0xff44,0xff24},{0xa724,0xa724,0xa725,0xa724},{0x1f25,0x1f2d,0x1f25,0x1f2d},
-{0xff25,0xff25,0xff45,0xff25},{0xa725,0xa724,0xa725,0xa724},{0x1f26,0x1f2e,0x1f26,0x1f2e},{0xa726,0xa726,0xa727,0xa726},
-{0xff26,0xff26,0xff46,0xff26},{0x1f27,0x1f2f,0x1f27,0x1f2f},{0xff27,0xff27,0xff47,0xff27},{0xa727,0xa726,0xa727,0xa726},
-{0xa728,0xa728,0xa729,0xa728},{0x1f28,0x1f28,0x1f20,0x1f28},{0xff28,0xff28,0xff48,0xff28},{0x1f29,0x1f29,0x1f21,0x1f29},
+{0x1f21,0x1f29,0x1f21,0x1f29},{0xff21,0xff21,0xff41,0xff21},{0xff22,0xff22,0xff42,0xff22},{0xa722,0xa722,0xa723,0xa722},
+{0x1f22,0x1f2a,0x1f22,0x1f2a},{0x1f23,0x1f2b,0x1f23,0x1f2b},{0xa723,0xa722,0xa723,0xa722},{0xff23,0xff23,0xff43,0xff23},
+{0xa724,0xa724,0xa725,0xa724},{0xff24,0xff24,0xff44,0xff24},{0x1f24,0x1f2c,0x1f24,0x1f2c},{0xff25,0xff25,0xff45,0xff25},
+{0x1f25,0x1f2d,0x1f25,0x1f2d},{0xa725,0xa724,0xa725,0xa724},{0x1f26,0x1f2e,0x1f26,0x1f2e},{0xa726,0xa726,0xa727,0xa726},
+{0xff26,0xff26,0xff46,0xff26},{0xff27,0xff27,0xff47,0xff27},{0x1f27,0x1f2f,0x1f27,0x1f2f},{0xa727,0xa726,0xa727,0xa726},
+{0xff28,0xff28,0xff48,0xff28},{0xa728,0xa728,0xa729,0xa728},{0x1f28,0x1f28,0x1f20,0x1f28},{0x1f29,0x1f29,0x1f21,0x1f29},
{0xa729,0xa728,0xa729,0xa728},{0xff29,0xff29,0xff49,0xff29},{0x1f2a,0x1f2a,0x1f22,0x1f2a},{0xff2a,0xff2a,0xff4a,0xff2a},
{0xa72a,0xa72a,0xa72b,0xa72a},{0xa72b,0xa72a,0xa72b,0xa72a},{0x1f2b,0x1f2b,0x1f23,0x1f2b},{0xff2b,0xff2b,0xff4b,0xff2b},
-{0x1f2c,0x1f2c,0x1f24,0x1f2c},{0xff2c,0xff2c,0xff4c,0xff2c},{0xa72c,0xa72c,0xa72d,0xa72c},{0x1f2d,0x1f2d,0x1f25,0x1f2d},
-{0xa72d,0xa72c,0xa72d,0xa72c},{0xff2d,0xff2d,0xff4d,0xff2d},{0x1f2e,0x1f2e,0x1f26,0x1f2e},{0xa72e,0xa72e,0xa72f,0xa72e},
-{0xff2e,0xff2e,0xff4e,0xff2e},{0xff2f,0xff2f,0xff4f,0xff2f},{0xa72f,0xa72e,0xa72f,0xa72e},{0x1f2f,0x1f2f,0x1f27,0x1f2f},
+{0xff2c,0xff2c,0xff4c,0xff2c},{0x1f2c,0x1f2c,0x1f24,0x1f2c},{0xa72c,0xa72c,0xa72d,0xa72c},{0xff2d,0xff2d,0xff4d,0xff2d},
+{0x1f2d,0x1f2d,0x1f25,0x1f2d},{0xa72d,0xa72c,0xa72d,0xa72c},{0xff2e,0xff2e,0xff4e,0xff2e},{0xa72e,0xa72e,0xa72f,0xa72e},
+{0x1f2e,0x1f2e,0x1f26,0x1f2e},{0xff2f,0xff2f,0xff4f,0xff2f},{0xa72f,0xa72e,0xa72f,0xa72e},{0x1f2f,0x1f2f,0x1f27,0x1f2f},
{0x1f30,0x1f38,0x1f30,0x1f38},{0xff30,0xff30,0xff50,0xff30},{0x1f31,0x1f39,0x1f31,0x1f39},{0xff31,0xff31,0xff51,0xff31},
-{0x1f32,0x1f3a,0x1f32,0x1f3a},{0xa732,0xa732,0xa733,0xa732},{0xff32,0xff32,0xff52,0xff32},{0x1f33,0x1f3b,0x1f33,0x1f3b},
-{0xff33,0xff33,0xff53,0xff33},{0xa733,0xa732,0xa733,0xa732},{0xff34,0xff34,0xff54,0xff34},{0xa734,0xa734,0xa735,0xa734},
-{0x1f34,0x1f3c,0x1f34,0x1f3c},{0xa735,0xa734,0xa735,0xa734},{0x1f35,0x1f3d,0x1f35,0x1f3d},{0xff35,0xff35,0xff55,0xff35},
-{0x1f36,0x1f3e,0x1f36,0x1f3e},{0xff36,0xff36,0xff56,0xff36},{0xa736,0xa736,0xa737,0xa736},{0x1f37,0x1f3f,0x1f37,0x1f3f},
-{0xa737,0xa736,0xa737,0xa736},{0xff37,0xff37,0xff57,0xff37},{0x1f38,0x1f38,0x1f30,0x1f38},{0xa738,0xa738,0xa739,0xa738},
-{0xff38,0xff38,0xff58,0xff38},{0xa739,0xa738,0xa739,0xa738},{0x1f39,0x1f39,0x1f31,0x1f39},{0xff39,0xff39,0xff59,0xff39},
-{0xa73a,0xa73a,0xa73b,0xa73a},{0x1f3a,0x1f3a,0x1f32,0x1f3a},{0xff3a,0xff3a,0xff5a,0xff3a},{0xa73b,0xa73a,0xa73b,0xa73a},
-{0x1f3b,0x1f3b,0x1f33,0x1f3b},{0x1f3c,0x1f3c,0x1f34,0x1f3c},{0xa73c,0xa73c,0xa73d,0xa73c},{0xa73d,0xa73c,0xa73d,0xa73c},
-{0x1f3d,0x1f3d,0x1f35,0x1f3d},{0xa73e,0xa73e,0xa73f,0xa73e},{0x1f3e,0x1f3e,0x1f36,0x1f3e},{0xa73f,0xa73e,0xa73f,0xa73e},
+{0xff32,0xff32,0xff52,0xff32},{0xa732,0xa732,0xa733,0xa732},{0x1f32,0x1f3a,0x1f32,0x1f3a},{0xff33,0xff33,0xff53,0xff33},
+{0xa733,0xa732,0xa733,0xa732},{0x1f33,0x1f3b,0x1f33,0x1f3b},{0x1f34,0x1f3c,0x1f34,0x1f3c},{0xa734,0xa734,0xa735,0xa734},
+{0xff34,0xff34,0xff54,0xff34},{0xff35,0xff35,0xff55,0xff35},{0x1f35,0x1f3d,0x1f35,0x1f3d},{0xa735,0xa734,0xa735,0xa734},
+{0xa736,0xa736,0xa737,0xa736},{0x1f36,0x1f3e,0x1f36,0x1f3e},{0xff36,0xff36,0xff56,0xff36},{0xa737,0xa736,0xa737,0xa736},
+{0xff37,0xff37,0xff57,0xff37},{0x1f37,0x1f3f,0x1f37,0x1f3f},{0xa738,0xa738,0xa739,0xa738},{0x1f38,0x1f38,0x1f30,0x1f38},
+{0xff38,0xff38,0xff58,0xff38},{0xff39,0xff39,0xff59,0xff39},{0xa739,0xa738,0xa739,0xa738},{0x1f39,0x1f39,0x1f31,0x1f39},
+{0x1f3a,0x1f3a,0x1f32,0x1f3a},{0xff3a,0xff3a,0xff5a,0xff3a},{0xa73a,0xa73a,0xa73b,0xa73a},{0x1f3b,0x1f3b,0x1f33,0x1f3b},
+{0xa73b,0xa73a,0xa73b,0xa73a},{0x1f3c,0x1f3c,0x1f34,0x1f3c},{0xa73c,0xa73c,0xa73d,0xa73c},{0xa73d,0xa73c,0xa73d,0xa73c},
+{0x1f3d,0x1f3d,0x1f35,0x1f3d},{0x1f3e,0x1f3e,0x1f36,0x1f3e},{0xa73e,0xa73e,0xa73f,0xa73e},{0xa73f,0xa73e,0xa73f,0xa73e},
{0x1f3f,0x1f3f,0x1f37,0x1f3f},{0xa740,0xa740,0xa741,0xa740},{0x1f40,0x1f48,0x1f40,0x1f48},{0xa741,0xa740,0xa741,0xa740},
-{0x1f41,0x1f49,0x1f41,0x1f49},{0xff41,0xff21,0xff41,0xff21},{0xff42,0xff22,0xff42,0xff22},{0xa742,0xa742,0xa743,0xa742},
-{0x1f42,0x1f4a,0x1f42,0x1f4a},{0xff43,0xff23,0xff43,0xff23},{0xa743,0xa742,0xa743,0xa742},{0x1f43,0x1f4b,0x1f43,0x1f4b},
-{0xff44,0xff24,0xff44,0xff24},{0x1f44,0x1f4c,0x1f44,0x1f4c},{0xa744,0xa744,0xa745,0xa744},{0x1f45,0x1f4d,0x1f45,0x1f4d},
-{0xa745,0xa744,0xa745,0xa744},{0xff45,0xff25,0xff45,0xff25},{0xa746,0xa746,0xa747,0xa746},{0xff46,0xff26,0xff46,0xff26},
-{0xa747,0xa746,0xa747,0xa746},{0xff47,0xff27,0xff47,0xff27},{0xff48,0xff28,0xff48,0xff28},{0xa748,0xa748,0xa749,0xa748},
-{0x1f48,0x1f48,0x1f40,0x1f48},{0xa749,0xa748,0xa749,0xa748},{0xff49,0xff29,0xff49,0xff29},{0x1f49,0x1f49,0x1f41,0x1f49},
-{0xff4a,0xff2a,0xff4a,0xff2a},{0x1f4a,0x1f4a,0x1f42,0x1f4a},{0xa74a,0xa74a,0xa74b,0xa74a},{0xff4b,0xff2b,0xff4b,0xff2b},
-{0x1f4b,0x1f4b,0x1f43,0x1f4b},{0xa74b,0xa74a,0xa74b,0xa74a},{0xa74c,0xa74c,0xa74d,0xa74c},{0x1f4c,0x1f4c,0x1f44,0x1f4c},
-{0xff4c,0xff2c,0xff4c,0xff2c},{0xff4d,0xff2d,0xff4d,0xff2d},{0x1f4d,0x1f4d,0x1f45,0x1f4d},{0xa74d,0xa74c,0xa74d,0xa74c},
-{0xa74e,0xa74e,0xa74f,0xa74e},{0xff4e,0xff2e,0xff4e,0xff2e},{0xa74f,0xa74e,0xa74f,0xa74e},{0xff4f,0xff2f,0xff4f,0xff2f},
-{0xa750,0xa750,0xa751,0xa750},{0xff50,0xff30,0xff50,0xff30},{0xa751,0xa750,0xa751,0xa750},{0xff51,0xff31,0xff51,0xff31},
+{0xff41,0xff21,0xff41,0xff21},{0x1f41,0x1f49,0x1f41,0x1f49},{0x1f42,0x1f4a,0x1f42,0x1f4a},{0xff42,0xff22,0xff42,0xff22},
+{0xa742,0xa742,0xa743,0xa742},{0xff43,0xff23,0xff43,0xff23},{0x1f43,0x1f4b,0x1f43,0x1f4b},{0xa743,0xa742,0xa743,0xa742},
+{0xff44,0xff24,0xff44,0xff24},{0x1f44,0x1f4c,0x1f44,0x1f4c},{0xa744,0xa744,0xa745,0xa744},{0xff45,0xff25,0xff45,0xff25},
+{0xa745,0xa744,0xa745,0xa744},{0x1f45,0x1f4d,0x1f45,0x1f4d},{0xff46,0xff26,0xff46,0xff26},{0xa746,0xa746,0xa747,0xa746},
+{0xa747,0xa746,0xa747,0xa746},{0xff47,0xff27,0xff47,0xff27},{0x1f48,0x1f48,0x1f40,0x1f48},{0xff48,0xff28,0xff48,0xff28},
+{0xa748,0xa748,0xa749,0xa748},{0xff49,0xff29,0xff49,0xff29},{0xa749,0xa748,0xa749,0xa748},{0x1f49,0x1f49,0x1f41,0x1f49},
+{0xff4a,0xff2a,0xff4a,0xff2a},{0x1f4a,0x1f4a,0x1f42,0x1f4a},{0xa74a,0xa74a,0xa74b,0xa74a},{0xa74b,0xa74a,0xa74b,0xa74a},
+{0x1f4b,0x1f4b,0x1f43,0x1f4b},{0xff4b,0xff2b,0xff4b,0xff2b},{0x1f4c,0x1f4c,0x1f44,0x1f4c},{0xff4c,0xff2c,0xff4c,0xff2c},
+{0xa74c,0xa74c,0xa74d,0xa74c},{0xff4d,0xff2d,0xff4d,0xff2d},{0x1f4d,0x1f4d,0x1f45,0x1f4d},{0xa74d,0xa74c,0xa74d,0xa74c},
+{0xff4e,0xff2e,0xff4e,0xff2e},{0xa74e,0xa74e,0xa74f,0xa74e},{0xff4f,0xff2f,0xff4f,0xff2f},{0xa74f,0xa74e,0xa74f,0xa74e},
+{0xa750,0xa750,0xa751,0xa750},{0xff50,0xff30,0xff50,0xff30},{0xff51,0xff31,0xff51,0xff31},{0xa751,0xa750,0xa751,0xa750},
{0x1f51,0x1f59,0x1f51,0x1f59},{0xa752,0xa752,0xa753,0xa752},{0xff52,0xff32,0xff52,0xff32},{0x1f53,0x1f5b,0x1f53,0x1f5b},
{0xff53,0xff33,0xff53,0xff33},{0xa753,0xa752,0xa753,0xa752},{0xff54,0xff34,0xff54,0xff34},{0xa754,0xa754,0xa755,0xa754},
-{0x1f55,0x1f5d,0x1f55,0x1f5d},{0xa755,0xa754,0xa755,0xa754},{0xff55,0xff35,0xff55,0xff35},{0xa756,0xa756,0xa757,0xa756},
-{0xff56,0xff36,0xff56,0xff36},{0xa757,0xa756,0xa757,0xa756},{0xff57,0xff37,0xff57,0xff37},{0x1f57,0x1f5f,0x1f57,0x1f5f},
-{0xff58,0xff38,0xff58,0xff38},{0xa758,0xa758,0xa759,0xa758},{0xa759,0xa758,0xa759,0xa758},{0xff59,0xff39,0xff59,0xff39},
+{0xff55,0xff35,0xff55,0xff35},{0x1f55,0x1f5d,0x1f55,0x1f5d},{0xa755,0xa754,0xa755,0xa754},{0xff56,0xff36,0xff56,0xff36},
+{0xa756,0xa756,0xa757,0xa756},{0x1f57,0x1f5f,0x1f57,0x1f5f},{0xff57,0xff37,0xff57,0xff37},{0xa757,0xa756,0xa757,0xa756},
+{0xa758,0xa758,0xa759,0xa758},{0xff58,0xff38,0xff58,0xff38},{0xff59,0xff39,0xff59,0xff39},{0xa759,0xa758,0xa759,0xa758},
{0x1f59,0x1f59,0x1f51,0x1f59},{0xff5a,0xff3a,0xff5a,0xff3a},{0xa75a,0xa75a,0xa75b,0xa75a},{0x1f5b,0x1f5b,0x1f53,0x1f5b},
{0xa75b,0xa75a,0xa75b,0xa75a},{0xa75c,0xa75c,0xa75d,0xa75c},{0xa75d,0xa75c,0xa75d,0xa75c},{0x1f5d,0x1f5d,0x1f55,0x1f5d},
-{0xa75e,0xa75e,0xa75f,0xa75e},{0x1f5f,0x1f5f,0x1f57,0x1f5f},{0xa75f,0xa75e,0xa75f,0xa75e},{0x1f60,0x1f68,0x1f60,0x1f68},
-{0xa760,0xa760,0xa761,0xa760},{0xa761,0xa760,0xa761,0xa760},{0x1f61,0x1f69,0x1f61,0x1f69},{0x1f62,0x1f6a,0x1f62,0x1f6a},
-{0xa762,0xa762,0xa763,0xa762},{0x1f63,0x1f6b,0x1f63,0x1f6b},{0xa763,0xa762,0xa763,0xa762},{0xa764,0xa764,0xa765,0xa764},
+{0xa75e,0xa75e,0xa75f,0xa75e},{0xa75f,0xa75e,0xa75f,0xa75e},{0x1f5f,0x1f5f,0x1f57,0x1f5f},{0x1f60,0x1f68,0x1f60,0x1f68},
+{0xa760,0xa760,0xa761,0xa760},{0x1f61,0x1f69,0x1f61,0x1f69},{0xa761,0xa760,0xa761,0xa760},{0xa762,0xa762,0xa763,0xa762},
+{0x1f62,0x1f6a,0x1f62,0x1f6a},{0x1f63,0x1f6b,0x1f63,0x1f6b},{0xa763,0xa762,0xa763,0xa762},{0xa764,0xa764,0xa765,0xa764},
{0x1f64,0x1f6c,0x1f64,0x1f6c},{0x1f65,0x1f6d,0x1f65,0x1f6d},{0xa765,0xa764,0xa765,0xa764},{0xa766,0xa766,0xa767,0xa766},
-{0x1f66,0x1f6e,0x1f66,0x1f6e},{0x1f67,0x1f6f,0x1f67,0x1f6f},{0xa767,0xa766,0xa767,0xa766},{0xa768,0xa768,0xa769,0xa768},
-{0x1f68,0x1f68,0x1f60,0x1f68},{0x1f69,0x1f69,0x1f61,0x1f69},{0xa769,0xa768,0xa769,0xa768},{0x1f6a,0x1f6a,0x1f62,0x1f6a},
-{0xa76a,0xa76a,0xa76b,0xa76a},{0xa76b,0xa76a,0xa76b,0xa76a},{0x1f6b,0x1f6b,0x1f63,0x1f6b},{0xa76c,0xa76c,0xa76d,0xa76c},
-{0x1f6c,0x1f6c,0x1f64,0x1f6c},{0x1f6d,0x1f6d,0x1f65,0x1f6d},{0xa76d,0xa76c,0xa76d,0xa76c},{0x1f6e,0x1f6e,0x1f66,0x1f6e},
-{0xa76e,0xa76e,0xa76f,0xa76e},{0xa76f,0xa76e,0xa76f,0xa76e},{0x1f6f,0x1f6f,0x1f67,0x1f6f},{0x1f70,0x1fba,0x1f70,0x1fba},
+{0x1f66,0x1f6e,0x1f66,0x1f6e},{0x1f67,0x1f6f,0x1f67,0x1f6f},{0xa767,0xa766,0xa767,0xa766},{0x1f68,0x1f68,0x1f60,0x1f68},
+{0xa768,0xa768,0xa769,0xa768},{0xa769,0xa768,0xa769,0xa768},{0x1f69,0x1f69,0x1f61,0x1f69},{0xa76a,0xa76a,0xa76b,0xa76a},
+{0x1f6a,0x1f6a,0x1f62,0x1f6a},{0x1f6b,0x1f6b,0x1f63,0x1f6b},{0xa76b,0xa76a,0xa76b,0xa76a},{0x1f6c,0x1f6c,0x1f64,0x1f6c},
+{0xa76c,0xa76c,0xa76d,0xa76c},{0xa76d,0xa76c,0xa76d,0xa76c},{0x1f6d,0x1f6d,0x1f65,0x1f6d},{0xa76e,0xa76e,0xa76f,0xa76e},
+{0x1f6e,0x1f6e,0x1f66,0x1f6e},{0x1f6f,0x1f6f,0x1f67,0x1f6f},{0xa76f,0xa76e,0xa76f,0xa76e},{0x1f70,0x1fba,0x1f70,0x1fba},
{0x1f71,0x1fbb,0x1f71,0x1fbb},{0x1f72,0x1fc8,0x1f72,0x1fc8},{0x1f73,0x1fc9,0x1f73,0x1fc9},{0x1f74,0x1fca,0x1f74,0x1fca},
{0x1f75,0x1fcb,0x1f75,0x1fcb},{0x1f76,0x1fda,0x1f76,0x1fda},{0x1f77,0x1fdb,0x1f77,0x1fdb},{0x1f78,0x1ff8,0x1f78,0x1ff8},
-{0x1f79,0x1ff9,0x1f79,0x1ff9},{0xa779,0xa779,0xa77a,0xa779},{0xa77a,0xa779,0xa77a,0xa779},{0x1f7a,0x1fea,0x1f7a,0x1fea},
-{0xa77b,0xa77b,0xa77c,0xa77b},{0x1f7b,0x1feb,0x1f7b,0x1feb},{0x1f7c,0x1ffa,0x1f7c,0x1ffa},{0xa77c,0xa77b,0xa77c,0xa77b},
-{0xa77d,0xa77d,0x1d79,0xa77d},{0x1f7d,0x1ffb,0x1f7d,0x1ffb},{0xa77e,0xa77e,0xa77f,0xa77e},{0xa77f,0xa77e,0xa77f,0xa77e},
+{0xa779,0xa779,0xa77a,0xa779},{0x1f79,0x1ff9,0x1f79,0x1ff9},{0x1f7a,0x1fea,0x1f7a,0x1fea},{0xa77a,0xa779,0xa77a,0xa779},
+{0xa77b,0xa77b,0xa77c,0xa77b},{0x1f7b,0x1feb,0x1f7b,0x1feb},{0xa77c,0xa77b,0xa77c,0xa77b},{0x1f7c,0x1ffa,0x1f7c,0x1ffa},
+{0x1f7d,0x1ffb,0x1f7d,0x1ffb},{0xa77d,0xa77d,0x1d79,0xa77d},{0xa77e,0xa77e,0xa77f,0xa77e},{0xa77f,0xa77e,0xa77f,0xa77e},
{0xa780,0xa780,0xa781,0xa780},{0x1f80,0x1f88,0x1f80,0x1f88},{0xa781,0xa780,0xa781,0xa780},{0x1f81,0x1f89,0x1f81,0x1f89},
-{0x1f82,0x1f8a,0x1f82,0x1f8a},{0xa782,0xa782,0xa783,0xa782},{0xa783,0xa782,0xa783,0xa782},{0x1f83,0x1f8b,0x1f83,0x1f8b},
-{0x1f84,0x1f8c,0x1f84,0x1f8c},{0xa784,0xa784,0xa785,0xa784},{0xa785,0xa784,0xa785,0xa784},{0x1f85,0x1f8d,0x1f85,0x1f8d},
-{0xa786,0xa786,0xa787,0xa786},{0x1f86,0x1f8e,0x1f86,0x1f8e},{0x1f87,0x1f8f,0x1f87,0x1f8f},{0xa787,0xa786,0xa787,0xa786},
-{0x1f88,0x1f88,0x1f80,0x1f88},{0x1f89,0x1f89,0x1f81,0x1f89},{0x1f8a,0x1f8a,0x1f82,0x1f8a},{0xa78b,0xa78b,0xa78c,0xa78b},
-{0x1f8b,0x1f8b,0x1f83,0x1f8b},{0x1f8c,0x1f8c,0x1f84,0x1f8c},{0xa78c,0xa78b,0xa78c,0xa78b},{0x1f8d,0x1f8d,0x1f85,0x1f8d},
-{0xa78d,0xa78d,0x0265,0xa78d},{0x1f8e,0x1f8e,0x1f86,0x1f8e},{0x1f8f,0x1f8f,0x1f87,0x1f8f},{0xa790,0xa790,0xa791,0xa790},
-{0x1f90,0x1f98,0x1f90,0x1f98},{0x1f91,0x1f99,0x1f91,0x1f99},{0xa791,0xa790,0xa791,0xa790},{0xa792,0xa792,0xa793,0xa792},
-{0x1f92,0x1f9a,0x1f92,0x1f9a},{0xa793,0xa792,0xa793,0xa792},{0x1f93,0x1f9b,0x1f93,0x1f9b},{0x1f94,0x1f9c,0x1f94,0x1f9c},
-{0x1f95,0x1f9d,0x1f95,0x1f9d},{0xa796,0xa796,0xa797,0xa796},{0x1f96,0x1f9e,0x1f96,0x1f9e},{0x1f97,0x1f9f,0x1f97,0x1f9f},
-{0xa797,0xa796,0xa797,0xa796},{0xa798,0xa798,0xa799,0xa798},{0x1f98,0x1f98,0x1f90,0x1f98},{0x1f99,0x1f99,0x1f91,0x1f99},
-{0xa799,0xa798,0xa799,0xa798},{0xa79a,0xa79a,0xa79b,0xa79a},{0x1f9a,0x1f9a,0x1f92,0x1f9a},{0x1f9b,0x1f9b,0x1f93,0x1f9b},
-{0xa79b,0xa79a,0xa79b,0xa79a},{0xa79c,0xa79c,0xa79d,0xa79c},{0x1f9c,0x1f9c,0x1f94,0x1f9c},{0xa79d,0xa79c,0xa79d,0xa79c},
-{0x1f9d,0x1f9d,0x1f95,0x1f9d},{0xa79e,0xa79e,0xa79f,0xa79e},{0x1f9e,0x1f9e,0x1f96,0x1f9e},{0x1f9f,0x1f9f,0x1f97,0x1f9f},
-{0xa79f,0xa79e,0xa79f,0xa79e},{0x1fa0,0x1fa8,0x1fa0,0x1fa8},{0xa7a0,0xa7a0,0xa7a1,0xa7a0},{0x1fa1,0x1fa9,0x1fa1,0x1fa9},
-{0xa7a1,0xa7a0,0xa7a1,0xa7a0},{0x1fa2,0x1faa,0x1fa2,0x1faa},{0xa7a2,0xa7a2,0xa7a3,0xa7a2},{0x1fa3,0x1fab,0x1fa3,0x1fab},
-{0xa7a3,0xa7a2,0xa7a3,0xa7a2},{0xa7a4,0xa7a4,0xa7a5,0xa7a4},{0x1fa4,0x1fac,0x1fa4,0x1fac},{0x1fa5,0x1fad,0x1fa5,0x1fad},
-{0xa7a5,0xa7a4,0xa7a5,0xa7a4},{0xa7a6,0xa7a6,0xa7a7,0xa7a6},{0x1fa6,0x1fae,0x1fa6,0x1fae},{0x1fa7,0x1faf,0x1fa7,0x1faf},
-{0xa7a7,0xa7a6,0xa7a7,0xa7a6},{0xa7a8,0xa7a8,0xa7a9,0xa7a8},{0x1fa8,0x1fa8,0x1fa0,0x1fa8},{0xa7a9,0xa7a8,0xa7a9,0xa7a8},
-{0x1fa9,0x1fa9,0x1fa1,0x1fa9},{0xa7aa,0xa7aa,0x0266,0xa7aa},{0x1faa,0x1faa,0x1fa2,0x1faa},{0xa7ab,0xa7ab,0x025c,0xa7ab},
-{0x1fab,0x1fab,0x1fa3,0x1fab},{0x1fac,0x1fac,0x1fa4,0x1fac},{0xa7ac,0xa7ac,0x0261,0xa7ac},{0xa7ad,0xa7ad,0x026c,0xa7ad},
-{0x1fad,0x1fad,0x1fa5,0x1fad},{0x1fae,0x1fae,0x1fa6,0x1fae},{0x1faf,0x1faf,0x1fa7,0x1faf},{0xa7b0,0xa7b0,0x029e,0xa7b0},
+{0x1f82,0x1f8a,0x1f82,0x1f8a},{0xa782,0xa782,0xa783,0xa782},{0x1f83,0x1f8b,0x1f83,0x1f8b},{0xa783,0xa782,0xa783,0xa782},
+{0xa784,0xa784,0xa785,0xa784},{0x1f84,0x1f8c,0x1f84,0x1f8c},{0xa785,0xa784,0xa785,0xa784},{0x1f85,0x1f8d,0x1f85,0x1f8d},
+{0x1f86,0x1f8e,0x1f86,0x1f8e},{0xa786,0xa786,0xa787,0xa786},{0x1f87,0x1f8f,0x1f87,0x1f8f},{0xa787,0xa786,0xa787,0xa786},
+{0x1f88,0x1f88,0x1f80,0x1f88},{0x1f89,0x1f89,0x1f81,0x1f89},{0x1f8a,0x1f8a,0x1f82,0x1f8a},{0x1f8b,0x1f8b,0x1f83,0x1f8b},
+{0xa78b,0xa78b,0xa78c,0xa78b},{0x1f8c,0x1f8c,0x1f84,0x1f8c},{0xa78c,0xa78b,0xa78c,0xa78b},{0xa78d,0xa78d,0x0265,0xa78d},
+{0x1f8d,0x1f8d,0x1f85,0x1f8d},{0x1f8e,0x1f8e,0x1f86,0x1f8e},{0x1f8f,0x1f8f,0x1f87,0x1f8f},{0x1f90,0x1f98,0x1f90,0x1f98},
+{0xa790,0xa790,0xa791,0xa790},{0x1f91,0x1f99,0x1f91,0x1f99},{0xa791,0xa790,0xa791,0xa790},{0x1f92,0x1f9a,0x1f92,0x1f9a},
+{0xa792,0xa792,0xa793,0xa792},{0xa793,0xa792,0xa793,0xa792},{0x1f93,0x1f9b,0x1f93,0x1f9b},{0x1f94,0x1f9c,0x1f94,0x1f9c},
+{0x1f95,0x1f9d,0x1f95,0x1f9d},{0x1f96,0x1f9e,0x1f96,0x1f9e},{0xa796,0xa796,0xa797,0xa796},{0x1f97,0x1f9f,0x1f97,0x1f9f},
+{0xa797,0xa796,0xa797,0xa796},{0x1f98,0x1f98,0x1f90,0x1f98},{0xa798,0xa798,0xa799,0xa798},{0xa799,0xa798,0xa799,0xa798},
+{0x1f99,0x1f99,0x1f91,0x1f99},{0xa79a,0xa79a,0xa79b,0xa79a},{0x1f9a,0x1f9a,0x1f92,0x1f9a},{0x1f9b,0x1f9b,0x1f93,0x1f9b},
+{0xa79b,0xa79a,0xa79b,0xa79a},{0x1f9c,0x1f9c,0x1f94,0x1f9c},{0xa79c,0xa79c,0xa79d,0xa79c},{0xa79d,0xa79c,0xa79d,0xa79c},
+{0x1f9d,0x1f9d,0x1f95,0x1f9d},{0xa79e,0xa79e,0xa79f,0xa79e},{0x1f9e,0x1f9e,0x1f96,0x1f9e},{0xa79f,0xa79e,0xa79f,0xa79e},
+{0x1f9f,0x1f9f,0x1f97,0x1f9f},{0x1fa0,0x1fa8,0x1fa0,0x1fa8},{0xa7a0,0xa7a0,0xa7a1,0xa7a0},{0xa7a1,0xa7a0,0xa7a1,0xa7a0},
+{0x1fa1,0x1fa9,0x1fa1,0x1fa9},{0x1fa2,0x1faa,0x1fa2,0x1faa},{0xa7a2,0xa7a2,0xa7a3,0xa7a2},{0x1fa3,0x1fab,0x1fa3,0x1fab},
+{0xa7a3,0xa7a2,0xa7a3,0xa7a2},{0x1fa4,0x1fac,0x1fa4,0x1fac},{0xa7a4,0xa7a4,0xa7a5,0xa7a4},{0x1fa5,0x1fad,0x1fa5,0x1fad},
+{0xa7a5,0xa7a4,0xa7a5,0xa7a4},{0xa7a6,0xa7a6,0xa7a7,0xa7a6},{0x1fa6,0x1fae,0x1fa6,0x1fae},{0xa7a7,0xa7a6,0xa7a7,0xa7a6},
+{0x1fa7,0x1faf,0x1fa7,0x1faf},{0x1fa8,0x1fa8,0x1fa0,0x1fa8},{0xa7a8,0xa7a8,0xa7a9,0xa7a8},{0x1fa9,0x1fa9,0x1fa1,0x1fa9},
+{0xa7a9,0xa7a8,0xa7a9,0xa7a8},{0x1faa,0x1faa,0x1fa2,0x1faa},{0xa7aa,0xa7aa,0x0266,0xa7aa},{0xa7ab,0xa7ab,0x025c,0xa7ab},
+{0x1fab,0x1fab,0x1fa3,0x1fab},{0xa7ac,0xa7ac,0x0261,0xa7ac},{0x1fac,0x1fac,0x1fa4,0x1fac},{0x1fad,0x1fad,0x1fa5,0x1fad},
+{0xa7ad,0xa7ad,0x026c,0xa7ad},{0x1fae,0x1fae,0x1fa6,0x1fae},{0x1faf,0x1faf,0x1fa7,0x1faf},{0xa7b0,0xa7b0,0x029e,0xa7b0},
{0x1fb0,0x1fb8,0x1fb0,0x1fb8},{0x1fb1,0x1fb9,0x1fb1,0x1fb9},{0xa7b1,0xa7b1,0x0287,0xa7b1},{0xa7b2,0xa7b2,0x029d,0xa7b2},
{0x1fb3,0x1fbc,0x1fb3,0x1fbc},{0xa7b3,0xa7b3,0xab53,0xa7b3},{0xa7b4,0xa7b4,0xa7b5,0xa7b4},{0xa7b5,0xa7b4,0xa7b5,0xa7b4},
{0xa7b6,0xa7b6,0xa7b7,0xa7b6},{0xa7b7,0xa7b6,0xa7b7,0xa7b6},{0x1fb8,0x1fb8,0x1fb0,0x1fb8},{0x1fb9,0x1fb9,0x1fb1,0x1fb9},
diff --git a/unicode/unicode_wcwidth.c b/unicode/unicode_wcwidth.c
index bea01f5..5266552 100644
--- a/unicode/unicode_wcwidth.c
+++ b/unicode/unicode_wcwidth.c
@@ -6,7 +6,7 @@
#include <stdlib.h>
-int unicode_wcwidth(unicode_char c)
+int unicode_wcwidth(char32_t c)
{
size_t b=0;
size_t e=sizeof(unicode_wcwidth_tab)/sizeof(unicode_wcwidth_tab[0]);
@@ -42,7 +42,7 @@ int unicode_wcwidth(unicode_char c)
return 1;
}
-size_t unicode_wcwidth_str(const unicode_char *c)
+size_t unicode_wcwidth_str(const char32_t *c)
{
size_t w=0;
diff --git a/unicode/unicode_wordbreak.c b/unicode/unicode_wordbreak.c
index b4c4f89..991f0ba 100644
--- a/unicode/unicode_wordbreak.c
+++ b/unicode/unicode_wordbreak.c
@@ -74,7 +74,7 @@ int unicode_wb_end(unicode_wb_info_t i)
}
int unicode_wb_next_cnt(unicode_wb_info_t i,
- const unicode_char *chars,
+ const char32_t *chars,
size_t cnt)
{
int rc;
@@ -89,7 +89,7 @@ int unicode_wb_next_cnt(unicode_wb_info_t i,
return 0;
}
-int unicode_wb_next(unicode_wb_info_t i, unicode_char ch)
+int unicode_wb_next(unicode_wb_info_t i, char32_t ch)
{
return (*i->next_handler)
(i, unicode_tab_lookup(ch,
@@ -529,7 +529,7 @@ unicode_wbscan_info_t unicode_wbscan_init()
return i;
}
-int unicode_wbscan_next(unicode_wbscan_info_t i, unicode_char ch)
+int unicode_wbscan_next(unicode_wbscan_info_t i, char32_t ch)
{
if (!i->found)
unicode_wb_next(i->wb_handle, ch);
diff --git a/unicode/unicodebuf.c b/unicode/unicodebuf.c
index a221e3b..eb64543 100644
--- a/unicode/unicodebuf.c
+++ b/unicode/unicodebuf.c
@@ -24,7 +24,7 @@ void unicode_buf_deinit(struct unicode_buf *p)
}
int unicode_buf_append(struct unicode_buf *p,
- const unicode_char *uc, size_t l)
+ const char32_t *uc, size_t l)
{
if (l > p->max-p->len)
l=p->max-p->len;
@@ -32,7 +32,7 @@ int unicode_buf_append(struct unicode_buf *p,
if (p->len + l > p->size)
{
size_t n=(p->len + l) * 2;
- unicode_char *newp;
+ char32_t *newp;
if (n < 256)
n=256;
@@ -40,8 +40,8 @@ int unicode_buf_append(struct unicode_buf *p,
if (n > p->max)
n=p->max;
- newp=p->ptr ? realloc(p->ptr, n * sizeof(unicode_char))
- : malloc(n * sizeof(unicode_char));
+ newp=p->ptr ? realloc(p->ptr, n * sizeof(char32_t))
+ : malloc(n * sizeof(char32_t));
if (!newp)
return -1;
@@ -50,7 +50,7 @@ int unicode_buf_append(struct unicode_buf *p,
p->size=n;
}
- memcpy(p->ptr + p->len, uc, l * sizeof(unicode_char));
+ memcpy(p->ptr + p->len, uc, l * sizeof(char32_t));
p->len += l;
return 0;
@@ -60,7 +60,7 @@ void unicode_buf_append_char(struct unicode_buf *dst,
const char *str,
size_t cnt)
{
- unicode_char unicode_buf[256];
+ char32_t unicode_buf[256];
while (cnt)
{
diff --git a/unicode/unicodecpp.C b/unicode/unicodecpp.C
index ac08285..1cec379 100644
--- a/unicode/unicodecpp.C
+++ b/unicode/unicodecpp.C
@@ -23,7 +23,7 @@ extern "C" {
(ptr)).callback(value);
}
- int unicode::linebreakc_trampoline(int value, unicode_char ch, void *ptr)
+ int unicode::linebreakc_trampoline(int value, char32_t ch, void *ptr)
{
return (*reinterpret_cast<unicode::linebreakc_callback_base *>
(ptr)).callback(value, ch);
@@ -72,11 +72,11 @@ unicode::init_chset::init_chset()
unicode_default_chset();
}
-size_t unicode_wcwidth(const std::vector<unicode_char> &uc)
+size_t unicode_wcwidth(const std::u32string &uc)
{
size_t w=0;
- for (std::vector<unicode_char>::const_iterator
+ for (std::u32string::const_iterator
b(uc.begin()), e(uc.end()); b != e; ++b)
w += unicode_wcwidth(*b);
return w;
@@ -134,7 +134,7 @@ bool unicode::iconvert::operator()(const char *str, size_t cnt)
return (unicode_convert(handle, str, cnt) == 0);
}
-bool unicode::iconvert::operator()(const unicode_char *str, size_t cnt)
+bool unicode::iconvert::operator()(const char32_t *str, size_t cnt)
{
if (!handle)
return false;
@@ -169,7 +169,7 @@ std::string unicode::iconvert::convert(const std::string &text,
}
-std::string unicode::iconvert::convert(const std::vector<unicode_char> &uc,
+std::string unicode::iconvert::convert(const std::u32string &uc,
const std::string &dstcharset,
bool &errflag)
{
@@ -206,11 +206,11 @@ std::string unicode::iconvert::convert(const std::vector<unicode_char> &uc,
bool unicode::iconvert::convert(const std::string &text,
const std::string &charset,
- std::vector<unicode_char> &uc)
+ std::u32string &uc)
{
int err;
- unicode_char *ucbuf;
+ char32_t *ucbuf;
size_t ucsize;
if (unicode_convert_tou_tobuf(text.c_str(),
@@ -235,7 +235,7 @@ bool unicode::iconvert::convert(const std::string &text,
return err == 0;
}
-int unicode::iconvert::tou::converted(const unicode_char *, size_t)
+int unicode::iconvert::tou::converted(const char32_t *, size_t)
{
return 0;
}
@@ -247,15 +247,15 @@ bool unicode::iconvert::tou::begin(const std::string &chset)
int unicode::iconvert::tou::converted(const char *ptr, size_t cnt)
{
- return converted(reinterpret_cast<const unicode_char *>(ptr),
- cnt/sizeof(unicode_char));
+ return converted(reinterpret_cast<const char32_t *>(ptr),
+ cnt/sizeof(char32_t));
}
-std::pair<std::vector<unicode_char>, bool>
+std::pair<std::u32string, bool>
unicode::iconvert::tou::convert(const std::string &str,
const std::string &chset)
{
- std::pair<std::vector<unicode_char>, bool> ret;
+ std::pair<std::u32string, bool> ret;
ret.second=convert(str.begin(), str.end(), chset, ret.first);
return ret;
@@ -267,7 +267,7 @@ bool unicode::iconvert::fromu::begin(const std::string &chset)
}
std::pair<std::string, bool>
-unicode::iconvert::fromu::convert(const std::vector<unicode_char> &ubuf,
+unicode::iconvert::fromu::convert(const std::u32string &ubuf,
const std::string &chset)
{
std::pair<std::string, bool> ret;
@@ -281,8 +281,8 @@ unicode::iconvert::fromu::convert(const std::vector<unicode_char> &ubuf,
std::string unicode::iconvert::convert_tocase(const std::string &text,
const std::string &charset,
bool &err,
- unicode_char (*first_char_func)(unicode_char),
- unicode_char (*char_func)(unicode_char))
+ char32_t (*first_char_func)(char32_t),
+ char32_t (*char_func)(char32_t))
{
err=false;
std::string s;
@@ -333,7 +333,7 @@ int unicode::linebreak_callback_base::callback(int ignore)
}
unicode::linebreak_callback_base
-&unicode::linebreak_callback_base::operator<<(unicode_char uc)
+&unicode::linebreak_callback_base::operator<<(char32_t uc)
{
if (!handle)
{
@@ -382,7 +382,7 @@ unicode::linebreakc_callback_base::~linebreakc_callback_base()
finish();
}
-int unicode::linebreakc_callback_base::callback(int dummy1, unicode_char dummy2)
+int unicode::linebreakc_callback_base::callback(int dummy1, char32_t dummy2)
{
return 0;
}
@@ -396,7 +396,7 @@ void unicode::linebreakc_callback_base::set_opts(int optsArg)
}
unicode::linebreakc_callback_base
-&unicode::linebreakc_callback_base::operator<<(unicode_char uc)
+&unicode::linebreakc_callback_base::operator<<(char32_t uc)
{
if (handle == NULL)
{
@@ -429,7 +429,7 @@ unicode::linebreakc_callback_save_buf::~linebreakc_callback_save_buf()
{
}
-int unicode::linebreakc_callback_save_buf::callback(int c, unicode_char ch)
+int unicode::linebreakc_callback_save_buf::callback(int c, char32_t ch)
{
lb_buf.push_back(std::make_pair(c, ch));
return 0;
@@ -451,7 +451,7 @@ int unicode::wordbreak_callback_base::callback(bool ignore)
}
unicode::wordbreak_callback_base
-&unicode::wordbreak_callback_base::operator<<(unicode_char uc)
+&unicode::wordbreak_callback_base::operator<<(char32_t uc)
{
if (!handle)
{
@@ -485,7 +485,7 @@ unicode::wordbreakscan::~wordbreakscan()
finish();
}
-bool unicode::wordbreakscan::operator<<(unicode_char uc)
+bool unicode::wordbreakscan::operator<<(char32_t uc)
{
if (!handle)
handle=unicode_wbscan_init();
@@ -516,16 +516,16 @@ std::string unicode::tolower(const std::string &string)
std::string unicode::tolower(const std::string &string,
const std::string &charset)
{
- std::vector<unicode_char> uc;
+ std::u32string uc;
unicode::iconvert::convert(string, charset, uc);
return unicode::iconvert::convert(tolower(uc), charset);
}
-std::vector<unicode_char> unicode::tolower(const std::vector<unicode_char> &u)
+std::u32string unicode::tolower(const std::u32string &u)
{
- std::vector<unicode_char> copy=u;
+ std::u32string copy=u;
std::transform(copy.begin(), copy.end(), copy.begin(), unicode_lc);
return copy;
@@ -539,16 +539,16 @@ std::string unicode::toupper(const std::string &string)
std::string unicode::toupper(const std::string &string,
const std::string &charset)
{
- std::vector<unicode_char> uc;
+ std::u32string uc;
unicode::iconvert::convert(string, charset, uc);
return unicode::iconvert::convert(toupper(uc), charset);
}
-std::vector<unicode_char> unicode::toupper(const std::vector<unicode_char> &u)
+std::u32string unicode::toupper(const std::u32string &u)
{
- std::vector<unicode_char> copy=u;
+ std::u32string copy=u;
std::transform(copy.begin(), copy.end(), copy.begin(), unicode_uc);
diff --git a/unicode/unicodetest.c b/unicode/unicodetest.c
index 7048f51..b59fab3 100644
--- a/unicode/unicodetest.c
+++ b/unicode/unicodetest.c
@@ -70,7 +70,7 @@ static void test1()
static void test2()
{
- unicode_char *ucptr;
+ char32_t *ucptr;
size_t ucsize;
unicode_convert_handle_t h=
unicode_convert_tou_init("utf-8", &ucptr, &ucsize, 1);
diff --git a/unicode/wordbreaktest.C b/unicode/wordbreaktest.C
index 72d2b14..91e3c31 100644
--- a/unicode/wordbreaktest.C
+++ b/unicode/wordbreaktest.C
@@ -78,7 +78,7 @@ static void testsuite()
words.push_back(std::string(p, b));
}
- std::vector<unicode_char> ubuf;
+ std::u32string ubuf;
std::vector<bool> status;
while (1)
@@ -102,7 +102,7 @@ static void testsuite()
std::istringstream i(words.front());
- unicode_char uc;
+ uint32_t uc;
i >> std::hex >> uc;