]> granicus.if.org Git - php/commitdiff
Upgrade oniguruma lib to 6.9.3
authorStanislav Malyshev <stas@php.net>
Wed, 28 Aug 2019 06:28:33 +0000 (23:28 -0700)
committerStanislav Malyshev <stas@php.net>
Wed, 28 Aug 2019 06:40:46 +0000 (23:40 -0700)
64 files changed:
ext/mbstring/oniguruma/COPYING
ext/mbstring/oniguruma/HISTORY
ext/mbstring/oniguruma/README.md
ext/mbstring/oniguruma/doc/API
ext/mbstring/oniguruma/doc/API.ja
ext/mbstring/oniguruma/doc/RE
ext/mbstring/oniguruma/doc/RE.ja
ext/mbstring/oniguruma/doc/SYNTAX.md [new file with mode: 0644]
ext/mbstring/oniguruma/doc/UNICODE_PROPERTIES
ext/mbstring/oniguruma/index.html
ext/mbstring/oniguruma/index_ja.html
ext/mbstring/oniguruma/src/big5.c
ext/mbstring/oniguruma/src/cp1251.c
ext/mbstring/oniguruma/src/euc_jp.c
ext/mbstring/oniguruma/src/euc_jp_prop.c
ext/mbstring/oniguruma/src/euc_kr.c
ext/mbstring/oniguruma/src/euc_tw.c
ext/mbstring/oniguruma/src/gb18030.c
ext/mbstring/oniguruma/src/iso8859_1.c
ext/mbstring/oniguruma/src/iso8859_10.c
ext/mbstring/oniguruma/src/iso8859_13.c
ext/mbstring/oniguruma/src/iso8859_14.c
ext/mbstring/oniguruma/src/iso8859_15.c
ext/mbstring/oniguruma/src/iso8859_16.c
ext/mbstring/oniguruma/src/iso8859_2.c
ext/mbstring/oniguruma/src/iso8859_3.c
ext/mbstring/oniguruma/src/iso8859_4.c
ext/mbstring/oniguruma/src/iso8859_5.c
ext/mbstring/oniguruma/src/iso8859_7.c
ext/mbstring/oniguruma/src/iso8859_9.c
ext/mbstring/oniguruma/src/koi8.c
ext/mbstring/oniguruma/src/koi8_r.c
ext/mbstring/oniguruma/src/mktable.c
ext/mbstring/oniguruma/src/oniguruma.h
ext/mbstring/oniguruma/src/regcomp.c
ext/mbstring/oniguruma/src/regenc.c
ext/mbstring/oniguruma/src/regenc.h
ext/mbstring/oniguruma/src/regerror.c
ext/mbstring/oniguruma/src/regexec.c
ext/mbstring/oniguruma/src/regext.c
ext/mbstring/oniguruma/src/reggnu.c
ext/mbstring/oniguruma/src/regint.h
ext/mbstring/oniguruma/src/regparse.c
ext/mbstring/oniguruma/src/regparse.h
ext/mbstring/oniguruma/src/regposerr.c
ext/mbstring/oniguruma/src/regposix.c
ext/mbstring/oniguruma/src/regsyntax.c
ext/mbstring/oniguruma/src/sjis.c
ext/mbstring/oniguruma/src/sjis_prop.c
ext/mbstring/oniguruma/src/unicode.c
ext/mbstring/oniguruma/src/unicode_egcb_data.c
ext/mbstring/oniguruma/src/unicode_fold1_key.c
ext/mbstring/oniguruma/src/unicode_fold2_key.c
ext/mbstring/oniguruma/src/unicode_fold3_key.c
ext/mbstring/oniguruma/src/unicode_fold_data.c
ext/mbstring/oniguruma/src/unicode_property_data.c
ext/mbstring/oniguruma/src/unicode_property_data_posix.c
ext/mbstring/oniguruma/src/unicode_unfold_key.c
ext/mbstring/oniguruma/src/unicode_wb_data.c [new file with mode: 0644]
ext/mbstring/oniguruma/src/utf16_be.c
ext/mbstring/oniguruma/src/utf16_le.c
ext/mbstring/oniguruma/src/utf32_be.c
ext/mbstring/oniguruma/src/utf32_le.c
ext/mbstring/oniguruma/src/utf8.c

index e999ab5bd7e093eab5bf0b159ac9868ab3fcec5d..bb695925007a2894c9c903369e6b173356a78699 100644 (file)
@@ -1,7 +1,7 @@
 Oniguruma LICENSE
 -----------------
 
-Copyright (c) 2002-2018  K.Kosako  <kkosako0@gmail.com>
+Copyright (c) 2002-2019  K.Kosako  <kkosako0@gmail.com>
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
index 8395746ab25ff53ed325ce7e0e6881955274b145..0380cb4f9d2206fae4affb798a3162c77f08367c 100644 (file)
@@ -1,5 +1,42 @@
 History
 
+2019/08/06: Version 6.9.3 (secirity fix release)
+
+2019/07/30: add ONIG_SYN_ALLOW_INVALID_CODE_END_OF_RANGE
+2019/07/29: add STK_PREC_READ_START/END stack type
+2019/07/29: Fix #147: Stack Exhaustion Problem caused by some parsing functions
+2019/07/11: add a dictionary file for libfuzzer
+2019/07/07: add harnesses directory
+2019/07/05-2019/07/29: fix many problems found by libfuzzer programs
+2019/06/27: deprecate onig_new_deluxe()
+2019/06/27: Fix CVE-2019-13224: don't allow different encodings for onig_new_deluxe()
+2019/06/27: Fix CVE-2019-13225: problem in converting if-then-else pattern
+
+2019/05/07: Version 6.9.2 (same as Release Candidate 3)
+
+2019/04/23: Release Candidate 3 for 6.9.2
+2019/04/23: add doc/SYNTAX.md into distribution file
+2019/04/09: Release Candidate 2 for 6.9.2
+2019/04/09: fix #139: UAF in match_at()
+2019/04/01: Release Candidate 1 for 6.9.2
+2019/04/01: update Unicode version to 12.1.0 (draft)
+2019/03/29: allow {n,m} (n>m) as possessive interval
+2019/03/25: add ONIG_SYN_OP2_OPTION_ONIGURUMA
+2019/03/22: add new options ONIG_OPTION_TEXT_SEGMENT_EXTENDED_GRAPHEME_CLUSTER and
+            ONIG_OPTION_TEXT_SEGMENT_WORD
+2019/03/21: PR #137: fix cross-compilation
+2019/03/20: update Unicode version to 12.0.0
+2019/03/17: add doc/SYNTAX.md
+2019/03/13: {n,m}+ and {n,m}? are possessive and reluctant range operator
+            in Perl syntax
+2019/03/04: fix #132: don't execute testp if ENABLE_POSIX_API == no
+2019/02/28: re-implement bytecode by using Operation struct
+2019/02/26: fix #130: Build error on UWP with VS2017
+2019/02/03: PR #128: regerror/toascii: do not attempt to serialize NULL pointer
+2019/01/30: Build breaks without autoreconf #73
+2019/01/02: fix #127: Windows VS 2008 build errors
+2018/12/19: fix #126: Unable to compile when USE_CALLOUT is not defined
+
 2018/12/11: Version 6.9.1
 
 2018/10/08: use ENC_FLAG_SKIP_OFFSET_XXX values
index 5c576cba0c67cf4cebd8aedfc3f9cd64571e4ad2..6a4783b8e9496f9bbefb9b6af8b7cfcebb3b3437 100644 (file)
@@ -24,37 +24,58 @@ Supported character encodings:
 
 * GB18030: contributed by KUBO Takehiro
 * CP1251:  contributed by Byte
+* doc/SYNTAX.md: contributed by seanofw
 
 
-New feature of version 6.9.1
---------------------------
+Version 6.9.3 (security fix release)
+------------------------------------
+
+* Fixed CVE-2019-13224
+* Fixed CVE-2019-13225
+* Fixed many problems (found by libfuzzer programs)
+
+
+Version 6.9.2 (Reiwa)
+---------------------
+
+* add doc/SYNTAX.md
+* Update Unicode version 12.1.0
+* NEW: Unicode Text Segment mode option (?y{g}) (?y{w})  (*original)
+
+  g: Extended Grapheme Cluster mode / w: Word mode
+
+  (Unicode Standard Annex #29 [http://unicode.org/reports/tr29/])
+
+
+Version 6.9.1
+-------------
 
 * Speed improvement (* especially UTF-8)
 
 
-New feature of version 6.9.0
---------------------------
+Version 6.9.0
+-------------
 
 * Update Unicode version 11.0.0
 * NEW: add Emoji properties
 
 
-New feature of version 6.8.2
---------------------------
+Version 6.8.2
+-------------
 
 * Fix: #80 UChar in header causes issue
 * NEW API: onig_set_callout_user_data_of_match_param()  (* omission in 6.8.0)
 * add doc/CALLOUTS.API and doc/CALLOUTS.API.ja
 
 
-New feature of version 6.8.1
---------------------------
+Version 6.8.1
+-------------
 
 * Update shared library version to 5.0.0 for API incompatible changes from 6.7.1
 
 
-New feature of version 6.8.0
---------------------------
+Version 6.8.0
+-------------
 
 * Retry-limit-in-match function enabled by default
 * NEW: configure option --enable-posix-api=no  (* enabled by default)
@@ -65,14 +86,14 @@ New feature of version 6.8.0
 * Examples of Callouts program: [callout.c](sample/callout.c), [count.c](sample/count.c), [echo.c](sample/echo.c)
 
 
-New feature of version 6.7.1
---------------------------
+Version 6.7.1
+-------------
 
 * NEW: Mechanism of retry-limit-in-match (* disabled by default)
 
 
-New feature of version 6.7.0
---------------------------
+Version 6.7.0
+-------------
 
 * NEW: hexadecimal codepoint \uHHHH
 * NEW: add ONIG_SYNTAX_ONIGURUMA (== ONIG_SYNTAX_DEFAULT)
@@ -80,17 +101,17 @@ New feature of version 6.7.0
 * Reduced size of object file
 
 
-New feature of version 6.6.0
---------------------------
+Version 6.6.0
+-------------
 
 * NEW: ASCII only mode options for character type/property (?WDSP)
-* NEW: Extended Grapheme Cluster boundary \y, \Y (*original)
+* NEW: Extended Grapheme Cluster boundary \y, \Y
 * NEW: Extended Grapheme Cluster \X
 * Range-clear (Absent-clear) operator restores previous range in retractions.
 
 
-New feature of version 6.5.0
---------------------------
+Version 6.5.0
+-------------
 
 * NEW: \K (keep)
 * NEW: \R (general newline) \N (no newline)
@@ -102,16 +123,16 @@ New feature of version 6.5.0
 * NEW: Absent stopper (?~|absent)     (*original)
 
 
-New feature of version 6.4.0
---------------------------
+Version 6.4.0
+-------------
 
 * Fix fatal problem of endless repeat on Windows
 * NEW: call zero (call the total regexp) \g<0>
 * NEW: relative backref/call by positive number \k<+n>, \g<+n>
 
 
-New feature of version 6.3.0
---------------------------
+Version 6.3.0
+-------------
 
 * NEW: octal codepoint \o{.....}
 * Fixed CVE-2017-9224
@@ -122,20 +143,20 @@ New feature of version 6.3.0
 * Fixed CVE-2017-9229
 
 
-New feature of version 6.1.2
---------------------------
+Version 6.1.2
+-------------
 
 * allow word bound, word begin and word end in look-behind.
 * NEW option: ONIG_OPTION_CHECK_VALIDITY_OF_STRING
 
-New feature of version 6.1
---------------------------
+Version 6.1
+-----------
 
 * improved doc/RE
 * NEW API: onig_scan()
 
-New feature of version 6.0
---------------------------
+Version 6.0
+-----------
 
 * Update Unicode 8.0 Property/Case-folding
 * NEW API: onig_unicode_define_user_property()
index 24b531a98a94a39bfa6c399a5c4c27fc1abdf8f7..049db02b0c0cecdb4fbf6ac66646f270d9c68c7b 100644 (file)
@@ -1,4 +1,4 @@
-Oniguruma API  Version 6.8.0  2018/03/13
+Oniguruma API  Version 6.9.3  2019/07/06
 
 #include <oniguruma.h>
 
@@ -92,6 +92,8 @@ Oniguruma API  Version 6.8.0  2018/03/13
                                      (alnum, alpha, blank, cntrl, digit, graph,
                                       lower, print, punct, space, upper, xdigit,
                                       word)
+      ONIG_OPTION_TEXT_SEGMENT_EXTENDED_GRAPHEME_CLUSTER  Extended Grapheme Cluster mode
+      ONIG_OPTION_TEXT_SEGMENT_WORD                       Word mode
 
   5 enc:        character encoding.
 
@@ -166,6 +168,9 @@ Oniguruma API  Version 6.8.0  2018/03/13
 # int onig_new_deluxe(regex_t** reg, const UChar* pattern, const UChar* pattern_end,
                       OnigCompileInfo* ci, OnigErrorInfo* einfo)
 
+  This function is deprecate, and it does not allow the case where
+  the encoding of pattern and target is different.
+
   Create a regex object.
   This function is deluxe version of onig_new().
 
@@ -297,6 +302,7 @@ Oniguruma API  Version 6.8.0  2018/03/13
                    const UChar* range, OnigRegion* region, OnigOptionType option)
 
   Search string and return search result and matching region.
+  Do not pass invalid byte string in the regex character encoding.
 
   normal return: match position offset (i.e.  p - str >= 0)
   not found:     ONIG_MISMATCH (< 0)
@@ -321,15 +327,19 @@ Oniguruma API  Version 6.8.0  2018/03/13
                    const UChar* start, const UChar* range, OnigRegion* region,
                    OnigOptionType option, OnigMatchParam* mp)
 
-   arguments
-   1-7:  same as onig_search()
-   8 mp: match parameter values (match_stack_limit, retry_limit_in_match)
+  Search string and return search result and matching region.
+  Do not pass invalid byte string in the regex character encoding.
+
+  arguments
+  1-7:  same as onig_search()
+  8 mp: match parameter values (match_stack_limit, retry_limit_in_match)
 
 
 # int onig_match(regex_t* reg, const UChar* str, const UChar* end, const UChar* at,
                  OnigRegion* region, OnigOptionType option)
 
   Match string and return result and matching region.
+  Do not pass invalid byte string in the regex character encoding.
 
   normal return: match length  (>= 0)
   not match:     ONIG_MISMATCH ( < 0)
@@ -351,6 +361,9 @@ Oniguruma API  Version 6.8.0  2018/03/13
                             const UChar* at, OnigRegion* region,
                             OnigOptionType option, OnigMatchParam* mp)
 
+  Match string and return result and matching region.
+  Do not pass invalid byte string in the regex character encoding.
+
    arguments
    1-6:  same as onig_match()
    7 mp: match parameter values (match_stack_limit, retry_limit_in_match)
@@ -362,6 +375,7 @@ Oniguruma API  Version 6.8.0  2018/03/13
                 void* callback_arg)
 
   Scan string and callback with matching region.
+  Do not pass invalid byte string in the regex character encoding.
 
   normal return: number of matching times
   error:         error code
@@ -609,14 +623,20 @@ Oniguruma API  Version 6.8.0  2018/03/13
 
 
 # int onigenc_strlen(OnigEncoding enc, const UChar* s, const UChar* end)
+
+  Return number of characters in the string.
+
+
 # int onigenc_strlen_null(OnigEncoding enc, const UChar* s)
 
   Return number of characters in the string.
+  Do not pass invalid byte string in the character encoding.
 
 
 # int onigenc_str_bytelen_null(OnigEncoding enc, const UChar* s)
 
   Return number of bytes in the string.
+  Do not pass invalid byte string in the character encoding.
 
 
 # int onig_set_default_syntax(OnigSyntaxType* syntax)
index 522628810f6ab46d03c2953f80f4783d1d7e5ecb..5871558e9c9de9d8ac04a43c8d76aa2a3cd293f9 100644 (file)
@@ -1,4 +1,4 @@
-鬼車インターフェース Version 6.8.0   2018/03/13
+鬼車インターフェース Version 6.9.3   2019/07/06
 
 #include <oniguruma.h>
 
@@ -91,6 +91,8 @@
                                      (alnum, alpha, blank, cntrl, digit, graph,
                                       lower, print, punct, space, upper, xdigit,
                                       word)
+      ONIG_OPTION_TEXT_SEGMENT_EXTENDED_GRAPHEME_CLUSTER  拡張書記素房モード
+      ONIG_OPTION_TEXT_SEGMENT_WORD                       単語モード
 
   5 enc:        文字エンコーディング
 
 # int onig_new_deluxe(regex_t** reg, const UChar* pattern, const UChar* pattern_end,
                       OnigCompileInfo* ci, OnigErrorInfo* einfo)
 
+  この関数は廃止予定。
+  パターンと対象文字列の文字エンコーディングが異なる場合を許さなくなった。
+
   正規表現オブジェクト(regex)を作成する。
   この関数は、onig_new()のデラックス版。
 
                    const UChar* range, OnigRegion* region, OnigOptionType option)
 
   正規表現で文字列を検索し、検索結果とマッチ領域を返す。
+  正規表現オブジェクトの文字エンコーディングで、検索文字列として不正な文字列を渡してはいけない。
 
   正常終了戻り値: マッチ位置 (p - str >= 0)
   検索失敗:       ONIG_MISMATCH (< 0)
                    const UChar* start, const UChar* range, OnigRegion* region,
                    OnigOptionType option, OnigMatchParam* mp)
 
+  正規表現で文字列を検索し、検索結果とマッチ領域を返す。
+  正規表現オブジェクトの文字エンコーディングで、検索文字列として不正な文字列を渡してはいけない。
+
   引数
   1-7:  onig_search()と同じ
   8 mp: マッチパラメタ値 (match_stack_limit, retry_limit_in_match)
 
 
-# int onig_match(regex_t* reg, const UChar* str, const UChar* end, const UChar* at,
-                OnigRegion* region, OnigOptionType option)
+# int onig_match(regex_t* reg, const UChar* str, const UChar* end,
+                 const UChar* at, OnigRegion* region, OnigOptionType option)
 
   文字列の指定位置でマッチングを行い、結果とマッチ領域を返す。
+  正規表現オブジェクトの文字エンコーディングで、検索文字列として不正な文字列を渡してはいけない。
 
   正常終了戻り値: マッチしたバイト長 (>= 0)
   not match:      ONIG_MISMATCH      ( < 0)
                             const UChar* at, OnigRegion* region,
                             OnigOptionType option, OnigMatchParam* mp)
 
+  文字列の指定位置でマッチングを行い、結果とマッチ領域を返す。
+  正規表現オブジェクトの文字エンコーディングで、検索文字列として不正な文字列を渡してはいけない。
+
   引数
   1-6:  onig_match()と同じ
   7 mp: マッチパラメタ値 (match_stack_limit, retry_limit_in_match)
                 void* callback_arg)
 
   正規表現で文字列をスキャンして、マッチングする毎にコールバック関数を呼び出す。
+  正規表現オブジェクトの文字エンコーディングで、検索文字列として不正な文字列を渡してはいけない。
 
   正常終了: マッチ回数 (0回も含める)
   エラー:   エラーコード (< 0)
 
 
 # int onigenc_strlen(OnigEncoding enc, const UChar* s, const UChar* end)
+
+  文字列の文字数を返す。
+
+
 # int onigenc_strlen_null(OnigEncoding enc, const UChar* s)
 
   文字列の文字数を返す。
+  文字エンコーディングに対して、不正な文字列を渡してはいけない。
 
 
 # int onigenc_str_bytelen_null(OnigEncoding enc, const UChar* s)
 
   文字列のバイト数を返す。
+  文字エンコーディングに対して、不正な文字列を渡してはいけない。
 
 
 # int onig_set_default_syntax(OnigSyntaxType* syntax)
index 963d0092f4bb1c99035be4d5a9b02712c09309fc..72957dd2fed4d3e70c4974807483b4aa8bc33b30 100644 (file)
@@ -1,4 +1,4 @@
-Oniguruma Regular Expressions Version 6.8.0    2018/07/26
+Oniguruma Regular Expressions Version 6.9.2    2019/03/29
 
 syntax: ONIG_SYNTAX_ONIGURUMA (default)
 
@@ -81,15 +81,23 @@ syntax: ONIG_SYNTAX_ONIGURUMA (default)
 
   \O       true anychar      (?m:.)    (* original function)
 
-  \X       Extended Grapheme Cluster    (?>\O(?:\Y\O)*)
+  \X       Text Segment    \X === (?>\O(?:\Y\O)*)
 
-           \X doesn't check whether matching start position is boundary.
-           Write as \y\X if you want to ensure it.
+           The meaning of this operator changes depending on the setting of
+           the option (?y{..}).
 
-           Unicode case:
-             See [Unicode Standard Annex #29: http://unicode.org/reports/tr29/]
+           \X doesn't check whether matching start position is boundary or not.
+           Please write as \y\X if you want to ensure it.
 
-           Not Unicode:   (?>\r\n|\O)
+           [Extended Grapheme Cluster mode] (default)
+             Unicode case:
+               See [Unicode Standard Annex #29: http://unicode.org/reports/tr29/]
+
+             Not Unicode case:  \X === (?>\r\n|\O)
+
+           [Word mode]
+             Currently, this mode is supported in Unicode only.
+             See [Unicode Standard Annex #29: http://unicode.org/reports/tr29/]
 
 
   Character Property
@@ -119,17 +127,17 @@ syntax: ONIG_SYNTAX_ONIGURUMA (default)
     ?       1 or 0 times
     *       0 or more times
     +       1 or more times
-    {n,m}   at least n but no more than m times
+    {n,m}   (n <= m)  at least n but no more than m times
     {n,}    at least n times
     {,n}    at least 0 but no more than n times ({0,n})
     {n}     n times
 
   reluctant
 
-    ??      1 or 0 times
+    ??      0 or 1 times
     *?      0 or more times
     +?      1 or more times
-    {n,m}?  at least n but not more than m times
+    {n,m}?  (n <= m)  at least n but not more than m times
     {n,}?   at least n times
     {,n}?   at least 0 but not more than n times (== {0,n}?)
 
@@ -138,8 +146,10 @@ syntax: ONIG_SYNTAX_ONIGURUMA (default)
     ?+      1 or 0 times
     *+      0 or more times
     ++      1 or more times
+    {n,m}   (n > m)  at least m but not more than n times
 
-    ({n,m}+, {n,}+, {n}+ are possessive op. in ONIG_SYNTAX_JAVA only)
+    {n,m}+, {n,}+, {n}+ are possessive operators in ONIG_SYNTAX_JAVA and
+    ONIG_SYNTAX_PERL only.
 
     ex. /a*+/ === /(?>a*)/
 
@@ -150,8 +160,6 @@ syntax: ONIG_SYNTAX_ONIGURUMA (default)
   $       end of the line
   \b      word boundary
   \B      non-word boundary
-  \y      Extended Grapheme Cluster boundary
-  \Y      Extended Grapheme Cluster non-boundary
 
   \A      beginning of string
   \Z      end of string, or before newline at the end
@@ -160,6 +168,24 @@ syntax: ONIG_SYNTAX_ONIGURUMA (default)
   \K      keep (keep start position of the result string)
 
 
+  \y      Text Segment boundary
+  \Y      Text Segment non-boundary
+
+          The meaning of these operators(\y, \Y) changes depending on the setting
+          of the option (?y{..}).
+
+          [Extended Grapheme Cluster mode] (default)
+            Unicode case:
+              See [Unicode Standard Annex #29: http://unicode.org/reports/tr29/]
+
+            Not Unicode:
+              All positions except between \r and \n.
+
+          [Word mode]
+            Currently, this mode is supported in Unicode only.
+            See [Unicode Standard Annex #29: http://unicode.org/reports/tr29/]
+
+
 
 6. Character class
 
@@ -221,20 +247,28 @@ syntax: ONIG_SYNTAX_ONIGURUMA (default)
 
   (?#...)            comment
 
-  (?imxWDSP-imxWDSP:subexp)  option on/off for subexp
+  (?imxWDSPy-imxWDSP:subexp)  option on/off for subexp
+
+                           i: ignore case
+                           m: multi-line (dot (.) also matches newline)
+                           x: extended form
+                           W: ASCII only word (\w, \p{Word}, [[:word:]])
+                              ASCII only word bound (\b)
+                           D: ASCII only digit (\d, \p{Digit}, [[:digit:]])
+                           S: ASCII only space (\s, \p{Space}, [[:space:]])
+                           P: ASCII only POSIX properties (includes W,D,S)
+                              (alnum, alpha, blank, cntrl, digit, graph,
+                               lower, print, punct, space, upper, xdigit, word)
+
+                           y{?}: Text Segment mode
+                              This option changes the meaning of \X, \y, \Y.
+                              Currently, this option is supported in Unicode only.
 
-                               i: ignore case
-                               m: multi-line (dot (.) also matches newline)
-                               x: extended form
-                               W: ASCII only word (\w, \p{Word}, [[:word:]])
-                                  ASCII only word bound (\b)
-                               D: ASCII only digit (\d, \p{Digit}, [[:digit:]])
-                               S: ASCII only space (\s, \p{Space}, [[:space:]])
-                               P: ASCII only POSIX properties (includes W,D,S)
-                                  (alnum, alpha, blank, cntrl, digit, graph,
-                                   lower, print, punct, space, upper, xdigit, word)
+                              y{g}: Extended Grapheme Cluster mode (default)
+                              y{w}: Word mode
+                              See [Unicode Standard Annex #29]
 
-  (?imxWDSP-imxWDSP)  isolated option
+  (?imxWDSPy-imxWDSP)  isolated option
 
                       * It makes a group to the next ')' or end of the pattern.
                         /ab(?i)c|def|gh/ == /ab(?i:c|def|gh)/
@@ -336,7 +370,7 @@ syntax: ONIG_SYNTAX_ONIGURUMA (default)
                else_exp can be omitted.
                Then it works as a backreference validity checker.
 
-  [ backreference validity checker ]   (* original)
+  [ Backreference validity checker ]   (* original)
 
     (?(n)), (?(-n)), (?(+n)), (?(n+level)) ...
     (?(<n>)), (?('-n')), (?(<+n>)) ...
@@ -470,10 +504,15 @@ A-1. Syntax-dependent options
 
 A-2. Original extensions
 
-   + hexadecimal digit char type  \h, \H
-   + named group                  (?<name>...), (?'name'...)
-   + named backref                \k<name>
-   + subexp call                  \g<name>, \g<group-num>
+   + hexadecimal digit char type     \h, \H
+   + true anychar                    \O
+   + text segment boundary           \y, \Y
+   + backreference validity checker  (?(...))
+   + named group                     (?<name>...), (?'name'...)
+   + named backref                   \k<name>
+   + subexp call                     \g<name>, \g<group-num>
+   + absent expression               (?~|...|...)
+   + absent stopper                  (?|...)
 
 
 A-3. Missing features compared with perl 5.8.0
@@ -528,28 +567,4 @@ A-4. Differences with Japanized GNU regex(version 0.12) of Ruby 1.8
      /(?:()|())*\1\2/ =~ ""
      /(?:\1a|())*/ =~ "a"
 
-
-A-5. Features disabled in default syntax
-
-   + capture history
-
-     (?@...) and (?@<name>...)
-
-     ex. /(?@a)*/.match("aaa") ==> [<0-1>, <1-2>, <2-3>]
-
-     see sample/listcap.c file.
-
-
-A-6. Problems
-
-   + Invalid encoding byte sequence is not checked.
-
-     ex. UTF-8
-
-     * Invalid first byte is treated as a character.
-       /./u =~ "\xa3"
-
-     * Incomplete byte sequence is not checked.
-       /\w+/ =~ "a\xf3\x8ec"
-
 // END
index b35a51e3f000db702dc0fa1cf6d35542890747b5..c09e23786e6db6afd612399834da9f1c2f91f07e 100644 (file)
@@ -1,4 +1,4 @@
-鬼車 正規表現 Version 6.8.0    2018/07/26
+鬼車 正規表現 Version 6.9.2    2019/03/29
 
 使用文法: ONIG_SYNTAX_ONIGURUMA (既定値)
 
 
   \O       真任意文字  (?m:.)      (* 原作)
 
-  \X       æ\8b¡å¼µæ\9b¸è¨\98ç´ æ\88¿     (?>\O(?:\Y\O)*)
+  \X       æ\96\87ç« å\8cºå\88\86    \X === (?>\O(?:\Y\O)*)
 
-           \Xは照合の開始位置が拡張書記素房の境界かどうかを確認しない。
+           この演算子の意味は、オプション (?y{..})の設定によって変化する。
+
+           \Xは照合の開始位置が区分の境界かどうかを確認しない。
            それを確実にしたければ、\y\Xと書けば良い。
 
-           Unicodeの場合:
-             参照 [Unicode Standard Annex #29: http://unicode.org/reports/tr29/]
+           [拡張書記素房-状態のとき] (デフォルト)
+             Unicodeの場合:
+               参照 [Unicode Standard Annex #29: http://unicode.org/reports/tr29/]
+
+             Unicode以外の場合:  \X === (?>\r\n|\O)
 
-           Unicode以外の場合:   (?>\r\n|\O)
+           [単語-状態のとき]
+             現在、Unicodeしかサポートしていない。
+             参照 [Unicode Standard Annex #29: http://unicode.org/reports/tr29/]
 
 
   Character Property
     ?       一回または零回
     *       零回以上
     +       一回以上
-    {n,m}   n回以上m回以下
+    {n,m}   (n <= m)  n回以上 かつ m回以下
     {n,}    n回以上
     {,n}    零回以上n回以下 ({0,n})
     {n}     n回
 
   無欲
 
-    ??      一回または零
+    ??      零回または一
     *?      零回以上
     +?      一回以上
-    {n,m}?  n回以上m回以下
+    {n,m}?  (n <= m)  n回以上 かつ m回以下
     {n,}?   n回以上
     {,n}?   零回以上n回以下 (== {0,n}?)
 
     ?+      一回または零回
     *+      零回以上
     ++      一回以上
+    {n,m}   (n > m)  m回以上 かつ n回以下
 
-    ({n,m}+, {n,}+, {n}+ は、ONIG_SYNTAX_JAVAでのみ強欲な指定子)
+    {n,m}+, {n,}+, {n}+ は、ONIG_SYNTAX_JAVAとONIG_SYNTAX_PERLでのみ強欲な指定子
 
     例. /a*+/ === /(?>a*)/
 
   $       行末
   \b      単語境界
   \B      非単語境界
-  \y      拡張書記素房 境界
-  \Y      拡張書記素房 非境界
 
   \A      文字列先頭
   \Z      文字列末尾、または文字列末尾の改行の直前
   \K      保持 (結果の開始位置をこの位置に保つ)
 
 
+  \y      文章区分 境界
+  \Y      文章区分 非境界
+
+          この演算子の意味は、オプション (?y{..})の設定によって変化する。
+
+           [拡張書記素房-状態のとき] (デフォルト)
+             Unicodeの場合:
+               参照 [Unicode Standard Annex #29: http://unicode.org/reports/tr29/]
+
+             Unicode以外の場合:
+               \rと\nの間を除く全ての位置
+
+           [単語-状態のとき]
+             現在、Unicodeしかサポートしていない。
+             参照 [Unicode Standard Annex #29: http://unicode.org/reports/tr29/]
+
+
 
 6. 文字集合
 
 
   (?#...)           注釈
 
-  (?imxWDSP-imxWDSP:式)   式オプション
+  (?imxWDSPy-imxWDSP:式)   式オプション
 
                             i: 大文字小文字照合
                             m: 複数行
                                (alnum, alpha, blank, cntrl, digit, graph,
                                 lower, print, punct, space, upper, xdigit, word)
 
-  (?imxWDSP-imxWDSP)  孤立オプション
+                            y{?}: 文章区分状態
+                               このオプションは\X, \y, \Yの意味を変更する。
+                               現在このオプションはUnicodeでしかサポートしていない
+                               y{g}: 拡張書記素房-状態 (デフォルト)
+                               y{w}: 単語-状態
+                                     参照 [Unicode Standard Annex #29]
+
+  (?imxWDSPy-imxWDSP)  孤立オプション
 
                       * これは次の')'またはパターンの終わりまでのグループを形成する
                         /ab(?i)c|def|gh/ == /ab(?i:c|def|gh)/
 補記 2. 独自拡張機能
 
    + 16進数数字、非16進数字  \h, \H
+   + 真任意文字              \O
+   + 文章区分境界            \y, \Y
+   + 後方参照値有効性確認器  (?(...))
    + 名前付き捕獲式集合      (?<name>...), (?'name'...)
    + 名前指定後方参照        \k<name>
    + 部分式呼出し            \g<name>, \g<group-num>
+   + 不在式                 (?~|...|...)
+   + 不在停止               (?|...)
 
 
 補記 3. Perl 5.8.0と比較して存在しない機能
      /(?:()|())*\1\2/ =~ ""
      /(?:\1a|())*/ =~ "a"
 
-
-
-補記 5. 実装されているが、既定値では有効にしていない機能
-
-   + 捕獲履歴参照
-
-     (?@...) と (?@<name>...)
-
-     例. /(?@a)*/.match("aaa") ==> [<0-1>, <1-2>, <2-3>]
-
-     使用方法は、sample/listcap.cを参照
-
-     有効にしていない理由は、どの程度役に立つかはっきりしないため。
-
-
-補記 6. 問題点
-
-   + エンコーディングバイト値が適正な価かどうかのチェックは行なっていない。
-
-     例: UTF-8
-
-     * 先頭バイトとして不正なバイトを一文字とみなす
-       /./u =~ "\xa3"
-
-     * 不完全なバイトシーケンスのチェックをしない
-      /\w+/u =~ "a\xf3\x8ec"
-
-     これを調べることは可能ではあるが、遅くなるので行なわない。
-
-     文字列として、そのようなバイト列を指定した場合の動作は保証しない。
-
 終り
diff --git a/ext/mbstring/oniguruma/doc/SYNTAX.md b/ext/mbstring/oniguruma/doc/SYNTAX.md
new file mode 100644 (file)
index 0000000..449f262
--- /dev/null
@@ -0,0 +1,1069 @@
+
+# Oniguruma syntax (operator) configuration
+
+_Documented for Oniguruma 6.9.2 (2019/03/28)_
+
+
+----------
+
+
+## Overview
+
+This document details how to configure Oniguruma's syntax, by describing the desired
+syntax operators and behaviors in an instance of the OnigSyntaxType struct, just like
+the built-in Oniguruma syntaxes do.
+
+Configuration operators are bit flags, and are broken into multiple groups, somewhat arbitrarily,
+because Oniguruma takes its configuration as a trio of 32-bit `unsigned int` values, assigned as
+the first three fields in an `OnigSyntaxType` struct:
+
+```C
+typedef struct {
+  unsigned int   op;
+  unsigned int   op2;
+  unsigned int   behavior;
+  OnigOptionType options;   /* default option */
+  OnigMetaCharTableType meta_char_table;
+} OnigSyntaxType;
+```
+
+The first group of configuration flags (`op`) roughly corresponds to the
+configuration for "basic regex."  The second group (`op2`) roughly corresponds
+to the configuration for "advanced regex."  And the third group (`behavior`)
+describes more-or-less what to do for broken input, bad input, or other corner-case
+regular expressions whose meaning is not well-defined.  These three groups of
+flags are described in full below, and tables of their usages for various syntaxes
+follow.
+
+The `options` field describes the default compile options to use if the caller does
+not specify any options when invoking `onig_new()`.
+
+The `meta_char_table` field is used exclusively by the ONIG_SYN_OP_VARIABLE_META_CHARACTERS
+option, which allows the various regex metacharacters, like `*` and `?`, to be replaced
+with alternates (for example, SQL typically uses `%` instead of `.*` and `_` instead of `?`).
+
+
+----------
+
+
+## Group One Flags (op)
+
+
+This group contains "basic regex" constructs, features common to most regex systems.
+
+
+### 0. ONIG_SYN_OP_VARIABLE_META_CHARACTERS
+
+_Set in: none_
+
+Enables support for `onig_set_meta_char()`, which allows you to provide alternate
+characters that will be used instead of the six special characters that are normally
+these characters below:
+
+   - `ONIG_META_CHAR_ESCAPE`: `\`
+   - `ONIG_META_CHAR_ANYCHAR`: `.`
+   - `ONIG_META_CHAR_ANYTIME`: `*`
+   - `ONIG_META_CHAR_ZERO_OR_ONE_TIME`: `?`
+   - `ONIG_META_CHAR_ONE_OR_MORE_TIME`: `+`
+   - `ONIG_META_CHAR_ANYCHAR_ANYTIME`: Equivalent in normal regex to `.*`, but supported
+      explicitly so that Oniguruma can support matching SQL `%` wildcards or shell `*` wildcards.
+
+If this flag is set, then the values defined using `onig_set_meta_char()` will be used;
+if this flag is clear, then the default regex characters will be used instead, and
+data set by `onig_set_meta_char()` will be ignored.
+
+
+### 1. ONIG_SYN_OP_DOT_ANYCHAR (enable `.`)
+
+_Set in: PosixBasic, PosixExtended, Emacs, Grep, GnuRegex, Java, Perl, Perl_NG, Ruby, Oniguruma_
+
+Enables support for the standard `.` metacharacter, meaning "any one character."  You
+usually want this flag on unless you have turned on `ONIG_SYN_OP_VARIABLE_META_CHARACTERS`
+so that you can use a metacharacter other than `.` instead.
+
+
+### 2. ONIG_SYN_OP_ASTERISK_ZERO_INF (enable `r*`)
+
+_Set in: PosixBasic, PosixExtended, Emacs, Grep, GnuRegex, Perl, Java, Perl_NG, Ruby, Oniguruma_
+
+Enables support for the standard `r*` metacharacter, meaning "zero or more r's."
+You usually want this flag set unless you have turned on `ONIG_SYN_OP_VARIABLE_META_CHARACTERS`
+so that you can use a metacharacter other than `*` instead.
+
+
+### 3. ONIG_SYN_OP_ESC_ASTERISK_ZERO_INF (enable `r\*`)
+
+_Set in: none_
+
+Enables support for an escaped `r\*` metacharacter, meaning "zero or more r's."  This is
+useful if you have disabled support for the normal `r*` metacharacter because you want `*`
+to simply match a literal `*` character, but you still want some way of activating "zero or more"
+behavior.
+
+
+### 4. ONIG_SYN_OP_PLUS_ONE_INF (enable `r+`)
+
+_Set in: PosixExtended, Emacs, GnuRegex, Perl, Java, Perl_NG, Ruby, Oniguruma_
+
+Enables support for the standard `r+` metacharacter, meaning "one or more r's."
+You usually want this flag set unless you have turned on `ONIG_SYN_OP_VARIABLE_META_CHARACTERS`
+so that you can use a metacharacter other than `+` instead.
+
+
+### 5. ONIG_SYN_OP_ESC_PLUS_ONE_INF (enable `r\+`)
+
+_Set in: Grep_
+
+Enables support for an escaped `r\+` metacharacter, meaning "one or more r's."  This is
+useful if you have disabled support for the normal `r+` metacharacter because you want `+`
+to simply match a literal `+` character, but you still want some way of activating "one or more"
+behavior.
+
+
+### 6. ONIG_SYN_OP_QMARK_ZERO_ONE (enable `r?`)
+
+_Set in: PosixExtended, Emacs, GnuRegex, Perl, Java, Perl_NG, Ruby, Oniguruma_
+
+Enables support for the standard `r?` metacharacter, meaning "zero or one r" or "an optional r."
+You usually want this flag set unless you have turned on `ONIG_SYN_OP_VARIABLE_META_CHARACTERS`
+so that you can use a metacharacter other than `?` instead.
+
+
+### 7. ONIG_SYN_OP_ESC_QMARK_ZERO_ONE (enable `r\?`)
+
+_Set in: Grep_
+
+Enables support for an escaped `r\?` metacharacter, meaning "zero or one r" or "an optional
+r."  This is useful if you have disabled support for the normal `r?` metacharacter because
+you want `?` to simply match a literal `?` character, but you still want some way of activating
+"optional" behavior.
+
+
+### 8. ONIG_SYN_OP_BRACE_INTERVAL (enable `r{l,u}`)
+
+_Set in: PosixExtended, GnuRegex, Perl, Java, Perl_NG, Ruby, Oniguruma_
+
+Enables support for the `r{lower,upper}` range form, common to more advanced
+regex engines, which lets you specify precisely a minimum and maximum range on how many r's
+must match (and not simply "zero or more").
+
+This form also allows `r{count}` to specify a precise count of r's that must match.
+
+This form also allows `r{lower,}` to be equivalent to `r{lower,infinity}`.
+
+If and only if the `ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV` behavior flag is set,
+this form also allows `r{,upper}` to be equivalent to `r{0,upper}`; otherwise,
+`r{,upper}` will be treated as an error.
+
+
+### 9. ONIG_SYN_OP_ESC_BRACE_INTERVAL (enable `\{` and `\}`)
+
+_Set in: PosixBasic, Emacs, Grep_
+
+Enables support for an escaped `r\{lower,upper\}` range form.  This is useful if you
+have disabled support for the normal `r{...}` range form and want curly braces to simply
+match literal curly brace characters, but you still want some way of activating
+"range" behavior.
+
+
+### 10. ONIG_SYN_OP_VBAR_ALT (enable `r|s`)
+
+_Set in: PosixExtended, GnuRegex, Perl, Java, Perl_NG, Ruby, Oniguruma_
+
+Enables support for the common `r|s` alternation operator.  You usually want this
+flag set.
+
+
+### 11. ONIG_SYN_OP_ESC_VBAR_ALT (enable `\|`)
+
+_Set in: Emacs, Grep_
+
+Enables support for an escaped `r\|s` alternation form.  This is useful if you
+have disabled support for the normal `r|s` alternation form and want `|` to simply
+match a literal `|` character, but you still want some way of activating "alternate" behavior.
+
+
+### 12. ONIG_SYN_OP_LPAREN_SUBEXP (enable `(r)`)
+
+_Set in: PosixExtended, GnuRegex, Perl, Java, Perl_NG, Ruby, Oniguruma_
+
+Enables support for the common `(...)` grouping-and-capturing operators.  You usually
+want this flag set.
+
+
+### 13. ONIG_SYN_OP_ESC_LPAREN_SUBEXP (enable `\(` and `\)`)
+
+_Set in: PosixBasic, Emacs, Grep_
+
+Enables support for escaped `\(...\)` grouping-and-capturing operators.  This is useful if you
+have disabled support for the normal `(...)` grouping-and-capturing operators and want
+parentheses to simply match literal parenthesis characters, but you still want some way of
+activating "grouping" or "capturing" behavior.
+
+
+### 14. ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR (enable `\A` and `\Z` and `\z`)
+
+_Set in: GnuRegex, Perl, Java, Perl_NG, Ruby, Oniguruma_
+
+Enables support for the anchors `\A` (start-of-string), `\Z` (end-of-string or
+newline-at-end-of-string), and `\z` (end-of-string) escapes.
+
+(If the escape metacharacter has been changed from the default of `\`, this
+option will recognize that metacharacter instead.)
+
+
+### 15. ONIG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR (enable `\G`)
+
+_Set in: GnuRegex, Perl, Java, Perl_NG, Ruby, Oniguruma_
+
+Enables support for the special anchor `\G` (start-of-previous-match).
+
+(If the escape metacharacter has been changed from the default of `\`, this
+option will recognize that metacharacter instead.)
+
+Note that `OnigRegex`/`regex_t` are not stateful objects, and do _not_ record
+the location of the previous match.  The `\G` flag uses the `start` parameter
+explicitly passed to `onig_search()` (or `onig_search_with_param()` to determine
+the "start of the previous match," so if the caller always passes the start of
+the entire buffer as the function's `start` parameter, then `\G` will behave
+exactly the same as `\A`.
+
+
+### 16. ONIG_SYN_OP_DECIMAL_BACKREF (enable `\num`)
+
+_Set in: PosixBasic, PosixExtended, Emacs, Grep, GnuRegex, Perl, Java, Perl_NG, Ruby, Oniguruma_
+
+Enables support for subsequent matches to back references to prior capture groups `(...)` using
+the common `\num` syntax (like `\3`).
+
+If this flag is clear, then a numeric escape like `\3` will either be treated as a literal `3`,
+or, if `ONIG_SYN_OP_ESC_OCTAL3` is set, will be treated as an octal character code `\3`.
+
+You usually want this enabled, and it is enabled by default in every built-in syntax.
+
+
+### 17. ONIG_SYN_OP_BRACKET_CC (enable `[...]`)
+
+_Set in: PosixBasic, PosixExtended, Emacs, Grep, GnuRegex, Perl, Java, Perl_NG, Ruby, Oniguruma_
+
+Enables support for recognizing character classes, like `[a-z]`.  If this flag is not set, `[`
+and `]` will be treated as ordinary literal characters instead of as metacharacters.
+
+You usually want this enabled, and it is enabled by default in every built-in syntax.
+
+
+### 18. ONIG_SYN_OP_ESC_W_WORD (enable `\w` and `\W`)
+
+_Set in: Grep, GnuRegex, Perl, Java, Perl_NG, Ruby, Oniguruma_
+
+Enables support for the common `\w` and `\W` shorthand forms.  These match "word characters,"
+whose meaning varies depending on the encoding being used.
+
+In ASCII encoding, `\w` is equivalent to `[A-Za-z0-9_]`.
+
+In most other encodings, `\w` matches many more characters, including accented letters, Greek letters,
+Cyrillic letters, Braille letters and numbers, Runic letters, Hebrew letters, Arabic letters and numerals,
+Chinese Han ideographs, Japanese Katakana and Hiragana, Korean Hangul, and generally any symbol that
+could qualify as a phonetic "letter" or counting "number" in any language.  (Note that emoji are _not_
+considered "word characters.")
+
+`\W` always matches the opposite of whatever `\w` matches.
+
+
+### 19. ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END (enable `\<` and `\>`)
+
+_Set in: Grep, GnuRegex_
+
+Enables support for the GNU-specific `\<` and `\>` word-boundary metacharacters.  These work like
+the `\b` word-boundary metacharacter, but only match at one end of the word or the other:  `\<`
+only matches at a transition from a non-word character to a word character (i.e., at the start
+of a word), and `\>` only matches at a transition from a word character to a non-word character
+(i.e., at the end of a word).
+
+Most regex syntaxes do _not_ support these metacharacters.
+
+
+### 20. ONIG_SYN_OP_ESC_B_WORD_BOUND (enable `\b` and `\B`)
+
+_Set in: Grep, GnuRegex, Perl, Java, Perl_NG, Ruby, Oniguruma_
+
+Enables support for the common `\b` and `\B` word-boundary metacharacters.  The `\b` metacharacter
+matches a zero-width position at a transition from word-characters to non-word-characters, or vice
+versa.  The `\B` metacharacter matches at all positions _not_ matched by `\b`.
+
+See details in `ONIG_SYN_OP_ESC_W_WORD` above for an explanation as to which characters
+are considered "word characters."
+
+
+### 21. ONIG_SYN_OP_ESC_S_WHITE_SPACE (enable `\s` and `\S`)
+
+_Set in: GnuRegex, Perl, Java, Perl_NG, Ruby, Oniguruma_
+
+Enables support for the common `\s` and `\S` whitespace-matching metacharacters.
+
+The `\s` metacharacter in ASCII encoding is exactly equivalent to the character class
+`[\t\n\v\f\r ]`, or characters codes 9 through 13 (inclusive), and 32.
+
+The `\s` metacharacter in Unicode is exactly equivalent to the character class
+`[\t\n\v\f\r \x85\xA0\x1680\x2000-\x200A\x2028-\x2029\x202F\x205F\x3000]` — that is, it matches
+the same as ASCII, plus U+0085 (next line), U+00A0 (nonbreaking space), U+1680 (Ogham space mark),
+U+2000 (en quad) through U+200A (hair space) (this range includes several widths of Unicode spaces),
+U+2028 (line separator) through U+2029 (paragraph separator),
+U+202F (narrow no-break space), U+205F (medium mathematical space), and U+3000 (CJK ideographic space).
+
+All non-Unicode encodings are handled by converting their code points to the appropriate
+Unicode-equivalent code points, and then matching according to Unicode rules.
+
+`\S` always matches any one character that is _not_ in the set matched by `\s`.
+
+
+### 22. ONIG_SYN_OP_ESC_D_DIGIT (enable `\d` and `\D`)
+
+_Set in: GnuRegex, Perl, Java, Perl_NG, Ruby, Oniguruma_
+
+Enables support for the common `\d` and `\D` digit-matching metacharacters.
+
+The `\d` metacharacter in ASCII encoding is exactly equivalent to the character class
+`[0-9]`, or characters codes 48 through 57 (inclusive).
+
+The `\d` metacharacter in Unicode matches `[0-9]`, as well as digits in Arabic, Devanagari,
+Bengali, Laotian, Mongolian, CJK fullwidth numerals, and many more.
+
+All non-Unicode encodings are handled by converting their code points to the appropriate
+Unicode-equivalent code points, and then matching according to Unicode rules.
+
+`\D` always matches any one character that is _not_ in the set matched by `\d`.
+
+
+### 23. ONIG_SYN_OP_LINE_ANCHOR (enable `^r` and `r$`)
+
+_Set in: Emacs, Grep, GnuRegex, Perl, Java, Perl_NG, Ruby, Oniguruma_
+
+Enables support for the common `^` and `$` line-anchor metacharacters.
+
+In single-line mode, `^` matches the start of the input buffer, and `$` matches
+the end of the input buffer.  In multi-line mode, `^` matches if the preceding
+character is `\n`; and `$` matches if the following character is `\n`.
+
+(Note that Oniguruma does not recognize other newline types:  It only matches
+`^` and `$` against `\n`:  not `\r`, not `\r\n`, not the U+2028 line separator,
+and not any other form.)
+
+
+### 24. ONIG_SYN_OP_POSIX_BRACKET (enable POSIX `[:xxxx:]`)
+
+_Set in: PosixBasic, PosixExtended, Grep, GnuRegex, Perl, Java, Perl_NG, Ruby, Oniguruma_
+
+Enables support for the POSIX `[:xxxx:]` character classes, like `[:alpha:]` and `[:digit:]`.
+The supported POSIX character classes are `alnum`, `alpha`, `blank`, `cntrl`, `digit`,
+`graph`, `lower`, `print`, `punct`, `space`, `upper`, `xdigit`, `ascii`, `word`.
+
+
+### 25. ONIG_SYN_OP_QMARK_NON_GREEDY (enable `r??`, `r*?`, `r+?`, and `r{n,m}?`)
+
+_Set in: Perl, Java, Perl_NG, Ruby, Oniguruma_
+
+Enables support for lazy (non-greedy) quantifiers: That is, if you append a `?` after
+another quantifier such as `?`, `*`, `+`, or `{n,m}`, Oniguruma will try to match
+as _little_ as possible instead of as _much_ as possible.
+
+
+### 26. ONIG_SYN_OP_ESC_CONTROL_CHARS (enable `\n`, `\r`, `\t`, etc.)
+
+_Set in: PosixBasic, PosixExtended, Java, Perl, Perl_NG, Ruby, Oniguruma_
+
+Enables support for C-style control-code escapes, like `\n` and `\r`.  Specifically,
+this recognizes `\a` (7), `\b` (8), `\t` (9), `\n` (10), `\f` (12), `\r` (13), and
+`\e` (27).  If ONIG_SYN_OP2_ESC_V_VTAB is enabled (see below), this also enables
+support for recognizing `\v` as code point 11.
+
+
+### 27. ONIG_SYN_OP_ESC_C_CONTROL (enable `\cx` control codes)
+
+_Set in: Java, Perl, Perl_NG, Ruby, Oniguruma_
+
+Enables support for named control-code escapes, like `\cm` or `\cM` for code-point
+13.  In this shorthand form, control codes may be specified by `\c` (for "Control")
+followed by an alphabetic letter, a-z or A-Z, indicating which code point to represent
+(1 through 26).  So `\cA` is code point 1, and `\cZ` is code point 26.
+
+
+### 28. ONIG_SYN_OP_ESC_OCTAL3 (enable `\OOO` octal codes)
+
+_Set in: Java, Perl, Perl_NG, Ruby, Oniguruma_
+
+Enables support for octal-style escapes of up to three digits, like `\1` for code
+point 1, and `\177` for code point 127.  Octal values greater than 255 will result
+in an error message.
+
+
+### 29. ONIG_SYN_OP_ESC_X_HEX2 (enable `\xHH` hex codes)
+
+_Set in: Java, Perl, Perl_NG, Ruby, Oniguruma_
+
+Enables support for hexadecimal-style escapes of up to two digits, like `\x1` for code
+point 1, and `\x7F` for code point 127.
+
+
+### 30. ONIG_SYN_OP_ESC_X_BRACE_HEX8 (enable `\x{7HHHHHHH}` hex codes)
+
+_Set in: Perl, Perl_NG, Ruby, Oniguruma_
+
+Enables support for brace-wrapped hexadecimal-style escapes of up to eight digits,
+like `\x{1}` for code point 1, and `\x{FFFE}` for code point 65534.
+
+
+### 31. ONIG_SYN_OP_ESC_O_BRACE_OCTAL (enable `\o{1OOOOOOOOOO}` octal codes)
+
+_Set in: Perl, Perl_NG, Ruby, Oniguruma_
+
+Enables support for brace-wrapped octal-style escapes of up to eleven digits,
+like `\o{1}` for code point 1, and `\o{177776}` for code point 65534.
+
+(New feature as of Oniguruma 6.3.)
+
+
+----------
+
+
+## Group Two Flags (op2)
+
+
+This group contains support for lesser-known regex syntax constructs.
+
+
+### 0. ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE (enable `\Q...\E`)
+
+_Set in: Java, Perl, Perl_NG_
+
+Enables support for "quoted" parts of a pattern:  Between `\Q` and `\E`, all
+syntax parsing is turned off, so that metacharacters like `*` and `+` will no
+longer be treated as metacharacters, and instead will be matched as literal
+`*` and `+`, as if they had been escaped with `\*` and `\+`.
+
+
+### 1. ONIG_SYN_OP2_QMARK_GROUP_EFFECT (enable `(?...)`)
+
+_Set in: Java, Perl, Perl_NG, Ruby, Oniguruma_
+
+Enables support for the fairly-common `(?...)` grouping operator, which
+controls precedence but which does _not_ capture its contents.
+
+
+### 2. ONIG_SYN_OP2_OPTION_PERL (enable options `(?imsx)` and `(?-imsx)`)
+
+_Set in: Java, Perl, Perl_NG_
+
+Enables support of regex options. (i,m,s,x)
+The supported toggle-able options for this flag are:
+
+  - `i` - Case-insensitivity
+  - `m` - Multi-line mode (`^` and `$` match at `\n` as well as start/end of buffer)
+  - `s` - Single-line mode (`.` can match `\n`)
+  - `x` - Extended pattern (free-formatting: whitespace will ignored)
+
+
+### 3. ONIG_SYN_OP2_OPTION_RUBY (enable options `(?imx)` and `(?-imx)`)
+
+_Set in: Ruby, Oniguruma_
+
+Enables support of regex options. (i,m,x)
+The supported toggle-able options for this flag are:
+
+  - `i` - Case-insensitivity
+  - `m` - Multi-line mode (`.` can match `\n`)
+  - `x` - Extended pattern (free-formatting: whitespace will ignored)
+
+
+### 4. ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT (enable `r?+`, `r*+`, and `r++`)
+
+_Set in: Ruby, Oniguruma_
+
+Enables support for the _possessive_ quantifiers `?+`, `*+`, and `++`, which
+work similarly to `?` and `*` and `+`, respectively, but which do not backtrack
+after matching:  Like the normal greedy quantifiers, they match as much as
+possible, but they do not attempt to match _less_ than their maximum possible
+extent if subsequent parts of the pattern fail to match.
+
+
+### 5. ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL (enable `r{n,m}+`)
+
+_Set in: Java_
+
+Enables support for the _possessive_ quantifier `{n,m}+`, which
+works similarly to `{n,m}`, but which does not backtrack
+after matching:  Like the normal greedy quantifier, it matches as much as
+possible, but it do not attempt to match _less_ than its maximum possible
+extent if subsequent parts of the pattern fail to match.
+
+
+### 6. ONIG_SYN_OP2_CCLASS_SET_OP (enable `&&` within `[...]`)
+
+_Set in: Java, Ruby, Oniguruma_
+
+Enables support for character-class _intersection_.  For example, with this
+feature enabled, you can write `[a-z&&[^aeiou]]` to produce a character class
+of only consonants, or `[\0-\37&&[^\n\r]]` to produce a character class of
+all control codes _except_ newlines.
+
+
+### 7. ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP (enable named captures `(?<name>...)`)
+
+_Set in: Perl_NG, Ruby, Oniguruma_
+
+Enables support for _naming_ capture groups, so that instead of having to
+refer to captures by position (like `\3` or `$3`), you can refer to them by names
+(like `server` and `path`).  This supports the Perl/Ruby naming syntaxes `(?<name>...)`
+and `(?'name'...)`, but not the Python `(?P<name>...)` syntax.
+
+
+### 8. ONIG_SYN_OP2_ESC_K_NAMED_BACKREF (enable named backreferences `\k<name>`)
+
+_Set in: Perl_NG, Ruby, Oniguruma_
+
+Enables support for substituted backreferences by name, not just by position.
+This supports using `\k'name'` in addition to supporting `\k<name>`.  This also
+supports an Oniguruma-specific extension that lets you specify the _distance_ of
+the match, if the capture matched multiple times, by writing `\k<name+n>` or
+`\k<name-n>`.
+
+
+### 9. ONIG_SYN_OP2_ESC_G_SUBEXP_CALL (enable backreferences `\g<name>` and `\g<n>`)
+
+_Set in: Perl_NG, Ruby, Oniguruma_
+
+Enables support for substituted backreferences by both name and position using
+the same syntax.  This supports using `\g'name'` and `\g'1'` in addition to
+supporting `\g<name>` and `\g<1>`.
+
+
+### 10. ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY (enable `(?@...)` and `(?@<name>...)`)
+
+_Set in: none_
+
+Enables support for _capture history_, which can answer via the `onig_*capture*()`
+functions exactly which captures were matched, how many times, and where in the
+input they were matched, by placing `?@` in front of the capture.  Per Oniguruma's
+regex syntax documentation (appendix A-5):
+
+`/(?@a)*/.match("aaa")` ==> `[<0-1>, <1-2>, <2-3>]`
+
+This can require substantial memory, is primarily useful for debugging, and is not
+enabled by default in any syntax.
+
+
+### 11. ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL (enable `\C-x`)
+
+_Set in: Ruby, Oniguruma_
+
+Enables support for Ruby legacy control-code escapes, like `\C-m` or `\C-M` for code-point
+13.  In this shorthand form, control codes may be specified by `\C-` (for "Control")
+followed by a single character (or equivalent), indicating which code point to represent,
+based on that character's lowest five bits.  So, like `\c`, you can represent code-point
+10 with `\C-j`, but you can also represent it with `\C-*` as well.
+
+See also ONIG_SYN_OP_ESC_C_CONTROL, which enables the more-common `\cx` syntax.
+
+
+### 12. ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META (enable `\M-x`)
+
+_Set in: Ruby, Oniguruma_
+
+Enables support for Ruby legacy meta-code escapes.  When you write `\M-x`, Oniguruma
+will match an `x` whose 8th bit is set (i.e., the character code of `x` will be or'ed
+with `0x80`).  So, for example, you can match `\x81` using `\x81`, or you can write
+`\M-\1`.  This is mostly useful when working with legacy 8-bit character encodings.
+
+
+### 13. ONIG_SYN_OP2_ESC_V_VTAB (enable `\v` as vertical tab)
+
+_Set in: Java, Ruby, Oniguruma_
+
+Enables support for a C-style `\v` escape code, meaning "vertical tab."  If enabled,
+`\v` will be equivalent to ASCII code point 11.
+
+
+### 14. ONIG_SYN_OP2_ESC_U_HEX4 (enable `\uHHHH` for Unicode)
+
+_Set in: Java, Ruby, Oniguruma_
+
+Enables support for a Java-style `\uHHHH` escape code for representing Unicode
+code-points by number, using up to four hexadecimal digits (up to `\uFFFF`).  So,
+for example, `\u221E` will match an infinity symbol, `∞`.
+
+For code points larger than four digits, like the emoji `🚡` (aerial tramway, or code
+point U+1F6A1), you must either represent the character directly using an encoding like
+UTF-8, or you must enable support for ONIG_SYN_OP_ESC_X_BRACE_HEX8 or
+ONIG_SYN_OP_ESC_O_BRACE_OCTAL, which support more than four digits.
+
+(New feature as of Oniguruma 6.7.)
+
+
+### 15. ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR (enable ``\` `` and `\'` anchors)
+
+_Set in: Emacs_
+
+This flag makes the ``\` `` and `\'` escapes function identically to
+`\A` and `\z`, respectively (when ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR is enabled).
+
+These anchor forms are very obscure, and rarely supported by other regex libraries.
+
+
+### 16. ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY (enable `\p{...}` and `\P{...}`)
+
+_Set in: Java, Perl, Perl_NG, Ruby, Oniguruma_
+
+Enables support for an alternate syntax for POSIX character classes; instead of
+writing `[:alpha:]` when this is enabled, you can instead write `\p{alpha}`.
+
+See also ONIG_SYN_OP_POSIX_BRACKET for the classic POSIX form.
+
+
+### 17. ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT (enable `\p{^...}` and `\P{^...}`)
+
+_Set in: Perl, Perl_NG, Ruby, Oniguruma_
+
+Enables support for an alternate syntax for POSIX character classes; instead of
+writing `[:^alpha:]` when this is enabled, you can instead write `\p{^alpha}`.
+
+See also ONIG_SYN_OP_POSIX_BRACKET for the classic POSIX form.
+
+
+### 18. ONIG_SYN_OP2_CHAR_PROPERTY_PREFIX_IS
+
+_(not presently used)_
+
+
+### 19. ONIG_SYN_OP2_ESC_H_XDIGIT (enable `\h` and `\H`)
+
+_Set in: Ruby, Oniguruma_
+
+Enables support for the Ruby-specific shorthand `\h` and `\H` metacharacters.
+Somewhat like `\d` matches decimal digits, `\h` matches hexadecimal digits — that is,
+characters in `[0-9a-fA-F]`.
+
+`\H` matches the opposite of whatever `\h` matches.
+
+
+### 20. ONIG_SYN_OP2_INEFFECTIVE_ESCAPE (disable `\`)
+
+_Set in: As-is_
+
+If set, this disables all escape codes, shorthands, and metacharacters that start
+with `\` (or whatever the configured escape character is), allowing `\` to be treated
+as a literal `\`.
+
+You usually do not want this flag to be enabled.
+
+
+### 21. ONIG_SYN_OP2_QMARK_LPAREN_IF_ELSE (enable `(?(...)then|else)`)
+
+_Set in: Perl, Perl_NG, Ruby, Oniguruma_
+
+Enables support for conditional inclusion of subsequent regex patterns based on whether
+a prior named or numbered capture matched, or based on whether a pattern will
+match.  This supports many different forms, including:
+
+  - `(?(<foo>)then|else)` - condition based on a capture by name.
+  - `(?('foo')then|else)` - condition based on a capture by name.
+  - `(?(3)then|else)` - condition based on a capture by number.
+  - `(?(+3)then|else)` - forward conditional to a future match, by relative position.
+  - `(?(-3)then|else)` - backward conditional to a prior match, by relative position.
+  - `(?(foo)then|else)` - this matches a pattern `foo`. (foo is any sub-expression)
+
+(New feature as of Oniguruma 6.5.)
+
+
+### 22. ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP (enable `\K`)
+
+_Set in: Perl, Perl_NG, Ruby, Oniguruma_
+
+Enables support for `\K`, which excludes all content before it from the overall
+regex match (i.e., capture #0).  So, for example, pattern `foo\Kbar` would match
+`foobar`, but capture #0 would only include `bar`.
+
+(New feature as of Oniguruma 6.5.)
+
+
+### 23. ONIG_SYN_OP2_ESC_CAPITAL_R_GENERAL_NEWLINE (enable `\R`)
+
+_Set in: Perl, Perl_NG, Ruby, Oniguruma_
+
+Enables support for `\R`, the "general newline" shorthand, which matches
+`(\r\n|[\n\v\f\r\u0085\u2028\u2029])` (obviously, the Unicode values are cannot be
+matched in ASCII encodings).
+
+(New feature as of Oniguruma 6.5.)
+
+
+### 24. ONIG_SYN_OP2_ESC_CAPITAL_N_O_SUPER_DOT (enable `\N` and `\O`)
+
+_Set in: Perl, Perl_NG, Oniguruma_
+
+Enables support for `\N` and `\O`.  `\N` is "not a line break," which is much
+like the standard `.` metacharacter, except that while `.` can be affected by
+the single-line setting, `\N` always matches exactly one character that is not
+one of the various line-break characters (like `\n` and `\r`).
+
+`\O` matches exactly one character, regardless of whether single-line or
+multi-line mode are enabled or disabled.
+
+(New feature as of Oniguruma 6.5.)
+
+
+### 25. ONIG_SYN_OP2_QMARK_TILDE_ABSENT_GROUP (enable `(?~...)`)
+
+_Set in: Ruby, Oniguruma_
+
+Enables support for the `(?~r)` "absent operator" syntax, which matches
+as much as possible as long as the result _doesn't_ match pattern `r`.  This is
+_not_ the same as negative lookahead or negative lookbehind.
+
+Among the most useful examples of this is `\/\*(?~\*\/)\*\/`, which matches
+C-style comments by simply saying "starts with /*, ends with */, and _doesn't_
+contain a */ in between."
+
+A full explanation of this feature is complicated, but it is useful, and an
+excellent article about it is [available on Medium](https://medium.com/rubyinside/the-new-absent-operator-in-ruby-s-regular-expressions-7c3ef6cd0b99).
+
+(New feature as of Oniguruma 6.5.)
+
+
+### 26. ONIG_SYN_OP2_ESC_X_Y_TEXT_SEGMENT (enable `\X` and `\Y` and `\y`)
+
+_Set in: Perl, Perl_NG, Ruby, Oniguruma_
+
+`\X` is another variation on `.`, designed to support Unicode, in that it matches
+a full _grapheme cluster_.  In Unicode, `à` can be encoded as one code point,
+`U+00E0`, or as two, `U+0061 U+0300`.  If those are further escaped using UTF-8,
+the former becomes two bytes, and the latter becomes three.  Unfortunately, `.`
+would naively match only one or two bytes, depending on the encoding, and would
+likely incorrectly match anything from just `a` to a broken half of a code point.
+`\X` is designed to fix this:  It matches the full `à`, no matter how `à` is
+encoded or decomposed.
+
+`\y` matches a cluster boundary, i.e., a zero-width position between
+graphemes, somewhat like `\b` matches boundaries between words.  `\Y` matches
+the _opposite_ of `\y`, that is, a zero-width position between code points in
+the _middle_ of a grapheme.
+
+(New feature as of Oniguruma 6.6.)
+
+
+### 27. ONIG_SYN_OP2_QMARK_PERL_SUBEXP_CALL (enable `(?R)` and `(?&name)`)
+
+_Set in: Perl_NG_
+
+Enables support for substituted backreferences by both name and position using
+Perl-5-specific syntax.  This supports using `(?R3)` and `(?&name)` to reference
+previous (and future) matches, similar to the more-common `\g<3>` and `\g<name>`
+backreferences.
+
+(New feature as of Oniguruma 6.7.)
+
+
+### 28. ONIG_SYN_OP2_QMARK_BRACE_CALLOUT_CONTENTS (enable `(?{...})`)
+
+_Set in: Perl, Perl_NG, Oniguruma_
+
+Enables support for Perl-style "callouts" — pattern substitutions that result from
+invoking a callback method.  When `(?{foo})` is reached in a pattern, the callback
+function set in `onig_set_progress_callout()` will be invoked, and be able to perform
+custom computation during the pattern match (and during backtracking).
+
+Full documentation for this advanced feature can be found in the Oniguruma
+`docs/CALLOUT.md` file, with an example in `samples/callout.c`.
+
+(New feature as of Oniguruma 6.8.)
+
+
+### 29. ONIG_SYN_OP2_ASTERISK_CALLOUT_NAME (enable `(*name)`)
+
+_Set in: Perl, Perl_NG, Oniguruma_
+
+Enables support for Perl-style "callouts" — pattern substitutions that result from
+invoking a callback method.  When `(*foo)` is reached in a pattern, the callback
+function set in `onig_set_callout_of_name()` will be invoked, passing the given name
+`foo` to it, and it can perform custom computation during the pattern match (and
+during backtracking).
+
+Full documentation for this advanced feature can be found in the Oniguruma
+`docs/CALLOUT.md` file, with an example in `samples/callout.c`.
+
+(New feature as of Oniguruma 6.8.)
+
+
+### 30. ONIG_SYN_OP2_OPTION_ONIGURUMA (enable options `(?imxWSDPy)` and `(?-imxWDSP)`)
+
+_Set in: Oniguruma_
+
+Enables support of regex options. (i,m,x,W,S,D,P,y)
+
+(New feature as of Oniguruma 6.9.2)
+
+  - `i` - Case-insensitivity
+  - `m` - Multi-line mode (`.` can match `\n`)
+  - `x` - Extended pattern (free-formatting: whitespace will ignored)
+  - `W` - ASCII only word.
+  - `D` - ASCII only digit.
+  - `S` - ASCII only space.
+  - `P` - ASCII only POSIX properties. (includes W,D,S)
+
+----------
+
+
+## Syntax Flags (syn)
+
+
+This group contains rules to handle corner cases and constructs that are errors in
+some syntaxes but not in others.
+
+### 0. ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS (independent `?`, `*`, `+`, `{n,m}`)
+
+_Set in: PosixExtended, GnuRegex, Java, Perl, Perl_NG, Ruby, Oniguruma_
+
+This flag specifies how to handle operators like `?` and `*` when they aren't
+directly attached to an operand, as in `^*` or `(*)`:  Are they an error, are
+they discarded, or are they taken as literals?  If this flag is clear, they
+are taken as literals; otherwise, the ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS flag
+determines if they are errors or if they are discarded.
+
+### 1. ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS (error or ignore independent operators)
+
+_Set in: PosixExtended, GnuRegex, Java, Perl, Perl_NG, Ruby, Oniguruma_
+
+If ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS is set, this flag controls what happens when
+independent operators appear in a pattern:  If this flag is set, then independent
+operators produce an error message; if this flag is clear, then independent
+operators are silently discarded.
+
+### 2. ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP (allow `...)...`)
+
+_Set in: PosixExtended_
+
+This flag, if set, causes a `)` character without a preceding `(` to be treated as
+a literal `)`, equivalent to `\)`.  If this flag is clear, then an unmatched `)`
+character will produce an error message.
+
+### 3. ONIG_SYN_ALLOW_INVALID_INTERVAL (allow `{???`)
+
+_Set in: GnuRegex, Java, Perl, Perl_NG, Ruby, Oniguruma_
+
+This flag, if set, causes an invalid range, like `foo{bar}` or `foo{}`, to be
+silently discarded, as if `foo` had been written instead.  If clear, an invalid
+range will produce an error message.
+
+### 4. ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV (allow `{,n}` to mean `{0,n}`)
+
+_Set in: Ruby, Oniguruma_
+
+If this flag is set, then `r{,n}` will be treated as equivalent to writing
+`{0,n}`.  If this flag is clear, then `r{,n}` will produce an error message.
+
+Note that regardless of whether this flag is set or clear, if
+ONIG_SYN_OP_BRACE_INTERVAL is enabled, then `r{n,}` will always be legal:  This
+flag *only* controls the behavior of the opposite form, `r{,n}`.
+
+### 5. ONIG_SYN_STRICT_CHECK_BACKREF (error on invalid backrefs)
+
+_Set in: none_
+
+If this flag is set, an invalid backref, like `\1` in a pattern with no captures,
+will produce an error.  If this flag is clear, then an invalid backref will be
+equivalent to the empty string.
+
+No built-in syntax has this flag enabled.
+
+### 6. ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND (allow `(?<=a|bc)`)
+
+_Set in: Java, Ruby, Oniguruma_
+
+If this flag is set, lookbehind patterns with alternate options may have differing
+lengths among those options.  If this flag is clear, lookbehind patterns with options
+must have each option have identical length to the other options.
+
+Oniguruma can handle either form, but not all regex engines can, so for compatibility,
+Oniguruma allows you to cause regexes for other regex engines to fail if they might
+depend on this rule.
+
+### 7. ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP (prefer `\k<name>` over `\3`)
+
+_Set in: Perl_NG, Ruby, Oniguruma_
+
+If this flag is set on the syntax *and* ONIG_OPTION_CAPTURE_GROUP is set when calling
+Oniguruma, then if a name is used on any capture, all captures must also use names:  A
+single use of a named capture prohibits the use of numbered captures.
+
+### 8. ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME (allow `(?<x>)...(?<x>)`)
+
+_Set in: Perl_NG, Ruby, Oniguruma_
+
+If this flag is set, multiple capture groups may use the same name.  If this flag is
+clear, then reuse of a name will produce an error message.
+
+### 9. ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY (`a{n}?` is equivalent to `(?:a{n})?`)
+
+_Set in: Ruby, Oniguruma_
+
+If this flag is set, then intervals of a fixed size will ignore a lazy (non-greedy)
+`?` quantifier and treat it as an optional match (an ordinary `r?`), since "match as
+little as possible" is meaningless for a fixed-size interval.  If this flag is clear,
+then `r{n}?` will mean the same as `r{n}`, and the useless `?` will be discarded.
+
+### 20. ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC (add `\n` to `[^...]`)
+
+_Set in: Grep_
+
+If this flag is set, all newline characters (like `\n`) will be excluded from a negative
+character class automatically, as if the pattern had been written as `[^...\n]`.  If this
+flag is clear, negative character classes do not automatically exclude newlines, and
+only exclude those characters and ranges written in them.
+
+### 21. ONIG_SYN_BACKSLASH_ESCAPE_IN_CC (allow `[...\w...]`)
+
+_Set in: GnuRegex, Java, Perl, Perl_NG, Ruby, Oniguruma_
+
+If this flag is set, shorthands like `\w` are allowed to describe characters in character
+classes.  If this flag is clear, shorthands like `\w` are treated as a redundantly-escaped
+literal `w`.
+
+### 22. ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC (silently discard `[z-a]`)
+
+_Set in: Emacs, Grep_
+
+If this flag is set, then character ranges like `[z-a]` that are broken or contain no
+characters will be silently ignored.  If this flag is clear, then broken or empty
+character ranges will produce an error message.
+
+### 23. ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC (treat `[0-9-a]` as `[0-9\-a]`)
+
+_Set in: PosixExtended, GnuRegex, Java, Perl, Perl_NG, Ruby, Oniguruma_
+
+If this flag is set, then a trailing `-` after a character range will be taken as a
+literal `-`, as if it had been escaped as `\-`.  If this flag is clear, then a trailing
+`-` after a character range will produce an error message.
+
+### 24. ONIG_SYN_WARN_CC_OP_NOT_ESCAPED (warn on `[[...]` and `[-x]`)
+
+_Set in: Ruby, Oniguruma_
+
+If this flag is set, Oniguruma will be stricter about warning for bad forms in
+character classes:  `[[...]` will produce a warning, but `[\[...]` will not;
+`[-x]` will produce a warning, but `[\-x]` will not; `[x&&-y]` will produce a warning,
+while `[x&&\-y]` will not; and so on.  If this flag is clear, all of these warnings
+will be silently discarded.
+
+### 25. ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT (warn on `(?:a*)+`)
+
+_Set in: Ruby, Oniguruma_
+
+If this flag is set, Oniguruma will warn about nested repeat operators those have no meaning, like `(?:a*)+`.
+If this flag is clear, Oniguruma will allow the nested repeat operators without warning about them.
+
+### 31. ONIG_SYN_CONTEXT_INDEP_ANCHORS
+
+_Set in: PosixExtended, GnuRegex, Java, Perl, Perl_NG, Ruby, Oniguruma_
+
+Not currently used, and does nothing.  (But still set in several syntaxes for some
+reason.)
+
+----------
+
+## Usage tables
+
+These tables show which of the built-in syntaxes use which flags and options, for easy comparison between them.
+
+### Group One Flags (op)
+
+| ID    | Option                                        | PosB  | PosEx | Emacs | Grep  | Gnu   | Java  | Perl  | PeNG  | Ruby  | Onig  |
+| ----- | --------------------------------------------- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
+| 0     | `ONIG_SYN_OP_VARIABLE_META_CHARACTERS`        | -     | -     | -     | -     | -     | -     | -     | -     | -     | -     |
+| 1     | `ONIG_SYN_OP_DOT_ANYCHAR`                     | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   |
+| 2     | `ONIG_SYN_OP_ASTERISK_ZERO_INF`               | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   |
+| 3     | `ONIG_SYN_OP_ESC_ASTERISK_ZERO_INF`           | -     | -     | -     | -     | -     | -     | -     | -     | -     | -     |
+| 4     | `ONIG_SYN_OP_PLUS_ONE_INF`                    | -     | Yes   | Yes   | -     | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   |
+| 5     | `ONIG_SYN_OP_ESC_PLUS_ONE_INF`                | -     | -     | -     | Yes   | -     | -     | -     | -     | -     | -     |
+| 6     | `ONIG_SYN_OP_QMARK_ZERO_ONE`                  | -     | Yes   | Yes   | -     | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   |
+| 7     | `ONIG_SYN_OP_ESC_QMARK_ZERO_ONE`              | -     | -     | -     | Yes   | -     | -     | -     | -     | -     | -     |
+| 8     | `ONIG_SYN_OP_BRACE_INTERVAL`                  | -     | Yes   | -     | -     | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   |
+| 9     | `ONIG_SYN_OP_ESC_BRACE_INTERVAL`              | Yes   | -     | Yes   | Yes   | -     | -     | -     | -     | -     | -     |
+| 10    | `ONIG_SYN_OP_VBAR_ALT`                        | -     | Yes   | -     | -     | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   |
+| 11    | `ONIG_SYN_OP_ESC_VBAR_ALT`                    | -     | -     | Yes   | Yes   | -     | -     | -     | -     | -     | -     |
+| 12    | `ONIG_SYN_OP_LPAREN_SUBEXP`                   | -     | Yes   | -     | -     | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   |
+| 13    | `ONIG_SYN_OP_ESC_LPAREN_SUBEXP`               | Yes   | -     | Yes   | Yes   | -     | -     | -     | -     | -     | -     |
+| 14    | `ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR`               | -     | -     | -     | -     | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   |
+| 15    | `ONIG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR`      | -     | -     | -     | -     | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   |
+| 16    | `ONIG_SYN_OP_DECIMAL_BACKREF`                 | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   |
+| 17    | `ONIG_SYN_OP_BRACKET_CC`                      | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   |
+| 18    | `ONIG_SYN_OP_ESC_W_WORD`                      | -     | -     | -     | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   |
+| 19    | `ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END`         | -     | -     | -     | Yes   | Yes   | -     | -     | -     | -     | -     |
+| 20    | `ONIG_SYN_OP_ESC_B_WORD_BOUND`                | -     | -     | -     | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   |
+| 21    | `ONIG_SYN_OP_ESC_S_WHITE_SPACE`               | -     | -     | -     | -     | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   |
+| 22    | `ONIG_SYN_OP_ESC_D_DIGIT`                     | -     | -     | -     | -     | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   |
+| 23    | `ONIG_SYN_OP_LINE_ANCHOR`                     | -     | -     | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   |
+| 24    | `ONIG_SYN_OP_POSIX_BRACKET`                   | Yes   | Yes   | Yes   | -     | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   |
+| 25    | `ONIG_SYN_OP_QMARK_NON_GREEDY`                | -     | -     | -     | -     | -     | Yes   | Yes   | Yes   | Yes   | Yes   |
+| 26    | `ONIG_SYN_OP_ESC_CONTROL_CHARS`               | Yes   | Yes   | -     | -     | -     | Yes   | Yes   | Yes   | Yes   | Yes   |
+| 27    | `ONIG_SYN_OP_ESC_C_CONTROL`                   | -     | -     | -     | -     | -     | Yes   | Yes   | Yes   | Yes   | Yes   |
+| 28    | `ONIG_SYN_OP_ESC_OCTAL3`                      | -     | -     | -     | -     | -     | Yes   | Yes   | Yes   | Yes   | Yes   |
+| 29    | `ONIG_SYN_OP_ESC_X_HEX2`                      | -     | -     | -     | -     | -     | Yes   | Yes   | Yes   | Yes   | Yes   |
+| 30    | `ONIG_SYN_OP_ESC_X_BRACE_HEX8`                | -     | -     | -     | -     | -     | -     | Yes   | Yes   | Yes   | Yes   |
+| 31    | `ONIG_SYN_OP_ESC_O_BRACE_OCTAL`               | -     | -     | -     | -     | -     | -     | Yes   | Yes   | Yes   | Yes   |
+
+### Group Two Flags (op2)
+
+| ID    | Option                                        | PosB  | PosEx | Emacs | Grep  | Gnu   | Java  | Perl  | PeNG  | Ruby  | Onig  |
+| ----- | --------------------------------------------- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
+| 0     | `ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE`            | -     | -     | -     | -     | -     | Yes   | Yes   | Yes   | -     | -     |
+| 1     | `ONIG_SYN_OP2_QMARK_GROUP_EFFECT`             | -     | -     | -     | -     | -     | Yes   | Yes   | Yes   | Yes   | Yes   |
+| 2     | `ONIG_SYN_OP2_OPTION_PERL`                    | -     | -     | -     | -     | -     | Yes   | Yes   | Yes   | -     | -     |
+| 3     | `ONIG_SYN_OP2_OPTION_RUBY`                    | -     | -     | -     | -     | -     | -     | -     | -     | Yes   | -     |
+| 4     | `ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT`         | -     | -     | -     | -     | -     | -     | -     | -     | Yes   | Yes   |
+| 5     | `ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL`       | -     | -     | -     | -     | -     | Yes   | -     | -     | -     | -     |
+| 6     | `ONIG_SYN_OP2_CCLASS_SET_OP`                  | -     | -     | -     | -     | -     | -     | -     | Yes   | Yes   | Yes   |
+| 7     | `ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP`           | -     | -     | -     | -     | -     | -     | -     | Yes   | Yes   | Yes   |
+| 8     | `ONIG_SYN_OP2_ESC_K_NAMED_BACKREF`            | -     | -     | -     | -     | -     | -     | -     | Yes   | Yes   | Yes   |
+| 9     | `ONIG_SYN_OP2_ESC_G_SUBEXP_CALL`              | -     | -     | -     | -     | -     | -     | -     | Yes   | Yes   | Yes   |
+| 10    | `ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY`         | -     | -     | -     | -     | -     | -     | -     | -     | -     | -     |
+| 11    | `ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL`      | -     | -     | -     | -     | -     | -     | -     | -     | Yes   | Yes   |
+| 12    | `ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META`         | -     | -     | -     | -     | -     | -     | -     | -     | Yes   | Yes   |
+| 13    | `ONIG_SYN_OP2_ESC_V_VTAB`                     | -     | -     | -     | -     | -     | Yes   | -     | -     | Yes   | Yes   |
+| 14    | `ONIG_SYN_OP2_ESC_U_HEX4`                     | -     | -     | -     | -     | -     | Yes   | -     | -     | Yes   | Yes   |
+| 15    | `ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR`             | -     | -     | Yes   | -     | -     | -     | -     | -     | -     | -     |
+| 16    | `ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY`      | -     | -     | -     | -     | -     | Yes   | Yes   | Yes   | Yes   | Yes   |
+| 17    | `ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT`     | -     | -     | -     | -     | -     | -     | Yes   | Yes   | Yes   | Yes   |
+| 18    | `ONIG_SYN_OP2_CHAR_PROPERTY_PREFIX_IS`        | -     | -     | -     | -     | -     | -     | -     | -     | -     | -     |
+| 19    | `ONIG_SYN_OP2_ESC_H_XDIGIT`                   | -     | -     | -     | -     | -     | -     | -     | -     | Yes   | Yes   |
+| 20    | `ONIG_SYN_OP2_INEFFECTIVE_ESCAPE`             | -     | -     | -     | -     | -     | -     | -     | -     | -     | -     |
+| 21    | `ONIG_SYN_OP2_QMARK_LPAREN_IF_ELSE`           | -     | -     | -     | -     | -     | -     | Yes   | Yes   | Yes   | Yes   |
+| 22    | `ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP`             | -     | -     | -     | -     | -     | -     | Yes   | Yes   | Yes   | Yes   |
+| 23    | `ONIG_SYN_OP2_ESC_CAPITAL_R_GENERAL_NEWLINE`  | -     | -     | -     | -     | -     | -     | Yes   | Yes   | Yes   | Yes   |
+| 24    | `ONIG_SYN_OP2_ESC_CAPITAL_N_O_SUPER_DOT`      | -     | -     | -     | -     | -     | -     | Yes   | Yes   | -     | Yes   |
+| 25    | `ONIG_SYN_OP2_QMARK_TILDE_ABSENT_GROUP`       | -     | -     | -     | -     | -     | -     | -     | -     | Yes   | Yes   |
+| 26    | `ONIG_SYN_OP2_ESC_X_Y_TEXT_SEGMENT`           | -     | -     | -     | -     | -     | -     | Yes   | Yes   | Yes   | Yes   |
+| 27    | `ONIG_SYN_OP2_QMARK_PERL_SUBEXP_CALL`         | -     | -     | -     | -     | -     | -     | -     | Yes   | -     | -     |
+| 28    | `ONIG_SYN_OP2_QMARK_BRACE_CALLOUT_CONTENTS`   | -     | -     | -     | -     | -     | -     | Yes   | Yes   | Yes   | -     |
+| 29    | `ONIG_SYN_OP2_ASTERISK_CALLOUT_NAME`          | -     | -     | -     | -     | -     | -     | Yes   | Yes   | Yes   | -     |
+| 30    | `ONIG_SYN_OP2_OPTION_ONIGURUMA`               | -     | -     | -     | -     | -     | -     | -     | -     | -     | Yes   |
+
+### Syntax Flags (syn)
+
+| ID    | Option                                        | PosB  | PosEx | Emacs | Grep  | Gnu   | Java  | Perl  | PeNG  | Ruby  | Onig  |
+| ----- | --------------------------------------------- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- | ----- |
+| 0     | `ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS`           | -     | Yes   | -     | -     | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   |
+| 1     | `ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS`         | -     | -     | -     | -     | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   |
+| 2     | `ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP`       | -     | Yes   | -     | -     | -     | -     | -     | -     | -     | -     |
+| 3     | `ONIG_SYN_ALLOW_INVALID_INTERVAL`             | -     | -     | -     | -     | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   |
+| 4     | `ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV`          | -     | -     | -     | -     | -     | -     | -     | -     | Yes   | Yes   |
+| 5     | `ONIG_SYN_STRICT_CHECK_BACKREF`               | -     | -     | -     | -     | -     | -     | -     | -     | -     | -     |
+| 6     | `ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND`      | -     | -     | -     | -     | -     | -     | -     | Yes   | Yes   | Yes   |
+| 7     | `ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP`           | -     | -     | -     | -     | -     | -     | -     | Yes   | Yes   | Yes   |
+| 8     | `ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME`    | -     | -     | -     | -     | -     | -     | -     | Yes   | Yes   | Yes   |
+| 9     | `ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY`      | -     | -     | -     | -     | -     | -     | -     | -     | Yes   | Yes   |
+| 20    | `ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC`         | -     | -     | -     | Yes   | -     | -     | -     | -     | -     | -     |
+| 21    | `ONIG_SYN_BACKSLASH_ESCAPE_IN_CC`             | -     | -     | -     | -     | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   |
+| 22    | `ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC`            | -     | -     | Yes   | Yes   | -     | -     | -     | -     | -     | -     |
+| 23    | `ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC`        | -     | Yes   | -     | -     | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   |
+| 24    | `ONIG_SYN_WARN_CC_OP_NOT_ESCAPED`             | -     | -     | -     | -     | -     | -     | -     | -     | Yes   | Yes   |
+| 25    | `ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT`       | -     | -     | -     | -     | -     | -     | -     | -     | Yes   | Yes   |
+| 31    | `ONIG_SYN_CONTEXT_INDEP_ANCHORS`              | -     | Yes   | -     | -     | Yes   | Yes   | Yes   | Yes   | Yes   | Yes   |
index 1f961ebda1b18b978981a2b9e6414c87281fa32f..ff2a6cec0b82650d4757ed7990ea7ee6ed18f4ed 100644 (file)
@@ -1,4 +1,4 @@
-Unicode Properties (from Unicode Version: 11.0.0)
+Unicode Properties (from Unicode Version: 12.1.0)
 
  15: ASCII_Hex_Digit
  16: Adlam
@@ -56,203 +56,207 @@ Unicode Properties (from Unicode Version: 11.0.0)
  68: Duployan
  69: Egyptian_Hieroglyphs
  70: Elbasan
- 71: Emoji
- 72: Emoji_Component
- 73: Emoji_Modifier
- 74: Emoji_Modifier_Base
- 75: Emoji_Presentation
- 76: Ethiopic
- 77: Extended_Pictographic
- 78: Extender
- 79: Georgian
- 80: Glagolitic
- 81: Gothic
- 82: Grantha
- 83: Grapheme_Base
- 84: Grapheme_Extend
- 85: Grapheme_Link
- 86: Greek
- 87: Gujarati
- 88: Gunjala_Gondi
- 89: Gurmukhi
- 90: Han
- 91: Hangul
- 92: Hanifi_Rohingya
- 93: Hanunoo
- 94: Hatran
- 95: Hebrew
- 96: Hex_Digit
- 97: Hiragana
- 98: Hyphen
- 99: IDS_Binary_Operator
-100: IDS_Trinary_Operator
-101: ID_Continue
-102: ID_Start
-103: Ideographic
-104: Imperial_Aramaic
-105: Inherited
-106: Inscriptional_Pahlavi
-107: Inscriptional_Parthian
-108: Javanese
-109: Join_Control
-110: Kaithi
-111: Kannada
-112: Katakana
-113: Kayah_Li
-114: Kharoshthi
-115: Khmer
-116: Khojki
-117: Khudawadi
-118: L
-119: LC
-120: Lao
-121: Latin
-122: Lepcha
-123: Limbu
-124: Linear_A
-125: Linear_B
-126: Lisu
-127: Ll
-128: Lm
-129: Lo
-130: Logical_Order_Exception
-131: Lowercase
-132: Lt
-133: Lu
-134: Lycian
-135: Lydian
-136: M
-137: Mahajani
-138: Makasar
-139: Malayalam
-140: Mandaic
-141: Manichaean
-142: Marchen
-143: Masaram_Gondi
-144: Math
-145: Mc
-146: Me
-147: Medefaidrin
-148: Meetei_Mayek
-149: Mende_Kikakui
-150: Meroitic_Cursive
-151: Meroitic_Hieroglyphs
-152: Miao
-153: Mn
-154: Modi
-155: Mongolian
-156: Mro
-157: Multani
-158: Myanmar
-159: N
-160: Nabataean
-161: Nd
-162: New_Tai_Lue
-163: Newa
-164: Nko
-165: Nl
-166: No
-167: Noncharacter_Code_Point
-168: Nushu
-169: Ogham
-170: Ol_Chiki
-171: Old_Hungarian
-172: Old_Italic
-173: Old_North_Arabian
-174: Old_Permic
-175: Old_Persian
-176: Old_Sogdian
-177: Old_South_Arabian
-178: Old_Turkic
-179: Oriya
-180: Osage
-181: Osmanya
-182: Other_Alphabetic
-183: Other_Default_Ignorable_Code_Point
-184: Other_Grapheme_Extend
-185: Other_ID_Continue
-186: Other_ID_Start
-187: Other_Lowercase
-188: Other_Math
-189: Other_Uppercase
-190: P
-191: Pahawh_Hmong
-192: Palmyrene
-193: Pattern_Syntax
-194: Pattern_White_Space
-195: Pau_Cin_Hau
-196: Pc
-197: Pd
-198: Pe
-199: Pf
-200: Phags_Pa
-201: Phoenician
-202: Pi
-203: Po
-204: Prepended_Concatenation_Mark
-205: Ps
-206: Psalter_Pahlavi
-207: Quotation_Mark
-208: Radical
-209: Regional_Indicator
-210: Rejang
-211: Runic
-212: S
-213: Samaritan
-214: Saurashtra
-215: Sc
-216: Sentence_Terminal
-217: Sharada
-218: Shavian
-219: Siddham
-220: SignWriting
-221: Sinhala
-222: Sk
-223: Sm
-224: So
-225: Soft_Dotted
-226: Sogdian
-227: Sora_Sompeng
-228: Soyombo
-229: Sundanese
-230: Syloti_Nagri
-231: Syriac
-232: Tagalog
-233: Tagbanwa
-234: Tai_Le
-235: Tai_Tham
-236: Tai_Viet
-237: Takri
-238: Tamil
-239: Tangut
-240: Telugu
-241: Terminal_Punctuation
-242: Thaana
-243: Thai
-244: Tibetan
-245: Tifinagh
-246: Tirhuta
-247: Ugaritic
-248: Unified_Ideograph
-249: Unknown
-250: Uppercase
-251: Vai
-252: Variation_Selector
-253: Warang_Citi
-254: White_Space
-255: XID_Continue
-256: XID_Start
-257: Yi
-258: Z
-259: Zanabazar_Square
-260: Zl
-261: Zp
-262: Zs
+ 71: Elymaic
+ 72: Emoji
+ 73: Emoji_Component
+ 74: Emoji_Modifier
+ 75: Emoji_Modifier_Base
+ 76: Emoji_Presentation
+ 77: Ethiopic
+ 78: Extended_Pictographic
+ 79: Extender
+ 80: Georgian
+ 81: Glagolitic
+ 82: Gothic
+ 83: Grantha
+ 84: Grapheme_Base
+ 85: Grapheme_Extend
+ 86: Grapheme_Link
+ 87: Greek
+ 88: Gujarati
+ 89: Gunjala_Gondi
+ 90: Gurmukhi
+ 91: Han
+ 92: Hangul
+ 93: Hanifi_Rohingya
+ 94: Hanunoo
+ 95: Hatran
+ 96: Hebrew
+ 97: Hex_Digit
+ 98: Hiragana
+ 99: Hyphen
+100: IDS_Binary_Operator
+101: IDS_Trinary_Operator
+102: ID_Continue
+103: ID_Start
+104: Ideographic
+105: Imperial_Aramaic
+106: Inherited
+107: Inscriptional_Pahlavi
+108: Inscriptional_Parthian
+109: Javanese
+110: Join_Control
+111: Kaithi
+112: Kannada
+113: Katakana
+114: Kayah_Li
+115: Kharoshthi
+116: Khmer
+117: Khojki
+118: Khudawadi
+119: L
+120: LC
+121: Lao
+122: Latin
+123: Lepcha
+124: Limbu
+125: Linear_A
+126: Linear_B
+127: Lisu
+128: Ll
+129: Lm
+130: Lo
+131: Logical_Order_Exception
+132: Lowercase
+133: Lt
+134: Lu
+135: Lycian
+136: Lydian
+137: M
+138: Mahajani
+139: Makasar
+140: Malayalam
+141: Mandaic
+142: Manichaean
+143: Marchen
+144: Masaram_Gondi
+145: Math
+146: Mc
+147: Me
+148: Medefaidrin
+149: Meetei_Mayek
+150: Mende_Kikakui
+151: Meroitic_Cursive
+152: Meroitic_Hieroglyphs
+153: Miao
+154: Mn
+155: Modi
+156: Mongolian
+157: Mro
+158: Multani
+159: Myanmar
+160: N
+161: Nabataean
+162: Nandinagari
+163: Nd
+164: New_Tai_Lue
+165: Newa
+166: Nko
+167: Nl
+168: No
+169: Noncharacter_Code_Point
+170: Nushu
+171: Nyiakeng_Puachue_Hmong
+172: Ogham
+173: Ol_Chiki
+174: Old_Hungarian
+175: Old_Italic
+176: Old_North_Arabian
+177: Old_Permic
+178: Old_Persian
+179: Old_Sogdian
+180: Old_South_Arabian
+181: Old_Turkic
+182: Oriya
+183: Osage
+184: Osmanya
+185: Other_Alphabetic
+186: Other_Default_Ignorable_Code_Point
+187: Other_Grapheme_Extend
+188: Other_ID_Continue
+189: Other_ID_Start
+190: Other_Lowercase
+191: Other_Math
+192: Other_Uppercase
+193: P
+194: Pahawh_Hmong
+195: Palmyrene
+196: Pattern_Syntax
+197: Pattern_White_Space
+198: Pau_Cin_Hau
+199: Pc
+200: Pd
+201: Pe
+202: Pf
+203: Phags_Pa
+204: Phoenician
+205: Pi
+206: Po
+207: Prepended_Concatenation_Mark
+208: Ps
+209: Psalter_Pahlavi
+210: Quotation_Mark
+211: Radical
+212: Regional_Indicator
+213: Rejang
+214: Runic
+215: S
+216: Samaritan
+217: Saurashtra
+218: Sc
+219: Sentence_Terminal
+220: Sharada
+221: Shavian
+222: Siddham
+223: SignWriting
+224: Sinhala
+225: Sk
+226: Sm
+227: So
+228: Soft_Dotted
+229: Sogdian
+230: Sora_Sompeng
+231: Soyombo
+232: Sundanese
+233: Syloti_Nagri
+234: Syriac
+235: Tagalog
+236: Tagbanwa
+237: Tai_Le
+238: Tai_Tham
+239: Tai_Viet
+240: Takri
+241: Tamil
+242: Tangut
+243: Telugu
+244: Terminal_Punctuation
+245: Thaana
+246: Thai
+247: Tibetan
+248: Tifinagh
+249: Tirhuta
+250: Ugaritic
+251: Unified_Ideograph
+252: Unknown
+253: Uppercase
+254: Vai
+255: Variation_Selector
+256: Wancho
+257: Warang_Citi
+258: White_Space
+259: XID_Continue
+260: XID_Start
+261: Yi
+262: Z
+263: Zanabazar_Square
+264: Zl
+265: Zp
+266: Zs
  16: Adlm
  42: Aghb
  15: AHex
  21: Arab
-104: Armi
+105: Armi
  22: Armn
  24: Avst
  25: Bali
@@ -270,24 +274,24 @@ Unicode Properties (from Unicode Version: 11.0.0)
  45: Cakm
  38: Cans
  39: Cari
-119: Cased_Letter
+120: Cased_Letter
  52: Cher
  40: CI
-198: Close_Punctuation
-136: Combining_Mark
-196: Connector_Punctuation
+201: Close_Punctuation
+137: Combining_Mark
+199: Connector_Punctuation
  43: Control
  56: Copt
  59: Cprt
-215: Currency_Symbol
+218: Currency_Symbol
  47: CWCF
  48: CWCM
  49: CWL
  50: CWT
  51: CWU
  60: Cyrl
-197: Dash_Punctuation
-161: Decimal_Number
+200: Dash_Punctuation
+163: Decimal_Number
  63: Dep
  65: Deva
  62: DI
@@ -297,475 +301,488 @@ Unicode Properties (from Unicode Version: 11.0.0)
  68: Dupl
  69: Egyp
  70: Elba
-146: Enclosing_Mark
- 76: Ethi
- 78: Ext
-199: Final_Punctuation
+ 71: Elym
+147: Enclosing_Mark
+ 77: Ethi
+ 79: Ext
+202: Final_Punctuation
  44: Format
79: Geor
- 80: Glag
- 88: Gong
-143: Gonm
- 81: Goth
- 82: Gran
- 83: Gr_Base
- 86: Grek
- 84: Gr_Ext
- 85: Gr_Link
- 87: Gujr
89: Guru
- 91: Hang
- 90: Hani
- 93: Hano
- 94: Hatr
- 95: Hebr
- 96: Hex
- 97: Hira
80: Geor
+ 81: Glag
+ 89: Gong
+144: Gonm
+ 82: Goth
+ 83: Gran
+ 84: Gr_Base
+ 87: Grek
+ 85: Gr_Ext
+ 86: Gr_Link
+ 88: Gujr
90: Guru
+ 92: Hang
+ 91: Hani
+ 94: Hano
+ 95: Hatr
+ 96: Hebr
+ 97: Hex
+ 98: Hira
  19: Hluw
-191: Hmng
-171: Hung
-101: IDC
-103: Ideo
-102: IDS
- 99: IDSB
-100: IDST
-202: Initial_Punctuation
-172: Ital
-108: Java
-109: Join_C
-113: Kali
-112: Kana
-114: Khar
-115: Khmr
-116: Khoj
-111: Knda
-110: Kthi
-235: Lana
-120: Laoo
-121: Latn
-122: Lepc
-118: Letter
-165: Letter_Number
-123: Limb
-124: Lina
-125: Linb
-260: Line_Separator
-130: LOE
-127: Lowercase_Letter
-134: Lyci
-135: Lydi
-137: Mahj
-138: Maka
-140: Mand
-141: Mani
-142: Marc
-136: Mark
-223: Math_Symbol
-147: Medf
-149: Mend
-150: Merc
-151: Mero
-139: Mlym
-128: Modifier_Letter
-222: Modifier_Symbol
-155: Mong
-156: Mroo
-148: Mtei
-157: Mult
-158: Mymr
-173: Narb
-160: Nbat
-167: NChar
-164: Nkoo
-153: Nonspacing_Mark
-168: Nshu
-159: Number
-182: OAlpha
-183: ODI
-169: Ogam
-184: OGr_Ext
-185: OIDC
-186: OIDS
-170: Olck
-187: OLower
-188: OMath
-205: Open_Punctuation
-178: Orkh
-179: Orya
-180: Osge
-181: Osma
+194: Hmng
+171: Hmnp
+174: Hung
+102: IDC
+104: Ideo
+103: IDS
+100: IDSB
+101: IDST
+205: Initial_Punctuation
+175: Ital
+109: Java
+110: Join_C
+114: Kali
+113: Kana
+115: Khar
+116: Khmr
+117: Khoj
+112: Knda
+111: Kthi
+238: Lana
+121: Laoo
+122: Latn
+123: Lepc
+119: Letter
+167: Letter_Number
+124: Limb
+125: Lina
+126: Linb
+264: Line_Separator
+131: LOE
+128: Lowercase_Letter
+135: Lyci
+136: Lydi
+138: Mahj
+139: Maka
+141: Mand
+142: Mani
+143: Marc
+137: Mark
+226: Math_Symbol
+148: Medf
+150: Mend
+151: Merc
+152: Mero
+140: Mlym
+129: Modifier_Letter
+225: Modifier_Symbol
+156: Mong
+157: Mroo
+149: Mtei
+158: Mult
+159: Mymr
+162: Nand
+176: Narb
+161: Nbat
+169: NChar
+166: Nkoo
+154: Nonspacing_Mark
+170: Nshu
+160: Number
+185: OAlpha
+186: ODI
+172: Ogam
+187: OGr_Ext
+188: OIDC
+189: OIDS
+173: Olck
+190: OLower
+191: OMath
+208: Open_Punctuation
+181: Orkh
+182: Orya
+183: Osge
+184: Osma
  37: Other
-129: Other_Letter
-166: Other_Number
-203: Other_Punctuation
-224: Other_Symbol
-189: OUpper
-192: Palm
-261: Paragraph_Separator
-193: Pat_Syn
-194: Pat_WS
-195: Pauc
-204: PCM
-174: Perm
-200: Phag
-106: Phli
-206: Phlp
-201: Phnx
-152: Plrd
+130: Other_Letter
+168: Other_Number
+206: Other_Punctuation
+227: Other_Symbol
+192: OUpper
+195: Palm
+265: Paragraph_Separator
+196: Pat_Syn
+197: Pat_WS
+198: Pauc
+207: PCM
+177: Perm
+203: Phag
+107: Phli
+209: Phlp
+204: Phnx
+153: Plrd
  54: Private_Use
-107: Prti
-190: Punctuation
+108: Prti
+193: Punctuation
  56: Qaac
-105: Qaai
-207: QMark
-209: RI
-210: Rjng
- 92: Rohg
-211: Runr
-213: Samr
-177: Sarb
-214: Saur
-225: SD
-258: Separator
-220: Sgnw
-218: Shaw
-217: Shrd
-219: Sidd
-117: Sind
-221: Sinh
-226: Sogd
-176: Sogo
-227: Sora
-228: Soyo
-262: Space_Separator
-145: Spacing_Mark
-216: STerm
-229: Sund
+106: Qaai
+210: QMark
+212: RI
+213: Rjng
+ 93: Rohg
+214: Runr
+216: Samr
+180: Sarb
+217: Saur
+228: SD
+262: Separator
+223: Sgnw
+221: Shaw
+220: Shrd
+222: Sidd
+118: Sind
+224: Sinh
+229: Sogd
+179: Sogo
+230: Sora
+231: Soyo
+266: Space_Separator
+146: Spacing_Mark
+219: STerm
+232: Sund
  57: Surrogate
-230: Sylo
-212: Symbol
-231: Syrc
-233: Tagb
-237: Takr
-234: Tale
-162: Talu
-238: Taml
-239: Tang
-236: Tavt
-240: Telu
-241: Term
-245: Tfng
-232: Tglg
-242: Thaa
-244: Tibt
-246: Tirh
-132: Titlecase_Letter
-247: Ugar
-248: UIdeo
+233: Sylo
+215: Symbol
+234: Syrc
+236: Tagb
+240: Takr
+237: Tale
+164: Talu
+241: Taml
+242: Tang
+239: Tavt
+243: Telu
+244: Term
+248: Tfng
+235: Tglg
+245: Thaa
+247: Tibt
+249: Tirh
+133: Titlecase_Letter
+250: Ugar
+251: UIdeo
  53: Unassigned
-133: Uppercase_Letter
-251: Vaii
-252: VS
-253: Wara
-254: WSpace
-255: XIDC
-256: XIDS
-175: Xpeo
+134: Uppercase_Letter
+254: Vaii
+255: VS
+257: Wara
+256: Wcho
+258: WSpace
+259: XIDC
+260: XIDS
+178: Xpeo
  58: Xsux
-257: Yiii
-259: Zanb
-105: Zinh
+261: Yiii
+263: Zanb
+106: Zinh
  55: Zyyy
-249: Zzzz
-263: In_Basic_Latin
-264: In_Latin_1_Supplement
-265: In_Latin_Extended_A
-266: In_Latin_Extended_B
-267: In_IPA_Extensions
-268: In_Spacing_Modifier_Letters
-269: In_Combining_Diacritical_Marks
-270: In_Greek_and_Coptic
-271: In_Cyrillic
-272: In_Cyrillic_Supplement
-273: In_Armenian
-274: In_Hebrew
-275: In_Arabic
-276: In_Syriac
-277: In_Arabic_Supplement
-278: In_Thaana
-279: In_NKo
-280: In_Samaritan
-281: In_Mandaic
-282: In_Syriac_Supplement
-283: In_Arabic_Extended_A
-284: In_Devanagari
-285: In_Bengali
-286: In_Gurmukhi
-287: In_Gujarati
-288: In_Oriya
-289: In_Tamil
-290: In_Telugu
-291: In_Kannada
-292: In_Malayalam
-293: In_Sinhala
-294: In_Thai
-295: In_Lao
-296: In_Tibetan
-297: In_Myanmar
-298: In_Georgian
-299: In_Hangul_Jamo
-300: In_Ethiopic
-301: In_Ethiopic_Supplement
-302: In_Cherokee
-303: In_Unified_Canadian_Aboriginal_Syllabics
-304: In_Ogham
-305: In_Runic
-306: In_Tagalog
-307: In_Hanunoo
-308: In_Buhid
-309: In_Tagbanwa
-310: In_Khmer
-311: In_Mongolian
-312: In_Unified_Canadian_Aboriginal_Syllabics_Extended
-313: In_Limbu
-314: In_Tai_Le
-315: In_New_Tai_Lue
-316: In_Khmer_Symbols
-317: In_Buginese
-318: In_Tai_Tham
-319: In_Combining_Diacritical_Marks_Extended
-320: In_Balinese
-321: In_Sundanese
-322: In_Batak
-323: In_Lepcha
-324: In_Ol_Chiki
-325: In_Cyrillic_Extended_C
-326: In_Georgian_Extended
-327: In_Sundanese_Supplement
-328: In_Vedic_Extensions
-329: In_Phonetic_Extensions
-330: In_Phonetic_Extensions_Supplement
-331: In_Combining_Diacritical_Marks_Supplement
-332: In_Latin_Extended_Additional
-333: In_Greek_Extended
-334: In_General_Punctuation
-335: In_Superscripts_and_Subscripts
-336: In_Currency_Symbols
-337: In_Combining_Diacritical_Marks_for_Symbols
-338: In_Letterlike_Symbols
-339: In_Number_Forms
-340: In_Arrows
-341: In_Mathematical_Operators
-342: In_Miscellaneous_Technical
-343: In_Control_Pictures
-344: In_Optical_Character_Recognition
-345: In_Enclosed_Alphanumerics
-346: In_Box_Drawing
-347: In_Block_Elements
-348: In_Geometric_Shapes
-349: In_Miscellaneous_Symbols
-350: In_Dingbats
-351: In_Miscellaneous_Mathematical_Symbols_A
-352: In_Supplemental_Arrows_A
-353: In_Braille_Patterns
-354: In_Supplemental_Arrows_B
-355: In_Miscellaneous_Mathematical_Symbols_B
-356: In_Supplemental_Mathematical_Operators
-357: In_Miscellaneous_Symbols_and_Arrows
-358: In_Glagolitic
-359: In_Latin_Extended_C
-360: In_Coptic
-361: In_Georgian_Supplement
-362: In_Tifinagh
-363: In_Ethiopic_Extended
-364: In_Cyrillic_Extended_A
-365: In_Supplemental_Punctuation
-366: In_CJK_Radicals_Supplement
-367: In_Kangxi_Radicals
-368: In_Ideographic_Description_Characters
-369: In_CJK_Symbols_and_Punctuation
-370: In_Hiragana
-371: In_Katakana
-372: In_Bopomofo
-373: In_Hangul_Compatibility_Jamo
-374: In_Kanbun
-375: In_Bopomofo_Extended
-376: In_CJK_Strokes
-377: In_Katakana_Phonetic_Extensions
-378: In_Enclosed_CJK_Letters_and_Months
-379: In_CJK_Compatibility
-380: In_CJK_Unified_Ideographs_Extension_A
-381: In_Yijing_Hexagram_Symbols
-382: In_CJK_Unified_Ideographs
-383: In_Yi_Syllables
-384: In_Yi_Radicals
-385: In_Lisu
-386: In_Vai
-387: In_Cyrillic_Extended_B
-388: In_Bamum
-389: In_Modifier_Tone_Letters
-390: In_Latin_Extended_D
-391: In_Syloti_Nagri
-392: In_Common_Indic_Number_Forms
-393: In_Phags_pa
-394: In_Saurashtra
-395: In_Devanagari_Extended
-396: In_Kayah_Li
-397: In_Rejang
-398: In_Hangul_Jamo_Extended_A
-399: In_Javanese
-400: In_Myanmar_Extended_B
-401: In_Cham
-402: In_Myanmar_Extended_A
-403: In_Tai_Viet
-404: In_Meetei_Mayek_Extensions
-405: In_Ethiopic_Extended_A
-406: In_Latin_Extended_E
-407: In_Cherokee_Supplement
-408: In_Meetei_Mayek
-409: In_Hangul_Syllables
-410: In_Hangul_Jamo_Extended_B
-411: In_High_Surrogates
-412: In_High_Private_Use_Surrogates
-413: In_Low_Surrogates
-414: In_Private_Use_Area
-415: In_CJK_Compatibility_Ideographs
-416: In_Alphabetic_Presentation_Forms
-417: In_Arabic_Presentation_Forms_A
-418: In_Variation_Selectors
-419: In_Vertical_Forms
-420: In_Combining_Half_Marks
-421: In_CJK_Compatibility_Forms
-422: In_Small_Form_Variants
-423: In_Arabic_Presentation_Forms_B
-424: In_Halfwidth_and_Fullwidth_Forms
-425: In_Specials
-426: In_Linear_B_Syllabary
-427: In_Linear_B_Ideograms
-428: In_Aegean_Numbers
-429: In_Ancient_Greek_Numbers
-430: In_Ancient_Symbols
-431: In_Phaistos_Disc
-432: In_Lycian
-433: In_Carian
-434: In_Coptic_Epact_Numbers
-435: In_Old_Italic
-436: In_Gothic
-437: In_Old_Permic
-438: In_Ugaritic
-439: In_Old_Persian
-440: In_Deseret
-441: In_Shavian
-442: In_Osmanya
-443: In_Osage
-444: In_Elbasan
-445: In_Caucasian_Albanian
-446: In_Linear_A
-447: In_Cypriot_Syllabary
-448: In_Imperial_Aramaic
-449: In_Palmyrene
-450: In_Nabataean
-451: In_Hatran
-452: In_Phoenician
-453: In_Lydian
-454: In_Meroitic_Hieroglyphs
-455: In_Meroitic_Cursive
-456: In_Kharoshthi
-457: In_Old_South_Arabian
-458: In_Old_North_Arabian
-459: In_Manichaean
-460: In_Avestan
-461: In_Inscriptional_Parthian
-462: In_Inscriptional_Pahlavi
-463: In_Psalter_Pahlavi
-464: In_Old_Turkic
-465: In_Old_Hungarian
-466: In_Hanifi_Rohingya
-467: In_Rumi_Numeral_Symbols
-468: In_Old_Sogdian
-469: In_Sogdian
-470: In_Brahmi
-471: In_Kaithi
-472: In_Sora_Sompeng
-473: In_Chakma
-474: In_Mahajani
-475: In_Sharada
-476: In_Sinhala_Archaic_Numbers
-477: In_Khojki
-478: In_Multani
-479: In_Khudawadi
-480: In_Grantha
-481: In_Newa
-482: In_Tirhuta
-483: In_Siddham
-484: In_Modi
-485: In_Mongolian_Supplement
-486: In_Takri
-487: In_Ahom
-488: In_Dogra
-489: In_Warang_Citi
-490: In_Zanabazar_Square
-491: In_Soyombo
-492: In_Pau_Cin_Hau
-493: In_Bhaiksuki
-494: In_Marchen
-495: In_Masaram_Gondi
-496: In_Gunjala_Gondi
-497: In_Makasar
-498: In_Cuneiform
-499: In_Cuneiform_Numbers_and_Punctuation
-500: In_Early_Dynastic_Cuneiform
-501: In_Egyptian_Hieroglyphs
-502: In_Anatolian_Hieroglyphs
-503: In_Bamum_Supplement
-504: In_Mro
-505: In_Bassa_Vah
-506: In_Pahawh_Hmong
-507: In_Medefaidrin
-508: In_Miao
-509: In_Ideographic_Symbols_and_Punctuation
-510: In_Tangut
-511: In_Tangut_Components
-512: In_Kana_Supplement
-513: In_Kana_Extended_A
-514: In_Nushu
-515: In_Duployan
-516: In_Shorthand_Format_Controls
-517: In_Byzantine_Musical_Symbols
-518: In_Musical_Symbols
-519: In_Ancient_Greek_Musical_Notation
-520: In_Mayan_Numerals
-521: In_Tai_Xuan_Jing_Symbols
-522: In_Counting_Rod_Numerals
-523: In_Mathematical_Alphanumeric_Symbols
-524: In_Sutton_SignWriting
-525: In_Glagolitic_Supplement
-526: In_Mende_Kikakui
-527: In_Adlam
-528: In_Indic_Siyaq_Numbers
-529: In_Arabic_Mathematical_Alphabetic_Symbols
-530: In_Mahjong_Tiles
-531: In_Domino_Tiles
-532: In_Playing_Cards
-533: In_Enclosed_Alphanumeric_Supplement
-534: In_Enclosed_Ideographic_Supplement
-535: In_Miscellaneous_Symbols_and_Pictographs
-536: In_Emoticons
-537: In_Ornamental_Dingbats
-538: In_Transport_and_Map_Symbols
-539: In_Alchemical_Symbols
-540: In_Geometric_Shapes_Extended
-541: In_Supplemental_Arrows_C
-542: In_Supplemental_Symbols_and_Pictographs
-543: In_Chess_Symbols
-544: In_CJK_Unified_Ideographs_Extension_B
-545: In_CJK_Unified_Ideographs_Extension_C
-546: In_CJK_Unified_Ideographs_Extension_D
-547: In_CJK_Unified_Ideographs_Extension_E
-548: In_CJK_Unified_Ideographs_Extension_F
-549: In_CJK_Compatibility_Ideographs_Supplement
-550: In_Tags
-551: In_Variation_Selectors_Supplement
-552: In_Supplementary_Private_Use_Area_A
-553: In_Supplementary_Private_Use_Area_B
-554: In_No_Block
+252: Zzzz
+267: In_Basic_Latin
+268: In_Latin_1_Supplement
+269: In_Latin_Extended_A
+270: In_Latin_Extended_B
+271: In_IPA_Extensions
+272: In_Spacing_Modifier_Letters
+273: In_Combining_Diacritical_Marks
+274: In_Greek_and_Coptic
+275: In_Cyrillic
+276: In_Cyrillic_Supplement
+277: In_Armenian
+278: In_Hebrew
+279: In_Arabic
+280: In_Syriac
+281: In_Arabic_Supplement
+282: In_Thaana
+283: In_NKo
+284: In_Samaritan
+285: In_Mandaic
+286: In_Syriac_Supplement
+287: In_Arabic_Extended_A
+288: In_Devanagari
+289: In_Bengali
+290: In_Gurmukhi
+291: In_Gujarati
+292: In_Oriya
+293: In_Tamil
+294: In_Telugu
+295: In_Kannada
+296: In_Malayalam
+297: In_Sinhala
+298: In_Thai
+299: In_Lao
+300: In_Tibetan
+301: In_Myanmar
+302: In_Georgian
+303: In_Hangul_Jamo
+304: In_Ethiopic
+305: In_Ethiopic_Supplement
+306: In_Cherokee
+307: In_Unified_Canadian_Aboriginal_Syllabics
+308: In_Ogham
+309: In_Runic
+310: In_Tagalog
+311: In_Hanunoo
+312: In_Buhid
+313: In_Tagbanwa
+314: In_Khmer
+315: In_Mongolian
+316: In_Unified_Canadian_Aboriginal_Syllabics_Extended
+317: In_Limbu
+318: In_Tai_Le
+319: In_New_Tai_Lue
+320: In_Khmer_Symbols
+321: In_Buginese
+322: In_Tai_Tham
+323: In_Combining_Diacritical_Marks_Extended
+324: In_Balinese
+325: In_Sundanese
+326: In_Batak
+327: In_Lepcha
+328: In_Ol_Chiki
+329: In_Cyrillic_Extended_C
+330: In_Georgian_Extended
+331: In_Sundanese_Supplement
+332: In_Vedic_Extensions
+333: In_Phonetic_Extensions
+334: In_Phonetic_Extensions_Supplement
+335: In_Combining_Diacritical_Marks_Supplement
+336: In_Latin_Extended_Additional
+337: In_Greek_Extended
+338: In_General_Punctuation
+339: In_Superscripts_and_Subscripts
+340: In_Currency_Symbols
+341: In_Combining_Diacritical_Marks_for_Symbols
+342: In_Letterlike_Symbols
+343: In_Number_Forms
+344: In_Arrows
+345: In_Mathematical_Operators
+346: In_Miscellaneous_Technical
+347: In_Control_Pictures
+348: In_Optical_Character_Recognition
+349: In_Enclosed_Alphanumerics
+350: In_Box_Drawing
+351: In_Block_Elements
+352: In_Geometric_Shapes
+353: In_Miscellaneous_Symbols
+354: In_Dingbats
+355: In_Miscellaneous_Mathematical_Symbols_A
+356: In_Supplemental_Arrows_A
+357: In_Braille_Patterns
+358: In_Supplemental_Arrows_B
+359: In_Miscellaneous_Mathematical_Symbols_B
+360: In_Supplemental_Mathematical_Operators
+361: In_Miscellaneous_Symbols_and_Arrows
+362: In_Glagolitic
+363: In_Latin_Extended_C
+364: In_Coptic
+365: In_Georgian_Supplement
+366: In_Tifinagh
+367: In_Ethiopic_Extended
+368: In_Cyrillic_Extended_A
+369: In_Supplemental_Punctuation
+370: In_CJK_Radicals_Supplement
+371: In_Kangxi_Radicals
+372: In_Ideographic_Description_Characters
+373: In_CJK_Symbols_and_Punctuation
+374: In_Hiragana
+375: In_Katakana
+376: In_Bopomofo
+377: In_Hangul_Compatibility_Jamo
+378: In_Kanbun
+379: In_Bopomofo_Extended
+380: In_CJK_Strokes
+381: In_Katakana_Phonetic_Extensions
+382: In_Enclosed_CJK_Letters_and_Months
+383: In_CJK_Compatibility
+384: In_CJK_Unified_Ideographs_Extension_A
+385: In_Yijing_Hexagram_Symbols
+386: In_CJK_Unified_Ideographs
+387: In_Yi_Syllables
+388: In_Yi_Radicals
+389: In_Lisu
+390: In_Vai
+391: In_Cyrillic_Extended_B
+392: In_Bamum
+393: In_Modifier_Tone_Letters
+394: In_Latin_Extended_D
+395: In_Syloti_Nagri
+396: In_Common_Indic_Number_Forms
+397: In_Phags_pa
+398: In_Saurashtra
+399: In_Devanagari_Extended
+400: In_Kayah_Li
+401: In_Rejang
+402: In_Hangul_Jamo_Extended_A
+403: In_Javanese
+404: In_Myanmar_Extended_B
+405: In_Cham
+406: In_Myanmar_Extended_A
+407: In_Tai_Viet
+408: In_Meetei_Mayek_Extensions
+409: In_Ethiopic_Extended_A
+410: In_Latin_Extended_E
+411: In_Cherokee_Supplement
+412: In_Meetei_Mayek
+413: In_Hangul_Syllables
+414: In_Hangul_Jamo_Extended_B
+415: In_High_Surrogates
+416: In_High_Private_Use_Surrogates
+417: In_Low_Surrogates
+418: In_Private_Use_Area
+419: In_CJK_Compatibility_Ideographs
+420: In_Alphabetic_Presentation_Forms
+421: In_Arabic_Presentation_Forms_A
+422: In_Variation_Selectors
+423: In_Vertical_Forms
+424: In_Combining_Half_Marks
+425: In_CJK_Compatibility_Forms
+426: In_Small_Form_Variants
+427: In_Arabic_Presentation_Forms_B
+428: In_Halfwidth_and_Fullwidth_Forms
+429: In_Specials
+430: In_Linear_B_Syllabary
+431: In_Linear_B_Ideograms
+432: In_Aegean_Numbers
+433: In_Ancient_Greek_Numbers
+434: In_Ancient_Symbols
+435: In_Phaistos_Disc
+436: In_Lycian
+437: In_Carian
+438: In_Coptic_Epact_Numbers
+439: In_Old_Italic
+440: In_Gothic
+441: In_Old_Permic
+442: In_Ugaritic
+443: In_Old_Persian
+444: In_Deseret
+445: In_Shavian
+446: In_Osmanya
+447: In_Osage
+448: In_Elbasan
+449: In_Caucasian_Albanian
+450: In_Linear_A
+451: In_Cypriot_Syllabary
+452: In_Imperial_Aramaic
+453: In_Palmyrene
+454: In_Nabataean
+455: In_Hatran
+456: In_Phoenician
+457: In_Lydian
+458: In_Meroitic_Hieroglyphs
+459: In_Meroitic_Cursive
+460: In_Kharoshthi
+461: In_Old_South_Arabian
+462: In_Old_North_Arabian
+463: In_Manichaean
+464: In_Avestan
+465: In_Inscriptional_Parthian
+466: In_Inscriptional_Pahlavi
+467: In_Psalter_Pahlavi
+468: In_Old_Turkic
+469: In_Old_Hungarian
+470: In_Hanifi_Rohingya
+471: In_Rumi_Numeral_Symbols
+472: In_Old_Sogdian
+473: In_Sogdian
+474: In_Elymaic
+475: In_Brahmi
+476: In_Kaithi
+477: In_Sora_Sompeng
+478: In_Chakma
+479: In_Mahajani
+480: In_Sharada
+481: In_Sinhala_Archaic_Numbers
+482: In_Khojki
+483: In_Multani
+484: In_Khudawadi
+485: In_Grantha
+486: In_Newa
+487: In_Tirhuta
+488: In_Siddham
+489: In_Modi
+490: In_Mongolian_Supplement
+491: In_Takri
+492: In_Ahom
+493: In_Dogra
+494: In_Warang_Citi
+495: In_Nandinagari
+496: In_Zanabazar_Square
+497: In_Soyombo
+498: In_Pau_Cin_Hau
+499: In_Bhaiksuki
+500: In_Marchen
+501: In_Masaram_Gondi
+502: In_Gunjala_Gondi
+503: In_Makasar
+504: In_Tamil_Supplement
+505: In_Cuneiform
+506: In_Cuneiform_Numbers_and_Punctuation
+507: In_Early_Dynastic_Cuneiform
+508: In_Egyptian_Hieroglyphs
+509: In_Egyptian_Hieroglyph_Format_Controls
+510: In_Anatolian_Hieroglyphs
+511: In_Bamum_Supplement
+512: In_Mro
+513: In_Bassa_Vah
+514: In_Pahawh_Hmong
+515: In_Medefaidrin
+516: In_Miao
+517: In_Ideographic_Symbols_and_Punctuation
+518: In_Tangut
+519: In_Tangut_Components
+520: In_Kana_Supplement
+521: In_Kana_Extended_A
+522: In_Small_Kana_Extension
+523: In_Nushu
+524: In_Duployan
+525: In_Shorthand_Format_Controls
+526: In_Byzantine_Musical_Symbols
+527: In_Musical_Symbols
+528: In_Ancient_Greek_Musical_Notation
+529: In_Mayan_Numerals
+530: In_Tai_Xuan_Jing_Symbols
+531: In_Counting_Rod_Numerals
+532: In_Mathematical_Alphanumeric_Symbols
+533: In_Sutton_SignWriting
+534: In_Glagolitic_Supplement
+535: In_Nyiakeng_Puachue_Hmong
+536: In_Wancho
+537: In_Mende_Kikakui
+538: In_Adlam
+539: In_Indic_Siyaq_Numbers
+540: In_Ottoman_Siyaq_Numbers
+541: In_Arabic_Mathematical_Alphabetic_Symbols
+542: In_Mahjong_Tiles
+543: In_Domino_Tiles
+544: In_Playing_Cards
+545: In_Enclosed_Alphanumeric_Supplement
+546: In_Enclosed_Ideographic_Supplement
+547: In_Miscellaneous_Symbols_and_Pictographs
+548: In_Emoticons
+549: In_Ornamental_Dingbats
+550: In_Transport_and_Map_Symbols
+551: In_Alchemical_Symbols
+552: In_Geometric_Shapes_Extended
+553: In_Supplemental_Arrows_C
+554: In_Supplemental_Symbols_and_Pictographs
+555: In_Chess_Symbols
+556: In_Symbols_and_Pictographs_Extended_A
+557: In_CJK_Unified_Ideographs_Extension_B
+558: In_CJK_Unified_Ideographs_Extension_C
+559: In_CJK_Unified_Ideographs_Extension_D
+560: In_CJK_Unified_Ideographs_Extension_E
+561: In_CJK_Unified_Ideographs_Extension_F
+562: In_CJK_Compatibility_Ideographs_Supplement
+563: In_Tags
+564: In_Variation_Selectors_Supplement
+565: In_Supplementary_Private_Use_Area_A
+566: In_Supplementary_Private_Use_Area_B
+567: In_No_Block
index 5ad823180dedb5e84ba1d1c8b9b0c595a30935e2..58ba66d3bde36619877892fc7b1c3869239e73bd 100755 (executable)
@@ -8,7 +8,7 @@
 <h1>Oniguruma</h1> (<a href="index_ja.html">Japanese</a>)
 
 <p>
-(c) K.Kosako, updated at: 2018/12/06
+(c) K.Kosako, updated at: 2019/08/05
 </p>
 
 <dl>
@@ -16,6 +16,8 @@
 <dt><b>What's new</b>
 </font>
 <ul>
+<li>2019/08/06: Version 6.9.3 released.</li>
+<li>2019/05/07: Version 6.9.2 released.</li>
 <li>2018/12/11: Version 6.9.1 released.</li>
 <li>2018/09/03: Version 6.9.0 released.</li>
 <li>2018/04/17: Version 6.8.2 released.</li>
index 0ada7880ef2b1cf280cbf052574c45b8e1d70aed..6b75c6c2ceb2f7e7023daec6de9e18a309a9d05d 100644 (file)
@@ -8,7 +8,7 @@
 <h1>鬼車</h1>
 
 <p>
-(c) K.Kosako, 最終更新: 2018/12/06
+(c) K.Kosako, 最終更新: 2019/08/05
 </p>
 
 <dl>
@@ -16,6 +16,8 @@
 <dt><b>更新情報</b>
 </font>
 <ul>
+<li>2019/08/06: Version 6.9.3 リリース</li>
+<li>2019/05/07: Version 6.9.2 リリース</li>
 <li>2018/12/11: Version 6.9.1 リリース</li>
 <li>2018/09/03: Version 6.9.0 リリース</li>
 <li>2018/04/17: Version 6.8.2 リリース</li>
index f931ade2950575684e7cfdbab34e6d0c2d11ab81..ff8bd3bdf032f29d491fc4a904738c55b207cf76 100644 (file)
@@ -102,7 +102,7 @@ big5_mbc_case_fold(OnigCaseFoldType flag, const UChar** pp, const UChar* end,
 #if 0
 static int
 big5_is_mbc_ambiguous(OnigCaseFoldType flag,
-                     const UChar** pp, const UChar* end)
+                      const UChar** pp, const UChar* end)
 {
   return onigenc_mbn_is_mbc_ambiguous(ONIG_ENCODING_BIG5, flag, pp, end);
 }
@@ -148,8 +148,8 @@ big5_left_adjust_char_head(const UChar* start, const UChar* s)
   if (BIG5_ISMB_TRAIL(*p)) {
     while (p > start) {
       if (! BIG5_ISMB_FIRST(*--p)) {
-       p++;
-       break;
+        p++;
+        break;
       }
     }
   }
index 7b19855c5cf543b77117954a8ecacfea537020f4..b4ce4d8a6a2a24002b5bef1440f64a41b364a3e7 100644 (file)
@@ -164,7 +164,7 @@ static const OnigPairCaseFoldCodes CaseFoldMap[] = {
 
 static int
 cp1251_apply_all_case_fold(OnigCaseFoldType flag,
-                              OnigApplyAllCaseFoldFunc f, void* arg)
+                           OnigApplyAllCaseFoldFunc f, void* arg)
 {
   return onigenc_apply_all_case_fold_with_map(
              sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 0,
@@ -176,8 +176,8 @@ cp1251_get_case_fold_codes_by_str(OnigCaseFoldType flag,
     const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[])
 {
   return onigenc_get_case_fold_codes_by_str_with_map(
-            sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 0,
-            flag, p, end, items);
+                 sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 0,
+                 flag, p, end, items);
 }
 
 OnigEncodingType OnigEncodingCP1251 = {
index c1ab89ef04b631fcdf42702991ffccf47e12473a..d17386d5f447c179c31617658adfa916eaeda6fd 100644 (file)
@@ -157,7 +157,7 @@ code_to_mbc(OnigCodePoint code, UChar *buf)
 
 static int
 mbc_case_fold(OnigCaseFoldType flag ARG_UNUSED,
-             const UChar** pp, const UChar* end ARG_UNUSED, UChar* lower)
+              const UChar** pp, const UChar* end ARG_UNUSED, UChar* lower)
 {
   int len;
   const UChar* p = *pp;
@@ -269,7 +269,7 @@ is_code_ctype(OnigCodePoint code, unsigned int ctype)
 
 static int
 get_ctype_code_range(OnigCtype ctype, OnigCodePoint* sb_out,
-                    const OnigCodePoint* ranges[])
+                     const OnigCodePoint* ranges[])
 {
   if (ctype <= ONIGENC_MAX_STD_CTYPE) {
     return ONIG_NO_SUPPORT_CONFIG;
index 3f84aef46bda607a6664ae37436766c738fe8275..be719cf3fe54e14097c17f3cf74f72e260007433 100644 (file)
@@ -1,5 +1,5 @@
 /* ANSI-C code produced by gperf version 3.1 */
-/* Command-line: /usr/bin/gperf -pt -T -L ANSI-C -N onigenc_euc_jp_lookup_property_name --output-file gperf1.tmp euc_jp_prop.gperf  */
+/* Command-line: /usr/local/bin/gperf -pt -T -L ANSI-C -N onigenc_euc_jp_lookup_property_name --output-file gperf1.tmp euc_jp_prop.gperf  */
 /* Computed positions: -k'1,3' */
 
 #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
index 9b625146653752fd220a91df2afcf4b2816f1d8e..bb968b0b67d30f57598237468aca299821620c63 100644 (file)
@@ -68,7 +68,7 @@ is_valid_mbc_string(const UChar* p, const UChar* end)
       p++;
       if (p >= end) return FALSE;
       if (*p < 0xa1 || *p == 0xff)
-       return FALSE;
+        return FALSE;
       p++;
     }
     else
@@ -101,7 +101,7 @@ euckr_mbc_case_fold(OnigCaseFoldType flag, const UChar** pp, const UChar* end,
 #if 0
 static int
 euckr_is_mbc_ambiguous(OnigCaseFoldType flag,
-                      const UChar** pp, const UChar* end)
+                       const UChar** pp, const UChar* end)
 {
   return onigenc_mbn_is_mbc_ambiguous(ONIG_ENCODING_EUC_KR, flag, pp, end);
 }
index 76833364cfa9a13c69f5de7fac5d0b3b9e03ea83..c9acaf18b07aafbbdd7c197491e013ed2bacd8a3 100644 (file)
@@ -63,27 +63,27 @@ is_valid_mbc_string(const UChar* p, const UChar* end)
     }
     else if (*p < 0xa1) {
       if (*p == 0x8e) {
-       p++;
-       if (p >= end) return FALSE;
-       if (*p < 0xa1 || *p > 0xb0) return FALSE;
-       p++;
-       if (p >= end) return FALSE;
-       if (*p < 0xa1 || *p == 0xff)
-         return FALSE;
-       p++;
-       if (p >= end) return FALSE;
-       if (*p < 0xa1 || *p == 0xff)
-         return FALSE;
-       p++;
+        p++;
+        if (p >= end) return FALSE;
+        if (*p < 0xa1 || *p > 0xb0) return FALSE;
+        p++;
+        if (p >= end) return FALSE;
+        if (*p < 0xa1 || *p == 0xff)
+          return FALSE;
+        p++;
+        if (p >= end) return FALSE;
+        if (*p < 0xa1 || *p == 0xff)
+          return FALSE;
+        p++;
       }
       else
-       return FALSE;
+        return FALSE;
     }
     else if (*p < 0xff) {
       p++;
       if (p >= end) return FALSE;
       if (*p < 0xa1 || *p == 0xff)
-       return FALSE;
+        return FALSE;
       p++;
     }
     else
index 76544327e76922512c72d00cbd9febb2d5e92454..8d415b0080ad252973acec66957beb0882384abb 100644 (file)
@@ -2,7 +2,7 @@
   gb18030.c -  Oniguruma (regular expression library)
 **********************************************************************/
 /*-
- * Copyright (c) 2005-2018  KUBO Takehiro <kubo AT jiubao DOT org>
+ * Copyright (c) 2005-2019  KUBO Takehiro <kubo AT jiubao DOT org>
  *                          K.Kosako <sndgk393 AT ybb DOT ne DOT jp>
  * All rights reserved.
  *
@@ -67,11 +67,11 @@ gb18030_mbc_enc_len(const UChar* p)
 {
   if (GB18030_MAP[*p] != CM)
     return 1;
+
   p++;
   if (GB18030_MAP[*p] == C4)
     return 4;
-  if (GB18030_MAP[*p] == C1)
-    return 1; /* illegal sequence */
+
   return 2;
 }
 
index 0ce70a62c7fc893482f8cb1b343da24979376b3d..3b6494256fb9d94513646630c0d57728d531b017 100644 (file)
@@ -103,7 +103,7 @@ static const OnigPairCaseFoldCodes CaseFoldMap[] = {
 
 static int
 apply_all_case_fold(OnigCaseFoldType flag,
-                   OnigApplyAllCaseFoldFunc f, void* arg)
+                    OnigApplyAllCaseFoldFunc f, void* arg)
 {
   return onigenc_apply_all_case_fold_with_map(
             sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 1,
@@ -112,15 +112,15 @@ apply_all_case_fold(OnigCaseFoldType flag,
 
 static int
 get_case_fold_codes_by_str(OnigCaseFoldType flag ARG_UNUSED,
-                          const OnigUChar* p, const OnigUChar* end,
-                          OnigCaseFoldCodeItem items[])
+                           const OnigUChar* p, const OnigUChar* end,
+                           OnigCaseFoldCodeItem items[])
 {
   if (0x41 <= *p && *p <= 0x5a) {
     items[0].byte_len = 1;
     items[0].code_len = 1;
     items[0].code[0] = (OnigCodePoint )(*p + 0x20);
     if (*p == 0x53 && end > p + 1
-       && (*(p+1) == 0x53 || *(p+1) == 0x73)) { /* SS */
+        && (*(p+1) == 0x53 || *(p+1) == 0x73)) { /* SS */
       items[1].byte_len = 2;
       items[1].code_len = 1;
       items[1].code[0] = (OnigCodePoint )0xdf;
@@ -134,7 +134,7 @@ get_case_fold_codes_by_str(OnigCaseFoldType flag ARG_UNUSED,
     items[0].code_len = 1;
     items[0].code[0] = (OnigCodePoint )(*p - 0x20);
     if (*p == 0x73 && end > p + 1
-       && (*(p+1) == 0x73 || *(p+1) == 0x53)) { /* ss */
+        && (*(p+1) == 0x73 || *(p+1) == 0x53)) { /* ss */
       items[1].byte_len = 2;
       items[1].code_len = 1;
       items[1].code[0] = (OnigCodePoint )0xdf;
@@ -200,7 +200,7 @@ get_case_fold_codes_by_str(OnigCaseFoldType flag ARG_UNUSED,
 
 static int
 mbc_case_fold(OnigCaseFoldType flag, const UChar** pp,
-             const UChar* end ARG_UNUSED, UChar* lower)
+              const UChar* end ARG_UNUSED, UChar* lower)
 {
   const UChar* p = *pp;
 
@@ -218,8 +218,7 @@ mbc_case_fold(OnigCaseFoldType flag, const UChar** pp,
 
 #if 0
 static int
-is_mbc_ambiguous(OnigCaseFoldType flag,
-                const UChar** pp, const UChar* end)
+is_mbc_ambiguous(OnigCaseFoldType flag, const UChar** pp, const UChar* end)
 {
   int v;
   const UChar* p = *pp;
index 4a34b3887087f00253836d736db05e2ac21435a6..f5882bc3c9d1002667ea41ed579a6509ef8b2259 100644 (file)
@@ -105,7 +105,7 @@ static const unsigned short EncISO_8859_10_CtypeTable[256] = {
 
 static int
 mbc_case_fold(OnigCaseFoldType flag,
-             const UChar** pp, const UChar* end ARG_UNUSED, UChar* lower)
+              const UChar** pp, const UChar* end ARG_UNUSED, UChar* lower)
 {
   const UChar* p = *pp;
 
@@ -203,7 +203,7 @@ static const OnigPairCaseFoldCodes CaseFoldMap[] = {
 
 static int
 apply_all_case_fold(OnigCaseFoldType flag,
-                   OnigApplyAllCaseFoldFunc f, void* arg)
+                    OnigApplyAllCaseFoldFunc f, void* arg)
 {
   return onigenc_apply_all_case_fold_with_map(
              sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 1,
@@ -215,8 +215,8 @@ get_case_fold_codes_by_str(OnigCaseFoldType flag,
     const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[])
 {
   return onigenc_get_case_fold_codes_by_str_with_map(
-            sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 1,
-            flag, p, end, items);
+                 sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 1,
+                 flag, p, end, items);
 }
 
 OnigEncodingType OnigEncodingISO_8859_10 = {
index 23a0265d4cf5ed2d6bfad7d569776ab045cf5a0b..0cf251cd35b50e3861b4913daaf043368fd7ca02 100644 (file)
@@ -105,7 +105,7 @@ static const unsigned short EncISO_8859_13_CtypeTable[256] = {
 
 static int
 mbc_case_fold(OnigCaseFoldType flag,
-             const UChar** pp, const UChar* end ARG_UNUSED, UChar* lower)
+              const UChar** pp, const UChar* end ARG_UNUSED, UChar* lower)
 {
   const UChar* p = *pp;
 
@@ -192,7 +192,7 @@ static const OnigPairCaseFoldCodes CaseFoldMap[] = {
 
 static int
 apply_all_case_fold(OnigCaseFoldType flag,
-                   OnigApplyAllCaseFoldFunc f, void* arg)
+                    OnigApplyAllCaseFoldFunc f, void* arg)
 {
   return onigenc_apply_all_case_fold_with_map(
              sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 1,
@@ -204,8 +204,8 @@ get_case_fold_codes_by_str(OnigCaseFoldType flag,
    const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[])
 {
   return onigenc_get_case_fold_codes_by_str_with_map(
-            sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 1,
-            flag, p, end, items);
+                 sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 1,
+                 flag, p, end, items);
 }
 
 OnigEncodingType OnigEncodingISO_8859_13 = {
index 7281e93fde7e30a48594446f77c7a4941a237bea..030e9f5ef692d083fb207eb1eb24f3e1c1da2427 100644 (file)
@@ -105,7 +105,7 @@ static const unsigned short EncISO_8859_14_CtypeTable[256] = {
 
 static int
 mbc_case_fold(OnigCaseFoldType flag,
-             const UChar** pp, const UChar* end ARG_UNUSED, UChar* lower)
+              const UChar** pp, const UChar* end ARG_UNUSED, UChar* lower)
 {
   const UChar* p = *pp;
 
@@ -124,7 +124,7 @@ mbc_case_fold(OnigCaseFoldType flag,
 #if 0
 static int
 is_mbc_ambiguous(OnigCaseFoldType flag,
-                const UChar** pp, const UChar* end)
+                 const UChar** pp, const UChar* end)
 {
   int v;
   const UChar* p = *pp;
@@ -205,7 +205,7 @@ static const OnigPairCaseFoldCodes CaseFoldMap[] = {
 
 static int
 apply_all_case_fold(OnigCaseFoldType flag,
-                   OnigApplyAllCaseFoldFunc f, void* arg)
+                    OnigApplyAllCaseFoldFunc f, void* arg)
 {
   return onigenc_apply_all_case_fold_with_map(
              sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 1,
@@ -217,8 +217,8 @@ get_case_fold_codes_by_str(OnigCaseFoldType flag,
     const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[])
 {
   return onigenc_get_case_fold_codes_by_str_with_map(
-            sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 1,
-            flag, p, end, items);
+                 sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 1,
+                 flag, p, end, items);
 }
 
 OnigEncodingType OnigEncodingISO_8859_14 = {
index 3d9f571248930eb6b649d6ddd9f12009551ff495..859d727b8fc0093cd6498e8ed7654d264a2921c3 100644 (file)
@@ -105,7 +105,7 @@ static const unsigned short EncISO_8859_15_CtypeTable[256] = {
 
 static int
 mbc_case_fold(OnigCaseFoldType flag,
-             const UChar** pp, const UChar* end ARG_UNUSED, UChar* lower)
+              const UChar** pp, const UChar* end ARG_UNUSED, UChar* lower)
 {
   const UChar* p = *pp;
 
@@ -123,8 +123,7 @@ mbc_case_fold(OnigCaseFoldType flag,
 
 #if 0
 static int
-is_mbc_ambiguous(OnigCaseFoldType flag,
-                const UChar** pp, const UChar* end)
+is_mbc_ambiguous(OnigCaseFoldType flag, const UChar** pp, const UChar* end)
 {
   int v;
   const UChar* p = *pp;
@@ -199,7 +198,7 @@ static const OnigPairCaseFoldCodes CaseFoldMap[] = {
 
 static int
 apply_all_case_fold(OnigCaseFoldType flag,
-                   OnigApplyAllCaseFoldFunc f, void* arg)
+                    OnigApplyAllCaseFoldFunc f, void* arg)
 {
   return onigenc_apply_all_case_fold_with_map(
              sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 1,
@@ -211,8 +210,8 @@ get_case_fold_codes_by_str(OnigCaseFoldType flag,
     const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[])
 {
   return onigenc_get_case_fold_codes_by_str_with_map(
-            sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 1,
-            flag, p, end, items);
+                 sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 1,
+                 flag, p, end, items);
 }
 
 OnigEncodingType OnigEncodingISO_8859_15 = {
index a6977dd328ac08a203a5a7de57bf5b72b51d795b..2614e567f47b976f897060afc6dbfb5947d150ce 100644 (file)
@@ -105,7 +105,7 @@ static const unsigned short EncISO_8859_16_CtypeTable[256] = {
 
 static int
 mbc_case_fold(OnigCaseFoldType flag,
-             const UChar** pp, const UChar* end ARG_UNUSED, UChar* lower)
+              const UChar** pp, const UChar* end ARG_UNUSED, UChar* lower)
 {
   const UChar* p = *pp;
 
@@ -201,7 +201,7 @@ static const OnigPairCaseFoldCodes CaseFoldMap[] = {
 
 static int
 apply_all_case_fold(OnigCaseFoldType flag,
-                   OnigApplyAllCaseFoldFunc f, void* arg)
+                    OnigApplyAllCaseFoldFunc f, void* arg)
 {
   return onigenc_apply_all_case_fold_with_map(
              sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 1,
@@ -213,8 +213,8 @@ get_case_fold_codes_by_str(OnigCaseFoldType flag,
     const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[])
 {
   return onigenc_get_case_fold_codes_by_str_with_map(
-            sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 1,
-            flag, p, end, items);
+                 sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 1,
+                 flag, p, end, items);
 }
 
 OnigEncodingType OnigEncodingISO_8859_16 = {
index 4f994c427e07bcf814002562bbe97a9c3130159a..ba030d5d35a98cdaccdcfbf846ecc46e4cae0b5e 100644 (file)
@@ -105,7 +105,7 @@ static const unsigned short EncISO_8859_2_CtypeTable[256] = {
 
 static int
 mbc_case_fold(OnigCaseFoldType flag,
-             const UChar** pp, const UChar* end ARG_UNUSED, UChar* lower)
+              const UChar** pp, const UChar* end ARG_UNUSED, UChar* lower)
 {
   const UChar* p = *pp;
 
@@ -190,7 +190,7 @@ static const OnigPairCaseFoldCodes CaseFoldMap[] = {
 
 static int
 apply_all_case_fold(OnigCaseFoldType flag,
-                   OnigApplyAllCaseFoldFunc f, void* arg)
+                    OnigApplyAllCaseFoldFunc f, void* arg)
 {
   return onigenc_apply_all_case_fold_with_map(
             sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 1,
@@ -202,8 +202,8 @@ get_case_fold_codes_by_str(OnigCaseFoldType flag,
     const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[])
 {
   return onigenc_get_case_fold_codes_by_str_with_map(
-            sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 1,
-            flag, p, end, items);
+                 sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 1,
+                 flag, p, end, items);
 }
 
 static int
index 944a7ae64ec2fd6f96145897b0136ed0ef311fd5..f090d0bbd003248cb49555ad06e7250769ec7dcd 100644 (file)
@@ -105,7 +105,7 @@ static const unsigned short EncISO_8859_3_CtypeTable[256] = {
 
 static int
 mbc_case_fold(OnigCaseFoldType flag, const UChar** pp,
-             const UChar* end ARG_UNUSED, UChar* lower)
+              const UChar* end ARG_UNUSED, UChar* lower)
 {
   const UChar* p = *pp;
 
@@ -199,7 +199,7 @@ static const OnigPairCaseFoldCodes CaseFoldMap[] = {
 
 static int
 apply_all_case_fold(OnigCaseFoldType flag,
-                   OnigApplyAllCaseFoldFunc f, void* arg)
+                    OnigApplyAllCaseFoldFunc f, void* arg)
 {
   return onigenc_apply_all_case_fold_with_map(
              sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 1,
@@ -211,8 +211,8 @@ get_case_fold_codes_by_str(OnigCaseFoldType flag,
    const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[])
 {
   return onigenc_get_case_fold_codes_by_str_with_map(
-            sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 1,
-            flag, p, end, items);
+                 sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 1,
+                 flag, p, end, items);
 }
 
 OnigEncodingType OnigEncodingISO_8859_3 = {
index 3a7c210929c4c45978cf9c6f490fa2c36b14481b..57dc9fe104637a941dbc29b3eacf62fc3ed0a22c 100644 (file)
@@ -105,7 +105,7 @@ static const unsigned short EncISO_8859_4_CtypeTable[256] = {
 
 static int
 mbc_case_fold(OnigCaseFoldType flag,
-             const UChar** pp, const UChar* end ARG_UNUSED, UChar* lower)
+              const UChar** pp, const UChar* end ARG_UNUSED, UChar* lower)
 {
   const UChar* p = *pp;
 
@@ -201,7 +201,7 @@ static const OnigPairCaseFoldCodes CaseFoldMap[] = {
 
 static int
 apply_all_case_fold(OnigCaseFoldType flag,
-                   OnigApplyAllCaseFoldFunc f, void* arg)
+                    OnigApplyAllCaseFoldFunc f, void* arg)
 {
   return onigenc_apply_all_case_fold_with_map(
              sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 1,
@@ -213,8 +213,8 @@ get_case_fold_codes_by_str(OnigCaseFoldType flag,
     const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[])
 {
   return onigenc_get_case_fold_codes_by_str_with_map(
-            sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 1,
-            flag, p, end, items);
+                 sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 1,
+                 flag, p, end, items);
 }
 
 OnigEncodingType OnigEncodingISO_8859_4 = {
index 0a8b7ec8d8b73184314f9a741da4c3660ede9e6a..a090d257c5d851bb3c901028ad878dd4fc043eca 100644 (file)
@@ -105,7 +105,7 @@ static const unsigned short EncISO_8859_5_CtypeTable[256] = {
 
 static int
 mbc_case_fold(OnigCaseFoldType flag ARG_UNUSED,
-             const UChar** pp, const UChar* end ARG_UNUSED, UChar* lower)
+              const UChar** pp, const UChar* end ARG_UNUSED, UChar* lower)
 {
   const UChar* p = *pp;
 
@@ -189,7 +189,7 @@ static const OnigPairCaseFoldCodes CaseFoldMap[] = {
 
 static int
 apply_all_case_fold(OnigCaseFoldType flag,
-                   OnigApplyAllCaseFoldFunc f, void* arg)
+                    OnigApplyAllCaseFoldFunc f, void* arg)
 {
   return onigenc_apply_all_case_fold_with_map(
              sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 0,
@@ -198,12 +198,12 @@ apply_all_case_fold(OnigCaseFoldType flag,
 
 static int
 get_case_fold_codes_by_str(OnigCaseFoldType flag,
-                          const OnigUChar* p, const OnigUChar* end,
-                          OnigCaseFoldCodeItem items[])
+                           const OnigUChar* p, const OnigUChar* end,
+                           OnigCaseFoldCodeItem items[])
 {
   return onigenc_get_case_fold_codes_by_str_with_map(
-            sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 0,
-            flag, p, end, items);
+                 sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 0,
+                 flag, p, end, items);
 }
 
 OnigEncodingType OnigEncodingISO_8859_5 = {
index 0877b6fe998c7345a07de60ee02f39c39b5d3cab..8c8835176f641c66e63752369a18c4bcae80e5c9 100644 (file)
@@ -105,7 +105,7 @@ static const unsigned short EncISO_8859_7_CtypeTable[256] = {
 
 static int
 mbc_case_fold(OnigCaseFoldType flag ARG_UNUSED,
-             const UChar** pp, const UChar* end ARG_UNUSED, UChar* lower)
+              const UChar** pp, const UChar* end ARG_UNUSED, UChar* lower)
 {
   const UChar* p = *pp;
 
@@ -116,8 +116,7 @@ mbc_case_fold(OnigCaseFoldType flag ARG_UNUSED,
 
 #if 0
 static int
-is_mbc_ambiguous(OnigCaseFoldType flag,
-                const UChar** pp, const UChar* end)
+is_mbc_ambiguous(OnigCaseFoldType flag, const UChar** pp, const UChar* end)
 {
   int v;
   const UChar* p = *pp;
@@ -185,7 +184,7 @@ static const OnigPairCaseFoldCodes CaseFoldMap[] = {
 
 static int
 apply_all_case_fold(OnigCaseFoldType flag,
-                   OnigApplyAllCaseFoldFunc f, void* arg)
+                    OnigApplyAllCaseFoldFunc f, void* arg)
 {
   return onigenc_apply_all_case_fold_with_map(
              sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 0,
@@ -197,8 +196,8 @@ get_case_fold_codes_by_str(OnigCaseFoldType flag,
    const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[])
 {
   return onigenc_get_case_fold_codes_by_str_with_map(
-            sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 0,
-            flag, p, end, items);
+                 sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 0,
+                 flag, p, end, items);
 }
 
 
index 8819f4a4728fc016237646b67872d9c50908190c..1d291d5010d2de9566055d5c04e943627a175407 100644 (file)
@@ -105,7 +105,7 @@ static const unsigned short EncISO_8859_9_CtypeTable[256] = {
 
 static int
 mbc_case_fold(OnigCaseFoldType flag,
-             const UChar** pp, const UChar* end ARG_UNUSED, UChar* lower)
+              const UChar** pp, const UChar* end ARG_UNUSED, UChar* lower)
 {
   const UChar* p = *pp;
 
@@ -192,7 +192,7 @@ static const OnigPairCaseFoldCodes CaseFoldMap[] = {
 
 static int
 apply_all_case_fold(OnigCaseFoldType flag,
-                   OnigApplyAllCaseFoldFunc f, void* arg)
+                    OnigApplyAllCaseFoldFunc f, void* arg)
 {
   return onigenc_apply_all_case_fold_with_map(
              sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 1,
@@ -204,8 +204,8 @@ get_case_fold_codes_by_str(OnigCaseFoldType flag,
     const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[])
 {
   return onigenc_get_case_fold_codes_by_str_with_map(
-            sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 1,
-            flag, p, end, items);
+                 sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 1,
+                 flag, p, end, items);
 }
 
 OnigEncodingType OnigEncodingISO_8859_9 = {
index 7ce965fc59e74de3b3cf7e5248704da58852ce05..94c95a0ef2f44a7e891bbd7abf167359fc60a19c 100644 (file)
@@ -106,7 +106,7 @@ static const unsigned short EncKOI8_CtypeTable[256] = {
 
 static int
 koi8_mbc_case_fold(OnigCaseFoldType flag ARG_UNUSED,
-          const UChar** pp, const UChar* end ARG_UNUSED, UChar* lower)
+                   const UChar** pp, const UChar* end ARG_UNUSED, UChar* lower)
 {
   const UChar* p = *pp;
 
@@ -214,7 +214,7 @@ static const OnigPairCaseFoldCodes CaseFoldMap[] = {
 
 static int
 koi8_apply_all_case_fold(OnigCaseFoldType flag,
-                        OnigApplyAllCaseFoldFunc f, void* arg)
+                         OnigApplyAllCaseFoldFunc f, void* arg)
 {
   return onigenc_apply_all_case_fold_with_map(
              sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 0,
@@ -226,8 +226,8 @@ koi8_get_case_fold_codes_by_str(OnigCaseFoldType flag,
     const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[])
 {
   return onigenc_get_case_fold_codes_by_str_with_map(
-            sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 0,
-            flag, p, end, items);
+                 sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 0,
+                 flag, p, end, items);
 }
 
 OnigEncodingType OnigEncodingKOI8 = {
index 5994ebe51c4dbe47295c95690d0099fc235aa2cb..1284f7f2cc5e594fdf8a62fd846ec7aff2753745 100644 (file)
@@ -176,7 +176,7 @@ static const OnigPairCaseFoldCodes CaseFoldMap[] = {
 
 static int
 koi8_r_apply_all_case_fold(OnigCaseFoldType flag,
-                              OnigApplyAllCaseFoldFunc f, void* arg)
+                           OnigApplyAllCaseFoldFunc f, void* arg)
 {
   return onigenc_apply_all_case_fold_with_map(
              sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 0,
@@ -188,8 +188,8 @@ koi8_r_get_case_fold_codes_by_str(OnigCaseFoldType flag,
     const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[])
 {
   return onigenc_get_case_fold_codes_by_str_with_map(
-            sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 0,
-            flag, p, end, items);
+                 sizeof(CaseFoldMap)/sizeof(OnigPairCaseFoldCodes), CaseFoldMap, 0,
+                 flag, p, end, items);
 }
 
 OnigEncodingType OnigEncodingKOI8_R = {
index a9cac2c40abca8e36fc852bf0d158475edc0ed2b..80ac08af24b9eb30ec1cdf944579c9957caed3e6 100644 (file)
@@ -2,7 +2,7 @@
   mktable.c
 **********************************************************************/
 /*-
- * Copyright (c) 2002-2016  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2019  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -269,7 +269,7 @@ static int IsBlank(int enc, int c)
   if (enc == ASCII)
     return isblank(c);
 
-  if (c == 0x09        || c == 0x20) return 1;
+  if (c == 0x09 || c == 0x20) return 1;
 
   switch (enc) {
   case UNICODE_ISO_8859_1:
@@ -308,7 +308,7 @@ static int IsCntrl(int enc, int c)
   if (enc == ASCII)
     return iscntrl(c);
 
-  if (c >= 0x00        && c <= 0x1F) return 1;
+  if (c >= 0x00 && c <= 0x1F) return 1;
 
   switch (enc) {
   case UNICODE_ISO_8859_1:
@@ -376,10 +376,10 @@ static int IsGraph(int enc, int c)
   case ISO_8859_3:
     if (c >= 0xa1) {
       if (c == 0xa5 || c == 0xae || c == 0xbe || c == 0xc3 || c == 0xd0 ||
-         c == 0xe3 || c == 0xf0)
-       return 0;
+          c == 0xe3 || c == 0xf0)
+        return 0;
       else
-       return 1;
+        return 1;
     }
     break;
 
@@ -392,8 +392,8 @@ static int IsGraph(int enc, int c)
 
   case ISO_8859_7:
     if (c >= 0xa1 && c <= 0xfe &&
-       c != 0xa4 && c != 0xa5 && c != 0xaa &&
-       c != 0xae && c != 0xd2) return 1;
+        c != 0xa4 && c != 0xa5 && c != 0xaa &&
+        c != 0xae && c != 0xd2) return 1;
     break;
 
   case ISO_8859_8:
@@ -583,10 +583,10 @@ static int IsPrint(int enc, int c)
   case ISO_8859_3:
     if (c >= 0xa0) {
       if (c == 0xa5 || c == 0xae || c == 0xbe || c == 0xc3 || c == 0xd0 ||
-         c == 0xe3 || c == 0xf0)
-       return 0;
+          c == 0xe3 || c == 0xf0)
+        return 0;
       else
-       return 1;
+        return 1;
     }
     break;
 
@@ -600,8 +600,8 @@ static int IsPrint(int enc, int c)
 
   case ISO_8859_7:
     if (c >= 0xa0 && c <= 0xfe &&
-       c != 0xa4 && c != 0xa5 && c != 0xaa &&
-       c != 0xae && c != 0xd2) return 1;
+        c != 0xa4 && c != 0xa5 && c != 0xaa &&
+        c != 0xae && c != 0xd2) return 1;
     break;
 
   case ISO_8859_8:
@@ -1012,7 +1012,7 @@ static int IsWord(int enc, int c)
   case ISO_8859_10:
     if (c >= 0xa1 && c <= 0xff) {
       if (c != 0xa7 && c != 0xad && c != 0xb0 && c != 0xb7 && c != 0xbd)
-       return 1;
+        return 1;
     }
     break;
 
@@ -1037,7 +1037,7 @@ static int IsWord(int enc, int c)
   case ISO_8859_14:
     if (c >= 0xa1 && c <= 0xff) {
       if (c == 0xa3 || c == 0xa7 || c == 0xa9 || c == 0xad || c == 0xae ||
-         c == 0xb6) return 0;
+          c == 0xb6) return 0;
       return 1;
     }
     break;
index 746445adcb07378dcc344e6b6891277736f6059f..90cf2d9f1c3eab194737a86d4311860fa1ae1978 100644 (file)
@@ -4,7 +4,7 @@
   oniguruma.h - Oniguruma (regular expression library)
 **********************************************************************/
 /*-
- * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2019  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -36,9 +36,9 @@ extern "C" {
 #define ONIGURUMA
 #define ONIGURUMA_VERSION_MAJOR   6
 #define ONIGURUMA_VERSION_MINOR   9
-#define ONIGURUMA_VERSION_TEENY   1
+#define ONIGURUMA_VERSION_TEENY   3
 
-#define ONIGURUMA_VERSION_INT     60901
+#define ONIGURUMA_VERSION_INT     60903
 
 #ifndef P_
 #if defined(__STDC__) || defined(_WIN32)
@@ -52,6 +52,7 @@ extern "C" {
 # define PV_(args) args
 #endif
 
+#ifndef ONIG_STATIC
 #ifndef ONIG_EXTERN
 #if defined(_WIN32) && !defined(__GNUC__)
 #if defined(ONIGURUMA_EXPORT)
@@ -65,6 +66,9 @@ extern "C" {
 #ifndef ONIG_EXTERN
 #define ONIG_EXTERN   extern
 #endif
+#else
+#define ONIG_EXTERN   extern
+#endif
 
 /* PART: character encoding */
 
@@ -385,8 +389,10 @@ typedef unsigned int        OnigOptionType;
 #define ONIG_OPTION_DIGIT_IS_ASCII       (ONIG_OPTION_WORD_IS_ASCII << 1)
 #define ONIG_OPTION_SPACE_IS_ASCII       (ONIG_OPTION_DIGIT_IS_ASCII << 1)
 #define ONIG_OPTION_POSIX_IS_ASCII       (ONIG_OPTION_SPACE_IS_ASCII << 1)
+#define ONIG_OPTION_TEXT_SEGMENT_EXTENDED_GRAPHEME_CLUSTER  (ONIG_OPTION_POSIX_IS_ASCII << 1)
+#define ONIG_OPTION_TEXT_SEGMENT_WORD    (ONIG_OPTION_TEXT_SEGMENT_EXTENDED_GRAPHEME_CLUSTER << 1)
 
-#define ONIG_OPTION_MAXBIT               ONIG_OPTION_POSIX_IS_ASCII  /* limit */
+#define ONIG_OPTION_MAXBIT               ONIG_OPTION_TEXT_SEGMENT_WORD  /* limit */
 
 #define ONIG_OPTION_ON(options,regopt)      ((options) |= (regopt))
 #define ONIG_OPTION_OFF(options,regopt)     ((options) &= ~(regopt))
@@ -490,10 +496,12 @@ ONIG_EXTERN OnigSyntaxType*   OnigDefaultSyntax;
 #define ONIG_SYN_OP2_ESC_CAPITAL_R_GENERAL_NEWLINE (1U<<23) /* \R \r\n else [\x0a-\x0d] */
 #define ONIG_SYN_OP2_ESC_CAPITAL_N_O_SUPER_DOT  (1U<<24) /* \N (?-m:.), \O (?m:.) */
 #define ONIG_SYN_OP2_QMARK_TILDE_ABSENT_GROUP   (1U<<25) /* (?~...) */
-#define ONIG_SYN_OP2_ESC_X_Y_GRAPHEME_CLUSTER   (1U<<26) /* \X \y \Y */
+#define ONIG_SYN_OP2_ESC_X_Y_GRAPHEME_CLUSTER   (1U<<26) /* obsoleted: use next */
+#define ONIG_SYN_OP2_ESC_X_Y_TEXT_SEGMENT       (1U<<26) /* \X \y \Y */
 #define ONIG_SYN_OP2_QMARK_PERL_SUBEXP_CALL     (1U<<27) /* (?R), (?&name)... */
 #define ONIG_SYN_OP2_QMARK_BRACE_CALLOUT_CONTENTS (1U<<28) /* (?{...}) (?{{...}}) */
 #define ONIG_SYN_OP2_ASTERISK_CALLOUT_NAME      (1U<<29) /* (*name) (*name{a,..}) */
+#define ONIG_SYN_OP2_OPTION_ONIGURUMA           (1U<<30) /* (?imxWDSPy) */
 
 /* syntax (behavior) */
 #define ONIG_SYN_CONTEXT_INDEP_ANCHORS           (1U<<31) /* not implemented */
@@ -513,6 +521,7 @@ ONIG_EXTERN OnigSyntaxType*   OnigDefaultSyntax;
 #define ONIG_SYN_BACKSLASH_ESCAPE_IN_CC          (1U<<21) /* [..\w..] etc.. */
 #define ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC         (1U<<22)
 #define ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC     (1U<<23) /* [0-9-a]=[0-9\-a] */
+#define ONIG_SYN_ALLOW_INVALID_CODE_END_OF_RANGE_IN_CC (1U<<26)
 /* syntax (behavior) warning */
 #define ONIG_SYN_WARN_CC_OP_NOT_ESCAPED          (1U<<24) /* [,-,] */
 #define ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT    (1U<<25) /* (?:a*)+ */
@@ -762,6 +771,8 @@ int onig_init P_((void));
 ONIG_EXTERN
 int onig_error_code_to_str PV_((OnigUChar* s, int err_code, ...));
 ONIG_EXTERN
+int onig_is_error_code_needs_param PV_((int code));
+ONIG_EXTERN
 void onig_set_warn_func P_((OnigWarnFunc f));
 ONIG_EXTERN
 void onig_set_verb_warn_func P_((OnigWarnFunc f));
index 2bef7026ed0a31ea95182f0c93434b5ab13dabbc..d1fbd1376e6ea610d3de1e15df0e78c47106b0c3 100644 (file)
@@ -2,7 +2,7 @@
   regcomp.c -  Oniguruma (regular expression library)
 **********************************************************************/
 /*-
- * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2019  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -29,6 +29,8 @@
 
 #include "regparse.h"
 
+#define OPS_INIT_SIZE  8
+
 OnigCaseFoldType OnigDefaultCaseFoldFlag = ONIGENC_CASE_FOLD_MIN;
 
 #if 0
@@ -108,6 +110,280 @@ int_stack_pop(int_stack* s)
 }
 #endif
 
+static int
+ops_init(regex_t* reg, int init_alloc_size)
+{
+  Operation* p;
+  size_t size;
+
+  if (init_alloc_size > 0) {
+    size = sizeof(Operation) * init_alloc_size;
+    p = (Operation* )xrealloc(reg->ops, size);
+    CHECK_NULL_RETURN_MEMERR(p);
+#ifdef USE_DIRECT_THREADED_CODE
+    {
+      enum OpCode* cp;
+      size = sizeof(enum OpCode) * init_alloc_size;
+      cp = (enum OpCode* )xrealloc(reg->ocs, size);
+      CHECK_NULL_RETURN_MEMERR(cp);
+      reg->ocs = cp;
+    }
+#endif
+  }
+  else {
+    p  = (Operation* )0;
+#ifdef USE_DIRECT_THREADED_CODE
+    reg->ocs = (enum OpCode* )0;
+#endif
+  }
+
+  reg->ops = p;
+  reg->ops_curr  = 0; /* !!! not yet done ops_new() */
+  reg->ops_alloc = init_alloc_size;
+  reg->ops_used  = 0;
+
+  return ONIG_NORMAL;
+}
+
+static int
+ops_expand(regex_t* reg, int n)
+{
+#define MIN_OPS_EXPAND_SIZE   4
+
+#ifdef USE_DIRECT_THREADED_CODE
+  enum OpCode* cp;
+#endif
+  Operation* p;
+  size_t size;
+
+  if (n <= 0) n = MIN_OPS_EXPAND_SIZE;
+
+  n += reg->ops_alloc;
+
+  size = sizeof(Operation) * n;
+  p = (Operation* )xrealloc(reg->ops, size);
+  CHECK_NULL_RETURN_MEMERR(p);
+
+#ifdef USE_DIRECT_THREADED_CODE
+  size = sizeof(enum OpCode) * n;
+  cp = (enum OpCode* )xrealloc(reg->ocs, size);
+  CHECK_NULL_RETURN_MEMERR(cp);
+  reg->ocs = cp;
+#endif
+
+  reg->ops = p;
+  reg->ops_alloc = n;
+  if (reg->ops_used == 0)
+    reg->ops_curr = 0;
+  else
+    reg->ops_curr = reg->ops + (reg->ops_used - 1);
+
+  return ONIG_NORMAL;
+}
+
+static int
+ops_new(regex_t* reg)
+{
+  int r;
+
+  if (reg->ops_used >= reg->ops_alloc) {
+    r = ops_expand(reg, reg->ops_alloc);
+    if (r != ONIG_NORMAL) return r;
+  }
+
+  reg->ops_curr = reg->ops + reg->ops_used;
+  reg->ops_used++;
+
+  xmemset(reg->ops_curr, 0, sizeof(Operation));
+  return ONIG_NORMAL;
+}
+
+static int
+is_in_string_pool(regex_t* reg, UChar* s)
+{
+  return (s >= reg->string_pool && s < reg->string_pool_end);
+}
+
+static void
+ops_free(regex_t* reg)
+{
+  int i;
+
+  if (IS_NULL(reg->ops)) return ;
+
+  for (i = 0; i < (int )reg->ops_used; i++) {
+    enum OpCode opcode;
+    Operation* op;
+
+    op = reg->ops + i;
+
+#ifdef USE_DIRECT_THREADED_CODE
+    opcode = *(reg->ocs + i);
+#else
+    opcode = op->opcode;
+#endif
+
+    switch (opcode) {
+    case OP_EXACTMBN:
+      if (! is_in_string_pool(reg, op->exact_len_n.s))
+        xfree(op->exact_len_n.s);
+      break;
+    case OP_EXACTN: case OP_EXACTMB2N: case OP_EXACTMB3N: case OP_EXACTN_IC:
+      if (! is_in_string_pool(reg, op->exact_n.s))
+        xfree(op->exact_n.s);
+      break;
+    case OP_EXACT1: case OP_EXACT2: case OP_EXACT3: case OP_EXACT4:
+    case OP_EXACT5: case OP_EXACTMB2N1: case OP_EXACTMB2N2:
+    case OP_EXACTMB2N3: case OP_EXACT1_IC:
+      break;
+
+    case OP_CCLASS_NOT: case OP_CCLASS:
+      xfree(op->cclass.bsp);
+      break;
+
+    case OP_CCLASS_MB_NOT: case OP_CCLASS_MB:
+      xfree(op->cclass_mb.mb);
+      break;
+    case OP_CCLASS_MIX_NOT: case OP_CCLASS_MIX:
+      xfree(op->cclass_mix.mb);
+      xfree(op->cclass_mix.bsp);
+      break;
+
+    case OP_BACKREF1: case OP_BACKREF2: case OP_BACKREF_N: case OP_BACKREF_N_IC:
+      break;
+    case OP_BACKREF_MULTI:      case OP_BACKREF_MULTI_IC:
+    case OP_BACKREF_WITH_LEVEL:
+    case OP_BACKREF_WITH_LEVEL_IC:
+    case OP_BACKREF_CHECK:
+    case OP_BACKREF_CHECK_WITH_LEVEL:
+      if (op->backref_general.num != 1)
+        xfree(op->backref_general.ns);
+      break;
+
+    default:
+      break;
+    }
+  }
+
+  xfree(reg->ops);
+#ifdef USE_DIRECT_THREADED_CODE
+  xfree(reg->ocs);
+  reg->ocs = 0;
+#endif
+
+  reg->ops = 0;
+  reg->ops_curr  = 0;
+  reg->ops_alloc = 0;
+  reg->ops_used  = 0;
+}
+
+static int
+ops_calc_size_of_string_pool(regex_t* reg)
+{
+  int i;
+  int total;
+
+  if (IS_NULL(reg->ops)) return 0;
+
+  total = 0;
+  for (i = 0; i < (int )reg->ops_used; i++) {
+    enum OpCode opcode;
+    Operation* op;
+
+    op = reg->ops + i;
+#ifdef USE_DIRECT_THREADED_CODE
+    opcode = *(reg->ocs + i);
+#else
+    opcode = op->opcode;
+#endif
+
+    switch (opcode) {
+    case OP_EXACTMBN:
+      total += op->exact_len_n.len * op->exact_len_n.n;
+      break;
+    case OP_EXACTN:
+    case OP_EXACTN_IC:
+      total += op->exact_n.n;
+      break;
+    case OP_EXACTMB2N:
+      total += op->exact_n.n * 2;
+      break;
+    case OP_EXACTMB3N:
+      total += op->exact_n.n * 3;
+      break;
+
+    default:
+      break;
+    }
+  }
+
+  return total;
+}
+
+static int
+ops_make_string_pool(regex_t* reg)
+{
+  int i;
+  int len;
+  int size;
+  UChar* pool;
+  UChar* curr;
+
+  size = ops_calc_size_of_string_pool(reg);
+  if (size <= 0) {
+    return 0;
+  }
+
+  curr = pool = (UChar* )xmalloc((size_t )size);
+  CHECK_NULL_RETURN_MEMERR(pool);
+
+  for (i = 0; i < (int )reg->ops_used; i++) {
+    enum OpCode opcode;
+    Operation* op;
+
+    op = reg->ops + i;
+#ifdef USE_DIRECT_THREADED_CODE
+    opcode = *(reg->ocs + i);
+#else
+    opcode = op->opcode;
+#endif
+
+    switch (opcode) {
+    case OP_EXACTMBN:
+      len = op->exact_len_n.len * op->exact_len_n.n;
+      xmemcpy(curr, op->exact_len_n.s, len);
+      xfree(op->exact_len_n.s);
+      op->exact_len_n.s = curr;
+      curr += len;
+      break;
+    case OP_EXACTN:
+    case OP_EXACTN_IC:
+      len = op->exact_n.n;
+    copy:
+      xmemcpy(curr, op->exact_n.s, len);
+      xfree(op->exact_n.s);
+      op->exact_n.s = curr;
+      curr += len;
+      break;
+    case OP_EXACTMB2N:
+      len = op->exact_n.n * 2;
+      goto copy;
+      break;
+    case OP_EXACTMB3N:
+      len = op->exact_n.n * 3;
+      goto copy;
+      break;
+
+    default:
+      break;
+    }
+  }
+
+  reg->string_pool     = pool;
+  reg->string_pool_end = pool + size;
+  return 0;
+}
+
 extern OnigCaseFoldType
 onig_get_default_case_fold_flag(void)
 {
@@ -150,10 +426,6 @@ onig_positive_int_multiply(int x, int y)
 }
 
 
-#ifndef PLATFORM_UNALIGNED_WORD_ACCESS
-static unsigned char PadBuf[WORD_ALIGNMENT_SIZE];
-#endif
-
 static void
 swap_node(Node* a, Node* b)
 {
@@ -213,24 +485,6 @@ bitset_is_empty(BitSetRef bs)
   return 1;
 }
 
-extern int
-onig_bbuf_init(BBuf* buf, int size)
-{
-  if (size <= 0) {
-    size   = 0;
-    buf->p = NULL;
-  }
-  else {
-    buf->p = (UChar* )xmalloc(size);
-    if (IS_NULL(buf->p)) return(ONIGERR_MEMORY);
-  }
-
-  buf->alloc = size;
-  buf->used  = 0;
-  return 0;
-}
-
-
 #ifdef USE_CALL
 
 static int
@@ -275,113 +529,19 @@ unset_addr_list_add(UnsetAddrList* list, int offset, struct _Node* node)
 
 
 static int
-add_opcode(regex_t* reg, int opcode)
-{
-  BB_ADD1(reg, opcode);
-  return 0;
-}
-
-static int
-add_rel_addr(regex_t* reg, int addr)
-{
-  RelAddrType ra = (RelAddrType )addr;
-
-  BB_ADD(reg, &ra, SIZE_RELADDR);
-  return 0;
-}
-
-static int
-add_abs_addr(regex_t* reg, int addr)
-{
-  AbsAddrType ra = (AbsAddrType )addr;
-
-  BB_ADD(reg, &ra, SIZE_ABSADDR);
-  return 0;
-}
-
-static int
-add_length(regex_t* reg, int len)
-{
-  LengthType l = (LengthType )len;
-
-  BB_ADD(reg, &l, SIZE_LENGTH);
-  return 0;
-}
-
-static int
-add_mem_num(regex_t* reg, int num)
-{
-  MemNumType n = (MemNumType )num;
-
-  BB_ADD(reg, &n, SIZE_MEMNUM);
-  return 0;
-}
-
-#if 0
-static int
-add_pointer(regex_t* reg, void* addr)
-{
-  PointerType ptr = (PointerType )addr;
-
-  BB_ADD(reg, &ptr, SIZE_POINTER);
-  return 0;
-}
-#endif
-
-static int
-add_option(regex_t* reg, OnigOptionType option)
-{
-  BB_ADD(reg, &option, SIZE_OPTION);
-  return 0;
-}
-
-static int
-add_save_type(regex_t* reg, enum SaveType type)
-{
-  SaveType t = (SaveType )type;
-
-  BB_ADD(reg, &t, SIZE_SAVE_TYPE);
-  return 0;
-}
-
-static int
-add_update_var_type(regex_t* reg, enum UpdateVarType type)
-{
-  UpdateVarType t = (UpdateVarType )type;
-
-  BB_ADD(reg, &t, SIZE_UPDATE_VAR_TYPE);
-  return 0;
-}
-
-static int
-add_mode(regex_t* reg, ModeType mode)
-{
-  BB_ADD(reg, &mode, SIZE_MODE);
-  return 0;
-}
-
-static int
-add_opcode_rel_addr(regex_t* reg, int opcode, int addr)
+add_op(regex_t* reg, int opcode)
 {
   int r;
 
-  r = add_opcode(reg, opcode);
-  if (r != 0) return r;
-  r = add_rel_addr(reg, addr);
-  return r;
-}
+  r = ops_new(reg);
+  if (r != ONIG_NORMAL) return r;
 
-static int
-add_bytes(regex_t* reg, UChar* bytes, int len)
-{
-  BB_ADD(reg, bytes, len);
-  return 0;
-}
+#ifdef USE_DIRECT_THREADED_CODE
+  *(reg->ocs + (reg->ops_curr - reg->ops)) = opcode;
+#else
+  reg->ops_curr->opcode = opcode;
+#endif
 
-static int
-add_bitset(regex_t* reg, BitSetRef bs)
-{
-  BB_ADD(reg, bs, SIZE_BITSET);
   return 0;
 }
 
@@ -439,32 +599,53 @@ select_str_opcode(int mb_len, int str_len, int ignore_case)
 }
 
 static int
-compile_tree_empty_check(Node* node, regex_t* reg, int empty_info, ScanEnv* env)
+is_strict_real_node(Node* node)
+{
+  switch (NODE_TYPE(node)) {
+  case NODE_STRING:
+    {
+      StrNode* sn = STR_(node);
+      return (sn->end != sn->s);
+    }
+    break;
+
+  case NODE_CCLASS:
+  case NODE_CTYPE:
+    return 1;
+    break;
+
+  default:
+    return 0;
+    break;
+  }
+}
+
+static int
+compile_tree_empty_check(Node* node, regex_t* reg, int emptiness, ScanEnv* env)
 {
   int r;
   int saved_num_null_check = reg->num_null_check;
 
-  if (empty_info != QUANT_BODY_IS_NOT_EMPTY) {
-    r = add_opcode(reg, OP_EMPTY_CHECK_START);
-    if (r != 0) return r;
-    r = add_mem_num(reg, reg->num_null_check); /* NULL CHECK ID */
+  if (emptiness != BODY_IS_NOT_EMPTY) {
+    r = add_op(reg, OP_EMPTY_CHECK_START);
     if (r != 0) return r;
+    COP(reg)->empty_check_start.mem = reg->num_null_check; /* NULL CHECK ID */
     reg->num_null_check++;
   }
 
   r = compile_tree(node, reg, env);
   if (r != 0) return r;
 
-  if (empty_info != QUANT_BODY_IS_NOT_EMPTY) {
-    if (empty_info == QUANT_BODY_IS_EMPTY)
-      r = add_opcode(reg, OP_EMPTY_CHECK_END);
-    else if (empty_info == QUANT_BODY_IS_EMPTY_MEM)
-      r = add_opcode(reg, OP_EMPTY_CHECK_END_MEMST);
-    else if (empty_info == QUANT_BODY_IS_EMPTY_REC)
-      r = add_opcode(reg, OP_EMPTY_CHECK_END_MEMST_PUSH);
+  if (emptiness != BODY_IS_NOT_EMPTY) {
+    if (emptiness == BODY_IS_EMPTY_POSSIBILITY)
+      r = add_op(reg, OP_EMPTY_CHECK_END);
+    else if (emptiness == BODY_IS_EMPTY_POSSIBILITY_MEM)
+      r = add_op(reg, OP_EMPTY_CHECK_END_MEMST);
+    else if (emptiness == BODY_IS_EMPTY_POSSIBILITY_REC)
+      r = add_op(reg, OP_EMPTY_CHECK_END_MEMST_PUSH);
 
     if (r != 0) return r;
-    r = add_mem_num(reg, saved_num_null_check); /* NULL CHECK ID */
+    COP(reg)->empty_check_end.mem = saved_num_null_check; /* NULL CHECK ID */
   }
   return r;
 }
@@ -474,13 +655,15 @@ static int
 compile_call(CallNode* node, regex_t* reg, ScanEnv* env)
 {
   int r;
+  int offset;
 
-  r = add_opcode(reg, OP_CALL);
+  r = add_op(reg, OP_CALL);
   if (r != 0) return r;
-  r = unset_addr_list_add(env->unset_addr_list, BB_GET_OFFSET_POS(reg),
-                          NODE_CALL_BODY(node));
-  if (r != 0) return r;
-  r = add_abs_addr(reg, 0 /*dummy addr.*/);
+
+  COP(reg)->call.addr = 0; /* dummy addr. */
+
+  offset = COP_CURR_OFFSET_BYTES(reg, call.addr);
+  r = unset_addr_list_add(env->unset_addr_list, offset, NODE_CALL_BODY(node));
   return r;
 }
 #endif
@@ -501,41 +684,53 @@ static int
 add_compile_string_length(UChar* s ARG_UNUSED, int mb_len, int str_len,
                           regex_t* reg ARG_UNUSED, int ignore_case)
 {
-  int len;
-  int op = select_str_opcode(mb_len, str_len, ignore_case);
-
-  len = SIZE_OPCODE;
-
-  if (op == OP_EXACTMBN)  len += SIZE_LENGTH;
-  if (IS_NEED_STR_LEN_OP_EXACT(op))
-    len += SIZE_LENGTH;
-
-  len += mb_len * str_len;
-  return len;
+  return 1;
 }
 
 static int
 add_compile_string(UChar* s, int mb_len, int str_len,
                    regex_t* reg, int ignore_case)
 {
-  int op = select_str_opcode(mb_len, str_len, ignore_case);
-  add_opcode(reg, op);
+  int op;
+  int r;
+  int byte_len;
+  UChar* p;
+  UChar* end;
+
+  op = select_str_opcode(mb_len, str_len, ignore_case);
+  r = add_op(reg, op);
+  if (r != 0) return r;
+
+  byte_len = mb_len * str_len;
+  end = s + byte_len;
 
-  if (op == OP_EXACTMBN)
-    add_length(reg, mb_len);
+  if (op == OP_EXACTMBN) {
+    p = onigenc_strdup(reg->enc, s, end);
+    CHECK_NULL_RETURN_MEMERR(p);
+
+    COP(reg)->exact_len_n.len = mb_len;
+    COP(reg)->exact_len_n.n   = str_len;
+    COP(reg)->exact_len_n.s   = p;
+  }
+  else if (IS_NEED_STR_LEN_OP_EXACT(op)) {
+    p = onigenc_strdup(reg->enc, s, end);
+    CHECK_NULL_RETURN_MEMERR(p);
 
-  if (IS_NEED_STR_LEN_OP_EXACT(op)) {
     if (op == OP_EXACTN_IC)
-      add_length(reg, mb_len * str_len);
+      COP(reg)->exact_n.n = byte_len;
     else
-      add_length(reg, str_len);
+      COP(reg)->exact_n.n = str_len;
+
+    COP(reg)->exact_n.s = p;
+  }
+  else {
+    xmemcpy(COP(reg)->exact.s, s, (size_t )byte_len);
+    COP(reg)->exact.s[byte_len] = '\0';
   }
 
-  add_bytes(reg, s, mb_len * str_len);
   return 0;
 }
 
-
 static int
 compile_length_string_node(Node* node, regex_t* reg)
 {
@@ -635,52 +830,24 @@ compile_string_raw_node(StrNode* sn, regex_t* reg)
   return add_compile_string(sn->s, 1 /* sb */, (int )(sn->end - sn->s), reg, 0);
 }
 
-static int
-add_multi_byte_cclass(BBuf* mbuf, regex_t* reg)
+static void*
+set_multi_byte_cclass(BBuf* mbuf, regex_t* reg)
 {
-#ifdef PLATFORM_UNALIGNED_WORD_ACCESS
-  add_length(reg, mbuf->used);
-  return add_bytes(reg, mbuf->p, mbuf->used);
-#else
-  int r, pad_size;
-  UChar* p = BB_GET_ADD_ADDRESS(reg) + SIZE_LENGTH;
-
-  GET_ALIGNMENT_PAD_SIZE(p, pad_size);
-  add_length(reg, mbuf->used + (WORD_ALIGNMENT_SIZE - 1));
-  if (pad_size != 0) add_bytes(reg, PadBuf, pad_size);
+  size_t len;
+  void* p;
 
-  r = add_bytes(reg, mbuf->p, mbuf->used);
+  len = (size_t )mbuf->used;
+  p = xmalloc(len);
+  if (IS_NULL(p)) return NULL;
 
-  /* padding for return value from compile_length_cclass_node() to be fix. */
-  pad_size = (WORD_ALIGNMENT_SIZE - 1) - pad_size;
-  if (pad_size != 0) add_bytes(reg, PadBuf, pad_size);
-  return r;
-#endif
+  xmemcpy(p, mbuf->p, len);
+  return p;
 }
 
 static int
 compile_length_cclass_node(CClassNode* cc, regex_t* reg)
 {
-  int len;
-
-  if (IS_NULL(cc->mbuf)) {
-    len = SIZE_OPCODE + SIZE_BITSET;
-  }
-  else {
-    if (ONIGENC_MBC_MINLEN(reg->enc) > 1 || bitset_is_empty(cc->bs)) {
-      len = SIZE_OPCODE;
-    }
-    else {
-      len = SIZE_OPCODE + SIZE_BITSET;
-    }
-#ifdef PLATFORM_UNALIGNED_WORD_ACCESS
-    len += SIZE_LENGTH + cc->mbuf->used;
-#else
-    len += SIZE_LENGTH + cc->mbuf->used + (WORD_ALIGNMENT_SIZE - 1);
-#endif
-  }
-
-  return len;
+  return 1;
 }
 
 static int
@@ -689,35 +856,39 @@ compile_cclass_node(CClassNode* cc, regex_t* reg)
   int r;
 
   if (IS_NULL(cc->mbuf)) {
-    if (IS_NCCLASS_NOT(cc))
-      add_opcode(reg, OP_CCLASS_NOT);
-    else
-      add_opcode(reg, OP_CCLASS);
+    r = add_op(reg, IS_NCCLASS_NOT(cc) ? OP_CCLASS_NOT : OP_CCLASS);
+    if (r != 0) return r;
 
-    r = add_bitset(reg, cc->bs);
+    COP(reg)->cclass.bsp = xmalloc(SIZE_BITSET);
+    CHECK_NULL_RETURN_MEMERR(COP(reg)->cclass.bsp);
+    xmemcpy(COP(reg)->cclass.bsp, cc->bs, SIZE_BITSET);
   }
   else {
+    void* p;
+
     if (ONIGENC_MBC_MINLEN(reg->enc) > 1 || bitset_is_empty(cc->bs)) {
-      if (IS_NCCLASS_NOT(cc))
-        add_opcode(reg, OP_CCLASS_MB_NOT);
-      else
-        add_opcode(reg, OP_CCLASS_MB);
+      r = add_op(reg, IS_NCCLASS_NOT(cc) ? OP_CCLASS_MB_NOT : OP_CCLASS_MB);
+      if (r != 0) return r;
 
-      r = add_multi_byte_cclass(cc->mbuf, reg);
+      p = set_multi_byte_cclass(cc->mbuf, reg);
+      CHECK_NULL_RETURN_MEMERR(p);
+      COP(reg)->cclass_mb.mb = p;
     }
     else {
-      if (IS_NCCLASS_NOT(cc))
-        add_opcode(reg, OP_CCLASS_MIX_NOT);
-      else
-        add_opcode(reg, OP_CCLASS_MIX);
-
-      r = add_bitset(reg, cc->bs);
+      r = add_op(reg, IS_NCCLASS_NOT(cc) ? OP_CCLASS_MIX_NOT : OP_CCLASS_MIX);
       if (r != 0) return r;
-      r = add_multi_byte_cclass(cc->mbuf, reg);
+
+      COP(reg)->cclass_mix.bsp = xmalloc(SIZE_BITSET);
+      CHECK_NULL_RETURN_MEMERR(COP(reg)->cclass_mix.bsp);
+      xmemcpy(COP(reg)->cclass_mix.bsp, cc->bs, SIZE_BITSET);
+
+      p = set_multi_byte_cclass(cc->mbuf, reg);
+      CHECK_NULL_RETURN_MEMERR(p);
+      COP(reg)->cclass_mix.mb = p;
     }
   }
 
-  return r;
+  return 0;
 }
 
 static int
@@ -736,8 +907,7 @@ entry_repeat_range(regex_t* reg, int id, int lower, int upper)
   else if (reg->repeat_range_alloc <= id) {
     int n;
     n = reg->repeat_range_alloc + REPEAT_RANGE_ALLOC;
-    p = (OnigRepeatRange* )xrealloc(reg->repeat_range,
-                                    sizeof(OnigRepeatRange) * n);
+    p = (OnigRepeatRange* )xrealloc(reg->repeat_range, sizeof(OnigRepeatRange) * n);
     CHECK_NULL_RETURN_MEMERR(p);
     reg->repeat_range = p;
     reg->repeat_range_alloc = n;
@@ -747,29 +917,27 @@ entry_repeat_range(regex_t* reg, int id, int lower, int upper)
   }
 
   p[id].lower = lower;
-  p[id].upper = (IS_REPEAT_INFINITE(upper) ? 0x7fffffff : upper);
+  p[id].upper = (IS_INFINITE_REPEAT(upper) ? 0x7fffffff : upper);
   return 0;
 }
 
 static int
-compile_range_repeat_node(QuantNode* qn, int target_len, int empty_info,
+compile_range_repeat_node(QuantNode* qn, int target_len, int emptiness,
                           regex_t* reg, ScanEnv* env)
 {
   int r;
-  int num_repeat = reg->num_repeat;
+  int num_repeat = reg->num_repeat++;
 
-  r = add_opcode(reg, qn->greedy ? OP_REPEAT : OP_REPEAT_NG);
-  if (r != 0) return r;
-  r = add_mem_num(reg, num_repeat); /* OP_REPEAT ID */
-  reg->num_repeat++;
-  if (r != 0) return r;
-  r = add_rel_addr(reg, target_len + SIZE_OP_REPEAT_INC);
+  r = add_op(reg, qn->greedy ? OP_REPEAT : OP_REPEAT_NG);
   if (r != 0) return r;
 
+  COP(reg)->repeat.id   = num_repeat;
+  COP(reg)->repeat.addr = SIZE_INC_OP + target_len + SIZE_OP_REPEAT_INC;
+
   r = entry_repeat_range(reg, num_repeat, qn->lower, qn->upper);
   if (r != 0) return r;
 
-  r = compile_tree_empty_check(NODE_QUANT_BODY(qn), reg, empty_info, env);
+  r = compile_tree_empty_check(NODE_QUANT_BODY(qn), reg, emptiness, env);
   if (r != 0) return r;
 
   if (
@@ -777,35 +945,36 @@ compile_range_repeat_node(QuantNode* qn, int target_len, int empty_info,
       NODE_IS_IN_MULTI_ENTRY(qn) ||
 #endif
       NODE_IS_IN_REAL_REPEAT(qn)) {
-    r = add_opcode(reg, qn->greedy ? OP_REPEAT_INC_SG : OP_REPEAT_INC_NG_SG);
+    r = add_op(reg, qn->greedy ? OP_REPEAT_INC_SG : OP_REPEAT_INC_NG_SG);
   }
   else {
-    r = add_opcode(reg, qn->greedy ? OP_REPEAT_INC : OP_REPEAT_INC_NG);
+    r = add_op(reg, qn->greedy ? OP_REPEAT_INC : OP_REPEAT_INC_NG);
   }
   if (r != 0) return r;
-  r = add_mem_num(reg, num_repeat); /* OP_REPEAT ID */
+
+  COP(reg)->repeat_inc.id = num_repeat;
   return r;
 }
 
 static int
 is_anychar_infinite_greedy(QuantNode* qn)
 {
-  if (qn->greedy && IS_REPEAT_INFINITE(qn->upper) &&
+  if (qn->greedy && IS_INFINITE_REPEAT(qn->upper) &&
       NODE_IS_ANYCHAR(NODE_QUANT_BODY(qn)))
     return 1;
   else
     return 0;
 }
 
-#define QUANTIFIER_EXPAND_LIMIT_SIZE   50
+#define QUANTIFIER_EXPAND_LIMIT_SIZE   10
 #define CKN_ON   (ckn > 0)
 
 static int
 compile_length_quantifier_node(QuantNode* qn, regex_t* reg)
 {
   int len, mod_tlen;
-  int infinite = IS_REPEAT_INFINITE(qn->upper);
-  enum QuantBodyEmpty empty_info = qn->body_empty_info;
+  int infinite = IS_INFINITE_REPEAT(qn->upper);
+  enum BodyEmptyType emptiness = qn->emptiness;
   int tlen = compile_length_tree(NODE_QUANT_BODY(qn), reg);
 
   if (tlen < 0) return tlen;
@@ -822,10 +991,9 @@ compile_length_quantifier_node(QuantNode* qn, regex_t* reg)
     }
   }
 
-  if (empty_info == QUANT_BODY_IS_NOT_EMPTY)
-    mod_tlen = tlen;
-  else
-    mod_tlen = tlen + (SIZE_OP_EMPTY_CHECK_START + SIZE_OP_EMPTY_CHECK_END);
+  mod_tlen = tlen;
+  if (emptiness != BODY_IS_NOT_EMPTY)
+    mod_tlen += SIZE_OP_EMPTY_CHECK_START + SIZE_OP_EMPTY_CHECK_END;
 
   if (infinite &&
       (qn->lower <= 1 ||
@@ -838,9 +1006,12 @@ compile_length_quantifier_node(QuantNode* qn, regex_t* reg)
     }
 
     if (qn->greedy) {
+#ifdef USE_OP_PUSH_OR_JUMP_EXACT
       if (IS_NOT_NULL(qn->head_exact))
         len += SIZE_OP_PUSH_OR_JUMP_EXACT1 + mod_tlen + SIZE_OP_JUMP;
-      else if (IS_NOT_NULL(qn->next_head_exact))
+      else
+#endif
+      if (IS_NOT_NULL(qn->next_head_exact))
         len += SIZE_OP_PUSH_IF_PEEK_NEXT + mod_tlen + SIZE_OP_JUMP;
       else
         len += SIZE_OP_PUSH + mod_tlen + SIZE_OP_JUMP;
@@ -848,8 +1019,12 @@ compile_length_quantifier_node(QuantNode* qn, regex_t* reg)
     else
       len += SIZE_OP_JUMP + mod_tlen + SIZE_OP_PUSH;
   }
-  else if (qn->upper == 0 && qn->is_refered != 0) { /* /(?<n>..){0}/ */
-    len = SIZE_OP_JUMP + tlen;
+  else if (qn->upper == 0) {
+    if (qn->is_refered != 0) { /* /(?<n>..){0}/ */
+      len = SIZE_OP_JUMP + tlen;
+    }
+    else
+      len = 0;
   }
   else if (!infinite && qn->greedy &&
            (qn->upper == 1 ||
@@ -862,8 +1037,7 @@ compile_length_quantifier_node(QuantNode* qn, regex_t* reg)
     len = SIZE_OP_PUSH + SIZE_OP_JUMP + tlen;
   }
   else {
-    len = SIZE_OP_REPEAT_INC
-        + mod_tlen + SIZE_OPCODE + SIZE_RELADDR + SIZE_MEMNUM;
+    len = SIZE_OP_REPEAT_INC + mod_tlen + SIZE_OP_REPEAT;
   }
 
   return len;
@@ -873,8 +1047,8 @@ static int
 compile_quantifier_node(QuantNode* qn, regex_t* reg, ScanEnv* env)
 {
   int i, r, mod_tlen;
-  int infinite = IS_REPEAT_INFINITE(qn->upper);
-  enum QuantBodyEmpty empty_info = qn->body_empty_info;
+  int infinite = IS_INFINITE_REPEAT(qn->upper);
+  enum BodyEmptyType emptiness = qn->emptiness;
   int tlen = compile_length_tree(NODE_QUANT_BODY(qn), reg);
 
   if (tlen < 0) return tlen;
@@ -886,42 +1060,48 @@ compile_quantifier_node(QuantNode* qn, regex_t* reg, ScanEnv* env)
     r = compile_tree_n_times(NODE_QUANT_BODY(qn), qn->lower, reg, env);
     if (r != 0) return r;
     if (IS_NOT_NULL(qn->next_head_exact)) {
-      if (IS_MULTILINE(CTYPE_OPTION(NODE_QUANT_BODY(qn), reg)))
-        r = add_opcode(reg, OP_ANYCHAR_ML_STAR_PEEK_NEXT);
-      else
-        r = add_opcode(reg, OP_ANYCHAR_STAR_PEEK_NEXT);
+      r = add_op(reg,
+                 IS_MULTILINE(CTYPE_OPTION(NODE_QUANT_BODY(qn), reg)) ?
+                 OP_ANYCHAR_ML_STAR_PEEK_NEXT : OP_ANYCHAR_STAR_PEEK_NEXT);
       if (r != 0) return r;
-      return add_bytes(reg, STR_(qn->next_head_exact)->s, 1);
+
+      COP(reg)->anychar_star_peek_next.c = STR_(qn->next_head_exact)->s[0];
+      return 0;
     }
     else {
-      if (IS_MULTILINE(CTYPE_OPTION(NODE_QUANT_BODY(qn), reg)))
-        return add_opcode(reg, OP_ANYCHAR_ML_STAR);
-      else
-        return add_opcode(reg, OP_ANYCHAR_STAR);
+      r = add_op(reg,
+                 IS_MULTILINE(CTYPE_OPTION(NODE_QUANT_BODY(qn), reg)) ?
+                 OP_ANYCHAR_ML_STAR : OP_ANYCHAR_STAR);
+      return r;
     }
   }
 
-  if (empty_info == QUANT_BODY_IS_NOT_EMPTY)
-    mod_tlen = tlen;
-  else
-    mod_tlen = tlen + (SIZE_OP_EMPTY_CHECK_START + SIZE_OP_EMPTY_CHECK_END);
+  mod_tlen = tlen;
+  if (emptiness != BODY_IS_NOT_EMPTY)
+    mod_tlen += SIZE_OP_EMPTY_CHECK_START + SIZE_OP_EMPTY_CHECK_END;
 
   if (infinite &&
       (qn->lower <= 1 ||
        int_multiply_cmp(tlen, qn->lower, QUANTIFIER_EXPAND_LIMIT_SIZE) <= 0)) {
+    int addr;
+
     if (qn->lower == 1 && tlen > QUANTIFIER_EXPAND_LIMIT_SIZE) {
+      r = add_op(reg, OP_JUMP);
+      if (r != 0) return r;
       if (qn->greedy) {
+#ifdef USE_OP_PUSH_OR_JUMP_EXACT
         if (IS_NOT_NULL(qn->head_exact))
-          r = add_opcode_rel_addr(reg, OP_JUMP, SIZE_OP_PUSH_OR_JUMP_EXACT1);
-        else if (IS_NOT_NULL(qn->next_head_exact))
-          r = add_opcode_rel_addr(reg, OP_JUMP, SIZE_OP_PUSH_IF_PEEK_NEXT);
+          COP(reg)->jump.addr = SIZE_OP_PUSH_OR_JUMP_EXACT1 + SIZE_INC_OP;
         else
-          r = add_opcode_rel_addr(reg, OP_JUMP, SIZE_OP_PUSH);
+#endif
+        if (IS_NOT_NULL(qn->next_head_exact))
+          COP(reg)->jump.addr = SIZE_OP_PUSH_IF_PEEK_NEXT + SIZE_INC_OP;
+        else
+          COP(reg)->jump.addr = SIZE_OP_PUSH + SIZE_INC_OP;
       }
       else {
-        r = add_opcode_rel_addr(reg, OP_JUMP, SIZE_OP_JUMP);
+        COP(reg)->jump.addr = SIZE_OP_JUMP + SIZE_INC_OP;
       }
-      if (r != 0) return r;
     }
     else {
       r = compile_tree_n_times(NODE_QUANT_BODY(qn), qn->lower, reg, env);
@@ -929,47 +1109,71 @@ compile_quantifier_node(QuantNode* qn, regex_t* reg, ScanEnv* env)
     }
 
     if (qn->greedy) {
+#ifdef USE_OP_PUSH_OR_JUMP_EXACT
       if (IS_NOT_NULL(qn->head_exact)) {
-        r = add_opcode_rel_addr(reg, OP_PUSH_OR_JUMP_EXACT1,
-                                mod_tlen + SIZE_OP_JUMP);
+        r = add_op(reg, OP_PUSH_OR_JUMP_EXACT1);
         if (r != 0) return r;
-        add_bytes(reg, STR_(qn->head_exact)->s, 1);
-        r = compile_tree_empty_check(NODE_QUANT_BODY(qn), reg, empty_info, env);
+        COP(reg)->push_or_jump_exact1.addr = SIZE_INC_OP + mod_tlen + SIZE_OP_JUMP;
+        COP(reg)->push_or_jump_exact1.c    = STR_(qn->head_exact)->s[0];
+
+        r = compile_tree_empty_check(NODE_QUANT_BODY(qn), reg, emptiness, env);
         if (r != 0) return r;
-        r = add_opcode_rel_addr(reg, OP_JUMP,
-           -(mod_tlen + (int )SIZE_OP_JUMP + (int )SIZE_OP_PUSH_OR_JUMP_EXACT1));
+
+        addr = -(mod_tlen + (int )SIZE_OP_PUSH_OR_JUMP_EXACT1);
       }
-      else if (IS_NOT_NULL(qn->next_head_exact)) {
-        r = add_opcode_rel_addr(reg, OP_PUSH_IF_PEEK_NEXT,
-                                mod_tlen + SIZE_OP_JUMP);
+      else
+#endif
+      if (IS_NOT_NULL(qn->next_head_exact)) {
+        r = add_op(reg, OP_PUSH_IF_PEEK_NEXT);
         if (r != 0) return r;
-        add_bytes(reg, STR_(qn->next_head_exact)->s, 1);
-        r = compile_tree_empty_check(NODE_QUANT_BODY(qn), reg, empty_info, env);
+        COP(reg)->push_if_peek_next.addr = SIZE_INC_OP + mod_tlen + SIZE_OP_JUMP;
+        COP(reg)->push_if_peek_next.c    = STR_(qn->next_head_exact)->s[0];
+
+        r = compile_tree_empty_check(NODE_QUANT_BODY(qn), reg, emptiness, env);
         if (r != 0) return r;
-        r = add_opcode_rel_addr(reg, OP_JUMP,
-           -(mod_tlen + (int )SIZE_OP_JUMP + (int )SIZE_OP_PUSH_IF_PEEK_NEXT));
+
+        addr = -(mod_tlen + (int )SIZE_OP_PUSH_IF_PEEK_NEXT);
       }
       else {
-        r = add_opcode_rel_addr(reg, OP_PUSH, mod_tlen + SIZE_OP_JUMP);
+        r = add_op(reg, OP_PUSH);
         if (r != 0) return r;
-        r = compile_tree_empty_check(NODE_QUANT_BODY(qn), reg, empty_info, env);
+        COP(reg)->push.addr = SIZE_INC_OP + mod_tlen + SIZE_OP_JUMP;
+
+        r = compile_tree_empty_check(NODE_QUANT_BODY(qn), reg, emptiness, env);
         if (r != 0) return r;
-        r = add_opcode_rel_addr(reg, OP_JUMP,
-                   -(mod_tlen + (int )SIZE_OP_JUMP + (int )SIZE_OP_PUSH));
+
+        addr = -(mod_tlen + (int )SIZE_OP_PUSH);
       }
+
+      r = add_op(reg, OP_JUMP);
+      if (r != 0) return r;
+      COP(reg)->jump.addr = addr;
     }
     else {
-      r = add_opcode_rel_addr(reg, OP_JUMP, mod_tlen);
+      r = add_op(reg, OP_JUMP);
       if (r != 0) return r;
-      r = compile_tree_empty_check(NODE_QUANT_BODY(qn), reg, empty_info, env);
+      COP(reg)->jump.addr = mod_tlen + SIZE_INC_OP;
+
+      r = compile_tree_empty_check(NODE_QUANT_BODY(qn), reg, emptiness, env);
+      if (r != 0) return r;
+
+      r = add_op(reg, OP_PUSH);
       if (r != 0) return r;
-      r = add_opcode_rel_addr(reg, OP_PUSH, -(mod_tlen + (int )SIZE_OP_PUSH));
+      COP(reg)->push.addr = -mod_tlen;
     }
   }
-  else if (qn->upper == 0 && qn->is_refered != 0) { /* /(?<n>..){0}/ */
-    r = add_opcode_rel_addr(reg, OP_JUMP, tlen);
-    if (r != 0) return r;
-    r = compile_tree(NODE_QUANT_BODY(qn), reg, env);
+  else if (qn->upper == 0) {
+    if (qn->is_refered != 0) { /* /(?<n>..){0}/ */
+      r = add_op(reg, OP_JUMP);
+      if (r != 0) return r;
+      COP(reg)->jump.addr = tlen + SIZE_INC_OP;
+
+      r = compile_tree(NODE_QUANT_BODY(qn), reg, env);
+    }
+    else {
+      /* Nothing output */
+      r = 0;
+    }
   }
   else if (! infinite && qn->greedy &&
            (qn->upper == 1 ||
@@ -981,23 +1185,30 @@ compile_quantifier_node(QuantNode* qn, regex_t* reg, ScanEnv* env)
     if (r != 0) return r;
 
     for (i = 0; i < n; i++) {
-      int v = onig_positive_int_multiply(n - i, tlen);
+      int v = onig_positive_int_multiply(n - i, tlen + SIZE_OP_PUSH);
       if (v < 0) return ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE;
-      r = add_opcode_rel_addr(reg, OP_PUSH, v + (n - i - 1) * SIZE_OP_PUSH);
+
+      r = add_op(reg, OP_PUSH);
       if (r != 0) return r;
+      COP(reg)->push.addr = v;
+
       r = compile_tree(NODE_QUANT_BODY(qn), reg, env);
       if (r != 0) return r;
     }
   }
   else if (! qn->greedy && qn->upper == 1 && qn->lower == 0) { /* '??' */
-    r = add_opcode_rel_addr(reg, OP_PUSH, SIZE_OP_JUMP);
+    r = add_op(reg, OP_PUSH);
     if (r != 0) return r;
-    r = add_opcode_rel_addr(reg, OP_JUMP, tlen);
+    COP(reg)->push.addr = SIZE_INC_OP + SIZE_OP_JUMP;
+
+    r = add_op(reg, OP_JUMP);
     if (r != 0) return r;
+    COP(reg)->jump.addr = tlen + SIZE_INC_OP;
+
     r = compile_tree(NODE_QUANT_BODY(qn), reg, env);
   }
   else {
-    r = compile_range_repeat_node(qn, mod_tlen, empty_info, reg, env);
+    r = compile_range_repeat_node(qn, mod_tlen, emptiness, reg, env);
   }
   return r;
 }
@@ -1082,7 +1293,7 @@ compile_length_bag_node(BagNode* node, regex_t* reg)
     break;
 
   case BAG_STOP_BACKTRACK:
-    if (NODE_IS_STOP_BT_SIMPLE_REPEAT(node)) {
+    if (NODE_IS_STRICT_REAL_REPEAT(node)) {
       int v;
       QuantNode* qn;
 
@@ -1116,8 +1327,9 @@ compile_length_bag_node(BagNode* node, regex_t* reg)
         len += tlen;
       }
 
+      len += SIZE_OP_JUMP + SIZE_OP_ATOMIC_END;
+
       if (IS_NOT_NULL(Else)) {
-        len += SIZE_OP_JUMP;
         tlen = compile_length_tree(Else, reg);
         if (tlen < 0) return tlen;
         len += tlen;
@@ -1126,7 +1338,8 @@ compile_length_bag_node(BagNode* node, regex_t* reg)
     break;
 
   case BAG_OPTION:
-    len = tlen;
+    /* never come here, but set for escape warning */
+    len = 0;
     break;
   }
 
@@ -1142,75 +1355,75 @@ compile_bag_memory_node(BagNode* node, regex_t* reg, ScanEnv* env)
   int len;
 
 #ifdef USE_CALL
-  if (node->m.regnum == 0 && NODE_IS_CALLED(node)) {
-    r = add_opcode(reg, OP_CALL);
+  if (NODE_IS_CALLED(node)) {
+    r = add_op(reg, OP_CALL);
     if (r != 0) return r;
-    node->m.called_addr = BB_GET_OFFSET_POS(reg) + SIZE_ABSADDR + SIZE_OP_JUMP;
+
+    node->m.called_addr = COP_CURR_OFFSET(reg) + 1 + SIZE_OP_JUMP;
     NODE_STATUS_ADD(node, ADDR_FIXED);
-    r = add_abs_addr(reg, (int )node->m.called_addr);
-    if (r != 0) return r;
-    len = compile_length_tree(NODE_BAG_BODY(node), reg);
-    len += SIZE_OP_RETURN;
-    r = add_opcode_rel_addr(reg, OP_JUMP, len);
-    if (r != 0) return r;
+    COP(reg)->call.addr = (int )node->m.called_addr;
 
-    r = compile_tree(NODE_BAG_BODY(node), reg, env);
-    if (r != 0) return r;
-    r = add_opcode(reg, OP_RETURN);
-    return r;
-  }
+    if (node->m.regnum == 0) {
+      len = compile_length_tree(NODE_BAG_BODY(node), reg);
+      len += SIZE_OP_RETURN;
 
-  if (NODE_IS_CALLED(node)) {
-    r = add_opcode(reg, OP_CALL);
-    if (r != 0) return r;
-    node->m.called_addr = BB_GET_OFFSET_POS(reg) + SIZE_ABSADDR + SIZE_OP_JUMP;
-    NODE_STATUS_ADD(node, ADDR_FIXED);
-    r = add_abs_addr(reg, (int )node->m.called_addr);
-    if (r != 0) return r;
-    len = compile_length_tree(NODE_BAG_BODY(node), reg);
-    len += (SIZE_OP_MEMORY_START_PUSH + SIZE_OP_RETURN);
-    if (MEM_STATUS_AT0(reg->bt_mem_end, node->m.regnum))
-      len += (NODE_IS_RECURSION(node)
-              ? SIZE_OP_MEMORY_END_PUSH_REC : SIZE_OP_MEMORY_END_PUSH);
-    else
-      len += (NODE_IS_RECURSION(node)
-              ? SIZE_OP_MEMORY_END_REC : SIZE_OP_MEMORY_END);
+      r = add_op(reg, OP_JUMP);
+      if (r != 0) return r;
+      COP(reg)->jump.addr = len + SIZE_INC_OP;
 
-    r = add_opcode_rel_addr(reg, OP_JUMP, len);
-    if (r != 0) return r;
+      r = compile_tree(NODE_BAG_BODY(node), reg, env);
+      if (r != 0) return r;
+
+      r = add_op(reg, OP_RETURN);
+      return r;
+    }
+    else {
+      len = compile_length_tree(NODE_BAG_BODY(node), reg);
+      len += (SIZE_OP_MEMORY_START_PUSH + SIZE_OP_RETURN);
+      if (MEM_STATUS_AT0(reg->bt_mem_end, node->m.regnum))
+        len += (NODE_IS_RECURSION(node)
+                ? SIZE_OP_MEMORY_END_PUSH_REC : SIZE_OP_MEMORY_END_PUSH);
+      else
+        len += (NODE_IS_RECURSION(node)
+                ? SIZE_OP_MEMORY_END_REC : SIZE_OP_MEMORY_END);
+
+      r = add_op(reg, OP_JUMP);
+      if (r != 0) return r;
+      COP(reg)->jump.addr = len + SIZE_INC_OP;
+    }
   }
 #endif
 
   if (MEM_STATUS_AT0(reg->bt_mem_start, node->m.regnum))
-    r = add_opcode(reg, OP_MEMORY_START_PUSH);
+    r = add_op(reg, OP_MEMORY_START_PUSH);
   else
-    r = add_opcode(reg, OP_MEMORY_START);
-  if (r != 0) return r;
-  r = add_mem_num(reg, node->m.regnum);
+    r = add_op(reg, OP_MEMORY_START);
   if (r != 0) return r;
+  COP(reg)->memory_start.num = node->m.regnum;
+
   r = compile_tree(NODE_BAG_BODY(node), reg, env);
   if (r != 0) return r;
 
 #ifdef USE_CALL
   if (MEM_STATUS_AT0(reg->bt_mem_end, node->m.regnum))
-    r = add_opcode(reg, (NODE_IS_RECURSION(node)
-                         ? OP_MEMORY_END_PUSH_REC : OP_MEMORY_END_PUSH));
+    r = add_op(reg, (NODE_IS_RECURSION(node)
+                     ? OP_MEMORY_END_PUSH_REC : OP_MEMORY_END_PUSH));
   else
-    r = add_opcode(reg, (NODE_IS_RECURSION(node)
-                         ? OP_MEMORY_END_REC : OP_MEMORY_END));
+    r = add_op(reg, (NODE_IS_RECURSION(node) ? OP_MEMORY_END_REC : OP_MEMORY_END));
   if (r != 0) return r;
-  r = add_mem_num(reg, node->m.regnum);
+  COP(reg)->memory_end.num = node->m.regnum;
+
   if (NODE_IS_CALLED(node)) {
     if (r != 0) return r;
-    r = add_opcode(reg, OP_RETURN);
+    r = add_op(reg, OP_RETURN);
   }
 #else
   if (MEM_STATUS_AT0(reg->bt_mem_end, node->m.regnum))
-    r = add_opcode(reg, OP_MEMORY_END_PUSH);
+    r = add_op(reg, OP_MEMORY_END_PUSH);
   else
-    r = add_opcode(reg, OP_MEMORY_END);
+    r = add_op(reg, OP_MEMORY_END);
   if (r != 0) return r;
-  r = add_mem_num(reg, node->m.regnum);
+  COP(reg)->memory_end.num = node->m.regnum;
 #endif
 
   return r;
@@ -1231,7 +1444,7 @@ compile_bag_node(BagNode* node, regex_t* reg, ScanEnv* env)
     break;
 
   case BAG_STOP_BACKTRACK:
-    if (NODE_IS_STOP_BT_SIMPLE_REPEAT(node)) {
+    if (NODE_IS_STRICT_REAL_REPEAT(node)) {
       QuantNode* qn = QUANT_(NODE_BAG_BODY(node));
       r = compile_tree_n_times(NODE_QUANT_BODY(qn), qn->lower, reg, env);
       if (r != 0) return r;
@@ -1239,32 +1452,36 @@ compile_bag_node(BagNode* node, regex_t* reg, ScanEnv* env)
       len = compile_length_tree(NODE_QUANT_BODY(qn), reg);
       if (len < 0) return len;
 
-      r = add_opcode_rel_addr(reg, OP_PUSH, len + SIZE_OP_POP_OUT + SIZE_OP_JUMP);
+      r = add_op(reg, OP_PUSH);
       if (r != 0) return r;
+      COP(reg)->push.addr = SIZE_INC_OP + len + SIZE_OP_POP_OUT + SIZE_OP_JUMP;
+
       r = compile_tree(NODE_QUANT_BODY(qn), reg, env);
       if (r != 0) return r;
-      r = add_opcode(reg, OP_POP_OUT);
+      r = add_op(reg, OP_POP_OUT);
       if (r != 0) return r;
-      r = add_opcode_rel_addr(reg, OP_JUMP,
-           -((int )SIZE_OP_PUSH + len + (int )SIZE_OP_POP_OUT + (int )SIZE_OP_JUMP));
+
+      r = add_op(reg, OP_JUMP);
+      if (r != 0) return r;
+      COP(reg)->jump.addr = -((int )SIZE_OP_PUSH + len + (int )SIZE_OP_POP_OUT);
     }
     else {
-      r = add_opcode(reg, OP_ATOMIC_START);
+      r = add_op(reg, OP_ATOMIC_START);
       if (r != 0) return r;
       r = compile_tree(NODE_BAG_BODY(node), reg, env);
       if (r != 0) return r;
-      r = add_opcode(reg, OP_ATOMIC_END);
+      r = add_op(reg, OP_ATOMIC_END);
     }
     break;
 
   case BAG_IF_ELSE:
     {
-      int cond_len, then_len, jump_len;
+      int cond_len, then_len, else_len, jump_len;
       Node* cond = NODE_BAG_BODY(node);
       Node* Then = node->te.Then;
       Node* Else = node->te.Else;
 
-      r = add_opcode(reg, OP_ATOMIC_START);
+      r = add_op(reg, OP_ATOMIC_START);
       if (r != 0) return r;
 
       cond_len = compile_length_tree(cond, reg);
@@ -1276,14 +1493,15 @@ compile_bag_node(BagNode* node, regex_t* reg, ScanEnv* env)
       else
         then_len = 0;
 
-      jump_len = cond_len + then_len + SIZE_OP_ATOMIC_END;
-      if (IS_NOT_NULL(Else)) jump_len += SIZE_OP_JUMP;
+      jump_len = cond_len + then_len + SIZE_OP_ATOMIC_END + SIZE_OP_JUMP;
 
-      r = add_opcode_rel_addr(reg, OP_PUSH, jump_len);
+      r = add_op(reg, OP_PUSH);
       if (r != 0) return r;
+      COP(reg)->push.addr = SIZE_INC_OP + jump_len;
+
       r = compile_tree(cond, reg, env);
       if (r != 0) return r;
-      r = add_opcode(reg, OP_ATOMIC_END);
+      r = add_op(reg, OP_ATOMIC_END);
       if (r != 0) return r;
 
       if (IS_NOT_NULL(Then)) {
@@ -1292,9 +1510,20 @@ compile_bag_node(BagNode* node, regex_t* reg, ScanEnv* env)
       }
 
       if (IS_NOT_NULL(Else)) {
-        int else_len = compile_length_tree(Else, reg);
-        r = add_opcode_rel_addr(reg, OP_JUMP, else_len);
-        if (r != 0) return r;
+        else_len = compile_length_tree(Else, reg);
+        if (else_len < 0) return else_len;
+      }
+      else
+        else_len = 0;
+
+      r = add_op(reg, OP_JUMP);
+      if (r != 0) return r;
+      COP(reg)->jump.addr = SIZE_OP_ATOMIC_END + else_len + SIZE_INC_OP;
+
+      r = add_op(reg, OP_ATOMIC_END);
+      if (r != 0) return r;
+
+      if (IS_NOT_NULL(Else)) {
         r = compile_tree(Else, reg, env);
       }
     }
@@ -1338,8 +1567,8 @@ compile_length_anchor_node(AnchorNode* node, regex_t* reg)
     len = SIZE_OP_WORD_BOUNDARY;
     break;
 
-  case ANCR_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY:
-  case ANCR_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY:
+  case ANCR_TEXT_SEGMENT_BOUNDARY:
+  case ANCR_NO_TEXT_SEGMENT_BOUNDARY:
     len = SIZE_OPCODE;
     break;
 
@@ -1358,19 +1587,19 @@ compile_anchor_node(AnchorNode* node, regex_t* reg, ScanEnv* env)
   enum OpCode op;
 
   switch (node->type) {
-  case ANCR_BEGIN_BUF:      r = add_opcode(reg, OP_BEGIN_BUF);      break;
-  case ANCR_END_BUF:        r = add_opcode(reg, OP_END_BUF);        break;
-  case ANCR_BEGIN_LINE:     r = add_opcode(reg, OP_BEGIN_LINE);     break;
-  case ANCR_END_LINE:       r = add_opcode(reg, OP_END_LINE);       break;
-  case ANCR_SEMI_END_BUF:   r = add_opcode(reg, OP_SEMI_END_BUF);   break;
-  case ANCR_BEGIN_POSITION: r = add_opcode(reg, OP_BEGIN_POSITION); break;
+  case ANCR_BEGIN_BUF:      r = add_op(reg, OP_BEGIN_BUF);      break;
+  case ANCR_END_BUF:        r = add_op(reg, OP_END_BUF);        break;
+  case ANCR_BEGIN_LINE:     r = add_op(reg, OP_BEGIN_LINE);     break;
+  case ANCR_END_LINE:       r = add_op(reg, OP_END_LINE);       break;
+  case ANCR_SEMI_END_BUF:   r = add_op(reg, OP_SEMI_END_BUF);   break;
+  case ANCR_BEGIN_POSITION: r = add_op(reg, OP_BEGIN_POSITION); break;
 
   case ANCR_WORD_BOUNDARY:
     op = OP_WORD_BOUNDARY;
   word:
-    r = add_opcode(reg, op);
+    r = add_op(reg, op);
     if (r != 0) return r;
-    r = add_mode(reg, (ModeType )node->ascii_mode);
+    COP(reg)->word_boundary.mode = (ModeType )node->ascii_mode;
     break;
 
   case ANCR_NO_WORD_BOUNDARY:
@@ -1385,36 +1614,50 @@ compile_anchor_node(AnchorNode* node, regex_t* reg, ScanEnv* env)
     break;
 #endif
 
-  case ANCR_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY:
-    r = add_opcode(reg, OP_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY);
-    break;
+  case ANCR_TEXT_SEGMENT_BOUNDARY:
+  case ANCR_NO_TEXT_SEGMENT_BOUNDARY:
+    {
+      enum TextSegmentBoundaryType type;
+
+      r = add_op(reg, OP_TEXT_SEGMENT_BOUNDARY);
+      if (r != 0) return r;
+
+      type = EXTENDED_GRAPHEME_CLUSTER_BOUNDARY;
+#ifdef USE_UNICODE_WORD_BREAK
+      if (ONIG_IS_OPTION_ON(reg->options, ONIG_OPTION_TEXT_SEGMENT_WORD))
+        type = WORD_BOUNDARY;
+#endif
 
-  case ANCR_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY:
-    r = add_opcode(reg, OP_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY);
+      COP(reg)->text_segment_boundary.type = type;
+      COP(reg)->text_segment_boundary.not =
+        (node->type == ANCR_NO_TEXT_SEGMENT_BOUNDARY ? 1 : 0);
+    }
     break;
 
   case ANCR_PREC_READ:
-    r = add_opcode(reg, OP_PREC_READ_START);
+    r = add_op(reg, OP_PREC_READ_START);
     if (r != 0) return r;
     r = compile_tree(NODE_ANCHOR_BODY(node), reg, env);
     if (r != 0) return r;
-    r = add_opcode(reg, OP_PREC_READ_END);
+    r = add_op(reg, OP_PREC_READ_END);
     break;
 
   case ANCR_PREC_READ_NOT:
     len = compile_length_tree(NODE_ANCHOR_BODY(node), reg);
     if (len < 0) return len;
-    r = add_opcode_rel_addr(reg, OP_PREC_READ_NOT_START, len + SIZE_OP_PREC_READ_NOT_END);
+
+    r = add_op(reg, OP_PREC_READ_NOT_START);
     if (r != 0) return r;
+    COP(reg)->prec_read_not_start.addr = SIZE_INC_OP + len + SIZE_OP_PREC_READ_NOT_END;
     r = compile_tree(NODE_ANCHOR_BODY(node), reg, env);
     if (r != 0) return r;
-    r = add_opcode(reg, OP_PREC_READ_NOT_END);
+    r = add_op(reg, OP_PREC_READ_NOT_END);
     break;
 
   case ANCR_LOOK_BEHIND:
     {
       int n;
-      r = add_opcode(reg, OP_LOOK_BEHIND);
+      r = add_op(reg, OP_LOOK_BEHIND);
       if (r != 0) return r;
       if (node->char_len < 0) {
         r = get_char_len_node(NODE_ANCHOR_BODY(node), reg, &n);
@@ -1423,8 +1666,7 @@ compile_anchor_node(AnchorNode* node, regex_t* reg, ScanEnv* env)
       else
         n = node->char_len;
 
-      r = add_length(reg, n);
-      if (r != 0) return r;
+      COP(reg)->look_behind.len = n;
       r = compile_tree(NODE_ANCHOR_BODY(node), reg, env);
     }
     break;
@@ -1434,20 +1676,22 @@ compile_anchor_node(AnchorNode* node, regex_t* reg, ScanEnv* env)
       int n;
 
       len = compile_length_tree(NODE_ANCHOR_BODY(node), reg);
-      r = add_opcode_rel_addr(reg, OP_LOOK_BEHIND_NOT_START,
-                              len + SIZE_OP_LOOK_BEHIND_NOT_END);
+      r = add_op(reg, OP_LOOK_BEHIND_NOT_START);
       if (r != 0) return r;
+      COP(reg)->look_behind_not_start.addr = SIZE_INC_OP + len + SIZE_OP_LOOK_BEHIND_NOT_END;
+
       if (node->char_len < 0) {
         r = get_char_len_node(NODE_ANCHOR_BODY(node), reg, &n);
         if (r != 0) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;
       }
       else
         n = node->char_len;
-      r = add_length(reg, n);
-      if (r != 0) return r;
+
+      COP(reg)->look_behind_not_start.len = n;
+
       r = compile_tree(NODE_ANCHOR_BODY(node), reg, env);
       if (r != 0) return r;
-      r = add_opcode(reg, OP_LOOK_BEHIND_NOT_END);
+      r = add_op(reg, OP_LOOK_BEHIND_NOT_END);
     }
     break;
 
@@ -1466,31 +1710,21 @@ compile_gimmick_node(GimmickNode* node, regex_t* reg)
 
   switch (node->type) {
   case GIMMICK_FAIL:
-    r = add_opcode(reg, OP_FAIL);
-    break;
-
-  case GIMMICK_KEEP:
-    r = add_opcode(reg, OP_PUSH_SAVE_VAL);
-    if (r != 0) return r;
-    r = add_save_type(reg, SAVE_KEEP);
-    if (r != 0) return r;
-    r = add_mem_num(reg, node->id);
+    r = add_op(reg, OP_FAIL);
     break;
 
   case GIMMICK_SAVE:
-    r = add_opcode(reg, OP_PUSH_SAVE_VAL);
+    r = add_op(reg, OP_PUSH_SAVE_VAL);
     if (r != 0) return r;
-    r = add_save_type(reg, node->detail_type);
-    if (r != 0) return r;
-    r = add_mem_num(reg, node->id);
+    COP(reg)->push_save_val.type = node->detail_type;
+    COP(reg)->push_save_val.id   = node->id;
     break;
 
   case GIMMICK_UPDATE_VAR:
-    r = add_opcode(reg, OP_UPDATE_VAR);
-    if (r != 0) return r;
-    r = add_update_var_type(reg, node->detail_type);
+    r = add_op(reg, OP_UPDATE_VAR);
     if (r != 0) return r;
-    r = add_mem_num(reg, node->id);
+    COP(reg)->update_var.type = node->detail_type;
+    COP(reg)->update_var.id   = node->id;
     break;
 
 #ifdef USE_CALLOUT
@@ -1499,15 +1733,17 @@ compile_gimmick_node(GimmickNode* node, regex_t* reg)
     case ONIG_CALLOUT_OF_CONTENTS:
     case ONIG_CALLOUT_OF_NAME:
       {
-        r = add_opcode(reg, (node->detail_type == ONIG_CALLOUT_OF_CONTENTS) ?
-                                  OP_CALLOUT_CONTENTS : OP_CALLOUT_NAME);
-        if (r != 0) return r;
         if (node->detail_type == ONIG_CALLOUT_OF_NAME) {
-          r = add_mem_num(reg, node->id);
+          r = add_op(reg, OP_CALLOUT_NAME);
           if (r != 0) return r;
+          COP(reg)->callout_name.id  = node->id;
+          COP(reg)->callout_name.num = node->num;
+        }
+        else {
+          r = add_op(reg, OP_CALLOUT_CONTENTS);
+          if (r != 0) return r;
+          COP(reg)->callout_contents.num = node->num;
         }
-        r = add_mem_num(reg, node->num);
-        if (r != 0) return r;
       }
       break;
 
@@ -1531,7 +1767,6 @@ compile_length_gimmick_node(GimmickNode* node, regex_t* reg)
     len = SIZE_OP_FAIL;
     break;
 
-  case GIMMICK_KEEP:
   case GIMMICK_SAVE:
     len = SIZE_OP_PUSH_SAVE_VAL;
     break;
@@ -1606,35 +1841,7 @@ compile_length_tree(Node* node, regex_t* reg)
     break;
 
   case NODE_BACKREF:
-    {
-      BackRefNode* br = BACKREF_(node);
-
-      if (NODE_IS_CHECKER(node)) {
-#ifdef USE_BACKREF_WITH_LEVEL
-        if (NODE_IS_NEST_LEVEL(node)) {
-          r = SIZE_OPCODE + SIZE_LENGTH + SIZE_LENGTH + (SIZE_MEMNUM * br->back_num);
-        }
-        else
-#endif
-          r = SIZE_OPCODE + SIZE_LENGTH + (SIZE_MEMNUM * br->back_num);
-      }
-      else {
-#ifdef USE_BACKREF_WITH_LEVEL
-        if (NODE_IS_NEST_LEVEL(node)) {
-          r = SIZE_OPCODE + SIZE_OPTION + SIZE_LENGTH +
-            SIZE_LENGTH + (SIZE_MEMNUM * br->back_num);
-        }
-        else
-#endif
-        if (br->back_num == 1) {
-          r = ((!IS_IGNORECASE(reg->options) && br->back_static[0] <= 2)
-               ? SIZE_OPCODE : (SIZE_OPCODE + SIZE_MEMNUM));
-        }
-        else {
-          r = SIZE_OPCODE + SIZE_LENGTH + (SIZE_MEMNUM * br->back_num);
-        }
-      }
-    }
+    r = SIZE_OP_BACKREF;
     break;
 
 #ifdef USE_CALL
@@ -1689,21 +1896,23 @@ compile_tree(Node* node, regex_t* reg, ScanEnv* env)
           len += SIZE_OP_PUSH + SIZE_OP_JUMP;
         }
       } while (IS_NOT_NULL(x = NODE_CDR(x)));
-      pos = reg->used + len;  /* goal position */
+      pos = COP_CURR_OFFSET(reg) + 1 + len;  /* goal position */
 
       do {
         len = compile_length_tree(NODE_CAR(node), reg);
         if (IS_NOT_NULL(NODE_CDR(node))) {
           enum OpCode push = NODE_IS_SUPER(node) ? OP_PUSH_SUPER : OP_PUSH;
-          r = add_opcode_rel_addr(reg, push, len + SIZE_OP_JUMP);
+          r = add_op(reg, push);
           if (r != 0) break;
+          COP(reg)->push.addr = SIZE_INC_OP + len + SIZE_OP_JUMP;
         }
         r = compile_tree(NODE_CAR(node), reg, env);
         if (r != 0) break;
         if (IS_NOT_NULL(NODE_CDR(node))) {
-          len = pos - (reg->used + SIZE_OP_JUMP);
-          r = add_opcode_rel_addr(reg, OP_JUMP, len);
+          len = pos - (COP_CURR_OFFSET(reg) + 1);
+          r = add_op(reg, OP_JUMP);
           if (r != 0) break;
+          COP(reg)->jump.addr = len;
         }
       } while (IS_NOT_NULL(node = NODE_CDR(node)));
     }
@@ -1726,10 +1935,8 @@ compile_tree(Node* node, regex_t* reg, ScanEnv* env)
 
       switch (CTYPE_(node)->ctype) {
       case CTYPE_ANYCHAR:
-        if (IS_MULTILINE(CTYPE_OPTION(node, reg)))
-          r = add_opcode(reg, OP_ANYCHAR_ML);
-        else
-          r = add_opcode(reg, OP_ANYCHAR);
+        r = add_op(reg, IS_MULTILINE(CTYPE_OPTION(node, reg)) ?
+                   OP_ANYCHAR_ML : OP_ANYCHAR);
         break;
 
       case ONIGENC_CTYPE_WORD:
@@ -1739,7 +1946,7 @@ compile_tree(Node* node, regex_t* reg, ScanEnv* env)
         else {
           op = CTYPE_(node)->not != 0 ? OP_NO_WORD_ASCII : OP_WORD_ASCII;
         }
-        r = add_opcode(reg, op);
+        r = add_op(reg, op);
         break;
 
       default:
@@ -1756,30 +1963,28 @@ compile_tree(Node* node, regex_t* reg, ScanEnv* env)
       if (NODE_IS_CHECKER(node)) {
 #ifdef USE_BACKREF_WITH_LEVEL
         if (NODE_IS_NEST_LEVEL(node)) {
-          r = add_opcode(reg, OP_BACKREF_CHECK_WITH_LEVEL);
-          if (r != 0) return r;
-          r = add_length(reg, br->nest_level);
+          r = add_op(reg, OP_BACKREF_CHECK_WITH_LEVEL);
           if (r != 0) return r;
+          COP(reg)->backref_general.nest_level = br->nest_level;
         }
         else
 #endif
           {
-            r = add_opcode(reg, OP_BACKREF_CHECK);
+            r = add_op(reg, OP_BACKREF_CHECK);
             if (r != 0) return r;
           }
-
         goto add_bacref_mems;
       }
       else {
 #ifdef USE_BACKREF_WITH_LEVEL
         if (NODE_IS_NEST_LEVEL(node)) {
-          r = add_opcode(reg, OP_BACKREF_WITH_LEVEL);
-          if (r != 0) return r;
-          r = add_option(reg, (reg->options & ONIG_OPTION_IGNORECASE));
-          if (r != 0) return r;
-          r = add_length(reg, br->nest_level);
-          if (r != 0) return r;
+          if ((reg->options & ONIG_OPTION_IGNORECASE) != 0)
+            r = add_op(reg, OP_BACKREF_WITH_LEVEL_IC);
+          else
+            r = add_op(reg, OP_BACKREF_WITH_LEVEL);
 
+          if (r != 0) return r;
+          COP(reg)->backref_general.nest_level = br->nest_level;
           goto add_bacref_mems;
         }
         else
@@ -1787,41 +1992,47 @@ compile_tree(Node* node, regex_t* reg, ScanEnv* env)
         if (br->back_num == 1) {
           n = br->back_static[0];
           if (IS_IGNORECASE(reg->options)) {
-            r = add_opcode(reg, OP_BACKREF_N_IC);
+            r = add_op(reg, OP_BACKREF_N_IC);
             if (r != 0) return r;
-            r = add_mem_num(reg, n);
+            COP(reg)->backref_n.n1 = n;
           }
           else {
             switch (n) {
-            case 1:  r = add_opcode(reg, OP_BACKREF1); break;
-            case 2:  r = add_opcode(reg, OP_BACKREF2); break;
+            case 1:  r = add_op(reg, OP_BACKREF1); break;
+            case 2:  r = add_op(reg, OP_BACKREF2); break;
             default:
-              r = add_opcode(reg, OP_BACKREF_N);
+              r = add_op(reg, OP_BACKREF_N);
               if (r != 0) return r;
-              r = add_mem_num(reg, n);
+              COP(reg)->backref_n.n1 = n;
               break;
             }
           }
         }
         else {
-          int i;
+          int num;
           int* p;
 
-          if (IS_IGNORECASE(reg->options)) {
-            r = add_opcode(reg, OP_BACKREF_MULTI_IC);
-          }
-          else {
-            r = add_opcode(reg, OP_BACKREF_MULTI);
-          }
+          r = add_op(reg, IS_IGNORECASE(reg->options) ?
+                     OP_BACKREF_MULTI_IC : OP_BACKREF_MULTI);
           if (r != 0) return r;
 
         add_bacref_mems:
-          r = add_length(reg, br->back_num);
-          if (r != 0) return r;
-          p = BACKREFS_P(br);
-          for (i = br->back_num - 1; i >= 0; i--) {
-            r = add_mem_num(reg, p[i]);
-            if (r != 0) return r;
+          num = br->back_num;
+          COP(reg)->backref_general.num = num;
+          if (num == 1) {
+            COP(reg)->backref_general.n1 = br->back_static[0];
+          }
+          else {
+            int i, j;
+            MemNumType* ns;
+
+            ns = xmalloc(sizeof(MemNumType) * num);
+            CHECK_NULL_RETURN_MEMERR(ns);
+            COP(reg)->backref_general.ns = ns;
+            p = BACKREFS_P(br);
+            for (i = num - 1, j = 0; i >= 0; i--, j++) {
+              ns[j] = p[i];
+            }
           }
         }
       }
@@ -2113,6 +2324,7 @@ fix_unset_addr_list(UnsetAddrList* uslist, regex_t* reg)
   int i, offset;
   BagNode* en;
   AbsAddrType addr;
+  AbsAddrType* paddr;
 
   for (i = 0; i < uslist->num; i++) {
     if (! NODE_IS_ADDR_FIXED(uslist->us[i].target))
@@ -2122,7 +2334,8 @@ fix_unset_addr_list(UnsetAddrList* uslist, regex_t* reg)
     addr   = en->m.called_addr;
     offset = uslist->us[i].offset;
 
-    BB_WRITE(reg, offset, &addr, SIZE_ABSADDR);
+    paddr = (AbsAddrType* )((char* )reg->ops + offset);
+    *paddr = addr;
   }
   return 0;
 }
@@ -2598,8 +2811,7 @@ check_type_tree(Node* node, int type_mask, int bag_mask, int anchor_mask)
   case NODE_LIST:
   case NODE_ALT:
     do {
-      r = check_type_tree(NODE_CAR(node), type_mask, bag_mask,
-                          anchor_mask);
+      r = check_type_tree(NODE_CAR(node), type_mask, bag_mask, anchor_mask);
     } while (r == 0 && IS_NOT_NULL(node = NODE_CDR(node)));
     break;
 
@@ -2852,7 +3064,7 @@ tree_max_len(Node* node, ScanEnv* env)
       if (qn->upper != 0) {
         len = tree_max_len(NODE_BODY(node), env);
         if (len != 0) {
-          if (! IS_REPEAT_INFINITE(qn->upper))
+          if (! IS_INFINITE_REPEAT(qn->upper))
             len = distance_multiply(len, qn->upper);
           else
             len = INFINITE_LEN;
@@ -3398,7 +3610,7 @@ next_setup(Node* node, Node* next_node, regex_t* reg)
   type = NODE_TYPE(node);
   if (type == NODE_QUANT) {
     QuantNode* qn = QUANT_(node);
-    if (qn->greedy && IS_REPEAT_INFINITE(qn->upper)) {
+    if (qn->greedy && IS_INFINITE_REPEAT(qn->upper)) {
 #ifdef USE_QUANT_PEEK_NEXT
       Node* n = get_head_value_node(next_node, 1, reg);
       /* '\0': for UTF-16BE etc... */
@@ -3408,7 +3620,7 @@ next_setup(Node* node, Node* next_node, regex_t* reg)
 #endif
       /* automatic posseivation a*b ==> (?>a*)b */
       if (qn->lower <= 1) {
-        if (NODE_IS_SIMPLE_TYPE(NODE_BODY(node))) {
+        if (is_strict_real_node(NODE_BODY(node))) {
           Node *x, *y;
           x = get_head_value_node(NODE_BODY(node), 0, reg);
           if (IS_NOT_NULL(x)) {
@@ -3416,7 +3628,7 @@ next_setup(Node* node, Node* next_node, regex_t* reg)
             if (IS_NOT_NULL(y) && is_exclusive(x, y, reg)) {
               Node* en = onig_node_new_bag(BAG_STOP_BACKTRACK);
               CHECK_NULL_RETURN_MEMERR(en);
-              NODE_STATUS_ADD(en, STOP_BT_SIMPLE_REPEAT);
+              NODE_STATUS_ADD(en, STRICT_REAL_REPEAT);
               swap_node(node, en);
               NODE_BODY(node) = en;
             }
@@ -3818,11 +4030,11 @@ expand_case_fold_string(Node* node, regex_t* reg, int state)
   return r;
 }
 
-#ifdef USE_INSISTENT_CHECK_CAPTURES_IN_EMPTY_REPEAT
-static enum QuantBodyEmpty
+#ifdef USE_STUBBORN_CHECK_CAPTURES_IN_EMPTY_REPEAT
+static enum BodyEmptyType
 quantifiers_memory_node_info(Node* node)
 {
-  int r = QUANT_BODY_IS_EMPTY;
+  int r = BODY_IS_EMPTY_POSSIBILITY;
 
   switch (NODE_TYPE(node)) {
   case NODE_LIST:
@@ -3839,7 +4051,7 @@ quantifiers_memory_node_info(Node* node)
 #ifdef USE_CALL
   case NODE_CALL:
     if (NODE_IS_RECURSION(node)) {
-      return QUANT_BODY_IS_EMPTY_REC; /* tiny version */
+      return BODY_IS_EMPTY_POSSIBILITY_REC; /* tiny version */
     }
     else
       r = quantifiers_memory_node_info(NODE_BODY(node));
@@ -3861,9 +4073,9 @@ quantifiers_memory_node_info(Node* node)
       switch (en->type) {
       case BAG_MEMORY:
         if (NODE_IS_RECURSION(node)) {
-          return QUANT_BODY_IS_EMPTY_REC;
+          return BODY_IS_EMPTY_POSSIBILITY_REC;
         }
-        return QUANT_BODY_IS_EMPTY_MEM;
+        return BODY_IS_EMPTY_POSSIBILITY_MEM;
         break;
 
       case BAG_OPTION:
@@ -3900,7 +4112,7 @@ quantifiers_memory_node_info(Node* node)
 
   return r;
 }
-#endif /* USE_INSISTENT_CHECK_CAPTURES_IN_EMPTY_REPEAT */
+#endif /* USE_STUBBORN_CHECK_CAPTURES_IN_EMPTY_REPEAT */
 
 
 #ifdef USE_CALL
@@ -4168,7 +4380,7 @@ setup_called_state_call(Node* node, int state)
     {
       QuantNode* qn = QUANT_(node);
 
-      if (IS_REPEAT_INFINITE(qn->upper) || qn->upper >= 2)
+      if (IS_INFINITE_REPEAT(qn->upper) || qn->upper >= 2)
         state |= IN_REAL_REPEAT;
       if (qn->lower != qn->upper)
         state |= IN_VAR_REPEAT;
@@ -4285,7 +4497,7 @@ setup_called_state(Node* node, int state)
     {
       QuantNode* qn = QUANT_(node);
 
-      if (IS_REPEAT_INFINITE(qn->upper) || qn->upper >= 2)
+      if (IS_INFINITE_REPEAT(qn->upper) || qn->upper >= 2)
         state |= IN_REAL_REPEAT;
       if (qn->lower != qn->upper)
         state |= IN_VAR_REPEAT;
@@ -4340,22 +4552,20 @@ setup_anchor(Node* node, regex_t* reg, int state, ScanEnv* env)
   | NODE_BIT_CTYPE | NODE_BIT_ANCHOR | NODE_BIT_BAG | NODE_BIT_QUANT \
   | NODE_BIT_CALL | NODE_BIT_GIMMICK)
 
-#define ALLOWED_BAG_IN_LB       ( 1<<BAG_MEMORY | 1<<BAG_OPTION )
-#define ALLOWED_BAG_IN_LB_NOT   (1<<BAG_OPTION)
+#define ALLOWED_BAG_IN_LB       ( 1<<BAG_MEMORY | 1<<BAG_OPTION | 1<<BAG_IF_ELSE )
+#define ALLOWED_BAG_IN_LB_NOT   ( 1<<BAG_OPTION | 1<<BAG_IF_ELSE )
 
 #define ALLOWED_ANCHOR_IN_LB \
   ( ANCR_LOOK_BEHIND | ANCR_BEGIN_LINE | ANCR_END_LINE | ANCR_BEGIN_BUF \
   | ANCR_BEGIN_POSITION | ANCR_WORD_BOUNDARY | ANCR_NO_WORD_BOUNDARY \
   | ANCR_WORD_BEGIN | ANCR_WORD_END \
-  | ANCR_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY \
-  | ANCR_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY )
+  | ANCR_TEXT_SEGMENT_BOUNDARY | ANCR_NO_TEXT_SEGMENT_BOUNDARY )
 
 #define ALLOWED_ANCHOR_IN_LB_NOT \
   ( ANCR_LOOK_BEHIND | ANCR_LOOK_BEHIND_NOT | ANCR_BEGIN_LINE \
   | ANCR_END_LINE | ANCR_BEGIN_BUF | ANCR_BEGIN_POSITION | ANCR_WORD_BOUNDARY \
   | ANCR_NO_WORD_BOUNDARY | ANCR_WORD_BEGIN | ANCR_WORD_END \
-  | ANCR_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY \
-  | ANCR_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY )
+  | ANCR_TEXT_SEGMENT_BOUNDARY | ANCR_NO_TEXT_SEGMENT_BOUNDARY )
 
   int r;
   AnchorNode* an = ANCHOR_(node);
@@ -4419,24 +4629,24 @@ setup_quant(Node* node, regex_t* reg, int state, ScanEnv* env)
     NODE_STATUS_ADD(node, IN_MULTI_ENTRY);
   }
 
-  if (IS_REPEAT_INFINITE(qn->upper) || qn->upper >= 1) {
+  if (IS_INFINITE_REPEAT(qn->upper) || qn->upper >= 1) {
     d = tree_min_len(body, env);
     if (d == 0) {
-#ifdef USE_INSISTENT_CHECK_CAPTURES_IN_EMPTY_REPEAT
-      qn->body_empty_info = quantifiers_memory_node_info(body);
-      if (qn->body_empty_info == QUANT_BODY_IS_EMPTY_REC) {
+#ifdef USE_STUBBORN_CHECK_CAPTURES_IN_EMPTY_REPEAT
+      qn->emptiness = quantifiers_memory_node_info(body);
+      if (qn->emptiness == BODY_IS_EMPTY_POSSIBILITY_REC) {
         if (NODE_TYPE(body) == NODE_BAG &&
             BAG_(body)->type == BAG_MEMORY) {
           MEM_STATUS_ON(env->bt_mem_end, BAG_(body)->m.regnum);
         }
       }
 #else
-      qn->body_empty_info = QUANT_BODY_IS_EMPTY;
+      qn->emptiness = BODY_IS_EMPTY_POSSIBILITY;
 #endif
     }
   }
 
-  if (IS_REPEAT_INFINITE(qn->upper) || qn->upper >= 2)
+  if (IS_INFINITE_REPEAT(qn->upper) || qn->upper >= 2)
     state |= IN_REAL_REPEAT;
   if (qn->lower != qn->upper)
     state |= IN_VAR_REPEAT;
@@ -4447,7 +4657,7 @@ setup_quant(Node* node, regex_t* reg, int state, ScanEnv* env)
   /* expand string */
 #define EXPAND_STRING_MAX_LENGTH  100
   if (NODE_TYPE(body) == NODE_STRING) {
-    if (!IS_REPEAT_INFINITE(qn->lower) && qn->lower == qn->upper &&
+    if (!IS_INFINITE_REPEAT(qn->lower) && qn->lower == qn->upper &&
         qn->lower > 1 && qn->lower <= EXPAND_STRING_MAX_LENGTH) {
       int len = NODE_STRING_LEN(body);
       StrNode* sn = STR_(body);
@@ -4465,8 +4675,7 @@ setup_quant(Node* node, regex_t* reg, int state, ScanEnv* env)
     }
   }
 
-#ifdef USE_OP_PUSH_OR_JUMP_EXACT
-  if (qn->greedy && (qn->body_empty_info != QUANT_BODY_IS_NOT_EMPTY)) {
+  if (qn->greedy && (qn->emptiness == BODY_IS_NOT_EMPTY)) {
     if (NODE_TYPE(body) == NODE_QUANT) {
       QuantNode* tqn = QUANT_(body);
       if (IS_NOT_NULL(tqn->head_exact)) {
@@ -4478,13 +4687,12 @@ setup_quant(Node* node, regex_t* reg, int state, ScanEnv* env)
       qn->head_exact = get_head_value_node(NODE_BODY(node), 1, reg);
     }
   }
-#endif
 
   return r;
 }
 
 /* setup_tree does the following work.
- 1. check empty loop. (set qn->body_empty_info)
+ 1. check empty loop. (set qn->emptiness)
  2. expand ignore-case in char class.
  3. set memory status bit flags. (reg->mem_stats)
  4. set qn->head_exact for [push, exact] -> [push_or_jump_exact1, exact].
@@ -4573,10 +4781,10 @@ setup_tree(Node* node, regex_t* reg, int state, ScanEnv* env)
           r = setup_tree(target, reg, state, env);
           if (NODE_TYPE(target) == NODE_QUANT) {
             QuantNode* tqn = QUANT_(target);
-            if (IS_REPEAT_INFINITE(tqn->upper) && tqn->lower <= 1 &&
+            if (IS_INFINITE_REPEAT(tqn->upper) && tqn->lower <= 1 &&
                 tqn->greedy != 0) {  /* (?>a*), a*+ etc... */
-              if (NODE_IS_SIMPLE_TYPE(NODE_BODY(target)))
-                NODE_STATUS_ADD(node, STOP_BT_SIMPLE_REPEAT);
+              if (is_strict_real_node(NODE_BODY(target)))
+                NODE_STATUS_ADD(node, STRICT_REAL_REPEAT);
             }
           }
         }
@@ -5573,7 +5781,7 @@ optimize_nodes(Node* node, OptNode* opt, OptEnv* env)
           opt->sm.reach_end = 0;
       }
 
-      if (IS_REPEAT_INFINITE(qn->upper)) {
+      if (IS_INFINITE_REPEAT(qn->upper)) {
         if (env->mmd.max == 0 &&
             NODE_IS_ANYCHAR(NODE_BODY(node)) && qn->greedy != 0) {
           if (IS_MULTILINE(CTYPE_OPTION(NODE_QUANT_BODY(qn), env)))
@@ -6052,12 +6260,15 @@ onig_ext_set_pattern(regex_t* reg, const UChar* pattern, const UChar* pattern_en
   return ONIG_NORMAL;
 }
 
-
 extern void
 onig_free_body(regex_t* reg)
 {
   if (IS_NOT_NULL(reg)) {
-    if (IS_NOT_NULL(reg->p))                xfree(reg->p);
+    ops_free(reg);
+    if (IS_NOT_NULL(reg->string_pool)) {
+      xfree(reg->string_pool);
+      reg->string_pool_end = reg->string_pool = 0;
+    }
     if (IS_NOT_NULL(reg->exact))            xfree(reg->exact);
     if (IS_NOT_NULL(reg->repeat_range))     xfree(reg->repeat_range);
     if (IS_NOT_NULL(reg->extp)) {
@@ -6078,30 +6289,18 @@ onig_free(regex_t* reg)
   }
 }
 
-#define REGEX_TRANSFER(to,from) do {\
-  onig_free_body(to);\
-  xmemcpy(to, from, sizeof(regex_t));\
-  xfree(from);\
-} while (0)
-
-extern void
-onig_transfer(regex_t* to, regex_t* from)
-{
-  REGEX_TRANSFER(to, from);
-}
-
 
 #ifdef ONIG_DEBUG_PARSE
 static void print_tree P_((FILE* f, Node* node));
 #endif
 
+extern int onig_init_for_match_at(regex_t* reg);
+
 extern int
 onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,
              OnigErrorInfo* einfo)
 {
-#define COMPILE_INIT_SIZE  20
-
-  int r, init_size;
+  int r;
   Node*  root;
   ScanEnv  scan_env;
 #ifdef USE_CALL
@@ -6118,15 +6317,15 @@ onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,
   print_enc_string(stderr, reg->enc, pattern, pattern_end);
 #endif
 
-  if (reg->alloc == 0) {
-    init_size = (int )(pattern_end - pattern) * 2;
-    if (init_size <= 0) init_size = COMPILE_INIT_SIZE;
-    r = BB_INIT(reg, init_size);
+  if (reg->ops_alloc == 0) {
+    r = ops_init(reg, OPS_INIT_SIZE);
     if (r != 0) goto end;
   }
   else
-    reg->used = 0;
+    reg->ops_used = 0;
 
+  reg->string_pool        = 0;
+  reg->string_pool_end    = 0;
   reg->num_mem            = 0;
   reg->num_repeat         = 0;
   reg->num_null_check     = 0;
@@ -6203,15 +6402,16 @@ onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,
   r = compile_tree(root, reg, &scan_env);
   if (r == 0) {
     if (scan_env.keep_num > 0) {
-      r = add_opcode(reg, OP_UPDATE_VAR);
-      if (r != 0) goto err;
-      r = add_update_var_type(reg, UPDATE_VAR_KEEP_FROM_STACK_LAST);
-      if (r != 0) goto err;
-      r = add_mem_num(reg, 0 /* not used */);
+      r = add_op(reg, OP_UPDATE_VAR);
       if (r != 0) goto err;
+
+      COP(reg)->update_var.type = UPDATE_VAR_KEEP_FROM_STACK_LAST;
+      COP(reg)->update_var.id   = 0; /* not used */
     }
 
-    r = add_opcode(reg, OP_END);
+    r = add_op(reg, OP_END);
+    if (r != 0) goto err;
+
 #ifdef USE_CALL
     if (scan_env.num_call > 0) {
       r = fix_unset_addr_list(&uslist, reg);
@@ -6232,6 +6432,9 @@ onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,
       else
         reg->stack_pop_level = STACK_POP_LEVEL_FREE;
     }
+
+    r = ops_make_string_pool(reg);
+    if (r != 0) goto err;
   }
 #ifdef USE_CALL
   else if (scan_env.num_call > 0) {
@@ -6245,6 +6448,11 @@ onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,
   onig_print_compiled_byte_code_list(stderr, reg);
 #endif
 
+#ifdef USE_DIRECT_THREADED_CODE
+  /* opcode -> opaddr */
+  onig_init_for_match_at(reg);
+#endif
+
  end:
   return r;
 
@@ -6316,9 +6524,10 @@ onig_reg_init(regex_t* reg, OnigOptionType option, OnigCaseFoldType case_fold_fl
   (reg)->exact            = (UChar* )NULL;
   (reg)->extp             = (RegexExt* )NULL;
 
-  (reg)->p                = (UChar* )NULL;
-  (reg)->alloc            = 0;
-  (reg)->used             = 0;
+  (reg)->ops              = (Operation* )NULL;
+  (reg)->ops_curr         = (Operation* )NULL;
+  (reg)->ops_used         = 0;
+  (reg)->ops_alloc        = 0;
   (reg)->name_table       = (void* )NULL;
 
   (reg)->case_fold_flag   = case_fold_flag;
@@ -6492,6 +6701,7 @@ onig_is_code_in_cc(OnigEncoding enc, OnigCodePoint code, CClassNode* cc)
   }
   else {
     len = ONIGENC_CODE_TO_MBCLEN(enc, code);
+    if (len < 0) return 0;
   }
   return onig_is_code_in_cc_len(len, code, cc);
 }
@@ -6632,10 +6842,10 @@ print_indent_tree(FILE* f, Node* node, int indent)
     case ANCR_WORD_BEGIN:       fputs("word begin", f);     break;
     case ANCR_WORD_END:         fputs("word end", f);       break;
 #endif
-    case ANCR_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY:
-      fputs("extended-grapheme-cluster boundary", f); break;
-    case ANCR_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY:
-      fputs("no-extended-grapheme-cluster boundary", f); break;
+    case ANCR_TEXT_SEGMENT_BOUNDARY:
+      fputs("text-segment boundary", f); break;
+    case ANCR_NO_TEXT_SEGMENT_BOUNDARY:
+      fputs("no text-segment boundary", f); break;
     case ANCR_PREC_READ:
       fprintf(f, "prec read\n");
       print_indent_tree(f, NODE_BODY(node), indent + add);
@@ -6715,9 +6925,6 @@ print_indent_tree(FILE* f, Node* node, int indent)
     case GIMMICK_FAIL:
       fprintf(f, "fail");
       break;
-    case GIMMICK_KEEP:
-      fprintf(f, "keep:%d", GIMMICK_(node)->id);
-      break;
     case GIMMICK_SAVE:
       fprintf(f, "save:%d:%d", GIMMICK_(node)->detail_type, GIMMICK_(node)->id);
       break;
index d8f52742fb84236377a6d9f6890963cfe366e8c4..9fab721e000c512244a841ca0c75f24b6e262db7 100644 (file)
@@ -2,7 +2,7 @@
   regenc.c -  Oniguruma (regular expression library)
 **********************************************************************/
 /*-
- * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2019  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -77,6 +77,17 @@ enc_is_inited(OnigEncoding enc)
   return 0;
 }
 
+static int OnigEncInited;
+
+extern int
+onigenc_init(void)
+{
+  if (OnigEncInited != 0) return 0;
+
+  OnigEncInited = 1;
+  return 0;
+}
+
 extern int
 onigenc_end(void)
 {
@@ -86,15 +97,10 @@ onigenc_end(void)
     InitedList[i].enc    = 0;
     InitedList[i].inited = 0;
   }
-
   InitedListNum = 0;
-  return ONIG_NORMAL;
-}
 
-extern int
-onigenc_init(void)
-{
-  return 0;
+  OnigEncInited = 0;
+  return ONIG_NORMAL;
 }
 
 extern int
@@ -167,7 +173,7 @@ onigenc_get_right_adjust_char_head(OnigEncoding enc, const UChar* start, const U
 
 extern UChar*
 onigenc_get_right_adjust_char_head_with_prev(OnigEncoding enc,
-                                  const UChar* start, const UChar* s, const UChar** prev)
+            const UChar* start, const UChar* s, const UChar** prev)
 {
   UChar* p = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s);
 
@@ -511,7 +517,7 @@ const OnigPairCaseFoldCodes OnigAsciiLowerMap[] = {
 
 extern int
 onigenc_ascii_apply_all_case_fold(OnigCaseFoldType flag ARG_UNUSED,
-                                 OnigApplyAllCaseFoldFunc f, void* arg)
+                                  OnigApplyAllCaseFoldFunc f, void* arg)
 {
   OnigCodePoint code;
   int i, r;
@@ -533,8 +539,8 @@ onigenc_ascii_apply_all_case_fold(OnigCaseFoldType flag ARG_UNUSED,
 
 extern int
 onigenc_ascii_get_case_fold_codes_by_str(OnigCaseFoldType flag ARG_UNUSED,
-        const OnigUChar* p, const OnigUChar* end ARG_UNUSED,
-        OnigCaseFoldCodeItem items[])
+    const OnigUChar* p, const OnigUChar* end ARG_UNUSED,
+    OnigCaseFoldCodeItem items[])
 {
   if (0x41 <= *p && *p <= 0x5a) {
     items[0].byte_len = 1;
@@ -554,7 +560,7 @@ onigenc_ascii_get_case_fold_codes_by_str(OnigCaseFoldType flag ARG_UNUSED,
 
 static int
 ss_apply_all_case_fold(OnigCaseFoldType flag ARG_UNUSED,
-                      OnigApplyAllCaseFoldFunc f, void* arg)
+                       OnigApplyAllCaseFoldFunc f, void* arg)
 {
   static OnigCodePoint ss[] = { 0x73, 0x73 };
 
@@ -600,7 +606,7 @@ onigenc_get_case_fold_codes_by_str_with_map(int map_size,
     items[0].code_len = 1;
     items[0].code[0] = (OnigCodePoint )(*p + 0x20);
     if (*p == 0x53 && ess_tsett_flag != 0 && end > p + 1
-       && (*(p+1) == 0x53 || *(p+1) == 0x73)) {
+        && (*(p+1) == 0x53 || *(p+1) == 0x73)) {
       /* SS */
       items[1].byte_len = 2;
       items[1].code_len = 1;
@@ -615,7 +621,7 @@ onigenc_get_case_fold_codes_by_str_with_map(int map_size,
     items[0].code_len = 1;
     items[0].code[0] = (OnigCodePoint )(*p - 0x20);
     if (*p == 0x73 && ess_tsett_flag != 0 && end > p + 1
-       && (*(p+1) == 0x73 || *(p+1) == 0x53)) {
+        && (*(p+1) == 0x73 || *(p+1) == 0x53)) {
       /* ss */
       items[1].byte_len = 2;
       items[1].code_len = 1;
@@ -653,16 +659,16 @@ onigenc_get_case_fold_codes_by_str_with_map(int map_size,
 
     for (i = 0; i < map_size; i++) {
       if (*p == map[i].from) {
-       items[0].byte_len = 1;
-       items[0].code_len = 1;
-       items[0].code[0] = map[i].to;
-       return 1;
+        items[0].byte_len = 1;
+        items[0].code_len = 1;
+        items[0].code[0] = map[i].to;
+        return 1;
       }
       else if (*p == map[i].to) {
-       items[0].byte_len = 1;
-       items[0].code_len = 1;
-       items[0].code[0] = map[i].from;
-       return 1;
+        items[0].byte_len = 1;
+        items[0].code_len = 1;
+        items[0].code[0] = map[i].from;
+        return 1;
       }
     }
   }
@@ -673,8 +679,8 @@ onigenc_get_case_fold_codes_by_str_with_map(int map_size,
 
 extern int
 onigenc_not_support_get_ctype_code_range(OnigCtype ctype ARG_UNUSED,
-        OnigCodePoint* sb_out ARG_UNUSED,
-        const OnigCodePoint* ranges[] ARG_UNUSED)
+                                         OnigCodePoint* sb_out ARG_UNUSED,
+                                         const OnigCodePoint* ranges[] ARG_UNUSED)
 {
   return ONIG_NO_SUPPORT_CONFIG;
 }
@@ -691,7 +697,7 @@ onigenc_is_mbc_newline_0x0a(const UChar* p, const UChar* end)
 /* for single byte encodings */
 extern int
 onigenc_ascii_mbc_case_fold(OnigCaseFoldType flag ARG_UNUSED, const UChar** p,
-           const UChar*end ARG_UNUSED, UChar* lower)
+                            const UChar*end ARG_UNUSED, UChar* lower)
 {
   *lower = ONIGENC_ASCII_CODE_TO_LOWER_CASE(**p);
 
@@ -702,7 +708,7 @@ onigenc_ascii_mbc_case_fold(OnigCaseFoldType flag ARG_UNUSED, const UChar** p,
 #if 0
 extern int
 onigenc_ascii_is_mbc_ambiguous(OnigCaseFoldType flag,
-                              const UChar** pp, const UChar* end)
+                               const UChar** pp, const UChar* end)
 {
   const UChar* p = *pp;
 
@@ -738,35 +744,35 @@ onigenc_single_byte_code_to_mbc(OnigCodePoint code, UChar *buf)
 
 extern UChar*
 onigenc_single_byte_left_adjust_char_head(const UChar* start ARG_UNUSED,
-                                         const UChar* s)
+                                          const UChar* s)
 {
   return (UChar* )s;
 }
 
 extern int
 onigenc_always_true_is_allowed_reverse_match(const UChar* s   ARG_UNUSED,
-                                            const UChar* end ARG_UNUSED)
+                                             const UChar* end ARG_UNUSED)
 {
   return TRUE;
 }
 
 extern int
 onigenc_always_false_is_allowed_reverse_match(const UChar* s   ARG_UNUSED,
-                                             const UChar* end ARG_UNUSED)
+                                              const UChar* end ARG_UNUSED)
 {
   return FALSE;
 }
 
 extern int
 onigenc_always_true_is_valid_mbc_string(const UChar* s   ARG_UNUSED,
-                                       const UChar* end ARG_UNUSED)
+                                        const UChar* end ARG_UNUSED)
 {
   return TRUE;
 }
 
 extern int
 onigenc_length_check_is_valid_mbc_string(OnigEncoding enc,
-                                        const UChar* p, const UChar* end)
+                                         const UChar* p, const UChar* end)
 {
   while (p < end) {
     p += enclen(enc, p);
@@ -805,7 +811,7 @@ onigenc_mbn_mbc_to_code(OnigEncoding enc, const UChar* p, const UChar* end)
 extern int
 onigenc_mbn_mbc_case_fold(OnigEncoding enc, OnigCaseFoldType flag ARG_UNUSED,
                           const UChar** pp, const UChar* end ARG_UNUSED,
-                         UChar* lower)
+                          UChar* lower)
 {
   int len;
   const UChar *p = *pp;
@@ -847,6 +853,8 @@ onigenc_mbn_is_mbc_ambiguous(OnigEncoding enc, OnigCaseFoldType flag,
 extern int
 onigenc_mb2_code_to_mbclen(OnigCodePoint code)
 {
+  if ((code & (~0xffff)) != 0) return ONIGERR_INVALID_CODE_POINT_VALUE;
+
   if ((code & 0xff00) != 0) return 2;
   else return 1;
 }
@@ -946,7 +954,7 @@ onigenc_is_mbc_word_ascii(OnigEncoding enc, UChar* s, const UChar* end)
 
 extern int
 onigenc_mb2_is_code_ctype(OnigEncoding enc, OnigCodePoint code,
-                         unsigned int ctype)
+                          unsigned int ctype)
 {
   if (code < 128)
     return ONIGENC_IS_ASCII_CODE_CTYPE(code, ctype);
@@ -961,7 +969,7 @@ onigenc_mb2_is_code_ctype(OnigEncoding enc, OnigCodePoint code,
 
 extern int
 onigenc_mb4_is_code_ctype(OnigEncoding enc, OnigCodePoint code,
-                         unsigned int ctype)
+                          unsigned int ctype)
 {
   if (code < 128)
     return ONIGENC_IS_ASCII_CODE_CTYPE(code, ctype);
index 8a3397d4d29444865f1f40e98f499bc9385eaf5b..bd2819e21d5e505a68f003c638d0866d80f6b06b 100644 (file)
@@ -4,7 +4,7 @@
   regenc.h -  Oniguruma (regular expression library)
 **********************************************************************/
 /*-
- * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2019  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -114,6 +114,7 @@ struct PropertyNameCtype {
 /* #define USE_CRNL_AS_LINE_TERMINATOR */
 #define USE_UNICODE_PROPERTIES
 #define USE_UNICODE_EXTENDED_GRAPHEME_CLUSTER
+#define USE_UNICODE_WORD_BREAK
 /* #define USE_UNICODE_CASE_FOLD_TURKISH_AZERI */
 /* #define USE_UNICODE_ALL_LINE_TERMINATORS */  /* see Unicode.org UTS #18 */
 
@@ -174,15 +175,19 @@ extern int onigenc_mb4_is_code_ctype P_((OnigEncoding enc, OnigCodePoint code, u
 extern struct PropertyNameCtype* onigenc_euc_jp_lookup_property_name P_((register const char *str, register size_t len));
 extern struct PropertyNameCtype* onigenc_sjis_lookup_property_name P_((register const char *str, register size_t len));
 
-/* in enc/unicode.c */
+/* in unicode.c */
 extern int onigenc_unicode_is_code_ctype P_((OnigCodePoint code, unsigned int ctype));
 extern int onigenc_utf16_32_get_ctype_code_range P_((OnigCtype ctype, OnigCodePoint *sb_out, const OnigCodePoint* ranges[]));
 extern int onigenc_unicode_ctype_code_range P_((OnigCtype ctype, const OnigCodePoint* ranges[]));
 extern int onigenc_unicode_get_case_fold_codes_by_str P_((OnigEncoding enc, OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[]));
 extern int onigenc_unicode_mbc_case_fold P_((OnigEncoding enc, OnigCaseFoldType flag, const UChar** pp, const UChar* end, UChar* fold));
 extern int onigenc_unicode_apply_all_case_fold P_((OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg));
+
 extern int onigenc_egcb_is_break_position P_((OnigEncoding enc, UChar* p, UChar* prev, const UChar* start, const UChar* end));
 
+#ifdef USE_UNICODE_WORD_BREAK
+extern int onigenc_wb_is_break_position P_((OnigEncoding enc, UChar* p, UChar* prev, const UChar* start, const UChar* end));
+#endif
 
 #define UTF16_IS_SURROGATE_FIRST(c)    (((c) & 0xfc) == 0xd8)
 #define UTF16_IS_SURROGATE_SECOND(c)   (((c) & 0xfc) == 0xdc)
index 3fbcdfee02f99f85aa62b1be9c1dd654c6c3ab06..e6d1806b3aa68eec1bbab4f6a04f1291c16a62cf 100644 (file)
@@ -2,7 +2,7 @@
   regerror.c -  Oniguruma (regular expression library)
 **********************************************************************/
 /*-
- * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2019  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -205,13 +205,17 @@ static void sprint_byte_with_x(char* s, unsigned int v)
 }
 
 static int to_ascii(OnigEncoding enc, UChar *s, UChar *end,
-                   UChar buf[], int buf_size, int *is_over)
+                    UChar buf[], int buf_size, int *is_over)
 {
   int len;
   UChar *p;
   OnigCodePoint code;
 
-  if (ONIGENC_MBC_MINLEN(enc) > 1) {
+  if (!s) {
+    len = 0;
+    *is_over = 0;
+  }
+  else if (ONIGENC_MBC_MINLEN(enc) > 1) {
     p = s;
     len = 0;
     while (p < end) {
@@ -253,6 +257,23 @@ static int to_ascii(OnigEncoding enc, UChar *s, UChar *end,
 }
 
 
+extern int
+onig_is_error_code_needs_param(int code)
+{
+  switch (code) {
+  case ONIGERR_UNDEFINED_NAME_REFERENCE:
+  case ONIGERR_UNDEFINED_GROUP_REFERENCE:
+  case ONIGERR_MULTIPLEX_DEFINED_NAME:
+  case ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL:
+  case ONIGERR_INVALID_GROUP_NAME:
+  case ONIGERR_INVALID_CHAR_IN_GROUP_NAME:
+  case ONIGERR_INVALID_CHAR_PROPERTY_NAME:
+    return 1;
+  default:
+    return 0;
+  }
+}
+
 /* for ONIG_MAX_ERROR_MESSAGE_LEN */
 #define MAX_ERROR_PAR_LEN   30
 
index fa618392b0270cf3ba0a401679cb7e3dfb326b19..f957b75923a42111514f424e978a285ecc69caa2 100644 (file)
@@ -2,7 +2,7 @@
   regexec.c -  Oniguruma (regular expression library)
 **********************************************************************/
 /*-
- * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2019  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -112,7 +112,6 @@ onig_set_callout_user_data_of_match_param(OnigMatchParam* param, void* user_data
 }
 
 
-
 typedef struct {
   void* stack_p;
   int   stack_n;
@@ -134,120 +133,118 @@ typedef struct {
 
 /* arguments type */
 typedef enum {
-  ARG_SPECIAL =  -1,
-  ARG_NON     =   0,
-  ARG_RELADDR =   1,
-  ARG_ABSADDR =   2,
-  ARG_LENGTH  =   3,
-  ARG_MEMNUM  =   4,
-  ARG_OPTION  =   5,
-  ARG_MODE    =   6
+  ARG_SPECIAL = -1,
+  ARG_NON     =  0,
+  ARG_RELADDR =  1,
+  ARG_ABSADDR =  2,
+  ARG_LENGTH  =  3,
+  ARG_MEMNUM  =  4,
+  ARG_OPTION  =  5,
+  ARG_MODE    =  6
 } OpArgType;
 
 typedef struct {
   short int opcode;
   char*     name;
-  OpArgType arg_type;
 } OpInfoType;
 
 static OpInfoType OpInfo[] = {
-  { OP_FINISH,            "finish",          ARG_NON },
-  { OP_END,               "end",             ARG_NON },
-  { OP_EXACT1,            "exact1",          ARG_SPECIAL },
-  { OP_EXACT2,            "exact2",          ARG_SPECIAL },
-  { OP_EXACT3,            "exact3",          ARG_SPECIAL },
-  { OP_EXACT4,            "exact4",          ARG_SPECIAL },
-  { OP_EXACT5,            "exact5",          ARG_SPECIAL },
-  { OP_EXACTN,            "exactn",          ARG_SPECIAL },
-  { OP_EXACTMB2N1,        "exactmb2-n1",     ARG_SPECIAL },
-  { OP_EXACTMB2N2,        "exactmb2-n2",     ARG_SPECIAL },
-  { OP_EXACTMB2N3,        "exactmb2-n3",     ARG_SPECIAL },
-  { OP_EXACTMB2N,         "exactmb2-n",      ARG_SPECIAL },
-  { OP_EXACTMB3N,         "exactmb3n"  ,     ARG_SPECIAL },
-  { OP_EXACTMBN,          "exactmbn",        ARG_SPECIAL },
-  { OP_EXACT1_IC,         "exact1-ic",       ARG_SPECIAL },
-  { OP_EXACTN_IC,         "exactn-ic",       ARG_SPECIAL },
-  { OP_CCLASS,            "cclass",          ARG_SPECIAL },
-  { OP_CCLASS_MB,         "cclass-mb",       ARG_SPECIAL },
-  { OP_CCLASS_MIX,        "cclass-mix",      ARG_SPECIAL },
-  { OP_CCLASS_NOT,        "cclass-not",      ARG_SPECIAL },
-  { OP_CCLASS_MB_NOT,     "cclass-mb-not",   ARG_SPECIAL },
-  { OP_CCLASS_MIX_NOT,    "cclass-mix-not",  ARG_SPECIAL },
-#ifdef USE_OP_CCLASS_NODE
-  { OP_CCLASS_NODE,       "cclass-node",     ARG_SPECIAL },
+  { OP_FINISH,            "finish" },
+  { OP_END,               "end"    },
+  { OP_EXACT1,            "exact1" },
+  { OP_EXACT2,            "exact2" },
+  { OP_EXACT3,            "exact3" },
+  { OP_EXACT4,            "exact4" },
+  { OP_EXACT5,            "exact5" },
+  { OP_EXACTN,            "exactn" },
+  { OP_EXACTMB2N1,        "exactmb2-n1" },
+  { OP_EXACTMB2N2,        "exactmb2-n2" },
+  { OP_EXACTMB2N3,        "exactmb2-n3" },
+  { OP_EXACTMB2N,         "exactmb2-n"  },
+  { OP_EXACTMB3N,         "exactmb3n"   },
+  { OP_EXACTMBN,          "exactmbn"    },
+  { OP_EXACT1_IC,         "exact1-ic"   },
+  { OP_EXACTN_IC,         "exactn-ic"   },
+  { OP_CCLASS,            "cclass"      },
+  { OP_CCLASS_MB,         "cclass-mb"   },
+  { OP_CCLASS_MIX,        "cclass-mix"  },
+  { OP_CCLASS_NOT,        "cclass-not"  },
+  { OP_CCLASS_MB_NOT,     "cclass-mb-not"  },
+  { OP_CCLASS_MIX_NOT,    "cclass-mix-not" },
+  { OP_ANYCHAR,               "anychar"     },
+  { OP_ANYCHAR_ML,            "anychar-ml"  },
+  { OP_ANYCHAR_STAR,          "anychar*"    },
+  { OP_ANYCHAR_ML_STAR,       "anychar-ml*" },
+  { OP_ANYCHAR_STAR_PEEK_NEXT,    "anychar*-peek-next" },
+  { OP_ANYCHAR_ML_STAR_PEEK_NEXT, "anychar-ml*-peek-next" },
+  { OP_WORD,                  "word"       },
+  { OP_WORD_ASCII,            "word-ascii" },
+  { OP_NO_WORD,               "not-word"   },
+  { OP_NO_WORD_ASCII,         "not-word-ascii" },
+  { OP_WORD_BOUNDARY,         "word-boundary"  },
+  { OP_NO_WORD_BOUNDARY,      "not-word-boundary" },
+  { OP_WORD_BEGIN,            "word-begin" },
+  { OP_WORD_END,              "word-end"   },
+  { OP_TEXT_SEGMENT_BOUNDARY, "text-segment-boundary" },
+  { OP_BEGIN_BUF,             "begin-buf"  },
+  { OP_END_BUF,               "end-buf"    },
+  { OP_BEGIN_LINE,            "begin-line" },
+  { OP_END_LINE,              "end-line"   },
+  { OP_SEMI_END_BUF,          "semi-end-buf"   },
+  { OP_BEGIN_POSITION,        "begin-position" },
+  { OP_BACKREF1,              "backref1"       },
+  { OP_BACKREF2,              "backref2"       },
+  { OP_BACKREF_N,             "backref-n"      },
+  { OP_BACKREF_N_IC,          "backref-n-ic"   },
+  { OP_BACKREF_MULTI,         "backref_multi"  },
+  { OP_BACKREF_MULTI_IC,      "backref_multi-ic"     },
+  { OP_BACKREF_WITH_LEVEL,    "backref_with_level"   },
+  { OP_BACKREF_WITH_LEVEL_IC, "backref_with_level-c" },
+  { OP_BACKREF_CHECK,         "backref_check"        },
+  { OP_BACKREF_CHECK_WITH_LEVEL, "backref_check_with_level" },
+  { OP_MEMORY_START_PUSH,     "mem-start-push"        },
+  { OP_MEMORY_START,          "mem-start"             },
+  { OP_MEMORY_END_PUSH,       "mem-end-push"          },
+  { OP_MEMORY_END_PUSH_REC,   "mem-end-push-rec"      },
+  { OP_MEMORY_END,            "mem-end"               },
+  { OP_MEMORY_END_REC,        "mem-end-rec"           },
+  { OP_FAIL,                  "fail"                  },
+  { OP_JUMP,                  "jump"                  },
+  { OP_PUSH,                  "push"                  },
+  { OP_PUSH_SUPER,            "push-super"            },
+  { OP_POP_OUT,               "pop-out"               },
+#ifdef USE_OP_PUSH_OR_JUMP_EXACT
+  { OP_PUSH_OR_JUMP_EXACT1,   "push-or-jump-e1"       },
 #endif
-  { OP_ANYCHAR,           "anychar",         ARG_NON },
-  { OP_ANYCHAR_ML,        "anychar-ml",      ARG_NON },
-  { OP_ANYCHAR_STAR,      "anychar*",        ARG_NON },
-  { OP_ANYCHAR_ML_STAR,   "anychar-ml*",     ARG_NON },
-  { OP_ANYCHAR_STAR_PEEK_NEXT, "anychar*-peek-next", ARG_SPECIAL },
-  { OP_ANYCHAR_ML_STAR_PEEK_NEXT, "anychar-ml*-peek-next", ARG_SPECIAL },
-  { OP_WORD,                "word",            ARG_NON },
-  { OP_WORD_ASCII,          "word-ascii",      ARG_NON },
-  { OP_NO_WORD,             "not-word",        ARG_NON },
-  { OP_NO_WORD_ASCII,       "not-word-ascii",  ARG_NON },
-  { OP_WORD_BOUNDARY,       "word-boundary",     ARG_MODE },
-  { OP_NO_WORD_BOUNDARY,    "not-word-boundary", ARG_MODE },
-  { OP_WORD_BEGIN,          "word-begin",      ARG_MODE },
-  { OP_WORD_END,            "word-end",        ARG_MODE },
-  { OP_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY, "extended-grapheme-cluster-boundary", ARG_NON },
-  { OP_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY, "no-extended-grapheme-cluster-boundary", ARG_NON },
-  { OP_BEGIN_BUF,           "begin-buf",       ARG_NON },
-  { OP_END_BUF,             "end-buf",         ARG_NON },
-  { OP_BEGIN_LINE,          "begin-line",      ARG_NON },
-  { OP_END_LINE,            "end-line",        ARG_NON },
-  { OP_SEMI_END_BUF,        "semi-end-buf",    ARG_NON },
-  { OP_BEGIN_POSITION,      "begin-position",  ARG_NON },
-  { OP_BACKREF1,            "backref1",             ARG_NON },
-  { OP_BACKREF2,            "backref2",             ARG_NON },
-  { OP_BACKREF_N,            "backref-n",           ARG_MEMNUM  },
-  { OP_BACKREF_N_IC,         "backref-n-ic",        ARG_SPECIAL },
-  { OP_BACKREF_MULTI,       "backref_multi",        ARG_SPECIAL },
-  { OP_BACKREF_MULTI_IC,    "backref_multi-ic",     ARG_SPECIAL },
-  { OP_BACKREF_WITH_LEVEL,  "backref_with_level",   ARG_SPECIAL },
-  { OP_BACKREF_CHECK,       "backref_check",        ARG_SPECIAL },
-  { OP_BACKREF_CHECK_WITH_LEVEL, "backref_check_with_level", ARG_SPECIAL },
-  { OP_MEMORY_START_PUSH,   "mem-start-push",       ARG_MEMNUM  },
-  { OP_MEMORY_START,        "mem-start",            ARG_MEMNUM  },
-  { OP_MEMORY_END_PUSH,     "mem-end-push",         ARG_MEMNUM  },
-  { OP_MEMORY_END_PUSH_REC, "mem-end-push-rec",     ARG_MEMNUM  },
-  { OP_MEMORY_END,          "mem-end",              ARG_MEMNUM  },
-  { OP_MEMORY_END_REC,      "mem-end-rec",          ARG_MEMNUM  },
-  { OP_FAIL,                "fail",                 ARG_NON },
-  { OP_JUMP,                "jump",                 ARG_RELADDR },
-  { OP_PUSH,                "push",                 ARG_RELADDR },
-  { OP_PUSH_SUPER,          "push-super",           ARG_RELADDR },
-  { OP_POP_OUT,             "pop-out",              ARG_NON },
-  { OP_PUSH_OR_JUMP_EXACT1, "push-or-jump-e1",      ARG_SPECIAL },
-  { OP_PUSH_IF_PEEK_NEXT,   "push-if-peek-next",    ARG_SPECIAL },
-  { OP_REPEAT,              "repeat",               ARG_SPECIAL },
-  { OP_REPEAT_NG,           "repeat-ng",            ARG_SPECIAL },
-  { OP_REPEAT_INC,          "repeat-inc",           ARG_MEMNUM  },
-  { OP_REPEAT_INC_NG,       "repeat-inc-ng",        ARG_MEMNUM  },
-  { OP_REPEAT_INC_SG,       "repeat-inc-sg",        ARG_MEMNUM  },
-  { OP_REPEAT_INC_NG_SG,    "repeat-inc-ng-sg",     ARG_MEMNUM  },
-  { OP_EMPTY_CHECK_START,   "empty-check-start",    ARG_MEMNUM  },
-  { OP_EMPTY_CHECK_END,     "empty-check-end",      ARG_MEMNUM  },
-  { OP_EMPTY_CHECK_END_MEMST,"empty-check-end-memst", ARG_MEMNUM  },
-  { OP_EMPTY_CHECK_END_MEMST_PUSH,"empty-check-end-memst-push", ARG_MEMNUM  },
-  { OP_PREC_READ_START,      "push-pos",             ARG_NON },
-  { OP_PREC_READ_END,        "pop-pos",              ARG_NON },
-  { OP_PREC_READ_NOT_START,  "prec-read-not-start",  ARG_RELADDR },
-  { OP_PREC_READ_NOT_END,    "prec-read-not-end",    ARG_NON },
-  { OP_ATOMIC_START,         "atomic-start",         ARG_NON },
-  { OP_ATOMIC_END,           "atomic-end",           ARG_NON },
-  { OP_LOOK_BEHIND,          "look-behind",          ARG_SPECIAL },
-  { OP_LOOK_BEHIND_NOT_START, "look-behind-not-start", ARG_SPECIAL },
-  { OP_LOOK_BEHIND_NOT_END,  "look-behind-not-end",  ARG_NON },
-  { OP_CALL,                 "call",                 ARG_ABSADDR },
-  { OP_RETURN,               "return",               ARG_NON },
-  { OP_PUSH_SAVE_VAL,        "push-save-val",        ARG_SPECIAL },
-  { OP_UPDATE_VAR,           "update-var",           ARG_SPECIAL },
+  { OP_PUSH_IF_PEEK_NEXT,     "push-if-peek-next"     },
+  { OP_REPEAT,                "repeat"                },
+  { OP_REPEAT_NG,             "repeat-ng"             },
+  { OP_REPEAT_INC,            "repeat-inc"            },
+  { OP_REPEAT_INC_NG,         "repeat-inc-ng"         },
+  { OP_REPEAT_INC_SG,         "repeat-inc-sg"         },
+  { OP_REPEAT_INC_NG_SG,      "repeat-inc-ng-sg"      },
+  { OP_EMPTY_CHECK_START,     "empty-check-start"     },
+  { OP_EMPTY_CHECK_END,       "empty-check-end"       },
+  { OP_EMPTY_CHECK_END_MEMST, "empty-check-end-memst" },
+  { OP_EMPTY_CHECK_END_MEMST_PUSH,"empty-check-end-memst-push" },
+  { OP_PREC_READ_START,       "push-pos"              },
+  { OP_PREC_READ_END,         "pop-pos"               },
+  { OP_PREC_READ_NOT_START,   "prec-read-not-start"   },
+  { OP_PREC_READ_NOT_END,     "prec-read-not-end"     },
+  { OP_ATOMIC_START,          "atomic-start"          },
+  { OP_ATOMIC_END,            "atomic-end"            },
+  { OP_LOOK_BEHIND,           "look-behind"           },
+  { OP_LOOK_BEHIND_NOT_START, "look-behind-not-start" },
+  { OP_LOOK_BEHIND_NOT_END,   "look-behind-not-end"   },
+  { OP_CALL,                  "call"                  },
+  { OP_RETURN,                "return"                },
+  { OP_PUSH_SAVE_VAL,         "push-save-val"         },
+  { OP_UPDATE_VAR,            "update-var"            },
 #ifdef USE_CALLOUT
-  { OP_CALLOUT_CONTENTS,     "callout-contents",     ARG_SPECIAL },
-  { OP_CALLOUT_NAME,         "callout-name",         ARG_SPECIAL },
+  { OP_CALLOUT_CONTENTS,      "callout-contents"      },
+  { OP_CALLOUT_NAME,          "callout-name"          },
 #endif
-  { -1, "", ARG_NON }
+  { -1, "" }
 };
 
 static char*
@@ -256,22 +253,10 @@ op2name(int opcode)
   int i;
 
   for (i = 0; OpInfo[i].opcode >= 0; i++) {
-    if (opcode == OpInfo[i].opcode)
-      return OpInfo[i].name;
+    if (opcode == OpInfo[i].opcode) return OpInfo[i].name;
   }
-  return "";
-}
 
-static int
-op2arg_type(int opcode)
-{
-  int i;
-
-  for (i = 0; OpInfo[i].opcode >= 0; i++) {
-    if (opcode == OpInfo[i].opcode)
-      return OpInfo[i].arg_type;
-  }
-  return ARG_SPECIAL;
+  return "";
 }
 
 static void
@@ -291,7 +276,7 @@ p_len_string(FILE* f, LengthType len, int mb_len, UChar* s)
 }
 
 static void
-p_rel_addr(FILE* f, RelAddrType rel_addr, UChar* p, UChar* start)
+p_rel_addr(FILE* f, RelAddrType rel_addr, Operation* p, Operation* start)
 {
   RelAddrType curr = (RelAddrType )(p - start);
 
@@ -307,288 +292,328 @@ bitset_on_num(BitSetRef bs)
   for (i = 0; i < SINGLE_BYTE_SIZE; i++) {
     if (BITSET_AT(bs, i)) n++;
   }
+
   return n;
 }
 
-extern void
-onig_print_compiled_byte_code(FILE* f, UChar* bp, UChar** nextp, UChar* start,
-                              OnigEncoding enc)
+static void
+print_compiled_byte_code(FILE* f, regex_t* reg, int index,
+                         Operation* start, OnigEncoding enc)
 {
   int i, n;
-  OpArgType   arg_type;
   RelAddrType addr;
   LengthType  len;
   MemNumType  mem;
-  OnigCodePoint  code;
-  OnigOptionType option;
+  OnigCodePoint code;
   ModeType mode;
   UChar *q;
+  Operation* p;
+  enum OpCode opcode;
 
-  fprintf(f, "%s", op2name(*bp));
-  arg_type = op2arg_type(*bp);
-  if (arg_type != ARG_SPECIAL) {
-    bp++;
-    switch (arg_type) {
-    case ARG_NON:
-      break;
-    case ARG_RELADDR:
-      GET_RELADDR_INC(addr, bp);
-      fputc(':', f);
-      p_rel_addr(f, addr, bp, start);
-      break;
-    case ARG_ABSADDR:
-      GET_ABSADDR_INC(addr, bp);
-      fprintf(f, ":{/%d}", addr);
-      break;
-    case ARG_LENGTH:
-      GET_LENGTH_INC(len, bp);
-      fprintf(f, ":%d", len);
-      break;
-    case ARG_MEMNUM:
-      mem = *((MemNumType* )bp);
-      bp += SIZE_MEMNUM;
-      fprintf(f, ":%d", mem);
-      break;
-    case ARG_OPTION:
-      {
-        OnigOptionType option = *((OnigOptionType* )bp);
-        bp += SIZE_OPTION;
-        fprintf(f, ":%d", option);
-      }
-      break;
-    case ARG_MODE:
-      mode = *((ModeType* )bp);
-      bp += SIZE_MODE;
-      fprintf(f, ":%d", mode);
-      break;
-    default:
-      break;
-    }
-  }
-  else {
-    switch (*bp++) {
-    case OP_EXACT1:
-    case OP_ANYCHAR_STAR_PEEK_NEXT:
-    case OP_ANYCHAR_ML_STAR_PEEK_NEXT:
-      p_string(f, 1, bp++); break;
-    case OP_EXACT2:
-      p_string(f, 2, bp); bp += 2; break;
-    case OP_EXACT3:
-      p_string(f, 3, bp); bp += 3; break;
-    case OP_EXACT4:
-      p_string(f, 4, bp); bp += 4; break;
-    case OP_EXACT5:
-      p_string(f, 5, bp); bp += 5; break;
-    case OP_EXACTN:
-      GET_LENGTH_INC(len, bp);
-      p_len_string(f, len, 1, bp);
-      bp += len;
-      break;
+  p = reg->ops + index;
 
-    case OP_EXACTMB2N1:
-      p_string(f, 2, bp); bp += 2; break;
-    case OP_EXACTMB2N2:
-      p_string(f, 4, bp); bp += 4; break;
-    case OP_EXACTMB2N3:
-      p_string(f, 6, bp); bp += 6; break;
-    case OP_EXACTMB2N:
-      GET_LENGTH_INC(len, bp);
-      p_len_string(f, len, 2, bp);
-      bp += len * 2;
-      break;
-    case OP_EXACTMB3N:
-      GET_LENGTH_INC(len, bp);
-      p_len_string(f, len, 3, bp);
-      bp += len * 3;
-      break;
-    case OP_EXACTMBN:
-      {
-        int mb_len;
+#ifdef USE_DIRECT_THREADED_CODE
+  opcode = reg->ocs[index];
+#else
+  opcode = p->opcode;
+#endif
 
-        GET_LENGTH_INC(mb_len, bp);
-        GET_LENGTH_INC(len, bp);
-        fprintf(f, ":%d:%d:", mb_len, len);
-        n = len * mb_len;
-        while (n-- > 0) { fputc(*bp++, f); }
-      }
-      break;
+  fprintf(f, "%s", op2name(opcode));
+  switch (opcode) {
+  case OP_EXACT1:
+    p_string(f, 1, p->exact.s); break;
+  case OP_EXACT2:
+    p_string(f, 2, p->exact.s); break;
+  case OP_EXACT3:
+    p_string(f, 3, p->exact.s); break;
+  case OP_EXACT4:
+    p_string(f, 4, p->exact.s); break;
+  case OP_EXACT5:
+    p_string(f, 5, p->exact.s); break;
+  case OP_EXACTN:
+    len = p->exact_n.n;
+    p_string(f, len, p->exact_n.s); break;
+  case OP_EXACTMB2N1:
+    p_string(f, 2, p->exact.s); break;
+  case OP_EXACTMB2N2:
+    p_string(f, 4, p->exact.s); break;
+  case OP_EXACTMB2N3:
+    p_string(f, 3, p->exact.s); break;
+  case OP_EXACTMB2N:
+    len = p->exact_n.n;
+    p_len_string(f, len, 2, p->exact_n.s); break;
+  case OP_EXACTMB3N:
+    len = p->exact_n.n;
+    p_len_string(f, len, 3, p->exact_n.s); break;
+  case OP_EXACTMBN:
+    {
+      int mb_len;
+
+      mb_len = p->exact_len_n.len;
+      len    = p->exact_len_n.n;
+      q      = p->exact_len_n.s;
+      fprintf(f, ":%d:%d:", mb_len, len);
+      n = len * mb_len;
+      while (n-- > 0) { fputc(*q++, f); }
+    }
+    break;
+  case OP_EXACT1_IC:
+    len = enclen(enc, p->exact.s);
+    p_string(f, len, p->exact.s);
+    break;
+  case OP_EXACTN_IC:
+    len = p->exact_n.n;
+    p_len_string(f, len, 1, p->exact_n.s);
+    break;
 
-    case OP_EXACT1_IC:
-      len = enclen(enc, bp);
-      p_string(f, len, bp);
-      bp += len;
-      break;
-    case OP_EXACTN_IC:
-      GET_LENGTH_INC(len, bp);
-      p_len_string(f, len, 1, bp);
-      bp += len;
-      break;
+  case OP_CCLASS:
+  case OP_CCLASS_NOT:
+    n = bitset_on_num(p->cclass.bsp);
+    fprintf(f, ":%d", n);
+    break;
+  case OP_CCLASS_MB:
+  case OP_CCLASS_MB_NOT:
+    {
+      OnigCodePoint ncode;
+      OnigCodePoint* codes;      
+
+      codes = (OnigCodePoint* )p->cclass_mb.mb;
+      GET_CODE_POINT(ncode, codes);
+      codes++;
+      GET_CODE_POINT(code, codes);
+      fprintf(f, ":%u:%u", code, ncode);
+    }
+    break;
+  case OP_CCLASS_MIX:
+  case OP_CCLASS_MIX_NOT:
+    {
+      OnigCodePoint ncode;
+      OnigCodePoint* codes;
+
+      codes = (OnigCodePoint* )p->cclass_mix.mb;
+      n = bitset_on_num(p->cclass_mix.bsp);
+
+      GET_CODE_POINT(ncode, codes);
+      codes++;
+      GET_CODE_POINT(code, codes);
+      fprintf(f, ":%d:%u:%u", n, code, ncode);
+    }
+    break;
 
-    case OP_CCLASS:
-      n = bitset_on_num((BitSetRef )bp);
-      bp += SIZE_BITSET;
-      fprintf(f, ":%d", n);
-      break;
+  case OP_ANYCHAR_STAR_PEEK_NEXT:
+  case OP_ANYCHAR_ML_STAR_PEEK_NEXT:
+    p_string(f, 1, &(p->anychar_star_peek_next.c));
+    break;
 
-    case OP_CCLASS_NOT:
-      n = bitset_on_num((BitSetRef )bp);
-      bp += SIZE_BITSET;
-      fprintf(f, ":%d", n);
-      break;
+  case OP_WORD_BOUNDARY:
+  case OP_NO_WORD_BOUNDARY:
+  case OP_WORD_BEGIN:
+  case OP_WORD_END:
+    mode = p->word_boundary.mode;
+    fprintf(f, ":%d", mode);
+    break;
 
-    case OP_CCLASS_MB:
-    case OP_CCLASS_MB_NOT:
-      GET_LENGTH_INC(len, bp);
-      q = bp;
-#ifndef PLATFORM_UNALIGNED_WORD_ACCESS
-      ALIGNMENT_RIGHT(q);
-#endif
-      GET_CODE_POINT(code, q);
-      bp += len;
-      fprintf(f, ":%d:%d", (int )code, len);
-      break;
+  case OP_BACKREF_N:
+  case OP_BACKREF_N_IC:
+    mem = p->backref_n.n1;
+    fprintf(f, ":%d", mem);
+    break;
+  case OP_BACKREF_MULTI_IC:
+  case OP_BACKREF_MULTI:
+  case OP_BACKREF_CHECK:
+    fputs(" ", f);
+    n = p->backref_general.num;
+    for (i = 0; i < n; i++) {
+      mem = (n == 1) ? p->backref_general.n1 : p->backref_general.ns[i];
+      if (i > 0) fputs(", ", f);
+      fprintf(f, "%d", mem);
+    }
+    break;
+  case OP_BACKREF_WITH_LEVEL:
+  case OP_BACKREF_WITH_LEVEL_IC:
+  case OP_BACKREF_CHECK_WITH_LEVEL:
+    {
+      LengthType level;
+
+      level = p->backref_general.nest_level;
+      fprintf(f, ":%d", level);
+      fputs(" ", f);
+      n = p->backref_general.num;
+      for (i = 0; i < n; i++) {
+        mem = (n == 1) ? p->backref_general.n1 : p->backref_general.ns[i];
+        if (i > 0) fputs(", ", f);
+        fprintf(f, "%d", mem);
+      }
+    }
+    break;
 
-    case OP_CCLASS_MIX:
-    case OP_CCLASS_MIX_NOT:
-      n = bitset_on_num((BitSetRef )bp);
-      bp += SIZE_BITSET;
-      GET_LENGTH_INC(len, bp);
-      q = bp;
-#ifndef PLATFORM_UNALIGNED_WORD_ACCESS
-      ALIGNMENT_RIGHT(q);
-#endif
-      GET_CODE_POINT(code, q);
-      bp += len;
-      fprintf(f, ":%d:%d:%d", n, (int )code, len);
-      break;
+  case OP_MEMORY_START:
+  case OP_MEMORY_START_PUSH:
+    mem = p->memory_start.num;
+    fprintf(f, ":%d", mem);
+    break;
+  case OP_MEMORY_END_PUSH:
+  case OP_MEMORY_END_PUSH_REC:
+  case OP_MEMORY_END:
+  case OP_MEMORY_END_REC:
+    mem = p->memory_end.num;
+    fprintf(f, ":%d", mem);
+    break;
 
-#ifdef USE_OP_CCLASS_NODE
-    case OP_CCLASS_NODE:
-      {
-        CClassNode *cc;
+  case OP_JUMP:
+    addr = p->jump.addr;
+    fputc(':', f);
+    p_rel_addr(f, addr, p, start);
+    break;
 
-        GET_POINTER_INC(cc, bp);
-        n = bitset_on_num(cc->bs);
-        fprintf(f, ":%p:%d", cc, n);
-      }
-      break;
+  case OP_PUSH:
+  case OP_PUSH_SUPER:
+    addr = p->push.addr;
+    fputc(':', f);
+    p_rel_addr(f, addr, p, start);
+    break;
+
+#ifdef USE_OP_PUSH_OR_JUMP_EXACT
+  case OP_PUSH_OR_JUMP_EXACT1:
+    addr = p->push_or_jump_exact1.addr;
+    fputc(':', f);
+    p_rel_addr(f, addr, p, start);
+    p_string(f, 1, &(p->push_or_jump_exact1.c));
+    break;
 #endif
 
-    case OP_BACKREF_N_IC:
-      mem = *((MemNumType* )bp);
-      bp += SIZE_MEMNUM;
-      fprintf(f, ":%d", mem);
-      break;
+  case OP_PUSH_IF_PEEK_NEXT:
+    addr = p->push_if_peek_next.addr;
+    fputc(':', f);
+    p_rel_addr(f, addr, p, start);
+    p_string(f, 1, &(p->push_if_peek_next.c));
+    break;
 
-    case OP_BACKREF_MULTI_IC:
-    case OP_BACKREF_MULTI:
-    case OP_BACKREF_CHECK:
-      fputs(" ", f);
-      GET_LENGTH_INC(len, bp);
-      for (i = 0; i < len; i++) {
-        GET_MEMNUM_INC(mem, bp);
-        if (i > 0) fputs(", ", f);
-        fprintf(f, "%d", mem);
-      }
-      break;
+  case OP_REPEAT:
+  case OP_REPEAT_NG:
+    mem = p->repeat.id;
+    addr = p->repeat.addr;
+    fprintf(f, ":%d:", mem);
+    p_rel_addr(f, addr, p, start);
+    break;
 
-    case OP_BACKREF_WITH_LEVEL:
-      GET_OPTION_INC(option, bp);
-      fprintf(f, ":%d", option);
-      /* fall */
-    case OP_BACKREF_CHECK_WITH_LEVEL:
-      {
-        LengthType level;
+  case OP_REPEAT_INC:
+  case OP_REPEAT_INC_NG:
+  case OP_REPEAT_INC_SG:
+  case OP_REPEAT_INC_NG_SG:
+    mem = p->repeat.id;
+    fprintf(f, ":%d", mem);
+    break;
 
-        GET_LENGTH_INC(level, bp);
-        fprintf(f, ":%d", level);
+  case OP_EMPTY_CHECK_START:
+    mem = p->empty_check_start.mem;
+    fprintf(f, ":%d", mem);
+    break;
+  case OP_EMPTY_CHECK_END:
+  case OP_EMPTY_CHECK_END_MEMST:
+  case OP_EMPTY_CHECK_END_MEMST_PUSH:
+    mem = p->empty_check_end.mem;
+    fprintf(f, ":%d", mem);
+    break;
 
-        fputs(" ", f);
-        GET_LENGTH_INC(len, bp);
-        for (i = 0; i < len; i++) {
-          GET_MEMNUM_INC(mem, bp);
-          if (i > 0) fputs(", ", f);
-          fprintf(f, "%d", mem);
-        }
-      }
-      break;
+  case OP_PREC_READ_NOT_START:
+    addr = p->prec_read_not_start.addr;
+    fputc(':', f);
+    p_rel_addr(f, addr, p, start);
+    break;
 
-    case OP_REPEAT:
-    case OP_REPEAT_NG:
-      {
-        mem = *((MemNumType* )bp);
-        bp += SIZE_MEMNUM;
-        addr = *((RelAddrType* )bp);
-        bp += SIZE_RELADDR;
-        fprintf(f, ":%d:%d", mem, addr);
-      }
-      break;
+  case OP_LOOK_BEHIND:
+    len = p->look_behind.len;
+    fprintf(f, ":%d", len);
+    break;
 
-    case OP_PUSH_OR_JUMP_EXACT1:
-    case OP_PUSH_IF_PEEK_NEXT:
-      addr = *((RelAddrType* )bp);
-      bp += SIZE_RELADDR;
-      fputc(':', f);
-      p_rel_addr(f, addr, bp, start);
-      p_string(f, 1, bp);
-      bp += 1;
-      break;
+  case OP_LOOK_BEHIND_NOT_START:
+    addr = p->look_behind_not_start.addr;
+    len  = p->look_behind_not_start.len;
+    fprintf(f, ":%d:", len);
+    p_rel_addr(f, addr, p, start);
+    break;
 
-    case OP_LOOK_BEHIND:
-      GET_LENGTH_INC(len, bp);
-      fprintf(f, ":%d", len);
-      break;
+  case OP_CALL:
+    addr = p->call.addr;
+    fprintf(f, ":{/%d}", addr);
+    break;
 
-    case OP_LOOK_BEHIND_NOT_START:
-      GET_RELADDR_INC(addr, bp);
-      GET_LENGTH_INC(len, bp);
-      fprintf(f, ":%d:", len);
-      p_rel_addr(f, addr, bp, start);
-      break;
+  case OP_PUSH_SAVE_VAL:
+    {
+      SaveType type;
 
-    case OP_PUSH_SAVE_VAL:
-      {
-        SaveType type;
-        GET_SAVE_TYPE_INC(type, bp);
-        GET_MEMNUM_INC(mem, bp);
-        fprintf(f, ":%d:%d", type, mem);
-      }
-      break;
+      type = p->push_save_val.type;
+      mem  = p->push_save_val.id;
+      fprintf(f, ":%d:%d", type, mem);
+    }
+    break;
 
-    case OP_UPDATE_VAR:
-      {
-        UpdateVarType type;
-        GET_UPDATE_VAR_TYPE_INC(type, bp);
-        GET_MEMNUM_INC(mem, bp);
-        fprintf(f, ":%d:%d", type, mem);
-      }
-      break;
+  case OP_UPDATE_VAR:
+    {
+      UpdateVarType type;
 
-#ifdef USE_CALLOUT
-    case OP_CALLOUT_CONTENTS:
-      {
-        GET_MEMNUM_INC(mem,  bp); /* number */
-        fprintf(f, ":%d", mem);
-      }
-      break;
+      type = p->update_var.type;
+      mem  = p->update_var.id;
+      fprintf(f, ":%d:%d", type, mem);
+    }
+    break;
 
-    case OP_CALLOUT_NAME:
-      {
-        int id;
+#ifdef USE_CALLOUT
+  case OP_CALLOUT_CONTENTS:
+    mem = p->callout_contents.num;
+    fprintf(f, ":%d", mem);
+    break;
 
-        GET_MEMNUM_INC(id,   bp); /* id */
-        GET_MEMNUM_INC(mem,  bp); /* number */
+  case OP_CALLOUT_NAME:
+    {
+      int id;
 
-        fprintf(f, ":%d:%d", id, mem);
-      }
-      break;
+      id  = p->callout_name.id;
+      mem = p->callout_name.num;
+      fprintf(f, ":%d:%d", id, mem);
+    }
+    break;
 #endif
 
-    default:
-      fprintf(stderr, "onig_print_compiled_byte_code: undefined code %d\n", *--bp);
-    }
+  case OP_TEXT_SEGMENT_BOUNDARY:
+    if (p->text_segment_boundary.not != 0)
+      fprintf(f, ":not");
+    break;
+
+  case OP_FINISH:
+  case OP_END:
+  case OP_ANYCHAR:
+  case OP_ANYCHAR_ML:
+  case OP_ANYCHAR_STAR:
+  case OP_ANYCHAR_ML_STAR:
+  case OP_WORD:
+  case OP_WORD_ASCII:
+  case OP_NO_WORD:
+  case OP_NO_WORD_ASCII:
+  case OP_BEGIN_BUF:
+  case OP_END_BUF:
+  case OP_BEGIN_LINE:
+  case OP_END_LINE:
+  case OP_SEMI_END_BUF:
+  case OP_BEGIN_POSITION:
+  case OP_BACKREF1:
+  case OP_BACKREF2:
+  case OP_FAIL:
+  case OP_POP_OUT:
+  case OP_PREC_READ_START:
+  case OP_PREC_READ_END:
+  case OP_PREC_READ_NOT_END:
+  case OP_ATOMIC_START:
+  case OP_ATOMIC_END:
+  case OP_LOOK_BEHIND_NOT_END:
+  case OP_RETURN:
+    break;
+
+  default:
+    fprintf(stderr, "print_compiled_byte_code: undefined code %d\n", opcode);
+    break;
   }
-  if (nextp) *nextp = bp;
 }
 #endif /* ONIG_DEBUG */
 
@@ -596,21 +621,22 @@ onig_print_compiled_byte_code(FILE* f, UChar* bp, UChar** nextp, UChar* start,
 extern void
 onig_print_compiled_byte_code_list(FILE* f, regex_t* reg)
 {
-  UChar* bp;
-  UChar* start = reg->p;
-  UChar* end   = reg->p + reg->used;
+  Operation* bp;
+  Operation* start = reg->ops;
+  Operation* end   = reg->ops + reg->ops_used;
 
   fprintf(f, "bt_mem_start: 0x%x, bt_mem_end: 0x%x\n",
           reg->bt_mem_start, reg->bt_mem_end);
-  fprintf(f, "code-length: %d\n", reg->used);
+  fprintf(f, "code-length: %d\n", reg->ops_used);
 
   bp = start;
   while (bp < end) {
     int pos = bp - start;
 
     fprintf(f, "%4d: ", pos);
-    onig_print_compiled_byte_code(f, bp, &bp, start, reg->enc);
+    print_compiled_byte_code(f, reg, pos, start, reg->enc);
     fprintf(f, "\n");
+    bp++;
   }
   fprintf(f, "\n");
 }
@@ -625,36 +651,38 @@ history_tree_clear(OnigCaptureTreeNode* node)
 {
   int i;
 
-  if (IS_NOT_NULL(node)) {
-    for (i = 0; i < node->num_childs; i++) {
-      if (IS_NOT_NULL(node->childs[i])) {
-        history_tree_free(node->childs[i]);
-      }
-    }
-    for (i = 0; i < node->allocated; i++) {
-      node->childs[i] = (OnigCaptureTreeNode* )0;
+  if (IS_NULL(node)) return ;
+
+  for (i = 0; i < node->num_childs; i++) {
+    if (IS_NOT_NULL(node->childs[i])) {
+      history_tree_free(node->childs[i]);
     }
-    node->num_childs = 0;
-    node->beg = ONIG_REGION_NOTPOS;
-    node->end = ONIG_REGION_NOTPOS;
-    node->group = -1;
   }
+  for (i = 0; i < node->allocated; i++) {
+    node->childs[i] = (OnigCaptureTreeNode* )0;
+  }
+  node->num_childs = 0;
+  node->beg = ONIG_REGION_NOTPOS;
+  node->end = ONIG_REGION_NOTPOS;
+  node->group = -1;
 }
 
 static void
 history_tree_free(OnigCaptureTreeNode* node)
 {
   history_tree_clear(node);
+  if (IS_NOT_NULL(node->childs)) xfree(node->childs);
+
   xfree(node);
 }
 
 static void
 history_root_free(OnigRegion* r)
 {
-  if (IS_NOT_NULL(r->history_root)) {
-    history_tree_free(r->history_root);
-    r->history_root = (OnigCaptureTreeNode* )0;
-  }
+  if (IS_NULL(r->history_root)) return ;
+
+  history_tree_free(r->history_root);
+  r->history_root = (OnigCaptureTreeNode* )0;
 }
 
 static OnigCaptureTreeNode*
@@ -664,9 +692,10 @@ history_node_new(void)
 
   node = (OnigCaptureTreeNode* )xmalloc(sizeof(OnigCaptureTreeNode));
   CHECK_NULL_RETURN(node);
+
   node->childs     = (OnigCaptureTreeNode** )0;
-  node->allocated  = 0;
-  node->num_childs = 0;
+  node->allocated  =  0;
+  node->num_childs =  0;
   node->group      = -1;
   node->beg        = ONIG_REGION_NOTPOS;
   node->end        = ONIG_REGION_NOTPOS;
@@ -685,13 +714,13 @@ history_tree_add_child(OnigCaptureTreeNode* parent, OnigCaptureTreeNode* child)
     if (IS_NULL(parent->childs)) {
       n = HISTORY_TREE_INIT_ALLOC_SIZE;
       parent->childs =
-        (OnigCaptureTreeNode** )xmalloc(sizeof(OnigCaptureTreeNode*) * n);
+        (OnigCaptureTreeNode** )xmalloc(sizeof(parent->childs[0]) * n);
     }
     else {
       n = parent->allocated * 2;
       parent->childs =
         (OnigCaptureTreeNode** )xrealloc(parent->childs,
-                                         sizeof(OnigCaptureTreeNode*) * n);
+                                         sizeof(parent->childs[0]) * n);
     }
     CHECK_NULL_RETURN_MEMERR(parent->childs);
     for (i = parent->allocated; i < n; i++) {
@@ -951,6 +980,8 @@ onig_region_copy(OnigRegion* to, OnigRegion* from)
 #define STK_CALL_FRAME             0x0400
 #define STK_RETURN                 0x0500
 #define STK_SAVE_VAL               0x0600
+#define STK_PREC_READ_START        0x0700
+#define STK_PREC_READ_END          0x0800
 
 /* stack type check mask */
 #define STK_MASK_POP_USED          STK_ALT_FLAG
@@ -966,13 +997,13 @@ typedef struct _StackType {
   int zid;
   union {
     struct {
-      UChar *pcode;      /* byte code position */
-      UChar *pstr;       /* string position */
-      UChar *pstr_prev;  /* previous char position of pstr */
+      Operation* pcode;     /* byte code position */
+      UChar*     pstr;      /* string position */
+      UChar*     pstr_prev; /* previous char position of pstr */
     } state;
     struct {
-      int   count;       /* for OP_REPEAT_INC, OP_REPEAT_INC_NG */
-      UChar *pcode;      /* byte code position (head of repeated target) */
+      int        count;  /* for OP_REPEAT_INC, OP_REPEAT_INC_NG */
+      Operation* pcode;  /* byte code position (head of repeated target) */
     } repeat;
     struct {
       StackIndex si;     /* index of stack */
@@ -988,8 +1019,8 @@ typedef struct _StackType {
     } empty_check;
 #ifdef USE_CALL
     struct {
-      UChar *ret_addr;   /* byte code position */
-      UChar *pstr;       /* string position */
+      Operation *ret_addr; /* byte code position */
+      UChar *pstr;         /* string position */
     } call_frame;
 #endif
     struct {
@@ -1164,8 +1195,10 @@ onig_set_retry_limit_in_match(unsigned long size)
 #endif
 }
 
+#ifdef USE_CALLOUT
 static OnigCalloutFunc DefaultProgressCallout;
 static OnigCalloutFunc DefaultRetractionCallout;
+#endif
 
 extern OnigMatchParam*
 onig_new_match_param(void)
@@ -1207,10 +1240,10 @@ onig_initialize_match_param(OnigMatchParam* mp)
 #ifdef USE_RETRY_LIMIT_IN_MATCH
   mp->retry_limit_in_match = RetryLimitInMatch;
 #endif
-  mp->progress_callout_of_contents   = DefaultProgressCallout;
-  mp->retraction_callout_of_contents = DefaultRetractionCallout;
 
 #ifdef USE_CALLOUT
+  mp->progress_callout_of_contents   = DefaultProgressCallout;
+  mp->retraction_callout_of_contents = DefaultRetractionCallout;
   mp->match_at_call_counter  = 0;
   mp->callout_user_data      = 0;
   mp->callout_data           = 0;
@@ -1513,8 +1546,8 @@ stack_double(int is_alloca, char** arg_alloc_base,
 
 #define STACK_PUSH_ALT(pat,s,sprev)       STACK_PUSH(STK_ALT,pat,s,sprev)
 #define STACK_PUSH_SUPER_ALT(pat,s,sprev) STACK_PUSH(STK_SUPER_ALT,pat,s,sprev)
-#define STACK_PUSH_POS(s,sprev) \
-  STACK_PUSH(STK_TO_VOID_START,NULL_UCHARP,s,sprev)
+#define STACK_PUSH_PREC_READ_START(s,sprev) \
+  STACK_PUSH(STK_PREC_READ_START,(Operation* )0,s,sprev)
 #define STACK_PUSH_ALT_PREC_READ_NOT(pat,s,sprev) \
   STACK_PUSH(STK_ALT_PREC_READ_NOT,pat,s,sprev)
 #define STACK_PUSH_TO_VOID_START        STACK_PUSH_TYPE(STK_TO_VOID_START)
@@ -1856,6 +1889,27 @@ stack_double(int is_alloca, char** arg_alloc_base,
   }\
 } while(0)
 
+#define STACK_GET_PREC_READ_START(k) do {\
+  int level = 0;\
+  k = stk;\
+  while (1) {\
+    k--;\
+    STACK_BASE_CHECK(k, "STACK_GET_PREC_READ_START");\
+    if (IS_TO_VOID_TARGET(k)) {\
+      k->type = STK_VOID;\
+    }\
+    else if (k->type == STK_PREC_READ_START) {\
+      if (level == 0) {\
+        break;\
+      }\
+      level--;\
+    }\
+    else if (k->type == STK_PREC_READ_END) {\
+      level++;\
+    }\
+  }\
+} while(0)
+
 #define STACK_EMPTY_CHECK(isnull,sid,s) do {\
   StackType* k = stk;\
   while (1) {\
@@ -1882,7 +1936,7 @@ stack_double(int is_alloca, char** arg_alloc_base,
   }\
 } while (0)
 
-#ifdef USE_INSISTENT_CHECK_CAPTURES_IN_EMPTY_REPEAT
+#ifdef USE_STUBBORN_CHECK_CAPTURES_IN_EMPTY_REPEAT
 #define STACK_EMPTY_CHECK_MEM(isnull,sid,s,reg) do {\
   StackType* k = stk;\
   while (1) {\
@@ -1896,9 +1950,10 @@ stack_double(int is_alloca, char** arg_alloc_base,
         }\
         else {\
           UChar* endp;\
+          int level = 0;\
           (isnull) = 1;\
           while (k < stk) {\
-            if (k->type == STK_MEM_START) {\
+            if (k->type == STK_MEM_START && level == 0) {\
               STACK_MEM_START_GET_PREV_END_ADDR(k, reg, endp);\
               if (endp == 0) {\
                 (isnull) = 0; break;\
@@ -1910,6 +1965,12 @@ stack_double(int is_alloca, char** arg_alloc_base,
                 (isnull) = -1; /* empty, but position changed */ \
               }\
             }\
+            else if (k->type == STK_PREC_READ_START) {\
+              level++;\
+            }\
+            else if (k->type == STK_PREC_READ_END) {\
+              level--;\
+            }\
             k++;\
           }\
           break;\
@@ -1934,10 +1995,11 @@ stack_double(int is_alloca, char** arg_alloc_base,
           }\
           else {\
             UChar* endp;\
+            int prec_level = 0;\
             (isnull) = 1;\
             while (k < stk) {\
               if (k->type == STK_MEM_START) {\
-                if (level == 0) {\
+                if (level == 0 && prec_level == 0) {\
                   STACK_MEM_START_GET_PREV_END_ADDR(k, reg, endp);\
                   if (endp == 0) {\
                     (isnull) = 0; break;\
@@ -1956,6 +2018,12 @@ stack_double(int is_alloca, char** arg_alloc_base,
               else if (k->type == STK_EMPTY_CHECK_END) {\
                 if (k->zid == (sid)) level--;\
               }\
+              else if (k->type == STK_PREC_READ_START) {\
+                prec_level++;\
+              }\
+              else if (k->type == STK_PREC_READ_END) {\
+                prec_level--;\
+              }\
               k++;\
             }\
             break;\
@@ -1992,7 +2060,7 @@ stack_double(int is_alloca, char** arg_alloc_base,
     }\
   }\
 } while(0)
-#endif /* USE_INSISTENT_CHECK_CAPTURES_IN_EMPTY_REPEAT */
+#endif /* USE_STUBBORN_CHECK_CAPTURES_IN_EMPTY_REPEAT */
 
 #define STACK_GET_REPEAT(sid, k) do {\
   int level = 0;\
@@ -2139,14 +2207,12 @@ make_capture_history_tree(OnigCaptureTreeNode* node, StackType** kp,
 #endif
 
 #ifdef USE_BACKREF_WITH_LEVEL
-static int mem_is_in_memp(int mem, int num, UChar* memp)
+static int mem_is_in_memp(int mem, int num, MemNumType* memp)
 {
   int i;
-  MemNumType m;
 
   for (i = 0; i < num; i++) {
-    GET_MEMNUM_INC(m, memp);
-    if (mem == (int )m) return 1;
+    if (mem == (int )memp[i]) return 1;
   }
   return 0;
 }
@@ -2155,7 +2221,7 @@ static int
 backref_match_at_nested_level(regex_t* reg,
                               StackType* top, StackType* stk_base,
                               int ignore_case, int case_fold_flag,
-                              int nest, int mem_num, UChar* memp,
+                              int nest, int mem_num, MemNumType* memp,
                               UChar** s, const UChar* send)
 {
   UChar *ss, *p, *pstart, *pend = NULL_UCHARP;
@@ -2212,7 +2278,7 @@ backref_match_at_nested_level(regex_t* reg,
 static int
 backref_check_at_nested_level(regex_t* reg,
                               StackType* top, StackType* stk_base,
-                              int nest, int mem_num, UChar* memp)
+                              int nest, int mem_num, MemNumType* memp)
 {
   int level;
   StackType* k;
@@ -2338,18 +2404,20 @@ typedef struct {
 } posix_regmatch_t;
 
 
-#ifdef __GNUC__
-#define USE_THREADED_CODE
-#endif
 
 #ifdef USE_THREADED_CODE
 
-#define BYTECODE_INTERPRETER_START      JUMP_OP;
+#define BYTECODE_INTERPRETER_START      GOTO_OP;
 #define BYTECODE_INTERPRETER_END
-#define CASE_OP(x)   L_##x: SOP_IN(OP_##x); sbegin = s; MATCH_DEBUG_OUT(1)
+#define CASE_OP(x)   L_##x: SOP_IN(OP_##x); sbegin = s; MATCH_DEBUG_OUT(0)
 #define DEFAULT_OP   /* L_DEFAULT: */
 #define NEXT_OP      sprev = sbegin; JUMP_OP
-#define JUMP_OP      goto *opcode_to_label[*p++]
+#define JUMP_OP      GOTO_OP
+#ifdef USE_DIRECT_THREADED_CODE
+#define GOTO_OP      goto *(p->opaddr)
+#else
+#define GOTO_OP      goto *opcode_to_label[p->opcode]
+#endif
 #define BREAK_OP     /* Nothing */
 
 #else
@@ -2358,16 +2426,18 @@ typedef struct {
   while (1) {\
   MATCH_DEBUG_OUT(0)\
   sbegin = s;\
-  switch (*p++) {
+  switch (p->opcode) {
 #define BYTECODE_INTERPRETER_END  } sprev = sbegin; }
 #define CASE_OP(x)   case OP_##x: SOP_IN(OP_##x);
 #define DEFAULT_OP   default:
 #define NEXT_OP      break
-#define JUMP_OP      continue; break
+#define JUMP_OP      GOTO_OP
+#define GOTO_OP      continue; break
 #define BREAK_OP     break
 
 #endif /* USE_THREADED_CODE */
 
+#define INC_OP       p++
 #define NEXT_OUT     SOP_OUT; NEXT_OP
 #define JUMP_OUT     SOP_OUT; JUMP_OP
 #define BREAK_OUT    SOP_OUT; BREAK_OP
@@ -2376,7 +2446,8 @@ typedef struct {
 
 #ifdef ONIG_DEBUG_MATCH
 #define MATCH_DEBUG_OUT(offset) do {\
-      UChar *xp, *q, *bp, buf[50];\
+      Operation *xp;\
+      UChar *q, *bp, buf[50];\
       int len, spos;\
       spos = IS_NOT_NULL(s) ? (int )(s - str) : -1;\
       xp = p - (offset);\
@@ -2399,10 +2470,11 @@ typedef struct {
       fputs((char* )buf, stderr);\
       for (i = 0; i < 20 - (bp - buf); i++) fputc(' ', stderr);\
       if (xp == FinishCode)\
-        fprintf(stderr, "----: ");\
-      else\
-        fprintf(stderr, "%4d: ", (int )(xp - reg->p));\
-      onig_print_compiled_byte_code(stderr, xp, NULL, reg->p, encode);\
+        fprintf(stderr, "----: finish");\
+      else {\
+        fprintf(stderr, "%4d: ", (int )(xp - reg->ops));\
+        print_compiled_byte_code(stderr, reg, (int )(xp - reg->ops), reg->ops, encode);\
+      }\
       fprintf(stderr, "\n");\
   } while(0);
 #else
@@ -2417,7 +2489,12 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
          const UChar* in_right_range, const UChar* sstart, UChar* sprev,
          MatchArg* msa)
 {
-  static UChar FinishCode[] = { OP_FINISH };
+
+#if defined(USE_DIRECT_THREADED_CODE)
+  static Operation FinishCode[] = { { .opaddr=&&L_FINISH } };
+#else
+  static Operation FinishCode[] = { { OP_FINISH } };
+#endif
 
 #ifdef USE_THREADED_CODE
   static const void *opcode_to_label[] = {
@@ -2443,9 +2520,6 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
   &&L_CCLASS_NOT,
   &&L_CCLASS_MB_NOT,
   &&L_CCLASS_MIX_NOT,
-#ifdef USE_OP_CCLASS_NODE
-  &&L_CCLASS_NODE,
-#endif
   &&L_ANYCHAR,
   &&L_ANYCHAR_ML,
   &&L_ANYCHAR_STAR,
@@ -2460,8 +2534,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
   &&L_NO_WORD_BOUNDARY,
   &&L_WORD_BEGIN,
   &&L_WORD_END,
-  &&L_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY,
-  &&L_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY,
+  &&L_TEXT_SEGMENT_BOUNDARY,
   &&L_BEGIN_BUF,
   &&L_END_BUF,
   &&L_BEGIN_LINE,
@@ -2475,6 +2548,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
   &&L_BACKREF_MULTI,
   &&L_BACKREF_MULTI_IC,
   &&L_BACKREF_WITH_LEVEL,
+  &&L_BACKREF_WITH_LEVEL_IC,
   &&L_BACKREF_CHECK,
   &&L_BACKREF_CHECK_WITH_LEVEL,
   &&L_MEMORY_START,
@@ -2488,7 +2562,9 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
   &&L_PUSH,
   &&L_PUSH_SUPER,
   &&L_POP_OUT,
+#ifdef USE_OP_PUSH_OR_JUMP_EXACT
   &&L_PUSH_OR_JUMP_EXACT1,
+#endif
   &&L_PUSH_IF_PEEK_NEXT,
   &&L_REPEAT,
   &&L_REPEAT_NG,
@@ -2524,7 +2600,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
   LengthType tlen, tlen2;
   MemNumType mem;
   RelAddrType addr;
-  UChar *s, *q, *sbegin;
+  UChar *s, *q, *ps, *sbegin;
   UChar *right_range;
   int is_alloca;
   char *alloc_base;
@@ -2543,7 +2619,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
   int of;
 #endif
 
-  UChar *p = reg->p;
+  Operation* p = reg->ops;
   OnigOptionType option = reg->options;
   OnigEncoding encode = reg->enc;
   OnigCaseFoldType case_fold_flag = reg->case_fold_flag;
@@ -2552,6 +2628,18 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
   static unsigned int counter = 1;
 #endif
 
+#ifdef USE_DIRECT_THREADED_CODE
+  if (IS_NULL(msa)) {
+    for (i = 0; i < reg->ops_used; i++) {
+       const void* addr;
+       addr = opcode_to_label[reg->ocs[i]];
+       p->opaddr = addr;
+       p++;
+    }
+    return ONIG_NORMAL;
+  }
+#endif
+
 #ifdef USE_CALLOUT
   msa->mp->match_at_call_counter++;
 #endif
@@ -2700,8 +2788,10 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
 
     CASE_OP(EXACT1)
       DATA_ENSURE(1);
-      if (*p != *s) goto fail;
-      p++; s++;
+      ps = p->exact.s;
+      if (*ps != *s) goto fail;
+      s++;
+      INC_OP;
       NEXT_OUT;
 
     CASE_OP(EXACT1_IC)
@@ -2716,70 +2806,80 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
                                     &s, end, lowbuf);
         DATA_ENSURE(0);
         q = lowbuf;
+        ps = p->exact.s;
         while (len-- > 0) {
-          if (*p != *q) {
-            goto fail;
-          }
-          p++; q++;
+          if (*ps != *q) goto fail;
+          ps++; q++;
         }
       }
+      INC_OP;
       NEXT_OUT;
 
     CASE_OP(EXACT2)
       DATA_ENSURE(2);
-      if (*p != *s) goto fail;
-      p++; s++;
-      if (*p != *s) goto fail;
+      ps = p->exact.s;
+      if (*ps != *s) goto fail;
+      ps++; s++;
+      if (*ps != *s) goto fail;
       sprev = s;
-      p++; s++;
+      s++;
+      INC_OP;
       JUMP_OUT;
 
     CASE_OP(EXACT3)
       DATA_ENSURE(3);
-      if (*p != *s) goto fail;
-      p++; s++;
-      if (*p != *s) goto fail;
-      p++; s++;
-      if (*p != *s) goto fail;
+      ps = p->exact.s;
+      if (*ps != *s) goto fail;
+      ps++; s++;
+      if (*ps != *s) goto fail;
+      ps++; s++;
+      if (*ps != *s) goto fail;
       sprev = s;
-      p++; s++;
+      s++;
+      INC_OP;
       JUMP_OUT;
 
     CASE_OP(EXACT4)
       DATA_ENSURE(4);
-      if (*p != *s) goto fail;
-      p++; s++;
-      if (*p != *s) goto fail;
-      p++; s++;
-      if (*p != *s) goto fail;
-      p++; s++;
-      if (*p != *s) goto fail;
+      ps = p->exact.s;
+      if (*ps != *s) goto fail;
+      ps++; s++;
+      if (*ps != *s) goto fail;
+      ps++; s++;
+      if (*ps != *s) goto fail;
+      ps++; s++;
+      if (*ps != *s) goto fail;
       sprev = s;
-      p++; s++;
+      s++;
+      INC_OP;
       JUMP_OUT;
 
     CASE_OP(EXACT5)
       DATA_ENSURE(5);
-      if (*p != *s) goto fail;
-      p++; s++;
-      if (*p != *s) goto fail;
-      p++; s++;
-      if (*p != *s) goto fail;
-      p++; s++;
-      if (*p != *s) goto fail;
-      p++; s++;
-      if (*p != *s) goto fail;
+      ps = p->exact.s;
+      if (*ps != *s) goto fail;
+      ps++; s++;
+      if (*ps != *s) goto fail;
+      ps++; s++;
+      if (*ps != *s) goto fail;
+      ps++; s++;
+      if (*ps != *s) goto fail;
+      ps++; s++;
+      if (*ps != *s) goto fail;
       sprev = s;
-      p++; s++;
+      s++;
+      INC_OP;
       JUMP_OUT;
 
     CASE_OP(EXACTN)
-      GET_LENGTH_INC(tlen, p);
+      tlen = p->exact_n.n;
       DATA_ENSURE(tlen);
+      ps = p->exact_n.s;
       while (tlen-- > 0) {
-        if (*p++ != *s++) goto fail;
+        if (*ps++ != *s++) goto fail;
       }
       sprev = s - 1;
+      INC_OP;
       JUMP_OUT;
 
     CASE_OP(EXACTN_IC)
@@ -2787,10 +2887,10 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
         int len;
         UChar *q, *endp, lowbuf[ONIGENC_MBC_CASE_FOLD_MAXLEN];
 
-        GET_LENGTH_INC(tlen, p);
-        endp = p + tlen;
-
-        while (p < endp) {
+        tlen = p->exact_n.n;
+        ps   = p->exact_n.s;
+        endp = ps + tlen;
+        while (ps < endp) {
           sprev = s;
           DATA_ENSURE(1);
           len = ONIGENC_MBC_CASE_FOLD(encode,
@@ -2800,102 +2900,115 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
           DATA_ENSURE(0);
           q = lowbuf;
           while (len-- > 0) {
-            if (*p != *q) goto fail;
-            p++; q++;
+            if (*ps != *q) goto fail;
+            ps++; q++;
           }
         }
       }
 
+      INC_OP;
       JUMP_OUT;
 
     CASE_OP(EXACTMB2N1)
       DATA_ENSURE(2);
-      if (*p != *s) goto fail;
-      p++; s++;
-      if (*p != *s) goto fail;
-      p++; s++;
+      ps = p->exact.s;
+      if (*ps != *s) goto fail;
+      ps++; s++;
+      if (*ps != *s) goto fail;
+      s++;
+      INC_OP;
       NEXT_OUT;
 
     CASE_OP(EXACTMB2N2)
       DATA_ENSURE(4);
-      if (*p != *s) goto fail;
-      p++; s++;
-      if (*p != *s) goto fail;
-      p++; s++;
+      ps = p->exact.s;
+      if (*ps != *s) goto fail;
+      ps++; s++;
+      if (*ps != *s) goto fail;
+      ps++; s++;
       sprev = s;
-      if (*p != *s) goto fail;
-      p++; s++;
-      if (*p != *s) goto fail;
-      p++; s++;
+      if (*ps != *s) goto fail;
+      ps++; s++;
+      if (*ps != *s) goto fail;
+      s++;
+      INC_OP;
       JUMP_OUT;
 
     CASE_OP(EXACTMB2N3)
       DATA_ENSURE(6);
-      if (*p != *s) goto fail;
-      p++; s++;
-      if (*p != *s) goto fail;
-      p++; s++;
-      if (*p != *s) goto fail;
-      p++; s++;
-      if (*p != *s) goto fail;
-      p++; s++;
+      ps = p->exact.s;
+      if (*ps != *s) goto fail;
+      ps++; s++;
+      if (*ps != *s) goto fail;
+      ps++; s++;
+      if (*ps != *s) goto fail;
+      ps++; s++;
+      if (*ps != *s) goto fail;
+      ps++; s++;
       sprev = s;
-      if (*p != *s) goto fail;
-      p++; s++;
-      if (*p != *s) goto fail;
-      p++; s++;
+      if (*ps != *s) goto fail;
+      ps++; s++;
+      if (*ps != *s) goto fail;
+      ps++; s++;
+      INC_OP;
       JUMP_OUT;
 
     CASE_OP(EXACTMB2N)
-      GET_LENGTH_INC(tlen, p);
+      tlen = p->exact_n.n;
       DATA_ENSURE(tlen * 2);
+      ps = p->exact_n.s;
       while (tlen-- > 0) {
-        if (*p != *s) goto fail;
-        p++; s++;
-        if (*p != *s) goto fail;
-        p++; s++;
+        if (*ps != *s) goto fail;
+        ps++; s++;
+        if (*ps != *s) goto fail;
+        ps++; s++;
       }
       sprev = s - 2;
+      INC_OP;
       JUMP_OUT;
 
     CASE_OP(EXACTMB3N)
-      GET_LENGTH_INC(tlen, p);
+      tlen = p->exact_n.n;
       DATA_ENSURE(tlen * 3);
+      ps = p->exact_n.s;
       while (tlen-- > 0) {
-        if (*p != *s) goto fail;
-        p++; s++;
-        if (*p != *s) goto fail;
-        p++; s++;
-        if (*p != *s) goto fail;
-        p++; s++;
+        if (*ps != *s) goto fail;
+        ps++; s++;
+        if (*ps != *s) goto fail;
+        ps++; s++;
+        if (*ps != *s) goto fail;
+        ps++; s++;
       }
       sprev = s - 3;
+      INC_OP;
       JUMP_OUT;
 
     CASE_OP(EXACTMBN)
-      GET_LENGTH_INC(tlen,  p);  /* mb-len */
-      GET_LENGTH_INC(tlen2, p);  /* string len */
+      tlen  = p->exact_len_n.len; /* mb byte len */
+      tlen2 = p->exact_len_n.n;   /* number of chars */
       tlen2 *= tlen;
       DATA_ENSURE(tlen2);
+      ps = p->exact_len_n.s;
       while (tlen2-- > 0) {
-        if (*p != *s) goto fail;
-        p++; s++;
+        if (*ps != *s) goto fail;
+        ps++; s++;
       }
       sprev = s - tlen;
+      INC_OP;
       JUMP_OUT;
 
     CASE_OP(CCLASS)
       DATA_ENSURE(1);
-      if (BITSET_AT(((BitSetRef )p), *s) == 0) goto fail;
-      p += SIZE_BITSET;
-      s += enclen(encode, s);   /* OP_CCLASS can match mb-code. \D, \S */
+      if (BITSET_AT(p->cclass.bsp, *s) == 0) goto fail;
+      s++;
+      INC_OP;
       NEXT_OUT;
 
     CASE_OP(CCLASS_MB)
+      DATA_ENSURE(1);
       if (! ONIGENC_IS_MBC_HEAD(encode, s)) goto fail;
 
     cclass_mb:
-      GET_LENGTH_INC(tlen, p);
       {
         OnigCodePoint code;
         UChar *ss;
@@ -2907,53 +3020,40 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
         ss = s;
         s += mb_len;
         code = ONIGENC_MBC_TO_CODE(encode, ss, s);
-
-#ifdef PLATFORM_UNALIGNED_WORD_ACCESS
-        if (! onig_is_in_code_range(p, code)) goto fail;
-#else
-        q = p;
-        ALIGNMENT_RIGHT(q);
-        if (! onig_is_in_code_range(q, code)) goto fail;
-#endif
+        if (! onig_is_in_code_range(p->cclass_mb.mb, code)) goto fail;
       }
-      p += tlen;
+      INC_OP;
       NEXT_OUT;
 
     CASE_OP(CCLASS_MIX)
       DATA_ENSURE(1);
       if (ONIGENC_IS_MBC_HEAD(encode, s)) {
-        p += SIZE_BITSET;
         goto cclass_mb;
       }
       else {
-        if (BITSET_AT(((BitSetRef )p), *s) == 0)
+        if (BITSET_AT(p->cclass_mix.bsp, *s) == 0)
           goto fail;
 
-        p += SIZE_BITSET;
-        GET_LENGTH_INC(tlen, p);
-        p += tlen;
         s++;
       }
+      INC_OP;
       NEXT_OUT;
 
     CASE_OP(CCLASS_NOT)
       DATA_ENSURE(1);
-      if (BITSET_AT(((BitSetRef )p), *s) != 0) goto fail;
-      p += SIZE_BITSET;
+      if (BITSET_AT(p->cclass.bsp, *s) != 0) goto fail;
       s += enclen(encode, s);
+      INC_OP;
       NEXT_OUT;
 
     CASE_OP(CCLASS_MB_NOT)
       DATA_ENSURE(1);
       if (! ONIGENC_IS_MBC_HEAD(encode, s)) {
         s++;
-        GET_LENGTH_INC(tlen, p);
-        p += tlen;
         goto cc_mb_not_success;
       }
 
     cclass_mb_not:
-      GET_LENGTH_INC(tlen, p);
       {
         OnigCodePoint code;
         UChar *ss;
@@ -2962,70 +3062,40 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
         if (! DATA_ENSURE_CHECK(mb_len)) {
           DATA_ENSURE(1);
           s = (UChar* )end;
-          p += tlen;
           goto cc_mb_not_success;
         }
 
         ss = s;
         s += mb_len;
         code = ONIGENC_MBC_TO_CODE(encode, ss, s);
-
-#ifdef PLATFORM_UNALIGNED_WORD_ACCESS
-        if (onig_is_in_code_range(p, code)) goto fail;
-#else
-        q = p;
-        ALIGNMENT_RIGHT(q);
-        if (onig_is_in_code_range(q, code)) goto fail;
-#endif
+        if (onig_is_in_code_range(p->cclass_mb.mb, code)) goto fail;
       }
-      p += tlen;
 
     cc_mb_not_success:
+      INC_OP;
       NEXT_OUT;
 
     CASE_OP(CCLASS_MIX_NOT)
       DATA_ENSURE(1);
       if (ONIGENC_IS_MBC_HEAD(encode, s)) {
-        p += SIZE_BITSET;
         goto cclass_mb_not;
       }
       else {
-        if (BITSET_AT(((BitSetRef )p), *s) != 0)
+        if (BITSET_AT(p->cclass_mix.bsp, *s) != 0)
           goto fail;
 
-        p += SIZE_BITSET;
-        GET_LENGTH_INC(tlen, p);
-        p += tlen;
         s++;
       }
+      INC_OP;
       NEXT_OUT;
 
-#ifdef USE_OP_CCLASS_NODE
-    CASE_OP(CCLASS_NODE)
-      {
-        OnigCodePoint code;
-        void *node;
-        int mb_len;
-        UChar *ss;
-
-        DATA_ENSURE(1);
-        GET_POINTER_INC(node, p);
-        mb_len = enclen(encode, s);
-        ss = s;
-        s += mb_len;
-        DATA_ENSURE(0);
-        code = ONIGENC_MBC_TO_CODE(encode, ss, s);
-        if (onig_is_code_in_cc_len(mb_len, code, node) == 0) goto fail;
-      }
-      NEXT_OUT;
-#endif
-
     CASE_OP(ANYCHAR)
       DATA_ENSURE(1);
       n = enclen(encode, s);
       DATA_ENSURE(n);
       if (ONIGENC_IS_MBC_NEWLINE(encode, s, end)) goto fail;
       s += n;
+      INC_OP;
       NEXT_OUT;
 
     CASE_OP(ANYCHAR_ML)
@@ -3033,9 +3103,11 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
       n = enclen(encode, s);
       DATA_ENSURE(n);
       s += n;
+      INC_OP;
       NEXT_OUT;
 
     CASE_OP(ANYCHAR_STAR)
+      INC_OP;
       while (DATA_ENSURE_CHECK1) {
         STACK_PUSH_ALT(p, s, sprev);
         n = enclen(encode, s);
@@ -3047,6 +3119,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
       JUMP_OUT;
 
     CASE_OP(ANYCHAR_ML_STAR)
+      INC_OP;
       while (DATA_ENSURE_CHECK1) {
         STACK_PUSH_ALT(p, s, sprev);
         n = enclen(encode, s);
@@ -3063,36 +3136,46 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
       JUMP_OUT;
 
     CASE_OP(ANYCHAR_STAR_PEEK_NEXT)
-      while (DATA_ENSURE_CHECK1) {
-        if (*p == *s) {
-          STACK_PUSH_ALT(p + 1, s, sprev);
-        }
-        n = enclen(encode, s);
-        DATA_ENSURE(n);
-        if (ONIGENC_IS_MBC_NEWLINE(encode, s, end))  goto fail;
-        sprev = s;
-        s += n;
-      }
-      p++;
-      NEXT_OUT;
+      {
+        UChar c;
 
-    CASE_OP(ANYCHAR_ML_STAR_PEEK_NEXT)
-      while (DATA_ENSURE_CHECK1) {
-        if (*p == *s) {
-          STACK_PUSH_ALT(p + 1, s, sprev);
-        }
-        n = enclen(encode, s);
-        if (n > 1) {
+        c = p->anychar_star_peek_next.c;
+        INC_OP;
+        while (DATA_ENSURE_CHECK1) {
+          if (c == *s) {
+            STACK_PUSH_ALT(p, s, sprev);
+          }
+          n = enclen(encode, s);
           DATA_ENSURE(n);
+          if (ONIGENC_IS_MBC_NEWLINE(encode, s, end))  goto fail;
           sprev = s;
           s += n;
         }
-        else {
-          sprev = s;
-          s++;
+      }
+      NEXT_OUT;
+
+    CASE_OP(ANYCHAR_ML_STAR_PEEK_NEXT)
+      {
+        UChar c;
+
+        c = p->anychar_star_peek_next.c;
+        INC_OP;
+        while (DATA_ENSURE_CHECK1) {
+          if (c == *s) {
+            STACK_PUSH_ALT(p, s, sprev);
+          }
+          n = enclen(encode, s);
+          if (n > 1) {
+            DATA_ENSURE(n);
+            sprev = s;
+            s += n;
+          }
+          else {
+            sprev = s;
+            s++;
+          }
         }
       }
-      p++;
       NEXT_OUT;
 
     CASE_OP(WORD)
@@ -3101,6 +3184,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
         goto fail;
 
       s += enclen(encode, s);
+      INC_OP;
       NEXT_OUT;
 
     CASE_OP(WORD_ASCII)
@@ -3109,6 +3193,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
         goto fail;
 
       s += enclen(encode, s);
+      INC_OP;
       NEXT_OUT;
 
     CASE_OP(NO_WORD)
@@ -3117,6 +3202,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
         goto fail;
 
       s += enclen(encode, s);
+      INC_OP;
       NEXT_OUT;
 
     CASE_OP(NO_WORD_ASCII)
@@ -3125,13 +3211,14 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
         goto fail;
 
       s += enclen(encode, s);
+      INC_OP;
       NEXT_OUT;
 
     CASE_OP(WORD_BOUNDARY)
       {
         ModeType mode;
-        GET_MODE_INC(mode, p); /* ascii_mode */
 
+        mode = p->word_boundary.mode;
         if (ON_STR_BEGIN(s)) {
           DATA_ENSURE(1);
           if (! IS_MBC_WORD_ASCII_MODE(encode, s, end, mode))
@@ -3147,13 +3234,14 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
             goto fail;
         }
       }
+      INC_OP;
       JUMP_OUT;
 
     CASE_OP(NO_WORD_BOUNDARY)
       {
         ModeType mode;
-        GET_MODE_INC(mode, p); /* ascii_mode */
 
+        mode = p->word_boundary.mode;
         if (ON_STR_BEGIN(s)) {
           if (DATA_ENSURE_CHECK1 && IS_MBC_WORD_ASCII_MODE(encode, s, end, mode))
             goto fail;
@@ -3168,16 +3256,18 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
             goto fail;
         }
       }
+      INC_OP;
       JUMP_OUT;
 
 #ifdef USE_WORD_BEGIN_END
     CASE_OP(WORD_BEGIN)
       {
         ModeType mode;
-        GET_MODE_INC(mode, p); /* ascii_mode */
 
+        mode = p->word_boundary.mode;
         if (DATA_ENSURE_CHECK1 && IS_MBC_WORD_ASCII_MODE(encode, s, end, mode)) {
           if (ON_STR_BEGIN(s) || !IS_MBC_WORD_ASCII_MODE(encode, sprev, end, mode)) {
+            INC_OP;
             JUMP_OUT;
           }
         }
@@ -3187,10 +3277,11 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
     CASE_OP(WORD_END)
       {
         ModeType mode;
-        GET_MODE_INC(mode, p); /* ascii_mode */
 
+        mode = p->word_boundary.mode;
         if (!ON_STR_BEGIN(s) && IS_MBC_WORD_ASCII_MODE(encode, sprev, end, mode)) {
           if (ON_STR_END(s) || ! IS_MBC_WORD_ASCII_MODE(encode, s, end, mode)) {
+            INC_OP;
             JUMP_OUT;
           }
         }
@@ -3198,34 +3289,56 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
       goto fail;
 #endif
 
-    CASE_OP(EXTENDED_GRAPHEME_CLUSTER_BOUNDARY)
-      if (onigenc_egcb_is_break_position(encode, s, sprev, str, end)) {
-        JUMP_OUT;
-      }
-      goto fail;
+    CASE_OP(TEXT_SEGMENT_BOUNDARY)
+      {
+        int is_break;
 
-    CASE_OP(NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY)
-      if (onigenc_egcb_is_break_position(encode, s, sprev, str, end))
-        goto fail;
+        switch (p->text_segment_boundary.type) {
+        case EXTENDED_GRAPHEME_CLUSTER_BOUNDARY:
+          is_break = onigenc_egcb_is_break_position(encode, s, sprev, str, end);
+          break;
+#ifdef USE_UNICODE_WORD_BREAK
+        case WORD_BOUNDARY:
+          is_break = onigenc_wb_is_break_position(encode, s, sprev, str, end);
+          break;
+#endif
+        default:
+          goto bytecode_error;
+          break;
+        }
 
-      JUMP_OUT;
+        if (p->text_segment_boundary.not != 0)
+          is_break = ! is_break;
+
+        if (is_break != 0) {
+          INC_OP;
+          JUMP_OUT;
+        }
+        else {
+          goto fail;
+        }
+      }
 
     CASE_OP(BEGIN_BUF)
       if (! ON_STR_BEGIN(s)) goto fail;
 
+      INC_OP;
       JUMP_OUT;
 
     CASE_OP(END_BUF)
       if (! ON_STR_END(s)) goto fail;
 
+      INC_OP;
       JUMP_OUT;
 
     CASE_OP(BEGIN_LINE)
       if (ON_STR_BEGIN(s)) {
         if (IS_NOTBOL(msa->options)) goto fail;
+        INC_OP;
         JUMP_OUT;
       }
       else if (ONIGENC_IS_MBC_NEWLINE(encode, sprev, end) && !ON_STR_END(s)) {
+        INC_OP;
         JUMP_OUT;
       }
       goto fail;
@@ -3236,16 +3349,19 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
         if (IS_EMPTY_STR || !ONIGENC_IS_MBC_NEWLINE(encode, sprev, end)) {
 #endif
           if (IS_NOTEOL(msa->options)) goto fail;
+          INC_OP;
           JUMP_OUT;
 #ifndef USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE
         }
 #endif
       }
       else if (ONIGENC_IS_MBC_NEWLINE(encode, s, end)) {
+        INC_OP;
         JUMP_OUT;
       }
 #ifdef USE_CRNL_AS_LINE_TERMINATOR
       else if (ONIGENC_IS_MBC_CRNL(encode, s, end)) {
+        INC_OP;
         JUMP_OUT;
       }
 #endif
@@ -3257,6 +3373,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
         if (IS_EMPTY_STR || !ONIGENC_IS_MBC_NEWLINE(encode, sprev, end)) {
 #endif
           if (IS_NOTEOL(msa->options)) goto fail;
+          INC_OP;
           JUMP_OUT;
 #ifndef USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE
         }
@@ -3264,6 +3381,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
       }
       else if (ONIGENC_IS_MBC_NEWLINE(encode, s, end) &&
                ON_STR_END(s + enclen(encode, s))) {
+        INC_OP;
         JUMP_OUT;
       }
 #ifdef USE_CRNL_AS_LINE_TERMINATOR
@@ -3271,6 +3389,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
         UChar* ss = s + enclen(encode, s);
         ss += enclen(encode, ss);
         if (ON_STR_END(ss)) {
+          INC_OP;
           JUMP_OUT;
         }
       }
@@ -3281,38 +3400,45 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
       if (s != msa->start)
         goto fail;
 
+      INC_OP;
       JUMP_OUT;
 
     CASE_OP(MEMORY_START_PUSH)
-      GET_MEMNUM_INC(mem, p);
+      mem = p->memory_start.num;
       STACK_PUSH_MEM_START(mem, s);
+      INC_OP;
       JUMP_OUT;
 
     CASE_OP(MEMORY_START)
-      GET_MEMNUM_INC(mem, p);
+      mem = p->memory_start.num;
       mem_start_stk[mem] = (StackIndex )((void* )s);
+      INC_OP;
       JUMP_OUT;
 
     CASE_OP(MEMORY_END_PUSH)
-      GET_MEMNUM_INC(mem, p);
+      mem = p->memory_end.num;
       STACK_PUSH_MEM_END(mem, s);
+      INC_OP;
       JUMP_OUT;
 
     CASE_OP(MEMORY_END)
-      GET_MEMNUM_INC(mem, p);
+      mem = p->memory_end.num;
       mem_end_stk[mem] = (StackIndex )((void* )s);
+      INC_OP;
       JUMP_OUT;
 
 #ifdef USE_CALL
     CASE_OP(MEMORY_END_PUSH_REC)
-      GET_MEMNUM_INC(mem, p);
+      mem = p->memory_end.num;
       STACK_GET_MEM_START(mem, stkp); /* should be before push mem-end. */
+      si = GET_STACK_INDEX(stkp);
       STACK_PUSH_MEM_END(mem, s);
-      mem_start_stk[mem] = GET_STACK_INDEX(stkp);
+      mem_start_stk[mem] = si;
+      INC_OP;
       JUMP_OUT;
 
     CASE_OP(MEMORY_END_REC)
-      GET_MEMNUM_INC(mem, p);
+      mem = p->memory_end.num;
       mem_end_stk[mem] = (StackIndex )((void* )s);
       STACK_GET_MEM_START(mem, stkp);
 
@@ -3322,6 +3448,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
         mem_start_stk[mem] = (StackIndex )((void* )stkp->u.mem.pstr);
 
       STACK_PUSH_MEM_END_MARK(mem);
+      INC_OP;
       JUMP_OUT;
 #endif
 
@@ -3334,7 +3461,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
       goto backref;
 
     CASE_OP(BACKREF_N)
-      GET_MEMNUM_INC(mem, p);
+      mem = p->backref_n.n1;
     backref:
       {
         int len;
@@ -3352,16 +3479,19 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
                 ? STACK_AT(mem_end_stk[mem])->u.mem.pstr
                 : (UChar* )((void* )mem_end_stk[mem]));
         n = (int )(pend - pstart);
-        DATA_ENSURE(n);
-        sprev = s;
-        STRING_CMP(pstart, s, n);
-        while (sprev + (len = enclen(encode, sprev)) < s)
-          sprev += len;
+        if (n != 0) {
+          DATA_ENSURE(n);
+          sprev = s;
+          STRING_CMP(s, pstart, n);
+          while (sprev + (len = enclen(encode, sprev)) < s)
+            sprev += len;
+        }
       }
+      INC_OP;
       JUMP_OUT;
 
     CASE_OP(BACKREF_N_IC)
-      GET_MEMNUM_INC(mem, p);
+      mem = p->backref_n.n1;
       {
         int len;
         UChar *pstart, *pend;
@@ -3378,12 +3508,15 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
                 ? STACK_AT(mem_end_stk[mem])->u.mem.pstr
                 : (UChar* )((void* )mem_end_stk[mem]));
         n = (int )(pend - pstart);
-        DATA_ENSURE(n);
-        sprev = s;
-        STRING_CMP_IC(case_fold_flag, pstart, &s, n);
-        while (sprev + (len = enclen(encode, sprev)) < s)
-          sprev += len;
+        if (n != 0) {
+          DATA_ENSURE(n);
+          sprev = s;
+          STRING_CMP_IC(case_fold_flag, pstart, &s, n);
+          while (sprev + (len = enclen(encode, sprev)) < s)
+            sprev += len;
+        }
       }
+      INC_OP;
       JUMP_OUT;
 
     CASE_OP(BACKREF_MULTI)
@@ -3391,9 +3524,9 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
         int len, is_fail;
         UChar *pstart, *pend, *swork;
 
-        GET_LENGTH_INC(tlen, p);
+        tlen = p->backref_general.num;
         for (i = 0; i < tlen; i++) {
-          GET_MEMNUM_INC(mem, p);
+          mem = tlen == 1 ? p->backref_general.n1 : p->backref_general.ns[i];
 
           if (mem_end_stk[mem]   == INVALID_STACK_INDEX) continue;
           if (mem_start_stk[mem] == INVALID_STACK_INDEX) continue;
@@ -3407,20 +3540,21 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
                   ? STACK_AT(mem_end_stk[mem])->u.mem.pstr
                   : (UChar* )((void* )mem_end_stk[mem]));
           n = (int )(pend - pstart);
-          DATA_ENSURE(n);
-          sprev = s;
-          swork = s;
-          STRING_CMP_VALUE(pstart, swork, n, is_fail);
-          if (is_fail) continue;
-          s = swork;
-          while (sprev + (len = enclen(encode, sprev)) < s)
-            sprev += len;
-
-          p += (SIZE_MEMNUM * (tlen - i - 1));
+          if (n != 0) {
+            DATA_ENSURE(n);
+            sprev = s;
+            swork = s;
+            STRING_CMP_VALUE(swork, pstart, n, is_fail);
+            if (is_fail) continue;
+            s = swork;
+            while (sprev + (len = enclen(encode, sprev)) < s)
+              sprev += len;
+          }
           break; /* success */
         }
         if (i == tlen) goto fail;
       }
+      INC_OP;
       JUMP_OUT;
 
     CASE_OP(BACKREF_MULTI_IC)
@@ -3428,9 +3562,9 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
         int len, is_fail;
         UChar *pstart, *pend, *swork;
 
-        GET_LENGTH_INC(tlen, p);
+        tlen = p->backref_general.num;
         for (i = 0; i < tlen; i++) {
-          GET_MEMNUM_INC(mem, p);
+          mem = tlen == 1 ? p->backref_general.n1 : p->backref_general.ns[i];
 
           if (mem_end_stk[mem]   == INVALID_STACK_INDEX) continue;
           if (mem_start_stk[mem] == INVALID_STACK_INDEX) continue;
@@ -3444,125 +3578,140 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
                   ? STACK_AT(mem_end_stk[mem])->u.mem.pstr
                   : (UChar* )((void* )mem_end_stk[mem]));
           n = (int )(pend - pstart);
-          DATA_ENSURE(n);
-          sprev = s;
-          swork = s;
-          STRING_CMP_VALUE_IC(case_fold_flag, pstart, &swork, n, is_fail);
-          if (is_fail) continue;
-          s = swork;
-          while (sprev + (len = enclen(encode, sprev)) < s)
-            sprev += len;
-
-          p += (SIZE_MEMNUM * (tlen - i - 1));
+          if (n != 0) {
+            DATA_ENSURE(n);
+            sprev = s;
+            swork = s;
+            STRING_CMP_VALUE_IC(case_fold_flag, pstart, &swork, n, is_fail);
+            if (is_fail) continue;
+            s = swork;
+            while (sprev + (len = enclen(encode, sprev)) < s)
+              sprev += len;
+          }
           break; /* success */
         }
         if (i == tlen) goto fail;
       }
+      INC_OP;
       JUMP_OUT;
 
 #ifdef USE_BACKREF_WITH_LEVEL
+    CASE_OP(BACKREF_WITH_LEVEL_IC)
+      n = 1; /* ignore case */
+      goto backref_with_level;
     CASE_OP(BACKREF_WITH_LEVEL)
       {
         int len;
-        OnigOptionType ic;
-        LengthType level;
-
-        GET_OPTION_INC(ic,    p);
-        GET_LENGTH_INC(level, p);
-        GET_LENGTH_INC(tlen,  p);
-
-        sprev = s;
-        if (backref_match_at_nested_level(reg, stk, stk_base, ic
-                     , case_fold_flag, (int )level, (int )tlen, p, &s, end)) {
-          if (sprev < end) {
+        int level;
+        MemNumType* mems;
+        UChar* ssave;
+
+        n = 0;
+      backref_with_level:
+        level = p->backref_general.nest_level;
+        tlen  = p->backref_general.num;
+        mems = tlen == 1 ? &(p->backref_general.n1) : p->backref_general.ns;
+
+        ssave = s;
+        if (backref_match_at_nested_level(reg, stk, stk_base, n,
+                    case_fold_flag, level, (int )tlen, mems, &s, end)) {
+          if (ssave != s) {
+            sprev = ssave;
             while (sprev + (len = enclen(encode, sprev)) < s)
               sprev += len;
           }
-          p += (SIZE_MEMNUM * tlen);
         }
         else
           goto fail;
       }
+      INC_OP;
       JUMP_OUT;
 #endif
 
     CASE_OP(BACKREF_CHECK)
       {
-        GET_LENGTH_INC(tlen, p);
-        for (i = 0; i < tlen; i++) {
-          GET_MEMNUM_INC(mem, p);
+        MemNumType* mems;
+
+        tlen  = p->backref_general.num;
+        mems = tlen == 1 ? &(p->backref_general.n1) : p->backref_general.ns;
 
+        for (i = 0; i < tlen; i++) {
+          mem = mems[i];
           if (mem_end_stk[mem]   == INVALID_STACK_INDEX) continue;
           if (mem_start_stk[mem] == INVALID_STACK_INDEX) continue;
-
-          p += (SIZE_MEMNUM * (tlen - i - 1));
           break; /* success */
         }
         if (i == tlen) goto fail;
       }
+      INC_OP;
       JUMP_OUT;
 
 #ifdef USE_BACKREF_WITH_LEVEL
     CASE_OP(BACKREF_CHECK_WITH_LEVEL)
       {
         LengthType level;
+        MemNumType* mems;
 
-        GET_LENGTH_INC(level, p);
-        GET_LENGTH_INC(tlen,  p);
+        level = p->backref_general.nest_level;
+        tlen  = p->backref_general.num;
+        mems = tlen == 1 ? &(p->backref_general.n1) : p->backref_general.ns;
 
         if (backref_check_at_nested_level(reg, stk, stk_base,
-                                          (int )level, (int )tlen, p) != 0) {
-          p += (SIZE_MEMNUM * tlen);
-        }
-        else
+                                          (int )level, (int )tlen, mems) == 0)
           goto fail;
       }
+      INC_OP;
       JUMP_OUT;
 #endif
 
     CASE_OP(EMPTY_CHECK_START)
-      GET_MEMNUM_INC(mem, p);    /* mem: null check id */
+      mem = p->empty_check_start.mem;   /* mem: null check id */
       STACK_PUSH_EMPTY_CHECK_START(mem, s);
+      INC_OP;
       JUMP_OUT;
 
     CASE_OP(EMPTY_CHECK_END)
       {
         int is_empty;
 
-        GET_MEMNUM_INC(mem, p); /* mem: null check id */
+        mem = p->empty_check_end.mem;  /* mem: null check id */
         STACK_EMPTY_CHECK(is_empty, mem, s);
+        INC_OP;
         if (is_empty) {
 #ifdef ONIG_DEBUG_MATCH
           fprintf(stderr, "EMPTY_CHECK_END: skip  id:%d, s:%p\n", (int )mem, s);
 #endif
         empty_check_found:
           /* empty loop founded, skip next instruction */
-          switch (*p++) {
+#if defined(ONIG_DEBUG) && !defined(USE_DIRECT_THREADED_CODE)
+          switch (p->opcode) {
           case OP_JUMP:
           case OP_PUSH:
-            p += SIZE_RELADDR;
-            break;
           case OP_REPEAT_INC:
           case OP_REPEAT_INC_NG:
           case OP_REPEAT_INC_SG:
           case OP_REPEAT_INC_NG_SG:
-            p += SIZE_MEMNUM;
+            INC_OP;
             break;
           default:
             goto unexpected_bytecode_error;
             break;
           }
+#else
+          INC_OP;
+#endif
         }
       }
       JUMP_OUT;
 
-#ifdef USE_INSISTENT_CHECK_CAPTURES_IN_EMPTY_REPEAT
+#ifdef USE_STUBBORN_CHECK_CAPTURES_IN_EMPTY_REPEAT
     CASE_OP(EMPTY_CHECK_END_MEMST)
       {
         int is_empty;
 
-        GET_MEMNUM_INC(mem, p); /* mem: null check id */
+        mem = p->empty_check_end.mem;  /* mem: null check id */
         STACK_EMPTY_CHECK_MEM(is_empty, mem, s, reg);
+        INC_OP;
         if (is_empty) {
 #ifdef ONIG_DEBUG_MATCH
           fprintf(stderr, "EMPTY_CHECK_END_MEM: skip  id:%d, s:%p\n", (int)mem, s);
@@ -3579,12 +3728,13 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
       {
         int is_empty;
 
-        GET_MEMNUM_INC(mem, p); /* mem: null check id */
-#ifdef USE_INSISTENT_CHECK_CAPTURES_IN_EMPTY_REPEAT
+        mem = p->empty_check_end.mem;  /* mem: null check id */
+#ifdef USE_STUBBORN_CHECK_CAPTURES_IN_EMPTY_REPEAT
         STACK_EMPTY_CHECK_MEM_REC(is_empty, mem, s, reg);
 #else
         STACK_EMPTY_CHECK_REC(is_empty, mem, s);
 #endif
+        INC_OP;
         if (is_empty) {
 #ifdef ONIG_DEBUG_MATCH
           fprintf(stderr, "EMPTY_CHECK_END_MEM_PUSH: skip  id:%d, s:%p\n",
@@ -3601,88 +3751,104 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
 #endif
 
     CASE_OP(JUMP)
-      GET_RELADDR_INC(addr, p);
+      addr = p->jump.addr;
       p += addr;
       CHECK_INTERRUPT_JUMP_OUT;
 
     CASE_OP(PUSH)
-      GET_RELADDR_INC(addr, p);
+      addr = p->push.addr;
       STACK_PUSH_ALT(p + addr, s, sprev);
+      INC_OP;
       JUMP_OUT;
 
     CASE_OP(PUSH_SUPER)
-      GET_RELADDR_INC(addr, p);
+      addr = p->push.addr;
       STACK_PUSH_SUPER_ALT(p + addr, s, sprev);
+      INC_OP;
       JUMP_OUT;
 
     CASE_OP(POP_OUT)
       STACK_POP_ONE;
       /* for stop backtrack */
       /* CHECK_RETRY_LIMIT_IN_MATCH; */
+      INC_OP;
       JUMP_OUT;
 
+ #ifdef USE_OP_PUSH_OR_JUMP_EXACT
     CASE_OP(PUSH_OR_JUMP_EXACT1)
-      GET_RELADDR_INC(addr, p);
-      if (*p == *s && DATA_ENSURE_CHECK1) {
-        p++;
-        STACK_PUSH_ALT(p + addr, s, sprev);
-        JUMP_OUT;
+      {
+        UChar c;
+
+        addr = p->push_or_jump_exact1.addr;
+        c    = p->push_or_jump_exact1.c;
+        if (DATA_ENSURE_CHECK1 && c == *s) {
+          STACK_PUSH_ALT(p + addr, s, sprev);
+          INC_OP;
+          JUMP_OUT;
+        }
       }
-      p += (addr + 1);
+      p += addr;
       JUMP_OUT;
+#endif
 
     CASE_OP(PUSH_IF_PEEK_NEXT)
-      GET_RELADDR_INC(addr, p);
-      if (*p == *s) {
-        p++;
-        STACK_PUSH_ALT(p + addr, s, sprev);
-        JUMP_OUT;
+      {
+        UChar c;
+
+        addr = p->push_if_peek_next.addr;
+        c    = p->push_if_peek_next.c;
+        if (c == *s) {
+          STACK_PUSH_ALT(p + addr, s, sprev);
+          INC_OP;
+          JUMP_OUT;
+        }
       }
-      p++;
+      INC_OP;
       JUMP_OUT;
 
     CASE_OP(REPEAT)
-      {
-        GET_MEMNUM_INC(mem, p);    /* mem: OP_REPEAT ID */
-        GET_RELADDR_INC(addr, p);
+      mem  = p->repeat.id;  /* mem: OP_REPEAT ID */
+      addr = p->repeat.addr;
 
-        STACK_ENSURE(1);
-        repeat_stk[mem] = GET_STACK_INDEX(stk);
-        STACK_PUSH_REPEAT(mem, p);
+      STACK_ENSURE(1);
+      repeat_stk[mem] = GET_STACK_INDEX(stk);
+      STACK_PUSH_REPEAT(mem, p + 1);
 
-        if (reg->repeat_range[mem].lower == 0) {
-          STACK_PUSH_ALT(p + addr, s, sprev);
-        }
+      if (reg->repeat_range[mem].lower == 0) {
+        STACK_PUSH_ALT(p + addr, s, sprev);
       }
+      INC_OP;
       JUMP_OUT;
 
     CASE_OP(REPEAT_NG)
-      {
-        GET_MEMNUM_INC(mem, p);    /* mem: OP_REPEAT ID */
-        GET_RELADDR_INC(addr, p);
+      mem  = p->repeat.id;  /* mem: OP_REPEAT ID */
+      addr = p->repeat.addr;
 
-        STACK_ENSURE(1);
-        repeat_stk[mem] = GET_STACK_INDEX(stk);
-        STACK_PUSH_REPEAT(mem, p);
+      STACK_ENSURE(1);
+      repeat_stk[mem] = GET_STACK_INDEX(stk);
+      STACK_PUSH_REPEAT(mem, p + 1);
 
-        if (reg->repeat_range[mem].lower == 0) {
-          STACK_PUSH_ALT(p, s, sprev);
-          p += addr;
-        }
+      if (reg->repeat_range[mem].lower == 0) {
+        STACK_PUSH_ALT(p + 1, s, sprev);
+        p += addr;
       }
+      else
+        INC_OP;
       JUMP_OUT;
 
     CASE_OP(REPEAT_INC)
-      GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */
-      si = repeat_stk[mem];
+      mem  = p->repeat_inc.id;  /* mem: OP_REPEAT ID */
+      si   = repeat_stk[mem];
       stkp = STACK_AT(si);
 
     repeat_inc:
       stkp->u.repeat.count++;
       if (stkp->u.repeat.count >= reg->repeat_range[mem].upper) {
         /* end of repeat. Nothing to do. */
+        INC_OP;
       }
       else if (stkp->u.repeat.count >= reg->repeat_range[mem].lower) {
+        INC_OP;
         STACK_PUSH_ALT(p, s, sprev);
         p = STACK_AT(si)->u.repeat.pcode; /* Don't use stkp after PUSH. */
       }
@@ -3693,13 +3859,13 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
       CHECK_INTERRUPT_JUMP_OUT;
 
     CASE_OP(REPEAT_INC_SG)
-      GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */
+      mem = p->repeat_inc.id;  /* mem: OP_REPEAT ID */
       STACK_GET_REPEAT(mem, stkp);
       si = GET_STACK_INDEX(stkp);
       goto repeat_inc;
 
     CASE_OP(REPEAT_INC_NG)
-      GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */
+      mem = p->repeat_inc.id;  /* mem: OP_REPEAT ID */
       si = repeat_stk[mem];
       stkp = STACK_AT(si);
 
@@ -3707,10 +3873,11 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
       stkp->u.repeat.count++;
       if (stkp->u.repeat.count < reg->repeat_range[mem].upper) {
         if (stkp->u.repeat.count >= reg->repeat_range[mem].lower) {
-          UChar* pcode = stkp->u.repeat.pcode;
+          Operation* pcode = stkp->u.repeat.pcode;
 
           STACK_PUSH_REPEAT_INC(si);
           STACK_PUSH_ALT(pcode, s, sprev);
+          INC_OP;
         }
         else {
           p = stkp->u.repeat.pcode;
@@ -3719,30 +3886,33 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
       }
       else if (stkp->u.repeat.count == reg->repeat_range[mem].upper) {
         STACK_PUSH_REPEAT_INC(si);
+        INC_OP;
       }
       CHECK_INTERRUPT_JUMP_OUT;
 
     CASE_OP(REPEAT_INC_NG_SG)
-      GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */
+      mem = p->repeat_inc.id;  /* mem: OP_REPEAT ID */
       STACK_GET_REPEAT(mem, stkp);
       si = GET_STACK_INDEX(stkp);
       goto repeat_inc_ng;
 
     CASE_OP(PREC_READ_START)
-      STACK_PUSH_POS(s, sprev);
+      STACK_PUSH_PREC_READ_START(s, sprev);
+      INC_OP;
       JUMP_OUT;
 
     CASE_OP(PREC_READ_END)
-      {
-        STACK_EXEC_TO_VOID(stkp);
-        s     = stkp->u.state.pstr;
-        sprev = stkp->u.state.pstr_prev;
-      }
+      STACK_GET_PREC_READ_START(stkp);
+      s     = stkp->u.state.pstr;
+      sprev = stkp->u.state.pstr_prev;
+      STACK_PUSH(STK_PREC_READ_END,0,0,0);
+      INC_OP;
       JUMP_OUT;
 
     CASE_OP(PREC_READ_NOT_START)
-      GET_RELADDR_INC(addr, p);
+      addr = p->prec_read_not_start.addr;
       STACK_PUSH_ALT_PREC_READ_NOT(p + addr, s, sprev);
+      INC_OP;
       JUMP_OUT;
 
     CASE_OP(PREC_READ_NOT_END)
@@ -3751,22 +3921,25 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
 
     CASE_OP(ATOMIC_START)
       STACK_PUSH_TO_VOID_START;
+      INC_OP;
       JUMP_OUT;
 
     CASE_OP(ATOMIC_END)
       STACK_EXEC_TO_VOID(stkp);
+      INC_OP;
       JUMP_OUT;
 
     CASE_OP(LOOK_BEHIND)
-      GET_LENGTH_INC(tlen, p);
+      tlen = p->look_behind.len;
       s = (UChar* )ONIGENC_STEP_BACK(encode, str, s, (int )tlen);
       if (IS_NULL(s)) goto fail;
       sprev = (UChar* )onigenc_get_prev_char_head(encode, str, s);
+      INC_OP;
       JUMP_OUT;
 
     CASE_OP(LOOK_BEHIND_NOT_START)
-      GET_RELADDR_INC(addr, p);
-      GET_LENGTH_INC(tlen, p);
+      addr = p->look_behind_not_start.addr;
+      tlen = p->look_behind_not_start.len;
       q = (UChar* )ONIGENC_STEP_BACK(encode, str, s, (int )tlen);
       if (IS_NULL(q)) {
         /* too short case -> success. ex. /(?<!XXX)a/.match("a")
@@ -3778,18 +3951,20 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
         STACK_PUSH_ALT_LOOK_BEHIND_NOT(p + addr, s, sprev);
         s = q;
         sprev = (UChar* )onigenc_get_prev_char_head(encode, str, s);
+        INC_OP;
       }
       JUMP_OUT;
 
     CASE_OP(LOOK_BEHIND_NOT_END)
       STACK_POP_TIL_ALT_LOOK_BEHIND_NOT;
+      INC_OP;
       goto fail;
 
 #ifdef USE_CALL
     CASE_OP(CALL)
-      GET_ABSADDR_INC(addr, p);
-      STACK_PUSH_CALL_FRAME(p);
-      p = reg->p + addr;
+      addr = p->call.addr;
+      INC_OP; STACK_PUSH_CALL_FRAME(p);
+      p = reg->ops + addr;
       JUMP_OUT;
 
     CASE_OP(RETURN)
@@ -3801,8 +3976,9 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
     CASE_OP(PUSH_SAVE_VAL)
       {
         SaveType type;
-        GET_SAVE_TYPE_INC(type, p);
-        GET_MEMNUM_INC(mem, p); /* mem: save id */
+
+        type = p->push_save_val.type;
+        mem  = p->push_save_val.id; /* mem: save id */
         switch ((enum SaveType )type) {
         case SAVE_KEEP:
           STACK_PUSH_SAVE_VAL(mem, type, s);
@@ -3817,6 +3993,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
           break;
         }
       }
+      INC_OP;
       JUMP_OUT;
 
     CASE_OP(UPDATE_VAR)
@@ -3824,8 +4001,9 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
         UpdateVarType type;
         enum SaveType save_type;
 
-        GET_UPDATE_VAR_TYPE_INC(type, p);
-        GET_MEMNUM_INC(mem, p); /* mem: save id */
+        type = p->update_var.type;
+        mem  = p->update_var.id; /* mem: save id */
+
         switch ((enum UpdateVarType )type) {
         case UPDATE_VAR_KEEP_FROM_STACK_LAST:
           STACK_GET_SAVE_VAL_TYPE_LAST(SAVE_KEEP, keep);
@@ -3847,11 +4025,13 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
           break;
         }
       }
+      INC_OP;
       JUMP_OUT;
 
 #ifdef USE_CALLOUT
     CASE_OP(CALLOUT_CONTENTS)
       of = ONIG_CALLOUT_OF_CONTENTS;
+      mem = p->callout_contents.num;
       goto callout_common_entry;
       BREAK_OUT;
 
@@ -3859,21 +4039,20 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
       {
         int call_result;
         int name_id;
-        int num;
         int in;
         CalloutListEntry* e;
         OnigCalloutFunc func;
         OnigCalloutArgs args;
 
         of = ONIG_CALLOUT_OF_NAME;
-        GET_MEMNUM_INC(name_id, p);
+        name_id = p->callout_name.id;
+        mem     = p->callout_name.num;
 
       callout_common_entry:
-        GET_MEMNUM_INC(num, p);
-        e = onig_reg_callout_list_at(reg, num);
+        e = onig_reg_callout_list_at(reg, mem);
         in = e->in;
         if (of == ONIG_CALLOUT_OF_NAME) {
-          func = onig_get_callout_start_func(reg, num);
+          func = onig_get_callout_start_func(reg, mem);
         }
         else {
           name_id = ONIG_NON_NAME_ID;
@@ -3882,7 +4061,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
 
         if (IS_NOT_NULL(func) && (in & ONIG_CALLOUT_IN_PROGRESS) != 0) {
           CALLOUT_BODY(func, ONIG_CALLOUT_IN_PROGRESS, name_id,
-                       num, msa->mp->callout_user_data, args, call_result);
+                       (int )mem, msa->mp->callout_user_data, args, call_result);
           switch (call_result) {
           case ONIG_CALLOUT_FAIL:
             goto fail;
@@ -3904,18 +4083,19 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
           if ((in & ONIG_CALLOUT_IN_RETRACTION) != 0) {
             if (of == ONIG_CALLOUT_OF_NAME) {
               if (IS_NOT_NULL(func)) {
-                STACK_PUSH_CALLOUT_NAME(name_id, num, func);
+                STACK_PUSH_CALLOUT_NAME(name_id, mem, func);
               }
             }
             else {
               func = msa->mp->retraction_callout_of_contents;
               if (IS_NOT_NULL(func)) {
-                STACK_PUSH_CALLOUT_CONTENTS(num, func);
+                STACK_PUSH_CALLOUT_CONTENTS(mem, func);
               }
             }
           }
         }
       }
+      INC_OP;
       JUMP_OUT;
 #endif
 
@@ -3959,9 +4139,11 @@ match_at(regex_t* reg, const UChar* str, const UChar* end,
   STACK_SAVE;
   return ONIGERR_UNDEFINED_BYTECODE;
 
+#if defined(ONIG_DEBUG) && !defined(USE_DIRECT_THREADED_CODE)
  unexpected_bytecode_error:
   STACK_SAVE;
   return ONIGERR_UNEXPECTED_BYTECODE;
+#endif
 
 #ifdef USE_RETRY_LIMIT_IN_MATCH
  retry_limit_in_match_over:
@@ -5028,6 +5210,16 @@ onig_copy_encoding(OnigEncoding to, OnigEncoding from)
   *to = *from;
 }
 
+#ifdef USE_DIRECT_THREADED_CODE
+extern int
+onig_init_for_match_at(regex_t* reg)
+{
+  return match_at(reg, (const UChar* )NULL, (const UChar* )NULL,
+                  (const UChar* )NULL, (const UChar* )NULL, (UChar* )NULL,
+                  (MatchArg* )NULL);
+}
+#endif
+
 
 /* for callout functions */
 
@@ -5298,6 +5490,9 @@ onig_builtin_error(OnigCalloutArgs* args, void* user_data ARG_UNUSED)
   if (n >= 0) {
     n = ONIGERR_INVALID_CALLOUT_BODY;
   }
+  else if (onig_is_error_code_needs_param(n)) {
+    n = ONIGERR_INVALID_CALLOUT_BODY;
+  }
 
   return n;
 }
index de122c726eaa47f99114302dffe53c28fba5b893..e4270c25dddbf8661159cd3cfc9e5d40af0ee363 100644 (file)
@@ -2,7 +2,7 @@
   regext.c -  Oniguruma (regular expression library)
 **********************************************************************/
 /*-
- * Copyright (c) 2002-2017  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2019  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -41,6 +41,7 @@ conv_ext0be32(const UChar* s, const UChar* end, UChar* conv)
   }
 }
 
+#if 0
 static void
 conv_ext0le32(const UChar* s, const UChar* end, UChar* conv)
 {
@@ -91,6 +92,7 @@ conv_swap2bytes(const UChar* s, const UChar* end, UChar* conv)
     s += 2;
   }
 }
+#endif
 
 static int
 conv_encoding(OnigEncoding from, OnigEncoding to, const UChar* s, const UChar* end,
@@ -185,7 +187,7 @@ onig_new_deluxe(regex_t** reg, const UChar* pattern, const UChar* pattern_end,
   }
 
   r = onig_reg_init(*reg, ci->option, ci->case_fold_flag, ci->target_enc,
-                   ci->syntax);
+                    ci->syntax);
   if (r != 0) goto err;
 
   r = onig_compile(*reg, cpat, cpat_end, einfo);
index 37c751999eb644ab17f5bcfb2444a73441450050..a124ae82512f06807b1aa045daa0a6af1056e3c3 100644 (file)
@@ -2,7 +2,7 @@
   reggnu.c -  Oniguruma (regular expression library)
 **********************************************************************/
 /*-
- * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2019  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -39,7 +39,7 @@ re_free_registers(OnigRegion* r)
 
 extern int
 re_adjust_startpos(regex_t* reg, const char* string, int size,
-                  int startpos, int range)
+                   int startpos, int range)
 {
   if (startpos > 0 && ONIGENC_MBC_MAXLEN(reg->enc) != 1 && startpos < size) {
     UChar *p;
@@ -59,20 +59,20 @@ re_adjust_startpos(regex_t* reg, const char* string, int size,
 
 extern int
 re_match(regex_t* reg, const char* str, int size, int pos,
-        struct re_registers* regs)
+         struct re_registers* regs)
 {
   return onig_match(reg, (UChar* )str, (UChar* )(str + size),
-                   (UChar* )(str + pos), regs, ONIG_OPTION_NONE);
+                    (UChar* )(str + pos), regs, ONIG_OPTION_NONE);
 }
 
 extern int
 re_search(regex_t* bufp, const char* string, int size, int startpos, int range,
-         struct re_registers* regs)
+          struct re_registers* regs)
 {
   return onig_search(bufp, (UChar* )string, (UChar* )(string + size),
-                    (UChar* )(string + startpos),
-                    (UChar* )(string + startpos + range),
-                    regs, ONIG_OPTION_NONE);
+                     (UChar* )(string + startpos),
+                     (UChar* )(string + startpos + range),
+                     regs, ONIG_OPTION_NONE);
 }
 
 extern int
@@ -103,9 +103,9 @@ re_alloc_pattern(regex_t** reg)
   if (IS_NULL(*reg)) return ONIGERR_MEMORY;
 
   return onig_reg_init(*reg, ONIG_OPTION_DEFAULT,
-                      ONIGENC_CASE_FOLD_DEFAULT,
-                      OnigEncDefaultCharEncoding,
-                      OnigDefaultSyntax);
+                       ONIGENC_CASE_FOLD_DEFAULT,
+                       OnigEncDefaultCharEncoding,
+                       OnigDefaultSyntax);
 }
 
 extern void
index d6aec9d42e3c630bae3372592ed83e2ea9cee5a5..38389a1abdaf13a2432856f80b1848a8197b7564 100644 (file)
@@ -4,7 +4,7 @@
   regint.h -  Oniguruma (regular expression library)
 **********************************************************************/
 /*-
- * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2019  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
 #define PLATFORM_UNALIGNED_WORD_ACCESS
 #endif
 
+#ifdef __GNUC__
+#define USE_GOTO_LABELS_AS_VALUES
+#endif
+
 /* config */
 /* spec. config */
 #define USE_CALL
 #define USE_CALLOUT
 #define USE_BACKREF_WITH_LEVEL        /* \k<name+n>, \k<name-n> */
-#define USE_INSISTENT_CHECK_CAPTURES_IN_EMPTY_REPEAT    /* /(?:()|())*\2/ */
+#define USE_STUBBORN_CHECK_CAPTURES_IN_EMPTY_REPEAT     /* /(?:()|())*\2/ */
 #define USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE     /* /\n$/ =~ "\n" */
 #define USE_WARNING_REDUNDANT_NESTED_REPEAT_OPERATOR
 #define USE_RETRY_LIMIT_IN_MATCH
+#ifdef USE_GOTO_LABELS_AS_VALUES
+#define USE_THREADED_CODE
+#define USE_DIRECT_THREADED_CODE
+#endif
 
 /* internal config */
 #define USE_OP_PUSH_OR_JUMP_EXACT
@@ -251,57 +259,6 @@ typedef struct {
 
 #endif
 
-typedef struct {
-  const UChar* pattern;
-  const UChar* pattern_end;
-#ifdef USE_CALLOUT
-  void*  tag_table;
-  int    callout_num;
-  int    callout_list_alloc;
-  CalloutListEntry* callout_list;    /* index: callout num */
-#endif
-} RegexExt;
-
-struct re_pattern_buffer {
-  /* common members of BBuf(bytes-buffer) */
-  unsigned char* p;         /* compiled pattern */
-  unsigned int used;        /* used space for p */
-  unsigned int alloc;       /* allocated space for p */
-
-  int num_mem;                   /* used memory(...) num counted from 1 */
-  int num_repeat;                /* OP_REPEAT/OP_REPEAT_NG id-counter */
-  int num_null_check;            /* OP_EMPTY_CHECK_START/END id counter */
-  int num_call;                  /* number of subexp call */
-  unsigned int capture_history;  /* (?@...) flag (1-31) */
-  unsigned int bt_mem_start;     /* need backtrack flag */
-  unsigned int bt_mem_end;       /* need backtrack flag */
-  int stack_pop_level;
-  int repeat_range_alloc;
-  OnigRepeatRange* repeat_range;
-
-  OnigEncoding      enc;
-  OnigOptionType    options;
-  OnigSyntaxType*   syntax;
-  OnigCaseFoldType  case_fold_flag;
-  void*             name_table;
-
-  /* optimization info (string search, char-map and anchors) */
-  int            optimize;          /* optimize flag */
-  int            threshold_len;     /* search str-length for apply optimize */
-  int            anchor;            /* BEGIN_BUF, BEGIN_POS, (SEMI_)END_BUF */
-  OnigLen        anchor_dmin;       /* (SEMI_)END_BUF anchor distance */
-  OnigLen        anchor_dmax;       /* (SEMI_)END_BUF anchor distance */
-  int            sub_anchor;        /* start-anchor for exact or map */
-  unsigned char *exact;
-  unsigned char *exact_end;
-  unsigned char  map[CHAR_MAP_SIZE]; /* used as BMH skip or char-map */
-  int            map_offset;
-  OnigLen        dmin;                      /* min-distance of exact or map */
-  OnigLen        dmax;                      /* max-distance of exact or map */
-  RegexExt*      extp;
-};
-
-
 /* stack pop level */
 enum StackPopLevel {
   STACK_POP_LEVEL_FREE      = 0,
@@ -391,8 +348,8 @@ typedef unsigned int  MemStatusType;
 #define DISABLE_CASE_FOLD_MULTI_CHAR(case_fold_flag) \
   ((case_fold_flag) & ~INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR)
 
-#define REPEAT_INFINITE         -1
-#define IS_REPEAT_INFINITE(n)   ((n) == REPEAT_INFINITE)
+#define INFINITE_REPEAT         -1
+#define IS_INFINITE_REPEAT(n)   ((n) == INFINITE_REPEAT)
 
 /* bitset */
 #define BITS_PER_BYTE      8
@@ -430,7 +387,7 @@ typedef struct _BBuf {
   unsigned int alloc;
 } BBuf;
 
-#define BB_INIT(buf,size)    onig_bbuf_init((BBuf* )(buf), (size))
+#define BB_INIT(buf,size)    bbuf_init((BBuf* )(buf), (size))
 
 #define BB_SIZE_INC(buf,inc) do{\
   (buf)->alloc += (inc);\
@@ -522,8 +479,8 @@ typedef struct _BBuf {
 #define ANCR_WORD_END         (1<<13)
 #define ANCR_ANYCHAR_INF      (1<<14)
 #define ANCR_ANYCHAR_INF_ML   (1<<15)
-#define ANCR_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY    (1<<16)
-#define ANCR_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY (1<<17)
+#define ANCR_TEXT_SEGMENT_BOUNDARY    (1<<16)
+#define ANCR_NO_TEXT_SEGMENT_BOUNDARY (1<<17)
 
 
 #define ANCHOR_HAS_BODY(a)      ((a)->type < ANCR_BEGIN_BUF)
@@ -559,9 +516,6 @@ enum OpCode {
   OP_CCLASS_NOT,
   OP_CCLASS_MB_NOT,
   OP_CCLASS_MIX_NOT,
-#ifdef USE_OP_CCLASS_NODE
-  OP_CCLASS_NODE,       /* pointer to CClassNode node */
-#endif
 
   OP_ANYCHAR,                 /* "."  */
   OP_ANYCHAR_ML,              /* "."  multi-line */
@@ -579,8 +533,7 @@ enum OpCode {
   OP_WORD_BEGIN,
   OP_WORD_END,
 
-  OP_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY,
-  OP_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY,
+  OP_TEXT_SEGMENT_BOUNDARY,
 
   OP_BEGIN_BUF,
   OP_END_BUF,
@@ -596,6 +549,7 @@ enum OpCode {
   OP_BACKREF_MULTI,
   OP_BACKREF_MULTI_IC,
   OP_BACKREF_WITH_LEVEL,        /* \k<xxx+n>, \k<xxx-n> */
+  OP_BACKREF_WITH_LEVEL_IC,     /* \k<xxx+n>, \k<xxx-n> */
   OP_BACKREF_CHECK,             /* (?(n)), (?('name')) */
   OP_BACKREF_CHECK_WITH_LEVEL,  /* (?(n-level)), (?('name-level')) */
 
@@ -611,7 +565,9 @@ enum OpCode {
   OP_PUSH,
   OP_PUSH_SUPER,
   OP_POP_OUT,
+#ifdef USE_OP_PUSH_OR_JUMP_EXACT
   OP_PUSH_OR_JUMP_EXACT1,  /* if match exact then push, else jump. */
+#endif
   OP_PUSH_IF_PEEK_NEXT,    /* if match exact then push, else none. */
   OP_REPEAT,               /* {n,m} */
   OP_REPEAT_NG,            /* {n,m}? (non greedy) */
@@ -658,6 +614,11 @@ enum UpdateVarType {
   UPDATE_VAR_RIGHT_RANGE_INIT         = 4,
 };
 
+enum TextSegmentBoundaryType {
+  EXTENDED_GRAPHEME_CLUSTER_BOUNDARY = 0,
+  WORD_BOUNDARY = 1,
+};
+
 typedef int RelAddrType;
 typedef int AbsAddrType;
 typedef int LengthType;
@@ -701,13 +662,16 @@ typedef int ModeType;
 
 
 /* op-code + arg size */
+#if 0
 #define SIZE_OP_ANYCHAR_STAR            SIZE_OPCODE
 #define SIZE_OP_ANYCHAR_STAR_PEEK_NEXT (SIZE_OPCODE + 1)
 #define SIZE_OP_JUMP                   (SIZE_OPCODE + SIZE_RELADDR)
 #define SIZE_OP_PUSH                   (SIZE_OPCODE + SIZE_RELADDR)
 #define SIZE_OP_PUSH_SUPER             (SIZE_OPCODE + SIZE_RELADDR)
 #define SIZE_OP_POP_OUT                 SIZE_OPCODE
+#ifdef USE_OP_PUSH_OR_JUMP_EXACT
 #define SIZE_OP_PUSH_OR_JUMP_EXACT1    (SIZE_OPCODE + SIZE_RELADDR + 1)
+#endif
 #define SIZE_OP_PUSH_IF_PEEK_NEXT      (SIZE_OPCODE + SIZE_RELADDR + 1)
 #define SIZE_OP_REPEAT_INC             (SIZE_OPCODE + SIZE_MEMNUM)
 #define SIZE_OP_REPEAT_INC_NG          (SIZE_OPCODE + SIZE_MEMNUM)
@@ -740,6 +704,56 @@ typedef int ModeType;
 #define SIZE_OP_CALLOUT_NAME           (SIZE_OPCODE + SIZE_MEMNUM + SIZE_MEMNUM)
 #endif
 
+#else  /* if 0 */
+
+/* for relative address increment to go next op. */
+#define SIZE_INC_OP                     1
+
+#define SIZE_OP_ANYCHAR_STAR            1
+#define SIZE_OP_ANYCHAR_STAR_PEEK_NEXT  1
+#define SIZE_OP_JUMP                    1
+#define SIZE_OP_PUSH                    1
+#define SIZE_OP_PUSH_SUPER              1
+#define SIZE_OP_POP_OUT                 1
+#ifdef USE_OP_PUSH_OR_JUMP_EXACT
+#define SIZE_OP_PUSH_OR_JUMP_EXACT1     1
+#endif
+#define SIZE_OP_PUSH_IF_PEEK_NEXT       1
+#define SIZE_OP_REPEAT                  1
+#define SIZE_OP_REPEAT_INC              1
+#define SIZE_OP_REPEAT_INC_NG           1
+#define SIZE_OP_WORD_BOUNDARY           1
+#define SIZE_OP_PREC_READ_START         1
+#define SIZE_OP_PREC_READ_NOT_START     1
+#define SIZE_OP_PREC_READ_END           1
+#define SIZE_OP_PREC_READ_NOT_END       1
+#define SIZE_OP_BACKREF                 1
+#define SIZE_OP_FAIL                    1
+#define SIZE_OP_MEMORY_START            1
+#define SIZE_OP_MEMORY_START_PUSH       1
+#define SIZE_OP_MEMORY_END_PUSH         1
+#define SIZE_OP_MEMORY_END_PUSH_REC     1
+#define SIZE_OP_MEMORY_END              1
+#define SIZE_OP_MEMORY_END_REC          1
+#define SIZE_OP_ATOMIC_START            1
+#define SIZE_OP_ATOMIC_END              1
+#define SIZE_OP_EMPTY_CHECK_START       1
+#define SIZE_OP_EMPTY_CHECK_END         1
+#define SIZE_OP_LOOK_BEHIND             1
+#define SIZE_OP_LOOK_BEHIND_NOT_START   1
+#define SIZE_OP_LOOK_BEHIND_NOT_END     1
+#define SIZE_OP_CALL                    1
+#define SIZE_OP_RETURN                  1
+#define SIZE_OP_PUSH_SAVE_VAL           1
+#define SIZE_OP_UPDATE_VAR              1
+
+#ifdef USE_CALLOUT
+#define SIZE_OP_CALLOUT_CONTENTS        1
+#define SIZE_OP_CALLOUT_NAME            1
+#endif
+#endif /* if 0 */
+
+
 #define MC_ESC(syn)               (syn)->meta_char_table.esc
 #define MC_ANYCHAR(syn)           (syn)->meta_char_table.anychar
 #define MC_ANYTIME(syn)           (syn)->meta_char_table.anytime
@@ -791,8 +805,186 @@ typedef int ModeType;
 #define NCCLASS_CLEAR_NOT(nd)   NCCLASS_FLAG_CLEAR(nd, FLAG_NCCLASS_NOT)
 #define IS_NCCLASS_NOT(nd)      IS_NCCLASS_FLAG_ON(nd, FLAG_NCCLASS_NOT)
 
-extern void onig_add_end_call(void (*func)(void));
 
+typedef struct {
+#ifdef USE_DIRECT_THREADED_CODE
+  const void* opaddr;
+#else
+  enum OpCode opcode;
+#endif
+  union {
+    struct {
+      UChar s[16];  /* Now used first 7 bytes only. */
+    } exact;
+    struct {
+      UChar* s;
+      LengthType n;   /* number of chars */
+    } exact_n; /* EXACTN, EXACTN_IC, EXACTMB2N, EXACTMB3N */
+    struct {
+      UChar* s;
+      LengthType n;   /* number of chars */
+      LengthType len; /* char byte length */
+    } exact_len_n; /* EXACTMBN */
+    struct {
+      BitSetRef bsp;
+    } cclass;
+    struct {
+      void*  mb;
+    } cclass_mb;
+    struct {
+      void*  mb; /* mb must be same position with cclass_mb for match_at(). */
+      BitSetRef bsp;
+    } cclass_mix;
+    struct {
+      UChar c;
+    } anychar_star_peek_next;
+    struct {
+      ModeType mode;
+    } word_boundary; /* OP_WORD_BOUNDARY, OP_NO_WORD_BOUNDARY, OP_WORD_BEGIN, OP_WORD_END */
+    struct {
+      enum TextSegmentBoundaryType type;
+      int not;
+    } text_segment_boundary;
+    struct {
+      union {
+        MemNumType  n1; /* num == 1 */
+        MemNumType* ns; /* num >  1 */
+      };
+      int num;
+      int nest_level;
+    } backref_general; /* BACKREF_MULTI, BACKREF_MULTI_IC, BACKREF_WITH_LEVEL, BACKREF_CHECK, BACKREF_CHECK_WITH_LEVEL, */
+    struct {
+      MemNumType n1;
+    } backref_n; /* BACKREF_N, BACKREF_N_IC */
+    struct {
+      MemNumType num;
+    } memory_start; /* MEMORY_START, MEMORY_START_PUSH */
+    struct {
+      MemNumType num;
+    } memory_end; /* MEMORY_END, MEMORY_END_REC, MEMORY_END_PUSH, MEMORY_END_PUSH_REC */
+    struct {
+      RelAddrType addr;
+    } jump;
+    struct {
+      RelAddrType addr;
+    } push;
+    struct {
+      RelAddrType addr;
+      UChar c;
+    } push_or_jump_exact1;
+    struct {
+      RelAddrType addr;
+      UChar c;
+    } push_if_peek_next;
+    struct {
+      MemNumType  id;
+      RelAddrType addr;
+    } repeat; /* REPEAT, REPEAT_NG */
+    struct {
+      MemNumType  id;
+    } repeat_inc; /* REPEAT_INC, REPEAT_INC_SG, REPEAT_INC_NG, REPEAT_INC_NG_SG */
+    struct {
+      MemNumType mem;
+    } empty_check_start;
+    struct {
+      MemNumType mem;
+    } empty_check_end; /* EMPTY_CHECK_END, EMPTY_CHECK_END_MEMST, EMPTY_CHECK_END_MEMST_PUSH */
+    struct {
+      RelAddrType addr;
+    } prec_read_not_start;
+    struct {
+      LengthType len;
+    } look_behind;
+    struct {
+      LengthType  len;
+      RelAddrType addr;
+    } look_behind_not_start;
+    struct {
+      AbsAddrType addr;
+    } call;
+    struct {
+      SaveType   type;
+      MemNumType id;
+    } push_save_val;
+    struct {
+      UpdateVarType type;
+      MemNumType id;
+    } update_var;
+#ifdef USE_CALLOUT
+    struct {
+      MemNumType num;
+    } callout_contents;
+    struct {
+      MemNumType num;
+      MemNumType id;
+    } callout_name;
+#endif
+  };
+} Operation;
+
+typedef struct {
+  const UChar* pattern;
+  const UChar* pattern_end;
+#ifdef USE_CALLOUT
+  void*  tag_table;
+  int    callout_num;
+  int    callout_list_alloc;
+  CalloutListEntry* callout_list;    /* index: callout num */
+#endif
+} RegexExt;
+
+struct re_pattern_buffer {
+  /* common members of BBuf(bytes-buffer) */
+  Operation*   ops;
+#ifdef USE_DIRECT_THREADED_CODE
+  enum OpCode* ocs;
+#endif
+  Operation*   ops_curr;
+  unsigned int ops_used;    /* used space for ops */
+  unsigned int ops_alloc;   /* allocated space for ops */
+  unsigned char* string_pool;
+  unsigned char* string_pool_end;
+
+  int num_mem;                   /* used memory(...) num counted from 1 */
+  int num_repeat;                /* OP_REPEAT/OP_REPEAT_NG id-counter */
+  int num_null_check;            /* OP_EMPTY_CHECK_START/END id counter */
+  int num_call;                  /* number of subexp call */
+  unsigned int capture_history;  /* (?@...) flag (1-31) */
+  unsigned int bt_mem_start;     /* need backtrack flag */
+  unsigned int bt_mem_end;       /* need backtrack flag */
+  int stack_pop_level;
+  int repeat_range_alloc;
+  OnigRepeatRange* repeat_range;
+
+  OnigEncoding      enc;
+  OnigOptionType    options;
+  OnigSyntaxType*   syntax;
+  OnigCaseFoldType  case_fold_flag;
+  void*             name_table;
+
+  /* optimization info (string search, char-map and anchors) */
+  int            optimize;          /* optimize flag */
+  int            threshold_len;     /* search str-length for apply optimize */
+  int            anchor;            /* BEGIN_BUF, BEGIN_POS, (SEMI_)END_BUF */
+  OnigLen        anchor_dmin;       /* (SEMI_)END_BUF anchor distance */
+  OnigLen        anchor_dmax;       /* (SEMI_)END_BUF anchor distance */
+  int            sub_anchor;        /* start-anchor for exact or map */
+  unsigned char *exact;
+  unsigned char *exact_end;
+  unsigned char  map[CHAR_MAP_SIZE]; /* used as BMH skip or char-map */
+  int            map_offset;
+  OnigLen        dmin;                      /* min-distance of exact or map */
+  OnigLen        dmax;                      /* max-distance of exact or map */
+  RegexExt*      extp;
+};
+
+#define COP(reg)            ((reg)->ops_curr)
+#define COP_CURR_OFFSET(reg)  ((reg)->ops_used - 1)
+#define COP_CURR_OFFSET_BYTES(reg, p)  \
+  ((int )((char* )(&((reg)->ops_curr->p)) - (char* )((reg)->ops)))
+
+
+extern void onig_add_end_call(void (*func)(void));
 
 #ifdef ONIG_DEBUG
 
@@ -809,9 +1001,7 @@ extern int  onig_print_statistics P_((FILE* f));
 extern void   onig_warning(const char* s);
 extern UChar* onig_error_code_to_format P_((int code));
 extern void   onig_snprintf_with_pattern PV_((UChar buf[], int bufsize, OnigEncoding enc, UChar* pat, UChar* pat_end, const UChar *fmt, ...));
-extern int    onig_bbuf_init P_((BBuf* buf, int size));
 extern int    onig_compile P_((regex_t* reg, const UChar* pattern, const UChar* pattern_end, OnigErrorInfo* einfo));
-extern void   onig_transfer P_((regex_t* to, regex_t* from));
 extern int    onig_is_code_in_cc_len P_((int enclen, OnigCodePoint code, void* /* CClassNode* */ cc));
 extern RegexExt* onig_get_regex_ext(regex_t* reg);
 extern int    onig_ext_set_pattern(regex_t* reg, const UChar* pattern, const UChar* pattern_end);
index 3354f6b7284310672f331e05957b3469f47041a9..7554d4fcb6470bfd7a4e009dabf48b90abbabec2 100644 (file)
@@ -2,7 +2,7 @@
   regparse.c -  Oniguruma (regular expression library)
 **********************************************************************/
 /*-
- * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2019  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -54,13 +54,13 @@ OnigSyntaxType OnigSyntaxOniguruma = {
      ONIG_SYN_OP_ESC_C_CONTROL )
    & ~ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END )
   , ( ONIG_SYN_OP2_QMARK_GROUP_EFFECT |
-      ONIG_SYN_OP2_OPTION_RUBY |
+      ONIG_SYN_OP2_OPTION_ONIGURUMA |
       ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP | ONIG_SYN_OP2_ESC_K_NAMED_BACKREF |
       ONIG_SYN_OP2_QMARK_LPAREN_IF_ELSE |
       ONIG_SYN_OP2_QMARK_TILDE_ABSENT_GROUP |
       ONIG_SYN_OP2_QMARK_BRACE_CALLOUT_CONTENTS |
       ONIG_SYN_OP2_ASTERISK_CALLOUT_NAME    |
-      ONIG_SYN_OP2_ESC_X_Y_GRAPHEME_CLUSTER |
+      ONIG_SYN_OP2_ESC_X_Y_TEXT_SEGMENT |
       ONIG_SYN_OP2_ESC_CAPITAL_R_GENERAL_NEWLINE |
       ONIG_SYN_OP2_ESC_CAPITAL_N_O_SUPER_DOT |
       ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP |
@@ -77,6 +77,7 @@ OnigSyntaxType OnigSyntaxOniguruma = {
       ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP |
       ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME |
       ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY |
+      ONIG_SYN_ALLOW_INVALID_CODE_END_OF_RANGE_IN_CC |
       ONIG_SYN_WARN_CC_OP_NOT_ESCAPED |
       ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT )
   , ONIG_OPTION_NONE
@@ -103,7 +104,7 @@ OnigSyntaxType OnigSyntaxRuby = {
       ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP | ONIG_SYN_OP2_ESC_K_NAMED_BACKREF |
       ONIG_SYN_OP2_QMARK_LPAREN_IF_ELSE |
       ONIG_SYN_OP2_QMARK_TILDE_ABSENT_GROUP |
-      ONIG_SYN_OP2_ESC_X_Y_GRAPHEME_CLUSTER |
+      ONIG_SYN_OP2_ESC_X_Y_TEXT_SEGMENT |
       ONIG_SYN_OP2_ESC_CAPITAL_R_GENERAL_NEWLINE |
       ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP |
       ONIG_SYN_OP2_ESC_G_SUBEXP_CALL |
@@ -198,6 +199,23 @@ onig_set_parse_depth_limit(unsigned int depth)
   return 0;
 }
 
+static int
+bbuf_init(BBuf* buf, int size)
+{
+  if (size <= 0) {
+    size   = 0;
+    buf->p = NULL;
+  }
+  else {
+    buf->p = (UChar* )xmalloc(size);
+    if (IS_NULL(buf->p)) return(ONIGERR_MEMORY);
+  }
+
+  buf->alloc = size;
+  buf->used  = 0;
+  return 0;
+}
+
 static void
 bbuf_free(BBuf* bbuf)
 {
@@ -515,6 +533,8 @@ onig_st_insert_strend(hash_table_type* table, const UChar* str_key,
 }
 
 
+#ifdef USE_CALLOUT
+
 typedef struct {
   OnigEncoding enc;
   int    type; /* callout type: single or not */
@@ -613,6 +633,7 @@ st_insert_callout_name_table(hash_table_type* table,
   }
   return result;
 }
+#endif
 
 #endif /* USE_ST_LIBRARY */
 
@@ -1076,6 +1097,35 @@ onig_name_to_group_numbers(regex_t* reg, const UChar* name,
   return e->back_num;
 }
 
+static int
+name_to_group_numbers(ScanEnv* env, const UChar* name, const UChar* name_end,
+                      int** nums)
+{
+  regex_t* reg;
+  NameEntry* e;
+
+  reg = env->reg;
+  e = name_find(reg, name, name_end);
+
+  if (IS_NULL(e)) {
+    onig_scan_env_set_error_string(env, ONIGERR_UNDEFINED_NAME_REFERENCE,
+                                   (UChar* )name, (UChar* )name_end);
+    return ONIGERR_UNDEFINED_NAME_REFERENCE;
+  }
+
+  switch (e->back_num) {
+  case 0:
+    break;
+  case 1:
+    *nums = &(e->back_ref1);
+    break;
+  default:
+    *nums = e->back_refs;
+    break;
+  }
+  return e->back_num;
+}
+
 extern int
 onig_name_to_backref_number(regex_t* reg, const UChar* name,
                             const UChar* name_end, OnigRegion *region)
@@ -1565,9 +1615,13 @@ onig_set_callout_of_name(OnigEncoding enc, OnigCalloutType callout_type,
   }
   for (i = arg_num - opt_arg_num, j = 0; i < arg_num; i++, j++) {
     if (fe->arg_types[i] == ONIG_TYPE_STRING) {
+      OnigValue* val;
+      UChar* ds;
+
       if (IS_NULL(opt_defaults)) return ONIGERR_INVALID_ARGUMENT;
-      OnigValue* val = opt_defaults + j;
-      UChar* ds = onigenc_strdup(enc, val->s.start, val->s.end);
+
+      val = opt_defaults + j;
+      ds = onigenc_strdup(enc, val->s.start, val->s.end);
       CHECK_NULL_RETURN_MEMERR(ds);
 
       fe->opt_defaults[i].s.start = ds;
@@ -1848,8 +1902,8 @@ callout_tag_table_new(CalloutTagTable** rt)
 }
 
 static int
-callout_tag_entry_raw(CalloutTagTable* t, UChar* name, UChar* name_end,
-                      CalloutTagVal entry_val)
+callout_tag_entry_raw(ScanEnv* env, CalloutTagTable* t, UChar* name,
+                      UChar* name_end, CalloutTagVal entry_val)
 {
   int r;
   CalloutTagVal val;
@@ -1858,8 +1912,11 @@ callout_tag_entry_raw(CalloutTagTable* t, UChar* name, UChar* name_end,
     return ONIGERR_INVALID_CALLOUT_TAG_NAME;
 
   val = callout_tag_find(t, name, name_end);
-  if (val >= 0)
+  if (val >= 0) {
+    onig_scan_env_set_error_string(env, ONIGERR_MULTIPLEX_DEFINED_NAME,
+                                   name, name_end);
     return ONIGERR_MULTIPLEX_DEFINED_NAME;
+  }
 
   r = onig_st_insert_strend(t, name, name_end, (HashDataType )entry_val);
   if (r < 0) return r;
@@ -1888,7 +1945,7 @@ ext_ensure_tag_table(regex_t* reg)
 }
 
 static int
-callout_tag_entry(regex_t* reg, UChar* name, UChar* name_end,
+callout_tag_entry(ScanEnv* env, regex_t* reg, UChar* name, UChar* name_end,
                   CalloutTagVal entry_val)
 {
   int r;
@@ -1900,7 +1957,7 @@ callout_tag_entry(regex_t* reg, UChar* name, UChar* name_end,
 
   ext = onig_get_regex_ext(reg);
   CHECK_NULL_RETURN_MEMERR(ext);
-  r = callout_tag_entry_raw(ext->tag_table, name, name_end, entry_val);
+  r = callout_tag_entry_raw(env, ext->tag_table, name, name_end, entry_val);
 
   e = onig_reg_callout_list_at(reg, (int )entry_val);
   CHECK_NULL_RETURN_MEMERR(e);
@@ -2370,10 +2427,10 @@ node_new_quantifier(int lower, int upper, int by_number)
   CHECK_NULL_RETURN(node);
 
   NODE_SET_TYPE(node, NODE_QUANT);
-  QUANT_(node)->lower  = lower;
-  QUANT_(node)->upper  = upper;
-  QUANT_(node)->greedy = 1;
-  QUANT_(node)->body_empty_info = QUANT_BODY_IS_NOT_EMPTY;
+  QUANT_(node)->lower           = lower;
+  QUANT_(node)->upper           = upper;
+  QUANT_(node)->greedy          = 1;
+  QUANT_(node)->emptiness       = BODY_IS_NOT_EMPTY;
   QUANT_(node)->head_exact      = NULL_NODE;
   QUANT_(node)->next_head_exact = NULL_NODE;
   QUANT_(node)->is_refered      = 0;
@@ -2650,7 +2707,7 @@ node_new_callout(Node** node, OnigCalloutOf callout_of, int num, int id,
 #endif
 
 static int
-make_extended_grapheme_cluster(Node** node, ScanEnv* env)
+make_text_segment(Node** node, ScanEnv* env)
 {
   int r;
   int i;
@@ -2662,7 +2719,7 @@ make_extended_grapheme_cluster(Node** node, ScanEnv* env)
   ns[1] = NULL_NODE;
 
   r = ONIGERR_MEMORY;
-  ns[0] = onig_node_new_anchor(ANCR_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY, 0);
+  ns[0] = onig_node_new_anchor(ANCR_NO_TEXT_SEGMENT_BOUNDARY, 0);
   if (IS_NULL(ns[0])) goto err;
 
   r = node_new_true_anychar(&ns[1], env);
@@ -2673,7 +2730,7 @@ make_extended_grapheme_cluster(Node** node, ScanEnv* env)
   ns[0] = x;
   ns[1] = NULL_NODE;
 
-  x = node_new_quantifier(0, REPEAT_INFINITE, 1);
+  x = node_new_quantifier(0, INFINITE_REPEAT, 1);
   if (IS_NULL(x)) goto err;
 
   NODE_BODY(x) = ns[0];
@@ -3023,7 +3080,7 @@ make_absent_tree(Node** node, Node* absent, Node* expr, int is_range_cutter,
 
     if (expr == NULL_NODE) {
       /* default expr \O* */
-      quant = node_new_quantifier(0, REPEAT_INFINITE, 0);
+      quant = node_new_quantifier(0, INFINITE_REPEAT, 0);
       if (IS_NULL(quant)) goto err0;
 
       r = node_new_true_anychar(&body, env);
@@ -3065,7 +3122,7 @@ make_absent_tree(Node** node, Node* absent, Node* expr, int is_range_cutter,
   if (r != 0) goto err;
 
   possessive = 1;
-  r = make_absent_engine(&ns[2], id1, absent, ns[3], 0, REPEAT_INFINITE,
+  r = make_absent_engine(&ns[2], id1, absent, ns[3], 0, INFINITE_REPEAT,
                          possessive, is_range_cutter, env);
   if (r != 0) goto err;
 
@@ -3215,10 +3272,18 @@ node_new_empty(void)
 static Node*
 node_new_str_raw_char(UChar c)
 {
+  int i;
   UChar p[1];
+  Node* node;
 
   p[0] = c;
-  return node_new_str_raw(p, p + 1);
+  node = node_new_str_raw(p, p + 1);
+
+  /* clear buf tail */
+  for (i = 1; i < NODE_STRING_BUF_SIZE; i++)
+    STR_(node)->buf[i] = '\0';
+
+  return node;
 }
 
 static Node*
@@ -3254,24 +3319,6 @@ str_node_can_be_split(Node* node, OnigEncoding enc)
   return 0;
 }
 
-#ifdef USE_PAD_TO_SHORT_BYTE_CHAR
-static int
-node_str_head_pad(StrNode* sn, int num, UChar val)
-{
-  UChar buf[NODE_STRING_BUF_SIZE];
-  int i, len;
-
-  len = sn->end - sn->s;
-  onig_strcpy(buf, sn->s, sn->end);
-  onig_strcpy(&(sn->s[num]), buf, buf + len);
-  sn->end += num;
-
-  for (i = 0; i < num; i++) {
-    sn->s[i] = val;
-  }
-}
-#endif
-
 extern int
 onig_scan_unsigned_number(UChar** src, const UChar* end, OnigEncoding enc)
 {
@@ -3856,19 +3903,19 @@ quantifier_type_num(QuantNode* q)
   if (q->greedy) {
     if (q->lower == 0) {
       if (q->upper == 1) return 0;
-      else if (IS_REPEAT_INFINITE(q->upper)) return 1;
+      else if (IS_INFINITE_REPEAT(q->upper)) return 1;
     }
     else if (q->lower == 1) {
-      if (IS_REPEAT_INFINITE(q->upper)) return 2;
+      if (IS_INFINITE_REPEAT(q->upper)) return 2;
     }
   }
   else {
     if (q->lower == 0) {
       if (q->upper == 1) return 3;
-      else if (IS_REPEAT_INFINITE(q->upper)) return 4;
+      else if (IS_INFINITE_REPEAT(q->upper)) return 4;
     }
     else if (q->lower == 1) {
-      if (IS_REPEAT_INFINITE(q->upper)) return 5;
+      if (IS_INFINITE_REPEAT(q->upper)) return 5;
     }
   }
   return -1;
@@ -3905,8 +3952,8 @@ onig_reduce_nested_quantifier(Node* pnode, Node* cnode)
   pnum = quantifier_type_num(p);
   cnum = quantifier_type_num(c);
   if (pnum < 0 || cnum < 0) {
-    if ((p->lower == p->upper) && ! IS_REPEAT_INFINITE(p->upper)) {
-      if ((c->lower == c->upper) && ! IS_REPEAT_INFINITE(c->upper)) {
+    if ((p->lower == p->upper) && ! IS_INFINITE_REPEAT(p->upper)) {
+      if ((c->lower == c->upper) && ! IS_INFINITE_REPEAT(c->upper)) {
         int n = onig_positive_int_multiply(p->lower, c->lower);
         if (n >= 0) {
           p->lower = p->upper = n;
@@ -3925,11 +3972,11 @@ onig_reduce_nested_quantifier(Node* pnode, Node* cnode)
     break;
   case RQ_A:
     NODE_BODY(pnode) = NODE_BODY(cnode);
-    p->lower  = 0;  p->upper = REPEAT_INFINITE;  p->greedy = 1;
+    p->lower  = 0;  p->upper = INFINITE_REPEAT;  p->greedy = 1;
     break;
   case RQ_AQ:
     NODE_BODY(pnode) = NODE_BODY(cnode);
-    p->lower  = 0;  p->upper = REPEAT_INFINITE;  p->greedy = 0;
+    p->lower  = 0;  p->upper = INFINITE_REPEAT;  p->greedy = 0;
     break;
   case RQ_QQ:
     NODE_BODY(pnode) = NODE_BODY(cnode);
@@ -3938,13 +3985,13 @@ onig_reduce_nested_quantifier(Node* pnode, Node* cnode)
   case RQ_P_QQ:
     NODE_BODY(pnode) = cnode;
     p->lower  = 0;  p->upper = 1;  p->greedy = 0;
-    c->lower  = 1;  c->upper = REPEAT_INFINITE;  c->greedy = 1;
+    c->lower  = 1;  c->upper = INFINITE_REPEAT;  c->greedy = 1;
     return ;
     break;
   case RQ_PQ_Q:
     NODE_BODY(pnode) = cnode;
     p->lower  = 0;  p->upper = 1;  p->greedy = 1;
-    c->lower  = 1;  c->upper = REPEAT_INFINITE;  c->greedy = 0;
+    c->lower  = 1;  c->upper = INFINITE_REPEAT;  c->greedy = 0;
     return ;
     break;
   case RQ_ASIS:
@@ -4020,7 +4067,7 @@ enum TokenSyms {
   TK_BACKREF,
   TK_CALL,
   TK_ANCHOR,
-  TK_OP_REPEAT,
+  TK_REPEAT,
   TK_INTERVAL,
   TK_ANYCHAR_ANYTIME,  /* SQL '%' == .* */
   TK_ALT,
@@ -4033,7 +4080,7 @@ enum TokenSyms {
   TK_GENERAL_NEWLINE,  /* \R */
   TK_NO_NEWLINE,       /* \N */
   TK_TRUE_ANYCHAR,     /* \O */
-  TK_EXTENDED_GRAPHEME_CLUSTER, /* \X */
+  TK_TEXT_SEGMENT,     /* \X */
 
   /* in cc */
   TK_CC_CLOSE,
@@ -4081,11 +4128,11 @@ typedef struct {
       int not;
     } prop;
   } u;
-} OnigToken;
+} PToken;
 
 
 static int
-fetch_range_quantifier(UChar** src, UChar* end, OnigToken* tok, ScanEnv* env)
+fetch_interval_quantifier(UChar** src, UChar* end, PToken* tok, ScanEnv* env)
 {
   int low, up, syn_allow, non_low = 0;
   int r = 0;
@@ -4137,7 +4184,7 @@ fetch_range_quantifier(UChar** src, UChar* end, OnigToken* tok, ScanEnv* env)
     if (p == prev) {
       if (non_low != 0)
         goto invalid;
-      up = REPEAT_INFINITE;  /* {n,} : {n,infinite} */
+      up = INFINITE_REPEAT;  /* {n,} : {n,infinite} */
     }
   }
   else {
@@ -4157,9 +4204,19 @@ fetch_range_quantifier(UChar** src, UChar* end, OnigToken* tok, ScanEnv* env)
   }
   if (c != '}') goto invalid;
 
-  if (!IS_REPEAT_INFINITE(up) && low > up) {
-    return ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE;
+  if (!IS_INFINITE_REPEAT(up) && low > up) {
+    /* {n,m}+ supported case */
+    if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL))
+      return ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE;
+
+    tok->u.repeat.possessive = 1;
+    {
+      int tmp;
+      tmp = low; low = up; up = tmp;
+    }
   }
+  else
+    tok->u.repeat.possessive = 0;
 
   tok->type = TK_INTERVAL;
   tok->u.repeat.lower = low;
@@ -4248,7 +4305,7 @@ fetch_escaped_value(UChar** src, UChar* end, ScanEnv* env, OnigCodePoint* val)
   return 0;
 }
 
-static int fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env);
+static int fetch_token(PToken* tok, UChar** src, UChar* end, ScanEnv* env);
 
 static OnigCodePoint
 get_name_end_code_point(OnigCodePoint start)
@@ -4642,7 +4699,7 @@ str_exist_check_with_esc(OnigCodePoint s[], int n, UChar* from, UChar* to,
 }
 
 static int
-fetch_token_in_cc(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
+fetch_token_in_cc(PToken* tok, UChar** src, UChar* end, ScanEnv* env)
 {
   int num;
   OnigCodePoint c, c2;
@@ -4894,7 +4951,7 @@ fetch_token_in_cc(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
 }
 
 static int
-fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
+fetch_token(PToken* tok, UChar** src, UChar* end, ScanEnv* env)
 {
   int r, num;
   OnigCodePoint c;
@@ -4926,60 +4983,60 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
     switch (c) {
     case '*':
       if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_ASTERISK_ZERO_INF)) break;
-      tok->type = TK_OP_REPEAT;
+      tok->type = TK_REPEAT;
       tok->u.repeat.lower = 0;
-      tok->u.repeat.upper = REPEAT_INFINITE;
+      tok->u.repeat.upper = INFINITE_REPEAT;
       goto greedy_check;
       break;
 
     case '+':
       if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_PLUS_ONE_INF)) break;
-      tok->type = TK_OP_REPEAT;
+      tok->type = TK_REPEAT;
       tok->u.repeat.lower = 1;
-      tok->u.repeat.upper = REPEAT_INFINITE;
+      tok->u.repeat.upper = INFINITE_REPEAT;
       goto greedy_check;
       break;
 
     case '?':
       if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_QMARK_ZERO_ONE)) break;
-      tok->type = TK_OP_REPEAT;
+      tok->type = TK_REPEAT;
       tok->u.repeat.lower = 0;
       tok->u.repeat.upper = 1;
     greedy_check:
+      tok->u.repeat.possessive = 0;
+    greedy_check2:
       if (!PEND && PPEEK_IS('?') &&
-          IS_SYNTAX_OP(syn, ONIG_SYN_OP_QMARK_NON_GREEDY)) {
+          IS_SYNTAX_OP(syn, ONIG_SYN_OP_QMARK_NON_GREEDY) &&
+          tok->u.repeat.possessive == 0) {
         PFETCH(c);
-        tok->u.repeat.greedy     = 0;
+        tok->u.repeat.greedy = 0;
         tok->u.repeat.possessive = 0;
       }
       else {
       possessive_check:
+        tok->u.repeat.greedy = 1;
         if (!PEND && PPEEK_IS('+') &&
             ((IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT) &&
               tok->type != TK_INTERVAL)  ||
              (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL) &&
-              tok->type == TK_INTERVAL))) {
+              tok->type == TK_INTERVAL)) &&
+          tok->u.repeat.possessive == 0) {
           PFETCH(c);
-          tok->u.repeat.greedy     = 1;
           tok->u.repeat.possessive = 1;
         }
-        else {
-          tok->u.repeat.greedy     = 1;
-          tok->u.repeat.possessive = 0;
-        }
       }
       break;
 
     case '{':
       if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_BRACE_INTERVAL)) break;
-      r = fetch_range_quantifier(&p, end, tok, env);
+      r = fetch_interval_quantifier(&p, end, tok, env);
       if (r < 0) return r;  /* error */
-      if (r == 0) goto greedy_check;
+      if (r == 0) goto greedy_check2;
       else if (r == 2) { /* {n} */
         if (IS_SYNTAX_BV(syn, ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY))
           goto possessive_check;
 
-        goto greedy_check;
+        goto greedy_check2;
       }
       /* r == 1 : normal char */
       break;
@@ -5026,15 +5083,15 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
       break;
 
     case 'y':
-      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP2_ESC_X_Y_GRAPHEME_CLUSTER)) break;
+      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP2_ESC_X_Y_TEXT_SEGMENT)) break;
       tok->type = TK_ANCHOR;
-      tok->u.anchor = ANCR_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY;
+      tok->u.anchor = ANCR_TEXT_SEGMENT_BOUNDARY;
       break;
 
     case 'Y':
-      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP2_ESC_X_Y_GRAPHEME_CLUSTER)) break;
+      if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP2_ESC_X_Y_TEXT_SEGMENT)) break;
       tok->type = TK_ANCHOR;
-      tok->u.anchor = ANCR_NO_EXTENDED_GRAPHEME_CLUSTER_BOUNDARY;
+      tok->u.anchor = ANCR_NO_TEXT_SEGMENT_BOUNDARY;
       break;
 
 #ifdef USE_WORD_BEGIN_END
@@ -5114,8 +5171,8 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
       break;
 
     case 'X':
-      if (! IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_X_Y_GRAPHEME_CLUSTER)) break;
-      tok->type = TK_EXTENDED_GRAPHEME_CLUSTER;
+      if (! IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_X_Y_TEXT_SEGMENT)) break;
+      tok->type = TK_TEXT_SEGMENT;
       break;
 
     case 'A':
@@ -5327,10 +5384,8 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
             tok->u.backref.ref1 = back_num;
           }
           else {
-            num = onig_name_to_group_numbers(env->reg, prev, name_end, &backs);
+            num = name_to_group_numbers(env, prev, name_end, &backs);
             if (num <= 0) {
-              onig_scan_env_set_error_string(env,
-                        ONIGERR_UNDEFINED_NAME_REFERENCE, prev, name_end);
               return ONIGERR_UNDEFINED_NAME_REFERENCE;
             }
             if (IS_SYNTAX_BV(syn, ONIG_SYN_STRICT_CHECK_BACKREF)) {
@@ -5483,9 +5538,9 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
 #ifdef USE_VARIABLE_META_CHARS
     anytime:
 #endif
-      tok->type = TK_OP_REPEAT;
+      tok->type = TK_REPEAT;
       tok->u.repeat.lower = 0;
-      tok->u.repeat.upper = REPEAT_INFINITE;
+      tok->u.repeat.upper = INFINITE_REPEAT;
       goto greedy_check;
       break;
 
@@ -5494,9 +5549,9 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
 #ifdef USE_VARIABLE_META_CHARS
     one_or_more_time:
 #endif
-      tok->type = TK_OP_REPEAT;
+      tok->type = TK_REPEAT;
       tok->u.repeat.lower = 1;
-      tok->u.repeat.upper = REPEAT_INFINITE;
+      tok->u.repeat.upper = INFINITE_REPEAT;
       goto greedy_check;
       break;
 
@@ -5505,7 +5560,7 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
 #ifdef USE_VARIABLE_META_CHARS
     zero_or_one_time:
 #endif
-      tok->type = TK_OP_REPEAT;
+      tok->type = TK_REPEAT;
       tok->u.repeat.lower = 0;
       tok->u.repeat.upper = 1;
       goto greedy_check;
@@ -5513,14 +5568,14 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
 
     case '{':
       if (! IS_SYNTAX_OP(syn, ONIG_SYN_OP_BRACE_INTERVAL)) break;
-      r = fetch_range_quantifier(&p, end, tok, env);
+      r = fetch_interval_quantifier(&p, end, tok, env);
       if (r < 0) return r;  /* error */
-      if (r == 0) goto greedy_check;
+      if (r == 0) goto greedy_check2;
       else if (r == 2) { /* {n} */
         if (IS_SYNTAX_BV(syn, ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY))
           goto possessive_check;
 
-        goto greedy_check;
+        goto greedy_check2;
       }
       /* r == 1 : normal char */
       break;
@@ -5579,7 +5634,7 @@ fetch_token(OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
               tok->u.call.gnum      = 0;
               tok->u.call.name      = p;
               PINC;
-              if (! PPEEK_IS(')')) return ONIGERR_INVALID_GROUP_NAME;
+              if (! PPEEK_IS(')')) return ONIGERR_UNDEFINED_GROUP_OPTION;
               tok->u.call.name_end  = p;
               break;
 
@@ -6053,7 +6108,7 @@ fetch_char_property_to_ctype(UChar** src, UChar* end, ScanEnv* env)
 }
 
 static int
-parse_char_property(Node** np, OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
+parse_char_property(Node** np, PToken* tok, UChar** src, UChar* end, ScanEnv* env)
 {
   int r, ctype;
   CClassNode* cc;
@@ -6203,7 +6258,7 @@ code_exist_check(OnigCodePoint c, UChar* from, UChar* end, int ignore_escaped,
 }
 
 static int
-parse_char_class(Node** np, OnigToken* tok, UChar** src, UChar* end, ScanEnv* env)
+parse_char_class(Node** np, PToken* tok, UChar** src, UChar* end, ScanEnv* env)
 {
   int r, neg, len, fetched, and_start;
   OnigCodePoint v, vs;
@@ -6220,6 +6275,7 @@ parse_char_class(Node** np, OnigToken* tok, UChar** src, UChar* end, ScanEnv* en
   env->parse_depth++;
   if (env->parse_depth > ParseDepthLimit)
     return ONIGERR_PARSE_DEPTH_LIMIT_OVER;
+
   prev_cc = (CClassNode* )NULL;
   r = fetch_token_in_cc(tok, src, end, env);
   if (r == TK_CHAR && tok->u.c == '^' && tok->escaped == 0) {
@@ -6272,10 +6328,11 @@ parse_char_class(Node** np, OnigToken* tok, UChar** src, UChar* end, ScanEnv* en
     case TK_RAW_BYTE:
       /* tok->base != 0 : octal or hexadec. */
       if (! ONIGENC_IS_SINGLEBYTE(env->enc) && tok->base != 0) {
+        int i, j;
         UChar buf[ONIGENC_CODE_TO_MBC_MAXLEN];
         UChar* bufe = buf + ONIGENC_CODE_TO_MBC_MAXLEN;
         UChar* psave = p;
-        int i, base = tok->base;
+        int base = tok->base;
 
         buf[0] = tok->u.c;
         for (i = 1; i < ONIGENC_MBC_MAXLEN(env->enc); i++) {
@@ -6293,6 +6350,9 @@ parse_char_class(Node** np, OnigToken* tok, UChar** src, UChar* end, ScanEnv* en
           goto err;
         }
 
+        /* clear buf tail */
+        for (j = i; j < ONIGENC_CODE_TO_MBC_MAXLEN; j++) buf[j] = '\0';
+
         len = enclen(env->enc, buf);
         if (i < len) {
           r = ONIGERR_TOO_SHORT_MULTI_BYTE_STRING;
@@ -6330,8 +6390,13 @@ parse_char_class(Node** np, OnigToken* tok, UChar** src, UChar* end, ScanEnv* en
     val_entry:
       len = ONIGENC_CODE_TO_MBCLEN(env->enc, v);
       if (len < 0) {
-        r = len;
-        goto err;
+        if (state != CCS_RANGE ||
+            ! IS_SYNTAX_BV(env->syntax,
+                           ONIG_SYN_ALLOW_INVALID_CODE_END_OF_RANGE_IN_CC) ||
+            v < 0x100 || ONIGENC_MBC_MAXLEN(env->enc) == 1) {
+          r = len;
+          goto err;
+        }
       }
       in_type = (len == 1 ? CCV_SB : CCV_CODE_POINT);
     val_entry2:
@@ -6540,7 +6605,7 @@ parse_char_class(Node** np, OnigToken* tok, UChar** src, UChar* end, ScanEnv* en
   return r;
 }
 
-static int parse_subexp(Node** top, OnigToken* tok, int term,
+static int parse_subexp(Node** top, PToken* tok, int term,
                         UChar** src, UChar* end, ScanEnv* env, int group_head);
 
 #ifdef USE_CALLOUT
@@ -6598,7 +6663,7 @@ parse_callout_of_contents(Node** np, int cterm, UChar** src, UChar* end, ScanEnv
   PFETCH_S(c);
   if (c == '[') {
     if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
-    tag_start = p;
+    tag_end = tag_start = p;
     while (! PEND) {
       if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
       tag_end = p;
@@ -6644,7 +6709,7 @@ parse_callout_of_contents(Node** np, int cterm, UChar** src, UChar* end, ScanEnv
   }
 
   if (tag_start != tag_end) {
-    r = callout_tag_entry(env->reg, tag_start, tag_end, num);
+    r = callout_tag_entry(env, env->reg, tag_start, tag_end, num);
     if (r != ONIG_NORMAL) return r;
   }
 
@@ -6888,7 +6953,7 @@ parse_callout_of_name(Node** np, int cterm, UChar** src, UChar* end, ScanEnv* en
 
   if (c == '[') {
     if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
-    tag_start = p;
+    tag_end = tag_start = p;
     while (! PEND) {
       if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
       tag_end = p;
@@ -6965,7 +7030,7 @@ parse_callout_of_name(Node** np, int cterm, UChar** src, UChar* end, ScanEnv* en
   }
 
   if (tag_start != tag_end) {
-    r = callout_tag_entry(env->reg, tag_start, tag_end, num);
+    r = callout_tag_entry(env, env->reg, tag_start, tag_end, num);
     if (r != ONIG_NORMAL) return r;
   }
 
@@ -6998,7 +7063,7 @@ parse_callout_of_name(Node** np, int cterm, UChar** src, UChar* end, ScanEnv* en
 #endif
 
 static int
-parse_bag(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
+parse_bag(Node** np, PToken* tok, int term, UChar** src, UChar* end,
           ScanEnv* env)
 {
   int r, num;
@@ -7242,10 +7307,8 @@ parse_bag(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
             int num;
             int* backs;
 
-            num = onig_name_to_group_numbers(env->reg, prev, name_end, &backs);
+            num = name_to_group_numbers(env, prev, name_end, &backs);
             if (num <= 0) {
-              onig_scan_env_set_error_string(env,
-                        ONIGERR_UNDEFINED_NAME_REFERENCE, prev, name_end);
               return ONIGERR_UNDEFINED_NAME_REFERENCE;
             }
             if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_STRICT_CHECK_BACKREF)) {
@@ -7306,7 +7369,9 @@ parse_bag(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
           }
         }
 
+#ifdef USE_CALLOUT
       end_condition:
+#endif
         CHECK_NULL_RETURN_MEMERR(condition);
 
         if (PEND) {
@@ -7327,9 +7392,9 @@ parse_bag(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
           int then_is_empty;
           Node *Then, *Else;
 
+          Then = 0;
           if (PPEEK_IS('|')) {
             PFETCH(c);
-            Then = 0;
             then_is_empty = 1;
           }
           else
@@ -7383,6 +7448,7 @@ parse_bag(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
       }
       break;
 
+#ifdef USE_CAPTURE_HISTORY
     case '@':
       if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY)) {
         if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP)) {
@@ -7410,12 +7476,14 @@ parse_bag(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
         return ONIGERR_UNDEFINED_GROUP_OPTION;
       }
       break;
+#endif
 
 #ifdef USE_POSIXLINE_OPTION
     case 'p':
 #endif
     case '-': case 'i': case 'm': case 's': case 'x':
     case 'W': case 'D': case 'S': case 'P':
+    case 'y':
       {
         int neg = 0;
 
@@ -7440,7 +7508,8 @@ parse_bag(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
             if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_PERL)) {
               OPTION_NEGATE(option, ONIG_OPTION_SINGLELINE, (neg == 0 ? 1 : 0));
             }
-            else if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_RUBY)) {
+            else if (IS_SYNTAX_OP2(env->syntax,
+                        ONIG_SYN_OP2_OPTION_ONIGURUMA|ONIG_SYN_OP2_OPTION_RUBY)) {
               OPTION_NEGATE(option, ONIG_OPTION_MULTILINE,  neg);
             }
             else
@@ -7456,6 +7525,46 @@ parse_bag(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
           case 'S': OPTION_NEGATE(option, ONIG_OPTION_SPACE_IS_ASCII, neg); break;
           case 'P': OPTION_NEGATE(option, ONIG_OPTION_POSIX_IS_ASCII, neg); break;
 
+          case 'y': /* y{g}, y{w} */
+            {
+              if (! IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_ONIGURUMA))
+                return ONIGERR_UNDEFINED_GROUP_OPTION;
+
+              if (neg != 0) return ONIGERR_UNDEFINED_GROUP_OPTION;
+
+              if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
+              if (! PPEEK_IS('{')) return ONIGERR_UNDEFINED_GROUP_OPTION;
+              PFETCH(c);
+              if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
+              PFETCH(c);
+              switch (c) {
+              case 'g':
+                if (! ONIGENC_IS_UNICODE_ENCODING(enc))
+                  return ONIGERR_UNDEFINED_GROUP_OPTION;
+
+                OPTION_NEGATE(option, ONIG_OPTION_TEXT_SEGMENT_EXTENDED_GRAPHEME_CLUSTER, 0);
+                OPTION_NEGATE(option, ONIG_OPTION_TEXT_SEGMENT_WORD, 1);
+                break;
+#ifdef USE_UNICODE_WORD_BREAK
+              case 'w':
+                if (! ONIGENC_IS_UNICODE_ENCODING(enc))
+                  return ONIGERR_UNDEFINED_GROUP_OPTION;
+
+                OPTION_NEGATE(option, ONIG_OPTION_TEXT_SEGMENT_WORD, 0);
+                OPTION_NEGATE(option, ONIG_OPTION_TEXT_SEGMENT_EXTENDED_GRAPHEME_CLUSTER, 1);
+                break;
+#endif
+              default:
+                return ONIGERR_UNDEFINED_GROUP_OPTION;
+                break;
+              }
+              if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
+              PFETCH(c);
+              if (c != '}')
+                return ONIGERR_UNDEFINED_GROUP_OPTION;
+              break;
+            } /* case 'y' */
+
           default:
             return ONIGERR_UNDEFINED_GROUP_OPTION;
           }
@@ -7487,7 +7596,7 @@ parse_bag(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
 
           if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
           PFETCH(c);
-        }
+        } /* while (1) */
       }
       break;
 
@@ -7615,7 +7724,7 @@ set_quantifier(Node* qnode, Node* target, int group, ScanEnv* env)
       if (targetq_num >= 0 && nestq_num < 0) {
         if (targetq_num == 1 || targetq_num == 2) { /* * or + */
           /* (?:a*){n,m}, (?:a+){n,m} => (?:a*){n,n}, (?:a+){n,n} */
-          if (! IS_REPEAT_INFINITE(qn->upper) && qn->upper > 1 && qn->greedy) {
+          if (! IS_INFINITE_REPEAT(qn->upper) && qn->upper > 1 && qn->greedy) {
             qn->upper = (qn->lower == 0 ? 1 : qn->lower);
           }
         }
@@ -7750,17 +7859,21 @@ i_apply_case_fold(OnigCodePoint from, OnigCodePoint to[], int to_len, void* arg)
 }
 
 static int
-parse_exp(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
+parse_exp(Node** np, PToken* tok, int term, UChar** src, UChar* end,
           ScanEnv* env, int group_head)
 {
-  int r, len, group = 0;
+  int r, len, group;
   Node* qn;
-  Node** targetp;
+  Node** tp;
+  unsigned int parse_depth;
 
+  group = 0;
   *np = NULL;
   if (tok->type == (enum TokenSyms )term)
     goto end_of_token;
 
+  parse_depth = env->parse_depth;
+
   switch (tok->type) {
   case TK_ALT:
   case TK_EOT:
@@ -7828,7 +7941,7 @@ parse_exp(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
       }
 
     string_end:
-      targetp = np;
+      tp = np;
       goto repeat;
     }
     break;
@@ -7841,48 +7954,41 @@ parse_exp(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
       len = 1;
       while (1) {
         if (len >= ONIGENC_MBC_MINLEN(env->enc)) {
-          if (len == enclen(env->enc, STR_(*np)->s)) {/* should not enclen_end() */
+          if (len == enclen(env->enc, STR_(*np)->s)) {
             r = fetch_token(tok, src, end, env);
-            NODE_STRING_CLEAR_RAW(*np);
-            goto string_end;
+            goto tk_raw_byte_end;
           }
         }
 
         r = fetch_token(tok, src, end, env);
         if (r < 0) return r;
-        if (r != TK_RAW_BYTE) {
-          /* Don't use this, it is wrong for little endian encodings. */
-#ifdef USE_PAD_TO_SHORT_BYTE_CHAR
-          int rem;
-          if (len < ONIGENC_MBC_MINLEN(env->enc)) {
-            rem = ONIGENC_MBC_MINLEN(env->enc) - len;
-            (void )node_str_head_pad(STR_(*np), rem, (UChar )0);
-            if (len + rem == enclen(env->enc, STR_(*np)->s)) {
-              NODE_STRING_CLEAR_RAW(*np);
-              goto string_end;
-            }
-          }
-#endif
+        if (r != TK_RAW_BYTE)
           return ONIGERR_TOO_SHORT_MULTI_BYTE_STRING;
-        }
 
         r = node_str_cat_char(*np, (UChar )tok->u.c);
         if (r < 0) return r;
 
         len++;
       }
+
+    tk_raw_byte_end:
+      if (! ONIGENC_IS_VALID_MBC_STRING(env->enc, STR_(*np)->s, STR_(*np)->end))
+        return ONIGERR_INVALID_WIDE_CHAR_VALUE;
+
+      NODE_STRING_CLEAR_RAW(*np);
+      goto string_end;
     }
     break;
 
   case TK_CODE_POINT:
     {
       UChar buf[ONIGENC_CODE_TO_MBC_MAXLEN];
-      int num = ONIGENC_CODE_TO_MBC(env->enc, tok->u.code, buf);
-      if (num < 0) return num;
+      len = ONIGENC_CODE_TO_MBC(env->enc, tok->u.code, buf);
+      if (len < 0) return len;
 #ifdef NUMBERED_CHAR_IS_NOT_CASE_AMBIG
-      *np = node_new_str_raw(buf, buf + num);
+      *np = node_new_str_raw(buf, buf + len);
 #else
-      *np = node_new_str(buf, buf + num);
+      *np = node_new_str(buf, buf + len);
 #endif
       CHECK_NULL_RETURN_MEMERR(*np);
     }
@@ -7982,7 +8088,7 @@ parse_exp(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
   case TK_ANYCHAR_ANYTIME:
     *np = node_new_anychar();
     CHECK_NULL_RETURN_MEMERR(*np);
-    qn = node_new_quantifier(0, REPEAT_INFINITE, 0);
+    qn = node_new_quantifier(0, INFINITE_REPEAT, 0);
     CHECK_NULL_RETURN_MEMERR(qn);
     NODE_BODY(qn) = *np;
     *np = qn;
@@ -8026,7 +8132,7 @@ parse_exp(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
     }
     break;
 
-  case TK_OP_REPEAT:
+  case TK_REPEAT:
   case TK_INTERVAL:
     if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS)) {
       if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS))
@@ -8061,8 +8167,8 @@ parse_exp(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
     if (r < 0) return r;
     break;
 
-  case TK_EXTENDED_GRAPHEME_CLUSTER:
-    r = make_extended_grapheme_cluster(np, env);
+  case TK_TEXT_SEGMENT:
+    r = make_text_segment(np, env);
     if (r < 0) return r;
     break;
 
@@ -8072,29 +8178,33 @@ parse_exp(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
   }
 
   {
-    targetp = np;
+    tp = np;
 
   re_entry:
     r = fetch_token(tok, src, end, env);
     if (r < 0) return r;
 
   repeat:
-    if (r == TK_OP_REPEAT || r == TK_INTERVAL) {
+    if (r == TK_REPEAT || r == TK_INTERVAL) {
       Node* target;
 
-      if (is_invalid_quantifier_target(*targetp))
+      if (is_invalid_quantifier_target(*tp))
         return ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID;
 
+      parse_depth++;
+      if (parse_depth > ParseDepthLimit)
+        return ONIGERR_PARSE_DEPTH_LIMIT_OVER;
+
       qn = node_new_quantifier(tok->u.repeat.lower, tok->u.repeat.upper,
                                r == TK_INTERVAL);
       CHECK_NULL_RETURN_MEMERR(qn);
       QUANT_(qn)->greedy = tok->u.repeat.greedy;
       if (group == 2) {
-        target = node_drop_group(*np);
-        *np = NULL_NODE;
+        target = node_drop_group(*tp);
+        *tp = NULL_NODE;
       }
       else {
-        target = *targetp;
+        target = *tp;
       }
       r = set_quantifier(qn, target, group, env);
       if (r < 0) {
@@ -8114,26 +8224,28 @@ parse_exp(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
       }
 
       if (r == 0) {
-        *targetp = qn;
+        *tp = qn;
       }
-      else if (r == 1) {
+      else if (r == 1) { /* x{1,1} ==> x */
         onig_node_free(qn);
+        *tp = target;
       }
       else if (r == 2) { /* split case: /abc+/ */
         Node *tmp;
 
-        *targetp = node_new_list(*targetp, NULL);
-        if (IS_NULL(*targetp)) {
+        *tp = node_new_list(*tp, NULL);
+        if (IS_NULL(*tp)) {
           onig_node_free(qn);
           return ONIGERR_MEMORY;
         }
-        tmp = NODE_CDR(*targetp) = node_new_list(qn, NULL);
+        tmp = NODE_CDR(*tp) = node_new_list(qn, NULL);
         if (IS_NULL(tmp)) {
           onig_node_free(qn);
           return ONIGERR_MEMORY;
         }
-        targetp = &(NODE_CAR(tmp));
+        tp = &(NODE_CAR(tmp));
       }
+      group = 0;
       goto re_entry;
     }
   }
@@ -8142,7 +8254,7 @@ parse_exp(Node** np, OnigToken* tok, int term, UChar** src, UChar* end,
 }
 
 static int
-parse_branch(Node** top, OnigToken* tok, int term, UChar** src, UChar* end,
+parse_branch(Node** top, PToken* tok, int term, UChar** src, UChar* end,
              ScanEnv* env, int group_head)
 {
   int r;
@@ -8190,7 +8302,7 @@ parse_branch(Node** top, OnigToken* tok, int term, UChar** src, UChar* end,
 
 /* term_tok: TK_EOT or TK_SUBEXP_CLOSE */
 static int
-parse_subexp(Node** top, OnigToken* tok, int term, UChar** src, UChar* end,
+parse_subexp(Node** top, PToken* tok, int term, UChar** src, UChar* end,
              ScanEnv* env, int group_head)
 {
   int r;
@@ -8256,7 +8368,7 @@ static int
 parse_regexp(Node** top, UChar** src, UChar* end, ScanEnv* env)
 {
   int r;
-  OnigToken tok;
+  PToken tok;
 
   r = fetch_token(&tok, src, end, env);
   if (r < 0) return r;
index ffbbee05e5a3529a855021654a7326e518e84765..51306f9f6a759165c968cc6945d847e5d111e78e 100644 (file)
@@ -4,7 +4,7 @@
   regparse.h -  Oniguruma (regular expression library)
 **********************************************************************/
 /*-
- * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2019  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -59,19 +59,18 @@ enum BagType {
 
 enum GimmickType {
   GIMMICK_FAIL       = 0,
-  GIMMICK_KEEP       = 1,
-  GIMMICK_SAVE       = 2,
-  GIMMICK_UPDATE_VAR = 3,
+  GIMMICK_SAVE       = 1,
+  GIMMICK_UPDATE_VAR = 2,
 #ifdef USE_CALLOUT
-  GIMMICK_CALLOUT    = 4,
+  GIMMICK_CALLOUT    = 3,
 #endif
 };
 
-enum QuantBodyEmpty {
-  QUANT_BODY_IS_NOT_EMPTY = 0,
-  QUANT_BODY_IS_EMPTY     = 1,
-  QUANT_BODY_IS_EMPTY_MEM = 2,
-  QUANT_BODY_IS_EMPTY_REC = 3
+enum BodyEmptyType {
+  BODY_IS_NOT_EMPTY             = 0,
+  BODY_IS_EMPTY_POSSIBILITY     = 1,
+  BODY_IS_EMPTY_POSSIBILITY_MEM = 2,
+  BODY_IS_EMPTY_POSSIBILITY_REC = 3
 };
 
 typedef struct {
@@ -102,7 +101,7 @@ typedef struct {
   int lower;
   int upper;
   int greedy;
-  enum QuantBodyEmpty body_empty_info;
+  enum BodyEmptyType emptiness;
   struct _Node* head_exact;
   struct _Node* next_head_exact;
   int is_refered;     /* include called node. don't eliminate even if {0} */
@@ -253,10 +252,6 @@ typedef struct _Node {
 #define NODE_BIT_CALL       NODE_TYPE2BIT(NODE_CALL)
 #define NODE_BIT_GIMMICK    NODE_TYPE2BIT(NODE_GIMMICK)
 
-#define NODE_IS_SIMPLE_TYPE(node) \
-  ((NODE_TYPE2BIT(NODE_TYPE(node)) & \
-    (NODE_BIT_STRING | NODE_BIT_CCLASS | NODE_BIT_CTYPE | NODE_BIT_BACKREF)) != 0)
-
 #define NODE_TYPE(node)             ((node)->u.base.node_type)
 #define NODE_SET_TYPE(node, ntype)   (node)->u.base.node_type = (ntype)
 
@@ -315,7 +310,7 @@ typedef struct _Node {
 #define NODE_ST_CLEN_FIXED            (1<<2)
 #define NODE_ST_MARK1                 (1<<3)
 #define NODE_ST_MARK2                 (1<<4)
-#define NODE_ST_STOP_BT_SIMPLE_REPEAT (1<<5)
+#define NODE_ST_STRICT_REAL_REPEAT    (1<<5)
 #define NODE_ST_RECURSION             (1<<6)
 #define NODE_ST_CALLED                (1<<7)
 #define NODE_ST_ADDR_FIXED            (1<<8)
@@ -358,8 +353,8 @@ typedef struct _Node {
 #define NODE_IS_SUPER(node)           ((NODE_STATUS(node) & NODE_ST_SUPER)        != 0)
 #define NODE_IS_PROHIBIT_RECURSION(node) \
     ((NODE_STATUS(node) & NODE_ST_PROHIBIT_RECURSION) != 0)
-#define NODE_IS_STOP_BT_SIMPLE_REPEAT(node) \
-    ((NODE_STATUS(node) & NODE_ST_STOP_BT_SIMPLE_REPEAT) != 0)
+#define NODE_IS_STRICT_REAL_REPEAT(node) \
+    ((NODE_STATUS(node) & NODE_ST_STRICT_REAL_REPEAT) != 0)
 
 #define NODE_BODY(node)           ((node)->u.base.body)
 #define NODE_QUANT_BODY(node)     ((node)->body)
index c640a8192cd58f71322828a0deed85492154e296..e38953116dd6bab84deb0d056e1a9e970f5c1175 100644 (file)
@@ -2,7 +2,7 @@
   regposerr.c - Oniguruma (regular expression library)
 **********************************************************************/
 /*-
- * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2019  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -80,7 +80,7 @@ static char* ESTRING[] = {
 
 extern size_t
 regerror(int posix_ecode, const regex_t* reg ARG_UNUSED, char* buf,
-        size_t size)
+         size_t size)
 {
   char* s;
   char tbuf[35];
index 895cf29817d076e64c0636038bfc6ac630884ba0..09e16ace8b8925a152c733b199b9b0b2c4ae92ec 100644 (file)
@@ -2,7 +2,7 @@
   regposix.c - Oniguruma (regular expression library)
 **********************************************************************/
 /*-
- * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2019  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -30,6 +30,7 @@
 #define regex_t   onig_regex_t
 #include "regint.h"
 #undef regex_t
+
 #include "onigposix.h"
 
 #define ONIG_C(reg)    ((onig_regex_t* )((reg)->onig))
@@ -148,6 +149,8 @@ regcomp(regex_t* reg, const char* pattern, int posix_options)
   OnigSyntaxType* syntax = OnigDefaultSyntax;
   OnigOptionType options;
 
+  reg->onig = (void* )0;
+
   if ((posix_options & REG_EXTENDED) == 0)
     syntax = ONIG_SYNTAX_POSIX_BASIC;
 
@@ -163,8 +166,8 @@ regcomp(regex_t* reg, const char* pattern, int posix_options)
 
   ENC_STRING_LEN(OnigEncDefaultCharEncoding, pattern, len);
   r = onig_new(PONIG_C(reg), (UChar* )pattern, (UChar* )(pattern + len),
-              options, OnigEncDefaultCharEncoding, syntax,
-              (OnigErrorInfo* )NULL);
+               options, OnigEncDefaultCharEncoding, syntax,
+               (OnigErrorInfo* )NULL);
   if (r != ONIG_NORMAL) {
     return onig2posix_error_code(r);
   }
@@ -175,7 +178,7 @@ regcomp(regex_t* reg, const char* pattern, int posix_options)
 
 extern int
 regexec(regex_t* reg, const char* str, size_t nmatch,
-       regmatch_t pmatch[], int posix_options)
+        regmatch_t pmatch[], int posix_options)
 {
   int r, i, len;
   UChar* end;
@@ -203,7 +206,7 @@ regexec(regex_t* reg, const char* str, size_t nmatch,
   ENC_STRING_LEN(ONIG_C(reg)->enc, str, len);
   end = (UChar* )(str + len);
   r = onig_search(ONIG_C(reg), (UChar* )str, end, (UChar* )str, end,
-                 (OnigRegion* )pm, options);
+                  (OnigRegion* )pm, options);
 
   if (r >= 0) {
     r = 0; /* Match */
@@ -235,6 +238,7 @@ extern void
 regfree(regex_t* reg)
 {
   onig_free(ONIG_C(reg));
+  reg->onig = (void* )0;
 }
 
 
@@ -288,7 +292,7 @@ typedef struct {
 
 static int
 i_wrapper(const UChar* name, const UChar* name_end, int ng, int* gs,
-         onig_regex_t* reg ARG_UNUSED, void* arg)
+          onig_regex_t* reg ARG_UNUSED, void* arg)
 {
   i_wrap* warg = (i_wrap* )arg;
 
index 98b815c5a052eff0d68472fc382322fd24219505..d4420ccf78c8c95aa4f3d8eef4dada078ff4b39a 100644 (file)
@@ -2,7 +2,7 @@
   regsyntax.c -  Oniguruma (regular expression library)
 **********************************************************************/
 /*-
- * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2019  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -174,11 +174,12 @@ OnigSyntaxType OnigSyntaxPerl = {
    & ~ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END )
   , ( ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE |
       ONIG_SYN_OP2_QMARK_GROUP_EFFECT | ONIG_SYN_OP2_OPTION_PERL |
+      ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT | ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL |
       ONIG_SYN_OP2_QMARK_LPAREN_IF_ELSE |
       ONIG_SYN_OP2_QMARK_TILDE_ABSENT_GROUP |
       ONIG_SYN_OP2_QMARK_BRACE_CALLOUT_CONTENTS |
       ONIG_SYN_OP2_ASTERISK_CALLOUT_NAME    |
-      ONIG_SYN_OP2_ESC_X_Y_GRAPHEME_CLUSTER |
+      ONIG_SYN_OP2_ESC_X_Y_TEXT_SEGMENT |
       ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY |
       ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT |
       ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP |
@@ -207,11 +208,12 @@ OnigSyntaxType OnigSyntaxPerl_NG = {
    & ~ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END )
   , ( ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE |
       ONIG_SYN_OP2_QMARK_GROUP_EFFECT | ONIG_SYN_OP2_OPTION_PERL |
+      ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT | ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL |
       ONIG_SYN_OP2_QMARK_LPAREN_IF_ELSE |
       ONIG_SYN_OP2_QMARK_TILDE_ABSENT_GROUP |
       ONIG_SYN_OP2_QMARK_BRACE_CALLOUT_CONTENTS |
       ONIG_SYN_OP2_ASTERISK_CALLOUT_NAME    |
-      ONIG_SYN_OP2_ESC_X_Y_GRAPHEME_CLUSTER |
+      ONIG_SYN_OP2_ESC_X_Y_TEXT_SEGMENT |
       ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY  |
       ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT |
       ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP       |
index aaf4cb8edbc8ab9e66b6248361301c1d8bd898de..4f90b726e6d7f59a7adeb9499da48571c5bdb216 100644 (file)
@@ -85,11 +85,11 @@ is_valid_mbc_string(const UChar* p, const UChar* end)
     }
     else if (*p < 0xa1) {
       if (*p == 0xa0 || *p == 0x80)
-       return FALSE;
+        return FALSE;
       p++;
       if (p >= end) return FALSE;
       if (*p < 0x40 || *p > 0xfc || *p == 0x7f)
-       return FALSE;
+        return FALSE;
       p++;
     }
     else if (*p < 0xe0) {
@@ -99,7 +99,7 @@ is_valid_mbc_string(const UChar* p, const UChar* end)
       p++;
       if (p >= end) return FALSE;
       if (*p < 0x40 || *p > 0xfc || *p == 0x7f)
-       return FALSE;
+        return FALSE;
       p++;
     }
     else
@@ -158,7 +158,7 @@ code_to_mbc(OnigCodePoint code, UChar *buf)
 
 static int
 mbc_case_fold(OnigCaseFoldType flag ARG_UNUSED,
-             const UChar** pp, const UChar* end ARG_UNUSED, UChar* lower)
+              const UChar** pp, const UChar* end ARG_UNUSED, UChar* lower)
 {
   const UChar* p = *pp;
 
@@ -181,8 +181,7 @@ mbc_case_fold(OnigCaseFoldType flag ARG_UNUSED,
 
 #if 0
 static int
-is_mbc_ambiguous(OnigCaseFoldType flag,
-                const UChar** pp, const UChar* end)
+is_mbc_ambiguous(OnigCaseFoldType flag, const UChar** pp, const UChar* end)
 {
   return onigenc_mbn_is_mbc_ambiguous(ONIG_ENCODING_SJIS, flag, pp, end);
 
@@ -217,8 +216,8 @@ left_adjust_char_head(const UChar* start, const UChar* s)
   if (SJIS_ISMB_TRAIL(*p)) {
     while (p > start) {
       if (! SJIS_ISMB_FIRST(*--p)) {
-       p++;
-       break;
+        p++;
+        break;
       }
     }
   }
@@ -281,7 +280,7 @@ is_code_ctype(OnigCodePoint code, unsigned int ctype)
       return ONIGENC_IS_ASCII_CODE_CTYPE(code, ctype);
     else {
       if (CTYPE_IS_WORD_GRAPH_PRINT(ctype)) {
-       return (code_to_mbclen(code) > 1 ? TRUE : FALSE);
+        return (code_to_mbclen(code) > 1 ? TRUE : FALSE);
       }
     }
   }
@@ -298,7 +297,7 @@ is_code_ctype(OnigCodePoint code, unsigned int ctype)
 
 static int
 get_ctype_code_range(OnigCtype ctype, OnigCodePoint* sb_out,
-                    const OnigCodePoint* ranges[])
+                     const OnigCodePoint* ranges[])
 {
   if (ctype <= ONIGENC_MAX_STD_CTYPE) {
     return ONIG_NO_SUPPORT_CONFIG;
index 0d0c68f7ba8d66baa9463cd3218d71378237fdbd..3a88a38a39f0094cbb9ef4b59191a976c2d93e10 100644 (file)
@@ -1,5 +1,5 @@
 /* ANSI-C code produced by gperf version 3.1 */
-/* Command-line: /usr/bin/gperf -pt -T -L ANSI-C -N onigenc_sjis_lookup_property_name --output-file gperf2.tmp sjis_prop.gperf  */
+/* Command-line: /usr/local/bin/gperf -pt -T -L ANSI-C -N onigenc_sjis_lookup_property_name --output-file gperf2.tmp sjis_prop.gperf  */
 /* Computed positions: -k'1,3' */
 
 #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
index 04944b9ea22a0b055a45c0abfa9235f129b52e15..5820319e870a720859f8f0f9fb3d6e6cc64c130a 100644 (file)
@@ -2,7 +2,7 @@
   unicode.c -  Oniguruma (regular expression library)
 **********************************************************************/
 /*-
- * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2019  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -504,6 +504,281 @@ onigenc_unicode_get_case_fold_codes_by_str(OnigEncoding enc,
 #endif
 
 
+#ifdef USE_UNICODE_WORD_BREAK
+
+enum WB_TYPE {
+  WB_Any = 0,
+  WB_ALetter,
+  WB_CR,
+  WB_Double_Quote,
+  WB_Extend,
+  WB_ExtendNumLet,
+  WB_Format,
+  WB_Hebrew_Letter,
+  WB_Katakana,
+  WB_LF,
+  WB_MidLetter,
+  WB_MidNum,
+  WB_MidNumLet,
+  WB_Newline,
+  WB_Numeric,
+  WB_Regional_Indicator,
+  WB_Single_Quote,
+  WB_WSegSpace,
+  WB_ZWJ,
+};
+
+typedef struct {
+  OnigCodePoint start;
+  OnigCodePoint end;
+  enum WB_TYPE  type;
+} WB_RANGE_TYPE;
+
+#include "unicode_wb_data.c"
+
+static enum WB_TYPE
+wb_get_type(OnigCodePoint code)
+{
+  OnigCodePoint low, high, x;
+  enum WB_TYPE type;
+
+  for (low = 0, high = (OnigCodePoint )WB_RANGE_NUM; low < high; ) {
+    x = (low + high) >> 1;
+    if (code > WB_RANGES[x].end)
+      low = x + 1;
+    else
+      high = x;
+  }
+
+  type = (low < (OnigCodePoint )WB_RANGE_NUM &&
+          code >= WB_RANGES[low].start) ?
+    WB_RANGES[low].type : WB_Any;
+
+  return type;
+}
+
+#define IS_WB_IGNORE_TAIL(t)  ((t) == WB_Extend || (t) == WB_Format || (t) == WB_ZWJ)
+#define IS_WB_AHLetter(t)     ((t) == WB_ALetter || (t) == WB_Hebrew_Letter)
+#define IS_WB_MidNumLetQ(t)   ((t) == WB_MidNumLet || (t) == WB_Single_Quote)
+
+static int
+wb_get_next_main_code(OnigEncoding enc, UChar* p, const UChar* end,
+                      OnigCodePoint* rcode, enum WB_TYPE* rtype)
+{
+  OnigCodePoint code;
+  enum WB_TYPE type;
+
+  while (TRUE) {
+    p += enclen(enc, p);
+    if (p >= end) break;
+
+    code = ONIGENC_MBC_TO_CODE(enc, p, end);
+    type = wb_get_type(code);
+    if (! IS_WB_IGNORE_TAIL(type)) {
+      *rcode = code;
+      *rtype = type;
+      return 1;
+    }
+  }
+
+  return 0;
+}
+
+extern int
+onigenc_wb_is_break_position(OnigEncoding enc, UChar* p, UChar* prev,
+                             const UChar* start, const UChar* end)
+{
+  int r;
+  UChar* pp;
+  OnigCodePoint cfrom;
+  OnigCodePoint cfrom2;
+  OnigCodePoint cto;
+  OnigCodePoint cto2;
+  enum WB_TYPE from;
+  enum WB_TYPE from2;
+  enum WB_TYPE to;
+  enum WB_TYPE to2;
+
+  /* WB1: sot / Any */
+  if (p == start) return TRUE;
+  /* WB2: Any / eot */
+  if (p == end)   return TRUE;
+
+  if (IS_NULL(prev)) {
+    prev = onigenc_get_prev_char_head(enc, start, p);
+    if (IS_NULL(prev)) return TRUE;
+  }
+
+  cfrom = ONIGENC_MBC_TO_CODE(enc, prev, end);
+  cto   = ONIGENC_MBC_TO_CODE(enc, p, end);
+
+  from = wb_get_type(cfrom);
+  to   = wb_get_type(cto);
+
+  /* short cut */
+  if (from == 0 && to == 0) goto WB999;
+
+  /* WB3: CR + LF */
+  if (from == WB_CR && to == WB_LF) return FALSE;
+
+  /* WB3a: (Newline|CR|LF) /  */
+  if (from == WB_Newline || from == WB_CR || from == WB_LF) return TRUE;
+  /* WB3b: / (Newline|CR|LF) */
+  if (to == WB_Newline || to == WB_CR || to == WB_LF) return TRUE;
+
+  /* WB3c: ZWJ + {Extended_Pictographic} */
+  if (from == WB_ZWJ) {
+    if (onigenc_unicode_is_code_ctype(cto, PROP_INDEX_EXTENDEDPICTOGRAPHIC))
+      return FALSE;
+  }
+
+  /* WB3d: WSegSpace + WSegSpace */
+  if (from == WB_WSegSpace && to == WB_WSegSpace) return FALSE;
+
+  /* WB4:  X (Extend|Format|ZWJ)* -> X */
+  if (IS_WB_IGNORE_TAIL(to)) return FALSE;
+  if (IS_WB_IGNORE_TAIL(from)) {
+    while ((pp = onigenc_get_prev_char_head(enc, start, prev)) != NULL) {
+      prev = pp;
+      cfrom = ONIGENC_MBC_TO_CODE(enc, prev, end);
+      from = wb_get_type(cfrom);
+      if (! IS_WB_IGNORE_TAIL(from))
+        break;
+    }
+  }
+
+  if (IS_WB_AHLetter(from)) {
+    /* WB5: AHLetter + AHLetter */
+    if (IS_WB_AHLetter(to)) return FALSE;
+
+    /* WB6: AHLetter + (MidLetter | MidNumLetQ) AHLetter */
+    if (to == WB_MidLetter || IS_WB_MidNumLetQ(to)) {
+      r = wb_get_next_main_code(enc, p, end, &cto2, &to2);
+      if (r == 1) {
+        if (IS_WB_AHLetter(to2)) return FALSE;
+      }
+    }
+  }
+
+  /* WB7: AHLetter (MidLetter | MidNumLetQ) + AHLetter */
+  if (from == WB_MidLetter || IS_WB_MidNumLetQ(from)) {
+    if (IS_WB_AHLetter(to)) {
+      from2 = WB_Any;
+      while ((pp = onigenc_get_prev_char_head(enc, start, prev)) != NULL) {
+        prev = pp;
+        cfrom2 = ONIGENC_MBC_TO_CODE(enc, prev, end);
+        from2 = wb_get_type(cfrom2);
+        if (! IS_WB_IGNORE_TAIL(from2))
+          break;
+      }
+
+      if (IS_WB_AHLetter(from2)) return FALSE;
+    }
+  }
+
+  if (from == WB_Hebrew_Letter) {
+    /* WB7a: Hebrew_Letter + Single_Quote */
+    if (to == WB_Single_Quote) return FALSE;
+
+    /* WB7b: Hebrew_Letter + Double_Quote Hebrew_Letter */
+    if (to == WB_Double_Quote) {
+      r = wb_get_next_main_code(enc, p, end, &cto2, &to2);
+      if (r == 1) {
+        if (to2 == WB_Hebrew_Letter) return FALSE;
+      }
+    }
+  }
+
+  /* WB7c: Hebrew_Letter Double_Quote + Hebrew_Letter */
+  if (from == WB_Double_Quote) {
+    if (to == WB_Hebrew_Letter) {
+      from2 = WB_Any;
+      while ((pp = onigenc_get_prev_char_head(enc, start, prev)) != NULL) {
+        prev = pp;
+        cfrom2 = ONIGENC_MBC_TO_CODE(enc, prev, end);
+        from2 = wb_get_type(cfrom2);
+        if (! IS_WB_IGNORE_TAIL(from2))
+          break;
+      }
+
+      if (from2 == WB_Hebrew_Letter) return FALSE;
+    }
+  }
+
+  if (to == WB_Numeric) {
+    /* WB8: Numeric + Numeric */
+    if (from == WB_Numeric) return FALSE;
+
+    /* WB9: AHLetter + Numeric */
+    if (IS_WB_AHLetter(from)) return FALSE;
+
+    /* WB11: Numeric (MidNum | MidNumLetQ) + Numeric */
+    if (from == WB_MidNum || IS_WB_MidNumLetQ(from)) {
+      from2 = WB_Any;
+      while ((pp = onigenc_get_prev_char_head(enc, start, prev)) != NULL) {
+        prev = pp;
+        cfrom2 = ONIGENC_MBC_TO_CODE(enc, prev, end);
+        from2 = wb_get_type(cfrom2);
+        if (! IS_WB_IGNORE_TAIL(from2))
+          break;
+      }
+
+      if (from2 == WB_Numeric) return FALSE;
+    }
+  }
+
+  if (from == WB_Numeric) {
+    /* WB10: Numeric + AHLetter */
+    if (IS_WB_AHLetter(to)) return FALSE;
+
+    /* WB12: Numeric + (MidNum | MidNumLetQ) Numeric */
+    if (to == WB_MidNum || IS_WB_MidNumLetQ(to)) {
+      r = wb_get_next_main_code(enc, p, end, &cto2, &to2);
+      if (r == 1) {
+        if (to2 == WB_Numeric) return FALSE;
+      }
+    }
+  }
+
+  /* WB13: Katakana + Katakana */
+  if (from == WB_Katakana && to == WB_Katakana) return FALSE;
+
+  /* WB13a: (AHLetter | Numeric | Katakana | ExtendNumLet) + ExtendNumLet */
+  if (IS_WB_AHLetter(from) || from == WB_Numeric || from == WB_Katakana
+      || from == WB_ExtendNumLet) {
+    if (to == WB_ExtendNumLet) return FALSE;
+  }
+
+  /* WB13b: ExtendNumLet + (AHLetter | Numeric | Katakana) */
+  if (from == WB_ExtendNumLet) {
+    if (IS_WB_AHLetter(to) || to == WB_Numeric || to == WB_Katakana)
+      return FALSE;
+  }
+
+
+  /* WB15:   sot (RI RI)* RI + RI */
+  /* WB16: [^RI] (RI RI)* RI + RI */
+  if (from == WB_Regional_Indicator && to == WB_Regional_Indicator) {
+    int n = 0;
+    while ((prev = onigenc_get_prev_char_head(enc, start, prev)) != NULL) {
+      cfrom2 = ONIGENC_MBC_TO_CODE(enc, prev, end);
+      from2  = wb_get_type(cfrom2);
+      if (from2 != WB_Regional_Indicator)
+        break;
+
+      n++;
+    }
+    if ((n % 2) == 0) return FALSE;
+  }
+
+ WB999:
+  /* WB999: Any / Any */
+  return TRUE;
+}
+
+#endif /* USE_UNICODE_WORD_BREAK */
+
+
 #ifdef USE_UNICODE_EXTENDED_GRAPHEME_CLUSTER
 
 enum EGCB_BREAK_TYPE {
index fcb2daa394bb29985262b09c2117cd95e10e62a5..6a74c774f29586c0afd393124e510d1ae51aaffd 100644 (file)
@@ -25,7 +25,7 @@
  * SUCH DAMAGE.
  */
 
-#define GRAPHEME_BREAK_PROPERTY_VERSION  11_0_0
+#define GRAPHEME_BREAK_PROPERTY_VERSION  12_1_0
 
 /*
 CR
@@ -43,7 +43,7 @@ V
 ZWJ
 */
 
-static int EGCB_RANGE_NUM = 1321;
+static int EGCB_RANGE_NUM = 1326;
 static EGCB_RANGE_TYPE EGCB_RANGES[] = {
  {0x000000, 0x000009, EGCB_Control },
  {0x00000a, 0x00000a, EGCB_LF },
@@ -197,8 +197,7 @@ static EGCB_RANGE_TYPE EGCB_RANGES[] = {
  {0x000e47, 0x000e4e, EGCB_Extend },
  {0x000eb1, 0x000eb1, EGCB_Extend },
  {0x000eb3, 0x000eb3, EGCB_SpacingMark },
- {0x000eb4, 0x000eb9, EGCB_Extend },
- {0x000ebb, 0x000ebc, EGCB_Extend },
+ {0x000eb4, 0x000ebc, EGCB_Extend },
  {0x000ec8, 0x000ecd, EGCB_Extend },
  {0x000f18, 0x000f19, EGCB_Extend },
  {0x000f35, 0x000f35, EGCB_Extend },
@@ -271,9 +270,7 @@ static EGCB_RANGE_TYPE EGCB_RANGES[] = {
  {0x001ab0, 0x001abe, EGCB_Extend },
  {0x001b00, 0x001b03, EGCB_Extend },
  {0x001b04, 0x001b04, EGCB_SpacingMark },
- {0x001b34, 0x001b34, EGCB_Extend },
- {0x001b35, 0x001b35, EGCB_SpacingMark },
- {0x001b36, 0x001b3a, EGCB_Extend },
+ {0x001b34, 0x001b3a, EGCB_Extend },
  {0x001b3b, 0x001b3b, EGCB_SpacingMark },
  {0x001b3c, 0x001b3c, EGCB_Extend },
  {0x001b3d, 0x001b41, EGCB_SpacingMark },
@@ -305,7 +302,6 @@ static EGCB_RANGE_TYPE EGCB_RANGES[] = {
  {0x001ce1, 0x001ce1, EGCB_SpacingMark },
  {0x001ce2, 0x001ce8, EGCB_Extend },
  {0x001ced, 0x001ced, EGCB_Extend },
- {0x001cf2, 0x001cf3, EGCB_SpacingMark },
  {0x001cf4, 0x001cf4, EGCB_Extend },
  {0x001cf7, 0x001cf7, EGCB_SpacingMark },
  {0x001cf8, 0x001cf9, EGCB_Extend },
@@ -348,8 +344,8 @@ static EGCB_RANGE_TYPE EGCB_RANGES[] = {
  {0x00a9b4, 0x00a9b5, EGCB_SpacingMark },
  {0x00a9b6, 0x00a9b9, EGCB_Extend },
  {0x00a9ba, 0x00a9bb, EGCB_SpacingMark },
- {0x00a9bc, 0x00a9bc, EGCB_Extend },
- {0x00a9bd, 0x00a9c0, EGCB_SpacingMark },
+ {0x00a9bc, 0x00a9bd, EGCB_Extend },
+ {0x00a9be, 0x00a9c0, EGCB_SpacingMark },
  {0x00a9e5, 0x00a9e5, EGCB_Extend },
  {0x00aa29, 0x00aa2e, EGCB_Extend },
  {0x00aa2f, 0x00aa30, EGCB_SpacingMark },
@@ -1177,7 +1173,6 @@ static EGCB_RANGE_TYPE EGCB_RANGES[] = {
  {0x00d789, 0x00d7a3, EGCB_LVT },
  {0x00d7b0, 0x00d7c6, EGCB_V },
  {0x00d7cb, 0x00d7fb, EGCB_T },
- {0x00d800, 0x00dfff, EGCB_Control },
  {0x00fb1e, 0x00fb1e, EGCB_Extend },
  {0x00fe00, 0x00fe0f, EGCB_Extend },
  {0x00fe20, 0x00fe2f, EGCB_Extend },
@@ -1291,6 +1286,12 @@ static EGCB_RANGE_TYPE EGCB_RANGES[] = {
  {0x01182f, 0x011837, EGCB_Extend },
  {0x011838, 0x011838, EGCB_SpacingMark },
  {0x011839, 0x01183a, EGCB_Extend },
+ {0x0119d1, 0x0119d3, EGCB_SpacingMark },
+ {0x0119d4, 0x0119d7, EGCB_Extend },
+ {0x0119da, 0x0119db, EGCB_Extend },
+ {0x0119dc, 0x0119df, EGCB_SpacingMark },
+ {0x0119e0, 0x0119e0, EGCB_Extend },
+ {0x0119e4, 0x0119e4, EGCB_SpacingMark },
  {0x011a01, 0x011a0a, EGCB_Extend },
  {0x011a33, 0x011a38, EGCB_Extend },
  {0x011a39, 0x011a39, EGCB_SpacingMark },
@@ -1300,7 +1301,7 @@ static EGCB_RANGE_TYPE EGCB_RANGES[] = {
  {0x011a51, 0x011a56, EGCB_Extend },
  {0x011a57, 0x011a58, EGCB_SpacingMark },
  {0x011a59, 0x011a5b, EGCB_Extend },
- {0x011a86, 0x011a89, EGCB_Prepend },
+ {0x011a84, 0x011a89, EGCB_Prepend },
  {0x011a8a, 0x011a96, EGCB_Extend },
  {0x011a97, 0x011a97, EGCB_SpacingMark },
  {0x011a98, 0x011a99, EGCB_Extend },
@@ -1330,9 +1331,11 @@ static EGCB_RANGE_TYPE EGCB_RANGES[] = {
  {0x011d97, 0x011d97, EGCB_Extend },
  {0x011ef3, 0x011ef4, EGCB_Extend },
  {0x011ef5, 0x011ef6, EGCB_SpacingMark },
+ {0x013430, 0x013438, EGCB_Control },
  {0x016af0, 0x016af4, EGCB_Extend },
  {0x016b30, 0x016b36, EGCB_Extend },
- {0x016f51, 0x016f7e, EGCB_SpacingMark },
+ {0x016f4f, 0x016f4f, EGCB_Extend },
+ {0x016f51, 0x016f87, EGCB_SpacingMark },
  {0x016f8f, 0x016f92, EGCB_Extend },
  {0x01bc9d, 0x01bc9e, EGCB_Extend },
  {0x01bca0, 0x01bca3, EGCB_Control },
@@ -1357,6 +1360,8 @@ static EGCB_RANGE_TYPE EGCB_RANGES[] = {
  {0x01e01b, 0x01e021, EGCB_Extend },
  {0x01e023, 0x01e024, EGCB_Extend },
  {0x01e026, 0x01e02a, EGCB_Extend },
+ {0x01e130, 0x01e136, EGCB_Extend },
+ {0x01e2ec, 0x01e2ef, EGCB_Extend },
  {0x01e8d0, 0x01e8d6, EGCB_Extend },
  {0x01e944, 0x01e94a, EGCB_Extend },
  {0x01f1e6, 0x01f1ff, EGCB_Regional_Indicator },
index 07916b4ed3163dcc0b4a6c8ae8dd4669411ac238..b84b528bc19dc25cdff1adaf223b3cd405d0f9ed 100644 (file)
@@ -1,7 +1,7 @@
 /* This file was converted by gperf_fold_key_conv.py
       from gperf output file. */
 /* ANSI-C code produced by gperf version 3.1 */
-/* Command-line: /usr/bin/gperf -n -C -T -c -t -j1 -L ANSI-C -F,-1 -N onigenc_unicode_fold1_key unicode_fold1_key.gperf  */
+/* Command-line: /usr/local/bin/gperf -n -C -T -c -t -j1 -L ANSI-C -F,-1 -N onigenc_unicode_fold1_key unicode_fold1_key.gperf  */
 /* Computed positions: -k'1-3' */
 
 
 #include <string.h>
 #include "regenc.h"
 
-#define TOTAL_KEYWORDS 1346
+#define TOTAL_KEYWORDS 1353
 #define MIN_WORD_LENGTH 3
 #define MAX_WORD_LENGTH 3
 #define MIN_HASH_VALUE 3
-#define MAX_HASH_VALUE 1765
-/* maximum key range = 1763, duplicates = 0 */
+#define MAX_HASH_VALUE 1791
+/* maximum key range = 1789, duplicates = 0 */
 
 #ifdef __GNUC__
 __inline
@@ -56,32 +56,32 @@ hash(OnigCodePoint codes[])
 {
   static const unsigned short asso_values[] =
     {
-         4,    2,  147,   16,    1,   13, 1233,  682, 1225,  643,
-      1208,   95,    9,   89, 1391,   82,    8,   80, 1383,    6,
-      1201,  638, 1191,  602,  151,   75, 1377,   68, 1374,  464,
-         0,   11, 1369,    3, 1352,  278,   23,  424,  660,  320,
-       640,   20,  635,   34,    5,   29,  860,   27,  630,    0,
-       854, 1352,  870, 1336,  470, 1322,  623, 1319,  610,  230,
-      1184, 1309, 1159,  779, 1042,  980,  836,  844,  456,  597,
-       285,  158,  590,  477,  583,   42,  576, 1442,  447, 1119,
-       440,  922,  426, 1434,  400, 1433,  327, 1428,  567, 1417,
-       386, 1443,  458,  856,  704, 1435, 1010,   66,  232,  413,
-       204, 1417,  226, 1412,  190, 1095,  379, 1253,  198, 1211,
-       175,  209,  561,  362,  528, 1296,  257, 1169,  240, 1291,
-       508, 1163,  484, 1228,  699,  735,  831,  488,  679,  513,
-       420,  639, 1148,   83,  683,  806, 1152,   77, 1170,  537,
-      1213,    3, 1285,  166, 1410, 1766, 1394, 1766, 1206,  460,
-       757, 1766,  367, 1766, 1339, 1766,  908,   57, 1321, 1766,
-       384,  345,  686,   52, 1145,   40,  218,  180, 1135,   33,
-      1292,  276, 1282,   14, 1408,  719, 1128,  701, 1275,  129,
-      1116,  610, 1255, 1343, 1109,  874, 1097,  448,  823,  346,
-       877,  181, 1089,    0, 1077,  786, 1080,  768, 1068, 1180,
-      1060, 1056, 1048,  798,  811,  177, 1045, 1022, 1030,  993,
-      1020,  789,  353,  990,  548,  982,  517,  970,  334,  765,
-       166,  753,  138,  743,  100,  963,   87,  720,   49,  957,
-        75,  951,   62,  411,  126,  945,  113, 1266,  317,  935,
-       304,  925,  293, 1244,  714,  912,  275,  490,  263,  469,
-       395, 1297,  896,  208,  887,   80,  542,   11,  246
+         4,    2,  147,   16,    1,   13, 1228,  725, 1224,  638,
+      1204,   95,    9,   82, 1403,   80,    8,   68, 1391,    6,
+      1203,  602, 1200,  320,  151,   67, 1385,   61, 1384,  158,
+         0,   11, 1252,    3,  733,  278,   23,  425,  660,  424,
+       640,   20,  635,  105,    5,   29,  916,   34,  630,    0,
+       906, 1378,  899, 1377,  470, 1363,  623,  902,  610,  230,
+      1193, 1358, 1190,  779,  986, 1336,  890,  883,  456,  597,
+       285,  158,  590,  477,  583,   42,  576, 1447,  447, 1440,
+       440, 1353,  426, 1429,  400, 1417,  327, 1407,  567, 1389,
+       386, 1207,  458,  724,  854,  979, 1016,   66,  232,  413,
+       204, 1431,  226, 1317,  190, 1167,  379, 1319,  198, 1270,
+       175,  209,  561,  362,  528, 1323,  257, 1099,  240, 1309,
+       508, 1172,  484, 1306,  699,  865,  850,  488,  679,  755,
+       420,  639, 1149,  105,  691,  789, 1125,   46,  809,  652,
+      1293,    3, 1262,  166, 1426,    0, 1424, 1792, 1220,  460,
+       706,    1,  367, 1792, 1341, 1792, 1151,   56, 1235, 1792,
+       384,  345,  965,   40, 1168,   33,  218,  180, 1159,   20,
+      1296,  276, 1243,   14, 1401,  777, 1142,  682, 1284,  129,
+      1135,  610, 1181,  871, 1123,  858, 1042,  510,  842,  499,
+       999,  346,  830,    0,  823, 1288, 1115,  768,  732, 1272,
+      1101, 1098, 1082, 1270,  811,  177, 1078, 1074, 1061, 1058,
+      1050,  789,  353, 1018,  548, 1006,  517,  988,  334,  765,
+       166,  753,  138,  743,  100,  969,   87,  720,   49,  975,
+        75,  965,   62,  411,  126,  955,  113, 1262,  317,  943,
+       304,  679,  293, 1252,  714,  937,  275,  490,  263,  469,
+       395, 1345,  931,  208,  921,   80,  542,   11,  246
     };
   return asso_values[(unsigned char)onig_codes_byte_at(codes, 2)+3] + asso_values[(unsigned char)onig_codes_byte_at(codes, 1)] + asso_values[(unsigned char)onig_codes_byte_at(codes, 0)];
 }
@@ -93,549 +93,550 @@ onigenc_unicode_fold1_key(OnigCodePoint codes[])
     {
       -1, -1, -1,
 
-      3408,
+      3429,
 
-      1900,
+      1906,
 
-      1861,
+      1867,
 
       210,
 
       171,
 
-      3393,
+      3414,
 
-      1921,
+      1927,
 
-      1687,
+      1690,
 
       231,
 
-      1879,
+      1885,
 
-      1873,
+      1879,
 
       189,
 
       183,
 
-      2234,
+      2240,
 
-      1312,
+      1315,
 
-      1273,
+      1276,
 
       165,
 
-      789,
+      792,
 
-      2255,
+      2261,
 
-      1333,
+      1336,
 
-      1591,
+      1594,
 
-      1627,
+      1630,
 
-      1291,
+      1294,
 
-      1285,
+      1288,
 
-      1909,
+      1915,
 
-      2237,
+      2243,
 
       219,
 
-      3402,
+      1618,
 
-      2231,
+      2237,
 
-      3396,
+      3417,
 
-      2975,
+      2981,
 
-      2897,
+      2903,
 
-      2291,
+      2297,
 
-      2984,
+      2990,
 
-      3390,
+      3423,
 
-      2276,
+      2282,
 
-      2942,
+      2948,
 
-      1321,
+      1324,
 
-      2933,
+      2939,
 
-      2921,
+      2927,
 
-      1615,
+      1606,
 
-      2978,
+      2984,
 
-      3486,
+      3507,
 
-      2900,
+      2906,
 
-      971,
+      974,
 
       273,
 
-      2894,
+      2900,
 
-      1603,
+      1600,
 
-      2642,
+      2648,
 
-      3537,
+      3558,
 
-      2183,
+      2189,
 
-      1225,
+      1228,
 
       459,
 
-      2993,
+      2999,
 
       80,
 
-      2879,
-
-      1792,
+      2885,
 
-      3717,
+      1795,
 
-      1510,
+      3738,
 
-      1597,
+      1513,
 
       378,
 
-      2432,
+      1459,
 
-      3549,
+      2438,
 
-      2189,
+      3570,
 
-      1231,
+      2195,
+
+      1234,
 
       465,
 
-      857,
+      860,
 
       92,
 
-      1038,
+      1041,
 
-      1804,
+      1807,
 
-      3729,
+      3750,
 
-      1522,
+      1525,
 
-      2708,
+      2714,
 
-      2543,
+      2549,
 
-      2435,
+      2441,
 
-      3543,
+      3564,
 
-      2186,
+      2192,
 
-      1228,
+      1231,
 
       462,
 
-      863,
+      866,
 
       86,
 
-      2882,
+      2888,
 
-      1798,
+      1801,
 
-      3723,
+      3744,
 
-      1516,
+      1519,
 
       159,
 
-      2555,
+      2561,
 
-      3531,
+      3552,
 
-      2180,
+      2186,
 
-      1222,
+      1225,
 
       456,
 
-      1456,
-
-      860,
+      2972,
 
-      2876,
+      863,
 
-      1786,
+      2882,
 
-      3711,
+      1789,
 
-      1504,
+      3732,
 
-      1444,
+      1507,
 
       2966,
 
-      2549,
+      2942,
 
-      3525,
+      2555,
 
-      2177,
+      3546,
 
-      1219,
+      2183,
+
+      1222,
 
       453,
 
-      854,
+      857,
 
-      2960,
+      3411,
 
-      2873,
+      2879,
 
-      1780,
+      1783,
 
-      3705,
+      3726,
 
-      1498,
+      1501,
 
       2936,
 
-      2537,
+      2543,
 
       2930,
 
-      3561,
+      3582,
 
-      2195,
+      2201,
 
-      1237,
+      1240,
 
       471,
 
-      851,
+      854,
 
       105,
 
-      2924,
+      1447,
 
-      1816,
+      1819,
 
-      3741,
+      3762,
 
-      1534,
+      1537,
 
-      3333,
+      3354,
 
-      2531,
+      2537,
 
-      2918,
+      2924,
 
-      3555,
+      3576,
 
-      2192,
+      2198,
 
-      1234,
+      1237,
 
       468,
 
-      869,
+      872,
 
       99,
 
       399,
 
-      1810,
+      1813,
 
-      3735,
+      3756,
 
-      1528,
+      1531,
 
-      1645,
+      1648,
 
-      2567,
+      2573,
 
-      3519,
+      3540,
 
-      2174,
+      2180,
 
-      1216,
+      1219,
 
-      2417,
+      2423,
       -1,
 
-      866,
+      869,
 
-      2870,
+      2876,
 
-      1774,
+      1777,
 
-      3699,
+      3720,
 
-      1492,
+      1495,
 
       541,
 
       502,
 
-      2561,
+      2567,
 
-      694,
+      697,
 
-      1891,
+      1897,
 
       559,
 
       201,
 
-      848,
+      851,
 
       520,
 
       514,
 
-      3474,
-      -1,
+      3495,
 
-      959,
+      1864,
+
+      962,
 
       267,
 
-      2525,
+      2531,
 
-      2270,
+      2276,
 
-      2630,
+      2636,
 
-      1303,
+      1306,
 
-      3513,
+      3534,
 
-      2171,
+      2177,
 
-      1213,
+      1216,
 
       366,
 
-      2333,
+      2339,
       -1,
 
-      2867,
+      2873,
 
-      1768,
+      1771,
 
-      3693,
+      3714,
 
-      1486,
+      1489,
 
-      2021,
+      2027,
 
-      1060,
+      1063,
 
       324,
 
-      1189,
+      1192,
 
       27,
 
-      2957,
-      -1,
+      2963,
 
-      845,
+      3276,
 
-      1723,
+      848,
 
-      3648,
+      1726,
 
-      3135,
+      3669,
 
-      1609,
+      3141,
 
-      1681,
+      1612,
 
-      1375,
+      2978,
 
-      2519,
+      1378,
+
+      2525,
 
-      2012,
+      2018,
 
-      1051,
+      1054,
 
       315,
 
-      827,
+      830,
 
       12,
 
-      2714,
-      -1,
-
-      782,
+      2720,
+      -1, -1,
 
-      2018,
+      2024,
 
-      1057,
+      1060,
 
       321,
 
-      2366,
+      2372,
 
-      4065,
+      4086,
 
-      1357,
+      1360,
 
-      2005,
+      2011,
 
-      1044,
+      1047,
 
       309,
 
-      3612,
+      3633,
 
       0,
 
-      2711,
+      2717,
       -1,
 
-      1369,
+      1372,
 
       153,
 
       31,
 
-      2726,
+      2732,
 
-      2354,
+      2360,
 
-      1585,
+      1588,
 
-      1345,
+      1348,
 
-      2090,
+      2096,
 
-      1132,
+      1135,
 
       387,
       -1,
 
-      1378,
+      1381,
 
-      2786,
+      2792,
 
-      1606,
+      1609,
       -1,
 
-      2009,
+      2015,
 
-      1047,
+      1050,
 
       312,
 
-      3438,
+      3459,
 
       6,
 
-      919,
+      922,
 
-      2002,
+      2008,
 
-      1041,
+      1044,
 
       306,
 
-      2594,
+      2600,
 
-      3864,
+      3885,
 
-      2360,
+      2366,
 
-      3321,
+      3342,
 
-      1351,
+      1354,
 
-      2033,
+      2039,
 
-      1072,
+      1075,
 
       336,
 
-      2450,
+      2456,
 
       52,
 
-      2729,
+      2735,
 
-      2228,
+      2234,
 
-      1270,
+      1273,
 
       499,
 
-      3858,
+      3879,
 
       168,
 
-      2384,
-      -1,
+      2390,
 
-      1399,
+      682,
 
-      1594,
+      1402,
+
+      1597,
       -1,
 
-      715,
+      718,
 
-      2030,
+      2036,
 
-      1069,
+      1072,
 
       333,
 
-      2444,
+      2450,
 
       46,
 
-      3597,
+      3618,
 
-      2213,
+      2219,
 
-      1255,
+      1258,
 
       487,
       -1,
 
       141,
 
-      2378,
+      2384,
 
-      1852,
+      1855,
 
-      1393,
+      1396,
 
-      1570,
+      1573,
       -1,
 
-      712,
+      715,
 
-      3591,
+      3612,
 
-      2210,
+      2216,
 
-      1252,
+      1255,
 
       483,
 
@@ -643,377 +644,376 @@ onigenc_unicode_fold1_key(OnigCodePoint codes[])
 
       135,
 
-      2891,
+      2897,
 
-      1846,
+      1849,
 
-      1621,
+      1624,
 
-      1564,
+      1567,
 
-      3471,
+      3492,
 
-      1960,
+      1966,
 
-      956,
+      959,
 
-      3852,
+      3873,
       -1,
 
-      2273,
+      2279,
 
-      2627,
+      2633,
 
-      884,
+      887,
 
-      3579,
+      3600,
 
-      2204,
+      2210,
 
-      1246,
+      1249,
 
       480,
 
-      2330,
+      2336,
 
       123,
 
       532,
 
-      1834,
+      1837,
 
-      3759,
+      3780,
 
-      1552,
+      1555,
       -1,
 
-      3573,
+      3594,
 
-      2201,
+      2207,
 
-      1243,
+      1246,
 
       477,
 
-      2990,
+      2996,
 
       117,
 
-      878,
+      881,
 
-      1828,
+      1831,
 
-      3753,
+      3774,
 
-      1546,
+      1549,
 
-      700,
+      703,
       -1,
 
-      3846,
+      3867,
 
-      3567,
+      3588,
 
-      2198,
+      2204,
 
-      1240,
+      1243,
 
       474,
 
-      875,
+      878,
 
       111,
 
       658,
 
-      1822,
+      1825,
 
-      3747,
+      3768,
 
-      1540,
+      1543,
 
-      3801,
+      3822,
 
-      1984,
+      1990,
 
-      1005,
+      1008,
 
       288,
       -1,
 
-      2285,
+      2273,
 
-      2675,
+      2681,
 
-      872,
+      875,
 
-      2168,
+      2174,
 
-      1210,
+      1213,
       -1,
 
       643,
 
-      2342,
+      2348,
 
-      2864,
+      2870,
 
-      1762,
+      1765,
 
-      3687,
+      3708,
 
-      1480,
+      1483,
       -1, -1,
 
       652,
 
-      3261,
+      3267,
 
       381,
 
-      3900,
+      3921,
 
-      3002,
+      2960,
 
-      842,
+      845,
 
       637,
 
-      1675,
+      1684,
 
-      2159,
+      2165,
 
-      1201,
+      1204,
 
-      3231,
+      3237,
 
       661,
 
-      2513,
+      2519,
 
-      2855,
+      2861,
 
-      1744,
+      1747,
 
-      3669,
+      3690,
 
-      1462,
+      1465,
 
-      775,
+      785,
 
-      3882,
+      3903,
 
-      2426,
+      2432,
 
-      3318,
+      3339,
 
       37,
 
-      2084,
+      2090,
 
-      1111,
+      1114,
 
       372,
 
-      3222,
+      3228,
 
-      3894,
+      3915,
 
-      2765,
+      2771,
 
       640,
       -1,
 
-      1384,
+      1387,
 
-      2495,
+      2501,
 
-      3870,
+      3891,
 
-      3228,
+      3234,
 
-      2015,
+      2021,
 
-      1054,
+      1057,
 
       318,
 
-      3903,
+      3924,
 
       18,
 
-      3216,
+      3222,
 
-      1123,
+      1126,
 
-      1990,
+      1996,
 
-      1017,
+      1020,
 
       294,
 
-      2777,
+      2783,
 
-      2372,
+      2378,
 
-      2687,
+      2693,
 
-      1363,
+      1366,
 
-      3078,
+      3084,
 
-      3603,
+      3624,
 
-      2216,
+      2222,
 
-      1258,
+      1261,
 
-      2348,
+      2354,
 
-      3288,
+      3297,
 
-      3876,
+      3897,
 
-      1981,
+      1987,
 
-      999,
+      1002,
 
       285,
 
-      1576,
+      1579,
 
       667,
 
-      2669,
+      2675,
 
-      3219,
+      3225,
 
-      3366,
+      3387,
 
-      3069,
+      3075,
 
-      3999,
+      4020,
 
-      3552,
+      3573,
 
-      2339,
+      2345,
 
-      3213,
+      3219,
 
-      3924,
+      3945,
 
-      3984,
+      4005,
 
       96,
 
-      3075,
+      3081,
 
-      1807,
+      1810,
 
-      3732,
+      3753,
 
-      1525,
+      1528,
 
-      2051,
+      2057,
 
-      1090,
+      1093,
 
-      3063,
+      3069,
 
-      2486,
+      2492,
 
-      2351,
+      2357,
 
-      3507,
+      3528,
 
-      1978,
+      1984,
 
-      993,
+      996,
 
       282,
 
-      3975,
+      3996,
 
-      3918,
+      3939,
 
-      2663,
+      2669,
       -1,
 
-      1435,
+      1438,
 
-      2558,
+      2564,
 
-      2279,
+      2291,
 
-      3993,
+      2285,
       -1,
 
-      3987,
+      4008,
 
-      3501,
+      3522,
 
-      1975,
+      1981,
 
-      987,
+      990,
 
       279,
 
-      3981,
+      4014,
 
-      3066,
+      3072,
 
-      2657,
+      2663,
 
-      3495,
+      3516,
 
-      1972,
+      1978,
 
-      981,
+      984,
 
       276,
 
-      3060,
+      3066,
       -1,
 
-      2651,
+      2657,
 
-      2996,
+      3008,
 
-      1669,
+      3002,
 
-      3465,
+      3486,
 
-      1957,
+      1963,
 
-      947,
+      950,
 
-      1993,
+      1999,
 
-      1023,
+      1026,
 
       297,
 
-      2621,
+      2627,
 
       369,
 
-      2693,
-
-      765,
+      2699,
+      -1,
 
-      3171,
+      3177,
 
-      3378,
+      3399,
 
-      2324,
+      2330,
 
-      3600,
+      3621,
 
-      3423,
+      3444,
 
-      1936,
+      1942,
 
-      903,
+      906,
 
       243,
 
@@ -1021,1923 +1021,1931 @@ onigenc_unicode_fold1_key(OnigCodePoint codes[])
 
       613,
 
-      2579,
+      2585,
 
-      3480,
+      3501,
 
-      1573,
+      1576,
 
-      965,
+      968,
 
       270,
 
-      3360,
+      3381,
 
-      2306,
+      2312,
 
-      2636,
+      2642,
 
-      3840,
+      3861,
 
-      2039,
+      2045,
 
-      1078,
+      1081,
 
       342,
 
-      2462,
+      2468,
 
       65,
 
-      3594,
+      3615,
 
       348,
 
-      2477,
-
-      709,
+      2483,
 
-      2972,
+      712,
+      -1,
 
       138,
 
-      2396,
+      2402,
 
-      1849,
+      1852,
 
-      1411,
+      1414,
 
-      1567,
+      1570,
 
-      2411,
+      2417,
 
-      718,
+      721,
 
-      1426,
+      1429,
 
-      3822,
+      3843,
 
-      3017,
+      3023,
 
-      724,
-      -1,
+      727,
 
-      3354,
+      1678,
 
-      3195,
+      3375,
 
-      2036,
+      3201,
 
-      1075,
+      2042,
+
+      1078,
 
       339,
 
-      2456,
+      2462,
 
       59,
-      -1, -1,
+      -1,
 
-      351,
+      4002,
 
-      2483,
+      778,
 
-      2165,
+      1672,
 
-      1207,
+      2171,
 
-      2390,
+      1210,
 
-      3348,
+      2396,
 
-      1405,
+      3369,
 
-      2861,
+      1408,
 
-      1756,
+      2867,
 
-      3681,
+      1759,
 
-      1474,
+      3702,
 
-      1432,
+      1477,
 
-      3342,
+      768,
 
-      2027,
+      3363,
 
-      1066,
+      2033,
+
+      1069,
 
       330,
 
-      706,
+      709,
 
       40,
 
       622,
       -1,
 
-      3909,
+      3930,
 
-      3312,
+      3333,
       -1,
 
-      3384,
-
-      363,
+      3405,
+      -1,
 
-      2507,
+      2513,
 
-      1387,
+      1390,
 
-      2225,
+      2231,
 
-      1267,
+      1270,
 
       496,
 
-      3042,
+      3048,
 
       162,
 
       607,
 
-      2162,
+      2168,
 
-      1204,
+      1207,
 
-      1588,
+      1591,
       -1,
 
-      3888,
+      3909,
 
-      2858,
+      2864,
 
-      1750,
+      1753,
 
-      3675,
+      3696,
 
-      1468,
+      1471,
 
-      3327,
+      3348,
       -1,
 
-      3225,
+      3231,
 
       634,
 
-      2024,
+      2030,
 
-      1063,
+      1066,
 
       327,
 
-      3279,
+      3288,
 
       34,
 
-      3201,
+      3207,
 
-      1987,
+      1993,
 
-      1011,
+      1014,
 
       291,
       -1,
 
-      2501,
+      2507,
 
-      2681,
+      2687,
 
       601,
 
-      1381,
+      1384,
 
-      3489,
+      3510,
 
-      1969,
+      1975,
 
-      974,
+      977,
 
-      2345,
+      2351,
       -1,
 
-      3192,
+      3198,
 
-      2645,
+      2651,
 
-      3483,
+      3504,
 
-      1966,
+      1972,
 
-      968,
+      971,
 
-      3114,
+      3120,
 
-      3867,
+      3888,
 
       598,
 
-      2639,
+      2645,
 
-      3477,
+      3498,
 
-      1963,
+      1969,
 
-      962,
+      965,
       -1,
 
-      3960,
+      3981,
 
       595,
 
-      2633,
+      2639,
 
-      3468,
+      3489,
 
-      3072,
+      3078,
 
-      951,
+      954,
 
       264,
 
-      3246,
+      3252,
 
-      2336,
+      2342,
 
-      2624,
+      2630,
 
-      3309,
+      3330,
 
-      3048,
+      3054,
 
       625,
 
-      3189,
+      3195,
 
-      703,
+      706,
 
-      2327,
+      2333,
 
-      3435,
+      3456,
 
-      1942,
+      1948,
 
-      916,
+      919,
 
       249,
 
       2267,
       -1,
 
-      2591,
+      2597,
 
-      1651,
+      1654,
 
       574,
 
-      3039,
+      3045,
       -1,
 
-      3186,
+      3192,
 
-      2318,
+      2324,
 
-      3429,
+      3450,
 
-      1939,
+      1945,
 
-      910,
+      913,
 
       246,
 
-      745,
+      748,
 
-      3183,
+      3189,
 
-      2585,
+      2591,
 
-      3405,
+      3426,
 
-      1927,
+      1933,
 
       2954,
 
       237,
       -1,
 
-      2312,
+      2318,
 
-      1918,
+      1924,
 
-      3168,
+      3174,
 
       228,
 
-      3204,
+      3210,
 
-      4029,
+      4050,
 
-      1915,
+      1921,
 
       354,
 
       225,
 
-      1339,
+      1342,
 
-      3036,
+      3042,
       -1,
 
-      2294,
+      2300,
 
-      3372,
+      3393,
 
-      1330,
+      1333,
 
-      2261,
+      2255,
 
-      3147,
+      3153,
 
-      2288,
+      2294,
 
-      1438,
+      1441,
 
-      1327,
+      1330,
 
-      2249,
+      363,
 
       673,
 
-      3336,
+      3357,
 
-      3936,
+      3957,
 
-      3033,
+      3039,
 
-      3011,
+      3017,
 
-      1912,
+      1918,
 
-      3951,
+      3972,
 
       222,
 
-      3330,
+      3351,
 
-      3008,
+      3014,
 
-      3029,
+      3035,
 
-      3834,
+      3855,
 
-      2948,
+      2918,
 
-      3243,
+      3249,
 
-      3005,
-
-      3324,
+      3011,
 
-      2282,
+      3345,
 
-      2912,
+      2288,
+      -1,
 
-      1324,
+      1327,
 
-      3014,
+      3020,
 
       664,
 
-      3051,
-
-      3315,
-      -1,
+      3057,
 
-      2048,
+      3336,
 
-      1087,
+      3597,
 
-      3930,
+      2054,
 
-      2480,
+      1090,
 
-      2057,
+      3951,
 
-      688,
+      2486,
 
-      357,
+      120,
 
-      3957,
+      2894,
 
-      1126,
+      1834,
 
-      2738,
+      3777,
 
-      2999,
+      1552,
 
-      2414,
+      1642,
 
-      2780,
+      3005,
 
-      1429,
+      2420,
 
-      2243,
+      2063,
 
-      4062,
+      1432,
 
-      727,
+      357,
 
-      1447,
+      4083,
 
-      3828,
-      -1,
+      730,
 
-      2042,
+      2744,
 
-      1081,
+      3849,
 
-      3912,
+      739,
 
-      2468,
+      2048,
 
-      71,
+      1084,
 
-      1996,
+      3933,
 
-      1029,
+      2474,
 
-      300,
+      71,
 
-      1639,
+      1450,
+      -1,
 
-      3237,
+      2087,
 
-      2699,
+      1111,
 
-      2402,
+      3243,
+      -1,
 
-      2906,
+      2408,
 
-      1417,
+      2768,
 
-      3585,
+      1420,
 
-      2207,
+      3606,
 
-      1249,
-      -1,
+      2213,
 
-      736,
+      1252,
+      -1, -1,
 
       129,
 
-      3534,
+      3555,
 
-      1840,
+      1843,
 
-      3765,
+      3786,
 
-      1558,
+      1561,
 
       592,
 
       77,
 
-      1633,
+      1029,
 
-      1789,
+      1792,
 
-      3714,
+      3735,
 
-      1507,
+      1510,
 
-      3969,
+      2702,
 
       589,
 
-      2429,
-      -1, -1,
+      2435,
 
-      3906,
+      2144,
 
-      730,
-      -1,
+      1912,
 
-      345,
+      3927,
 
-      2471,
+      216,
 
-      74,
+      2249,
+
+      2840,
+
+      1705,
+
+      3648,
       -1,
 
-      3234,
+      3240,
 
-      3522,
+      3543,
 
-      2540,
+      2546,
 
       586,
 
       450,
 
-      2405,
+      1321,
 
-      3198,
+      3204,
 
-      1420,
+      806,
 
-      1777,
+      1780,
 
-      3702,
+      3723,
 
-      1495,
+      1498,
 
-      3516,
-      -1, -1,
+      3537,
+      -1,
+
+      2912,
 
       447,
 
-      3180,
+      3186,
 
-      2081,
+      351,
 
-      1108,
+      2489,
 
-      1771,
+      1774,
 
-      3696,
+      3717,
 
-      1489,
+      1492,
 
-      2762,
+      2993,
 
-      3177,
+      3183,
 
-      3510,
+      3531,
       -1,
 
-      2528,
+      2534,
 
       444,
-      -1,
 
-      1177,
+      1435,
 
-      3174,
+      1180,
 
-      1765,
+      3180,
 
-      3690,
+      1768,
 
-      1483,
+      3711,
 
-      1699,
+      1486,
 
-      3624,
+      1702,
 
-      2522,
+      3645,
+
+      2528,
 
       565,
 
-      3450,
+      3471,
 
-      3081,
+      3087,
 
-      931,
+      934,
 
       255,
 
       556,
-      -1,
 
-      2606,
+      1636,
 
-      3045,
+      2612,
+
+      3051,
 
       679,
 
       553,
 
-      2516,
+      2522,
       -1,
 
-      3153,
+      3159,
 
       432,
 
-      1693,
+      2495,
 
-      3618,
+      733,
 
-      3026,
+      3032,
 
-      1741,
+      1744,
 
-      3666,
+      3687,
 
-      1459,
+      1462,
       -1,
 
-      1186,
-
-      2423,
+      691,
 
-      3023,
+      2429,
 
-      795,
+      3029,
 
-      3150,
+      1453,
 
-      1717,
+      3156,
 
-      3642,
-      -1,
+      3408,
+      -1, -1,
 
       550,
 
-      3020,
+      3026,
 
-      2489,
+      2069,
 
-      3141,
+      3147,
 
-      2147,
+      2153,
 
-      2492,
+      2498,
 
       421,
 
-      820,
+      2750,
 
-      3132,
+      3138,
 
-      2843,
+      2849,
 
-      1720,
-
-      3645,
+      1723,
 
-      1450,
+      3666,
+      -1,
 
-      3129,
+      3135,
       -1, -1,
 
-      2123,
+      2138,
 
-      1165,
+      1177,
 
-      408,
+      414,
 
       676,
 
-      823,
-
-      2819,
+      826,
 
-      1672,
+      2834,
 
-      682,
+      1693,
 
-      2045,
+      2135,
 
-      1084,
+      1174,
 
-      3963,
+      411,
 
-      2474,
+      3990,
 
-      3459,
+      3984,
 
-      1954,
+      2831,
 
-      941,
-      -1,
+      1687,
 
-      770,
+      1861,
 
-      3126,
+      685,
 
-      2615,
+      795,
 
-      2408,
+      3132,
+      -1,
 
-      3462,
+      2129,
 
-      1423,
+      1168,
 
-      944,
+      408,
+      -1,
 
-      261,
+      789,
 
-      721,
-      -1,
+      2825,
 
-      2618,
+      1675,
       -1,
 
-      628,
+      2051,
 
-      3954,
+      1087,
 
-      3411,
+      3975,
 
-      1930,
+      2480,
 
-      2321,
+      2002,
 
-      240,
+      1032,
 
-      1026,
-      -1,
+      300,
 
-      3399,
+      1858,
 
-      1924,
+      773,
 
-      2696,
+      2705,
 
-      234,
+      405,
 
-      3252,
+      2414,
       -1,
 
-      4056,
-
-      3282,
+      1426,
 
-      1342,
-      -1,
+      1666,
 
-      3417,
+      4077,
 
-      1933,
+      724,
 
-      896,
+      345,
 
-      3942,
+      2477,
 
-      1336,
+      74,
       -1,
 
-      2573,
+      3258,
 
-      405,
+      3963,
 
-      2126,
+      402,
 
-      1168,
+      762,
+      -1,
 
-      4014,
+      2411,
 
-      1663,
+      1660,
 
-      2300,
+      1423,
 
-      2822,
+      4035,
 
-      1678,
+      547,
 
-      3207,
+      3801,
+
+      3483,
       -1,
 
-      3615,
+      947,
 
-      2222,
+      261,
 
-      1264,
+      3273,
 
-      493,
+      755,
 
-      759,
+      2624,
 
-      156,
+      3480,
 
-      3855,
+      1960,
+
+      944,
 
-      779,
+      3876,
       -1,
 
-      3609,
+      2327,
 
-      2219,
+      2621,
+      -1, -1,
 
-      1261,
+      3438,
 
-      490,
-      -1,
+      1939,
 
-      150,
+      899,
 
-      3087,
+      3453,
 
-      3849,
+      3870,
 
-      890,
+      916,
 
-      1582,
-      -1, -1, -1,
+      2579,
 
-      3945,
+      3432,
 
-      1117,
+      1936,
 
-      375,
+      2594,
 
-      3588,
-      -1,
+      240,
 
-      2771,
+      3093,
 
-      3843,
+      2306,
+      -1,
 
-      3240,
+      3327,
 
-      132,
+      2321,
 
-      3777,
+      3864,
 
-      1843,
+      3420,
 
-      3768,
+      1930,
 
-      1561,
+      3798,
 
-      3504,
+      234,
 
-      3054,
+      1345,
 
-      990,
+      3636,
 
-      3576,
+      2228,
 
-      2438,
+      1267,
 
-      577,
+      493,
 
-      2660,
+      3117,
 
-      881,
+      156,
 
-      120,
+      577,
+      -1,
 
-      2888,
+      3978,
 
-      1831,
+      1339,
 
-      3756,
+      3630,
 
-      1549,
+      2225,
 
-      3570,
+      1264,
 
-      3771,
+      490,
+      -1,
 
-      3387,
+      150,
 
-      3267,
+      3609,
 
-      3819,
+      893,
 
-      114,
+      3840,
 
-      2885,
+      1585,
+      -1,
 
-      1825,
+      132,
 
-      3750,
+      3591,
 
-      1543,
+      1846,
 
-      3558,
-      -1, -1,
+      3789,
 
-      3795,
+      1564,
       -1,
 
-      102,
+      114,
 
-      3546,
+      2891,
 
-      1813,
+      1828,
 
-      3738,
+      3771,
 
-      1531,
+      1546,
       -1,
 
-      89,
+      884,
 
-      3540,
+      3579,
+      -1,
 
-      1801,
+      688,
+      -1, -1,
 
-      3726,
-
-      1519,
-
-      3798,
-
-      83,
+      102,
 
-      3528,
+      3819,
 
-      1795,
+      1816,
 
-      3720,
+      3759,
 
-      1513,
-      -1, -1,
+      1534,
 
-      2564,
+      3567,
+      -1,
 
-      1783,
+      1129,
+      -1,
 
-      3708,
+      3549,
 
-      1501,
+      89,
 
-      441,
-      -1,
+      2786,
 
-      2552,
+      1804,
 
-      3111,
+      3747,
 
-      1759,
+      1522,
 
-      3684,
+      3561,
 
-      1477,
+      1786,
 
-      3456,
+      3729,
 
-      2546,
+      1504,
 
-      937,
+      2570,
 
-      258,
+      83,
 
-      580,
+      1035,
 
-      438,
+      1798,
 
-      2612,
+      3741,
 
-      2534,
-      -1,
+      1516,
 
-      1753,
+      2708,
 
-      3678,
+      3474,
 
-      1471,
+      1957,
 
-      583,
+      937,
 
-      435,
+      2558,
 
-      2510,
+      3264,
 
-      1195,
+      441,
 
-      429,
+      2615,
 
-      1747,
+      2540,
+      -1,
 
-      3672,
+      1762,
 
-      1465,
+      3705,
 
-      1735,
+      1480,
+      -1,
 
-      3660,
+      2552,
 
-      568,
+      2132,
 
-      3351,
+      1171,
 
-      3306,
+      628,
+      -1,
 
-      3948,
+      3324,
 
-      2504,
+      2828,
 
-      4059,
+      1681,
 
-      562,
+      4080,
       -1,
 
-      839,
+      438,
+      -1,
 
-      1999,
+      3321,
 
-      1035,
+      2516,
 
-      303,
+      1756,
 
-      2498,
-      -1,
+      3699,
 
-      2705,
+      1474,
 
-      3165,
+      782,
 
-      571,
-      -1,
+      2005,
 
-      4026,
+      1038,
 
-      2156,
+      303,
 
-      1198,
-      -1,
+      4047,
 
-      1192,
+      435,
 
-      425,
+      2711,
 
-      2852,
+      3315,
 
-      1738,
+      3969,
 
-      3663,
+      1750,
 
-      1729,
+      3693,
 
-      3654,
+      1468,
 
-      2153,
+      3099,
       -1,
 
-      4020,
+      2510,
+
+      583,
       -1,
 
-      3144,
+      4041,
+      -1,
 
-      2849,
+      3213,
+      -1, -1,
 
-      1732,
+      580,
 
-      3657,
+      3966,
 
-      833,
+      4017,
+      -1,
 
-      3996,
+      2504,
 
-      3138,
+      2126,
 
-      3453,
+      1165,
 
-      1951,
+      3999,
 
-      934,
+      3246,
 
-      3978,
+      571,
 
-      2150,
+      2822,
 
-      836,
+      1669,
 
-      2609,
+      3993,
 
-      2144,
+      2162,
 
-      3972,
+      1201,
+      -1,
 
-      2846,
+      568,
+      -1,
 
-      1726,
+      2858,
 
-      3651,
+      1741,
 
-      2840,
+      3684,
 
-      1714,
+      765,
 
-      3639,
-      -1,
+      1198,
 
-      1183,
+      429,
 
-      417,
+      2159,
       -1,
 
-      2141,
+      562,
 
-      830,
+      1738,
 
-      1711,
+      3681,
 
-      3636,
+      2855,
 
-      817,
+      1735,
 
-      2837,
+      3678,
 
-      1708,
+      3987,
 
-      3633,
+      3171,
+      -1,
 
-      2138,
+      3060,
+      -1,
 
-      3966,
-      -1, -1,
+      842,
 
-      813,
+      1195,
 
-      2834,
+      425,
 
-      1702,
+      839,
 
-      3627,
+      2156,
+      -1,
 
-      810,
+      1732,
 
-      2132,
+      3675,
 
-      1174,
+      2150,
 
-      414,
+      2852,
 
-      2135,
-      -1,
+      1729,
 
-      2828,
+      3672,
 
-      1690,
+      3150,
 
-      803,
+      2846,
 
-      2831,
+      1717,
 
-      1696,
+      3660,
 
-      3621,
+      836,
+      -1, -1, -1,
 
-      3273,
+      833,
+      -1,
 
-      2129,
+      3144,
+      -1,
 
-      1171,
+      820,
 
-      411,
-      -1,
+      1186,
 
-      792,
+      417,
 
-      2825,
+      2147,
+
+      2453,
 
-      1684,
+      49,
 
-      799,
+      1714,
 
-      2120,
+      3657,
 
-      1162,
+      2843,
 
-      15,
+      1711,
 
-      2717,
+      3654,
       -1,
 
-      2816,
+      2387,
+      -1,
 
-      1666,
+      1399,
       -1,
 
-      786,
+      816,
 
-      2369,
+      2141,
       -1,
 
-      1360,
-
-      2117,
+      813,
 
-      1159,
+      3882,
       -1,
 
-      3861,
+      2837,
 
-      762,
+      1699,
 
-      2813,
+      3642,
 
-      1660,
+      2123,
 
-      2111,
+      1162,
 
-      1153,
+      2066,
 
-      3498,
+      631,
 
-      3837,
+      360,
 
-      984,
+      2819,
 
-      2807,
+      1663,
 
-      1648,
-      -1,
+      2747,
 
-      2654,
+      802,
+      -1, -1, -1,
 
-      755,
+      2117,
 
-      3120,
+      1156,
 
-      2420,
+      3858,
 
-      2105,
+      1456,
 
-      1147,
+      758,
 
-      396,
+      2813,
 
-      3831,
+      1651,
 
-      742,
+      2111,
 
-      2801,
+      1150,
 
-      1636,
+      396,
 
-      2093,
+      3291,
 
-      1135,
+      2426,
 
-      390,
-      -1,
+      2807,
 
-      3825,
+      1639,
 
-      2789,
+      2060,
 
-      1612,
+      1096,
 
-      3813,
+      745,
 
-      1858,
+      1120,
 
-      733,
+      375,
 
-      2087,
+      2741,
 
-      1129,
+      3852,
 
-      384,
+      2777,
+      -1,
 
-      2054,
+      736,
 
-      1093,
+      2099,
 
-      2783,
+      1138,
 
-      1600,
+      390,
 
-      2060,
+      1444,
+      -1,
 
-      2735,
+      2795,
 
-      360,
-      -1, -1,
+      1615,
 
-      2741,
+      3168,
 
-      3447,
+      3846,
 
-      1948,
+      2093,
 
-      928,
+      1132,
 
-      1441,
-      -1,
+      384,
 
-      1855,
+      15,
 
-      2603,
+      2723,
 
-      1453,
+      2789,
 
-      2459,
+      1603,
+
+      2465,
 
       62,
 
-      2732,
+      2738,
 
-      3816,
+      2375,
 
-      2063,
+      3318,
 
-      3807,
+      1363,
 
-      2447,
+      2120,
 
-      49,
+      1159,
 
-      2393,
+      2399,
+      -1,
 
-      2744,
+      1411,
 
-      1408,
-      -1, -1,
+      2816,
 
-      3810,
+      1657,
 
-      2381,
+      4062,
 
-      1180,
+      3468,
 
-      1396,
+      1954,
 
-      3441,
+      931,
 
-      1945,
+      3462,
 
-      922,
+      1951,
 
-      1705,
+      925,
 
-      3630,
+      2609,
 
-      4041,
+      3216,
 
-      2597,
+      752,
 
-      3210,
+      2603,
 
-      1888,
+      3837,
+
+      1894,
       -1,
 
       198,
 
-      3804,
-      -1,
+      1891,
 
-      807,
+      1876,
 
-      3792,
-      -1,
+      195,
 
-      3345,
+      180,
+
+      3834,
+
+      1023,
       -1,
 
-      1885,
+      3831,
+
+      2270,
+
+      2696,
+
+      1303,
 
       2264,
 
-      195,
+      2258,
 
       1300,
 
-      3789,
+      1285,
+      -1, -1,
 
-      2078,
+      2084,
 
-      1105,
+      1108,
 
-      1870,
+      3312,
 
-      3786,
+      3828,
 
-      180,
+      1873,
 
-      2759,
+      2765,
 
-      2258,
+      177,
 
-      2066,
+      3825,
 
-      1297,
+      1870,
 
-      24,
+      2957,
 
-      2723,
+      174,
 
-      3780,
+      3813,
 
-      2747,
+      2951,
+
+      2921,
+
+      3063,
 
       2252,
 
-      2951,
+      1123,
 
       1282,
-
-      3162,
       -1,
 
-      1372,
+      2246,
 
-      1867,
+      2780,
+
+      1279,
       -1,
 
-      177,
+      2105,
 
-      3057,
+      1144,
+      -1,
 
-      3774,
+      670,
 
-      2945,
+      3810,
 
-      2465,
+      2801,
 
-      68,
+      1627,
 
-      1864,
-      -1,
+      3807,
 
-      174,
+      3603,
 
-      2246,
+      1909,
 
       2915,
 
-      1279,
-
-      2399,
+      213,
       -1,
 
-      1414,
+      126,
 
-      646,
+      2909,
 
-      3582,
+      1840,
 
-      2240,
+      3783,
 
-      4050,
+      1558,
 
-      1276,
-      -1,
+      3585,
 
-      126,
-      -1,
+      2075,
 
-      1837,
+      1099,
 
-      3762,
+      3795,
 
-      1555,
+      1318,
 
-      4053,
+      108,
 
-      2909,
+      2756,
 
-      2114,
+      1822,
 
-      1156,
+      3765,
 
-      21,
+      1540,
 
-      2720,
-      -1,
+      1189,
 
-      2810,
+      3942,
 
-      1654,
+      1183,
 
-      2903,
+      24,
 
-      4002,
-      -1,
+      2729,
 
-      3564,
+      1720,
 
-      1366,
-      -1,
+      3663,
 
-      3885,
+      1708,
 
-      3990,
+      3651,
+      -1,
 
-      108,
+      2987,
+      -1,
 
-      749,
+      1375,
 
-      1819,
+      2114,
 
-      3744,
+      1153,
 
-      1537,
+      823,
 
-      2108,
+      3402,
 
-      1150,
+      810,
 
-      3303,
+      2810,
+
+      1645,
       -1,
 
-      4008,
+      4074,
 
-      2804,
+      2072,
 
-      1642,
+      1696,
 
-      2099,
+      3639,
 
-      1141,
-      -1,
+      2102,
 
-      2069,
+      1141,
 
-      1096,
+      2753,
 
-      2795,
+      4071,
 
-      1624,
+      742,
 
-      3300,
+      2798,
 
-      2750,
+      1621,
 
-      739,
+      3309,
 
-      2096,
+      798,
 
-      1138,
+      3261,
+      -1, -1,
 
-      2453,
+      4029,
 
-      56,
+      2471,
 
-      3606,
+      68,
 
-      2792,
+      4044,
 
-      1618,
+      2459,
 
-      2441,
+      56,
 
-      43,
+      646,
 
-      147,
+      4023,
+      -1,
 
-      2387,
+      2405,
       -1,
 
-      1402,
+      1417,
 
-      1579,
-      -1,
+      2393,
 
-      2375,
+      9,
 
-      3444,
+      1405,
 
-      1390,
+      21,
 
-      925,
+      2726,
 
-      252,
-      -1,
+      4011,
 
-      887,
+      2447,
 
-      2600,
+      43,
 
-      3291,
+      2369,
 
-      670,
+      3255,
 
-      685,
+      1357,
 
-      3432,
+      3282,
+
+      1369,
       -1,
 
-      913,
+      2381,
 
-      3426,
+      3477,
 
-      1120,
+      1393,
 
-      906,
+      940,
 
-      2588,
+      258,
 
-      3285,
+      3300,
 
-      2774,
+      3906,
 
-      2582,
+      2618,
 
-      3249,
+      1117,
 
-      3783,
+      3096,
 
-      2315,
-      -1,
+      3627,
 
-      3255,
+      3954,
 
-      2309,
-      -1,
+      2774,
 
-      3420,
+      529,
 
-      3933,
+      3294,
 
-      899,
+      147,
 
-      529,
+      526,
 
-      3159,
+      511,
 
-      1114,
+      3525,
 
-      2576,
+      1582,
 
-      3921,
+      993,
       -1,
 
-      2768,
+      2444,
 
-      402,
-      -1,
+      3465,
 
-      2303,
+      2666,
 
-      526,
+      928,
 
-      1657,
+      252,
 
-      3258,
+      890,
 
-      3414,
+      3447,
 
-      1906,
+      2606,
 
-      893,
+      909,
+      -1, -1,
 
-      216,
+      3090,
 
-      511,
-      -1,
+      2588,
 
-      2570,
+      3126,
 
-      655,
+      3165,
 
-      752,
+      508,
+      -1,
 
-      691,
-      -1, -1,
+      3162,
 
-      2297,
+      2315,
 
-      3156,
+      505,
 
-      1318,
+      3441,
 
-      3084,
-      -1, -1,
+      3435,
 
-      1903,
+      902,
 
-      3090,
+      896,
+      -1, -1,
 
-      213,
+      2582,
 
-      508,
-      -1,
+      2576,
 
-      1897,
-      -1,
+      1903,
 
-      207,
+      1900,
 
-      1894,
-      -1,
+      207,
 
       204,
 
-      505,
-
-      2987,
+      2309,
 
-      1315,
+      2303,
 
-      1882,
+      1017,
 
-      3897,
+      1888,
+      -1,
 
       192,
 
-      3264,
+      2690,
+
+      4065,
+      -1,
+
+      1312,
 
       1309,
 
-      3093,
+      544,
 
-      4047,
+      3270,
 
-      1306,
+      2108,
 
-      1876,
-      -1,
+      1147,
 
-      186,
+      1882,
 
-      2075,
+      1297,
 
-      1102,
+      186,
 
-      1294,
-      -1,
+      2804,
 
-      2981,
+      1633,
 
-      2756,
+      1011,
 
-      649,
+      700,
+      -1, -1,
 
-      3939,
-      -1,
+      2684,
+
+      2975,
 
       2969,
 
-      1288,
-      -1,
+      3285,
 
-      2963,
-      -1,
+      1291,
 
-      2102,
+      655,
 
-      1144,
+      1005,
 
-      2072,
+      3816,
 
-      1099,
+      2945,
 
-      2939,
+      3804,
 
-      2798,
+      2678,
 
-      1630,
+      3306,
 
-      2753,
+      2081,
 
-      9,
-      -1,
+      1105,
 
-      1014,
+      2078,
+
+      1102,
       -1,
 
-      2927,
+      2762,
 
-      3,
+      999,
 
-      2684,
+      2759,
 
-      2363,
+      2933,
 
-      3108,
+      3372,
 
-      1354,
+      2672,
 
-      3891,
+      3,
       -1,
 
-      2357,
-
-      1008,
+      3792,
 
-      1348,
+      3114,
 
-      3096,
+      3519,
 
-      697,
+      694,
 
-      2678,
+      987,
 
-      1002,
+      2363,
 
-      996,
+      3918,
 
-      1032,
-      -1,
+      1351,
 
-      2672,
+      2660,
 
-      2666,
+      3513,
+      -1,
 
-      2702,
+      980,
+      -1, -1, -1,
 
-      3492,
-      -1,
+      2654,
 
-      977,
+      3129,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
 
-      1020,
+      649,
       -1, -1,
 
-      2648,
+      3396,
+      -1, -1, -1, -1, -1, -1,
 
-      2690,
+      3303,
       -1, -1,
 
-      4044,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1,
+      3960,
 
-      3297,
+      3105,
       -1,
 
-      3927,
+      3948,
       -1, -1, -1, -1,
 
-      3915,
+      3390,
       -1, -1,
 
-      3294,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-
-      3375,
-      -1,
-
-      547,
-      -1,
-
-      3276,
+      3900,
       -1,
 
-      3099,
-      -1, -1, -1, -1,
+      3912,
+      -1, -1, -1,
 
-      3369,
-      -1, -1, -1, -1,
+      3936,
 
-      3363,
+      3384,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1,
 
-      3357,
+      3378,
       -1,
 
-      544,
+      3102,
+      -1, -1, -1, -1, -1, -1,
       -1, -1,
 
-      3270,
-      -1,
+      3366,
 
-      538,
+      3279,
+      -1, -1, -1, -1, -1,
 
-      3339,
+      3360,
+      -1, -1, -1,
 
-      3381,
+      538,
 
       535,
-      -1, -1, -1, -1, -1,
+      -1, -1, -1,
 
-      523,
-      -1, -1, -1, -1, -1, -1,
+      619,
       -1,
 
-      517,
-
-      3123,
-      -1, -1, -1, -1, -1, -1,
+      523,
       -1, -1, -1, -1, -1, -1,
       -1, -1, -1, -1, -1,
 
-      3117,
-      -1, -1, -1, -1, -1, -1,
-
-      619,
+      517,
       -1, -1, -1,
 
-      4038,
-      -1, -1, -1, -1, -1, -1,
-
       616,
       -1, -1, -1, -1,
 
+      3123,
+      -1, -1, -1, -1,
+
       610,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1,
 
       604,
-
-      631,
-      -1, -1,
-
-      3879,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
       -1, -1, -1, -1,
 
-      3873,
+      4059,
       -1, -1,
 
-      4032,
+      4053,
+      -1,
+
+      3894,
       -1, -1, -1, -1, -1, -1,
       -1, -1, -1, -1, -1, -1,
       -1, -1, -1, -1, -1, -1,
-
-      3105,
       -1, -1, -1, -1, -1, -1,
       -1, -1, -1, -1, -1, -1,
-      -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1,
 
-      3102,
+      3111,
+      -1,
+
+      3108,
       -1, -1, -1, -1, -1, -1,
       -1, -1, -1, -1, -1, -1,
       -1, -1, -1, -1, -1, -1,
@@ -2952,26 +2960,27 @@ onigenc_unicode_fold1_key(OnigCodePoint codes[])
       -1, -1, -1, -1, -1, -1,
       -1, -1, -1, -1, -1, -1,
       -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1,
 
-      4035,
+      4068,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
       -1, -1, -1, -1, -1, -1,
       -1, -1, -1,
 
-      4023,
-      -1, -1,
+      4056,
+      -1, -1, -1, -1,
 
-      4017,
+      4038,
       -1, -1, -1, -1, -1, -1,
       -1, -1, -1, -1, -1, -1,
       -1,
 
-      4011,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1,
+      4032,
 
-      4005
+      4026
     };
 
   if (0 == 0)
index 3bc4bd61881235cede386dc218994f05c13119ad..2310f0ad983fd72ed3db5bd0de40e471ff2d308e 100644 (file)
@@ -1,7 +1,7 @@
 /* This file was converted by gperf_fold_key_conv.py
       from gperf output file. */
 /* ANSI-C code produced by gperf version 3.1 */
-/* Command-line: /usr/bin/gperf -n -C -T -c -t -j1 -L ANSI-C -F,-1 -N onigenc_unicode_fold2_key unicode_fold2_key.gperf  */
+/* Command-line: /usr/local/bin/gperf -n -C -T -c -t -j1 -L ANSI-C -F,-1 -N onigenc_unicode_fold2_key unicode_fold2_key.gperf  */
 /* Computed positions: -k'3,6' */
 
 
index b935db6a01cf4cbfdd1a8e1718c291327a482756..0e02a6248d131cb4df0cb53adbc56b5ad8c33b99 100644 (file)
@@ -1,7 +1,7 @@
 /* This file was converted by gperf_fold_key_conv.py
       from gperf output file. */
 /* ANSI-C code produced by gperf version 3.1 */
-/* Command-line: /usr/bin/gperf -n -C -T -c -t -j1 -L ANSI-C -F,-1 -N onigenc_unicode_fold3_key unicode_fold3_key.gperf  */
+/* Command-line: /usr/local/bin/gperf -n -C -T -c -t -j1 -L ANSI-C -F,-1 -N onigenc_unicode_fold3_key unicode_fold3_key.gperf  */
 /* Computed positions: -k'3,6,9' */
 
 
index 0b2c51920ed59229dfb92d428b13421402575b6e..0dbf9ae76f4ad7ffa49407a25063b3a712b17473 100644 (file)
@@ -1,7 +1,7 @@
 /* This file was generated by make_unicode_fold_data.py. */
 #include "regenc.h"
 
-#define UNICODE_CASEFOLD_VERSION  11_0_0
+#define UNICODE_CASEFOLD_VERSION  12_1_0
 
 
 OnigCodePoint OnigUnicodeFolds1[] = {
@@ -230,1130 +230,1137 @@ OnigCodePoint OnigUnicodeFolds1[] = {
  /* 673*/    0x0275,  1,   0x019f, /* LATIN CAPITAL LETTER O WITH MIDDL.. */
  /* 676*/    0x027d,  1,   0x2c64, /* LATIN CAPITAL LETTER R WITH TAIL */
  /* 679*/    0x0280,  1,   0x01a6, /* LATIN LETTER YR */
- /* 682*/    0x0283,  1,   0x01a9, /* LATIN CAPITAL LETTER ESH */
- /* 685*/    0x0287,  1,   0xa7b1, /* LATIN CAPITAL LETTER TURNED T */
- /* 688*/    0x0288,  1,   0x01ae, /* LATIN CAPITAL LETTER T WITH RETRO.. */
- /* 691*/    0x0289,  1,   0x0244, /* LATIN CAPITAL LETTER U BAR */
- /* 694*/    0x028a,  1,   0x01b1, /* LATIN CAPITAL LETTER UPSILON */
- /* 697*/    0x028b,  1,   0x01b2, /* LATIN CAPITAL LETTER V WITH HOOK */
- /* 700*/    0x028c,  1,   0x0245, /* LATIN CAPITAL LETTER TURNED V */
- /* 703*/    0x0292,  1,   0x01b7, /* LATIN CAPITAL LETTER EZH */
- /* 706*/    0x029d,  1,   0xa7b2, /* LATIN CAPITAL LETTER J WITH CROSS.. */
- /* 709*/    0x029e,  1,   0xa7b0, /* LATIN CAPITAL LETTER TURNED K */
- /* 712*/    0x0371,  1,   0x0370, /* GREEK CAPITAL LETTER HETA */
- /* 715*/    0x0373,  1,   0x0372, /* GREEK CAPITAL LETTER ARCHAIC SAMPI */
- /* 718*/    0x0377,  1,   0x0376, /* GREEK CAPITAL LETTER PAMPHYLIAN D.. */
- /* 721*/    0x037b,  1,   0x03fd, /* GREEK CAPITAL REVERSED LUNATE SIG.. */
- /* 724*/    0x037c,  1,   0x03fe, /* GREEK CAPITAL DOTTED LUNATE SIGMA.. */
- /* 727*/    0x037d,  1,   0x03ff, /* GREEK CAPITAL REVERSED DOTTED LUN.. */
- /* 730*/    0x03ac,  1,   0x0386, /* GREEK CAPITAL LETTER ALPHA WITH T.. */
- /* 733*/    0x03ad,  1,   0x0388, /* GREEK CAPITAL LETTER EPSILON WITH.. */
- /* 736*/    0x03ae,  1,   0x0389, /* GREEK CAPITAL LETTER ETA WITH TON.. */
- /* 739*/    0x03af,  1,   0x038a, /* GREEK CAPITAL LETTER IOTA WITH TO.. */
- /* 742*/    0x03b1,  1,   0x0391, /* GREEK CAPITAL LETTER ALPHA */
- /* 745*/    0x03b2,  2,   0x0392,   0x03d0, /* GREEK CAPITAL LETTER BETA */
- /* 749*/    0x03b3,  1,   0x0393, /* GREEK CAPITAL LETTER GAMMA */
- /* 752*/    0x03b4,  1,   0x0394, /* GREEK CAPITAL LETTER DELTA */
- /* 755*/    0x03b5,  2,   0x0395,   0x03f5, /* GREEK CAPITAL LETTER EPSILON */
- /* 759*/    0x03b6,  1,   0x0396, /* GREEK CAPITAL LETTER ZETA */
- /* 762*/    0x03b7,  1,   0x0397, /* GREEK CAPITAL LETTER ETA */
- /* 765*/    0x03b8,  3,   0x0398,   0x03d1,   0x03f4, /* GREEK CAPITAL LETTER THETA */
- /* 770*/    0x03b9,  3,   0x0345,   0x0399,   0x1fbe, /* COMBINING GREEK YPOGEGRAMMENI */
- /* 775*/    0x03ba,  2,   0x039a,   0x03f0, /* GREEK CAPITAL LETTER KAPPA */
- /* 779*/    0x03bb,  1,   0x039b, /* GREEK CAPITAL LETTER LAMDA */
- /* 782*/    0x03bc,  2,   0x00b5,   0x039c, /* MICRO SIGN */
- /* 786*/    0x03bd,  1,   0x039d, /* GREEK CAPITAL LETTER NU */
- /* 789*/    0x03be,  1,   0x039e, /* GREEK CAPITAL LETTER XI */
- /* 792*/    0x03bf,  1,   0x039f, /* GREEK CAPITAL LETTER OMICRON */
- /* 795*/    0x03c0,  2,   0x03a0,   0x03d6, /* GREEK CAPITAL LETTER PI */
- /* 799*/    0x03c1,  2,   0x03a1,   0x03f1, /* GREEK CAPITAL LETTER RHO */
- /* 803*/    0x03c3,  2,   0x03a3,   0x03c2, /* GREEK CAPITAL LETTER SIGMA */
- /* 807*/    0x03c4,  1,   0x03a4, /* GREEK CAPITAL LETTER TAU */
- /* 810*/    0x03c5,  1,   0x03a5, /* GREEK CAPITAL LETTER UPSILON */
- /* 813*/    0x03c6,  2,   0x03a6,   0x03d5, /* GREEK CAPITAL LETTER PHI */
- /* 817*/    0x03c7,  1,   0x03a7, /* GREEK CAPITAL LETTER CHI */
- /* 820*/    0x03c8,  1,   0x03a8, /* GREEK CAPITAL LETTER PSI */
- /* 823*/    0x03c9,  2,   0x03a9,   0x2126, /* GREEK CAPITAL LETTER OMEGA */
- /* 827*/    0x03ca,  1,   0x03aa, /* GREEK CAPITAL LETTER IOTA WITH DI.. */
- /* 830*/    0x03cb,  1,   0x03ab, /* GREEK CAPITAL LETTER UPSILON WITH.. */
- /* 833*/    0x03cc,  1,   0x038c, /* GREEK CAPITAL LETTER OMICRON WITH.. */
- /* 836*/    0x03cd,  1,   0x038e, /* GREEK CAPITAL LETTER UPSILON WITH.. */
- /* 839*/    0x03ce,  1,   0x038f, /* GREEK CAPITAL LETTER OMEGA WITH T.. */
- /* 842*/    0x03d7,  1,   0x03cf, /* GREEK CAPITAL KAI SYMBOL */
- /* 845*/    0x03d9,  1,   0x03d8, /* GREEK LETTER ARCHAIC KOPPA */
- /* 848*/    0x03db,  1,   0x03da, /* GREEK LETTER STIGMA */
- /* 851*/    0x03dd,  1,   0x03dc, /* GREEK LETTER DIGAMMA */
- /* 854*/    0x03df,  1,   0x03de, /* GREEK LETTER KOPPA */
- /* 857*/    0x03e1,  1,   0x03e0, /* GREEK LETTER SAMPI */
- /* 860*/    0x03e3,  1,   0x03e2, /* COPTIC CAPITAL LETTER SHEI */
- /* 863*/    0x03e5,  1,   0x03e4, /* COPTIC CAPITAL LETTER FEI */
- /* 866*/    0x03e7,  1,   0x03e6, /* COPTIC CAPITAL LETTER KHEI */
- /* 869*/    0x03e9,  1,   0x03e8, /* COPTIC CAPITAL LETTER HORI */
- /* 872*/    0x03eb,  1,   0x03ea, /* COPTIC CAPITAL LETTER GANGIA */
- /* 875*/    0x03ed,  1,   0x03ec, /* COPTIC CAPITAL LETTER SHIMA */
- /* 878*/    0x03ef,  1,   0x03ee, /* COPTIC CAPITAL LETTER DEI */
- /* 881*/    0x03f2,  1,   0x03f9, /* GREEK CAPITAL LUNATE SIGMA SYMBOL */
- /* 884*/    0x03f3,  1,   0x037f, /* GREEK CAPITAL LETTER YOT */
- /* 887*/    0x03f8,  1,   0x03f7, /* GREEK CAPITAL LETTER SHO */
- /* 890*/    0x03fb,  1,   0x03fa, /* GREEK CAPITAL LETTER SAN */
- /* 893*/    0x0430,  1,   0x0410, /* CYRILLIC CAPITAL LETTER A */
- /* 896*/    0x0431,  1,   0x0411, /* CYRILLIC CAPITAL LETTER BE */
- /* 899*/    0x0432,  2,   0x0412,   0x1c80, /* CYRILLIC CAPITAL LETTER VE */
- /* 903*/    0x0433,  1,   0x0413, /* CYRILLIC CAPITAL LETTER GHE */
- /* 906*/    0x0434,  2,   0x0414,   0x1c81, /* CYRILLIC CAPITAL LETTER DE */
- /* 910*/    0x0435,  1,   0x0415, /* CYRILLIC CAPITAL LETTER IE */
- /* 913*/    0x0436,  1,   0x0416, /* CYRILLIC CAPITAL LETTER ZHE */
- /* 916*/    0x0437,  1,   0x0417, /* CYRILLIC CAPITAL LETTER ZE */
- /* 919*/    0x0438,  1,   0x0418, /* CYRILLIC CAPITAL LETTER I */
- /* 922*/    0x0439,  1,   0x0419, /* CYRILLIC CAPITAL LETTER SHORT I */
- /* 925*/    0x043a,  1,   0x041a, /* CYRILLIC CAPITAL LETTER KA */
- /* 928*/    0x043b,  1,   0x041b, /* CYRILLIC CAPITAL LETTER EL */
- /* 931*/    0x043c,  1,   0x041c, /* CYRILLIC CAPITAL LETTER EM */
- /* 934*/    0x043d,  1,   0x041d, /* CYRILLIC CAPITAL LETTER EN */
- /* 937*/    0x043e,  2,   0x041e,   0x1c82, /* CYRILLIC CAPITAL LETTER O */
- /* 941*/    0x043f,  1,   0x041f, /* CYRILLIC CAPITAL LETTER PE */
- /* 944*/    0x0440,  1,   0x0420, /* CYRILLIC CAPITAL LETTER ER */
- /* 947*/    0x0441,  2,   0x0421,   0x1c83, /* CYRILLIC CAPITAL LETTER ES */
- /* 951*/    0x0442,  3,   0x0422,   0x1c84,   0x1c85, /* CYRILLIC CAPITAL LETTER TE */
- /* 956*/    0x0443,  1,   0x0423, /* CYRILLIC CAPITAL LETTER U */
- /* 959*/    0x0444,  1,   0x0424, /* CYRILLIC CAPITAL LETTER EF */
- /* 962*/    0x0445,  1,   0x0425, /* CYRILLIC CAPITAL LETTER HA */
- /* 965*/    0x0446,  1,   0x0426, /* CYRILLIC CAPITAL LETTER TSE */
- /* 968*/    0x0447,  1,   0x0427, /* CYRILLIC CAPITAL LETTER CHE */
- /* 971*/    0x0448,  1,   0x0428, /* CYRILLIC CAPITAL LETTER SHA */
- /* 974*/    0x0449,  1,   0x0429, /* CYRILLIC CAPITAL LETTER SHCHA */
- /* 977*/    0x044a,  2,   0x042a,   0x1c86, /* CYRILLIC CAPITAL LETTER HARD SIGN */
- /* 981*/    0x044b,  1,   0x042b, /* CYRILLIC CAPITAL LETTER YERU */
- /* 984*/    0x044c,  1,   0x042c, /* CYRILLIC CAPITAL LETTER SOFT SIGN */
- /* 987*/    0x044d,  1,   0x042d, /* CYRILLIC CAPITAL LETTER E */
- /* 990*/    0x044e,  1,   0x042e, /* CYRILLIC CAPITAL LETTER YU */
- /* 993*/    0x044f,  1,   0x042f, /* CYRILLIC CAPITAL LETTER YA */
- /* 996*/    0x0450,  1,   0x0400, /* CYRILLIC CAPITAL LETTER IE WITH G.. */
- /* 999*/    0x0451,  1,   0x0401, /* CYRILLIC CAPITAL LETTER IO */
- /*1002*/    0x0452,  1,   0x0402, /* CYRILLIC CAPITAL LETTER DJE */
- /*1005*/    0x0453,  1,   0x0403, /* CYRILLIC CAPITAL LETTER GJE */
- /*1008*/    0x0454,  1,   0x0404, /* CYRILLIC CAPITAL LETTER UKRAINIAN.. */
- /*1011*/    0x0455,  1,   0x0405, /* CYRILLIC CAPITAL LETTER DZE */
- /*1014*/    0x0456,  1,   0x0406, /* CYRILLIC CAPITAL LETTER BYELORUSS.. */
- /*1017*/    0x0457,  1,   0x0407, /* CYRILLIC CAPITAL LETTER YI */
- /*1020*/    0x0458,  1,   0x0408, /* CYRILLIC CAPITAL LETTER JE */
- /*1023*/    0x0459,  1,   0x0409, /* CYRILLIC CAPITAL LETTER LJE */
- /*1026*/    0x045a,  1,   0x040a, /* CYRILLIC CAPITAL LETTER NJE */
- /*1029*/    0x045b,  1,   0x040b, /* CYRILLIC CAPITAL LETTER TSHE */
- /*1032*/    0x045c,  1,   0x040c, /* CYRILLIC CAPITAL LETTER KJE */
- /*1035*/    0x045d,  1,   0x040d, /* CYRILLIC CAPITAL LETTER I WITH GR.. */
- /*1038*/    0x045e,  1,   0x040e, /* CYRILLIC CAPITAL LETTER SHORT U */
- /*1041*/    0x045f,  1,   0x040f, /* CYRILLIC CAPITAL LETTER DZHE */
- /*1044*/    0x0461,  1,   0x0460, /* CYRILLIC CAPITAL LETTER OMEGA */
- /*1047*/    0x0463,  2,   0x0462,   0x1c87, /* CYRILLIC CAPITAL LETTER YAT */
- /*1051*/    0x0465,  1,   0x0464, /* CYRILLIC CAPITAL LETTER IOTIFIED E */
- /*1054*/    0x0467,  1,   0x0466, /* CYRILLIC CAPITAL LETTER LITTLE YUS */
- /*1057*/    0x0469,  1,   0x0468, /* CYRILLIC CAPITAL LETTER IOTIFIED .. */
- /*1060*/    0x046b,  1,   0x046a, /* CYRILLIC CAPITAL LETTER BIG YUS */
- /*1063*/    0x046d,  1,   0x046c, /* CYRILLIC CAPITAL LETTER IOTIFIED .. */
- /*1066*/    0x046f,  1,   0x046e, /* CYRILLIC CAPITAL LETTER KSI */
- /*1069*/    0x0471,  1,   0x0470, /* CYRILLIC CAPITAL LETTER PSI */
- /*1072*/    0x0473,  1,   0x0472, /* CYRILLIC CAPITAL LETTER FITA */
- /*1075*/    0x0475,  1,   0x0474, /* CYRILLIC CAPITAL LETTER IZHITSA */
- /*1078*/    0x0477,  1,   0x0476, /* CYRILLIC CAPITAL LETTER IZHITSA W.. */
- /*1081*/    0x0479,  1,   0x0478, /* CYRILLIC CAPITAL LETTER UK */
- /*1084*/    0x047b,  1,   0x047a, /* CYRILLIC CAPITAL LETTER ROUND OME.. */
- /*1087*/    0x047d,  1,   0x047c, /* CYRILLIC CAPITAL LETTER OMEGA WIT.. */
- /*1090*/    0x047f,  1,   0x047e, /* CYRILLIC CAPITAL LETTER OT */
- /*1093*/    0x0481,  1,   0x0480, /* CYRILLIC CAPITAL LETTER KOPPA */
- /*1096*/    0x048b,  1,   0x048a, /* CYRILLIC CAPITAL LETTER SHORT I W.. */
- /*1099*/    0x048d,  1,   0x048c, /* CYRILLIC CAPITAL LETTER SEMISOFT .. */
- /*1102*/    0x048f,  1,   0x048e, /* CYRILLIC CAPITAL LETTER ER WITH T.. */
- /*1105*/    0x0491,  1,   0x0490, /* CYRILLIC CAPITAL LETTER GHE WITH .. */
- /*1108*/    0x0493,  1,   0x0492, /* CYRILLIC CAPITAL LETTER GHE WITH .. */
- /*1111*/    0x0495,  1,   0x0494, /* CYRILLIC CAPITAL LETTER GHE WITH .. */
- /*1114*/    0x0497,  1,   0x0496, /* CYRILLIC CAPITAL LETTER ZHE WITH .. */
- /*1117*/    0x0499,  1,   0x0498, /* CYRILLIC CAPITAL LETTER ZE WITH D.. */
- /*1120*/    0x049b,  1,   0x049a, /* CYRILLIC CAPITAL LETTER KA WITH D.. */
- /*1123*/    0x049d,  1,   0x049c, /* CYRILLIC CAPITAL LETTER KA WITH V.. */
- /*1126*/    0x049f,  1,   0x049e, /* CYRILLIC CAPITAL LETTER KA WITH S.. */
- /*1129*/    0x04a1,  1,   0x04a0, /* CYRILLIC CAPITAL LETTER BASHKIR KA */
- /*1132*/    0x04a3,  1,   0x04a2, /* CYRILLIC CAPITAL LETTER EN WITH D.. */
- /*1135*/    0x04a5,  1,   0x04a4, /* CYRILLIC CAPITAL LIGATURE EN GHE */
- /*1138*/    0x04a7,  1,   0x04a6, /* CYRILLIC CAPITAL LETTER PE WITH M.. */
- /*1141*/    0x04a9,  1,   0x04a8, /* CYRILLIC CAPITAL LETTER ABKHASIAN.. */
- /*1144*/    0x04ab,  1,   0x04aa, /* CYRILLIC CAPITAL LETTER ES WITH D.. */
- /*1147*/    0x04ad,  1,   0x04ac, /* CYRILLIC CAPITAL LETTER TE WITH D.. */
- /*1150*/    0x04af,  1,   0x04ae, /* CYRILLIC CAPITAL LETTER STRAIGHT U */
- /*1153*/    0x04b1,  1,   0x04b0, /* CYRILLIC CAPITAL LETTER STRAIGHT .. */
- /*1156*/    0x04b3,  1,   0x04b2, /* CYRILLIC CAPITAL LETTER HA WITH D.. */
- /*1159*/    0x04b5,  1,   0x04b4, /* CYRILLIC CAPITAL LIGATURE TE TSE */
- /*1162*/    0x04b7,  1,   0x04b6, /* CYRILLIC CAPITAL LETTER CHE WITH .. */
- /*1165*/    0x04b9,  1,   0x04b8, /* CYRILLIC CAPITAL LETTER CHE WITH .. */
- /*1168*/    0x04bb,  1,   0x04ba, /* CYRILLIC CAPITAL LETTER SHHA */
- /*1171*/    0x04bd,  1,   0x04bc, /* CYRILLIC CAPITAL LETTER ABKHASIAN.. */
- /*1174*/    0x04bf,  1,   0x04be, /* CYRILLIC CAPITAL LETTER ABKHASIAN.. */
- /*1177*/    0x04c2,  1,   0x04c1, /* CYRILLIC CAPITAL LETTER ZHE WITH .. */
- /*1180*/    0x04c4,  1,   0x04c3, /* CYRILLIC CAPITAL LETTER KA WITH H.. */
- /*1183*/    0x04c6,  1,   0x04c5, /* CYRILLIC CAPITAL LETTER EL WITH T.. */
- /*1186*/    0x04c8,  1,   0x04c7, /* CYRILLIC CAPITAL LETTER EN WITH H.. */
- /*1189*/    0x04ca,  1,   0x04c9, /* CYRILLIC CAPITAL LETTER EN WITH T.. */
- /*1192*/    0x04cc,  1,   0x04cb, /* CYRILLIC CAPITAL LETTER KHAKASSIA.. */
- /*1195*/    0x04ce,  1,   0x04cd, /* CYRILLIC CAPITAL LETTER EM WITH T.. */
- /*1198*/    0x04cf,  1,   0x04c0, /* CYRILLIC LETTER PALOCHKA */
- /*1201*/    0x04d1,  1,   0x04d0, /* CYRILLIC CAPITAL LETTER A WITH BR.. */
- /*1204*/    0x04d3,  1,   0x04d2, /* CYRILLIC CAPITAL LETTER A WITH DI.. */
- /*1207*/    0x04d5,  1,   0x04d4, /* CYRILLIC CAPITAL LIGATURE A IE */
- /*1210*/    0x04d7,  1,   0x04d6, /* CYRILLIC CAPITAL LETTER IE WITH B.. */
- /*1213*/    0x04d9,  1,   0x04d8, /* CYRILLIC CAPITAL LETTER SCHWA */
- /*1216*/    0x04db,  1,   0x04da, /* CYRILLIC CAPITAL LETTER SCHWA WIT.. */
- /*1219*/    0x04dd,  1,   0x04dc, /* CYRILLIC CAPITAL LETTER ZHE WITH .. */
- /*1222*/    0x04df,  1,   0x04de, /* CYRILLIC CAPITAL LETTER ZE WITH D.. */
- /*1225*/    0x04e1,  1,   0x04e0, /* CYRILLIC CAPITAL LETTER ABKHASIAN.. */
- /*1228*/    0x04e3,  1,   0x04e2, /* CYRILLIC CAPITAL LETTER I WITH MA.. */
- /*1231*/    0x04e5,  1,   0x04e4, /* CYRILLIC CAPITAL LETTER I WITH DI.. */
- /*1234*/    0x04e7,  1,   0x04e6, /* CYRILLIC CAPITAL LETTER O WITH DI.. */
- /*1237*/    0x04e9,  1,   0x04e8, /* CYRILLIC CAPITAL LETTER BARRED O */
- /*1240*/    0x04eb,  1,   0x04ea, /* CYRILLIC CAPITAL LETTER BARRED O .. */
- /*1243*/    0x04ed,  1,   0x04ec, /* CYRILLIC CAPITAL LETTER E WITH DI.. */
- /*1246*/    0x04ef,  1,   0x04ee, /* CYRILLIC CAPITAL LETTER U WITH MA.. */
- /*1249*/    0x04f1,  1,   0x04f0, /* CYRILLIC CAPITAL LETTER U WITH DI.. */
- /*1252*/    0x04f3,  1,   0x04f2, /* CYRILLIC CAPITAL LETTER U WITH DO.. */
- /*1255*/    0x04f5,  1,   0x04f4, /* CYRILLIC CAPITAL LETTER CHE WITH .. */
- /*1258*/    0x04f7,  1,   0x04f6, /* CYRILLIC CAPITAL LETTER GHE WITH .. */
- /*1261*/    0x04f9,  1,   0x04f8, /* CYRILLIC CAPITAL LETTER YERU WITH.. */
- /*1264*/    0x04fb,  1,   0x04fa, /* CYRILLIC CAPITAL LETTER GHE WITH .. */
- /*1267*/    0x04fd,  1,   0x04fc, /* CYRILLIC CAPITAL LETTER HA WITH H.. */
- /*1270*/    0x04ff,  1,   0x04fe, /* CYRILLIC CAPITAL LETTER HA WITH S.. */
- /*1273*/    0x0501,  1,   0x0500, /* CYRILLIC CAPITAL LETTER KOMI DE */
- /*1276*/    0x0503,  1,   0x0502, /* CYRILLIC CAPITAL LETTER KOMI DJE */
- /*1279*/    0x0505,  1,   0x0504, /* CYRILLIC CAPITAL LETTER KOMI ZJE */
- /*1282*/    0x0507,  1,   0x0506, /* CYRILLIC CAPITAL LETTER KOMI DZJE */
- /*1285*/    0x0509,  1,   0x0508, /* CYRILLIC CAPITAL LETTER KOMI LJE */
- /*1288*/    0x050b,  1,   0x050a, /* CYRILLIC CAPITAL LETTER KOMI NJE */
- /*1291*/    0x050d,  1,   0x050c, /* CYRILLIC CAPITAL LETTER KOMI SJE */
- /*1294*/    0x050f,  1,   0x050e, /* CYRILLIC CAPITAL LETTER KOMI TJE */
- /*1297*/    0x0511,  1,   0x0510, /* CYRILLIC CAPITAL LETTER REVERSED .. */
- /*1300*/    0x0513,  1,   0x0512, /* CYRILLIC CAPITAL LETTER EL WITH H.. */
- /*1303*/    0x0515,  1,   0x0514, /* CYRILLIC CAPITAL LETTER LHA */
- /*1306*/    0x0517,  1,   0x0516, /* CYRILLIC CAPITAL LETTER RHA */
- /*1309*/    0x0519,  1,   0x0518, /* CYRILLIC CAPITAL LETTER YAE */
- /*1312*/    0x051b,  1,   0x051a, /* CYRILLIC CAPITAL LETTER QA */
- /*1315*/    0x051d,  1,   0x051c, /* CYRILLIC CAPITAL LETTER WE */
- /*1318*/    0x051f,  1,   0x051e, /* CYRILLIC CAPITAL LETTER ALEUT KA */
- /*1321*/    0x0521,  1,   0x0520, /* CYRILLIC CAPITAL LETTER EL WITH M.. */
- /*1324*/    0x0523,  1,   0x0522, /* CYRILLIC CAPITAL LETTER EN WITH M.. */
- /*1327*/    0x0525,  1,   0x0524, /* CYRILLIC CAPITAL LETTER PE WITH D.. */
- /*1330*/    0x0527,  1,   0x0526, /* CYRILLIC CAPITAL LETTER SHHA WITH.. */
- /*1333*/    0x0529,  1,   0x0528, /* CYRILLIC CAPITAL LETTER EN WITH L.. */
- /*1336*/    0x052b,  1,   0x052a, /* CYRILLIC CAPITAL LETTER DZZHE */
- /*1339*/    0x052d,  1,   0x052c, /* CYRILLIC CAPITAL LETTER DCHE */
- /*1342*/    0x052f,  1,   0x052e, /* CYRILLIC CAPITAL LETTER EL WITH D.. */
- /*1345*/    0x0561,  1,   0x0531, /* ARMENIAN CAPITAL LETTER AYB */
- /*1348*/    0x0562,  1,   0x0532, /* ARMENIAN CAPITAL LETTER BEN */
- /*1351*/    0x0563,  1,   0x0533, /* ARMENIAN CAPITAL LETTER GIM */
- /*1354*/    0x0564,  1,   0x0534, /* ARMENIAN CAPITAL LETTER DA */
- /*1357*/    0x0565,  1,   0x0535, /* ARMENIAN CAPITAL LETTER ECH */
- /*1360*/    0x0566,  1,   0x0536, /* ARMENIAN CAPITAL LETTER ZA */
- /*1363*/    0x0567,  1,   0x0537, /* ARMENIAN CAPITAL LETTER EH */
- /*1366*/    0x0568,  1,   0x0538, /* ARMENIAN CAPITAL LETTER ET */
- /*1369*/    0x0569,  1,   0x0539, /* ARMENIAN CAPITAL LETTER TO */
- /*1372*/    0x056a,  1,   0x053a, /* ARMENIAN CAPITAL LETTER ZHE */
- /*1375*/    0x056b,  1,   0x053b, /* ARMENIAN CAPITAL LETTER INI */
- /*1378*/    0x056c,  1,   0x053c, /* ARMENIAN CAPITAL LETTER LIWN */
- /*1381*/    0x056d,  1,   0x053d, /* ARMENIAN CAPITAL LETTER XEH */
- /*1384*/    0x056e,  1,   0x053e, /* ARMENIAN CAPITAL LETTER CA */
- /*1387*/    0x056f,  1,   0x053f, /* ARMENIAN CAPITAL LETTER KEN */
- /*1390*/    0x0570,  1,   0x0540, /* ARMENIAN CAPITAL LETTER HO */
- /*1393*/    0x0571,  1,   0x0541, /* ARMENIAN CAPITAL LETTER JA */
- /*1396*/    0x0572,  1,   0x0542, /* ARMENIAN CAPITAL LETTER GHAD */
- /*1399*/    0x0573,  1,   0x0543, /* ARMENIAN CAPITAL LETTER CHEH */
- /*1402*/    0x0574,  1,   0x0544, /* ARMENIAN CAPITAL LETTER MEN */
- /*1405*/    0x0575,  1,   0x0545, /* ARMENIAN CAPITAL LETTER YI */
- /*1408*/    0x0576,  1,   0x0546, /* ARMENIAN CAPITAL LETTER NOW */
- /*1411*/    0x0577,  1,   0x0547, /* ARMENIAN CAPITAL LETTER SHA */
- /*1414*/    0x0578,  1,   0x0548, /* ARMENIAN CAPITAL LETTER VO */
- /*1417*/    0x0579,  1,   0x0549, /* ARMENIAN CAPITAL LETTER CHA */
- /*1420*/    0x057a,  1,   0x054a, /* ARMENIAN CAPITAL LETTER PEH */
- /*1423*/    0x057b,  1,   0x054b, /* ARMENIAN CAPITAL LETTER JHEH */
- /*1426*/    0x057c,  1,   0x054c, /* ARMENIAN CAPITAL LETTER RA */
- /*1429*/    0x057d,  1,   0x054d, /* ARMENIAN CAPITAL LETTER SEH */
- /*1432*/    0x057e,  1,   0x054e, /* ARMENIAN CAPITAL LETTER VEW */
- /*1435*/    0x057f,  1,   0x054f, /* ARMENIAN CAPITAL LETTER TIWN */
- /*1438*/    0x0580,  1,   0x0550, /* ARMENIAN CAPITAL LETTER REH */
- /*1441*/    0x0581,  1,   0x0551, /* ARMENIAN CAPITAL LETTER CO */
- /*1444*/    0x0582,  1,   0x0552, /* ARMENIAN CAPITAL LETTER YIWN */
- /*1447*/    0x0583,  1,   0x0553, /* ARMENIAN CAPITAL LETTER PIWR */
- /*1450*/    0x0584,  1,   0x0554, /* ARMENIAN CAPITAL LETTER KEH */
- /*1453*/    0x0585,  1,   0x0555, /* ARMENIAN CAPITAL LETTER OH */
- /*1456*/    0x0586,  1,   0x0556, /* ARMENIAN CAPITAL LETTER FEH */
- /*1459*/    0x10d0,  1,   0x1c90, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1462*/    0x10d1,  1,   0x1c91, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1465*/    0x10d2,  1,   0x1c92, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1468*/    0x10d3,  1,   0x1c93, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1471*/    0x10d4,  1,   0x1c94, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1474*/    0x10d5,  1,   0x1c95, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1477*/    0x10d6,  1,   0x1c96, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1480*/    0x10d7,  1,   0x1c97, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1483*/    0x10d8,  1,   0x1c98, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1486*/    0x10d9,  1,   0x1c99, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1489*/    0x10da,  1,   0x1c9a, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1492*/    0x10db,  1,   0x1c9b, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1495*/    0x10dc,  1,   0x1c9c, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1498*/    0x10dd,  1,   0x1c9d, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1501*/    0x10de,  1,   0x1c9e, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1504*/    0x10df,  1,   0x1c9f, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1507*/    0x10e0,  1,   0x1ca0, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1510*/    0x10e1,  1,   0x1ca1, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1513*/    0x10e2,  1,   0x1ca2, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1516*/    0x10e3,  1,   0x1ca3, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1519*/    0x10e4,  1,   0x1ca4, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1522*/    0x10e5,  1,   0x1ca5, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1525*/    0x10e6,  1,   0x1ca6, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1528*/    0x10e7,  1,   0x1ca7, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1531*/    0x10e8,  1,   0x1ca8, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1534*/    0x10e9,  1,   0x1ca9, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1537*/    0x10ea,  1,   0x1caa, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1540*/    0x10eb,  1,   0x1cab, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1543*/    0x10ec,  1,   0x1cac, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1546*/    0x10ed,  1,   0x1cad, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1549*/    0x10ee,  1,   0x1cae, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1552*/    0x10ef,  1,   0x1caf, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1555*/    0x10f0,  1,   0x1cb0, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1558*/    0x10f1,  1,   0x1cb1, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1561*/    0x10f2,  1,   0x1cb2, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1564*/    0x10f3,  1,   0x1cb3, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1567*/    0x10f4,  1,   0x1cb4, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1570*/    0x10f5,  1,   0x1cb5, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1573*/    0x10f6,  1,   0x1cb6, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1576*/    0x10f7,  1,   0x1cb7, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1579*/    0x10f8,  1,   0x1cb8, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1582*/    0x10f9,  1,   0x1cb9, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1585*/    0x10fa,  1,   0x1cba, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1588*/    0x10fd,  1,   0x1cbd, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1591*/    0x10fe,  1,   0x1cbe, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1594*/    0x10ff,  1,   0x1cbf, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
- /*1597*/    0x13a0,  1,   0xab70, /* CHEROKEE SMALL LETTER A */
- /*1600*/    0x13a1,  1,   0xab71, /* CHEROKEE SMALL LETTER E */
- /*1603*/    0x13a2,  1,   0xab72, /* CHEROKEE SMALL LETTER I */
- /*1606*/    0x13a3,  1,   0xab73, /* CHEROKEE SMALL LETTER O */
- /*1609*/    0x13a4,  1,   0xab74, /* CHEROKEE SMALL LETTER U */
- /*1612*/    0x13a5,  1,   0xab75, /* CHEROKEE SMALL LETTER V */
- /*1615*/    0x13a6,  1,   0xab76, /* CHEROKEE SMALL LETTER GA */
- /*1618*/    0x13a7,  1,   0xab77, /* CHEROKEE SMALL LETTER KA */
- /*1621*/    0x13a8,  1,   0xab78, /* CHEROKEE SMALL LETTER GE */
- /*1624*/    0x13a9,  1,   0xab79, /* CHEROKEE SMALL LETTER GI */
- /*1627*/    0x13aa,  1,   0xab7a, /* CHEROKEE SMALL LETTER GO */
- /*1630*/    0x13ab,  1,   0xab7b, /* CHEROKEE SMALL LETTER GU */
- /*1633*/    0x13ac,  1,   0xab7c, /* CHEROKEE SMALL LETTER GV */
- /*1636*/    0x13ad,  1,   0xab7d, /* CHEROKEE SMALL LETTER HA */
- /*1639*/    0x13ae,  1,   0xab7e, /* CHEROKEE SMALL LETTER HE */
- /*1642*/    0x13af,  1,   0xab7f, /* CHEROKEE SMALL LETTER HI */
- /*1645*/    0x13b0,  1,   0xab80, /* CHEROKEE SMALL LETTER HO */
- /*1648*/    0x13b1,  1,   0xab81, /* CHEROKEE SMALL LETTER HU */
- /*1651*/    0x13b2,  1,   0xab82, /* CHEROKEE SMALL LETTER HV */
- /*1654*/    0x13b3,  1,   0xab83, /* CHEROKEE SMALL LETTER LA */
- /*1657*/    0x13b4,  1,   0xab84, /* CHEROKEE SMALL LETTER LE */
- /*1660*/    0x13b5,  1,   0xab85, /* CHEROKEE SMALL LETTER LI */
- /*1663*/    0x13b6,  1,   0xab86, /* CHEROKEE SMALL LETTER LO */
- /*1666*/    0x13b7,  1,   0xab87, /* CHEROKEE SMALL LETTER LU */
- /*1669*/    0x13b8,  1,   0xab88, /* CHEROKEE SMALL LETTER LV */
- /*1672*/    0x13b9,  1,   0xab89, /* CHEROKEE SMALL LETTER MA */
- /*1675*/    0x13ba,  1,   0xab8a, /* CHEROKEE SMALL LETTER ME */
- /*1678*/    0x13bb,  1,   0xab8b, /* CHEROKEE SMALL LETTER MI */
- /*1681*/    0x13bc,  1,   0xab8c, /* CHEROKEE SMALL LETTER MO */
- /*1684*/    0x13bd,  1,   0xab8d, /* CHEROKEE SMALL LETTER MU */
- /*1687*/    0x13be,  1,   0xab8e, /* CHEROKEE SMALL LETTER NA */
- /*1690*/    0x13bf,  1,   0xab8f, /* CHEROKEE SMALL LETTER HNA */
- /*1693*/    0x13c0,  1,   0xab90, /* CHEROKEE SMALL LETTER NAH */
- /*1696*/    0x13c1,  1,   0xab91, /* CHEROKEE SMALL LETTER NE */
- /*1699*/    0x13c2,  1,   0xab92, /* CHEROKEE SMALL LETTER NI */
- /*1702*/    0x13c3,  1,   0xab93, /* CHEROKEE SMALL LETTER NO */
- /*1705*/    0x13c4,  1,   0xab94, /* CHEROKEE SMALL LETTER NU */
- /*1708*/    0x13c5,  1,   0xab95, /* CHEROKEE SMALL LETTER NV */
- /*1711*/    0x13c6,  1,   0xab96, /* CHEROKEE SMALL LETTER QUA */
- /*1714*/    0x13c7,  1,   0xab97, /* CHEROKEE SMALL LETTER QUE */
- /*1717*/    0x13c8,  1,   0xab98, /* CHEROKEE SMALL LETTER QUI */
- /*1720*/    0x13c9,  1,   0xab99, /* CHEROKEE SMALL LETTER QUO */
- /*1723*/    0x13ca,  1,   0xab9a, /* CHEROKEE SMALL LETTER QUU */
- /*1726*/    0x13cb,  1,   0xab9b, /* CHEROKEE SMALL LETTER QUV */
- /*1729*/    0x13cc,  1,   0xab9c, /* CHEROKEE SMALL LETTER SA */
- /*1732*/    0x13cd,  1,   0xab9d, /* CHEROKEE SMALL LETTER S */
- /*1735*/    0x13ce,  1,   0xab9e, /* CHEROKEE SMALL LETTER SE */
- /*1738*/    0x13cf,  1,   0xab9f, /* CHEROKEE SMALL LETTER SI */
- /*1741*/    0x13d0,  1,   0xaba0, /* CHEROKEE SMALL LETTER SO */
- /*1744*/    0x13d1,  1,   0xaba1, /* CHEROKEE SMALL LETTER SU */
- /*1747*/    0x13d2,  1,   0xaba2, /* CHEROKEE SMALL LETTER SV */
- /*1750*/    0x13d3,  1,   0xaba3, /* CHEROKEE SMALL LETTER DA */
- /*1753*/    0x13d4,  1,   0xaba4, /* CHEROKEE SMALL LETTER TA */
- /*1756*/    0x13d5,  1,   0xaba5, /* CHEROKEE SMALL LETTER DE */
- /*1759*/    0x13d6,  1,   0xaba6, /* CHEROKEE SMALL LETTER TE */
- /*1762*/    0x13d7,  1,   0xaba7, /* CHEROKEE SMALL LETTER DI */
- /*1765*/    0x13d8,  1,   0xaba8, /* CHEROKEE SMALL LETTER TI */
- /*1768*/    0x13d9,  1,   0xaba9, /* CHEROKEE SMALL LETTER DO */
- /*1771*/    0x13da,  1,   0xabaa, /* CHEROKEE SMALL LETTER DU */
- /*1774*/    0x13db,  1,   0xabab, /* CHEROKEE SMALL LETTER DV */
- /*1777*/    0x13dc,  1,   0xabac, /* CHEROKEE SMALL LETTER DLA */
- /*1780*/    0x13dd,  1,   0xabad, /* CHEROKEE SMALL LETTER TLA */
- /*1783*/    0x13de,  1,   0xabae, /* CHEROKEE SMALL LETTER TLE */
- /*1786*/    0x13df,  1,   0xabaf, /* CHEROKEE SMALL LETTER TLI */
- /*1789*/    0x13e0,  1,   0xabb0, /* CHEROKEE SMALL LETTER TLO */
- /*1792*/    0x13e1,  1,   0xabb1, /* CHEROKEE SMALL LETTER TLU */
- /*1795*/    0x13e2,  1,   0xabb2, /* CHEROKEE SMALL LETTER TLV */
- /*1798*/    0x13e3,  1,   0xabb3, /* CHEROKEE SMALL LETTER TSA */
- /*1801*/    0x13e4,  1,   0xabb4, /* CHEROKEE SMALL LETTER TSE */
- /*1804*/    0x13e5,  1,   0xabb5, /* CHEROKEE SMALL LETTER TSI */
- /*1807*/    0x13e6,  1,   0xabb6, /* CHEROKEE SMALL LETTER TSO */
- /*1810*/    0x13e7,  1,   0xabb7, /* CHEROKEE SMALL LETTER TSU */
- /*1813*/    0x13e8,  1,   0xabb8, /* CHEROKEE SMALL LETTER TSV */
- /*1816*/    0x13e9,  1,   0xabb9, /* CHEROKEE SMALL LETTER WA */
- /*1819*/    0x13ea,  1,   0xabba, /* CHEROKEE SMALL LETTER WE */
- /*1822*/    0x13eb,  1,   0xabbb, /* CHEROKEE SMALL LETTER WI */
- /*1825*/    0x13ec,  1,   0xabbc, /* CHEROKEE SMALL LETTER WO */
- /*1828*/    0x13ed,  1,   0xabbd, /* CHEROKEE SMALL LETTER WU */
- /*1831*/    0x13ee,  1,   0xabbe, /* CHEROKEE SMALL LETTER WV */
- /*1834*/    0x13ef,  1,   0xabbf, /* CHEROKEE SMALL LETTER YA */
- /*1837*/    0x13f0,  1,   0x13f8, /* CHEROKEE SMALL LETTER YE */
- /*1840*/    0x13f1,  1,   0x13f9, /* CHEROKEE SMALL LETTER YI */
- /*1843*/    0x13f2,  1,   0x13fa, /* CHEROKEE SMALL LETTER YO */
- /*1846*/    0x13f3,  1,   0x13fb, /* CHEROKEE SMALL LETTER YU */
- /*1849*/    0x13f4,  1,   0x13fc, /* CHEROKEE SMALL LETTER YV */
- /*1852*/    0x13f5,  1,   0x13fd, /* CHEROKEE SMALL LETTER MV */
- /*1855*/    0x1d79,  1,   0xa77d, /* LATIN CAPITAL LETTER INSULAR G */
- /*1858*/    0x1d7d,  1,   0x2c63, /* LATIN CAPITAL LETTER P WITH STROKE */
- /*1861*/    0x1e01,  1,   0x1e00, /* LATIN CAPITAL LETTER A WITH RING .. */
- /*1864*/    0x1e03,  1,   0x1e02, /* LATIN CAPITAL LETTER B WITH DOT A.. */
- /*1867*/    0x1e05,  1,   0x1e04, /* LATIN CAPITAL LETTER B WITH DOT B.. */
- /*1870*/    0x1e07,  1,   0x1e06, /* LATIN CAPITAL LETTER B WITH LINE .. */
- /*1873*/    0x1e09,  1,   0x1e08, /* LATIN CAPITAL LETTER C WITH CEDIL.. */
- /*1876*/    0x1e0b,  1,   0x1e0a, /* LATIN CAPITAL LETTER D WITH DOT A.. */
- /*1879*/    0x1e0d,  1,   0x1e0c, /* LATIN CAPITAL LETTER D WITH DOT B.. */
- /*1882*/    0x1e0f,  1,   0x1e0e, /* LATIN CAPITAL LETTER D WITH LINE .. */
- /*1885*/    0x1e11,  1,   0x1e10, /* LATIN CAPITAL LETTER D WITH CEDIL.. */
- /*1888*/    0x1e13,  1,   0x1e12, /* LATIN CAPITAL LETTER D WITH CIRCU.. */
- /*1891*/    0x1e15,  1,   0x1e14, /* LATIN CAPITAL LETTER E WITH MACRO.. */
- /*1894*/    0x1e17,  1,   0x1e16, /* LATIN CAPITAL LETTER E WITH MACRO.. */
- /*1897*/    0x1e19,  1,   0x1e18, /* LATIN CAPITAL LETTER E WITH CIRCU.. */
- /*1900*/    0x1e1b,  1,   0x1e1a, /* LATIN CAPITAL LETTER E WITH TILDE.. */
- /*1903*/    0x1e1d,  1,   0x1e1c, /* LATIN CAPITAL LETTER E WITH CEDIL.. */
- /*1906*/    0x1e1f,  1,   0x1e1e, /* LATIN CAPITAL LETTER F WITH DOT A.. */
- /*1909*/    0x1e21,  1,   0x1e20, /* LATIN CAPITAL LETTER G WITH MACRON */
- /*1912*/    0x1e23,  1,   0x1e22, /* LATIN CAPITAL LETTER H WITH DOT A.. */
- /*1915*/    0x1e25,  1,   0x1e24, /* LATIN CAPITAL LETTER H WITH DOT B.. */
- /*1918*/    0x1e27,  1,   0x1e26, /* LATIN CAPITAL LETTER H WITH DIAER.. */
- /*1921*/    0x1e29,  1,   0x1e28, /* LATIN CAPITAL LETTER H WITH CEDIL.. */
- /*1924*/    0x1e2b,  1,   0x1e2a, /* LATIN CAPITAL LETTER H WITH BREVE.. */
- /*1927*/    0x1e2d,  1,   0x1e2c, /* LATIN CAPITAL LETTER I WITH TILDE.. */
- /*1930*/    0x1e2f,  1,   0x1e2e, /* LATIN CAPITAL LETTER I WITH DIAER.. */
- /*1933*/    0x1e31,  1,   0x1e30, /* LATIN CAPITAL LETTER K WITH ACUTE */
- /*1936*/    0x1e33,  1,   0x1e32, /* LATIN CAPITAL LETTER K WITH DOT B.. */
- /*1939*/    0x1e35,  1,   0x1e34, /* LATIN CAPITAL LETTER K WITH LINE .. */
- /*1942*/    0x1e37,  1,   0x1e36, /* LATIN CAPITAL LETTER L WITH DOT B.. */
- /*1945*/    0x1e39,  1,   0x1e38, /* LATIN CAPITAL LETTER L WITH DOT B.. */
- /*1948*/    0x1e3b,  1,   0x1e3a, /* LATIN CAPITAL LETTER L WITH LINE .. */
- /*1951*/    0x1e3d,  1,   0x1e3c, /* LATIN CAPITAL LETTER L WITH CIRCU.. */
- /*1954*/    0x1e3f,  1,   0x1e3e, /* LATIN CAPITAL LETTER M WITH ACUTE */
- /*1957*/    0x1e41,  1,   0x1e40, /* LATIN CAPITAL LETTER M WITH DOT A.. */
- /*1960*/    0x1e43,  1,   0x1e42, /* LATIN CAPITAL LETTER M WITH DOT B.. */
- /*1963*/    0x1e45,  1,   0x1e44, /* LATIN CAPITAL LETTER N WITH DOT A.. */
- /*1966*/    0x1e47,  1,   0x1e46, /* LATIN CAPITAL LETTER N WITH DOT B.. */
- /*1969*/    0x1e49,  1,   0x1e48, /* LATIN CAPITAL LETTER N WITH LINE .. */
- /*1972*/    0x1e4b,  1,   0x1e4a, /* LATIN CAPITAL LETTER N WITH CIRCU.. */
- /*1975*/    0x1e4d,  1,   0x1e4c, /* LATIN CAPITAL LETTER O WITH TILDE.. */
- /*1978*/    0x1e4f,  1,   0x1e4e, /* LATIN CAPITAL LETTER O WITH TILDE.. */
- /*1981*/    0x1e51,  1,   0x1e50, /* LATIN CAPITAL LETTER O WITH MACRO.. */
- /*1984*/    0x1e53,  1,   0x1e52, /* LATIN CAPITAL LETTER O WITH MACRO.. */
- /*1987*/    0x1e55,  1,   0x1e54, /* LATIN CAPITAL LETTER P WITH ACUTE */
- /*1990*/    0x1e57,  1,   0x1e56, /* LATIN CAPITAL LETTER P WITH DOT A.. */
- /*1993*/    0x1e59,  1,   0x1e58, /* LATIN CAPITAL LETTER R WITH DOT A.. */
- /*1996*/    0x1e5b,  1,   0x1e5a, /* LATIN CAPITAL LETTER R WITH DOT B.. */
- /*1999*/    0x1e5d,  1,   0x1e5c, /* LATIN CAPITAL LETTER R WITH DOT B.. */
- /*2002*/    0x1e5f,  1,   0x1e5e, /* LATIN CAPITAL LETTER R WITH LINE .. */
- /*2005*/    0x1e61,  2,   0x1e60,   0x1e9b, /* LATIN CAPITAL LETTER S WITH DOT A.. */
- /*2009*/    0x1e63,  1,   0x1e62, /* LATIN CAPITAL LETTER S WITH DOT B.. */
- /*2012*/    0x1e65,  1,   0x1e64, /* LATIN CAPITAL LETTER S WITH ACUTE.. */
- /*2015*/    0x1e67,  1,   0x1e66, /* LATIN CAPITAL LETTER S WITH CARON.. */
- /*2018*/    0x1e69,  1,   0x1e68, /* LATIN CAPITAL LETTER S WITH DOT B.. */
- /*2021*/    0x1e6b,  1,   0x1e6a, /* LATIN CAPITAL LETTER T WITH DOT A.. */
- /*2024*/    0x1e6d,  1,   0x1e6c, /* LATIN CAPITAL LETTER T WITH DOT B.. */
- /*2027*/    0x1e6f,  1,   0x1e6e, /* LATIN CAPITAL LETTER T WITH LINE .. */
- /*2030*/    0x1e71,  1,   0x1e70, /* LATIN CAPITAL LETTER T WITH CIRCU.. */
- /*2033*/    0x1e73,  1,   0x1e72, /* LATIN CAPITAL LETTER U WITH DIAER.. */
- /*2036*/    0x1e75,  1,   0x1e74, /* LATIN CAPITAL LETTER U WITH TILDE.. */
- /*2039*/    0x1e77,  1,   0x1e76, /* LATIN CAPITAL LETTER U WITH CIRCU.. */
- /*2042*/    0x1e79,  1,   0x1e78, /* LATIN CAPITAL LETTER U WITH TILDE.. */
- /*2045*/    0x1e7b,  1,   0x1e7a, /* LATIN CAPITAL LETTER U WITH MACRO.. */
- /*2048*/    0x1e7d,  1,   0x1e7c, /* LATIN CAPITAL LETTER V WITH TILDE */
- /*2051*/    0x1e7f,  1,   0x1e7e, /* LATIN CAPITAL LETTER V WITH DOT B.. */
- /*2054*/    0x1e81,  1,   0x1e80, /* LATIN CAPITAL LETTER W WITH GRAVE */
- /*2057*/    0x1e83,  1,   0x1e82, /* LATIN CAPITAL LETTER W WITH ACUTE */
- /*2060*/    0x1e85,  1,   0x1e84, /* LATIN CAPITAL LETTER W WITH DIAER.. */
- /*2063*/    0x1e87,  1,   0x1e86, /* LATIN CAPITAL LETTER W WITH DOT A.. */
- /*2066*/    0x1e89,  1,   0x1e88, /* LATIN CAPITAL LETTER W WITH DOT B.. */
- /*2069*/    0x1e8b,  1,   0x1e8a, /* LATIN CAPITAL LETTER X WITH DOT A.. */
- /*2072*/    0x1e8d,  1,   0x1e8c, /* LATIN CAPITAL LETTER X WITH DIAER.. */
- /*2075*/    0x1e8f,  1,   0x1e8e, /* LATIN CAPITAL LETTER Y WITH DOT A.. */
- /*2078*/    0x1e91,  1,   0x1e90, /* LATIN CAPITAL LETTER Z WITH CIRCU.. */
- /*2081*/    0x1e93,  1,   0x1e92, /* LATIN CAPITAL LETTER Z WITH DOT B.. */
- /*2084*/    0x1e95,  1,   0x1e94, /* LATIN CAPITAL LETTER Z WITH LINE .. */
- /*2087*/    0x1ea1,  1,   0x1ea0, /* LATIN CAPITAL LETTER A WITH DOT B.. */
- /*2090*/    0x1ea3,  1,   0x1ea2, /* LATIN CAPITAL LETTER A WITH HOOK .. */
- /*2093*/    0x1ea5,  1,   0x1ea4, /* LATIN CAPITAL LETTER A WITH CIRCU.. */
- /*2096*/    0x1ea7,  1,   0x1ea6, /* LATIN CAPITAL LETTER A WITH CIRCU.. */
- /*2099*/    0x1ea9,  1,   0x1ea8, /* LATIN CAPITAL LETTER A WITH CIRCU.. */
- /*2102*/    0x1eab,  1,   0x1eaa, /* LATIN CAPITAL LETTER A WITH CIRCU.. */
- /*2105*/    0x1ead,  1,   0x1eac, /* LATIN CAPITAL LETTER A WITH CIRCU.. */
- /*2108*/    0x1eaf,  1,   0x1eae, /* LATIN CAPITAL LETTER A WITH BREVE.. */
- /*2111*/    0x1eb1,  1,   0x1eb0, /* LATIN CAPITAL LETTER A WITH BREVE.. */
- /*2114*/    0x1eb3,  1,   0x1eb2, /* LATIN CAPITAL LETTER A WITH BREVE.. */
- /*2117*/    0x1eb5,  1,   0x1eb4, /* LATIN CAPITAL LETTER A WITH BREVE.. */
- /*2120*/    0x1eb7,  1,   0x1eb6, /* LATIN CAPITAL LETTER A WITH BREVE.. */
- /*2123*/    0x1eb9,  1,   0x1eb8, /* LATIN CAPITAL LETTER E WITH DOT B.. */
- /*2126*/    0x1ebb,  1,   0x1eba, /* LATIN CAPITAL LETTER E WITH HOOK .. */
- /*2129*/    0x1ebd,  1,   0x1ebc, /* LATIN CAPITAL LETTER E WITH TILDE */
- /*2132*/    0x1ebf,  1,   0x1ebe, /* LATIN CAPITAL LETTER E WITH CIRCU.. */
- /*2135*/    0x1ec1,  1,   0x1ec0, /* LATIN CAPITAL LETTER E WITH CIRCU.. */
- /*2138*/    0x1ec3,  1,   0x1ec2, /* LATIN CAPITAL LETTER E WITH CIRCU.. */
- /*2141*/    0x1ec5,  1,   0x1ec4, /* LATIN CAPITAL LETTER E WITH CIRCU.. */
- /*2144*/    0x1ec7,  1,   0x1ec6, /* LATIN CAPITAL LETTER E WITH CIRCU.. */
- /*2147*/    0x1ec9,  1,   0x1ec8, /* LATIN CAPITAL LETTER I WITH HOOK .. */
- /*2150*/    0x1ecb,  1,   0x1eca, /* LATIN CAPITAL LETTER I WITH DOT B.. */
- /*2153*/    0x1ecd,  1,   0x1ecc, /* LATIN CAPITAL LETTER O WITH DOT B.. */
- /*2156*/    0x1ecf,  1,   0x1ece, /* LATIN CAPITAL LETTER O WITH HOOK .. */
- /*2159*/    0x1ed1,  1,   0x1ed0, /* LATIN CAPITAL LETTER O WITH CIRCU.. */
- /*2162*/    0x1ed3,  1,   0x1ed2, /* LATIN CAPITAL LETTER O WITH CIRCU.. */
- /*2165*/    0x1ed5,  1,   0x1ed4, /* LATIN CAPITAL LETTER O WITH CIRCU.. */
- /*2168*/    0x1ed7,  1,   0x1ed6, /* LATIN CAPITAL LETTER O WITH CIRCU.. */
- /*2171*/    0x1ed9,  1,   0x1ed8, /* LATIN CAPITAL LETTER O WITH CIRCU.. */
- /*2174*/    0x1edb,  1,   0x1eda, /* LATIN CAPITAL LETTER O WITH HORN .. */
- /*2177*/    0x1edd,  1,   0x1edc, /* LATIN CAPITAL LETTER O WITH HORN .. */
- /*2180*/    0x1edf,  1,   0x1ede, /* LATIN CAPITAL LETTER O WITH HORN .. */
- /*2183*/    0x1ee1,  1,   0x1ee0, /* LATIN CAPITAL LETTER O WITH HORN .. */
- /*2186*/    0x1ee3,  1,   0x1ee2, /* LATIN CAPITAL LETTER O WITH HORN .. */
- /*2189*/    0x1ee5,  1,   0x1ee4, /* LATIN CAPITAL LETTER U WITH DOT B.. */
- /*2192*/    0x1ee7,  1,   0x1ee6, /* LATIN CAPITAL LETTER U WITH HOOK .. */
- /*2195*/    0x1ee9,  1,   0x1ee8, /* LATIN CAPITAL LETTER U WITH HORN .. */
- /*2198*/    0x1eeb,  1,   0x1eea, /* LATIN CAPITAL LETTER U WITH HORN .. */
- /*2201*/    0x1eed,  1,   0x1eec, /* LATIN CAPITAL LETTER U WITH HORN .. */
- /*2204*/    0x1eef,  1,   0x1eee, /* LATIN CAPITAL LETTER U WITH HORN .. */
- /*2207*/    0x1ef1,  1,   0x1ef0, /* LATIN CAPITAL LETTER U WITH HORN .. */
- /*2210*/    0x1ef3,  1,   0x1ef2, /* LATIN CAPITAL LETTER Y WITH GRAVE */
- /*2213*/    0x1ef5,  1,   0x1ef4, /* LATIN CAPITAL LETTER Y WITH DOT B.. */
- /*2216*/    0x1ef7,  1,   0x1ef6, /* LATIN CAPITAL LETTER Y WITH HOOK .. */
- /*2219*/    0x1ef9,  1,   0x1ef8, /* LATIN CAPITAL LETTER Y WITH TILDE */
- /*2222*/    0x1efb,  1,   0x1efa, /* LATIN CAPITAL LETTER MIDDLE-WELSH.. */
- /*2225*/    0x1efd,  1,   0x1efc, /* LATIN CAPITAL LETTER MIDDLE-WELSH.. */
- /*2228*/    0x1eff,  1,   0x1efe, /* LATIN CAPITAL LETTER Y WITH LOOP */
- /*2231*/    0x1f00,  1,   0x1f08, /* GREEK CAPITAL LETTER ALPHA WITH P.. */
- /*2234*/    0x1f01,  1,   0x1f09, /* GREEK CAPITAL LETTER ALPHA WITH D.. */
- /*2237*/    0x1f02,  1,   0x1f0a, /* GREEK CAPITAL LETTER ALPHA WITH P.. */
- /*2240*/    0x1f03,  1,   0x1f0b, /* GREEK CAPITAL LETTER ALPHA WITH D.. */
- /*2243*/    0x1f04,  1,   0x1f0c, /* GREEK CAPITAL LETTER ALPHA WITH P.. */
- /*2246*/    0x1f05,  1,   0x1f0d, /* GREEK CAPITAL LETTER ALPHA WITH D.. */
- /*2249*/    0x1f06,  1,   0x1f0e, /* GREEK CAPITAL LETTER ALPHA WITH P.. */
- /*2252*/    0x1f07,  1,   0x1f0f, /* GREEK CAPITAL LETTER ALPHA WITH D.. */
- /*2255*/    0x1f10,  1,   0x1f18, /* GREEK CAPITAL LETTER EPSILON WITH.. */
- /*2258*/    0x1f11,  1,   0x1f19, /* GREEK CAPITAL LETTER EPSILON WITH.. */
- /*2261*/    0x1f12,  1,   0x1f1a, /* GREEK CAPITAL LETTER EPSILON WITH.. */
- /*2264*/    0x1f13,  1,   0x1f1b, /* GREEK CAPITAL LETTER EPSILON WITH.. */
- /*2267*/    0x1f14,  1,   0x1f1c, /* GREEK CAPITAL LETTER EPSILON WITH.. */
- /*2270*/    0x1f15,  1,   0x1f1d, /* GREEK CAPITAL LETTER EPSILON WITH.. */
- /*2273*/    0x1f20,  1,   0x1f28, /* GREEK CAPITAL LETTER ETA WITH PSI.. */
- /*2276*/    0x1f21,  1,   0x1f29, /* GREEK CAPITAL LETTER ETA WITH DAS.. */
- /*2279*/    0x1f22,  1,   0x1f2a, /* GREEK CAPITAL LETTER ETA WITH PSI.. */
- /*2282*/    0x1f23,  1,   0x1f2b, /* GREEK CAPITAL LETTER ETA WITH DAS.. */
- /*2285*/    0x1f24,  1,   0x1f2c, /* GREEK CAPITAL LETTER ETA WITH PSI.. */
- /*2288*/    0x1f25,  1,   0x1f2d, /* GREEK CAPITAL LETTER ETA WITH DAS.. */
- /*2291*/    0x1f26,  1,   0x1f2e, /* GREEK CAPITAL LETTER ETA WITH PSI.. */
- /*2294*/    0x1f27,  1,   0x1f2f, /* GREEK CAPITAL LETTER ETA WITH DAS.. */
- /*2297*/    0x1f30,  1,   0x1f38, /* GREEK CAPITAL LETTER IOTA WITH PS.. */
- /*2300*/    0x1f31,  1,   0x1f39, /* GREEK CAPITAL LETTER IOTA WITH DA.. */
- /*2303*/    0x1f32,  1,   0x1f3a, /* GREEK CAPITAL LETTER IOTA WITH PS.. */
- /*2306*/    0x1f33,  1,   0x1f3b, /* GREEK CAPITAL LETTER IOTA WITH DA.. */
- /*2309*/    0x1f34,  1,   0x1f3c, /* GREEK CAPITAL LETTER IOTA WITH PS.. */
- /*2312*/    0x1f35,  1,   0x1f3d, /* GREEK CAPITAL LETTER IOTA WITH DA.. */
- /*2315*/    0x1f36,  1,   0x1f3e, /* GREEK CAPITAL LETTER IOTA WITH PS.. */
- /*2318*/    0x1f37,  1,   0x1f3f, /* GREEK CAPITAL LETTER IOTA WITH DA.. */
- /*2321*/    0x1f40,  1,   0x1f48, /* GREEK CAPITAL LETTER OMICRON WITH.. */
- /*2324*/    0x1f41,  1,   0x1f49, /* GREEK CAPITAL LETTER OMICRON WITH.. */
- /*2327*/    0x1f42,  1,   0x1f4a, /* GREEK CAPITAL LETTER OMICRON WITH.. */
- /*2330*/    0x1f43,  1,   0x1f4b, /* GREEK CAPITAL LETTER OMICRON WITH.. */
- /*2333*/    0x1f44,  1,   0x1f4c, /* GREEK CAPITAL LETTER OMICRON WITH.. */
- /*2336*/    0x1f45,  1,   0x1f4d, /* GREEK CAPITAL LETTER OMICRON WITH.. */
- /*2339*/    0x1f51,  1,   0x1f59, /* GREEK CAPITAL LETTER UPSILON WITH.. */
- /*2342*/    0x1f53,  1,   0x1f5b, /* GREEK CAPITAL LETTER UPSILON WITH.. */
- /*2345*/    0x1f55,  1,   0x1f5d, /* GREEK CAPITAL LETTER UPSILON WITH.. */
- /*2348*/    0x1f57,  1,   0x1f5f, /* GREEK CAPITAL LETTER UPSILON WITH.. */
- /*2351*/    0x1f60,  1,   0x1f68, /* GREEK CAPITAL LETTER OMEGA WITH P.. */
- /*2354*/    0x1f61,  1,   0x1f69, /* GREEK CAPITAL LETTER OMEGA WITH D.. */
- /*2357*/    0x1f62,  1,   0x1f6a, /* GREEK CAPITAL LETTER OMEGA WITH P.. */
- /*2360*/    0x1f63,  1,   0x1f6b, /* GREEK CAPITAL LETTER OMEGA WITH D.. */
- /*2363*/    0x1f64,  1,   0x1f6c, /* GREEK CAPITAL LETTER OMEGA WITH P.. */
- /*2366*/    0x1f65,  1,   0x1f6d, /* GREEK CAPITAL LETTER OMEGA WITH D.. */
- /*2369*/    0x1f66,  1,   0x1f6e, /* GREEK CAPITAL LETTER OMEGA WITH P.. */
- /*2372*/    0x1f67,  1,   0x1f6f, /* GREEK CAPITAL LETTER OMEGA WITH D.. */
- /*2375*/    0x1f70,  1,   0x1fba, /* GREEK CAPITAL LETTER ALPHA WITH V.. */
- /*2378*/    0x1f71,  1,   0x1fbb, /* GREEK CAPITAL LETTER ALPHA WITH O.. */
- /*2381*/    0x1f72,  1,   0x1fc8, /* GREEK CAPITAL LETTER EPSILON WITH.. */
- /*2384*/    0x1f73,  1,   0x1fc9, /* GREEK CAPITAL LETTER EPSILON WITH.. */
- /*2387*/    0x1f74,  1,   0x1fca, /* GREEK CAPITAL LETTER ETA WITH VAR.. */
- /*2390*/    0x1f75,  1,   0x1fcb, /* GREEK CAPITAL LETTER ETA WITH OXIA */
- /*2393*/    0x1f76,  1,   0x1fda, /* GREEK CAPITAL LETTER IOTA WITH VA.. */
- /*2396*/    0x1f77,  1,   0x1fdb, /* GREEK CAPITAL LETTER IOTA WITH OX.. */
- /*2399*/    0x1f78,  1,   0x1ff8, /* GREEK CAPITAL LETTER OMICRON WITH.. */
- /*2402*/    0x1f79,  1,   0x1ff9, /* GREEK CAPITAL LETTER OMICRON WITH.. */
- /*2405*/    0x1f7a,  1,   0x1fea, /* GREEK CAPITAL LETTER UPSILON WITH.. */
- /*2408*/    0x1f7b,  1,   0x1feb, /* GREEK CAPITAL LETTER UPSILON WITH.. */
- /*2411*/    0x1f7c,  1,   0x1ffa, /* GREEK CAPITAL LETTER OMEGA WITH V.. */
- /*2414*/    0x1f7d,  1,   0x1ffb, /* GREEK CAPITAL LETTER OMEGA WITH O.. */
- /*2417*/    0x1fb0,  1,   0x1fb8, /* GREEK CAPITAL LETTER ALPHA WITH V.. */
- /*2420*/    0x1fb1,  1,   0x1fb9, /* GREEK CAPITAL LETTER ALPHA WITH M.. */
- /*2423*/    0x1fd0,  1,   0x1fd8, /* GREEK CAPITAL LETTER IOTA WITH VR.. */
- /*2426*/    0x1fd1,  1,   0x1fd9, /* GREEK CAPITAL LETTER IOTA WITH MA.. */
- /*2429*/    0x1fe0,  1,   0x1fe8, /* GREEK CAPITAL LETTER UPSILON WITH.. */
- /*2432*/    0x1fe1,  1,   0x1fe9, /* GREEK CAPITAL LETTER UPSILON WITH.. */
- /*2435*/    0x1fe5,  1,   0x1fec, /* GREEK CAPITAL LETTER RHO WITH DAS.. */
- /*2438*/    0x214e,  1,   0x2132, /* TURNED CAPITAL F */
- /*2441*/    0x2170,  1,   0x2160, /* ROMAN NUMERAL ONE */
- /*2444*/    0x2171,  1,   0x2161, /* ROMAN NUMERAL TWO */
- /*2447*/    0x2172,  1,   0x2162, /* ROMAN NUMERAL THREE */
- /*2450*/    0x2173,  1,   0x2163, /* ROMAN NUMERAL FOUR */
- /*2453*/    0x2174,  1,   0x2164, /* ROMAN NUMERAL FIVE */
- /*2456*/    0x2175,  1,   0x2165, /* ROMAN NUMERAL SIX */
- /*2459*/    0x2176,  1,   0x2166, /* ROMAN NUMERAL SEVEN */
- /*2462*/    0x2177,  1,   0x2167, /* ROMAN NUMERAL EIGHT */
- /*2465*/    0x2178,  1,   0x2168, /* ROMAN NUMERAL NINE */
- /*2468*/    0x2179,  1,   0x2169, /* ROMAN NUMERAL TEN */
- /*2471*/    0x217a,  1,   0x216a, /* ROMAN NUMERAL ELEVEN */
- /*2474*/    0x217b,  1,   0x216b, /* ROMAN NUMERAL TWELVE */
- /*2477*/    0x217c,  1,   0x216c, /* ROMAN NUMERAL FIFTY */
- /*2480*/    0x217d,  1,   0x216d, /* ROMAN NUMERAL ONE HUNDRED */
- /*2483*/    0x217e,  1,   0x216e, /* ROMAN NUMERAL FIVE HUNDRED */
- /*2486*/    0x217f,  1,   0x216f, /* ROMAN NUMERAL ONE THOUSAND */
- /*2489*/    0x2184,  1,   0x2183, /* ROMAN NUMERAL REVERSED ONE HUNDRED */
- /*2492*/    0x24d0,  1,   0x24b6, /* CIRCLED LATIN CAPITAL LETTER A */
- /*2495*/    0x24d1,  1,   0x24b7, /* CIRCLED LATIN CAPITAL LETTER B */
- /*2498*/    0x24d2,  1,   0x24b8, /* CIRCLED LATIN CAPITAL LETTER C */
- /*2501*/    0x24d3,  1,   0x24b9, /* CIRCLED LATIN CAPITAL LETTER D */
- /*2504*/    0x24d4,  1,   0x24ba, /* CIRCLED LATIN CAPITAL LETTER E */
- /*2507*/    0x24d5,  1,   0x24bb, /* CIRCLED LATIN CAPITAL LETTER F */
- /*2510*/    0x24d6,  1,   0x24bc, /* CIRCLED LATIN CAPITAL LETTER G */
- /*2513*/    0x24d7,  1,   0x24bd, /* CIRCLED LATIN CAPITAL LETTER H */
- /*2516*/    0x24d8,  1,   0x24be, /* CIRCLED LATIN CAPITAL LETTER I */
- /*2519*/    0x24d9,  1,   0x24bf, /* CIRCLED LATIN CAPITAL LETTER J */
- /*2522*/    0x24da,  1,   0x24c0, /* CIRCLED LATIN CAPITAL LETTER K */
- /*2525*/    0x24db,  1,   0x24c1, /* CIRCLED LATIN CAPITAL LETTER L */
- /*2528*/    0x24dc,  1,   0x24c2, /* CIRCLED LATIN CAPITAL LETTER M */
- /*2531*/    0x24dd,  1,   0x24c3, /* CIRCLED LATIN CAPITAL LETTER N */
- /*2534*/    0x24de,  1,   0x24c4, /* CIRCLED LATIN CAPITAL LETTER O */
- /*2537*/    0x24df,  1,   0x24c5, /* CIRCLED LATIN CAPITAL LETTER P */
- /*2540*/    0x24e0,  1,   0x24c6, /* CIRCLED LATIN CAPITAL LETTER Q */
- /*2543*/    0x24e1,  1,   0x24c7, /* CIRCLED LATIN CAPITAL LETTER R */
- /*2546*/    0x24e2,  1,   0x24c8, /* CIRCLED LATIN CAPITAL LETTER S */
- /*2549*/    0x24e3,  1,   0x24c9, /* CIRCLED LATIN CAPITAL LETTER T */
- /*2552*/    0x24e4,  1,   0x24ca, /* CIRCLED LATIN CAPITAL LETTER U */
- /*2555*/    0x24e5,  1,   0x24cb, /* CIRCLED LATIN CAPITAL LETTER V */
- /*2558*/    0x24e6,  1,   0x24cc, /* CIRCLED LATIN CAPITAL LETTER W */
- /*2561*/    0x24e7,  1,   0x24cd, /* CIRCLED LATIN CAPITAL LETTER X */
- /*2564*/    0x24e8,  1,   0x24ce, /* CIRCLED LATIN CAPITAL LETTER Y */
- /*2567*/    0x24e9,  1,   0x24cf, /* CIRCLED LATIN CAPITAL LETTER Z */
- /*2570*/    0x2c30,  1,   0x2c00, /* GLAGOLITIC CAPITAL LETTER AZU */
- /*2573*/    0x2c31,  1,   0x2c01, /* GLAGOLITIC CAPITAL LETTER BUKY */
- /*2576*/    0x2c32,  1,   0x2c02, /* GLAGOLITIC CAPITAL LETTER VEDE */
- /*2579*/    0x2c33,  1,   0x2c03, /* GLAGOLITIC CAPITAL LETTER GLAGOLI */
- /*2582*/    0x2c34,  1,   0x2c04, /* GLAGOLITIC CAPITAL LETTER DOBRO */
- /*2585*/    0x2c35,  1,   0x2c05, /* GLAGOLITIC CAPITAL LETTER YESTU */
- /*2588*/    0x2c36,  1,   0x2c06, /* GLAGOLITIC CAPITAL LETTER ZHIVETE */
- /*2591*/    0x2c37,  1,   0x2c07, /* GLAGOLITIC CAPITAL LETTER DZELO */
- /*2594*/    0x2c38,  1,   0x2c08, /* GLAGOLITIC CAPITAL LETTER ZEMLJA */
- /*2597*/    0x2c39,  1,   0x2c09, /* GLAGOLITIC CAPITAL LETTER IZHE */
- /*2600*/    0x2c3a,  1,   0x2c0a, /* GLAGOLITIC CAPITAL LETTER INITIAL.. */
- /*2603*/    0x2c3b,  1,   0x2c0b, /* GLAGOLITIC CAPITAL LETTER I */
- /*2606*/    0x2c3c,  1,   0x2c0c, /* GLAGOLITIC CAPITAL LETTER DJERVI */
- /*2609*/    0x2c3d,  1,   0x2c0d, /* GLAGOLITIC CAPITAL LETTER KAKO */
- /*2612*/    0x2c3e,  1,   0x2c0e, /* GLAGOLITIC CAPITAL LETTER LJUDIJE */
- /*2615*/    0x2c3f,  1,   0x2c0f, /* GLAGOLITIC CAPITAL LETTER MYSLITE */
- /*2618*/    0x2c40,  1,   0x2c10, /* GLAGOLITIC CAPITAL LETTER NASHI */
- /*2621*/    0x2c41,  1,   0x2c11, /* GLAGOLITIC CAPITAL LETTER ONU */
- /*2624*/    0x2c42,  1,   0x2c12, /* GLAGOLITIC CAPITAL LETTER POKOJI */
- /*2627*/    0x2c43,  1,   0x2c13, /* GLAGOLITIC CAPITAL LETTER RITSI */
- /*2630*/    0x2c44,  1,   0x2c14, /* GLAGOLITIC CAPITAL LETTER SLOVO */
- /*2633*/    0x2c45,  1,   0x2c15, /* GLAGOLITIC CAPITAL LETTER TVRIDO */
- /*2636*/    0x2c46,  1,   0x2c16, /* GLAGOLITIC CAPITAL LETTER UKU */
- /*2639*/    0x2c47,  1,   0x2c17, /* GLAGOLITIC CAPITAL LETTER FRITU */
- /*2642*/    0x2c48,  1,   0x2c18, /* GLAGOLITIC CAPITAL LETTER HERU */
- /*2645*/    0x2c49,  1,   0x2c19, /* GLAGOLITIC CAPITAL LETTER OTU */
- /*2648*/    0x2c4a,  1,   0x2c1a, /* GLAGOLITIC CAPITAL LETTER PE */
- /*2651*/    0x2c4b,  1,   0x2c1b, /* GLAGOLITIC CAPITAL LETTER SHTA */
- /*2654*/    0x2c4c,  1,   0x2c1c, /* GLAGOLITIC CAPITAL LETTER TSI */
- /*2657*/    0x2c4d,  1,   0x2c1d, /* GLAGOLITIC CAPITAL LETTER CHRIVI */
- /*2660*/    0x2c4e,  1,   0x2c1e, /* GLAGOLITIC CAPITAL LETTER SHA */
- /*2663*/    0x2c4f,  1,   0x2c1f, /* GLAGOLITIC CAPITAL LETTER YERU */
- /*2666*/    0x2c50,  1,   0x2c20, /* GLAGOLITIC CAPITAL LETTER YERI */
- /*2669*/    0x2c51,  1,   0x2c21, /* GLAGOLITIC CAPITAL LETTER YATI */
- /*2672*/    0x2c52,  1,   0x2c22, /* GLAGOLITIC CAPITAL LETTER SPIDERY.. */
- /*2675*/    0x2c53,  1,   0x2c23, /* GLAGOLITIC CAPITAL LETTER YU */
- /*2678*/    0x2c54,  1,   0x2c24, /* GLAGOLITIC CAPITAL LETTER SMALL Y.. */
- /*2681*/    0x2c55,  1,   0x2c25, /* GLAGOLITIC CAPITAL LETTER SMALL Y.. */
- /*2684*/    0x2c56,  1,   0x2c26, /* GLAGOLITIC CAPITAL LETTER YO */
- /*2687*/    0x2c57,  1,   0x2c27, /* GLAGOLITIC CAPITAL LETTER IOTATED.. */
- /*2690*/    0x2c58,  1,   0x2c28, /* GLAGOLITIC CAPITAL LETTER BIG YUS */
- /*2693*/    0x2c59,  1,   0x2c29, /* GLAGOLITIC CAPITAL LETTER IOTATED.. */
- /*2696*/    0x2c5a,  1,   0x2c2a, /* GLAGOLITIC CAPITAL LETTER FITA */
- /*2699*/    0x2c5b,  1,   0x2c2b, /* GLAGOLITIC CAPITAL LETTER IZHITSA */
- /*2702*/    0x2c5c,  1,   0x2c2c, /* GLAGOLITIC CAPITAL LETTER SHTAPIC */
- /*2705*/    0x2c5d,  1,   0x2c2d, /* GLAGOLITIC CAPITAL LETTER TROKUTA.. */
- /*2708*/    0x2c5e,  1,   0x2c2e, /* GLAGOLITIC CAPITAL LETTER LATINAT.. */
- /*2711*/    0x2c61,  1,   0x2c60, /* LATIN CAPITAL LETTER L WITH DOUBL.. */
- /*2714*/    0x2c65,  1,   0x023a, /* LATIN CAPITAL LETTER A WITH STROKE */
- /*2717*/    0x2c66,  1,   0x023e, /* LATIN CAPITAL LETTER T WITH DIAGO.. */
- /*2720*/    0x2c68,  1,   0x2c67, /* LATIN CAPITAL LETTER H WITH DESCE.. */
- /*2723*/    0x2c6a,  1,   0x2c69, /* LATIN CAPITAL LETTER K WITH DESCE.. */
- /*2726*/    0x2c6c,  1,   0x2c6b, /* LATIN CAPITAL LETTER Z WITH DESCE.. */
- /*2729*/    0x2c73,  1,   0x2c72, /* LATIN CAPITAL LETTER W WITH HOOK */
- /*2732*/    0x2c76,  1,   0x2c75, /* LATIN CAPITAL LETTER HALF H */
- /*2735*/    0x2c81,  1,   0x2c80, /* COPTIC CAPITAL LETTER ALFA */
- /*2738*/    0x2c83,  1,   0x2c82, /* COPTIC CAPITAL LETTER VIDA */
- /*2741*/    0x2c85,  1,   0x2c84, /* COPTIC CAPITAL LETTER GAMMA */
- /*2744*/    0x2c87,  1,   0x2c86, /* COPTIC CAPITAL LETTER DALDA */
- /*2747*/    0x2c89,  1,   0x2c88, /* COPTIC CAPITAL LETTER EIE */
- /*2750*/    0x2c8b,  1,   0x2c8a, /* COPTIC CAPITAL LETTER SOU */
- /*2753*/    0x2c8d,  1,   0x2c8c, /* COPTIC CAPITAL LETTER ZATA */
- /*2756*/    0x2c8f,  1,   0x2c8e, /* COPTIC CAPITAL LETTER HATE */
- /*2759*/    0x2c91,  1,   0x2c90, /* COPTIC CAPITAL LETTER THETHE */
- /*2762*/    0x2c93,  1,   0x2c92, /* COPTIC CAPITAL LETTER IAUDA */
- /*2765*/    0x2c95,  1,   0x2c94, /* COPTIC CAPITAL LETTER KAPA */
- /*2768*/    0x2c97,  1,   0x2c96, /* COPTIC CAPITAL LETTER LAULA */
- /*2771*/    0x2c99,  1,   0x2c98, /* COPTIC CAPITAL LETTER MI */
- /*2774*/    0x2c9b,  1,   0x2c9a, /* COPTIC CAPITAL LETTER NI */
- /*2777*/    0x2c9d,  1,   0x2c9c, /* COPTIC CAPITAL LETTER KSI */
- /*2780*/    0x2c9f,  1,   0x2c9e, /* COPTIC CAPITAL LETTER O */
- /*2783*/    0x2ca1,  1,   0x2ca0, /* COPTIC CAPITAL LETTER PI */
- /*2786*/    0x2ca3,  1,   0x2ca2, /* COPTIC CAPITAL LETTER RO */
- /*2789*/    0x2ca5,  1,   0x2ca4, /* COPTIC CAPITAL LETTER SIMA */
- /*2792*/    0x2ca7,  1,   0x2ca6, /* COPTIC CAPITAL LETTER TAU */
- /*2795*/    0x2ca9,  1,   0x2ca8, /* COPTIC CAPITAL LETTER UA */
- /*2798*/    0x2cab,  1,   0x2caa, /* COPTIC CAPITAL LETTER FI */
- /*2801*/    0x2cad,  1,   0x2cac, /* COPTIC CAPITAL LETTER KHI */
- /*2804*/    0x2caf,  1,   0x2cae, /* COPTIC CAPITAL LETTER PSI */
- /*2807*/    0x2cb1,  1,   0x2cb0, /* COPTIC CAPITAL LETTER OOU */
- /*2810*/    0x2cb3,  1,   0x2cb2, /* COPTIC CAPITAL LETTER DIALECT-P A.. */
- /*2813*/    0x2cb5,  1,   0x2cb4, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
- /*2816*/    0x2cb7,  1,   0x2cb6, /* COPTIC CAPITAL LETTER CRYPTOGRAMM.. */
- /*2819*/    0x2cb9,  1,   0x2cb8, /* COPTIC CAPITAL LETTER DIALECT-P K.. */
- /*2822*/    0x2cbb,  1,   0x2cba, /* COPTIC CAPITAL LETTER DIALECT-P NI */
- /*2825*/    0x2cbd,  1,   0x2cbc, /* COPTIC CAPITAL LETTER CRYPTOGRAMM.. */
- /*2828*/    0x2cbf,  1,   0x2cbe, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
- /*2831*/    0x2cc1,  1,   0x2cc0, /* COPTIC CAPITAL LETTER SAMPI */
- /*2834*/    0x2cc3,  1,   0x2cc2, /* COPTIC CAPITAL LETTER CROSSED SHEI */
- /*2837*/    0x2cc5,  1,   0x2cc4, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
- /*2840*/    0x2cc7,  1,   0x2cc6, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
- /*2843*/    0x2cc9,  1,   0x2cc8, /* COPTIC CAPITAL LETTER AKHMIMIC KH.. */
- /*2846*/    0x2ccb,  1,   0x2cca, /* COPTIC CAPITAL LETTER DIALECT-P H.. */
- /*2849*/    0x2ccd,  1,   0x2ccc, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
- /*2852*/    0x2ccf,  1,   0x2cce, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
- /*2855*/    0x2cd1,  1,   0x2cd0, /* COPTIC CAPITAL LETTER L-SHAPED HA */
- /*2858*/    0x2cd3,  1,   0x2cd2, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
- /*2861*/    0x2cd5,  1,   0x2cd4, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
- /*2864*/    0x2cd7,  1,   0x2cd6, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
- /*2867*/    0x2cd9,  1,   0x2cd8, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
- /*2870*/    0x2cdb,  1,   0x2cda, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
- /*2873*/    0x2cdd,  1,   0x2cdc, /* COPTIC CAPITAL LETTER OLD NUBIAN .. */
- /*2876*/    0x2cdf,  1,   0x2cde, /* COPTIC CAPITAL LETTER OLD NUBIAN .. */
- /*2879*/    0x2ce1,  1,   0x2ce0, /* COPTIC CAPITAL LETTER OLD NUBIAN .. */
- /*2882*/    0x2ce3,  1,   0x2ce2, /* COPTIC CAPITAL LETTER OLD NUBIAN .. */
- /*2885*/    0x2cec,  1,   0x2ceb, /* COPTIC CAPITAL LETTER CRYPTOGRAMM.. */
- /*2888*/    0x2cee,  1,   0x2ced, /* COPTIC CAPITAL LETTER CRYPTOGRAMM.. */
- /*2891*/    0x2cf3,  1,   0x2cf2, /* COPTIC CAPITAL LETTER BOHAIRIC KH.. */
- /*2894*/    0x2d00,  1,   0x10a0, /* GEORGIAN CAPITAL LETTER AN */
- /*2897*/    0x2d01,  1,   0x10a1, /* GEORGIAN CAPITAL LETTER BAN */
- /*2900*/    0x2d02,  1,   0x10a2, /* GEORGIAN CAPITAL LETTER GAN */
- /*2903*/    0x2d03,  1,   0x10a3, /* GEORGIAN CAPITAL LETTER DON */
- /*2906*/    0x2d04,  1,   0x10a4, /* GEORGIAN CAPITAL LETTER EN */
- /*2909*/    0x2d05,  1,   0x10a5, /* GEORGIAN CAPITAL LETTER VIN */
- /*2912*/    0x2d06,  1,   0x10a6, /* GEORGIAN CAPITAL LETTER ZEN */
- /*2915*/    0x2d07,  1,   0x10a7, /* GEORGIAN CAPITAL LETTER TAN */
- /*2918*/    0x2d08,  1,   0x10a8, /* GEORGIAN CAPITAL LETTER IN */
- /*2921*/    0x2d09,  1,   0x10a9, /* GEORGIAN CAPITAL LETTER KAN */
- /*2924*/    0x2d0a,  1,   0x10aa, /* GEORGIAN CAPITAL LETTER LAS */
- /*2927*/    0x2d0b,  1,   0x10ab, /* GEORGIAN CAPITAL LETTER MAN */
- /*2930*/    0x2d0c,  1,   0x10ac, /* GEORGIAN CAPITAL LETTER NAR */
- /*2933*/    0x2d0d,  1,   0x10ad, /* GEORGIAN CAPITAL LETTER ON */
- /*2936*/    0x2d0e,  1,   0x10ae, /* GEORGIAN CAPITAL LETTER PAR */
- /*2939*/    0x2d0f,  1,   0x10af, /* GEORGIAN CAPITAL LETTER ZHAR */
- /*2942*/    0x2d10,  1,   0x10b0, /* GEORGIAN CAPITAL LETTER RAE */
- /*2945*/    0x2d11,  1,   0x10b1, /* GEORGIAN CAPITAL LETTER SAN */
- /*2948*/    0x2d12,  1,   0x10b2, /* GEORGIAN CAPITAL LETTER TAR */
- /*2951*/    0x2d13,  1,   0x10b3, /* GEORGIAN CAPITAL LETTER UN */
- /*2954*/    0x2d14,  1,   0x10b4, /* GEORGIAN CAPITAL LETTER PHAR */
- /*2957*/    0x2d15,  1,   0x10b5, /* GEORGIAN CAPITAL LETTER KHAR */
- /*2960*/    0x2d16,  1,   0x10b6, /* GEORGIAN CAPITAL LETTER GHAN */
- /*2963*/    0x2d17,  1,   0x10b7, /* GEORGIAN CAPITAL LETTER QAR */
- /*2966*/    0x2d18,  1,   0x10b8, /* GEORGIAN CAPITAL LETTER SHIN */
- /*2969*/    0x2d19,  1,   0x10b9, /* GEORGIAN CAPITAL LETTER CHIN */
- /*2972*/    0x2d1a,  1,   0x10ba, /* GEORGIAN CAPITAL LETTER CAN */
- /*2975*/    0x2d1b,  1,   0x10bb, /* GEORGIAN CAPITAL LETTER JIL */
- /*2978*/    0x2d1c,  1,   0x10bc, /* GEORGIAN CAPITAL LETTER CIL */
- /*2981*/    0x2d1d,  1,   0x10bd, /* GEORGIAN CAPITAL LETTER CHAR */
- /*2984*/    0x2d1e,  1,   0x10be, /* GEORGIAN CAPITAL LETTER XAN */
- /*2987*/    0x2d1f,  1,   0x10bf, /* GEORGIAN CAPITAL LETTER JHAN */
- /*2990*/    0x2d20,  1,   0x10c0, /* GEORGIAN CAPITAL LETTER HAE */
- /*2993*/    0x2d21,  1,   0x10c1, /* GEORGIAN CAPITAL LETTER HE */
- /*2996*/    0x2d22,  1,   0x10c2, /* GEORGIAN CAPITAL LETTER HIE */
- /*2999*/    0x2d23,  1,   0x10c3, /* GEORGIAN CAPITAL LETTER WE */
- /*3002*/    0x2d24,  1,   0x10c4, /* GEORGIAN CAPITAL LETTER HAR */
- /*3005*/    0x2d25,  1,   0x10c5, /* GEORGIAN CAPITAL LETTER HOE */
- /*3008*/    0x2d27,  1,   0x10c7, /* GEORGIAN CAPITAL LETTER YN */
- /*3011*/    0x2d2d,  1,   0x10cd, /* GEORGIAN CAPITAL LETTER AEN */
- /*3014*/    0xa641,  1,   0xa640, /* CYRILLIC CAPITAL LETTER ZEMLYA */
- /*3017*/    0xa643,  1,   0xa642, /* CYRILLIC CAPITAL LETTER DZELO */
- /*3020*/    0xa645,  1,   0xa644, /* CYRILLIC CAPITAL LETTER REVERSED .. */
- /*3023*/    0xa647,  1,   0xa646, /* CYRILLIC CAPITAL LETTER IOTA */
- /*3026*/    0xa649,  1,   0xa648, /* CYRILLIC CAPITAL LETTER DJERV */
- /*3029*/    0xa64b,  2,   0x1c88,   0xa64a, /* CYRILLIC SMALL LETTER UNBLENDED UK */
- /*3033*/    0xa64d,  1,   0xa64c, /* CYRILLIC CAPITAL LETTER BROAD OME.. */
- /*3036*/    0xa64f,  1,   0xa64e, /* CYRILLIC CAPITAL LETTER NEUTRAL Y.. */
- /*3039*/    0xa651,  1,   0xa650, /* CYRILLIC CAPITAL LETTER YERU WITH.. */
- /*3042*/    0xa653,  1,   0xa652, /* CYRILLIC CAPITAL LETTER IOTIFIED .. */
- /*3045*/    0xa655,  1,   0xa654, /* CYRILLIC CAPITAL LETTER REVERSED .. */
- /*3048*/    0xa657,  1,   0xa656, /* CYRILLIC CAPITAL LETTER IOTIFIED A */
- /*3051*/    0xa659,  1,   0xa658, /* CYRILLIC CAPITAL LETTER CLOSED LI.. */
- /*3054*/    0xa65b,  1,   0xa65a, /* CYRILLIC CAPITAL LETTER BLENDED Y.. */
- /*3057*/    0xa65d,  1,   0xa65c, /* CYRILLIC CAPITAL LETTER IOTIFIED .. */
- /*3060*/    0xa65f,  1,   0xa65e, /* CYRILLIC CAPITAL LETTER YN */
- /*3063*/    0xa661,  1,   0xa660, /* CYRILLIC CAPITAL LETTER REVERSED .. */
- /*3066*/    0xa663,  1,   0xa662, /* CYRILLIC CAPITAL LETTER SOFT DE */
- /*3069*/    0xa665,  1,   0xa664, /* CYRILLIC CAPITAL LETTER SOFT EL */
- /*3072*/    0xa667,  1,   0xa666, /* CYRILLIC CAPITAL LETTER SOFT EM */
- /*3075*/    0xa669,  1,   0xa668, /* CYRILLIC CAPITAL LETTER MONOCULAR.. */
- /*3078*/    0xa66b,  1,   0xa66a, /* CYRILLIC CAPITAL LETTER BINOCULAR.. */
- /*3081*/    0xa66d,  1,   0xa66c, /* CYRILLIC CAPITAL LETTER DOUBLE MO.. */
- /*3084*/    0xa681,  1,   0xa680, /* CYRILLIC CAPITAL LETTER DWE */
- /*3087*/    0xa683,  1,   0xa682, /* CYRILLIC CAPITAL LETTER DZWE */
- /*3090*/    0xa685,  1,   0xa684, /* CYRILLIC CAPITAL LETTER ZHWE */
- /*3093*/    0xa687,  1,   0xa686, /* CYRILLIC CAPITAL LETTER CCHE */
- /*3096*/    0xa689,  1,   0xa688, /* CYRILLIC CAPITAL LETTER DZZE */
- /*3099*/    0xa68b,  1,   0xa68a, /* CYRILLIC CAPITAL LETTER TE WITH M.. */
- /*3102*/    0xa68d,  1,   0xa68c, /* CYRILLIC CAPITAL LETTER TWE */
- /*3105*/    0xa68f,  1,   0xa68e, /* CYRILLIC CAPITAL LETTER TSWE */
- /*3108*/    0xa691,  1,   0xa690, /* CYRILLIC CAPITAL LETTER TSSE */
- /*3111*/    0xa693,  1,   0xa692, /* CYRILLIC CAPITAL LETTER TCHE */
- /*3114*/    0xa695,  1,   0xa694, /* CYRILLIC CAPITAL LETTER HWE */
- /*3117*/    0xa697,  1,   0xa696, /* CYRILLIC CAPITAL LETTER SHWE */
- /*3120*/    0xa699,  1,   0xa698, /* CYRILLIC CAPITAL LETTER DOUBLE O */
- /*3123*/    0xa69b,  1,   0xa69a, /* CYRILLIC CAPITAL LETTER CROSSED O */
- /*3126*/    0xa723,  1,   0xa722, /* LATIN CAPITAL LETTER EGYPTOLOGICA.. */
- /*3129*/    0xa725,  1,   0xa724, /* LATIN CAPITAL LETTER EGYPTOLOGICA.. */
- /*3132*/    0xa727,  1,   0xa726, /* LATIN CAPITAL LETTER HENG */
- /*3135*/    0xa729,  1,   0xa728, /* LATIN CAPITAL LETTER TZ */
- /*3138*/    0xa72b,  1,   0xa72a, /* LATIN CAPITAL LETTER TRESILLO */
- /*3141*/    0xa72d,  1,   0xa72c, /* LATIN CAPITAL LETTER CUATRILLO */
- /*3144*/    0xa72f,  1,   0xa72e, /* LATIN CAPITAL LETTER CUATRILLO WI.. */
- /*3147*/    0xa733,  1,   0xa732, /* LATIN CAPITAL LETTER AA */
- /*3150*/    0xa735,  1,   0xa734, /* LATIN CAPITAL LETTER AO */
- /*3153*/    0xa737,  1,   0xa736, /* LATIN CAPITAL LETTER AU */
- /*3156*/    0xa739,  1,   0xa738, /* LATIN CAPITAL LETTER AV */
- /*3159*/    0xa73b,  1,   0xa73a, /* LATIN CAPITAL LETTER AV WITH HORI.. */
- /*3162*/    0xa73d,  1,   0xa73c, /* LATIN CAPITAL LETTER AY */
- /*3165*/    0xa73f,  1,   0xa73e, /* LATIN CAPITAL LETTER REVERSED C W.. */
- /*3168*/    0xa741,  1,   0xa740, /* LATIN CAPITAL LETTER K WITH STROKE */
- /*3171*/    0xa743,  1,   0xa742, /* LATIN CAPITAL LETTER K WITH DIAGO.. */
- /*3174*/    0xa745,  1,   0xa744, /* LATIN CAPITAL LETTER K WITH STROK.. */
- /*3177*/    0xa747,  1,   0xa746, /* LATIN CAPITAL LETTER BROKEN L */
- /*3180*/    0xa749,  1,   0xa748, /* LATIN CAPITAL LETTER L WITH HIGH .. */
- /*3183*/    0xa74b,  1,   0xa74a, /* LATIN CAPITAL LETTER O WITH LONG .. */
- /*3186*/    0xa74d,  1,   0xa74c, /* LATIN CAPITAL LETTER O WITH LOOP */
- /*3189*/    0xa74f,  1,   0xa74e, /* LATIN CAPITAL LETTER OO */
- /*3192*/    0xa751,  1,   0xa750, /* LATIN CAPITAL LETTER P WITH STROK.. */
- /*3195*/    0xa753,  1,   0xa752, /* LATIN CAPITAL LETTER P WITH FLOUR.. */
- /*3198*/    0xa755,  1,   0xa754, /* LATIN CAPITAL LETTER P WITH SQUIR.. */
- /*3201*/    0xa757,  1,   0xa756, /* LATIN CAPITAL LETTER Q WITH STROK.. */
- /*3204*/    0xa759,  1,   0xa758, /* LATIN CAPITAL LETTER Q WITH DIAGO.. */
- /*3207*/    0xa75b,  1,   0xa75a, /* LATIN CAPITAL LETTER R ROTUNDA */
- /*3210*/    0xa75d,  1,   0xa75c, /* LATIN CAPITAL LETTER RUM ROTUNDA */
- /*3213*/    0xa75f,  1,   0xa75e, /* LATIN CAPITAL LETTER V WITH DIAGO.. */
- /*3216*/    0xa761,  1,   0xa760, /* LATIN CAPITAL LETTER VY */
- /*3219*/    0xa763,  1,   0xa762, /* LATIN CAPITAL LETTER VISIGOTHIC Z */
- /*3222*/    0xa765,  1,   0xa764, /* LATIN CAPITAL LETTER THORN WITH S.. */
- /*3225*/    0xa767,  1,   0xa766, /* LATIN CAPITAL LETTER THORN WITH S.. */
- /*3228*/    0xa769,  1,   0xa768, /* LATIN CAPITAL LETTER VEND */
- /*3231*/    0xa76b,  1,   0xa76a, /* LATIN CAPITAL LETTER ET */
- /*3234*/    0xa76d,  1,   0xa76c, /* LATIN CAPITAL LETTER IS */
- /*3237*/    0xa76f,  1,   0xa76e, /* LATIN CAPITAL LETTER CON */
- /*3240*/    0xa77a,  1,   0xa779, /* LATIN CAPITAL LETTER INSULAR D */
- /*3243*/    0xa77c,  1,   0xa77b, /* LATIN CAPITAL LETTER INSULAR F */
- /*3246*/    0xa77f,  1,   0xa77e, /* LATIN CAPITAL LETTER TURNED INSUL.. */
- /*3249*/    0xa781,  1,   0xa780, /* LATIN CAPITAL LETTER TURNED L */
- /*3252*/    0xa783,  1,   0xa782, /* LATIN CAPITAL LETTER INSULAR R */
- /*3255*/    0xa785,  1,   0xa784, /* LATIN CAPITAL LETTER INSULAR S */
- /*3258*/    0xa787,  1,   0xa786, /* LATIN CAPITAL LETTER INSULAR T */
- /*3261*/    0xa78c,  1,   0xa78b, /* LATIN CAPITAL LETTER SALTILLO */
- /*3264*/    0xa791,  1,   0xa790, /* LATIN CAPITAL LETTER N WITH DESCE.. */
- /*3267*/    0xa793,  1,   0xa792, /* LATIN CAPITAL LETTER C WITH BAR */
- /*3270*/    0xa797,  1,   0xa796, /* LATIN CAPITAL LETTER B WITH FLOUR.. */
- /*3273*/    0xa799,  1,   0xa798, /* LATIN CAPITAL LETTER F WITH STROKE */
- /*3276*/    0xa79b,  1,   0xa79a, /* LATIN CAPITAL LETTER VOLAPUK AE */
- /*3279*/    0xa79d,  1,   0xa79c, /* LATIN CAPITAL LETTER VOLAPUK OE */
- /*3282*/    0xa79f,  1,   0xa79e, /* LATIN CAPITAL LETTER VOLAPUK UE */
- /*3285*/    0xa7a1,  1,   0xa7a0, /* LATIN CAPITAL LETTER G WITH OBLIQ.. */
- /*3288*/    0xa7a3,  1,   0xa7a2, /* LATIN CAPITAL LETTER K WITH OBLIQ.. */
- /*3291*/    0xa7a5,  1,   0xa7a4, /* LATIN CAPITAL LETTER N WITH OBLIQ.. */
- /*3294*/    0xa7a7,  1,   0xa7a6, /* LATIN CAPITAL LETTER R WITH OBLIQ.. */
- /*3297*/    0xa7a9,  1,   0xa7a8, /* LATIN CAPITAL LETTER S WITH OBLIQ.. */
- /*3300*/    0xa7b5,  1,   0xa7b4, /* LATIN CAPITAL LETTER BETA */
- /*3303*/    0xa7b7,  1,   0xa7b6, /* LATIN CAPITAL LETTER OMEGA */
- /*3306*/    0xa7b9,  1,   0xa7b8, /* LATIN CAPITAL LETTER U WITH STROKE */
- /*3309*/    0xab53,  1,   0xa7b3, /* LATIN CAPITAL LETTER CHI */
- /*3312*/    0xff41,  1,   0xff21, /* FULLWIDTH LATIN CAPITAL LETTER A */
- /*3315*/    0xff42,  1,   0xff22, /* FULLWIDTH LATIN CAPITAL LETTER B */
- /*3318*/    0xff43,  1,   0xff23, /* FULLWIDTH LATIN CAPITAL LETTER C */
- /*3321*/    0xff44,  1,   0xff24, /* FULLWIDTH LATIN CAPITAL LETTER D */
- /*3324*/    0xff45,  1,   0xff25, /* FULLWIDTH LATIN CAPITAL LETTER E */
- /*3327*/    0xff46,  1,   0xff26, /* FULLWIDTH LATIN CAPITAL LETTER F */
- /*3330*/    0xff47,  1,   0xff27, /* FULLWIDTH LATIN CAPITAL LETTER G */
- /*3333*/    0xff48,  1,   0xff28, /* FULLWIDTH LATIN CAPITAL LETTER H */
- /*3336*/    0xff49,  1,   0xff29, /* FULLWIDTH LATIN CAPITAL LETTER I */
- /*3339*/    0xff4a,  1,   0xff2a, /* FULLWIDTH LATIN CAPITAL LETTER J */
- /*3342*/    0xff4b,  1,   0xff2b, /* FULLWIDTH LATIN CAPITAL LETTER K */
- /*3345*/    0xff4c,  1,   0xff2c, /* FULLWIDTH LATIN CAPITAL LETTER L */
- /*3348*/    0xff4d,  1,   0xff2d, /* FULLWIDTH LATIN CAPITAL LETTER M */
- /*3351*/    0xff4e,  1,   0xff2e, /* FULLWIDTH LATIN CAPITAL LETTER N */
- /*3354*/    0xff4f,  1,   0xff2f, /* FULLWIDTH LATIN CAPITAL LETTER O */
- /*3357*/    0xff50,  1,   0xff30, /* FULLWIDTH LATIN CAPITAL LETTER P */
- /*3360*/    0xff51,  1,   0xff31, /* FULLWIDTH LATIN CAPITAL LETTER Q */
- /*3363*/    0xff52,  1,   0xff32, /* FULLWIDTH LATIN CAPITAL LETTER R */
- /*3366*/    0xff53,  1,   0xff33, /* FULLWIDTH LATIN CAPITAL LETTER S */
- /*3369*/    0xff54,  1,   0xff34, /* FULLWIDTH LATIN CAPITAL LETTER T */
- /*3372*/    0xff55,  1,   0xff35, /* FULLWIDTH LATIN CAPITAL LETTER U */
- /*3375*/    0xff56,  1,   0xff36, /* FULLWIDTH LATIN CAPITAL LETTER V */
- /*3378*/    0xff57,  1,   0xff37, /* FULLWIDTH LATIN CAPITAL LETTER W */
- /*3381*/    0xff58,  1,   0xff38, /* FULLWIDTH LATIN CAPITAL LETTER X */
- /*3384*/    0xff59,  1,   0xff39, /* FULLWIDTH LATIN CAPITAL LETTER Y */
- /*3387*/    0xff5a,  1,   0xff3a, /* FULLWIDTH LATIN CAPITAL LETTER Z */
- /*3390*/  0x010428,  1, 0x010400, /* DESERET CAPITAL LETTER LONG I */
- /*3393*/  0x010429,  1, 0x010401, /* DESERET CAPITAL LETTER LONG E */
- /*3396*/  0x01042a,  1, 0x010402, /* DESERET CAPITAL LETTER LONG A */
- /*3399*/  0x01042b,  1, 0x010403, /* DESERET CAPITAL LETTER LONG AH */
- /*3402*/  0x01042c,  1, 0x010404, /* DESERET CAPITAL LETTER LONG O */
- /*3405*/  0x01042d,  1, 0x010405, /* DESERET CAPITAL LETTER LONG OO */
- /*3408*/  0x01042e,  1, 0x010406, /* DESERET CAPITAL LETTER SHORT I */
- /*3411*/  0x01042f,  1, 0x010407, /* DESERET CAPITAL LETTER SHORT E */
- /*3414*/  0x010430,  1, 0x010408, /* DESERET CAPITAL LETTER SHORT A */
- /*3417*/  0x010431,  1, 0x010409, /* DESERET CAPITAL LETTER SHORT AH */
- /*3420*/  0x010432,  1, 0x01040a, /* DESERET CAPITAL LETTER SHORT O */
- /*3423*/  0x010433,  1, 0x01040b, /* DESERET CAPITAL LETTER SHORT OO */
- /*3426*/  0x010434,  1, 0x01040c, /* DESERET CAPITAL LETTER AY */
- /*3429*/  0x010435,  1, 0x01040d, /* DESERET CAPITAL LETTER OW */
- /*3432*/  0x010436,  1, 0x01040e, /* DESERET CAPITAL LETTER WU */
- /*3435*/  0x010437,  1, 0x01040f, /* DESERET CAPITAL LETTER YEE */
- /*3438*/  0x010438,  1, 0x010410, /* DESERET CAPITAL LETTER H */
- /*3441*/  0x010439,  1, 0x010411, /* DESERET CAPITAL LETTER PEE */
- /*3444*/  0x01043a,  1, 0x010412, /* DESERET CAPITAL LETTER BEE */
- /*3447*/  0x01043b,  1, 0x010413, /* DESERET CAPITAL LETTER TEE */
- /*3450*/  0x01043c,  1, 0x010414, /* DESERET CAPITAL LETTER DEE */
- /*3453*/  0x01043d,  1, 0x010415, /* DESERET CAPITAL LETTER CHEE */
- /*3456*/  0x01043e,  1, 0x010416, /* DESERET CAPITAL LETTER JEE */
- /*3459*/  0x01043f,  1, 0x010417, /* DESERET CAPITAL LETTER KAY */
- /*3462*/  0x010440,  1, 0x010418, /* DESERET CAPITAL LETTER GAY */
- /*3465*/  0x010441,  1, 0x010419, /* DESERET CAPITAL LETTER EF */
- /*3468*/  0x010442,  1, 0x01041a, /* DESERET CAPITAL LETTER VEE */
- /*3471*/  0x010443,  1, 0x01041b, /* DESERET CAPITAL LETTER ETH */
- /*3474*/  0x010444,  1, 0x01041c, /* DESERET CAPITAL LETTER THEE */
- /*3477*/  0x010445,  1, 0x01041d, /* DESERET CAPITAL LETTER ES */
- /*3480*/  0x010446,  1, 0x01041e, /* DESERET CAPITAL LETTER ZEE */
- /*3483*/  0x010447,  1, 0x01041f, /* DESERET CAPITAL LETTER ESH */
- /*3486*/  0x010448,  1, 0x010420, /* DESERET CAPITAL LETTER ZHEE */
- /*3489*/  0x010449,  1, 0x010421, /* DESERET CAPITAL LETTER ER */
- /*3492*/  0x01044a,  1, 0x010422, /* DESERET CAPITAL LETTER EL */
- /*3495*/  0x01044b,  1, 0x010423, /* DESERET CAPITAL LETTER EM */
- /*3498*/  0x01044c,  1, 0x010424, /* DESERET CAPITAL LETTER EN */
- /*3501*/  0x01044d,  1, 0x010425, /* DESERET CAPITAL LETTER ENG */
- /*3504*/  0x01044e,  1, 0x010426, /* DESERET CAPITAL LETTER OI */
- /*3507*/  0x01044f,  1, 0x010427, /* DESERET CAPITAL LETTER EW */
- /*3510*/  0x0104d8,  1, 0x0104b0, /* OSAGE CAPITAL LETTER A */
- /*3513*/  0x0104d9,  1, 0x0104b1, /* OSAGE CAPITAL LETTER AI */
- /*3516*/  0x0104da,  1, 0x0104b2, /* OSAGE CAPITAL LETTER AIN */
- /*3519*/  0x0104db,  1, 0x0104b3, /* OSAGE CAPITAL LETTER AH */
- /*3522*/  0x0104dc,  1, 0x0104b4, /* OSAGE CAPITAL LETTER BRA */
- /*3525*/  0x0104dd,  1, 0x0104b5, /* OSAGE CAPITAL LETTER CHA */
- /*3528*/  0x0104de,  1, 0x0104b6, /* OSAGE CAPITAL LETTER EHCHA */
- /*3531*/  0x0104df,  1, 0x0104b7, /* OSAGE CAPITAL LETTER E */
- /*3534*/  0x0104e0,  1, 0x0104b8, /* OSAGE CAPITAL LETTER EIN */
- /*3537*/  0x0104e1,  1, 0x0104b9, /* OSAGE CAPITAL LETTER HA */
- /*3540*/  0x0104e2,  1, 0x0104ba, /* OSAGE CAPITAL LETTER HYA */
- /*3543*/  0x0104e3,  1, 0x0104bb, /* OSAGE CAPITAL LETTER I */
- /*3546*/  0x0104e4,  1, 0x0104bc, /* OSAGE CAPITAL LETTER KA */
- /*3549*/  0x0104e5,  1, 0x0104bd, /* OSAGE CAPITAL LETTER EHKA */
- /*3552*/  0x0104e6,  1, 0x0104be, /* OSAGE CAPITAL LETTER KYA */
- /*3555*/  0x0104e7,  1, 0x0104bf, /* OSAGE CAPITAL LETTER LA */
- /*3558*/  0x0104e8,  1, 0x0104c0, /* OSAGE CAPITAL LETTER MA */
- /*3561*/  0x0104e9,  1, 0x0104c1, /* OSAGE CAPITAL LETTER NA */
- /*3564*/  0x0104ea,  1, 0x0104c2, /* OSAGE CAPITAL LETTER O */
- /*3567*/  0x0104eb,  1, 0x0104c3, /* OSAGE CAPITAL LETTER OIN */
- /*3570*/  0x0104ec,  1, 0x0104c4, /* OSAGE CAPITAL LETTER PA */
- /*3573*/  0x0104ed,  1, 0x0104c5, /* OSAGE CAPITAL LETTER EHPA */
- /*3576*/  0x0104ee,  1, 0x0104c6, /* OSAGE CAPITAL LETTER SA */
- /*3579*/  0x0104ef,  1, 0x0104c7, /* OSAGE CAPITAL LETTER SHA */
- /*3582*/  0x0104f0,  1, 0x0104c8, /* OSAGE CAPITAL LETTER TA */
- /*3585*/  0x0104f1,  1, 0x0104c9, /* OSAGE CAPITAL LETTER EHTA */
- /*3588*/  0x0104f2,  1, 0x0104ca, /* OSAGE CAPITAL LETTER TSA */
- /*3591*/  0x0104f3,  1, 0x0104cb, /* OSAGE CAPITAL LETTER EHTSA */
- /*3594*/  0x0104f4,  1, 0x0104cc, /* OSAGE CAPITAL LETTER TSHA */
- /*3597*/  0x0104f5,  1, 0x0104cd, /* OSAGE CAPITAL LETTER DHA */
- /*3600*/  0x0104f6,  1, 0x0104ce, /* OSAGE CAPITAL LETTER U */
- /*3603*/  0x0104f7,  1, 0x0104cf, /* OSAGE CAPITAL LETTER WA */
- /*3606*/  0x0104f8,  1, 0x0104d0, /* OSAGE CAPITAL LETTER KHA */
- /*3609*/  0x0104f9,  1, 0x0104d1, /* OSAGE CAPITAL LETTER GHA */
- /*3612*/  0x0104fa,  1, 0x0104d2, /* OSAGE CAPITAL LETTER ZA */
- /*3615*/  0x0104fb,  1, 0x0104d3, /* OSAGE CAPITAL LETTER ZHA */
- /*3618*/  0x010cc0,  1, 0x010c80, /* OLD HUNGARIAN CAPITAL LETTER A */
- /*3621*/  0x010cc1,  1, 0x010c81, /* OLD HUNGARIAN CAPITAL LETTER AA */
- /*3624*/  0x010cc2,  1, 0x010c82, /* OLD HUNGARIAN CAPITAL LETTER EB */
- /*3627*/  0x010cc3,  1, 0x010c83, /* OLD HUNGARIAN CAPITAL LETTER AMB */
- /*3630*/  0x010cc4,  1, 0x010c84, /* OLD HUNGARIAN CAPITAL LETTER EC */
- /*3633*/  0x010cc5,  1, 0x010c85, /* OLD HUNGARIAN CAPITAL LETTER ENC */
- /*3636*/  0x010cc6,  1, 0x010c86, /* OLD HUNGARIAN CAPITAL LETTER ECS */
- /*3639*/  0x010cc7,  1, 0x010c87, /* OLD HUNGARIAN CAPITAL LETTER ED */
- /*3642*/  0x010cc8,  1, 0x010c88, /* OLD HUNGARIAN CAPITAL LETTER AND */
- /*3645*/  0x010cc9,  1, 0x010c89, /* OLD HUNGARIAN CAPITAL LETTER E */
- /*3648*/  0x010cca,  1, 0x010c8a, /* OLD HUNGARIAN CAPITAL LETTER CLOS.. */
- /*3651*/  0x010ccb,  1, 0x010c8b, /* OLD HUNGARIAN CAPITAL LETTER EE */
- /*3654*/  0x010ccc,  1, 0x010c8c, /* OLD HUNGARIAN CAPITAL LETTER EF */
- /*3657*/  0x010ccd,  1, 0x010c8d, /* OLD HUNGARIAN CAPITAL LETTER EG */
- /*3660*/  0x010cce,  1, 0x010c8e, /* OLD HUNGARIAN CAPITAL LETTER EGY */
- /*3663*/  0x010ccf,  1, 0x010c8f, /* OLD HUNGARIAN CAPITAL LETTER EH */
- /*3666*/  0x010cd0,  1, 0x010c90, /* OLD HUNGARIAN CAPITAL LETTER I */
- /*3669*/  0x010cd1,  1, 0x010c91, /* OLD HUNGARIAN CAPITAL LETTER II */
- /*3672*/  0x010cd2,  1, 0x010c92, /* OLD HUNGARIAN CAPITAL LETTER EJ */
- /*3675*/  0x010cd3,  1, 0x010c93, /* OLD HUNGARIAN CAPITAL LETTER EK */
- /*3678*/  0x010cd4,  1, 0x010c94, /* OLD HUNGARIAN CAPITAL LETTER AK */
- /*3681*/  0x010cd5,  1, 0x010c95, /* OLD HUNGARIAN CAPITAL LETTER UNK */
- /*3684*/  0x010cd6,  1, 0x010c96, /* OLD HUNGARIAN CAPITAL LETTER EL */
- /*3687*/  0x010cd7,  1, 0x010c97, /* OLD HUNGARIAN CAPITAL LETTER ELY */
- /*3690*/  0x010cd8,  1, 0x010c98, /* OLD HUNGARIAN CAPITAL LETTER EM */
- /*3693*/  0x010cd9,  1, 0x010c99, /* OLD HUNGARIAN CAPITAL LETTER EN */
- /*3696*/  0x010cda,  1, 0x010c9a, /* OLD HUNGARIAN CAPITAL LETTER ENY */
- /*3699*/  0x010cdb,  1, 0x010c9b, /* OLD HUNGARIAN CAPITAL LETTER O */
- /*3702*/  0x010cdc,  1, 0x010c9c, /* OLD HUNGARIAN CAPITAL LETTER OO */
- /*3705*/  0x010cdd,  1, 0x010c9d, /* OLD HUNGARIAN CAPITAL LETTER NIKO.. */
- /*3708*/  0x010cde,  1, 0x010c9e, /* OLD HUNGARIAN CAPITAL LETTER RUDI.. */
- /*3711*/  0x010cdf,  1, 0x010c9f, /* OLD HUNGARIAN CAPITAL LETTER OEE */
- /*3714*/  0x010ce0,  1, 0x010ca0, /* OLD HUNGARIAN CAPITAL LETTER EP */
- /*3717*/  0x010ce1,  1, 0x010ca1, /* OLD HUNGARIAN CAPITAL LETTER EMP */
- /*3720*/  0x010ce2,  1, 0x010ca2, /* OLD HUNGARIAN CAPITAL LETTER ER */
- /*3723*/  0x010ce3,  1, 0x010ca3, /* OLD HUNGARIAN CAPITAL LETTER SHOR.. */
- /*3726*/  0x010ce4,  1, 0x010ca4, /* OLD HUNGARIAN CAPITAL LETTER ES */
- /*3729*/  0x010ce5,  1, 0x010ca5, /* OLD HUNGARIAN CAPITAL LETTER ESZ */
- /*3732*/  0x010ce6,  1, 0x010ca6, /* OLD HUNGARIAN CAPITAL LETTER ET */
- /*3735*/  0x010ce7,  1, 0x010ca7, /* OLD HUNGARIAN CAPITAL LETTER ENT */
- /*3738*/  0x010ce8,  1, 0x010ca8, /* OLD HUNGARIAN CAPITAL LETTER ETY */
- /*3741*/  0x010ce9,  1, 0x010ca9, /* OLD HUNGARIAN CAPITAL LETTER ECH */
- /*3744*/  0x010cea,  1, 0x010caa, /* OLD HUNGARIAN CAPITAL LETTER U */
- /*3747*/  0x010ceb,  1, 0x010cab, /* OLD HUNGARIAN CAPITAL LETTER UU */
- /*3750*/  0x010cec,  1, 0x010cac, /* OLD HUNGARIAN CAPITAL LETTER NIKO.. */
- /*3753*/  0x010ced,  1, 0x010cad, /* OLD HUNGARIAN CAPITAL LETTER RUDI.. */
- /*3756*/  0x010cee,  1, 0x010cae, /* OLD HUNGARIAN CAPITAL LETTER EV */
- /*3759*/  0x010cef,  1, 0x010caf, /* OLD HUNGARIAN CAPITAL LETTER EZ */
- /*3762*/  0x010cf0,  1, 0x010cb0, /* OLD HUNGARIAN CAPITAL LETTER EZS */
- /*3765*/  0x010cf1,  1, 0x010cb1, /* OLD HUNGARIAN CAPITAL LETTER ENT-.. */
- /*3768*/  0x010cf2,  1, 0x010cb2, /* OLD HUNGARIAN CAPITAL LETTER US */
- /*3771*/  0x0118c0,  1, 0x0118a0, /* WARANG CITI CAPITAL LETTER NGAA */
- /*3774*/  0x0118c1,  1, 0x0118a1, /* WARANG CITI CAPITAL LETTER A */
- /*3777*/  0x0118c2,  1, 0x0118a2, /* WARANG CITI CAPITAL LETTER WI */
- /*3780*/  0x0118c3,  1, 0x0118a3, /* WARANG CITI CAPITAL LETTER YU */
- /*3783*/  0x0118c4,  1, 0x0118a4, /* WARANG CITI CAPITAL LETTER YA */
- /*3786*/  0x0118c5,  1, 0x0118a5, /* WARANG CITI CAPITAL LETTER YO */
- /*3789*/  0x0118c6,  1, 0x0118a6, /* WARANG CITI CAPITAL LETTER II */
- /*3792*/  0x0118c7,  1, 0x0118a7, /* WARANG CITI CAPITAL LETTER UU */
- /*3795*/  0x0118c8,  1, 0x0118a8, /* WARANG CITI CAPITAL LETTER E */
- /*3798*/  0x0118c9,  1, 0x0118a9, /* WARANG CITI CAPITAL LETTER O */
- /*3801*/  0x0118ca,  1, 0x0118aa, /* WARANG CITI CAPITAL LETTER ANG */
- /*3804*/  0x0118cb,  1, 0x0118ab, /* WARANG CITI CAPITAL LETTER GA */
- /*3807*/  0x0118cc,  1, 0x0118ac, /* WARANG CITI CAPITAL LETTER KO */
- /*3810*/  0x0118cd,  1, 0x0118ad, /* WARANG CITI CAPITAL LETTER ENY */
- /*3813*/  0x0118ce,  1, 0x0118ae, /* WARANG CITI CAPITAL LETTER YUJ */
- /*3816*/  0x0118cf,  1, 0x0118af, /* WARANG CITI CAPITAL LETTER UC */
- /*3819*/  0x0118d0,  1, 0x0118b0, /* WARANG CITI CAPITAL LETTER ENN */
- /*3822*/  0x0118d1,  1, 0x0118b1, /* WARANG CITI CAPITAL LETTER ODD */
- /*3825*/  0x0118d2,  1, 0x0118b2, /* WARANG CITI CAPITAL LETTER TTE */
- /*3828*/  0x0118d3,  1, 0x0118b3, /* WARANG CITI CAPITAL LETTER NUNG */
- /*3831*/  0x0118d4,  1, 0x0118b4, /* WARANG CITI CAPITAL LETTER DA */
- /*3834*/  0x0118d5,  1, 0x0118b5, /* WARANG CITI CAPITAL LETTER AT */
- /*3837*/  0x0118d6,  1, 0x0118b6, /* WARANG CITI CAPITAL LETTER AM */
- /*3840*/  0x0118d7,  1, 0x0118b7, /* WARANG CITI CAPITAL LETTER BU */
- /*3843*/  0x0118d8,  1, 0x0118b8, /* WARANG CITI CAPITAL LETTER PU */
- /*3846*/  0x0118d9,  1, 0x0118b9, /* WARANG CITI CAPITAL LETTER HIYO */
- /*3849*/  0x0118da,  1, 0x0118ba, /* WARANG CITI CAPITAL LETTER HOLO */
- /*3852*/  0x0118db,  1, 0x0118bb, /* WARANG CITI CAPITAL LETTER HORR */
- /*3855*/  0x0118dc,  1, 0x0118bc, /* WARANG CITI CAPITAL LETTER HAR */
- /*3858*/  0x0118dd,  1, 0x0118bd, /* WARANG CITI CAPITAL LETTER SSUU */
- /*3861*/  0x0118de,  1, 0x0118be, /* WARANG CITI CAPITAL LETTER SII */
- /*3864*/  0x0118df,  1, 0x0118bf, /* WARANG CITI CAPITAL LETTER VIYO */
- /*3867*/  0x016e60,  1, 0x016e40, /* MEDEFAIDRIN CAPITAL LETTER M */
- /*3870*/  0x016e61,  1, 0x016e41, /* MEDEFAIDRIN CAPITAL LETTER S */
- /*3873*/  0x016e62,  1, 0x016e42, /* MEDEFAIDRIN CAPITAL LETTER V */
- /*3876*/  0x016e63,  1, 0x016e43, /* MEDEFAIDRIN CAPITAL LETTER W */
- /*3879*/  0x016e64,  1, 0x016e44, /* MEDEFAIDRIN CAPITAL LETTER ATIU */
- /*3882*/  0x016e65,  1, 0x016e45, /* MEDEFAIDRIN CAPITAL LETTER Z */
- /*3885*/  0x016e66,  1, 0x016e46, /* MEDEFAIDRIN CAPITAL LETTER KP */
- /*3888*/  0x016e67,  1, 0x016e47, /* MEDEFAIDRIN CAPITAL LETTER P */
- /*3891*/  0x016e68,  1, 0x016e48, /* MEDEFAIDRIN CAPITAL LETTER T */
- /*3894*/  0x016e69,  1, 0x016e49, /* MEDEFAIDRIN CAPITAL LETTER G */
- /*3897*/  0x016e6a,  1, 0x016e4a, /* MEDEFAIDRIN CAPITAL LETTER F */
- /*3900*/  0x016e6b,  1, 0x016e4b, /* MEDEFAIDRIN CAPITAL LETTER I */
- /*3903*/  0x016e6c,  1, 0x016e4c, /* MEDEFAIDRIN CAPITAL LETTER K */
- /*3906*/  0x016e6d,  1, 0x016e4d, /* MEDEFAIDRIN CAPITAL LETTER A */
- /*3909*/  0x016e6e,  1, 0x016e4e, /* MEDEFAIDRIN CAPITAL LETTER J */
- /*3912*/  0x016e6f,  1, 0x016e4f, /* MEDEFAIDRIN CAPITAL LETTER E */
- /*3915*/  0x016e70,  1, 0x016e50, /* MEDEFAIDRIN CAPITAL LETTER B */
- /*3918*/  0x016e71,  1, 0x016e51, /* MEDEFAIDRIN CAPITAL LETTER C */
- /*3921*/  0x016e72,  1, 0x016e52, /* MEDEFAIDRIN CAPITAL LETTER U */
- /*3924*/  0x016e73,  1, 0x016e53, /* MEDEFAIDRIN CAPITAL LETTER YU */
- /*3927*/  0x016e74,  1, 0x016e54, /* MEDEFAIDRIN CAPITAL LETTER L */
- /*3930*/  0x016e75,  1, 0x016e55, /* MEDEFAIDRIN CAPITAL LETTER Q */
- /*3933*/  0x016e76,  1, 0x016e56, /* MEDEFAIDRIN CAPITAL LETTER HP */
- /*3936*/  0x016e77,  1, 0x016e57, /* MEDEFAIDRIN CAPITAL LETTER NY */
- /*3939*/  0x016e78,  1, 0x016e58, /* MEDEFAIDRIN CAPITAL LETTER X */
- /*3942*/  0x016e79,  1, 0x016e59, /* MEDEFAIDRIN CAPITAL LETTER D */
- /*3945*/  0x016e7a,  1, 0x016e5a, /* MEDEFAIDRIN CAPITAL LETTER OE */
- /*3948*/  0x016e7b,  1, 0x016e5b, /* MEDEFAIDRIN CAPITAL LETTER N */
- /*3951*/  0x016e7c,  1, 0x016e5c, /* MEDEFAIDRIN CAPITAL LETTER R */
- /*3954*/  0x016e7d,  1, 0x016e5d, /* MEDEFAIDRIN CAPITAL LETTER O */
- /*3957*/  0x016e7e,  1, 0x016e5e, /* MEDEFAIDRIN CAPITAL LETTER AI */
- /*3960*/  0x016e7f,  1, 0x016e5f, /* MEDEFAIDRIN CAPITAL LETTER Y */
- /*3963*/  0x01e922,  1, 0x01e900, /* ADLAM CAPITAL LETTER ALIF */
- /*3966*/  0x01e923,  1, 0x01e901, /* ADLAM CAPITAL LETTER DAALI */
- /*3969*/  0x01e924,  1, 0x01e902, /* ADLAM CAPITAL LETTER LAAM */
- /*3972*/  0x01e925,  1, 0x01e903, /* ADLAM CAPITAL LETTER MIIM */
- /*3975*/  0x01e926,  1, 0x01e904, /* ADLAM CAPITAL LETTER BA */
- /*3978*/  0x01e927,  1, 0x01e905, /* ADLAM CAPITAL LETTER SINNYIIYHE */
- /*3981*/  0x01e928,  1, 0x01e906, /* ADLAM CAPITAL LETTER PE */
- /*3984*/  0x01e929,  1, 0x01e907, /* ADLAM CAPITAL LETTER BHE */
- /*3987*/  0x01e92a,  1, 0x01e908, /* ADLAM CAPITAL LETTER RA */
- /*3990*/  0x01e92b,  1, 0x01e909, /* ADLAM CAPITAL LETTER E */
- /*3993*/  0x01e92c,  1, 0x01e90a, /* ADLAM CAPITAL LETTER FA */
- /*3996*/  0x01e92d,  1, 0x01e90b, /* ADLAM CAPITAL LETTER I */
- /*3999*/  0x01e92e,  1, 0x01e90c, /* ADLAM CAPITAL LETTER O */
- /*4002*/  0x01e92f,  1, 0x01e90d, /* ADLAM CAPITAL LETTER DHA */
- /*4005*/  0x01e930,  1, 0x01e90e, /* ADLAM CAPITAL LETTER YHE */
- /*4008*/  0x01e931,  1, 0x01e90f, /* ADLAM CAPITAL LETTER WAW */
- /*4011*/  0x01e932,  1, 0x01e910, /* ADLAM CAPITAL LETTER NUN */
- /*4014*/  0x01e933,  1, 0x01e911, /* ADLAM CAPITAL LETTER KAF */
- /*4017*/  0x01e934,  1, 0x01e912, /* ADLAM CAPITAL LETTER YA */
- /*4020*/  0x01e935,  1, 0x01e913, /* ADLAM CAPITAL LETTER U */
- /*4023*/  0x01e936,  1, 0x01e914, /* ADLAM CAPITAL LETTER JIIM */
- /*4026*/  0x01e937,  1, 0x01e915, /* ADLAM CAPITAL LETTER CHI */
- /*4029*/  0x01e938,  1, 0x01e916, /* ADLAM CAPITAL LETTER HA */
- /*4032*/  0x01e939,  1, 0x01e917, /* ADLAM CAPITAL LETTER QAAF */
- /*4035*/  0x01e93a,  1, 0x01e918, /* ADLAM CAPITAL LETTER GA */
- /*4038*/  0x01e93b,  1, 0x01e919, /* ADLAM CAPITAL LETTER NYA */
- /*4041*/  0x01e93c,  1, 0x01e91a, /* ADLAM CAPITAL LETTER TU */
- /*4044*/  0x01e93d,  1, 0x01e91b, /* ADLAM CAPITAL LETTER NHA */
- /*4047*/  0x01e93e,  1, 0x01e91c, /* ADLAM CAPITAL LETTER VA */
- /*4050*/  0x01e93f,  1, 0x01e91d, /* ADLAM CAPITAL LETTER KHA */
- /*4053*/  0x01e940,  1, 0x01e91e, /* ADLAM CAPITAL LETTER GBE */
- /*4056*/  0x01e941,  1, 0x01e91f, /* ADLAM CAPITAL LETTER ZAL */
- /*4059*/  0x01e942,  1, 0x01e920, /* ADLAM CAPITAL LETTER KPO */
- /*4062*/  0x01e943,  1, 0x01e921, /* ADLAM CAPITAL LETTER SHA */
-#define FOLDS1_NORMAL_END_INDEX   4065
+ /* 682*/    0x0282,  1,   0xa7c5, /* LATIN CAPITAL LETTER S WITH HOOK */
+ /* 685*/    0x0283,  1,   0x01a9, /* LATIN CAPITAL LETTER ESH */
+ /* 688*/    0x0287,  1,   0xa7b1, /* LATIN CAPITAL LETTER TURNED T */
+ /* 691*/    0x0288,  1,   0x01ae, /* LATIN CAPITAL LETTER T WITH RETRO.. */
+ /* 694*/    0x0289,  1,   0x0244, /* LATIN CAPITAL LETTER U BAR */
+ /* 697*/    0x028a,  1,   0x01b1, /* LATIN CAPITAL LETTER UPSILON */
+ /* 700*/    0x028b,  1,   0x01b2, /* LATIN CAPITAL LETTER V WITH HOOK */
+ /* 703*/    0x028c,  1,   0x0245, /* LATIN CAPITAL LETTER TURNED V */
+ /* 706*/    0x0292,  1,   0x01b7, /* LATIN CAPITAL LETTER EZH */
+ /* 709*/    0x029d,  1,   0xa7b2, /* LATIN CAPITAL LETTER J WITH CROSS.. */
+ /* 712*/    0x029e,  1,   0xa7b0, /* LATIN CAPITAL LETTER TURNED K */
+ /* 715*/    0x0371,  1,   0x0370, /* GREEK CAPITAL LETTER HETA */
+ /* 718*/    0x0373,  1,   0x0372, /* GREEK CAPITAL LETTER ARCHAIC SAMPI */
+ /* 721*/    0x0377,  1,   0x0376, /* GREEK CAPITAL LETTER PAMPHYLIAN D.. */
+ /* 724*/    0x037b,  1,   0x03fd, /* GREEK CAPITAL REVERSED LUNATE SIG.. */
+ /* 727*/    0x037c,  1,   0x03fe, /* GREEK CAPITAL DOTTED LUNATE SIGMA.. */
+ /* 730*/    0x037d,  1,   0x03ff, /* GREEK CAPITAL REVERSED DOTTED LUN.. */
+ /* 733*/    0x03ac,  1,   0x0386, /* GREEK CAPITAL LETTER ALPHA WITH T.. */
+ /* 736*/    0x03ad,  1,   0x0388, /* GREEK CAPITAL LETTER EPSILON WITH.. */
+ /* 739*/    0x03ae,  1,   0x0389, /* GREEK CAPITAL LETTER ETA WITH TON.. */
+ /* 742*/    0x03af,  1,   0x038a, /* GREEK CAPITAL LETTER IOTA WITH TO.. */
+ /* 745*/    0x03b1,  1,   0x0391, /* GREEK CAPITAL LETTER ALPHA */
+ /* 748*/    0x03b2,  2,   0x0392,   0x03d0, /* GREEK CAPITAL LETTER BETA */
+ /* 752*/    0x03b3,  1,   0x0393, /* GREEK CAPITAL LETTER GAMMA */
+ /* 755*/    0x03b4,  1,   0x0394, /* GREEK CAPITAL LETTER DELTA */
+ /* 758*/    0x03b5,  2,   0x0395,   0x03f5, /* GREEK CAPITAL LETTER EPSILON */
+ /* 762*/    0x03b6,  1,   0x0396, /* GREEK CAPITAL LETTER ZETA */
+ /* 765*/    0x03b7,  1,   0x0397, /* GREEK CAPITAL LETTER ETA */
+ /* 768*/    0x03b8,  3,   0x0398,   0x03d1,   0x03f4, /* GREEK CAPITAL LETTER THETA */
+ /* 773*/    0x03b9,  3,   0x0345,   0x0399,   0x1fbe, /* COMBINING GREEK YPOGEGRAMMENI */
+ /* 778*/    0x03ba,  2,   0x039a,   0x03f0, /* GREEK CAPITAL LETTER KAPPA */
+ /* 782*/    0x03bb,  1,   0x039b, /* GREEK CAPITAL LETTER LAMDA */
+ /* 785*/    0x03bc,  2,   0x00b5,   0x039c, /* MICRO SIGN */
+ /* 789*/    0x03bd,  1,   0x039d, /* GREEK CAPITAL LETTER NU */
+ /* 792*/    0x03be,  1,   0x039e, /* GREEK CAPITAL LETTER XI */
+ /* 795*/    0x03bf,  1,   0x039f, /* GREEK CAPITAL LETTER OMICRON */
+ /* 798*/    0x03c0,  2,   0x03a0,   0x03d6, /* GREEK CAPITAL LETTER PI */
+ /* 802*/    0x03c1,  2,   0x03a1,   0x03f1, /* GREEK CAPITAL LETTER RHO */
+ /* 806*/    0x03c3,  2,   0x03a3,   0x03c2, /* GREEK CAPITAL LETTER SIGMA */
+ /* 810*/    0x03c4,  1,   0x03a4, /* GREEK CAPITAL LETTER TAU */
+ /* 813*/    0x03c5,  1,   0x03a5, /* GREEK CAPITAL LETTER UPSILON */
+ /* 816*/    0x03c6,  2,   0x03a6,   0x03d5, /* GREEK CAPITAL LETTER PHI */
+ /* 820*/    0x03c7,  1,   0x03a7, /* GREEK CAPITAL LETTER CHI */
+ /* 823*/    0x03c8,  1,   0x03a8, /* GREEK CAPITAL LETTER PSI */
+ /* 826*/    0x03c9,  2,   0x03a9,   0x2126, /* GREEK CAPITAL LETTER OMEGA */
+ /* 830*/    0x03ca,  1,   0x03aa, /* GREEK CAPITAL LETTER IOTA WITH DI.. */
+ /* 833*/    0x03cb,  1,   0x03ab, /* GREEK CAPITAL LETTER UPSILON WITH.. */
+ /* 836*/    0x03cc,  1,   0x038c, /* GREEK CAPITAL LETTER OMICRON WITH.. */
+ /* 839*/    0x03cd,  1,   0x038e, /* GREEK CAPITAL LETTER UPSILON WITH.. */
+ /* 842*/    0x03ce,  1,   0x038f, /* GREEK CAPITAL LETTER OMEGA WITH T.. */
+ /* 845*/    0x03d7,  1,   0x03cf, /* GREEK CAPITAL KAI SYMBOL */
+ /* 848*/    0x03d9,  1,   0x03d8, /* GREEK LETTER ARCHAIC KOPPA */
+ /* 851*/    0x03db,  1,   0x03da, /* GREEK LETTER STIGMA */
+ /* 854*/    0x03dd,  1,   0x03dc, /* GREEK LETTER DIGAMMA */
+ /* 857*/    0x03df,  1,   0x03de, /* GREEK LETTER KOPPA */
+ /* 860*/    0x03e1,  1,   0x03e0, /* GREEK LETTER SAMPI */
+ /* 863*/    0x03e3,  1,   0x03e2, /* COPTIC CAPITAL LETTER SHEI */
+ /* 866*/    0x03e5,  1,   0x03e4, /* COPTIC CAPITAL LETTER FEI */
+ /* 869*/    0x03e7,  1,   0x03e6, /* COPTIC CAPITAL LETTER KHEI */
+ /* 872*/    0x03e9,  1,   0x03e8, /* COPTIC CAPITAL LETTER HORI */
+ /* 875*/    0x03eb,  1,   0x03ea, /* COPTIC CAPITAL LETTER GANGIA */
+ /* 878*/    0x03ed,  1,   0x03ec, /* COPTIC CAPITAL LETTER SHIMA */
+ /* 881*/    0x03ef,  1,   0x03ee, /* COPTIC CAPITAL LETTER DEI */
+ /* 884*/    0x03f2,  1,   0x03f9, /* GREEK CAPITAL LUNATE SIGMA SYMBOL */
+ /* 887*/    0x03f3,  1,   0x037f, /* GREEK CAPITAL LETTER YOT */
+ /* 890*/    0x03f8,  1,   0x03f7, /* GREEK CAPITAL LETTER SHO */
+ /* 893*/    0x03fb,  1,   0x03fa, /* GREEK CAPITAL LETTER SAN */
+ /* 896*/    0x0430,  1,   0x0410, /* CYRILLIC CAPITAL LETTER A */
+ /* 899*/    0x0431,  1,   0x0411, /* CYRILLIC CAPITAL LETTER BE */
+ /* 902*/    0x0432,  2,   0x0412,   0x1c80, /* CYRILLIC CAPITAL LETTER VE */
+ /* 906*/    0x0433,  1,   0x0413, /* CYRILLIC CAPITAL LETTER GHE */
+ /* 909*/    0x0434,  2,   0x0414,   0x1c81, /* CYRILLIC CAPITAL LETTER DE */
+ /* 913*/    0x0435,  1,   0x0415, /* CYRILLIC CAPITAL LETTER IE */
+ /* 916*/    0x0436,  1,   0x0416, /* CYRILLIC CAPITAL LETTER ZHE */
+ /* 919*/    0x0437,  1,   0x0417, /* CYRILLIC CAPITAL LETTER ZE */
+ /* 922*/    0x0438,  1,   0x0418, /* CYRILLIC CAPITAL LETTER I */
+ /* 925*/    0x0439,  1,   0x0419, /* CYRILLIC CAPITAL LETTER SHORT I */
+ /* 928*/    0x043a,  1,   0x041a, /* CYRILLIC CAPITAL LETTER KA */
+ /* 931*/    0x043b,  1,   0x041b, /* CYRILLIC CAPITAL LETTER EL */
+ /* 934*/    0x043c,  1,   0x041c, /* CYRILLIC CAPITAL LETTER EM */
+ /* 937*/    0x043d,  1,   0x041d, /* CYRILLIC CAPITAL LETTER EN */
+ /* 940*/    0x043e,  2,   0x041e,   0x1c82, /* CYRILLIC CAPITAL LETTER O */
+ /* 944*/    0x043f,  1,   0x041f, /* CYRILLIC CAPITAL LETTER PE */
+ /* 947*/    0x0440,  1,   0x0420, /* CYRILLIC CAPITAL LETTER ER */
+ /* 950*/    0x0441,  2,   0x0421,   0x1c83, /* CYRILLIC CAPITAL LETTER ES */
+ /* 954*/    0x0442,  3,   0x0422,   0x1c84,   0x1c85, /* CYRILLIC CAPITAL LETTER TE */
+ /* 959*/    0x0443,  1,   0x0423, /* CYRILLIC CAPITAL LETTER U */
+ /* 962*/    0x0444,  1,   0x0424, /* CYRILLIC CAPITAL LETTER EF */
+ /* 965*/    0x0445,  1,   0x0425, /* CYRILLIC CAPITAL LETTER HA */
+ /* 968*/    0x0446,  1,   0x0426, /* CYRILLIC CAPITAL LETTER TSE */
+ /* 971*/    0x0447,  1,   0x0427, /* CYRILLIC CAPITAL LETTER CHE */
+ /* 974*/    0x0448,  1,   0x0428, /* CYRILLIC CAPITAL LETTER SHA */
+ /* 977*/    0x0449,  1,   0x0429, /* CYRILLIC CAPITAL LETTER SHCHA */
+ /* 980*/    0x044a,  2,   0x042a,   0x1c86, /* CYRILLIC CAPITAL LETTER HARD SIGN */
+ /* 984*/    0x044b,  1,   0x042b, /* CYRILLIC CAPITAL LETTER YERU */
+ /* 987*/    0x044c,  1,   0x042c, /* CYRILLIC CAPITAL LETTER SOFT SIGN */
+ /* 990*/    0x044d,  1,   0x042d, /* CYRILLIC CAPITAL LETTER E */
+ /* 993*/    0x044e,  1,   0x042e, /* CYRILLIC CAPITAL LETTER YU */
+ /* 996*/    0x044f,  1,   0x042f, /* CYRILLIC CAPITAL LETTER YA */
+ /* 999*/    0x0450,  1,   0x0400, /* CYRILLIC CAPITAL LETTER IE WITH G.. */
+ /*1002*/    0x0451,  1,   0x0401, /* CYRILLIC CAPITAL LETTER IO */
+ /*1005*/    0x0452,  1,   0x0402, /* CYRILLIC CAPITAL LETTER DJE */
+ /*1008*/    0x0453,  1,   0x0403, /* CYRILLIC CAPITAL LETTER GJE */
+ /*1011*/    0x0454,  1,   0x0404, /* CYRILLIC CAPITAL LETTER UKRAINIAN.. */
+ /*1014*/    0x0455,  1,   0x0405, /* CYRILLIC CAPITAL LETTER DZE */
+ /*1017*/    0x0456,  1,   0x0406, /* CYRILLIC CAPITAL LETTER BYELORUSS.. */
+ /*1020*/    0x0457,  1,   0x0407, /* CYRILLIC CAPITAL LETTER YI */
+ /*1023*/    0x0458,  1,   0x0408, /* CYRILLIC CAPITAL LETTER JE */
+ /*1026*/    0x0459,  1,   0x0409, /* CYRILLIC CAPITAL LETTER LJE */
+ /*1029*/    0x045a,  1,   0x040a, /* CYRILLIC CAPITAL LETTER NJE */
+ /*1032*/    0x045b,  1,   0x040b, /* CYRILLIC CAPITAL LETTER TSHE */
+ /*1035*/    0x045c,  1,   0x040c, /* CYRILLIC CAPITAL LETTER KJE */
+ /*1038*/    0x045d,  1,   0x040d, /* CYRILLIC CAPITAL LETTER I WITH GR.. */
+ /*1041*/    0x045e,  1,   0x040e, /* CYRILLIC CAPITAL LETTER SHORT U */
+ /*1044*/    0x045f,  1,   0x040f, /* CYRILLIC CAPITAL LETTER DZHE */
+ /*1047*/    0x0461,  1,   0x0460, /* CYRILLIC CAPITAL LETTER OMEGA */
+ /*1050*/    0x0463,  2,   0x0462,   0x1c87, /* CYRILLIC CAPITAL LETTER YAT */
+ /*1054*/    0x0465,  1,   0x0464, /* CYRILLIC CAPITAL LETTER IOTIFIED E */
+ /*1057*/    0x0467,  1,   0x0466, /* CYRILLIC CAPITAL LETTER LITTLE YUS */
+ /*1060*/    0x0469,  1,   0x0468, /* CYRILLIC CAPITAL LETTER IOTIFIED .. */
+ /*1063*/    0x046b,  1,   0x046a, /* CYRILLIC CAPITAL LETTER BIG YUS */
+ /*1066*/    0x046d,  1,   0x046c, /* CYRILLIC CAPITAL LETTER IOTIFIED .. */
+ /*1069*/    0x046f,  1,   0x046e, /* CYRILLIC CAPITAL LETTER KSI */
+ /*1072*/    0x0471,  1,   0x0470, /* CYRILLIC CAPITAL LETTER PSI */
+ /*1075*/    0x0473,  1,   0x0472, /* CYRILLIC CAPITAL LETTER FITA */
+ /*1078*/    0x0475,  1,   0x0474, /* CYRILLIC CAPITAL LETTER IZHITSA */
+ /*1081*/    0x0477,  1,   0x0476, /* CYRILLIC CAPITAL LETTER IZHITSA W.. */
+ /*1084*/    0x0479,  1,   0x0478, /* CYRILLIC CAPITAL LETTER UK */
+ /*1087*/    0x047b,  1,   0x047a, /* CYRILLIC CAPITAL LETTER ROUND OME.. */
+ /*1090*/    0x047d,  1,   0x047c, /* CYRILLIC CAPITAL LETTER OMEGA WIT.. */
+ /*1093*/    0x047f,  1,   0x047e, /* CYRILLIC CAPITAL LETTER OT */
+ /*1096*/    0x0481,  1,   0x0480, /* CYRILLIC CAPITAL LETTER KOPPA */
+ /*1099*/    0x048b,  1,   0x048a, /* CYRILLIC CAPITAL LETTER SHORT I W.. */
+ /*1102*/    0x048d,  1,   0x048c, /* CYRILLIC CAPITAL LETTER SEMISOFT .. */
+ /*1105*/    0x048f,  1,   0x048e, /* CYRILLIC CAPITAL LETTER ER WITH T.. */
+ /*1108*/    0x0491,  1,   0x0490, /* CYRILLIC CAPITAL LETTER GHE WITH .. */
+ /*1111*/    0x0493,  1,   0x0492, /* CYRILLIC CAPITAL LETTER GHE WITH .. */
+ /*1114*/    0x0495,  1,   0x0494, /* CYRILLIC CAPITAL LETTER GHE WITH .. */
+ /*1117*/    0x0497,  1,   0x0496, /* CYRILLIC CAPITAL LETTER ZHE WITH .. */
+ /*1120*/    0x0499,  1,   0x0498, /* CYRILLIC CAPITAL LETTER ZE WITH D.. */
+ /*1123*/    0x049b,  1,   0x049a, /* CYRILLIC CAPITAL LETTER KA WITH D.. */
+ /*1126*/    0x049d,  1,   0x049c, /* CYRILLIC CAPITAL LETTER KA WITH V.. */
+ /*1129*/    0x049f,  1,   0x049e, /* CYRILLIC CAPITAL LETTER KA WITH S.. */
+ /*1132*/    0x04a1,  1,   0x04a0, /* CYRILLIC CAPITAL LETTER BASHKIR KA */
+ /*1135*/    0x04a3,  1,   0x04a2, /* CYRILLIC CAPITAL LETTER EN WITH D.. */
+ /*1138*/    0x04a5,  1,   0x04a4, /* CYRILLIC CAPITAL LIGATURE EN GHE */
+ /*1141*/    0x04a7,  1,   0x04a6, /* CYRILLIC CAPITAL LETTER PE WITH M.. */
+ /*1144*/    0x04a9,  1,   0x04a8, /* CYRILLIC CAPITAL LETTER ABKHASIAN.. */
+ /*1147*/    0x04ab,  1,   0x04aa, /* CYRILLIC CAPITAL LETTER ES WITH D.. */
+ /*1150*/    0x04ad,  1,   0x04ac, /* CYRILLIC CAPITAL LETTER TE WITH D.. */
+ /*1153*/    0x04af,  1,   0x04ae, /* CYRILLIC CAPITAL LETTER STRAIGHT U */
+ /*1156*/    0x04b1,  1,   0x04b0, /* CYRILLIC CAPITAL LETTER STRAIGHT .. */
+ /*1159*/    0x04b3,  1,   0x04b2, /* CYRILLIC CAPITAL LETTER HA WITH D.. */
+ /*1162*/    0x04b5,  1,   0x04b4, /* CYRILLIC CAPITAL LIGATURE TE TSE */
+ /*1165*/    0x04b7,  1,   0x04b6, /* CYRILLIC CAPITAL LETTER CHE WITH .. */
+ /*1168*/    0x04b9,  1,   0x04b8, /* CYRILLIC CAPITAL LETTER CHE WITH .. */
+ /*1171*/    0x04bb,  1,   0x04ba, /* CYRILLIC CAPITAL LETTER SHHA */
+ /*1174*/    0x04bd,  1,   0x04bc, /* CYRILLIC CAPITAL LETTER ABKHASIAN.. */
+ /*1177*/    0x04bf,  1,   0x04be, /* CYRILLIC CAPITAL LETTER ABKHASIAN.. */
+ /*1180*/    0x04c2,  1,   0x04c1, /* CYRILLIC CAPITAL LETTER ZHE WITH .. */
+ /*1183*/    0x04c4,  1,   0x04c3, /* CYRILLIC CAPITAL LETTER KA WITH H.. */
+ /*1186*/    0x04c6,  1,   0x04c5, /* CYRILLIC CAPITAL LETTER EL WITH T.. */
+ /*1189*/    0x04c8,  1,   0x04c7, /* CYRILLIC CAPITAL LETTER EN WITH H.. */
+ /*1192*/    0x04ca,  1,   0x04c9, /* CYRILLIC CAPITAL LETTER EN WITH T.. */
+ /*1195*/    0x04cc,  1,   0x04cb, /* CYRILLIC CAPITAL LETTER KHAKASSIA.. */
+ /*1198*/    0x04ce,  1,   0x04cd, /* CYRILLIC CAPITAL LETTER EM WITH T.. */
+ /*1201*/    0x04cf,  1,   0x04c0, /* CYRILLIC LETTER PALOCHKA */
+ /*1204*/    0x04d1,  1,   0x04d0, /* CYRILLIC CAPITAL LETTER A WITH BR.. */
+ /*1207*/    0x04d3,  1,   0x04d2, /* CYRILLIC CAPITAL LETTER A WITH DI.. */
+ /*1210*/    0x04d5,  1,   0x04d4, /* CYRILLIC CAPITAL LIGATURE A IE */
+ /*1213*/    0x04d7,  1,   0x04d6, /* CYRILLIC CAPITAL LETTER IE WITH B.. */
+ /*1216*/    0x04d9,  1,   0x04d8, /* CYRILLIC CAPITAL LETTER SCHWA */
+ /*1219*/    0x04db,  1,   0x04da, /* CYRILLIC CAPITAL LETTER SCHWA WIT.. */
+ /*1222*/    0x04dd,  1,   0x04dc, /* CYRILLIC CAPITAL LETTER ZHE WITH .. */
+ /*1225*/    0x04df,  1,   0x04de, /* CYRILLIC CAPITAL LETTER ZE WITH D.. */
+ /*1228*/    0x04e1,  1,   0x04e0, /* CYRILLIC CAPITAL LETTER ABKHASIAN.. */
+ /*1231*/    0x04e3,  1,   0x04e2, /* CYRILLIC CAPITAL LETTER I WITH MA.. */
+ /*1234*/    0x04e5,  1,   0x04e4, /* CYRILLIC CAPITAL LETTER I WITH DI.. */
+ /*1237*/    0x04e7,  1,   0x04e6, /* CYRILLIC CAPITAL LETTER O WITH DI.. */
+ /*1240*/    0x04e9,  1,   0x04e8, /* CYRILLIC CAPITAL LETTER BARRED O */
+ /*1243*/    0x04eb,  1,   0x04ea, /* CYRILLIC CAPITAL LETTER BARRED O .. */
+ /*1246*/    0x04ed,  1,   0x04ec, /* CYRILLIC CAPITAL LETTER E WITH DI.. */
+ /*1249*/    0x04ef,  1,   0x04ee, /* CYRILLIC CAPITAL LETTER U WITH MA.. */
+ /*1252*/    0x04f1,  1,   0x04f0, /* CYRILLIC CAPITAL LETTER U WITH DI.. */
+ /*1255*/    0x04f3,  1,   0x04f2, /* CYRILLIC CAPITAL LETTER U WITH DO.. */
+ /*1258*/    0x04f5,  1,   0x04f4, /* CYRILLIC CAPITAL LETTER CHE WITH .. */
+ /*1261*/    0x04f7,  1,   0x04f6, /* CYRILLIC CAPITAL LETTER GHE WITH .. */
+ /*1264*/    0x04f9,  1,   0x04f8, /* CYRILLIC CAPITAL LETTER YERU WITH.. */
+ /*1267*/    0x04fb,  1,   0x04fa, /* CYRILLIC CAPITAL LETTER GHE WITH .. */
+ /*1270*/    0x04fd,  1,   0x04fc, /* CYRILLIC CAPITAL LETTER HA WITH H.. */
+ /*1273*/    0x04ff,  1,   0x04fe, /* CYRILLIC CAPITAL LETTER HA WITH S.. */
+ /*1276*/    0x0501,  1,   0x0500, /* CYRILLIC CAPITAL LETTER KOMI DE */
+ /*1279*/    0x0503,  1,   0x0502, /* CYRILLIC CAPITAL LETTER KOMI DJE */
+ /*1282*/    0x0505,  1,   0x0504, /* CYRILLIC CAPITAL LETTER KOMI ZJE */
+ /*1285*/    0x0507,  1,   0x0506, /* CYRILLIC CAPITAL LETTER KOMI DZJE */
+ /*1288*/    0x0509,  1,   0x0508, /* CYRILLIC CAPITAL LETTER KOMI LJE */
+ /*1291*/    0x050b,  1,   0x050a, /* CYRILLIC CAPITAL LETTER KOMI NJE */
+ /*1294*/    0x050d,  1,   0x050c, /* CYRILLIC CAPITAL LETTER KOMI SJE */
+ /*1297*/    0x050f,  1,   0x050e, /* CYRILLIC CAPITAL LETTER KOMI TJE */
+ /*1300*/    0x0511,  1,   0x0510, /* CYRILLIC CAPITAL LETTER REVERSED .. */
+ /*1303*/    0x0513,  1,   0x0512, /* CYRILLIC CAPITAL LETTER EL WITH H.. */
+ /*1306*/    0x0515,  1,   0x0514, /* CYRILLIC CAPITAL LETTER LHA */
+ /*1309*/    0x0517,  1,   0x0516, /* CYRILLIC CAPITAL LETTER RHA */
+ /*1312*/    0x0519,  1,   0x0518, /* CYRILLIC CAPITAL LETTER YAE */
+ /*1315*/    0x051b,  1,   0x051a, /* CYRILLIC CAPITAL LETTER QA */
+ /*1318*/    0x051d,  1,   0x051c, /* CYRILLIC CAPITAL LETTER WE */
+ /*1321*/    0x051f,  1,   0x051e, /* CYRILLIC CAPITAL LETTER ALEUT KA */
+ /*1324*/    0x0521,  1,   0x0520, /* CYRILLIC CAPITAL LETTER EL WITH M.. */
+ /*1327*/    0x0523,  1,   0x0522, /* CYRILLIC CAPITAL LETTER EN WITH M.. */
+ /*1330*/    0x0525,  1,   0x0524, /* CYRILLIC CAPITAL LETTER PE WITH D.. */
+ /*1333*/    0x0527,  1,   0x0526, /* CYRILLIC CAPITAL LETTER SHHA WITH.. */
+ /*1336*/    0x0529,  1,   0x0528, /* CYRILLIC CAPITAL LETTER EN WITH L.. */
+ /*1339*/    0x052b,  1,   0x052a, /* CYRILLIC CAPITAL LETTER DZZHE */
+ /*1342*/    0x052d,  1,   0x052c, /* CYRILLIC CAPITAL LETTER DCHE */
+ /*1345*/    0x052f,  1,   0x052e, /* CYRILLIC CAPITAL LETTER EL WITH D.. */
+ /*1348*/    0x0561,  1,   0x0531, /* ARMENIAN CAPITAL LETTER AYB */
+ /*1351*/    0x0562,  1,   0x0532, /* ARMENIAN CAPITAL LETTER BEN */
+ /*1354*/    0x0563,  1,   0x0533, /* ARMENIAN CAPITAL LETTER GIM */
+ /*1357*/    0x0564,  1,   0x0534, /* ARMENIAN CAPITAL LETTER DA */
+ /*1360*/    0x0565,  1,   0x0535, /* ARMENIAN CAPITAL LETTER ECH */
+ /*1363*/    0x0566,  1,   0x0536, /* ARMENIAN CAPITAL LETTER ZA */
+ /*1366*/    0x0567,  1,   0x0537, /* ARMENIAN CAPITAL LETTER EH */
+ /*1369*/    0x0568,  1,   0x0538, /* ARMENIAN CAPITAL LETTER ET */
+ /*1372*/    0x0569,  1,   0x0539, /* ARMENIAN CAPITAL LETTER TO */
+ /*1375*/    0x056a,  1,   0x053a, /* ARMENIAN CAPITAL LETTER ZHE */
+ /*1378*/    0x056b,  1,   0x053b, /* ARMENIAN CAPITAL LETTER INI */
+ /*1381*/    0x056c,  1,   0x053c, /* ARMENIAN CAPITAL LETTER LIWN */
+ /*1384*/    0x056d,  1,   0x053d, /* ARMENIAN CAPITAL LETTER XEH */
+ /*1387*/    0x056e,  1,   0x053e, /* ARMENIAN CAPITAL LETTER CA */
+ /*1390*/    0x056f,  1,   0x053f, /* ARMENIAN CAPITAL LETTER KEN */
+ /*1393*/    0x0570,  1,   0x0540, /* ARMENIAN CAPITAL LETTER HO */
+ /*1396*/    0x0571,  1,   0x0541, /* ARMENIAN CAPITAL LETTER JA */
+ /*1399*/    0x0572,  1,   0x0542, /* ARMENIAN CAPITAL LETTER GHAD */
+ /*1402*/    0x0573,  1,   0x0543, /* ARMENIAN CAPITAL LETTER CHEH */
+ /*1405*/    0x0574,  1,   0x0544, /* ARMENIAN CAPITAL LETTER MEN */
+ /*1408*/    0x0575,  1,   0x0545, /* ARMENIAN CAPITAL LETTER YI */
+ /*1411*/    0x0576,  1,   0x0546, /* ARMENIAN CAPITAL LETTER NOW */
+ /*1414*/    0x0577,  1,   0x0547, /* ARMENIAN CAPITAL LETTER SHA */
+ /*1417*/    0x0578,  1,   0x0548, /* ARMENIAN CAPITAL LETTER VO */
+ /*1420*/    0x0579,  1,   0x0549, /* ARMENIAN CAPITAL LETTER CHA */
+ /*1423*/    0x057a,  1,   0x054a, /* ARMENIAN CAPITAL LETTER PEH */
+ /*1426*/    0x057b,  1,   0x054b, /* ARMENIAN CAPITAL LETTER JHEH */
+ /*1429*/    0x057c,  1,   0x054c, /* ARMENIAN CAPITAL LETTER RA */
+ /*1432*/    0x057d,  1,   0x054d, /* ARMENIAN CAPITAL LETTER SEH */
+ /*1435*/    0x057e,  1,   0x054e, /* ARMENIAN CAPITAL LETTER VEW */
+ /*1438*/    0x057f,  1,   0x054f, /* ARMENIAN CAPITAL LETTER TIWN */
+ /*1441*/    0x0580,  1,   0x0550, /* ARMENIAN CAPITAL LETTER REH */
+ /*1444*/    0x0581,  1,   0x0551, /* ARMENIAN CAPITAL LETTER CO */
+ /*1447*/    0x0582,  1,   0x0552, /* ARMENIAN CAPITAL LETTER YIWN */
+ /*1450*/    0x0583,  1,   0x0553, /* ARMENIAN CAPITAL LETTER PIWR */
+ /*1453*/    0x0584,  1,   0x0554, /* ARMENIAN CAPITAL LETTER KEH */
+ /*1456*/    0x0585,  1,   0x0555, /* ARMENIAN CAPITAL LETTER OH */
+ /*1459*/    0x0586,  1,   0x0556, /* ARMENIAN CAPITAL LETTER FEH */
+ /*1462*/    0x10d0,  1,   0x1c90, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1465*/    0x10d1,  1,   0x1c91, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1468*/    0x10d2,  1,   0x1c92, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1471*/    0x10d3,  1,   0x1c93, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1474*/    0x10d4,  1,   0x1c94, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1477*/    0x10d5,  1,   0x1c95, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1480*/    0x10d6,  1,   0x1c96, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1483*/    0x10d7,  1,   0x1c97, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1486*/    0x10d8,  1,   0x1c98, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1489*/    0x10d9,  1,   0x1c99, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1492*/    0x10da,  1,   0x1c9a, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1495*/    0x10db,  1,   0x1c9b, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1498*/    0x10dc,  1,   0x1c9c, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1501*/    0x10dd,  1,   0x1c9d, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1504*/    0x10de,  1,   0x1c9e, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1507*/    0x10df,  1,   0x1c9f, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1510*/    0x10e0,  1,   0x1ca0, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1513*/    0x10e1,  1,   0x1ca1, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1516*/    0x10e2,  1,   0x1ca2, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1519*/    0x10e3,  1,   0x1ca3, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1522*/    0x10e4,  1,   0x1ca4, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1525*/    0x10e5,  1,   0x1ca5, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1528*/    0x10e6,  1,   0x1ca6, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1531*/    0x10e7,  1,   0x1ca7, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1534*/    0x10e8,  1,   0x1ca8, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1537*/    0x10e9,  1,   0x1ca9, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1540*/    0x10ea,  1,   0x1caa, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1543*/    0x10eb,  1,   0x1cab, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1546*/    0x10ec,  1,   0x1cac, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1549*/    0x10ed,  1,   0x1cad, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1552*/    0x10ee,  1,   0x1cae, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1555*/    0x10ef,  1,   0x1caf, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1558*/    0x10f0,  1,   0x1cb0, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1561*/    0x10f1,  1,   0x1cb1, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1564*/    0x10f2,  1,   0x1cb2, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1567*/    0x10f3,  1,   0x1cb3, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1570*/    0x10f4,  1,   0x1cb4, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1573*/    0x10f5,  1,   0x1cb5, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1576*/    0x10f6,  1,   0x1cb6, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1579*/    0x10f7,  1,   0x1cb7, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1582*/    0x10f8,  1,   0x1cb8, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1585*/    0x10f9,  1,   0x1cb9, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1588*/    0x10fa,  1,   0x1cba, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1591*/    0x10fd,  1,   0x1cbd, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1594*/    0x10fe,  1,   0x1cbe, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1597*/    0x10ff,  1,   0x1cbf, /* GEORGIAN MTAVRULI CAPITAL LETTER .. */
+ /*1600*/    0x13a0,  1,   0xab70, /* CHEROKEE SMALL LETTER A */
+ /*1603*/    0x13a1,  1,   0xab71, /* CHEROKEE SMALL LETTER E */
+ /*1606*/    0x13a2,  1,   0xab72, /* CHEROKEE SMALL LETTER I */
+ /*1609*/    0x13a3,  1,   0xab73, /* CHEROKEE SMALL LETTER O */
+ /*1612*/    0x13a4,  1,   0xab74, /* CHEROKEE SMALL LETTER U */
+ /*1615*/    0x13a5,  1,   0xab75, /* CHEROKEE SMALL LETTER V */
+ /*1618*/    0x13a6,  1,   0xab76, /* CHEROKEE SMALL LETTER GA */
+ /*1621*/    0x13a7,  1,   0xab77, /* CHEROKEE SMALL LETTER KA */
+ /*1624*/    0x13a8,  1,   0xab78, /* CHEROKEE SMALL LETTER GE */
+ /*1627*/    0x13a9,  1,   0xab79, /* CHEROKEE SMALL LETTER GI */
+ /*1630*/    0x13aa,  1,   0xab7a, /* CHEROKEE SMALL LETTER GO */
+ /*1633*/    0x13ab,  1,   0xab7b, /* CHEROKEE SMALL LETTER GU */
+ /*1636*/    0x13ac,  1,   0xab7c, /* CHEROKEE SMALL LETTER GV */
+ /*1639*/    0x13ad,  1,   0xab7d, /* CHEROKEE SMALL LETTER HA */
+ /*1642*/    0x13ae,  1,   0xab7e, /* CHEROKEE SMALL LETTER HE */
+ /*1645*/    0x13af,  1,   0xab7f, /* CHEROKEE SMALL LETTER HI */
+ /*1648*/    0x13b0,  1,   0xab80, /* CHEROKEE SMALL LETTER HO */
+ /*1651*/    0x13b1,  1,   0xab81, /* CHEROKEE SMALL LETTER HU */
+ /*1654*/    0x13b2,  1,   0xab82, /* CHEROKEE SMALL LETTER HV */
+ /*1657*/    0x13b3,  1,   0xab83, /* CHEROKEE SMALL LETTER LA */
+ /*1660*/    0x13b4,  1,   0xab84, /* CHEROKEE SMALL LETTER LE */
+ /*1663*/    0x13b5,  1,   0xab85, /* CHEROKEE SMALL LETTER LI */
+ /*1666*/    0x13b6,  1,   0xab86, /* CHEROKEE SMALL LETTER LO */
+ /*1669*/    0x13b7,  1,   0xab87, /* CHEROKEE SMALL LETTER LU */
+ /*1672*/    0x13b8,  1,   0xab88, /* CHEROKEE SMALL LETTER LV */
+ /*1675*/    0x13b9,  1,   0xab89, /* CHEROKEE SMALL LETTER MA */
+ /*1678*/    0x13ba,  1,   0xab8a, /* CHEROKEE SMALL LETTER ME */
+ /*1681*/    0x13bb,  1,   0xab8b, /* CHEROKEE SMALL LETTER MI */
+ /*1684*/    0x13bc,  1,   0xab8c, /* CHEROKEE SMALL LETTER MO */
+ /*1687*/    0x13bd,  1,   0xab8d, /* CHEROKEE SMALL LETTER MU */
+ /*1690*/    0x13be,  1,   0xab8e, /* CHEROKEE SMALL LETTER NA */
+ /*1693*/    0x13bf,  1,   0xab8f, /* CHEROKEE SMALL LETTER HNA */
+ /*1696*/    0x13c0,  1,   0xab90, /* CHEROKEE SMALL LETTER NAH */
+ /*1699*/    0x13c1,  1,   0xab91, /* CHEROKEE SMALL LETTER NE */
+ /*1702*/    0x13c2,  1,   0xab92, /* CHEROKEE SMALL LETTER NI */
+ /*1705*/    0x13c3,  1,   0xab93, /* CHEROKEE SMALL LETTER NO */
+ /*1708*/    0x13c4,  1,   0xab94, /* CHEROKEE SMALL LETTER NU */
+ /*1711*/    0x13c5,  1,   0xab95, /* CHEROKEE SMALL LETTER NV */
+ /*1714*/    0x13c6,  1,   0xab96, /* CHEROKEE SMALL LETTER QUA */
+ /*1717*/    0x13c7,  1,   0xab97, /* CHEROKEE SMALL LETTER QUE */
+ /*1720*/    0x13c8,  1,   0xab98, /* CHEROKEE SMALL LETTER QUI */
+ /*1723*/    0x13c9,  1,   0xab99, /* CHEROKEE SMALL LETTER QUO */
+ /*1726*/    0x13ca,  1,   0xab9a, /* CHEROKEE SMALL LETTER QUU */
+ /*1729*/    0x13cb,  1,   0xab9b, /* CHEROKEE SMALL LETTER QUV */
+ /*1732*/    0x13cc,  1,   0xab9c, /* CHEROKEE SMALL LETTER SA */
+ /*1735*/    0x13cd,  1,   0xab9d, /* CHEROKEE SMALL LETTER S */
+ /*1738*/    0x13ce,  1,   0xab9e, /* CHEROKEE SMALL LETTER SE */
+ /*1741*/    0x13cf,  1,   0xab9f, /* CHEROKEE SMALL LETTER SI */
+ /*1744*/    0x13d0,  1,   0xaba0, /* CHEROKEE SMALL LETTER SO */
+ /*1747*/    0x13d1,  1,   0xaba1, /* CHEROKEE SMALL LETTER SU */
+ /*1750*/    0x13d2,  1,   0xaba2, /* CHEROKEE SMALL LETTER SV */
+ /*1753*/    0x13d3,  1,   0xaba3, /* CHEROKEE SMALL LETTER DA */
+ /*1756*/    0x13d4,  1,   0xaba4, /* CHEROKEE SMALL LETTER TA */
+ /*1759*/    0x13d5,  1,   0xaba5, /* CHEROKEE SMALL LETTER DE */
+ /*1762*/    0x13d6,  1,   0xaba6, /* CHEROKEE SMALL LETTER TE */
+ /*1765*/    0x13d7,  1,   0xaba7, /* CHEROKEE SMALL LETTER DI */
+ /*1768*/    0x13d8,  1,   0xaba8, /* CHEROKEE SMALL LETTER TI */
+ /*1771*/    0x13d9,  1,   0xaba9, /* CHEROKEE SMALL LETTER DO */
+ /*1774*/    0x13da,  1,   0xabaa, /* CHEROKEE SMALL LETTER DU */
+ /*1777*/    0x13db,  1,   0xabab, /* CHEROKEE SMALL LETTER DV */
+ /*1780*/    0x13dc,  1,   0xabac, /* CHEROKEE SMALL LETTER DLA */
+ /*1783*/    0x13dd,  1,   0xabad, /* CHEROKEE SMALL LETTER TLA */
+ /*1786*/    0x13de,  1,   0xabae, /* CHEROKEE SMALL LETTER TLE */
+ /*1789*/    0x13df,  1,   0xabaf, /* CHEROKEE SMALL LETTER TLI */
+ /*1792*/    0x13e0,  1,   0xabb0, /* CHEROKEE SMALL LETTER TLO */
+ /*1795*/    0x13e1,  1,   0xabb1, /* CHEROKEE SMALL LETTER TLU */
+ /*1798*/    0x13e2,  1,   0xabb2, /* CHEROKEE SMALL LETTER TLV */
+ /*1801*/    0x13e3,  1,   0xabb3, /* CHEROKEE SMALL LETTER TSA */
+ /*1804*/    0x13e4,  1,   0xabb4, /* CHEROKEE SMALL LETTER TSE */
+ /*1807*/    0x13e5,  1,   0xabb5, /* CHEROKEE SMALL LETTER TSI */
+ /*1810*/    0x13e6,  1,   0xabb6, /* CHEROKEE SMALL LETTER TSO */
+ /*1813*/    0x13e7,  1,   0xabb7, /* CHEROKEE SMALL LETTER TSU */
+ /*1816*/    0x13e8,  1,   0xabb8, /* CHEROKEE SMALL LETTER TSV */
+ /*1819*/    0x13e9,  1,   0xabb9, /* CHEROKEE SMALL LETTER WA */
+ /*1822*/    0x13ea,  1,   0xabba, /* CHEROKEE SMALL LETTER WE */
+ /*1825*/    0x13eb,  1,   0xabbb, /* CHEROKEE SMALL LETTER WI */
+ /*1828*/    0x13ec,  1,   0xabbc, /* CHEROKEE SMALL LETTER WO */
+ /*1831*/    0x13ed,  1,   0xabbd, /* CHEROKEE SMALL LETTER WU */
+ /*1834*/    0x13ee,  1,   0xabbe, /* CHEROKEE SMALL LETTER WV */
+ /*1837*/    0x13ef,  1,   0xabbf, /* CHEROKEE SMALL LETTER YA */
+ /*1840*/    0x13f0,  1,   0x13f8, /* CHEROKEE SMALL LETTER YE */
+ /*1843*/    0x13f1,  1,   0x13f9, /* CHEROKEE SMALL LETTER YI */
+ /*1846*/    0x13f2,  1,   0x13fa, /* CHEROKEE SMALL LETTER YO */
+ /*1849*/    0x13f3,  1,   0x13fb, /* CHEROKEE SMALL LETTER YU */
+ /*1852*/    0x13f4,  1,   0x13fc, /* CHEROKEE SMALL LETTER YV */
+ /*1855*/    0x13f5,  1,   0x13fd, /* CHEROKEE SMALL LETTER MV */
+ /*1858*/    0x1d79,  1,   0xa77d, /* LATIN CAPITAL LETTER INSULAR G */
+ /*1861*/    0x1d7d,  1,   0x2c63, /* LATIN CAPITAL LETTER P WITH STROKE */
+ /*1864*/    0x1d8e,  1,   0xa7c6, /* LATIN CAPITAL LETTER Z WITH PALAT.. */
+ /*1867*/    0x1e01,  1,   0x1e00, /* LATIN CAPITAL LETTER A WITH RING .. */
+ /*1870*/    0x1e03,  1,   0x1e02, /* LATIN CAPITAL LETTER B WITH DOT A.. */
+ /*1873*/    0x1e05,  1,   0x1e04, /* LATIN CAPITAL LETTER B WITH DOT B.. */
+ /*1876*/    0x1e07,  1,   0x1e06, /* LATIN CAPITAL LETTER B WITH LINE .. */
+ /*1879*/    0x1e09,  1,   0x1e08, /* LATIN CAPITAL LETTER C WITH CEDIL.. */
+ /*1882*/    0x1e0b,  1,   0x1e0a, /* LATIN CAPITAL LETTER D WITH DOT A.. */
+ /*1885*/    0x1e0d,  1,   0x1e0c, /* LATIN CAPITAL LETTER D WITH DOT B.. */
+ /*1888*/    0x1e0f,  1,   0x1e0e, /* LATIN CAPITAL LETTER D WITH LINE .. */
+ /*1891*/    0x1e11,  1,   0x1e10, /* LATIN CAPITAL LETTER D WITH CEDIL.. */
+ /*1894*/    0x1e13,  1,   0x1e12, /* LATIN CAPITAL LETTER D WITH CIRCU.. */
+ /*1897*/    0x1e15,  1,   0x1e14, /* LATIN CAPITAL LETTER E WITH MACRO.. */
+ /*1900*/    0x1e17,  1,   0x1e16, /* LATIN CAPITAL LETTER E WITH MACRO.. */
+ /*1903*/    0x1e19,  1,   0x1e18, /* LATIN CAPITAL LETTER E WITH CIRCU.. */
+ /*1906*/    0x1e1b,  1,   0x1e1a, /* LATIN CAPITAL LETTER E WITH TILDE.. */
+ /*1909*/    0x1e1d,  1,   0x1e1c, /* LATIN CAPITAL LETTER E WITH CEDIL.. */
+ /*1912*/    0x1e1f,  1,   0x1e1e, /* LATIN CAPITAL LETTER F WITH DOT A.. */
+ /*1915*/    0x1e21,  1,   0x1e20, /* LATIN CAPITAL LETTER G WITH MACRON */
+ /*1918*/    0x1e23,  1,   0x1e22, /* LATIN CAPITAL LETTER H WITH DOT A.. */
+ /*1921*/    0x1e25,  1,   0x1e24, /* LATIN CAPITAL LETTER H WITH DOT B.. */
+ /*1924*/    0x1e27,  1,   0x1e26, /* LATIN CAPITAL LETTER H WITH DIAER.. */
+ /*1927*/    0x1e29,  1,   0x1e28, /* LATIN CAPITAL LETTER H WITH CEDIL.. */
+ /*1930*/    0x1e2b,  1,   0x1e2a, /* LATIN CAPITAL LETTER H WITH BREVE.. */
+ /*1933*/    0x1e2d,  1,   0x1e2c, /* LATIN CAPITAL LETTER I WITH TILDE.. */
+ /*1936*/    0x1e2f,  1,   0x1e2e, /* LATIN CAPITAL LETTER I WITH DIAER.. */
+ /*1939*/    0x1e31,  1,   0x1e30, /* LATIN CAPITAL LETTER K WITH ACUTE */
+ /*1942*/    0x1e33,  1,   0x1e32, /* LATIN CAPITAL LETTER K WITH DOT B.. */
+ /*1945*/    0x1e35,  1,   0x1e34, /* LATIN CAPITAL LETTER K WITH LINE .. */
+ /*1948*/    0x1e37,  1,   0x1e36, /* LATIN CAPITAL LETTER L WITH DOT B.. */
+ /*1951*/    0x1e39,  1,   0x1e38, /* LATIN CAPITAL LETTER L WITH DOT B.. */
+ /*1954*/    0x1e3b,  1,   0x1e3a, /* LATIN CAPITAL LETTER L WITH LINE .. */
+ /*1957*/    0x1e3d,  1,   0x1e3c, /* LATIN CAPITAL LETTER L WITH CIRCU.. */
+ /*1960*/    0x1e3f,  1,   0x1e3e, /* LATIN CAPITAL LETTER M WITH ACUTE */
+ /*1963*/    0x1e41,  1,   0x1e40, /* LATIN CAPITAL LETTER M WITH DOT A.. */
+ /*1966*/    0x1e43,  1,   0x1e42, /* LATIN CAPITAL LETTER M WITH DOT B.. */
+ /*1969*/    0x1e45,  1,   0x1e44, /* LATIN CAPITAL LETTER N WITH DOT A.. */
+ /*1972*/    0x1e47,  1,   0x1e46, /* LATIN CAPITAL LETTER N WITH DOT B.. */
+ /*1975*/    0x1e49,  1,   0x1e48, /* LATIN CAPITAL LETTER N WITH LINE .. */
+ /*1978*/    0x1e4b,  1,   0x1e4a, /* LATIN CAPITAL LETTER N WITH CIRCU.. */
+ /*1981*/    0x1e4d,  1,   0x1e4c, /* LATIN CAPITAL LETTER O WITH TILDE.. */
+ /*1984*/    0x1e4f,  1,   0x1e4e, /* LATIN CAPITAL LETTER O WITH TILDE.. */
+ /*1987*/    0x1e51,  1,   0x1e50, /* LATIN CAPITAL LETTER O WITH MACRO.. */
+ /*1990*/    0x1e53,  1,   0x1e52, /* LATIN CAPITAL LETTER O WITH MACRO.. */
+ /*1993*/    0x1e55,  1,   0x1e54, /* LATIN CAPITAL LETTER P WITH ACUTE */
+ /*1996*/    0x1e57,  1,   0x1e56, /* LATIN CAPITAL LETTER P WITH DOT A.. */
+ /*1999*/    0x1e59,  1,   0x1e58, /* LATIN CAPITAL LETTER R WITH DOT A.. */
+ /*2002*/    0x1e5b,  1,   0x1e5a, /* LATIN CAPITAL LETTER R WITH DOT B.. */
+ /*2005*/    0x1e5d,  1,   0x1e5c, /* LATIN CAPITAL LETTER R WITH DOT B.. */
+ /*2008*/    0x1e5f,  1,   0x1e5e, /* LATIN CAPITAL LETTER R WITH LINE .. */
+ /*2011*/    0x1e61,  2,   0x1e60,   0x1e9b, /* LATIN CAPITAL LETTER S WITH DOT A.. */
+ /*2015*/    0x1e63,  1,   0x1e62, /* LATIN CAPITAL LETTER S WITH DOT B.. */
+ /*2018*/    0x1e65,  1,   0x1e64, /* LATIN CAPITAL LETTER S WITH ACUTE.. */
+ /*2021*/    0x1e67,  1,   0x1e66, /* LATIN CAPITAL LETTER S WITH CARON.. */
+ /*2024*/    0x1e69,  1,   0x1e68, /* LATIN CAPITAL LETTER S WITH DOT B.. */
+ /*2027*/    0x1e6b,  1,   0x1e6a, /* LATIN CAPITAL LETTER T WITH DOT A.. */
+ /*2030*/    0x1e6d,  1,   0x1e6c, /* LATIN CAPITAL LETTER T WITH DOT B.. */
+ /*2033*/    0x1e6f,  1,   0x1e6e, /* LATIN CAPITAL LETTER T WITH LINE .. */
+ /*2036*/    0x1e71,  1,   0x1e70, /* LATIN CAPITAL LETTER T WITH CIRCU.. */
+ /*2039*/    0x1e73,  1,   0x1e72, /* LATIN CAPITAL LETTER U WITH DIAER.. */
+ /*2042*/    0x1e75,  1,   0x1e74, /* LATIN CAPITAL LETTER U WITH TILDE.. */
+ /*2045*/    0x1e77,  1,   0x1e76, /* LATIN CAPITAL LETTER U WITH CIRCU.. */
+ /*2048*/    0x1e79,  1,   0x1e78, /* LATIN CAPITAL LETTER U WITH TILDE.. */
+ /*2051*/    0x1e7b,  1,   0x1e7a, /* LATIN CAPITAL LETTER U WITH MACRO.. */
+ /*2054*/    0x1e7d,  1,   0x1e7c, /* LATIN CAPITAL LETTER V WITH TILDE */
+ /*2057*/    0x1e7f,  1,   0x1e7e, /* LATIN CAPITAL LETTER V WITH DOT B.. */
+ /*2060*/    0x1e81,  1,   0x1e80, /* LATIN CAPITAL LETTER W WITH GRAVE */
+ /*2063*/    0x1e83,  1,   0x1e82, /* LATIN CAPITAL LETTER W WITH ACUTE */
+ /*2066*/    0x1e85,  1,   0x1e84, /* LATIN CAPITAL LETTER W WITH DIAER.. */
+ /*2069*/    0x1e87,  1,   0x1e86, /* LATIN CAPITAL LETTER W WITH DOT A.. */
+ /*2072*/    0x1e89,  1,   0x1e88, /* LATIN CAPITAL LETTER W WITH DOT B.. */
+ /*2075*/    0x1e8b,  1,   0x1e8a, /* LATIN CAPITAL LETTER X WITH DOT A.. */
+ /*2078*/    0x1e8d,  1,   0x1e8c, /* LATIN CAPITAL LETTER X WITH DIAER.. */
+ /*2081*/    0x1e8f,  1,   0x1e8e, /* LATIN CAPITAL LETTER Y WITH DOT A.. */
+ /*2084*/    0x1e91,  1,   0x1e90, /* LATIN CAPITAL LETTER Z WITH CIRCU.. */
+ /*2087*/    0x1e93,  1,   0x1e92, /* LATIN CAPITAL LETTER Z WITH DOT B.. */
+ /*2090*/    0x1e95,  1,   0x1e94, /* LATIN CAPITAL LETTER Z WITH LINE .. */
+ /*2093*/    0x1ea1,  1,   0x1ea0, /* LATIN CAPITAL LETTER A WITH DOT B.. */
+ /*2096*/    0x1ea3,  1,   0x1ea2, /* LATIN CAPITAL LETTER A WITH HOOK .. */
+ /*2099*/    0x1ea5,  1,   0x1ea4, /* LATIN CAPITAL LETTER A WITH CIRCU.. */
+ /*2102*/    0x1ea7,  1,   0x1ea6, /* LATIN CAPITAL LETTER A WITH CIRCU.. */
+ /*2105*/    0x1ea9,  1,   0x1ea8, /* LATIN CAPITAL LETTER A WITH CIRCU.. */
+ /*2108*/    0x1eab,  1,   0x1eaa, /* LATIN CAPITAL LETTER A WITH CIRCU.. */
+ /*2111*/    0x1ead,  1,   0x1eac, /* LATIN CAPITAL LETTER A WITH CIRCU.. */
+ /*2114*/    0x1eaf,  1,   0x1eae, /* LATIN CAPITAL LETTER A WITH BREVE.. */
+ /*2117*/    0x1eb1,  1,   0x1eb0, /* LATIN CAPITAL LETTER A WITH BREVE.. */
+ /*2120*/    0x1eb3,  1,   0x1eb2, /* LATIN CAPITAL LETTER A WITH BREVE.. */
+ /*2123*/    0x1eb5,  1,   0x1eb4, /* LATIN CAPITAL LETTER A WITH BREVE.. */
+ /*2126*/    0x1eb7,  1,   0x1eb6, /* LATIN CAPITAL LETTER A WITH BREVE.. */
+ /*2129*/    0x1eb9,  1,   0x1eb8, /* LATIN CAPITAL LETTER E WITH DOT B.. */
+ /*2132*/    0x1ebb,  1,   0x1eba, /* LATIN CAPITAL LETTER E WITH HOOK .. */
+ /*2135*/    0x1ebd,  1,   0x1ebc, /* LATIN CAPITAL LETTER E WITH TILDE */
+ /*2138*/    0x1ebf,  1,   0x1ebe, /* LATIN CAPITAL LETTER E WITH CIRCU.. */
+ /*2141*/    0x1ec1,  1,   0x1ec0, /* LATIN CAPITAL LETTER E WITH CIRCU.. */
+ /*2144*/    0x1ec3,  1,   0x1ec2, /* LATIN CAPITAL LETTER E WITH CIRCU.. */
+ /*2147*/    0x1ec5,  1,   0x1ec4, /* LATIN CAPITAL LETTER E WITH CIRCU.. */
+ /*2150*/    0x1ec7,  1,   0x1ec6, /* LATIN CAPITAL LETTER E WITH CIRCU.. */
+ /*2153*/    0x1ec9,  1,   0x1ec8, /* LATIN CAPITAL LETTER I WITH HOOK .. */
+ /*2156*/    0x1ecb,  1,   0x1eca, /* LATIN CAPITAL LETTER I WITH DOT B.. */
+ /*2159*/    0x1ecd,  1,   0x1ecc, /* LATIN CAPITAL LETTER O WITH DOT B.. */
+ /*2162*/    0x1ecf,  1,   0x1ece, /* LATIN CAPITAL LETTER O WITH HOOK .. */
+ /*2165*/    0x1ed1,  1,   0x1ed0, /* LATIN CAPITAL LETTER O WITH CIRCU.. */
+ /*2168*/    0x1ed3,  1,   0x1ed2, /* LATIN CAPITAL LETTER O WITH CIRCU.. */
+ /*2171*/    0x1ed5,  1,   0x1ed4, /* LATIN CAPITAL LETTER O WITH CIRCU.. */
+ /*2174*/    0x1ed7,  1,   0x1ed6, /* LATIN CAPITAL LETTER O WITH CIRCU.. */
+ /*2177*/    0x1ed9,  1,   0x1ed8, /* LATIN CAPITAL LETTER O WITH CIRCU.. */
+ /*2180*/    0x1edb,  1,   0x1eda, /* LATIN CAPITAL LETTER O WITH HORN .. */
+ /*2183*/    0x1edd,  1,   0x1edc, /* LATIN CAPITAL LETTER O WITH HORN .. */
+ /*2186*/    0x1edf,  1,   0x1ede, /* LATIN CAPITAL LETTER O WITH HORN .. */
+ /*2189*/    0x1ee1,  1,   0x1ee0, /* LATIN CAPITAL LETTER O WITH HORN .. */
+ /*2192*/    0x1ee3,  1,   0x1ee2, /* LATIN CAPITAL LETTER O WITH HORN .. */
+ /*2195*/    0x1ee5,  1,   0x1ee4, /* LATIN CAPITAL LETTER U WITH DOT B.. */
+ /*2198*/    0x1ee7,  1,   0x1ee6, /* LATIN CAPITAL LETTER U WITH HOOK .. */
+ /*2201*/    0x1ee9,  1,   0x1ee8, /* LATIN CAPITAL LETTER U WITH HORN .. */
+ /*2204*/    0x1eeb,  1,   0x1eea, /* LATIN CAPITAL LETTER U WITH HORN .. */
+ /*2207*/    0x1eed,  1,   0x1eec, /* LATIN CAPITAL LETTER U WITH HORN .. */
+ /*2210*/    0x1eef,  1,   0x1eee, /* LATIN CAPITAL LETTER U WITH HORN .. */
+ /*2213*/    0x1ef1,  1,   0x1ef0, /* LATIN CAPITAL LETTER U WITH HORN .. */
+ /*2216*/    0x1ef3,  1,   0x1ef2, /* LATIN CAPITAL LETTER Y WITH GRAVE */
+ /*2219*/    0x1ef5,  1,   0x1ef4, /* LATIN CAPITAL LETTER Y WITH DOT B.. */
+ /*2222*/    0x1ef7,  1,   0x1ef6, /* LATIN CAPITAL LETTER Y WITH HOOK .. */
+ /*2225*/    0x1ef9,  1,   0x1ef8, /* LATIN CAPITAL LETTER Y WITH TILDE */
+ /*2228*/    0x1efb,  1,   0x1efa, /* LATIN CAPITAL LETTER MIDDLE-WELSH.. */
+ /*2231*/    0x1efd,  1,   0x1efc, /* LATIN CAPITAL LETTER MIDDLE-WELSH.. */
+ /*2234*/    0x1eff,  1,   0x1efe, /* LATIN CAPITAL LETTER Y WITH LOOP */
+ /*2237*/    0x1f00,  1,   0x1f08, /* GREEK CAPITAL LETTER ALPHA WITH P.. */
+ /*2240*/    0x1f01,  1,   0x1f09, /* GREEK CAPITAL LETTER ALPHA WITH D.. */
+ /*2243*/    0x1f02,  1,   0x1f0a, /* GREEK CAPITAL LETTER ALPHA WITH P.. */
+ /*2246*/    0x1f03,  1,   0x1f0b, /* GREEK CAPITAL LETTER ALPHA WITH D.. */
+ /*2249*/    0x1f04,  1,   0x1f0c, /* GREEK CAPITAL LETTER ALPHA WITH P.. */
+ /*2252*/    0x1f05,  1,   0x1f0d, /* GREEK CAPITAL LETTER ALPHA WITH D.. */
+ /*2255*/    0x1f06,  1,   0x1f0e, /* GREEK CAPITAL LETTER ALPHA WITH P.. */
+ /*2258*/    0x1f07,  1,   0x1f0f, /* GREEK CAPITAL LETTER ALPHA WITH D.. */
+ /*2261*/    0x1f10,  1,   0x1f18, /* GREEK CAPITAL LETTER EPSILON WITH.. */
+ /*2264*/    0x1f11,  1,   0x1f19, /* GREEK CAPITAL LETTER EPSILON WITH.. */
+ /*2267*/    0x1f12,  1,   0x1f1a, /* GREEK CAPITAL LETTER EPSILON WITH.. */
+ /*2270*/    0x1f13,  1,   0x1f1b, /* GREEK CAPITAL LETTER EPSILON WITH.. */
+ /*2273*/    0x1f14,  1,   0x1f1c, /* GREEK CAPITAL LETTER EPSILON WITH.. */
+ /*2276*/    0x1f15,  1,   0x1f1d, /* GREEK CAPITAL LETTER EPSILON WITH.. */
+ /*2279*/    0x1f20,  1,   0x1f28, /* GREEK CAPITAL LETTER ETA WITH PSI.. */
+ /*2282*/    0x1f21,  1,   0x1f29, /* GREEK CAPITAL LETTER ETA WITH DAS.. */
+ /*2285*/    0x1f22,  1,   0x1f2a, /* GREEK CAPITAL LETTER ETA WITH PSI.. */
+ /*2288*/    0x1f23,  1,   0x1f2b, /* GREEK CAPITAL LETTER ETA WITH DAS.. */
+ /*2291*/    0x1f24,  1,   0x1f2c, /* GREEK CAPITAL LETTER ETA WITH PSI.. */
+ /*2294*/    0x1f25,  1,   0x1f2d, /* GREEK CAPITAL LETTER ETA WITH DAS.. */
+ /*2297*/    0x1f26,  1,   0x1f2e, /* GREEK CAPITAL LETTER ETA WITH PSI.. */
+ /*2300*/    0x1f27,  1,   0x1f2f, /* GREEK CAPITAL LETTER ETA WITH DAS.. */
+ /*2303*/    0x1f30,  1,   0x1f38, /* GREEK CAPITAL LETTER IOTA WITH PS.. */
+ /*2306*/    0x1f31,  1,   0x1f39, /* GREEK CAPITAL LETTER IOTA WITH DA.. */
+ /*2309*/    0x1f32,  1,   0x1f3a, /* GREEK CAPITAL LETTER IOTA WITH PS.. */
+ /*2312*/    0x1f33,  1,   0x1f3b, /* GREEK CAPITAL LETTER IOTA WITH DA.. */
+ /*2315*/    0x1f34,  1,   0x1f3c, /* GREEK CAPITAL LETTER IOTA WITH PS.. */
+ /*2318*/    0x1f35,  1,   0x1f3d, /* GREEK CAPITAL LETTER IOTA WITH DA.. */
+ /*2321*/    0x1f36,  1,   0x1f3e, /* GREEK CAPITAL LETTER IOTA WITH PS.. */
+ /*2324*/    0x1f37,  1,   0x1f3f, /* GREEK CAPITAL LETTER IOTA WITH DA.. */
+ /*2327*/    0x1f40,  1,   0x1f48, /* GREEK CAPITAL LETTER OMICRON WITH.. */
+ /*2330*/    0x1f41,  1,   0x1f49, /* GREEK CAPITAL LETTER OMICRON WITH.. */
+ /*2333*/    0x1f42,  1,   0x1f4a, /* GREEK CAPITAL LETTER OMICRON WITH.. */
+ /*2336*/    0x1f43,  1,   0x1f4b, /* GREEK CAPITAL LETTER OMICRON WITH.. */
+ /*2339*/    0x1f44,  1,   0x1f4c, /* GREEK CAPITAL LETTER OMICRON WITH.. */
+ /*2342*/    0x1f45,  1,   0x1f4d, /* GREEK CAPITAL LETTER OMICRON WITH.. */
+ /*2345*/    0x1f51,  1,   0x1f59, /* GREEK CAPITAL LETTER UPSILON WITH.. */
+ /*2348*/    0x1f53,  1,   0x1f5b, /* GREEK CAPITAL LETTER UPSILON WITH.. */
+ /*2351*/    0x1f55,  1,   0x1f5d, /* GREEK CAPITAL LETTER UPSILON WITH.. */
+ /*2354*/    0x1f57,  1,   0x1f5f, /* GREEK CAPITAL LETTER UPSILON WITH.. */
+ /*2357*/    0x1f60,  1,   0x1f68, /* GREEK CAPITAL LETTER OMEGA WITH P.. */
+ /*2360*/    0x1f61,  1,   0x1f69, /* GREEK CAPITAL LETTER OMEGA WITH D.. */
+ /*2363*/    0x1f62,  1,   0x1f6a, /* GREEK CAPITAL LETTER OMEGA WITH P.. */
+ /*2366*/    0x1f63,  1,   0x1f6b, /* GREEK CAPITAL LETTER OMEGA WITH D.. */
+ /*2369*/    0x1f64,  1,   0x1f6c, /* GREEK CAPITAL LETTER OMEGA WITH P.. */
+ /*2372*/    0x1f65,  1,   0x1f6d, /* GREEK CAPITAL LETTER OMEGA WITH D.. */
+ /*2375*/    0x1f66,  1,   0x1f6e, /* GREEK CAPITAL LETTER OMEGA WITH P.. */
+ /*2378*/    0x1f67,  1,   0x1f6f, /* GREEK CAPITAL LETTER OMEGA WITH D.. */
+ /*2381*/    0x1f70,  1,   0x1fba, /* GREEK CAPITAL LETTER ALPHA WITH V.. */
+ /*2384*/    0x1f71,  1,   0x1fbb, /* GREEK CAPITAL LETTER ALPHA WITH O.. */
+ /*2387*/    0x1f72,  1,   0x1fc8, /* GREEK CAPITAL LETTER EPSILON WITH.. */
+ /*2390*/    0x1f73,  1,   0x1fc9, /* GREEK CAPITAL LETTER EPSILON WITH.. */
+ /*2393*/    0x1f74,  1,   0x1fca, /* GREEK CAPITAL LETTER ETA WITH VAR.. */
+ /*2396*/    0x1f75,  1,   0x1fcb, /* GREEK CAPITAL LETTER ETA WITH OXIA */
+ /*2399*/    0x1f76,  1,   0x1fda, /* GREEK CAPITAL LETTER IOTA WITH VA.. */
+ /*2402*/    0x1f77,  1,   0x1fdb, /* GREEK CAPITAL LETTER IOTA WITH OX.. */
+ /*2405*/    0x1f78,  1,   0x1ff8, /* GREEK CAPITAL LETTER OMICRON WITH.. */
+ /*2408*/    0x1f79,  1,   0x1ff9, /* GREEK CAPITAL LETTER OMICRON WITH.. */
+ /*2411*/    0x1f7a,  1,   0x1fea, /* GREEK CAPITAL LETTER UPSILON WITH.. */
+ /*2414*/    0x1f7b,  1,   0x1feb, /* GREEK CAPITAL LETTER UPSILON WITH.. */
+ /*2417*/    0x1f7c,  1,   0x1ffa, /* GREEK CAPITAL LETTER OMEGA WITH V.. */
+ /*2420*/    0x1f7d,  1,   0x1ffb, /* GREEK CAPITAL LETTER OMEGA WITH O.. */
+ /*2423*/    0x1fb0,  1,   0x1fb8, /* GREEK CAPITAL LETTER ALPHA WITH V.. */
+ /*2426*/    0x1fb1,  1,   0x1fb9, /* GREEK CAPITAL LETTER ALPHA WITH M.. */
+ /*2429*/    0x1fd0,  1,   0x1fd8, /* GREEK CAPITAL LETTER IOTA WITH VR.. */
+ /*2432*/    0x1fd1,  1,   0x1fd9, /* GREEK CAPITAL LETTER IOTA WITH MA.. */
+ /*2435*/    0x1fe0,  1,   0x1fe8, /* GREEK CAPITAL LETTER UPSILON WITH.. */
+ /*2438*/    0x1fe1,  1,   0x1fe9, /* GREEK CAPITAL LETTER UPSILON WITH.. */
+ /*2441*/    0x1fe5,  1,   0x1fec, /* GREEK CAPITAL LETTER RHO WITH DAS.. */
+ /*2444*/    0x214e,  1,   0x2132, /* TURNED CAPITAL F */
+ /*2447*/    0x2170,  1,   0x2160, /* ROMAN NUMERAL ONE */
+ /*2450*/    0x2171,  1,   0x2161, /* ROMAN NUMERAL TWO */
+ /*2453*/    0x2172,  1,   0x2162, /* ROMAN NUMERAL THREE */
+ /*2456*/    0x2173,  1,   0x2163, /* ROMAN NUMERAL FOUR */
+ /*2459*/    0x2174,  1,   0x2164, /* ROMAN NUMERAL FIVE */
+ /*2462*/    0x2175,  1,   0x2165, /* ROMAN NUMERAL SIX */
+ /*2465*/    0x2176,  1,   0x2166, /* ROMAN NUMERAL SEVEN */
+ /*2468*/    0x2177,  1,   0x2167, /* ROMAN NUMERAL EIGHT */
+ /*2471*/    0x2178,  1,   0x2168, /* ROMAN NUMERAL NINE */
+ /*2474*/    0x2179,  1,   0x2169, /* ROMAN NUMERAL TEN */
+ /*2477*/    0x217a,  1,   0x216a, /* ROMAN NUMERAL ELEVEN */
+ /*2480*/    0x217b,  1,   0x216b, /* ROMAN NUMERAL TWELVE */
+ /*2483*/    0x217c,  1,   0x216c, /* ROMAN NUMERAL FIFTY */
+ /*2486*/    0x217d,  1,   0x216d, /* ROMAN NUMERAL ONE HUNDRED */
+ /*2489*/    0x217e,  1,   0x216e, /* ROMAN NUMERAL FIVE HUNDRED */
+ /*2492*/    0x217f,  1,   0x216f, /* ROMAN NUMERAL ONE THOUSAND */
+ /*2495*/    0x2184,  1,   0x2183, /* ROMAN NUMERAL REVERSED ONE HUNDRED */
+ /*2498*/    0x24d0,  1,   0x24b6, /* CIRCLED LATIN CAPITAL LETTER A */
+ /*2501*/    0x24d1,  1,   0x24b7, /* CIRCLED LATIN CAPITAL LETTER B */
+ /*2504*/    0x24d2,  1,   0x24b8, /* CIRCLED LATIN CAPITAL LETTER C */
+ /*2507*/    0x24d3,  1,   0x24b9, /* CIRCLED LATIN CAPITAL LETTER D */
+ /*2510*/    0x24d4,  1,   0x24ba, /* CIRCLED LATIN CAPITAL LETTER E */
+ /*2513*/    0x24d5,  1,   0x24bb, /* CIRCLED LATIN CAPITAL LETTER F */
+ /*2516*/    0x24d6,  1,   0x24bc, /* CIRCLED LATIN CAPITAL LETTER G */
+ /*2519*/    0x24d7,  1,   0x24bd, /* CIRCLED LATIN CAPITAL LETTER H */
+ /*2522*/    0x24d8,  1,   0x24be, /* CIRCLED LATIN CAPITAL LETTER I */
+ /*2525*/    0x24d9,  1,   0x24bf, /* CIRCLED LATIN CAPITAL LETTER J */
+ /*2528*/    0x24da,  1,   0x24c0, /* CIRCLED LATIN CAPITAL LETTER K */
+ /*2531*/    0x24db,  1,   0x24c1, /* CIRCLED LATIN CAPITAL LETTER L */
+ /*2534*/    0x24dc,  1,   0x24c2, /* CIRCLED LATIN CAPITAL LETTER M */
+ /*2537*/    0x24dd,  1,   0x24c3, /* CIRCLED LATIN CAPITAL LETTER N */
+ /*2540*/    0x24de,  1,   0x24c4, /* CIRCLED LATIN CAPITAL LETTER O */
+ /*2543*/    0x24df,  1,   0x24c5, /* CIRCLED LATIN CAPITAL LETTER P */
+ /*2546*/    0x24e0,  1,   0x24c6, /* CIRCLED LATIN CAPITAL LETTER Q */
+ /*2549*/    0x24e1,  1,   0x24c7, /* CIRCLED LATIN CAPITAL LETTER R */
+ /*2552*/    0x24e2,  1,   0x24c8, /* CIRCLED LATIN CAPITAL LETTER S */
+ /*2555*/    0x24e3,  1,   0x24c9, /* CIRCLED LATIN CAPITAL LETTER T */
+ /*2558*/    0x24e4,  1,   0x24ca, /* CIRCLED LATIN CAPITAL LETTER U */
+ /*2561*/    0x24e5,  1,   0x24cb, /* CIRCLED LATIN CAPITAL LETTER V */
+ /*2564*/    0x24e6,  1,   0x24cc, /* CIRCLED LATIN CAPITAL LETTER W */
+ /*2567*/    0x24e7,  1,   0x24cd, /* CIRCLED LATIN CAPITAL LETTER X */
+ /*2570*/    0x24e8,  1,   0x24ce, /* CIRCLED LATIN CAPITAL LETTER Y */
+ /*2573*/    0x24e9,  1,   0x24cf, /* CIRCLED LATIN CAPITAL LETTER Z */
+ /*2576*/    0x2c30,  1,   0x2c00, /* GLAGOLITIC CAPITAL LETTER AZU */
+ /*2579*/    0x2c31,  1,   0x2c01, /* GLAGOLITIC CAPITAL LETTER BUKY */
+ /*2582*/    0x2c32,  1,   0x2c02, /* GLAGOLITIC CAPITAL LETTER VEDE */
+ /*2585*/    0x2c33,  1,   0x2c03, /* GLAGOLITIC CAPITAL LETTER GLAGOLI */
+ /*2588*/    0x2c34,  1,   0x2c04, /* GLAGOLITIC CAPITAL LETTER DOBRO */
+ /*2591*/    0x2c35,  1,   0x2c05, /* GLAGOLITIC CAPITAL LETTER YESTU */
+ /*2594*/    0x2c36,  1,   0x2c06, /* GLAGOLITIC CAPITAL LETTER ZHIVETE */
+ /*2597*/    0x2c37,  1,   0x2c07, /* GLAGOLITIC CAPITAL LETTER DZELO */
+ /*2600*/    0x2c38,  1,   0x2c08, /* GLAGOLITIC CAPITAL LETTER ZEMLJA */
+ /*2603*/    0x2c39,  1,   0x2c09, /* GLAGOLITIC CAPITAL LETTER IZHE */
+ /*2606*/    0x2c3a,  1,   0x2c0a, /* GLAGOLITIC CAPITAL LETTER INITIAL.. */
+ /*2609*/    0x2c3b,  1,   0x2c0b, /* GLAGOLITIC CAPITAL LETTER I */
+ /*2612*/    0x2c3c,  1,   0x2c0c, /* GLAGOLITIC CAPITAL LETTER DJERVI */
+ /*2615*/    0x2c3d,  1,   0x2c0d, /* GLAGOLITIC CAPITAL LETTER KAKO */
+ /*2618*/    0x2c3e,  1,   0x2c0e, /* GLAGOLITIC CAPITAL LETTER LJUDIJE */
+ /*2621*/    0x2c3f,  1,   0x2c0f, /* GLAGOLITIC CAPITAL LETTER MYSLITE */
+ /*2624*/    0x2c40,  1,   0x2c10, /* GLAGOLITIC CAPITAL LETTER NASHI */
+ /*2627*/    0x2c41,  1,   0x2c11, /* GLAGOLITIC CAPITAL LETTER ONU */
+ /*2630*/    0x2c42,  1,   0x2c12, /* GLAGOLITIC CAPITAL LETTER POKOJI */
+ /*2633*/    0x2c43,  1,   0x2c13, /* GLAGOLITIC CAPITAL LETTER RITSI */
+ /*2636*/    0x2c44,  1,   0x2c14, /* GLAGOLITIC CAPITAL LETTER SLOVO */
+ /*2639*/    0x2c45,  1,   0x2c15, /* GLAGOLITIC CAPITAL LETTER TVRIDO */
+ /*2642*/    0x2c46,  1,   0x2c16, /* GLAGOLITIC CAPITAL LETTER UKU */
+ /*2645*/    0x2c47,  1,   0x2c17, /* GLAGOLITIC CAPITAL LETTER FRITU */
+ /*2648*/    0x2c48,  1,   0x2c18, /* GLAGOLITIC CAPITAL LETTER HERU */
+ /*2651*/    0x2c49,  1,   0x2c19, /* GLAGOLITIC CAPITAL LETTER OTU */
+ /*2654*/    0x2c4a,  1,   0x2c1a, /* GLAGOLITIC CAPITAL LETTER PE */
+ /*2657*/    0x2c4b,  1,   0x2c1b, /* GLAGOLITIC CAPITAL LETTER SHTA */
+ /*2660*/    0x2c4c,  1,   0x2c1c, /* GLAGOLITIC CAPITAL LETTER TSI */
+ /*2663*/    0x2c4d,  1,   0x2c1d, /* GLAGOLITIC CAPITAL LETTER CHRIVI */
+ /*2666*/    0x2c4e,  1,   0x2c1e, /* GLAGOLITIC CAPITAL LETTER SHA */
+ /*2669*/    0x2c4f,  1,   0x2c1f, /* GLAGOLITIC CAPITAL LETTER YERU */
+ /*2672*/    0x2c50,  1,   0x2c20, /* GLAGOLITIC CAPITAL LETTER YERI */
+ /*2675*/    0x2c51,  1,   0x2c21, /* GLAGOLITIC CAPITAL LETTER YATI */
+ /*2678*/    0x2c52,  1,   0x2c22, /* GLAGOLITIC CAPITAL LETTER SPIDERY.. */
+ /*2681*/    0x2c53,  1,   0x2c23, /* GLAGOLITIC CAPITAL LETTER YU */
+ /*2684*/    0x2c54,  1,   0x2c24, /* GLAGOLITIC CAPITAL LETTER SMALL Y.. */
+ /*2687*/    0x2c55,  1,   0x2c25, /* GLAGOLITIC CAPITAL LETTER SMALL Y.. */
+ /*2690*/    0x2c56,  1,   0x2c26, /* GLAGOLITIC CAPITAL LETTER YO */
+ /*2693*/    0x2c57,  1,   0x2c27, /* GLAGOLITIC CAPITAL LETTER IOTATED.. */
+ /*2696*/    0x2c58,  1,   0x2c28, /* GLAGOLITIC CAPITAL LETTER BIG YUS */
+ /*2699*/    0x2c59,  1,   0x2c29, /* GLAGOLITIC CAPITAL LETTER IOTATED.. */
+ /*2702*/    0x2c5a,  1,   0x2c2a, /* GLAGOLITIC CAPITAL LETTER FITA */
+ /*2705*/    0x2c5b,  1,   0x2c2b, /* GLAGOLITIC CAPITAL LETTER IZHITSA */
+ /*2708*/    0x2c5c,  1,   0x2c2c, /* GLAGOLITIC CAPITAL LETTER SHTAPIC */
+ /*2711*/    0x2c5d,  1,   0x2c2d, /* GLAGOLITIC CAPITAL LETTER TROKUTA.. */
+ /*2714*/    0x2c5e,  1,   0x2c2e, /* GLAGOLITIC CAPITAL LETTER LATINAT.. */
+ /*2717*/    0x2c61,  1,   0x2c60, /* LATIN CAPITAL LETTER L WITH DOUBL.. */
+ /*2720*/    0x2c65,  1,   0x023a, /* LATIN CAPITAL LETTER A WITH STROKE */
+ /*2723*/    0x2c66,  1,   0x023e, /* LATIN CAPITAL LETTER T WITH DIAGO.. */
+ /*2726*/    0x2c68,  1,   0x2c67, /* LATIN CAPITAL LETTER H WITH DESCE.. */
+ /*2729*/    0x2c6a,  1,   0x2c69, /* LATIN CAPITAL LETTER K WITH DESCE.. */
+ /*2732*/    0x2c6c,  1,   0x2c6b, /* LATIN CAPITAL LETTER Z WITH DESCE.. */
+ /*2735*/    0x2c73,  1,   0x2c72, /* LATIN CAPITAL LETTER W WITH HOOK */
+ /*2738*/    0x2c76,  1,   0x2c75, /* LATIN CAPITAL LETTER HALF H */
+ /*2741*/    0x2c81,  1,   0x2c80, /* COPTIC CAPITAL LETTER ALFA */
+ /*2744*/    0x2c83,  1,   0x2c82, /* COPTIC CAPITAL LETTER VIDA */
+ /*2747*/    0x2c85,  1,   0x2c84, /* COPTIC CAPITAL LETTER GAMMA */
+ /*2750*/    0x2c87,  1,   0x2c86, /* COPTIC CAPITAL LETTER DALDA */
+ /*2753*/    0x2c89,  1,   0x2c88, /* COPTIC CAPITAL LETTER EIE */
+ /*2756*/    0x2c8b,  1,   0x2c8a, /* COPTIC CAPITAL LETTER SOU */
+ /*2759*/    0x2c8d,  1,   0x2c8c, /* COPTIC CAPITAL LETTER ZATA */
+ /*2762*/    0x2c8f,  1,   0x2c8e, /* COPTIC CAPITAL LETTER HATE */
+ /*2765*/    0x2c91,  1,   0x2c90, /* COPTIC CAPITAL LETTER THETHE */
+ /*2768*/    0x2c93,  1,   0x2c92, /* COPTIC CAPITAL LETTER IAUDA */
+ /*2771*/    0x2c95,  1,   0x2c94, /* COPTIC CAPITAL LETTER KAPA */
+ /*2774*/    0x2c97,  1,   0x2c96, /* COPTIC CAPITAL LETTER LAULA */
+ /*2777*/    0x2c99,  1,   0x2c98, /* COPTIC CAPITAL LETTER MI */
+ /*2780*/    0x2c9b,  1,   0x2c9a, /* COPTIC CAPITAL LETTER NI */
+ /*2783*/    0x2c9d,  1,   0x2c9c, /* COPTIC CAPITAL LETTER KSI */
+ /*2786*/    0x2c9f,  1,   0x2c9e, /* COPTIC CAPITAL LETTER O */
+ /*2789*/    0x2ca1,  1,   0x2ca0, /* COPTIC CAPITAL LETTER PI */
+ /*2792*/    0x2ca3,  1,   0x2ca2, /* COPTIC CAPITAL LETTER RO */
+ /*2795*/    0x2ca5,  1,   0x2ca4, /* COPTIC CAPITAL LETTER SIMA */
+ /*2798*/    0x2ca7,  1,   0x2ca6, /* COPTIC CAPITAL LETTER TAU */
+ /*2801*/    0x2ca9,  1,   0x2ca8, /* COPTIC CAPITAL LETTER UA */
+ /*2804*/    0x2cab,  1,   0x2caa, /* COPTIC CAPITAL LETTER FI */
+ /*2807*/    0x2cad,  1,   0x2cac, /* COPTIC CAPITAL LETTER KHI */
+ /*2810*/    0x2caf,  1,   0x2cae, /* COPTIC CAPITAL LETTER PSI */
+ /*2813*/    0x2cb1,  1,   0x2cb0, /* COPTIC CAPITAL LETTER OOU */
+ /*2816*/    0x2cb3,  1,   0x2cb2, /* COPTIC CAPITAL LETTER DIALECT-P A.. */
+ /*2819*/    0x2cb5,  1,   0x2cb4, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
+ /*2822*/    0x2cb7,  1,   0x2cb6, /* COPTIC CAPITAL LETTER CRYPTOGRAMM.. */
+ /*2825*/    0x2cb9,  1,   0x2cb8, /* COPTIC CAPITAL LETTER DIALECT-P K.. */
+ /*2828*/    0x2cbb,  1,   0x2cba, /* COPTIC CAPITAL LETTER DIALECT-P NI */
+ /*2831*/    0x2cbd,  1,   0x2cbc, /* COPTIC CAPITAL LETTER CRYPTOGRAMM.. */
+ /*2834*/    0x2cbf,  1,   0x2cbe, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
+ /*2837*/    0x2cc1,  1,   0x2cc0, /* COPTIC CAPITAL LETTER SAMPI */
+ /*2840*/    0x2cc3,  1,   0x2cc2, /* COPTIC CAPITAL LETTER CROSSED SHEI */
+ /*2843*/    0x2cc5,  1,   0x2cc4, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
+ /*2846*/    0x2cc7,  1,   0x2cc6, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
+ /*2849*/    0x2cc9,  1,   0x2cc8, /* COPTIC CAPITAL LETTER AKHMIMIC KH.. */
+ /*2852*/    0x2ccb,  1,   0x2cca, /* COPTIC CAPITAL LETTER DIALECT-P H.. */
+ /*2855*/    0x2ccd,  1,   0x2ccc, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
+ /*2858*/    0x2ccf,  1,   0x2cce, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
+ /*2861*/    0x2cd1,  1,   0x2cd0, /* COPTIC CAPITAL LETTER L-SHAPED HA */
+ /*2864*/    0x2cd3,  1,   0x2cd2, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
+ /*2867*/    0x2cd5,  1,   0x2cd4, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
+ /*2870*/    0x2cd7,  1,   0x2cd6, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
+ /*2873*/    0x2cd9,  1,   0x2cd8, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
+ /*2876*/    0x2cdb,  1,   0x2cda, /* COPTIC CAPITAL LETTER OLD COPTIC .. */
+ /*2879*/    0x2cdd,  1,   0x2cdc, /* COPTIC CAPITAL LETTER OLD NUBIAN .. */
+ /*2882*/    0x2cdf,  1,   0x2cde, /* COPTIC CAPITAL LETTER OLD NUBIAN .. */
+ /*2885*/    0x2ce1,  1,   0x2ce0, /* COPTIC CAPITAL LETTER OLD NUBIAN .. */
+ /*2888*/    0x2ce3,  1,   0x2ce2, /* COPTIC CAPITAL LETTER OLD NUBIAN .. */
+ /*2891*/    0x2cec,  1,   0x2ceb, /* COPTIC CAPITAL LETTER CRYPTOGRAMM.. */
+ /*2894*/    0x2cee,  1,   0x2ced, /* COPTIC CAPITAL LETTER CRYPTOGRAMM.. */
+ /*2897*/    0x2cf3,  1,   0x2cf2, /* COPTIC CAPITAL LETTER BOHAIRIC KH.. */
+ /*2900*/    0x2d00,  1,   0x10a0, /* GEORGIAN CAPITAL LETTER AN */
+ /*2903*/    0x2d01,  1,   0x10a1, /* GEORGIAN CAPITAL LETTER BAN */
+ /*2906*/    0x2d02,  1,   0x10a2, /* GEORGIAN CAPITAL LETTER GAN */
+ /*2909*/    0x2d03,  1,   0x10a3, /* GEORGIAN CAPITAL LETTER DON */
+ /*2912*/    0x2d04,  1,   0x10a4, /* GEORGIAN CAPITAL LETTER EN */
+ /*2915*/    0x2d05,  1,   0x10a5, /* GEORGIAN CAPITAL LETTER VIN */
+ /*2918*/    0x2d06,  1,   0x10a6, /* GEORGIAN CAPITAL LETTER ZEN */
+ /*2921*/    0x2d07,  1,   0x10a7, /* GEORGIAN CAPITAL LETTER TAN */
+ /*2924*/    0x2d08,  1,   0x10a8, /* GEORGIAN CAPITAL LETTER IN */
+ /*2927*/    0x2d09,  1,   0x10a9, /* GEORGIAN CAPITAL LETTER KAN */
+ /*2930*/    0x2d0a,  1,   0x10aa, /* GEORGIAN CAPITAL LETTER LAS */
+ /*2933*/    0x2d0b,  1,   0x10ab, /* GEORGIAN CAPITAL LETTER MAN */
+ /*2936*/    0x2d0c,  1,   0x10ac, /* GEORGIAN CAPITAL LETTER NAR */
+ /*2939*/    0x2d0d,  1,   0x10ad, /* GEORGIAN CAPITAL LETTER ON */
+ /*2942*/    0x2d0e,  1,   0x10ae, /* GEORGIAN CAPITAL LETTER PAR */
+ /*2945*/    0x2d0f,  1,   0x10af, /* GEORGIAN CAPITAL LETTER ZHAR */
+ /*2948*/    0x2d10,  1,   0x10b0, /* GEORGIAN CAPITAL LETTER RAE */
+ /*2951*/    0x2d11,  1,   0x10b1, /* GEORGIAN CAPITAL LETTER SAN */
+ /*2954*/    0x2d12,  1,   0x10b2, /* GEORGIAN CAPITAL LETTER TAR */
+ /*2957*/    0x2d13,  1,   0x10b3, /* GEORGIAN CAPITAL LETTER UN */
+ /*2960*/    0x2d14,  1,   0x10b4, /* GEORGIAN CAPITAL LETTER PHAR */
+ /*2963*/    0x2d15,  1,   0x10b5, /* GEORGIAN CAPITAL LETTER KHAR */
+ /*2966*/    0x2d16,  1,   0x10b6, /* GEORGIAN CAPITAL LETTER GHAN */
+ /*2969*/    0x2d17,  1,   0x10b7, /* GEORGIAN CAPITAL LETTER QAR */
+ /*2972*/    0x2d18,  1,   0x10b8, /* GEORGIAN CAPITAL LETTER SHIN */
+ /*2975*/    0x2d19,  1,   0x10b9, /* GEORGIAN CAPITAL LETTER CHIN */
+ /*2978*/    0x2d1a,  1,   0x10ba, /* GEORGIAN CAPITAL LETTER CAN */
+ /*2981*/    0x2d1b,  1,   0x10bb, /* GEORGIAN CAPITAL LETTER JIL */
+ /*2984*/    0x2d1c,  1,   0x10bc, /* GEORGIAN CAPITAL LETTER CIL */
+ /*2987*/    0x2d1d,  1,   0x10bd, /* GEORGIAN CAPITAL LETTER CHAR */
+ /*2990*/    0x2d1e,  1,   0x10be, /* GEORGIAN CAPITAL LETTER XAN */
+ /*2993*/    0x2d1f,  1,   0x10bf, /* GEORGIAN CAPITAL LETTER JHAN */
+ /*2996*/    0x2d20,  1,   0x10c0, /* GEORGIAN CAPITAL LETTER HAE */
+ /*2999*/    0x2d21,  1,   0x10c1, /* GEORGIAN CAPITAL LETTER HE */
+ /*3002*/    0x2d22,  1,   0x10c2, /* GEORGIAN CAPITAL LETTER HIE */
+ /*3005*/    0x2d23,  1,   0x10c3, /* GEORGIAN CAPITAL LETTER WE */
+ /*3008*/    0x2d24,  1,   0x10c4, /* GEORGIAN CAPITAL LETTER HAR */
+ /*3011*/    0x2d25,  1,   0x10c5, /* GEORGIAN CAPITAL LETTER HOE */
+ /*3014*/    0x2d27,  1,   0x10c7, /* GEORGIAN CAPITAL LETTER YN */
+ /*3017*/    0x2d2d,  1,   0x10cd, /* GEORGIAN CAPITAL LETTER AEN */
+ /*3020*/    0xa641,  1,   0xa640, /* CYRILLIC CAPITAL LETTER ZEMLYA */
+ /*3023*/    0xa643,  1,   0xa642, /* CYRILLIC CAPITAL LETTER DZELO */
+ /*3026*/    0xa645,  1,   0xa644, /* CYRILLIC CAPITAL LETTER REVERSED .. */
+ /*3029*/    0xa647,  1,   0xa646, /* CYRILLIC CAPITAL LETTER IOTA */
+ /*3032*/    0xa649,  1,   0xa648, /* CYRILLIC CAPITAL LETTER DJERV */
+ /*3035*/    0xa64b,  2,   0x1c88,   0xa64a, /* CYRILLIC SMALL LETTER UNBLENDED UK */
+ /*3039*/    0xa64d,  1,   0xa64c, /* CYRILLIC CAPITAL LETTER BROAD OME.. */
+ /*3042*/    0xa64f,  1,   0xa64e, /* CYRILLIC CAPITAL LETTER NEUTRAL Y.. */
+ /*3045*/    0xa651,  1,   0xa650, /* CYRILLIC CAPITAL LETTER YERU WITH.. */
+ /*3048*/    0xa653,  1,   0xa652, /* CYRILLIC CAPITAL LETTER IOTIFIED .. */
+ /*3051*/    0xa655,  1,   0xa654, /* CYRILLIC CAPITAL LETTER REVERSED .. */
+ /*3054*/    0xa657,  1,   0xa656, /* CYRILLIC CAPITAL LETTER IOTIFIED A */
+ /*3057*/    0xa659,  1,   0xa658, /* CYRILLIC CAPITAL LETTER CLOSED LI.. */
+ /*3060*/    0xa65b,  1,   0xa65a, /* CYRILLIC CAPITAL LETTER BLENDED Y.. */
+ /*3063*/    0xa65d,  1,   0xa65c, /* CYRILLIC CAPITAL LETTER IOTIFIED .. */
+ /*3066*/    0xa65f,  1,   0xa65e, /* CYRILLIC CAPITAL LETTER YN */
+ /*3069*/    0xa661,  1,   0xa660, /* CYRILLIC CAPITAL LETTER REVERSED .. */
+ /*3072*/    0xa663,  1,   0xa662, /* CYRILLIC CAPITAL LETTER SOFT DE */
+ /*3075*/    0xa665,  1,   0xa664, /* CYRILLIC CAPITAL LETTER SOFT EL */
+ /*3078*/    0xa667,  1,   0xa666, /* CYRILLIC CAPITAL LETTER SOFT EM */
+ /*3081*/    0xa669,  1,   0xa668, /* CYRILLIC CAPITAL LETTER MONOCULAR.. */
+ /*3084*/    0xa66b,  1,   0xa66a, /* CYRILLIC CAPITAL LETTER BINOCULAR.. */
+ /*3087*/    0xa66d,  1,   0xa66c, /* CYRILLIC CAPITAL LETTER DOUBLE MO.. */
+ /*3090*/    0xa681,  1,   0xa680, /* CYRILLIC CAPITAL LETTER DWE */
+ /*3093*/    0xa683,  1,   0xa682, /* CYRILLIC CAPITAL LETTER DZWE */
+ /*3096*/    0xa685,  1,   0xa684, /* CYRILLIC CAPITAL LETTER ZHWE */
+ /*3099*/    0xa687,  1,   0xa686, /* CYRILLIC CAPITAL LETTER CCHE */
+ /*3102*/    0xa689,  1,   0xa688, /* CYRILLIC CAPITAL LETTER DZZE */
+ /*3105*/    0xa68b,  1,   0xa68a, /* CYRILLIC CAPITAL LETTER TE WITH M.. */
+ /*3108*/    0xa68d,  1,   0xa68c, /* CYRILLIC CAPITAL LETTER TWE */
+ /*3111*/    0xa68f,  1,   0xa68e, /* CYRILLIC CAPITAL LETTER TSWE */
+ /*3114*/    0xa691,  1,   0xa690, /* CYRILLIC CAPITAL LETTER TSSE */
+ /*3117*/    0xa693,  1,   0xa692, /* CYRILLIC CAPITAL LETTER TCHE */
+ /*3120*/    0xa695,  1,   0xa694, /* CYRILLIC CAPITAL LETTER HWE */
+ /*3123*/    0xa697,  1,   0xa696, /* CYRILLIC CAPITAL LETTER SHWE */
+ /*3126*/    0xa699,  1,   0xa698, /* CYRILLIC CAPITAL LETTER DOUBLE O */
+ /*3129*/    0xa69b,  1,   0xa69a, /* CYRILLIC CAPITAL LETTER CROSSED O */
+ /*3132*/    0xa723,  1,   0xa722, /* LATIN CAPITAL LETTER EGYPTOLOGICA.. */
+ /*3135*/    0xa725,  1,   0xa724, /* LATIN CAPITAL LETTER EGYPTOLOGICA.. */
+ /*3138*/    0xa727,  1,   0xa726, /* LATIN CAPITAL LETTER HENG */
+ /*3141*/    0xa729,  1,   0xa728, /* LATIN CAPITAL LETTER TZ */
+ /*3144*/    0xa72b,  1,   0xa72a, /* LATIN CAPITAL LETTER TRESILLO */
+ /*3147*/    0xa72d,  1,   0xa72c, /* LATIN CAPITAL LETTER CUATRILLO */
+ /*3150*/    0xa72f,  1,   0xa72e, /* LATIN CAPITAL LETTER CUATRILLO WI.. */
+ /*3153*/    0xa733,  1,   0xa732, /* LATIN CAPITAL LETTER AA */
+ /*3156*/    0xa735,  1,   0xa734, /* LATIN CAPITAL LETTER AO */
+ /*3159*/    0xa737,  1,   0xa736, /* LATIN CAPITAL LETTER AU */
+ /*3162*/    0xa739,  1,   0xa738, /* LATIN CAPITAL LETTER AV */
+ /*3165*/    0xa73b,  1,   0xa73a, /* LATIN CAPITAL LETTER AV WITH HORI.. */
+ /*3168*/    0xa73d,  1,   0xa73c, /* LATIN CAPITAL LETTER AY */
+ /*3171*/    0xa73f,  1,   0xa73e, /* LATIN CAPITAL LETTER REVERSED C W.. */
+ /*3174*/    0xa741,  1,   0xa740, /* LATIN CAPITAL LETTER K WITH STROKE */
+ /*3177*/    0xa743,  1,   0xa742, /* LATIN CAPITAL LETTER K WITH DIAGO.. */
+ /*3180*/    0xa745,  1,   0xa744, /* LATIN CAPITAL LETTER K WITH STROK.. */
+ /*3183*/    0xa747,  1,   0xa746, /* LATIN CAPITAL LETTER BROKEN L */
+ /*3186*/    0xa749,  1,   0xa748, /* LATIN CAPITAL LETTER L WITH HIGH .. */
+ /*3189*/    0xa74b,  1,   0xa74a, /* LATIN CAPITAL LETTER O WITH LONG .. */
+ /*3192*/    0xa74d,  1,   0xa74c, /* LATIN CAPITAL LETTER O WITH LOOP */
+ /*3195*/    0xa74f,  1,   0xa74e, /* LATIN CAPITAL LETTER OO */
+ /*3198*/    0xa751,  1,   0xa750, /* LATIN CAPITAL LETTER P WITH STROK.. */
+ /*3201*/    0xa753,  1,   0xa752, /* LATIN CAPITAL LETTER P WITH FLOUR.. */
+ /*3204*/    0xa755,  1,   0xa754, /* LATIN CAPITAL LETTER P WITH SQUIR.. */
+ /*3207*/    0xa757,  1,   0xa756, /* LATIN CAPITAL LETTER Q WITH STROK.. */
+ /*3210*/    0xa759,  1,   0xa758, /* LATIN CAPITAL LETTER Q WITH DIAGO.. */
+ /*3213*/    0xa75b,  1,   0xa75a, /* LATIN CAPITAL LETTER R ROTUNDA */
+ /*3216*/    0xa75d,  1,   0xa75c, /* LATIN CAPITAL LETTER RUM ROTUNDA */
+ /*3219*/    0xa75f,  1,   0xa75e, /* LATIN CAPITAL LETTER V WITH DIAGO.. */
+ /*3222*/    0xa761,  1,   0xa760, /* LATIN CAPITAL LETTER VY */
+ /*3225*/    0xa763,  1,   0xa762, /* LATIN CAPITAL LETTER VISIGOTHIC Z */
+ /*3228*/    0xa765,  1,   0xa764, /* LATIN CAPITAL LETTER THORN WITH S.. */
+ /*3231*/    0xa767,  1,   0xa766, /* LATIN CAPITAL LETTER THORN WITH S.. */
+ /*3234*/    0xa769,  1,   0xa768, /* LATIN CAPITAL LETTER VEND */
+ /*3237*/    0xa76b,  1,   0xa76a, /* LATIN CAPITAL LETTER ET */
+ /*3240*/    0xa76d,  1,   0xa76c, /* LATIN CAPITAL LETTER IS */
+ /*3243*/    0xa76f,  1,   0xa76e, /* LATIN CAPITAL LETTER CON */
+ /*3246*/    0xa77a,  1,   0xa779, /* LATIN CAPITAL LETTER INSULAR D */
+ /*3249*/    0xa77c,  1,   0xa77b, /* LATIN CAPITAL LETTER INSULAR F */
+ /*3252*/    0xa77f,  1,   0xa77e, /* LATIN CAPITAL LETTER TURNED INSUL.. */
+ /*3255*/    0xa781,  1,   0xa780, /* LATIN CAPITAL LETTER TURNED L */
+ /*3258*/    0xa783,  1,   0xa782, /* LATIN CAPITAL LETTER INSULAR R */
+ /*3261*/    0xa785,  1,   0xa784, /* LATIN CAPITAL LETTER INSULAR S */
+ /*3264*/    0xa787,  1,   0xa786, /* LATIN CAPITAL LETTER INSULAR T */
+ /*3267*/    0xa78c,  1,   0xa78b, /* LATIN CAPITAL LETTER SALTILLO */
+ /*3270*/    0xa791,  1,   0xa790, /* LATIN CAPITAL LETTER N WITH DESCE.. */
+ /*3273*/    0xa793,  1,   0xa792, /* LATIN CAPITAL LETTER C WITH BAR */
+ /*3276*/    0xa794,  1,   0xa7c4, /* LATIN CAPITAL LETTER C WITH PALAT.. */
+ /*3279*/    0xa797,  1,   0xa796, /* LATIN CAPITAL LETTER B WITH FLOUR.. */
+ /*3282*/    0xa799,  1,   0xa798, /* LATIN CAPITAL LETTER F WITH STROKE */
+ /*3285*/    0xa79b,  1,   0xa79a, /* LATIN CAPITAL LETTER VOLAPUK AE */
+ /*3288*/    0xa79d,  1,   0xa79c, /* LATIN CAPITAL LETTER VOLAPUK OE */
+ /*3291*/    0xa79f,  1,   0xa79e, /* LATIN CAPITAL LETTER VOLAPUK UE */
+ /*3294*/    0xa7a1,  1,   0xa7a0, /* LATIN CAPITAL LETTER G WITH OBLIQ.. */
+ /*3297*/    0xa7a3,  1,   0xa7a2, /* LATIN CAPITAL LETTER K WITH OBLIQ.. */
+ /*3300*/    0xa7a5,  1,   0xa7a4, /* LATIN CAPITAL LETTER N WITH OBLIQ.. */
+ /*3303*/    0xa7a7,  1,   0xa7a6, /* LATIN CAPITAL LETTER R WITH OBLIQ.. */
+ /*3306*/    0xa7a9,  1,   0xa7a8, /* LATIN CAPITAL LETTER S WITH OBLIQ.. */
+ /*3309*/    0xa7b5,  1,   0xa7b4, /* LATIN CAPITAL LETTER BETA */
+ /*3312*/    0xa7b7,  1,   0xa7b6, /* LATIN CAPITAL LETTER OMEGA */
+ /*3315*/    0xa7b9,  1,   0xa7b8, /* LATIN CAPITAL LETTER U WITH STROKE */
+ /*3318*/    0xa7bb,  1,   0xa7ba, /* LATIN CAPITAL LETTER GLOTTAL A */
+ /*3321*/    0xa7bd,  1,   0xa7bc, /* LATIN CAPITAL LETTER GLOTTAL I */
+ /*3324*/    0xa7bf,  1,   0xa7be, /* LATIN CAPITAL LETTER GLOTTAL U */
+ /*3327*/    0xa7c3,  1,   0xa7c2, /* LATIN CAPITAL LETTER ANGLICANA W */
+ /*3330*/    0xab53,  1,   0xa7b3, /* LATIN CAPITAL LETTER CHI */
+ /*3333*/    0xff41,  1,   0xff21, /* FULLWIDTH LATIN CAPITAL LETTER A */
+ /*3336*/    0xff42,  1,   0xff22, /* FULLWIDTH LATIN CAPITAL LETTER B */
+ /*3339*/    0xff43,  1,   0xff23, /* FULLWIDTH LATIN CAPITAL LETTER C */
+ /*3342*/    0xff44,  1,   0xff24, /* FULLWIDTH LATIN CAPITAL LETTER D */
+ /*3345*/    0xff45,  1,   0xff25, /* FULLWIDTH LATIN CAPITAL LETTER E */
+ /*3348*/    0xff46,  1,   0xff26, /* FULLWIDTH LATIN CAPITAL LETTER F */
+ /*3351*/    0xff47,  1,   0xff27, /* FULLWIDTH LATIN CAPITAL LETTER G */
+ /*3354*/    0xff48,  1,   0xff28, /* FULLWIDTH LATIN CAPITAL LETTER H */
+ /*3357*/    0xff49,  1,   0xff29, /* FULLWIDTH LATIN CAPITAL LETTER I */
+ /*3360*/    0xff4a,  1,   0xff2a, /* FULLWIDTH LATIN CAPITAL LETTER J */
+ /*3363*/    0xff4b,  1,   0xff2b, /* FULLWIDTH LATIN CAPITAL LETTER K */
+ /*3366*/    0xff4c,  1,   0xff2c, /* FULLWIDTH LATIN CAPITAL LETTER L */
+ /*3369*/    0xff4d,  1,   0xff2d, /* FULLWIDTH LATIN CAPITAL LETTER M */
+ /*3372*/    0xff4e,  1,   0xff2e, /* FULLWIDTH LATIN CAPITAL LETTER N */
+ /*3375*/    0xff4f,  1,   0xff2f, /* FULLWIDTH LATIN CAPITAL LETTER O */
+ /*3378*/    0xff50,  1,   0xff30, /* FULLWIDTH LATIN CAPITAL LETTER P */
+ /*3381*/    0xff51,  1,   0xff31, /* FULLWIDTH LATIN CAPITAL LETTER Q */
+ /*3384*/    0xff52,  1,   0xff32, /* FULLWIDTH LATIN CAPITAL LETTER R */
+ /*3387*/    0xff53,  1,   0xff33, /* FULLWIDTH LATIN CAPITAL LETTER S */
+ /*3390*/    0xff54,  1,   0xff34, /* FULLWIDTH LATIN CAPITAL LETTER T */
+ /*3393*/    0xff55,  1,   0xff35, /* FULLWIDTH LATIN CAPITAL LETTER U */
+ /*3396*/    0xff56,  1,   0xff36, /* FULLWIDTH LATIN CAPITAL LETTER V */
+ /*3399*/    0xff57,  1,   0xff37, /* FULLWIDTH LATIN CAPITAL LETTER W */
+ /*3402*/    0xff58,  1,   0xff38, /* FULLWIDTH LATIN CAPITAL LETTER X */
+ /*3405*/    0xff59,  1,   0xff39, /* FULLWIDTH LATIN CAPITAL LETTER Y */
+ /*3408*/    0xff5a,  1,   0xff3a, /* FULLWIDTH LATIN CAPITAL LETTER Z */
+ /*3411*/  0x010428,  1, 0x010400, /* DESERET CAPITAL LETTER LONG I */
+ /*3414*/  0x010429,  1, 0x010401, /* DESERET CAPITAL LETTER LONG E */
+ /*3417*/  0x01042a,  1, 0x010402, /* DESERET CAPITAL LETTER LONG A */
+ /*3420*/  0x01042b,  1, 0x010403, /* DESERET CAPITAL LETTER LONG AH */
+ /*3423*/  0x01042c,  1, 0x010404, /* DESERET CAPITAL LETTER LONG O */
+ /*3426*/  0x01042d,  1, 0x010405, /* DESERET CAPITAL LETTER LONG OO */
+ /*3429*/  0x01042e,  1, 0x010406, /* DESERET CAPITAL LETTER SHORT I */
+ /*3432*/  0x01042f,  1, 0x010407, /* DESERET CAPITAL LETTER SHORT E */
+ /*3435*/  0x010430,  1, 0x010408, /* DESERET CAPITAL LETTER SHORT A */
+ /*3438*/  0x010431,  1, 0x010409, /* DESERET CAPITAL LETTER SHORT AH */
+ /*3441*/  0x010432,  1, 0x01040a, /* DESERET CAPITAL LETTER SHORT O */
+ /*3444*/  0x010433,  1, 0x01040b, /* DESERET CAPITAL LETTER SHORT OO */
+ /*3447*/  0x010434,  1, 0x01040c, /* DESERET CAPITAL LETTER AY */
+ /*3450*/  0x010435,  1, 0x01040d, /* DESERET CAPITAL LETTER OW */
+ /*3453*/  0x010436,  1, 0x01040e, /* DESERET CAPITAL LETTER WU */
+ /*3456*/  0x010437,  1, 0x01040f, /* DESERET CAPITAL LETTER YEE */
+ /*3459*/  0x010438,  1, 0x010410, /* DESERET CAPITAL LETTER H */
+ /*3462*/  0x010439,  1, 0x010411, /* DESERET CAPITAL LETTER PEE */
+ /*3465*/  0x01043a,  1, 0x010412, /* DESERET CAPITAL LETTER BEE */
+ /*3468*/  0x01043b,  1, 0x010413, /* DESERET CAPITAL LETTER TEE */
+ /*3471*/  0x01043c,  1, 0x010414, /* DESERET CAPITAL LETTER DEE */
+ /*3474*/  0x01043d,  1, 0x010415, /* DESERET CAPITAL LETTER CHEE */
+ /*3477*/  0x01043e,  1, 0x010416, /* DESERET CAPITAL LETTER JEE */
+ /*3480*/  0x01043f,  1, 0x010417, /* DESERET CAPITAL LETTER KAY */
+ /*3483*/  0x010440,  1, 0x010418, /* DESERET CAPITAL LETTER GAY */
+ /*3486*/  0x010441,  1, 0x010419, /* DESERET CAPITAL LETTER EF */
+ /*3489*/  0x010442,  1, 0x01041a, /* DESERET CAPITAL LETTER VEE */
+ /*3492*/  0x010443,  1, 0x01041b, /* DESERET CAPITAL LETTER ETH */
+ /*3495*/  0x010444,  1, 0x01041c, /* DESERET CAPITAL LETTER THEE */
+ /*3498*/  0x010445,  1, 0x01041d, /* DESERET CAPITAL LETTER ES */
+ /*3501*/  0x010446,  1, 0x01041e, /* DESERET CAPITAL LETTER ZEE */
+ /*3504*/  0x010447,  1, 0x01041f, /* DESERET CAPITAL LETTER ESH */
+ /*3507*/  0x010448,  1, 0x010420, /* DESERET CAPITAL LETTER ZHEE */
+ /*3510*/  0x010449,  1, 0x010421, /* DESERET CAPITAL LETTER ER */
+ /*3513*/  0x01044a,  1, 0x010422, /* DESERET CAPITAL LETTER EL */
+ /*3516*/  0x01044b,  1, 0x010423, /* DESERET CAPITAL LETTER EM */
+ /*3519*/  0x01044c,  1, 0x010424, /* DESERET CAPITAL LETTER EN */
+ /*3522*/  0x01044d,  1, 0x010425, /* DESERET CAPITAL LETTER ENG */
+ /*3525*/  0x01044e,  1, 0x010426, /* DESERET CAPITAL LETTER OI */
+ /*3528*/  0x01044f,  1, 0x010427, /* DESERET CAPITAL LETTER EW */
+ /*3531*/  0x0104d8,  1, 0x0104b0, /* OSAGE CAPITAL LETTER A */
+ /*3534*/  0x0104d9,  1, 0x0104b1, /* OSAGE CAPITAL LETTER AI */
+ /*3537*/  0x0104da,  1, 0x0104b2, /* OSAGE CAPITAL LETTER AIN */
+ /*3540*/  0x0104db,  1, 0x0104b3, /* OSAGE CAPITAL LETTER AH */
+ /*3543*/  0x0104dc,  1, 0x0104b4, /* OSAGE CAPITAL LETTER BRA */
+ /*3546*/  0x0104dd,  1, 0x0104b5, /* OSAGE CAPITAL LETTER CHA */
+ /*3549*/  0x0104de,  1, 0x0104b6, /* OSAGE CAPITAL LETTER EHCHA */
+ /*3552*/  0x0104df,  1, 0x0104b7, /* OSAGE CAPITAL LETTER E */
+ /*3555*/  0x0104e0,  1, 0x0104b8, /* OSAGE CAPITAL LETTER EIN */
+ /*3558*/  0x0104e1,  1, 0x0104b9, /* OSAGE CAPITAL LETTER HA */
+ /*3561*/  0x0104e2,  1, 0x0104ba, /* OSAGE CAPITAL LETTER HYA */
+ /*3564*/  0x0104e3,  1, 0x0104bb, /* OSAGE CAPITAL LETTER I */
+ /*3567*/  0x0104e4,  1, 0x0104bc, /* OSAGE CAPITAL LETTER KA */
+ /*3570*/  0x0104e5,  1, 0x0104bd, /* OSAGE CAPITAL LETTER EHKA */
+ /*3573*/  0x0104e6,  1, 0x0104be, /* OSAGE CAPITAL LETTER KYA */
+ /*3576*/  0x0104e7,  1, 0x0104bf, /* OSAGE CAPITAL LETTER LA */
+ /*3579*/  0x0104e8,  1, 0x0104c0, /* OSAGE CAPITAL LETTER MA */
+ /*3582*/  0x0104e9,  1, 0x0104c1, /* OSAGE CAPITAL LETTER NA */
+ /*3585*/  0x0104ea,  1, 0x0104c2, /* OSAGE CAPITAL LETTER O */
+ /*3588*/  0x0104eb,  1, 0x0104c3, /* OSAGE CAPITAL LETTER OIN */
+ /*3591*/  0x0104ec,  1, 0x0104c4, /* OSAGE CAPITAL LETTER PA */
+ /*3594*/  0x0104ed,  1, 0x0104c5, /* OSAGE CAPITAL LETTER EHPA */
+ /*3597*/  0x0104ee,  1, 0x0104c6, /* OSAGE CAPITAL LETTER SA */
+ /*3600*/  0x0104ef,  1, 0x0104c7, /* OSAGE CAPITAL LETTER SHA */
+ /*3603*/  0x0104f0,  1, 0x0104c8, /* OSAGE CAPITAL LETTER TA */
+ /*3606*/  0x0104f1,  1, 0x0104c9, /* OSAGE CAPITAL LETTER EHTA */
+ /*3609*/  0x0104f2,  1, 0x0104ca, /* OSAGE CAPITAL LETTER TSA */
+ /*3612*/  0x0104f3,  1, 0x0104cb, /* OSAGE CAPITAL LETTER EHTSA */
+ /*3615*/  0x0104f4,  1, 0x0104cc, /* OSAGE CAPITAL LETTER TSHA */
+ /*3618*/  0x0104f5,  1, 0x0104cd, /* OSAGE CAPITAL LETTER DHA */
+ /*3621*/  0x0104f6,  1, 0x0104ce, /* OSAGE CAPITAL LETTER U */
+ /*3624*/  0x0104f7,  1, 0x0104cf, /* OSAGE CAPITAL LETTER WA */
+ /*3627*/  0x0104f8,  1, 0x0104d0, /* OSAGE CAPITAL LETTER KHA */
+ /*3630*/  0x0104f9,  1, 0x0104d1, /* OSAGE CAPITAL LETTER GHA */
+ /*3633*/  0x0104fa,  1, 0x0104d2, /* OSAGE CAPITAL LETTER ZA */
+ /*3636*/  0x0104fb,  1, 0x0104d3, /* OSAGE CAPITAL LETTER ZHA */
+ /*3639*/  0x010cc0,  1, 0x010c80, /* OLD HUNGARIAN CAPITAL LETTER A */
+ /*3642*/  0x010cc1,  1, 0x010c81, /* OLD HUNGARIAN CAPITAL LETTER AA */
+ /*3645*/  0x010cc2,  1, 0x010c82, /* OLD HUNGARIAN CAPITAL LETTER EB */
+ /*3648*/  0x010cc3,  1, 0x010c83, /* OLD HUNGARIAN CAPITAL LETTER AMB */
+ /*3651*/  0x010cc4,  1, 0x010c84, /* OLD HUNGARIAN CAPITAL LETTER EC */
+ /*3654*/  0x010cc5,  1, 0x010c85, /* OLD HUNGARIAN CAPITAL LETTER ENC */
+ /*3657*/  0x010cc6,  1, 0x010c86, /* OLD HUNGARIAN CAPITAL LETTER ECS */
+ /*3660*/  0x010cc7,  1, 0x010c87, /* OLD HUNGARIAN CAPITAL LETTER ED */
+ /*3663*/  0x010cc8,  1, 0x010c88, /* OLD HUNGARIAN CAPITAL LETTER AND */
+ /*3666*/  0x010cc9,  1, 0x010c89, /* OLD HUNGARIAN CAPITAL LETTER E */
+ /*3669*/  0x010cca,  1, 0x010c8a, /* OLD HUNGARIAN CAPITAL LETTER CLOS.. */
+ /*3672*/  0x010ccb,  1, 0x010c8b, /* OLD HUNGARIAN CAPITAL LETTER EE */
+ /*3675*/  0x010ccc,  1, 0x010c8c, /* OLD HUNGARIAN CAPITAL LETTER EF */
+ /*3678*/  0x010ccd,  1, 0x010c8d, /* OLD HUNGARIAN CAPITAL LETTER EG */
+ /*3681*/  0x010cce,  1, 0x010c8e, /* OLD HUNGARIAN CAPITAL LETTER EGY */
+ /*3684*/  0x010ccf,  1, 0x010c8f, /* OLD HUNGARIAN CAPITAL LETTER EH */
+ /*3687*/  0x010cd0,  1, 0x010c90, /* OLD HUNGARIAN CAPITAL LETTER I */
+ /*3690*/  0x010cd1,  1, 0x010c91, /* OLD HUNGARIAN CAPITAL LETTER II */
+ /*3693*/  0x010cd2,  1, 0x010c92, /* OLD HUNGARIAN CAPITAL LETTER EJ */
+ /*3696*/  0x010cd3,  1, 0x010c93, /* OLD HUNGARIAN CAPITAL LETTER EK */
+ /*3699*/  0x010cd4,  1, 0x010c94, /* OLD HUNGARIAN CAPITAL LETTER AK */
+ /*3702*/  0x010cd5,  1, 0x010c95, /* OLD HUNGARIAN CAPITAL LETTER UNK */
+ /*3705*/  0x010cd6,  1, 0x010c96, /* OLD HUNGARIAN CAPITAL LETTER EL */
+ /*3708*/  0x010cd7,  1, 0x010c97, /* OLD HUNGARIAN CAPITAL LETTER ELY */
+ /*3711*/  0x010cd8,  1, 0x010c98, /* OLD HUNGARIAN CAPITAL LETTER EM */
+ /*3714*/  0x010cd9,  1, 0x010c99, /* OLD HUNGARIAN CAPITAL LETTER EN */
+ /*3717*/  0x010cda,  1, 0x010c9a, /* OLD HUNGARIAN CAPITAL LETTER ENY */
+ /*3720*/  0x010cdb,  1, 0x010c9b, /* OLD HUNGARIAN CAPITAL LETTER O */
+ /*3723*/  0x010cdc,  1, 0x010c9c, /* OLD HUNGARIAN CAPITAL LETTER OO */
+ /*3726*/  0x010cdd,  1, 0x010c9d, /* OLD HUNGARIAN CAPITAL LETTER NIKO.. */
+ /*3729*/  0x010cde,  1, 0x010c9e, /* OLD HUNGARIAN CAPITAL LETTER RUDI.. */
+ /*3732*/  0x010cdf,  1, 0x010c9f, /* OLD HUNGARIAN CAPITAL LETTER OEE */
+ /*3735*/  0x010ce0,  1, 0x010ca0, /* OLD HUNGARIAN CAPITAL LETTER EP */
+ /*3738*/  0x010ce1,  1, 0x010ca1, /* OLD HUNGARIAN CAPITAL LETTER EMP */
+ /*3741*/  0x010ce2,  1, 0x010ca2, /* OLD HUNGARIAN CAPITAL LETTER ER */
+ /*3744*/  0x010ce3,  1, 0x010ca3, /* OLD HUNGARIAN CAPITAL LETTER SHOR.. */
+ /*3747*/  0x010ce4,  1, 0x010ca4, /* OLD HUNGARIAN CAPITAL LETTER ES */
+ /*3750*/  0x010ce5,  1, 0x010ca5, /* OLD HUNGARIAN CAPITAL LETTER ESZ */
+ /*3753*/  0x010ce6,  1, 0x010ca6, /* OLD HUNGARIAN CAPITAL LETTER ET */
+ /*3756*/  0x010ce7,  1, 0x010ca7, /* OLD HUNGARIAN CAPITAL LETTER ENT */
+ /*3759*/  0x010ce8,  1, 0x010ca8, /* OLD HUNGARIAN CAPITAL LETTER ETY */
+ /*3762*/  0x010ce9,  1, 0x010ca9, /* OLD HUNGARIAN CAPITAL LETTER ECH */
+ /*3765*/  0x010cea,  1, 0x010caa, /* OLD HUNGARIAN CAPITAL LETTER U */
+ /*3768*/  0x010ceb,  1, 0x010cab, /* OLD HUNGARIAN CAPITAL LETTER UU */
+ /*3771*/  0x010cec,  1, 0x010cac, /* OLD HUNGARIAN CAPITAL LETTER NIKO.. */
+ /*3774*/  0x010ced,  1, 0x010cad, /* OLD HUNGARIAN CAPITAL LETTER RUDI.. */
+ /*3777*/  0x010cee,  1, 0x010cae, /* OLD HUNGARIAN CAPITAL LETTER EV */
+ /*3780*/  0x010cef,  1, 0x010caf, /* OLD HUNGARIAN CAPITAL LETTER EZ */
+ /*3783*/  0x010cf0,  1, 0x010cb0, /* OLD HUNGARIAN CAPITAL LETTER EZS */
+ /*3786*/  0x010cf1,  1, 0x010cb1, /* OLD HUNGARIAN CAPITAL LETTER ENT-.. */
+ /*3789*/  0x010cf2,  1, 0x010cb2, /* OLD HUNGARIAN CAPITAL LETTER US */
+ /*3792*/  0x0118c0,  1, 0x0118a0, /* WARANG CITI CAPITAL LETTER NGAA */
+ /*3795*/  0x0118c1,  1, 0x0118a1, /* WARANG CITI CAPITAL LETTER A */
+ /*3798*/  0x0118c2,  1, 0x0118a2, /* WARANG CITI CAPITAL LETTER WI */
+ /*3801*/  0x0118c3,  1, 0x0118a3, /* WARANG CITI CAPITAL LETTER YU */
+ /*3804*/  0x0118c4,  1, 0x0118a4, /* WARANG CITI CAPITAL LETTER YA */
+ /*3807*/  0x0118c5,  1, 0x0118a5, /* WARANG CITI CAPITAL LETTER YO */
+ /*3810*/  0x0118c6,  1, 0x0118a6, /* WARANG CITI CAPITAL LETTER II */
+ /*3813*/  0x0118c7,  1, 0x0118a7, /* WARANG CITI CAPITAL LETTER UU */
+ /*3816*/  0x0118c8,  1, 0x0118a8, /* WARANG CITI CAPITAL LETTER E */
+ /*3819*/  0x0118c9,  1, 0x0118a9, /* WARANG CITI CAPITAL LETTER O */
+ /*3822*/  0x0118ca,  1, 0x0118aa, /* WARANG CITI CAPITAL LETTER ANG */
+ /*3825*/  0x0118cb,  1, 0x0118ab, /* WARANG CITI CAPITAL LETTER GA */
+ /*3828*/  0x0118cc,  1, 0x0118ac, /* WARANG CITI CAPITAL LETTER KO */
+ /*3831*/  0x0118cd,  1, 0x0118ad, /* WARANG CITI CAPITAL LETTER ENY */
+ /*3834*/  0x0118ce,  1, 0x0118ae, /* WARANG CITI CAPITAL LETTER YUJ */
+ /*3837*/  0x0118cf,  1, 0x0118af, /* WARANG CITI CAPITAL LETTER UC */
+ /*3840*/  0x0118d0,  1, 0x0118b0, /* WARANG CITI CAPITAL LETTER ENN */
+ /*3843*/  0x0118d1,  1, 0x0118b1, /* WARANG CITI CAPITAL LETTER ODD */
+ /*3846*/  0x0118d2,  1, 0x0118b2, /* WARANG CITI CAPITAL LETTER TTE */
+ /*3849*/  0x0118d3,  1, 0x0118b3, /* WARANG CITI CAPITAL LETTER NUNG */
+ /*3852*/  0x0118d4,  1, 0x0118b4, /* WARANG CITI CAPITAL LETTER DA */
+ /*3855*/  0x0118d5,  1, 0x0118b5, /* WARANG CITI CAPITAL LETTER AT */
+ /*3858*/  0x0118d6,  1, 0x0118b6, /* WARANG CITI CAPITAL LETTER AM */
+ /*3861*/  0x0118d7,  1, 0x0118b7, /* WARANG CITI CAPITAL LETTER BU */
+ /*3864*/  0x0118d8,  1, 0x0118b8, /* WARANG CITI CAPITAL LETTER PU */
+ /*3867*/  0x0118d9,  1, 0x0118b9, /* WARANG CITI CAPITAL LETTER HIYO */
+ /*3870*/  0x0118da,  1, 0x0118ba, /* WARANG CITI CAPITAL LETTER HOLO */
+ /*3873*/  0x0118db,  1, 0x0118bb, /* WARANG CITI CAPITAL LETTER HORR */
+ /*3876*/  0x0118dc,  1, 0x0118bc, /* WARANG CITI CAPITAL LETTER HAR */
+ /*3879*/  0x0118dd,  1, 0x0118bd, /* WARANG CITI CAPITAL LETTER SSUU */
+ /*3882*/  0x0118de,  1, 0x0118be, /* WARANG CITI CAPITAL LETTER SII */
+ /*3885*/  0x0118df,  1, 0x0118bf, /* WARANG CITI CAPITAL LETTER VIYO */
+ /*3888*/  0x016e60,  1, 0x016e40, /* MEDEFAIDRIN CAPITAL LETTER M */
+ /*3891*/  0x016e61,  1, 0x016e41, /* MEDEFAIDRIN CAPITAL LETTER S */
+ /*3894*/  0x016e62,  1, 0x016e42, /* MEDEFAIDRIN CAPITAL LETTER V */
+ /*3897*/  0x016e63,  1, 0x016e43, /* MEDEFAIDRIN CAPITAL LETTER W */
+ /*3900*/  0x016e64,  1, 0x016e44, /* MEDEFAIDRIN CAPITAL LETTER ATIU */
+ /*3903*/  0x016e65,  1, 0x016e45, /* MEDEFAIDRIN CAPITAL LETTER Z */
+ /*3906*/  0x016e66,  1, 0x016e46, /* MEDEFAIDRIN CAPITAL LETTER KP */
+ /*3909*/  0x016e67,  1, 0x016e47, /* MEDEFAIDRIN CAPITAL LETTER P */
+ /*3912*/  0x016e68,  1, 0x016e48, /* MEDEFAIDRIN CAPITAL LETTER T */
+ /*3915*/  0x016e69,  1, 0x016e49, /* MEDEFAIDRIN CAPITAL LETTER G */
+ /*3918*/  0x016e6a,  1, 0x016e4a, /* MEDEFAIDRIN CAPITAL LETTER F */
+ /*3921*/  0x016e6b,  1, 0x016e4b, /* MEDEFAIDRIN CAPITAL LETTER I */
+ /*3924*/  0x016e6c,  1, 0x016e4c, /* MEDEFAIDRIN CAPITAL LETTER K */
+ /*3927*/  0x016e6d,  1, 0x016e4d, /* MEDEFAIDRIN CAPITAL LETTER A */
+ /*3930*/  0x016e6e,  1, 0x016e4e, /* MEDEFAIDRIN CAPITAL LETTER J */
+ /*3933*/  0x016e6f,  1, 0x016e4f, /* MEDEFAIDRIN CAPITAL LETTER E */
+ /*3936*/  0x016e70,  1, 0x016e50, /* MEDEFAIDRIN CAPITAL LETTER B */
+ /*3939*/  0x016e71,  1, 0x016e51, /* MEDEFAIDRIN CAPITAL LETTER C */
+ /*3942*/  0x016e72,  1, 0x016e52, /* MEDEFAIDRIN CAPITAL LETTER U */
+ /*3945*/  0x016e73,  1, 0x016e53, /* MEDEFAIDRIN CAPITAL LETTER YU */
+ /*3948*/  0x016e74,  1, 0x016e54, /* MEDEFAIDRIN CAPITAL LETTER L */
+ /*3951*/  0x016e75,  1, 0x016e55, /* MEDEFAIDRIN CAPITAL LETTER Q */
+ /*3954*/  0x016e76,  1, 0x016e56, /* MEDEFAIDRIN CAPITAL LETTER HP */
+ /*3957*/  0x016e77,  1, 0x016e57, /* MEDEFAIDRIN CAPITAL LETTER NY */
+ /*3960*/  0x016e78,  1, 0x016e58, /* MEDEFAIDRIN CAPITAL LETTER X */
+ /*3963*/  0x016e79,  1, 0x016e59, /* MEDEFAIDRIN CAPITAL LETTER D */
+ /*3966*/  0x016e7a,  1, 0x016e5a, /* MEDEFAIDRIN CAPITAL LETTER OE */
+ /*3969*/  0x016e7b,  1, 0x016e5b, /* MEDEFAIDRIN CAPITAL LETTER N */
+ /*3972*/  0x016e7c,  1, 0x016e5c, /* MEDEFAIDRIN CAPITAL LETTER R */
+ /*3975*/  0x016e7d,  1, 0x016e5d, /* MEDEFAIDRIN CAPITAL LETTER O */
+ /*3978*/  0x016e7e,  1, 0x016e5e, /* MEDEFAIDRIN CAPITAL LETTER AI */
+ /*3981*/  0x016e7f,  1, 0x016e5f, /* MEDEFAIDRIN CAPITAL LETTER Y */
+ /*3984*/  0x01e922,  1, 0x01e900, /* ADLAM CAPITAL LETTER ALIF */
+ /*3987*/  0x01e923,  1, 0x01e901, /* ADLAM CAPITAL LETTER DAALI */
+ /*3990*/  0x01e924,  1, 0x01e902, /* ADLAM CAPITAL LETTER LAAM */
+ /*3993*/  0x01e925,  1, 0x01e903, /* ADLAM CAPITAL LETTER MIIM */
+ /*3996*/  0x01e926,  1, 0x01e904, /* ADLAM CAPITAL LETTER BA */
+ /*3999*/  0x01e927,  1, 0x01e905, /* ADLAM CAPITAL LETTER SINNYIIYHE */
+ /*4002*/  0x01e928,  1, 0x01e906, /* ADLAM CAPITAL LETTER PE */
+ /*4005*/  0x01e929,  1, 0x01e907, /* ADLAM CAPITAL LETTER BHE */
+ /*4008*/  0x01e92a,  1, 0x01e908, /* ADLAM CAPITAL LETTER RA */
+ /*4011*/  0x01e92b,  1, 0x01e909, /* ADLAM CAPITAL LETTER E */
+ /*4014*/  0x01e92c,  1, 0x01e90a, /* ADLAM CAPITAL LETTER FA */
+ /*4017*/  0x01e92d,  1, 0x01e90b, /* ADLAM CAPITAL LETTER I */
+ /*4020*/  0x01e92e,  1, 0x01e90c, /* ADLAM CAPITAL LETTER O */
+ /*4023*/  0x01e92f,  1, 0x01e90d, /* ADLAM CAPITAL LETTER DHA */
+ /*4026*/  0x01e930,  1, 0x01e90e, /* ADLAM CAPITAL LETTER YHE */
+ /*4029*/  0x01e931,  1, 0x01e90f, /* ADLAM CAPITAL LETTER WAW */
+ /*4032*/  0x01e932,  1, 0x01e910, /* ADLAM CAPITAL LETTER NUN */
+ /*4035*/  0x01e933,  1, 0x01e911, /* ADLAM CAPITAL LETTER KAF */
+ /*4038*/  0x01e934,  1, 0x01e912, /* ADLAM CAPITAL LETTER YA */
+ /*4041*/  0x01e935,  1, 0x01e913, /* ADLAM CAPITAL LETTER U */
+ /*4044*/  0x01e936,  1, 0x01e914, /* ADLAM CAPITAL LETTER JIIM */
+ /*4047*/  0x01e937,  1, 0x01e915, /* ADLAM CAPITAL LETTER CHI */
+ /*4050*/  0x01e938,  1, 0x01e916, /* ADLAM CAPITAL LETTER HA */
+ /*4053*/  0x01e939,  1, 0x01e917, /* ADLAM CAPITAL LETTER QAAF */
+ /*4056*/  0x01e93a,  1, 0x01e918, /* ADLAM CAPITAL LETTER GA */
+ /*4059*/  0x01e93b,  1, 0x01e919, /* ADLAM CAPITAL LETTER NYA */
+ /*4062*/  0x01e93c,  1, 0x01e91a, /* ADLAM CAPITAL LETTER TU */
+ /*4065*/  0x01e93d,  1, 0x01e91b, /* ADLAM CAPITAL LETTER NHA */
+ /*4068*/  0x01e93e,  1, 0x01e91c, /* ADLAM CAPITAL LETTER VA */
+ /*4071*/  0x01e93f,  1, 0x01e91d, /* ADLAM CAPITAL LETTER KHA */
+ /*4074*/  0x01e940,  1, 0x01e91e, /* ADLAM CAPITAL LETTER GBE */
+ /*4077*/  0x01e941,  1, 0x01e91f, /* ADLAM CAPITAL LETTER ZAL */
+ /*4080*/  0x01e942,  1, 0x01e920, /* ADLAM CAPITAL LETTER KPO */
+ /*4083*/  0x01e943,  1, 0x01e921, /* ADLAM CAPITAL LETTER SHA */
+#define FOLDS1_NORMAL_END_INDEX   4086
  /* ----- LOCALE ----- */
- /*4065*/    0x0069,  1,   0x0049, /* LATIN CAPITAL LETTER I */
-#define FOLDS1_END_INDEX   4068
+ /*4086*/    0x0069,  1,   0x0049, /* LATIN CAPITAL LETTER I */
+#define FOLDS1_END_INDEX   4089
 };
 
 OnigCodePoint OnigUnicodeFolds2[] = {
index 7cfc87ed96ba6129bd3ab4ccfc58356f11bdb51a..5c1c8a97073388376cdf97ecd671cceb43436340 100644 (file)
@@ -1,5 +1,5 @@
 /* ANSI-C code produced by gperf version 3.1 */
-/* Command-line: /usr/bin/gperf -T -C -c -t -j1 -L ANSI-C --ignore-case --pic -Q unicode_prop_name_pool -N unicode_lookup_property_name --output-file gperf1.tmp unicode_property_data.gperf  */
+/* Command-line: /usr/local/bin/gperf -T -C -c -t -j1 -L ANSI-C --ignore-case --pic -Q unicode_prop_name_pool -N unicode_lookup_property_name --output-file gperf1.tmp unicode_property_data.gperf  */
 /* Computed positions: -k'1-3,5-6,12,16,$' */
 
 #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
@@ -42,7 +42,7 @@ CR_NEWLINE[] = { 1,
 
 /* PROPERTY: 'Alpha': POSIX [[:Alpha:]] */
 static const OnigCodePoint
-CR_Alpha[] = { 676,
+CR_Alpha[] = { 679,
 0x0041, 0x005a,
 0x0061, 0x007a,
 0x00aa, 0x00aa,
@@ -226,16 +226,10 @@ CR_Alpha[] = { 676,
 0x0e4d, 0x0e4d,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb9,
+0x0ea7, 0x0eb9,
 0x0ebb, 0x0ebd,
 0x0ec0, 0x0ec4,
 0x0ec6, 0x0ec6,
@@ -250,11 +244,8 @@ CR_Alpha[] = { 676,
 0x1000, 0x1036,
 0x1038, 0x1038,
 0x103b, 0x103f,
-0x1050, 0x1062,
-0x1065, 0x1068,
-0x106e, 0x1086,
-0x108e, 0x108e,
-0x109c, 0x109d,
+0x1050, 0x108f,
+0x109a, 0x109d,
 0x10a0, 0x10c5,
 0x10c7, 0x10c7,
 0x10cd, 0x10cd,
@@ -275,7 +266,6 @@ CR_Alpha[] = { 676,
 0x12d8, 0x1310,
 0x1312, 0x1315,
 0x1318, 0x135a,
-0x135f, 0x135f,
 0x1380, 0x138f,
 0x13a0, 0x13f5,
 0x13f8, 0x13fd,
@@ -316,7 +306,7 @@ CR_Alpha[] = { 676,
 0x1bac, 0x1baf,
 0x1bba, 0x1be5,
 0x1be7, 0x1bf1,
-0x1c00, 0x1c35,
+0x1c00, 0x1c36,
 0x1c4d, 0x1c4f,
 0x1c5a, 0x1c7d,
 0x1c80, 0x1c88,
@@ -325,6 +315,7 @@ CR_Alpha[] = { 676,
 0x1ce9, 0x1cec,
 0x1cee, 0x1cf3,
 0x1cf5, 0x1cf6,
+0x1cfa, 0x1cfa,
 0x1d00, 0x1dbf,
 0x1de7, 0x1df4,
 0x1e00, 0x1f15,
@@ -409,31 +400,28 @@ CR_Alpha[] = { 676,
 0xa67f, 0xa6ef,
 0xa717, 0xa71f,
 0xa722, 0xa788,
-0xa78b, 0xa7b9,
-0xa7f7, 0xa801,
-0xa803, 0xa805,
-0xa807, 0xa80a,
-0xa80c, 0xa827,
+0xa78b, 0xa7bf,
+0xa7c2, 0xa7c6,
+0xa7f7, 0xa805,
+0xa807, 0xa827,
 0xa840, 0xa873,
 0xa880, 0xa8c3,
 0xa8c5, 0xa8c5,
 0xa8f2, 0xa8f7,
 0xa8fb, 0xa8fb,
-0xa8fd, 0xa8fe,
+0xa8fd, 0xa8ff,
 0xa90a, 0xa92a,
 0xa930, 0xa952,
 0xa960, 0xa97c,
 0xa980, 0xa9b2,
 0xa9b4, 0xa9bf,
 0xa9cf, 0xa9cf,
-0xa9e0, 0xa9e4,
-0xa9e6, 0xa9ef,
+0xa9e0, 0xa9ef,
 0xa9fa, 0xa9fe,
 0xaa00, 0xaa36,
 0xaa40, 0xaa4d,
 0xaa60, 0xaa76,
-0xaa7a, 0xaa7a,
-0xaa7e, 0xaabe,
+0xaa7a, 0xaabe,
 0xaac0, 0xaac0,
 0xaac2, 0xaac2,
 0xaadb, 0xaadd,
@@ -445,7 +433,7 @@ CR_Alpha[] = { 676,
 0xab20, 0xab26,
 0xab28, 0xab2e,
 0xab30, 0xab5a,
-0xab5c, 0xab65,
+0xab5c, 0xab67,
 0xab70, 0xabea,
 0xac00, 0xd7a3,
 0xd7b0, 0xd7c6,
@@ -533,6 +521,7 @@ CR_Alpha[] = { 676,
 0x10f00, 0x10f1c,
 0x10f27, 0x10f27,
 0x10f30, 0x10f45,
+0x10fe0, 0x10ff6,
 0x11000, 0x11045,
 0x11082, 0x110b8,
 0x110d0, 0x110e8,
@@ -570,6 +559,7 @@ CR_Alpha[] = { 676,
 0x11400, 0x11441,
 0x11443, 0x11445,
 0x11447, 0x1144a,
+0x1145f, 0x1145f,
 0x11480, 0x114c1,
 0x114c4, 0x114c5,
 0x114c7, 0x114c7,
@@ -580,15 +570,20 @@ CR_Alpha[] = { 676,
 0x11640, 0x11640,
 0x11644, 0x11644,
 0x11680, 0x116b5,
+0x116b8, 0x116b8,
 0x11700, 0x1171a,
 0x1171d, 0x1172a,
 0x11800, 0x11838,
 0x118a0, 0x118df,
 0x118ff, 0x118ff,
+0x119a0, 0x119a7,
+0x119aa, 0x119d7,
+0x119da, 0x119df,
+0x119e1, 0x119e1,
+0x119e3, 0x119e4,
 0x11a00, 0x11a32,
 0x11a35, 0x11a3e,
-0x11a50, 0x11a83,
-0x11a86, 0x11a97,
+0x11a50, 0x11a97,
 0x11a9d, 0x11a9d,
 0x11ac0, 0x11af8,
 0x11c00, 0x11c08,
@@ -621,18 +616,21 @@ CR_Alpha[] = { 676,
 0x16800, 0x16a38,
 0x16a40, 0x16a5e,
 0x16ad0, 0x16aed,
-0x16b00, 0x16b36,
+0x16b00, 0x16b2f,
 0x16b40, 0x16b43,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16e40, 0x16e7f,
-0x16f00, 0x16f44,
-0x16f50, 0x16f7e,
-0x16f93, 0x16f9f,
+0x16f00, 0x16f4a,
+0x16f4f, 0x16f87,
+0x16f8f, 0x16f9f,
 0x16fe0, 0x16fe1,
-0x17000, 0x187f1,
+0x16fe3, 0x16fe3,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b000, 0x1b11e,
+0x1b150, 0x1b152,
+0x1b164, 0x1b167,
 0x1b170, 0x1b2fb,
 0x1bc00, 0x1bc6a,
 0x1bc70, 0x1bc7c,
@@ -674,9 +672,14 @@ CR_Alpha[] = { 676,
 0x1e01b, 0x1e021,
 0x1e023, 0x1e024,
 0x1e026, 0x1e02a,
+0x1e100, 0x1e12c,
+0x1e137, 0x1e13d,
+0x1e14e, 0x1e14e,
+0x1e2c0, 0x1e2eb,
 0x1e800, 0x1e8c4,
 0x1e900, 0x1e943,
 0x1e947, 0x1e947,
+0x1e94b, 0x1e94b,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
 0x1ee21, 0x1ee22,
@@ -743,7 +746,7 @@ CR_Cntrl[] = { 2,
 
 /* PROPERTY: 'Digit': POSIX [[:Digit:]] */
 static const OnigCodePoint
-CR_Digit[] = { 57,
+CR_Digit[] = { 59,
 0x0030, 0x0039,
 0x0660, 0x0669,
 0x06f0, 0x06f9,
@@ -800,12 +803,14 @@ CR_Digit[] = { 57,
 0x16a60, 0x16a69,
 0x16b50, 0x16b59,
 0x1d7ce, 0x1d7ff,
+0x1e140, 0x1e149,
+0x1e2f0, 0x1e2f9,
 0x1e950, 0x1e959,
 }; /* END of CR_Digit */
 
 /* PROPERTY: 'Graph': POSIX [[:Graph:]] */
 static const OnigCodePoint
-CR_Graph[] = { 663,
+CR_Graph[] = { 671,
 0x0021, 0x007e,
 0x00a1, 0x0377,
 0x037a, 0x037f,
@@ -916,7 +921,7 @@ CR_Graph[] = { 663,
 0x0c58, 0x0c5a,
 0x0c60, 0x0c63,
 0x0c66, 0x0c6f,
-0x0c78, 0x0c8c,
+0x0c77, 0x0c8c,
 0x0c8e, 0x0c90,
 0x0c92, 0x0ca8,
 0x0caa, 0x0cb3,
@@ -953,17 +958,10 @@ CR_Graph[] = { 663,
 0x0e3f, 0x0e5b,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb9,
-0x0ebb, 0x0ebd,
+0x0ea7, 0x0ebd,
 0x0ec0, 0x0ec4,
 0x0ec6, 0x0ec6,
 0x0ec8, 0x0ecd,
@@ -1040,7 +1038,7 @@ CR_Graph[] = { 663,
 0x1c4d, 0x1c88,
 0x1c90, 0x1cba,
 0x1cbd, 0x1cc7,
-0x1cd0, 0x1cf9,
+0x1cd0, 0x1cfa,
 0x1d00, 0x1df9,
 0x1dfb, 0x1f15,
 0x1f18, 0x1f1d,
@@ -1072,9 +1070,7 @@ CR_Graph[] = { 663,
 0x2440, 0x244a,
 0x2460, 0x2b73,
 0x2b76, 0x2b95,
-0x2b98, 0x2bc8,
-0x2bca, 0x2bfe,
-0x2c00, 0x2c2e,
+0x2b98, 0x2c2e,
 0x2c30, 0x2c5e,
 0x2c60, 0x2cf3,
 0x2cf9, 0x2d25,
@@ -1091,7 +1087,7 @@ CR_Graph[] = { 663,
 0x2dc8, 0x2dce,
 0x2dd0, 0x2dd6,
 0x2dd8, 0x2dde,
-0x2de0, 0x2e4e,
+0x2de0, 0x2e4f,
 0x2e80, 0x2e99,
 0x2e9b, 0x2ef3,
 0x2f00, 0x2fd5,
@@ -1104,14 +1100,14 @@ CR_Graph[] = { 663,
 0x3190, 0x31ba,
 0x31c0, 0x31e3,
 0x31f0, 0x321e,
-0x3220, 0x32fe,
-0x3300, 0x4db5,
+0x3220, 0x4db5,
 0x4dc0, 0x9fef,
 0xa000, 0xa48c,
 0xa490, 0xa4c6,
 0xa4d0, 0xa62b,
 0xa640, 0xa6f7,
-0xa700, 0xa7b9,
+0xa700, 0xa7bf,
+0xa7c2, 0xa7c6,
 0xa7f7, 0xa82b,
 0xa830, 0xa839,
 0xa840, 0xa877,
@@ -1132,7 +1128,7 @@ CR_Graph[] = { 663,
 0xab11, 0xab16,
 0xab20, 0xab26,
 0xab28, 0xab2e,
-0xab30, 0xab65,
+0xab30, 0xab67,
 0xab70, 0xabed,
 0xabf0, 0xabf9,
 0xac00, 0xd7a3,
@@ -1239,6 +1235,7 @@ CR_Graph[] = { 663,
 0x10e60, 0x10e7e,
 0x10f00, 0x10f27,
 0x10f30, 0x10f59,
+0x10fe0, 0x10ff6,
 0x11000, 0x1104d,
 0x11052, 0x1106f,
 0x1107f, 0x110c1,
@@ -1277,7 +1274,7 @@ CR_Graph[] = { 663,
 0x11370, 0x11374,
 0x11400, 0x11459,
 0x1145b, 0x1145b,
-0x1145d, 0x1145e,
+0x1145d, 0x1145f,
 0x11480, 0x114c7,
 0x114d0, 0x114d9,
 0x11580, 0x115b5,
@@ -1285,7 +1282,7 @@ CR_Graph[] = { 663,
 0x11600, 0x11644,
 0x11650, 0x11659,
 0x11660, 0x1166c,
-0x11680, 0x116b7,
+0x11680, 0x116b8,
 0x116c0, 0x116c9,
 0x11700, 0x1171a,
 0x1171d, 0x1172b,
@@ -1293,9 +1290,11 @@ CR_Graph[] = { 663,
 0x11800, 0x1183b,
 0x118a0, 0x118f2,
 0x118ff, 0x118ff,
+0x119a0, 0x119a7,
+0x119aa, 0x119d7,
+0x119da, 0x119e4,
 0x11a00, 0x11a47,
-0x11a50, 0x11a83,
-0x11a86, 0x11aa2,
+0x11a50, 0x11aa2,
 0x11ac0, 0x11af8,
 0x11c00, 0x11c08,
 0x11c0a, 0x11c36,
@@ -1318,11 +1317,13 @@ CR_Graph[] = { 663,
 0x11d93, 0x11d98,
 0x11da0, 0x11da9,
 0x11ee0, 0x11ef8,
-0x12000, 0x12399,
+0x11fc0, 0x11ff1,
+0x11fff, 0x12399,
 0x12400, 0x1246e,
 0x12470, 0x12474,
 0x12480, 0x12543,
 0x13000, 0x1342e,
+0x13430, 0x13438,
 0x14400, 0x14646,
 0x16800, 0x16a38,
 0x16a40, 0x16a5e,
@@ -1336,13 +1337,15 @@ CR_Graph[] = { 663,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16e40, 0x16e9a,
-0x16f00, 0x16f44,
-0x16f50, 0x16f7e,
+0x16f00, 0x16f4a,
+0x16f4f, 0x16f87,
 0x16f8f, 0x16f9f,
-0x16fe0, 0x16fe1,
-0x17000, 0x187f1,
+0x16fe0, 0x16fe3,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b000, 0x1b11e,
+0x1b150, 0x1b152,
+0x1b164, 0x1b167,
 0x1b170, 0x1b2fb,
 0x1bc00, 0x1bc6a,
 0x1bc70, 0x1bc7c,
@@ -1384,12 +1387,19 @@ CR_Graph[] = { 663,
 0x1e01b, 0x1e021,
 0x1e023, 0x1e024,
 0x1e026, 0x1e02a,
+0x1e100, 0x1e12c,
+0x1e130, 0x1e13d,
+0x1e140, 0x1e149,
+0x1e14e, 0x1e14f,
+0x1e2c0, 0x1e2f9,
+0x1e2ff, 0x1e2ff,
 0x1e800, 0x1e8c4,
 0x1e8c7, 0x1e8d6,
-0x1e900, 0x1e94a,
+0x1e900, 0x1e94b,
 0x1e950, 0x1e959,
 0x1e95e, 0x1e95f,
 0x1ec71, 0x1ecb4,
+0x1ed01, 0x1ed3d,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
 0x1ee21, 0x1ee22,
@@ -1431,33 +1441,36 @@ CR_Graph[] = { 663,
 0x1f0c1, 0x1f0cf,
 0x1f0d1, 0x1f0f5,
 0x1f100, 0x1f10c,
-0x1f110, 0x1f16b,
+0x1f110, 0x1f16c,
 0x1f170, 0x1f1ac,
 0x1f1e6, 0x1f202,
 0x1f210, 0x1f23b,
 0x1f240, 0x1f248,
 0x1f250, 0x1f251,
 0x1f260, 0x1f265,
-0x1f300, 0x1f6d4,
+0x1f300, 0x1f6d5,
 0x1f6e0, 0x1f6ec,
-0x1f6f0, 0x1f6f9,
+0x1f6f0, 0x1f6fa,
 0x1f700, 0x1f773,
 0x1f780, 0x1f7d8,
+0x1f7e0, 0x1f7eb,
 0x1f800, 0x1f80b,
 0x1f810, 0x1f847,
 0x1f850, 0x1f859,
 0x1f860, 0x1f887,
 0x1f890, 0x1f8ad,
 0x1f900, 0x1f90b,
-0x1f910, 0x1f93e,
-0x1f940, 0x1f970,
+0x1f90d, 0x1f971,
 0x1f973, 0x1f976,
-0x1f97a, 0x1f97a,
-0x1f97c, 0x1f9a2,
-0x1f9b0, 0x1f9b9,
-0x1f9c0, 0x1f9c2,
-0x1f9d0, 0x1f9ff,
+0x1f97a, 0x1f9a2,
+0x1f9a5, 0x1f9aa,
+0x1f9ae, 0x1f9ca,
+0x1f9cd, 0x1fa53,
 0x1fa60, 0x1fa6d,
+0x1fa70, 0x1fa73,
+0x1fa78, 0x1fa7a,
+0x1fa80, 0x1fa82,
+0x1fa90, 0x1fa95,
 0x20000, 0x2a6d6,
 0x2a700, 0x2b734,
 0x2b740, 0x2b81d,
@@ -1473,7 +1486,7 @@ CR_Graph[] = { 663,
 
 /* PROPERTY: 'Lower': POSIX [[:Lower:]] */
 static const OnigCodePoint
-CR_Lower[] = { 645,
+CR_Lower[] = { 649,
 0x0061, 0x007a,
 0x00aa, 0x00aa,
 0x00b5, 0x00b5,
@@ -2078,9 +2091,13 @@ CR_Lower[] = { 645,
 0xa7b5, 0xa7b5,
 0xa7b7, 0xa7b7,
 0xa7b9, 0xa7b9,
+0xa7bb, 0xa7bb,
+0xa7bd, 0xa7bd,
+0xa7bf, 0xa7bf,
+0xa7c3, 0xa7c3,
 0xa7f8, 0xa7fa,
 0xab30, 0xab5a,
-0xab5c, 0xab65,
+0xab5c, 0xab67,
 0xab70, 0xabbf,
 0xfb00, 0xfb06,
 0xfb13, 0xfb17,
@@ -2123,7 +2140,7 @@ CR_Lower[] = { 645,
 
 /* PROPERTY: 'Print': POSIX [[:Print:]] */
 static const OnigCodePoint
-CR_Print[] = { 660,
+CR_Print[] = { 668,
 0x0020, 0x007e,
 0x00a0, 0x0377,
 0x037a, 0x037f,
@@ -2234,7 +2251,7 @@ CR_Print[] = { 660,
 0x0c58, 0x0c5a,
 0x0c60, 0x0c63,
 0x0c66, 0x0c6f,
-0x0c78, 0x0c8c,
+0x0c77, 0x0c8c,
 0x0c8e, 0x0c90,
 0x0c92, 0x0ca8,
 0x0caa, 0x0cb3,
@@ -2271,17 +2288,10 @@ CR_Print[] = { 660,
 0x0e3f, 0x0e5b,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb9,
-0x0ebb, 0x0ebd,
+0x0ea7, 0x0ebd,
 0x0ec0, 0x0ec4,
 0x0ec6, 0x0ec6,
 0x0ec8, 0x0ecd,
@@ -2357,7 +2367,7 @@ CR_Print[] = { 660,
 0x1c4d, 0x1c88,
 0x1c90, 0x1cba,
 0x1cbd, 0x1cc7,
-0x1cd0, 0x1cf9,
+0x1cd0, 0x1cfa,
 0x1d00, 0x1df9,
 0x1dfb, 0x1f15,
 0x1f18, 0x1f1d,
@@ -2387,9 +2397,7 @@ CR_Print[] = { 660,
 0x2440, 0x244a,
 0x2460, 0x2b73,
 0x2b76, 0x2b95,
-0x2b98, 0x2bc8,
-0x2bca, 0x2bfe,
-0x2c00, 0x2c2e,
+0x2b98, 0x2c2e,
 0x2c30, 0x2c5e,
 0x2c60, 0x2cf3,
 0x2cf9, 0x2d25,
@@ -2406,7 +2414,7 @@ CR_Print[] = { 660,
 0x2dc8, 0x2dce,
 0x2dd0, 0x2dd6,
 0x2dd8, 0x2dde,
-0x2de0, 0x2e4e,
+0x2de0, 0x2e4f,
 0x2e80, 0x2e99,
 0x2e9b, 0x2ef3,
 0x2f00, 0x2fd5,
@@ -2419,14 +2427,14 @@ CR_Print[] = { 660,
 0x3190, 0x31ba,
 0x31c0, 0x31e3,
 0x31f0, 0x321e,
-0x3220, 0x32fe,
-0x3300, 0x4db5,
+0x3220, 0x4db5,
 0x4dc0, 0x9fef,
 0xa000, 0xa48c,
 0xa490, 0xa4c6,
 0xa4d0, 0xa62b,
 0xa640, 0xa6f7,
-0xa700, 0xa7b9,
+0xa700, 0xa7bf,
+0xa7c2, 0xa7c6,
 0xa7f7, 0xa82b,
 0xa830, 0xa839,
 0xa840, 0xa877,
@@ -2447,7 +2455,7 @@ CR_Print[] = { 660,
 0xab11, 0xab16,
 0xab20, 0xab26,
 0xab28, 0xab2e,
-0xab30, 0xab65,
+0xab30, 0xab67,
 0xab70, 0xabed,
 0xabf0, 0xabf9,
 0xac00, 0xd7a3,
@@ -2554,6 +2562,7 @@ CR_Print[] = { 660,
 0x10e60, 0x10e7e,
 0x10f00, 0x10f27,
 0x10f30, 0x10f59,
+0x10fe0, 0x10ff6,
 0x11000, 0x1104d,
 0x11052, 0x1106f,
 0x1107f, 0x110c1,
@@ -2592,7 +2601,7 @@ CR_Print[] = { 660,
 0x11370, 0x11374,
 0x11400, 0x11459,
 0x1145b, 0x1145b,
-0x1145d, 0x1145e,
+0x1145d, 0x1145f,
 0x11480, 0x114c7,
 0x114d0, 0x114d9,
 0x11580, 0x115b5,
@@ -2600,7 +2609,7 @@ CR_Print[] = { 660,
 0x11600, 0x11644,
 0x11650, 0x11659,
 0x11660, 0x1166c,
-0x11680, 0x116b7,
+0x11680, 0x116b8,
 0x116c0, 0x116c9,
 0x11700, 0x1171a,
 0x1171d, 0x1172b,
@@ -2608,9 +2617,11 @@ CR_Print[] = { 660,
 0x11800, 0x1183b,
 0x118a0, 0x118f2,
 0x118ff, 0x118ff,
+0x119a0, 0x119a7,
+0x119aa, 0x119d7,
+0x119da, 0x119e4,
 0x11a00, 0x11a47,
-0x11a50, 0x11a83,
-0x11a86, 0x11aa2,
+0x11a50, 0x11aa2,
 0x11ac0, 0x11af8,
 0x11c00, 0x11c08,
 0x11c0a, 0x11c36,
@@ -2633,11 +2644,13 @@ CR_Print[] = { 660,
 0x11d93, 0x11d98,
 0x11da0, 0x11da9,
 0x11ee0, 0x11ef8,
-0x12000, 0x12399,
+0x11fc0, 0x11ff1,
+0x11fff, 0x12399,
 0x12400, 0x1246e,
 0x12470, 0x12474,
 0x12480, 0x12543,
 0x13000, 0x1342e,
+0x13430, 0x13438,
 0x14400, 0x14646,
 0x16800, 0x16a38,
 0x16a40, 0x16a5e,
@@ -2651,13 +2664,15 @@ CR_Print[] = { 660,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16e40, 0x16e9a,
-0x16f00, 0x16f44,
-0x16f50, 0x16f7e,
+0x16f00, 0x16f4a,
+0x16f4f, 0x16f87,
 0x16f8f, 0x16f9f,
-0x16fe0, 0x16fe1,
-0x17000, 0x187f1,
+0x16fe0, 0x16fe3,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b000, 0x1b11e,
+0x1b150, 0x1b152,
+0x1b164, 0x1b167,
 0x1b170, 0x1b2fb,
 0x1bc00, 0x1bc6a,
 0x1bc70, 0x1bc7c,
@@ -2699,12 +2714,19 @@ CR_Print[] = { 660,
 0x1e01b, 0x1e021,
 0x1e023, 0x1e024,
 0x1e026, 0x1e02a,
+0x1e100, 0x1e12c,
+0x1e130, 0x1e13d,
+0x1e140, 0x1e149,
+0x1e14e, 0x1e14f,
+0x1e2c0, 0x1e2f9,
+0x1e2ff, 0x1e2ff,
 0x1e800, 0x1e8c4,
 0x1e8c7, 0x1e8d6,
-0x1e900, 0x1e94a,
+0x1e900, 0x1e94b,
 0x1e950, 0x1e959,
 0x1e95e, 0x1e95f,
 0x1ec71, 0x1ecb4,
+0x1ed01, 0x1ed3d,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
 0x1ee21, 0x1ee22,
@@ -2746,33 +2768,36 @@ CR_Print[] = { 660,
 0x1f0c1, 0x1f0cf,
 0x1f0d1, 0x1f0f5,
 0x1f100, 0x1f10c,
-0x1f110, 0x1f16b,
+0x1f110, 0x1f16c,
 0x1f170, 0x1f1ac,
 0x1f1e6, 0x1f202,
 0x1f210, 0x1f23b,
 0x1f240, 0x1f248,
 0x1f250, 0x1f251,
 0x1f260, 0x1f265,
-0x1f300, 0x1f6d4,
+0x1f300, 0x1f6d5,
 0x1f6e0, 0x1f6ec,
-0x1f6f0, 0x1f6f9,
+0x1f6f0, 0x1f6fa,
 0x1f700, 0x1f773,
 0x1f780, 0x1f7d8,
+0x1f7e0, 0x1f7eb,
 0x1f800, 0x1f80b,
 0x1f810, 0x1f847,
 0x1f850, 0x1f859,
 0x1f860, 0x1f887,
 0x1f890, 0x1f8ad,
 0x1f900, 0x1f90b,
-0x1f910, 0x1f93e,
-0x1f940, 0x1f970,
+0x1f90d, 0x1f971,
 0x1f973, 0x1f976,
-0x1f97a, 0x1f97a,
-0x1f97c, 0x1f9a2,
-0x1f9b0, 0x1f9b9,
-0x1f9c0, 0x1f9c2,
-0x1f9d0, 0x1f9ff,
+0x1f97a, 0x1f9a2,
+0x1f9a5, 0x1f9aa,
+0x1f9ae, 0x1f9ca,
+0x1f9cd, 0x1fa53,
 0x1fa60, 0x1fa6d,
+0x1fa70, 0x1fa73,
+0x1fa78, 0x1fa7a,
+0x1fa80, 0x1fa82,
+0x1fa90, 0x1fa95,
 0x20000, 0x2a6d6,
 0x2a700, 0x2b734,
 0x2b740, 0x2b81d,
@@ -2788,7 +2813,7 @@ CR_Print[] = { 660,
 
 /* PROPERTY: 'Punct': POSIX [[:Punct:]] */
 static const OnigCodePoint
-CR_Punct[] = { 178,
+CR_Punct[] = { 182,
 0x0021, 0x0023,
 0x0025, 0x002a,
 0x002c, 0x002f,
@@ -2828,6 +2853,7 @@ CR_Punct[] = { 178,
 0x09fd, 0x09fd,
 0x0a76, 0x0a76,
 0x0af0, 0x0af0,
+0x0c77, 0x0c77,
 0x0c84, 0x0c84,
 0x0df4, 0x0df4,
 0x0e4f, 0x0e4f,
@@ -2842,7 +2868,7 @@ CR_Punct[] = { 178,
 0x10fb, 0x10fb,
 0x1360, 0x1368,
 0x1400, 0x1400,
-0x166d, 0x166e,
+0x166e, 0x166e,
 0x169b, 0x169c,
 0x16eb, 0x16ed,
 0x1735, 0x1736,
@@ -2877,7 +2903,7 @@ CR_Punct[] = { 178,
 0x2cfe, 0x2cff,
 0x2d70, 0x2d70,
 0x2e00, 0x2e2e,
-0x2e30, 0x2e4e,
+0x2e30, 0x2e4f,
 0x3001, 0x3003,
 0x3008, 0x3011,
 0x3014, 0x301f,
@@ -2952,18 +2978,21 @@ CR_Punct[] = { 178,
 0x11660, 0x1166c,
 0x1173c, 0x1173e,
 0x1183b, 0x1183b,
+0x119e2, 0x119e2,
 0x11a3f, 0x11a46,
 0x11a9a, 0x11a9c,
 0x11a9e, 0x11aa2,
 0x11c41, 0x11c45,
 0x11c70, 0x11c71,
 0x11ef7, 0x11ef8,
+0x11fff, 0x11fff,
 0x12470, 0x12474,
 0x16a6e, 0x16a6f,
 0x16af5, 0x16af5,
 0x16b37, 0x16b3b,
 0x16b44, 0x16b44,
 0x16e97, 0x16e9a,
+0x16fe2, 0x16fe2,
 0x1bc9f, 0x1bc9f,
 0x1da87, 0x1da8b,
 0x1e95e, 0x1e95f,
@@ -2986,7 +3015,7 @@ CR_Space[] = { 10,
 
 /* PROPERTY: 'Upper': POSIX [[:Upper:]] */
 static const OnigCodePoint
-CR_Upper[] = { 636,
+CR_Upper[] = { 641,
 0x0041, 0x005a,
 0x00c0, 0x00d6,
 0x00d8, 0x00de,
@@ -3582,6 +3611,11 @@ CR_Upper[] = { 636,
 0xa7b0, 0xa7b4,
 0xa7b6, 0xa7b6,
 0xa7b8, 0xa7b8,
+0xa7ba, 0xa7ba,
+0xa7bc, 0xa7bc,
+0xa7be, 0xa7be,
+0xa7c2, 0xa7c2,
+0xa7c4, 0xa7c6,
 0xff21, 0xff3a,
 0x10400, 0x10427,
 0x104b0, 0x104d3,
@@ -3635,7 +3669,7 @@ CR_XDigit[] = { 3,
 
 /* PROPERTY: 'Word': POSIX [[:Word:]] */
 static const OnigCodePoint
-CR_Word[] = { 710,
+CR_Word[] = { 716,
 0x0030, 0x0039,
 0x0041, 0x005a,
 0x005f, 0x005f,
@@ -3820,17 +3854,10 @@ CR_Word[] = { 710,
 0x0e50, 0x0e59,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb9,
-0x0ebb, 0x0ebd,
+0x0ea7, 0x0ebd,
 0x0ec0, 0x0ec4,
 0x0ec6, 0x0ec6,
 0x0ec8, 0x0ecd,
@@ -3921,7 +3948,7 @@ CR_Word[] = { 710,
 0x1c90, 0x1cba,
 0x1cbd, 0x1cbf,
 0x1cd0, 0x1cd2,
-0x1cd4, 0x1cf9,
+0x1cd4, 0x1cfa,
 0x1d00, 0x1df9,
 0x1dfb, 0x1f15,
 0x1f18, 0x1f1d,
@@ -4007,7 +4034,8 @@ CR_Word[] = { 710,
 0xa67f, 0xa6f1,
 0xa717, 0xa71f,
 0xa722, 0xa788,
-0xa78b, 0xa7b9,
+0xa78b, 0xa7bf,
+0xa7c2, 0xa7c6,
 0xa7f7, 0xa827,
 0xa840, 0xa873,
 0xa880, 0xa8c5,
@@ -4034,7 +4062,7 @@ CR_Word[] = { 710,
 0xab20, 0xab26,
 0xab28, 0xab2e,
 0xab30, 0xab5a,
-0xab5c, 0xab65,
+0xab5c, 0xab67,
 0xab70, 0xabea,
 0xabec, 0xabed,
 0xabf0, 0xabf9,
@@ -4136,6 +4164,7 @@ CR_Word[] = { 710,
 0x10f00, 0x10f1c,
 0x10f27, 0x10f27,
 0x10f30, 0x10f50,
+0x10fe0, 0x10ff6,
 0x11000, 0x11046,
 0x11066, 0x1106f,
 0x1107f, 0x110ba,
@@ -4177,7 +4206,7 @@ CR_Word[] = { 710,
 0x11370, 0x11374,
 0x11400, 0x1144a,
 0x11450, 0x11459,
-0x1145e, 0x1145e,
+0x1145e, 0x1145f,
 0x11480, 0x114c5,
 0x114c7, 0x114c7,
 0x114d0, 0x114d9,
@@ -4187,7 +4216,7 @@ CR_Word[] = { 710,
 0x11600, 0x11640,
 0x11644, 0x11644,
 0x11650, 0x11659,
-0x11680, 0x116b7,
+0x11680, 0x116b8,
 0x116c0, 0x116c9,
 0x11700, 0x1171a,
 0x1171d, 0x1172b,
@@ -4195,10 +4224,13 @@ CR_Word[] = { 710,
 0x11800, 0x1183a,
 0x118a0, 0x118e9,
 0x118ff, 0x118ff,
+0x119a0, 0x119a7,
+0x119aa, 0x119d7,
+0x119da, 0x119e1,
+0x119e3, 0x119e4,
 0x11a00, 0x11a3e,
 0x11a47, 0x11a47,
-0x11a50, 0x11a83,
-0x11a86, 0x11a99,
+0x11a50, 0x11a99,
 0x11a9d, 0x11a9d,
 0x11ac0, 0x11af8,
 0x11c00, 0x11c08,
@@ -4238,13 +4270,16 @@ CR_Word[] = { 710,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16e40, 0x16e7f,
-0x16f00, 0x16f44,
-0x16f50, 0x16f7e,
+0x16f00, 0x16f4a,
+0x16f4f, 0x16f87,
 0x16f8f, 0x16f9f,
 0x16fe0, 0x16fe1,
-0x17000, 0x187f1,
+0x16fe3, 0x16fe3,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b000, 0x1b11e,
+0x1b150, 0x1b152,
+0x1b164, 0x1b167,
 0x1b170, 0x1b2fb,
 0x1bc00, 0x1bc6a,
 0x1bc70, 0x1bc7c,
@@ -4299,9 +4334,14 @@ CR_Word[] = { 710,
 0x1e01b, 0x1e021,
 0x1e023, 0x1e024,
 0x1e026, 0x1e02a,
+0x1e100, 0x1e12c,
+0x1e130, 0x1e13d,
+0x1e140, 0x1e149,
+0x1e14e, 0x1e14e,
+0x1e2c0, 0x1e2f9,
 0x1e800, 0x1e8c4,
 0x1e8d0, 0x1e8d6,
-0x1e900, 0x1e94a,
+0x1e900, 0x1e94b,
 0x1e950, 0x1e959,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
@@ -4350,7 +4390,7 @@ CR_Word[] = { 710,
 
 /* PROPERTY: 'Alnum': POSIX [[:Alnum:]] */
 static const OnigCodePoint
-CR_Alnum[] = { 713,
+CR_Alnum[] = { 715,
 0x0030, 0x0039,
 0x0041, 0x005a,
 0x0061, 0x007a,
@@ -4543,16 +4583,10 @@ CR_Alnum[] = { 713,
 0x0e50, 0x0e59,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb9,
+0x0ea7, 0x0eb9,
 0x0ebb, 0x0ebd,
 0x0ec0, 0x0ec4,
 0x0ec6, 0x0ec6,
@@ -4569,12 +4603,7 @@ CR_Alnum[] = { 713,
 0x1000, 0x1036,
 0x1038, 0x1038,
 0x103b, 0x1049,
-0x1050, 0x1062,
-0x1065, 0x1068,
-0x106e, 0x1086,
-0x108e, 0x108e,
-0x1090, 0x1099,
-0x109c, 0x109d,
+0x1050, 0x109d,
 0x10a0, 0x10c5,
 0x10c7, 0x10c7,
 0x10cd, 0x10cd,
@@ -4595,7 +4624,6 @@ CR_Alnum[] = { 713,
 0x12d8, 0x1310,
 0x1312, 0x1315,
 0x1318, 0x135a,
-0x135f, 0x135f,
 0x1380, 0x138f,
 0x13a0, 0x13f5,
 0x13f8, 0x13fd,
@@ -4641,7 +4669,7 @@ CR_Alnum[] = { 713,
 0x1b80, 0x1ba9,
 0x1bac, 0x1be5,
 0x1be7, 0x1bf1,
-0x1c00, 0x1c35,
+0x1c00, 0x1c36,
 0x1c40, 0x1c49,
 0x1c4d, 0x1c7d,
 0x1c80, 0x1c88,
@@ -4650,6 +4678,7 @@ CR_Alnum[] = { 713,
 0x1ce9, 0x1cec,
 0x1cee, 0x1cf3,
 0x1cf5, 0x1cf6,
+0x1cfa, 0x1cfa,
 0x1d00, 0x1dbf,
 0x1de7, 0x1df4,
 0x1e00, 0x1f15,
@@ -4733,32 +4762,28 @@ CR_Alnum[] = { 713,
 0xa67f, 0xa6ef,
 0xa717, 0xa71f,
 0xa722, 0xa788,
-0xa78b, 0xa7b9,
-0xa7f7, 0xa801,
-0xa803, 0xa805,
-0xa807, 0xa80a,
-0xa80c, 0xa827,
+0xa78b, 0xa7bf,
+0xa7c2, 0xa7c6,
+0xa7f7, 0xa805,
+0xa807, 0xa827,
 0xa840, 0xa873,
 0xa880, 0xa8c3,
 0xa8c5, 0xa8c5,
 0xa8d0, 0xa8d9,
 0xa8f2, 0xa8f7,
 0xa8fb, 0xa8fb,
-0xa8fd, 0xa8fe,
-0xa900, 0xa92a,
+0xa8fd, 0xa92a,
 0xa930, 0xa952,
 0xa960, 0xa97c,
 0xa980, 0xa9b2,
 0xa9b4, 0xa9bf,
 0xa9cf, 0xa9d9,
-0xa9e0, 0xa9e4,
-0xa9e6, 0xa9fe,
+0xa9e0, 0xa9fe,
 0xaa00, 0xaa36,
 0xaa40, 0xaa4d,
 0xaa50, 0xaa59,
 0xaa60, 0xaa76,
-0xaa7a, 0xaa7a,
-0xaa7e, 0xaabe,
+0xaa7a, 0xaabe,
 0xaac0, 0xaac0,
 0xaac2, 0xaac2,
 0xaadb, 0xaadd,
@@ -4770,7 +4795,7 @@ CR_Alnum[] = { 713,
 0xab20, 0xab26,
 0xab28, 0xab2e,
 0xab30, 0xab5a,
-0xab5c, 0xab65,
+0xab5c, 0xab67,
 0xab70, 0xabea,
 0xabf0, 0xabf9,
 0xac00, 0xd7a3,
@@ -4862,6 +4887,7 @@ CR_Alnum[] = { 713,
 0x10f00, 0x10f1c,
 0x10f27, 0x10f27,
 0x10f30, 0x10f45,
+0x10fe0, 0x10ff6,
 0x11000, 0x11045,
 0x11066, 0x1106f,
 0x11082, 0x110b8,
@@ -4904,6 +4930,7 @@ CR_Alnum[] = { 713,
 0x11443, 0x11445,
 0x11447, 0x1144a,
 0x11450, 0x11459,
+0x1145f, 0x1145f,
 0x11480, 0x114c1,
 0x114c4, 0x114c5,
 0x114c7, 0x114c7,
@@ -4916,6 +4943,7 @@ CR_Alnum[] = { 713,
 0x11644, 0x11644,
 0x11650, 0x11659,
 0x11680, 0x116b5,
+0x116b8, 0x116b8,
 0x116c0, 0x116c9,
 0x11700, 0x1171a,
 0x1171d, 0x1172a,
@@ -4923,10 +4951,14 @@ CR_Alnum[] = { 713,
 0x11800, 0x11838,
 0x118a0, 0x118e9,
 0x118ff, 0x118ff,
+0x119a0, 0x119a7,
+0x119aa, 0x119d7,
+0x119da, 0x119df,
+0x119e1, 0x119e1,
+0x119e3, 0x119e4,
 0x11a00, 0x11a32,
 0x11a35, 0x11a3e,
-0x11a50, 0x11a83,
-0x11a86, 0x11a97,
+0x11a50, 0x11a97,
 0x11a9d, 0x11a9d,
 0x11ac0, 0x11af8,
 0x11c00, 0x11c08,
@@ -4963,19 +4995,22 @@ CR_Alnum[] = { 713,
 0x16a40, 0x16a5e,
 0x16a60, 0x16a69,
 0x16ad0, 0x16aed,
-0x16b00, 0x16b36,
+0x16b00, 0x16b2f,
 0x16b40, 0x16b43,
 0x16b50, 0x16b59,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16e40, 0x16e7f,
-0x16f00, 0x16f44,
-0x16f50, 0x16f7e,
-0x16f93, 0x16f9f,
+0x16f00, 0x16f4a,
+0x16f4f, 0x16f87,
+0x16f8f, 0x16f9f,
 0x16fe0, 0x16fe1,
-0x17000, 0x187f1,
+0x16fe3, 0x16fe3,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b000, 0x1b11e,
+0x1b150, 0x1b152,
+0x1b164, 0x1b167,
 0x1b170, 0x1b2fb,
 0x1bc00, 0x1bc6a,
 0x1bc70, 0x1bc7c,
@@ -5018,9 +5053,16 @@ CR_Alnum[] = { 713,
 0x1e01b, 0x1e021,
 0x1e023, 0x1e024,
 0x1e026, 0x1e02a,
+0x1e100, 0x1e12c,
+0x1e137, 0x1e13d,
+0x1e140, 0x1e149,
+0x1e14e, 0x1e14e,
+0x1e2c0, 0x1e2eb,
+0x1e2f0, 0x1e2f9,
 0x1e800, 0x1e8c4,
 0x1e900, 0x1e943,
 0x1e947, 0x1e947,
+0x1e94b, 0x1e94b,
 0x1e950, 0x1e959,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
@@ -5079,7 +5121,7 @@ CR_ASCII[] = { 1,
 /* PROPERTY: 'Adlam': Script */
 static const OnigCodePoint
 CR_Adlam[] = { 3,
-0x1e900, 0x1e94a,
+0x1e900, 0x1e94b,
 0x1e950, 0x1e959,
 0x1e95e, 0x1e95f,
 }; /* END of CR_Adlam */
@@ -5181,7 +5223,7 @@ CR_Armenian[] = { 5,
 
 /* PROPERTY: 'Assigned': - */
 static const OnigCodePoint
-CR_Assigned[] = { 658,
+CR_Assigned[] = { 666,
 0x0000, 0x0377,
 0x037a, 0x037f,
 0x0384, 0x038a,
@@ -5291,7 +5333,7 @@ CR_Assigned[] = { 658,
 0x0c58, 0x0c5a,
 0x0c60, 0x0c63,
 0x0c66, 0x0c6f,
-0x0c78, 0x0c8c,
+0x0c77, 0x0c8c,
 0x0c8e, 0x0c90,
 0x0c92, 0x0ca8,
 0x0caa, 0x0cb3,
@@ -5328,17 +5370,10 @@ CR_Assigned[] = { 658,
 0x0e3f, 0x0e5b,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb9,
-0x0ebb, 0x0ebd,
+0x0ea7, 0x0ebd,
 0x0ec0, 0x0ec4,
 0x0ec6, 0x0ec6,
 0x0ec8, 0x0ecd,
@@ -5414,7 +5449,7 @@ CR_Assigned[] = { 658,
 0x1c4d, 0x1c88,
 0x1c90, 0x1cba,
 0x1cbd, 0x1cc7,
-0x1cd0, 0x1cf9,
+0x1cd0, 0x1cfa,
 0x1d00, 0x1df9,
 0x1dfb, 0x1f15,
 0x1f18, 0x1f1d,
@@ -5443,9 +5478,7 @@ CR_Assigned[] = { 658,
 0x2440, 0x244a,
 0x2460, 0x2b73,
 0x2b76, 0x2b95,
-0x2b98, 0x2bc8,
-0x2bca, 0x2bfe,
-0x2c00, 0x2c2e,
+0x2b98, 0x2c2e,
 0x2c30, 0x2c5e,
 0x2c60, 0x2cf3,
 0x2cf9, 0x2d25,
@@ -5462,7 +5495,7 @@ CR_Assigned[] = { 658,
 0x2dc8, 0x2dce,
 0x2dd0, 0x2dd6,
 0x2dd8, 0x2dde,
-0x2de0, 0x2e4e,
+0x2de0, 0x2e4f,
 0x2e80, 0x2e99,
 0x2e9b, 0x2ef3,
 0x2f00, 0x2fd5,
@@ -5475,14 +5508,14 @@ CR_Assigned[] = { 658,
 0x3190, 0x31ba,
 0x31c0, 0x31e3,
 0x31f0, 0x321e,
-0x3220, 0x32fe,
-0x3300, 0x4db5,
+0x3220, 0x4db5,
 0x4dc0, 0x9fef,
 0xa000, 0xa48c,
 0xa490, 0xa4c6,
 0xa4d0, 0xa62b,
 0xa640, 0xa6f7,
-0xa700, 0xa7b9,
+0xa700, 0xa7bf,
+0xa7c2, 0xa7c6,
 0xa7f7, 0xa82b,
 0xa830, 0xa839,
 0xa840, 0xa877,
@@ -5503,7 +5536,7 @@ CR_Assigned[] = { 658,
 0xab11, 0xab16,
 0xab20, 0xab26,
 0xab28, 0xab2e,
-0xab30, 0xab65,
+0xab30, 0xab67,
 0xab70, 0xabed,
 0xabf0, 0xabf9,
 0xac00, 0xd7a3,
@@ -5610,6 +5643,7 @@ CR_Assigned[] = { 658,
 0x10e60, 0x10e7e,
 0x10f00, 0x10f27,
 0x10f30, 0x10f59,
+0x10fe0, 0x10ff6,
 0x11000, 0x1104d,
 0x11052, 0x1106f,
 0x1107f, 0x110c1,
@@ -5648,7 +5682,7 @@ CR_Assigned[] = { 658,
 0x11370, 0x11374,
 0x11400, 0x11459,
 0x1145b, 0x1145b,
-0x1145d, 0x1145e,
+0x1145d, 0x1145f,
 0x11480, 0x114c7,
 0x114d0, 0x114d9,
 0x11580, 0x115b5,
@@ -5656,7 +5690,7 @@ CR_Assigned[] = { 658,
 0x11600, 0x11644,
 0x11650, 0x11659,
 0x11660, 0x1166c,
-0x11680, 0x116b7,
+0x11680, 0x116b8,
 0x116c0, 0x116c9,
 0x11700, 0x1171a,
 0x1171d, 0x1172b,
@@ -5664,9 +5698,11 @@ CR_Assigned[] = { 658,
 0x11800, 0x1183b,
 0x118a0, 0x118f2,
 0x118ff, 0x118ff,
+0x119a0, 0x119a7,
+0x119aa, 0x119d7,
+0x119da, 0x119e4,
 0x11a00, 0x11a47,
-0x11a50, 0x11a83,
-0x11a86, 0x11aa2,
+0x11a50, 0x11aa2,
 0x11ac0, 0x11af8,
 0x11c00, 0x11c08,
 0x11c0a, 0x11c36,
@@ -5689,11 +5725,13 @@ CR_Assigned[] = { 658,
 0x11d93, 0x11d98,
 0x11da0, 0x11da9,
 0x11ee0, 0x11ef8,
-0x12000, 0x12399,
+0x11fc0, 0x11ff1,
+0x11fff, 0x12399,
 0x12400, 0x1246e,
 0x12470, 0x12474,
 0x12480, 0x12543,
 0x13000, 0x1342e,
+0x13430, 0x13438,
 0x14400, 0x14646,
 0x16800, 0x16a38,
 0x16a40, 0x16a5e,
@@ -5707,13 +5745,15 @@ CR_Assigned[] = { 658,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16e40, 0x16e9a,
-0x16f00, 0x16f44,
-0x16f50, 0x16f7e,
+0x16f00, 0x16f4a,
+0x16f4f, 0x16f87,
 0x16f8f, 0x16f9f,
-0x16fe0, 0x16fe1,
-0x17000, 0x187f1,
+0x16fe0, 0x16fe3,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b000, 0x1b11e,
+0x1b150, 0x1b152,
+0x1b164, 0x1b167,
 0x1b170, 0x1b2fb,
 0x1bc00, 0x1bc6a,
 0x1bc70, 0x1bc7c,
@@ -5755,12 +5795,19 @@ CR_Assigned[] = { 658,
 0x1e01b, 0x1e021,
 0x1e023, 0x1e024,
 0x1e026, 0x1e02a,
+0x1e100, 0x1e12c,
+0x1e130, 0x1e13d,
+0x1e140, 0x1e149,
+0x1e14e, 0x1e14f,
+0x1e2c0, 0x1e2f9,
+0x1e2ff, 0x1e2ff,
 0x1e800, 0x1e8c4,
 0x1e8c7, 0x1e8d6,
-0x1e900, 0x1e94a,
+0x1e900, 0x1e94b,
 0x1e950, 0x1e959,
 0x1e95e, 0x1e95f,
 0x1ec71, 0x1ecb4,
+0x1ed01, 0x1ed3d,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
 0x1ee21, 0x1ee22,
@@ -5802,33 +5849,36 @@ CR_Assigned[] = { 658,
 0x1f0c1, 0x1f0cf,
 0x1f0d1, 0x1f0f5,
 0x1f100, 0x1f10c,
-0x1f110, 0x1f16b,
+0x1f110, 0x1f16c,
 0x1f170, 0x1f1ac,
 0x1f1e6, 0x1f202,
 0x1f210, 0x1f23b,
 0x1f240, 0x1f248,
 0x1f250, 0x1f251,
 0x1f260, 0x1f265,
-0x1f300, 0x1f6d4,
+0x1f300, 0x1f6d5,
 0x1f6e0, 0x1f6ec,
-0x1f6f0, 0x1f6f9,
+0x1f6f0, 0x1f6fa,
 0x1f700, 0x1f773,
 0x1f780, 0x1f7d8,
+0x1f7e0, 0x1f7eb,
 0x1f800, 0x1f80b,
 0x1f810, 0x1f847,
 0x1f850, 0x1f859,
 0x1f860, 0x1f887,
 0x1f890, 0x1f8ad,
 0x1f900, 0x1f90b,
-0x1f910, 0x1f93e,
-0x1f940, 0x1f970,
+0x1f90d, 0x1f971,
 0x1f973, 0x1f976,
-0x1f97a, 0x1f97a,
-0x1f97c, 0x1f9a2,
-0x1f9b0, 0x1f9b9,
-0x1f9c0, 0x1f9c2,
-0x1f9d0, 0x1f9ff,
+0x1f97a, 0x1f9a2,
+0x1f9a5, 0x1f9aa,
+0x1f9ae, 0x1f9ca,
+0x1f9cd, 0x1fa53,
 0x1fa60, 0x1fa6d,
+0x1fa70, 0x1fa73,
+0x1fa78, 0x1fa7a,
+0x1fa80, 0x1fa82,
+0x1fa90, 0x1fa95,
 0x20000, 0x2a6d6,
 0x2a700, 0x2b734,
 0x2b740, 0x2b81d,
@@ -5951,7 +6001,7 @@ CR_Buhid[] = { 1,
 
 /* PROPERTY: 'C': Major Category */
 static const OnigCodePoint
-CR_C[] = { 661,
+CR_C[] = { 668,
 0x0000, 0x001f,
 0x007f, 0x009f,
 0x00ad, 0x00ad,
@@ -6065,7 +6115,7 @@ CR_C[] = { 661,
 0x0c57, 0x0c57,
 0x0c5b, 0x0c5f,
 0x0c64, 0x0c65,
-0x0c70, 0x0c77,
+0x0c70, 0x0c76,
 0x0c8d, 0x0c8d,
 0x0c91, 0x0c91,
 0x0ca9, 0x0ca9,
@@ -6102,17 +6152,10 @@ CR_C[] = { 661,
 0x0e3b, 0x0e3e,
 0x0e5c, 0x0e80,
 0x0e83, 0x0e83,
-0x0e85, 0x0e86,
-0x0e89, 0x0e89,
-0x0e8b, 0x0e8c,
-0x0e8e, 0x0e93,
-0x0e98, 0x0e98,
-0x0ea0, 0x0ea0,
+0x0e85, 0x0e85,
+0x0e8b, 0x0e8b,
 0x0ea4, 0x0ea4,
 0x0ea6, 0x0ea6,
-0x0ea8, 0x0ea9,
-0x0eac, 0x0eac,
-0x0eba, 0x0eba,
 0x0ebe, 0x0ebf,
 0x0ec5, 0x0ec5,
 0x0ec7, 0x0ec7,
@@ -6189,7 +6232,7 @@ CR_C[] = { 661,
 0x1c89, 0x1c8f,
 0x1cbb, 0x1cbc,
 0x1cc8, 0x1ccf,
-0x1cfa, 0x1cff,
+0x1cfb, 0x1cff,
 0x1dfa, 0x1dfa,
 0x1f16, 0x1f17,
 0x1f1e, 0x1f1f,
@@ -6220,8 +6263,6 @@ CR_C[] = { 661,
 0x244b, 0x245f,
 0x2b74, 0x2b75,
 0x2b96, 0x2b97,
-0x2bc9, 0x2bc9,
-0x2bff, 0x2bff,
 0x2c2f, 0x2c2f,
 0x2c5f, 0x2c5f,
 0x2cf4, 0x2cf8,
@@ -6239,7 +6280,7 @@ CR_C[] = { 661,
 0x2dcf, 0x2dcf,
 0x2dd7, 0x2dd7,
 0x2ddf, 0x2ddf,
-0x2e4f, 0x2e7f,
+0x2e50, 0x2e7f,
 0x2e9a, 0x2e9a,
 0x2ef4, 0x2eff,
 0x2fd6, 0x2fef,
@@ -6252,14 +6293,14 @@ CR_C[] = { 661,
 0x31bb, 0x31bf,
 0x31e4, 0x31ef,
 0x321f, 0x321f,
-0x32ff, 0x32ff,
 0x4db6, 0x4dbf,
 0x9ff0, 0x9fff,
 0xa48d, 0xa48f,
 0xa4c7, 0xa4cf,
 0xa62c, 0xa63f,
 0xa6f8, 0xa6ff,
-0xa7ba, 0xa7f6,
+0xa7c0, 0xa7c1,
+0xa7c7, 0xa7f6,
 0xa82c, 0xa82f,
 0xa83a, 0xa83f,
 0xa878, 0xa87f,
@@ -6280,7 +6321,7 @@ CR_C[] = { 661,
 0xab17, 0xab1f,
 0xab27, 0xab27,
 0xab2f, 0xab2f,
-0xab66, 0xab6f,
+0xab68, 0xab6f,
 0xabee, 0xabef,
 0xabfa, 0xabff,
 0xd7a4, 0xd7af,
@@ -6385,7 +6426,8 @@ CR_C[] = { 661,
 0x10d3a, 0x10e5f,
 0x10e7f, 0x10eff,
 0x10f28, 0x10f2f,
-0x10f5a, 0x10fff,
+0x10f5a, 0x10fdf,
+0x10ff7, 0x10fff,
 0x1104e, 0x11051,
 0x11070, 0x1107e,
 0x110bd, 0x110bd,
@@ -6424,7 +6466,7 @@ CR_C[] = { 661,
 0x11375, 0x113ff,
 0x1145a, 0x1145a,
 0x1145c, 0x1145c,
-0x1145f, 0x1147f,
+0x11460, 0x1147f,
 0x114c8, 0x114cf,
 0x114da, 0x1157f,
 0x115b6, 0x115b7,
@@ -6432,16 +6474,18 @@ CR_C[] = { 661,
 0x11645, 0x1164f,
 0x1165a, 0x1165f,
 0x1166d, 0x1167f,
-0x116b8, 0x116bf,
+0x116b9, 0x116bf,
 0x116ca, 0x116ff,
 0x1171b, 0x1171c,
 0x1172c, 0x1172f,
 0x11740, 0x117ff,
 0x1183c, 0x1189f,
 0x118f3, 0x118fe,
-0x11900, 0x119ff,
+0x11900, 0x1199f,
+0x119a8, 0x119a9,
+0x119d8, 0x119d9,
+0x119e5, 0x119ff,
 0x11a48, 0x11a4f,
-0x11a84, 0x11a85,
 0x11aa3, 0x11abf,
 0x11af9, 0x11bff,
 0x11c09, 0x11c09,
@@ -6464,7 +6508,8 @@ CR_C[] = { 661,
 0x11d92, 0x11d92,
 0x11d99, 0x11d9f,
 0x11daa, 0x11edf,
-0x11ef9, 0x11fff,
+0x11ef9, 0x11fbf,
+0x11ff2, 0x11ffe,
 0x1239a, 0x123ff,
 0x1246f, 0x1246f,
 0x12475, 0x1247f,
@@ -6483,13 +6528,15 @@ CR_C[] = { 661,
 0x16b78, 0x16b7c,
 0x16b90, 0x16e3f,
 0x16e9b, 0x16eff,
-0x16f45, 0x16f4f,
-0x16f7f, 0x16f8e,
+0x16f4b, 0x16f4e,
+0x16f88, 0x16f8e,
 0x16fa0, 0x16fdf,
-0x16fe2, 0x16fff,
-0x187f2, 0x187ff,
+0x16fe4, 0x16fff,
+0x187f8, 0x187ff,
 0x18af3, 0x1afff,
-0x1b11f, 0x1b16f,
+0x1b11f, 0x1b14f,
+0x1b153, 0x1b163,
+0x1b168, 0x1b16f,
 0x1b2fc, 0x1bbff,
 0x1bc6b, 0x1bc6f,
 0x1bc7d, 0x1bc7f,
@@ -6531,13 +6578,20 @@ CR_C[] = { 661,
 0x1e019, 0x1e01a,
 0x1e022, 0x1e022,
 0x1e025, 0x1e025,
-0x1e02b, 0x1e7ff,
+0x1e02b, 0x1e0ff,
+0x1e12d, 0x1e12f,
+0x1e13e, 0x1e13f,
+0x1e14a, 0x1e14d,
+0x1e150, 0x1e2bf,
+0x1e2fa, 0x1e2fe,
+0x1e300, 0x1e7ff,
 0x1e8c5, 0x1e8c6,
 0x1e8d7, 0x1e8ff,
-0x1e94b, 0x1e94f,
+0x1e94c, 0x1e94f,
 0x1e95a, 0x1e95d,
 0x1e960, 0x1ec70,
-0x1ecb5, 0x1edff,
+0x1ecb5, 0x1ed00,
+0x1ed3e, 0x1edff,
 0x1ee04, 0x1ee04,
 0x1ee20, 0x1ee20,
 0x1ee23, 0x1ee23,
@@ -6579,33 +6633,36 @@ CR_C[] = { 661,
 0x1f0d0, 0x1f0d0,
 0x1f0f6, 0x1f0ff,
 0x1f10d, 0x1f10f,
-0x1f16c, 0x1f16f,
+0x1f16d, 0x1f16f,
 0x1f1ad, 0x1f1e5,
 0x1f203, 0x1f20f,
 0x1f23c, 0x1f23f,
 0x1f249, 0x1f24f,
 0x1f252, 0x1f25f,
 0x1f266, 0x1f2ff,
-0x1f6d5, 0x1f6df,
+0x1f6d6, 0x1f6df,
 0x1f6ed, 0x1f6ef,
-0x1f6fa, 0x1f6ff,
+0x1f6fb, 0x1f6ff,
 0x1f774, 0x1f77f,
-0x1f7d9, 0x1f7ff,
+0x1f7d9, 0x1f7df,
+0x1f7ec, 0x1f7ff,
 0x1f80c, 0x1f80f,
 0x1f848, 0x1f84f,
 0x1f85a, 0x1f85f,
 0x1f888, 0x1f88f,
 0x1f8ae, 0x1f8ff,
-0x1f90c, 0x1f90f,
-0x1f93f, 0x1f93f,
-0x1f971, 0x1f972,
+0x1f90c, 0x1f90c,
+0x1f972, 0x1f972,
 0x1f977, 0x1f979,
-0x1f97b, 0x1f97b,
-0x1f9a3, 0x1f9af,
-0x1f9ba, 0x1f9bf,
-0x1f9c3, 0x1f9cf,
-0x1fa00, 0x1fa5f,
-0x1fa6e, 0x1ffff,
+0x1f9a3, 0x1f9a4,
+0x1f9ab, 0x1f9ad,
+0x1f9cb, 0x1f9cc,
+0x1fa54, 0x1fa5f,
+0x1fa6e, 0x1fa6f,
+0x1fa74, 0x1fa77,
+0x1fa7b, 0x1fa7f,
+0x1fa83, 0x1fa8f,
+0x1fa96, 0x1ffff,
 0x2a6d7, 0x2a6ff,
 0x2b735, 0x2b73f,
 0x2b81e, 0x2b81f,
@@ -6630,7 +6687,7 @@ CR_Carian[] = { 1,
 
 /* PROPERTY: 'Case_Ignorable': Derived Property */
 static const OnigCodePoint
-CR_Case_Ignorable[] = { 394,
+CR_Case_Ignorable[] = { 401,
 0x0027, 0x0027,
 0x002e, 0x002e,
 0x003a, 0x003a,
@@ -6736,8 +6793,7 @@ CR_Case_Ignorable[] = { 394,
 0x0e34, 0x0e3a,
 0x0e46, 0x0e4e,
 0x0eb1, 0x0eb1,
-0x0eb4, 0x0eb9,
-0x0ebb, 0x0ebc,
+0x0eb4, 0x0ebc,
 0x0ec6, 0x0ec6,
 0x0ec8, 0x0ecd,
 0x0f18, 0x0f19,
@@ -6872,7 +6928,7 @@ CR_Case_Ignorable[] = { 394,
 0xa980, 0xa982,
 0xa9b3, 0xa9b3,
 0xa9b6, 0xa9b9,
-0xa9bc, 0xa9bc,
+0xa9bc, 0xa9bd,
 0xa9cf, 0xa9cf,
 0xa9e5, 0xa9e6,
 0xaa29, 0xaa2e,
@@ -6972,6 +7028,9 @@ CR_Case_Ignorable[] = { 394,
 0x11727, 0x1172b,
 0x1182f, 0x11837,
 0x11839, 0x1183a,
+0x119d4, 0x119d7,
+0x119da, 0x119db,
+0x119e0, 0x119e0,
 0x11a01, 0x11a0a,
 0x11a33, 0x11a38,
 0x11a3b, 0x11a3e,
@@ -6996,11 +7055,14 @@ CR_Case_Ignorable[] = { 394,
 0x11d95, 0x11d95,
 0x11d97, 0x11d97,
 0x11ef3, 0x11ef4,
+0x13430, 0x13438,
 0x16af0, 0x16af4,
 0x16b30, 0x16b36,
 0x16b40, 0x16b43,
+0x16f4f, 0x16f4f,
 0x16f8f, 0x16f9f,
 0x16fe0, 0x16fe1,
+0x16fe3, 0x16fe3,
 0x1bc9d, 0x1bc9e,
 0x1bca0, 0x1bca3,
 0x1d167, 0x1d169,
@@ -7019,8 +7081,10 @@ CR_Case_Ignorable[] = { 394,
 0x1e01b, 0x1e021,
 0x1e023, 0x1e024,
 0x1e026, 0x1e02a,
+0x1e130, 0x1e13d,
+0x1e2ec, 0x1e2ef,
 0x1e8d0, 0x1e8d6,
-0x1e944, 0x1e94a,
+0x1e944, 0x1e94b,
 0x1f3fb, 0x1f3ff,
 0xe0001, 0xe0001,
 0xe0020, 0xe007f,
@@ -7029,7 +7093,7 @@ CR_Case_Ignorable[] = { 394,
 
 /* PROPERTY: 'Cased': Derived Property */
 static const OnigCodePoint
-CR_Cased[] = { 139,
+CR_Cased[] = { 140,
 0x0041, 0x005a,
 0x0061, 0x007a,
 0x00aa, 0x00aa,
@@ -7119,10 +7183,11 @@ CR_Cased[] = { 139,
 0xa680, 0xa69d,
 0xa722, 0xa787,
 0xa78b, 0xa78e,
-0xa790, 0xa7b9,
+0xa790, 0xa7bf,
+0xa7c2, 0xa7c6,
 0xa7f8, 0xa7fa,
 0xab30, 0xab5a,
-0xab5c, 0xab65,
+0xab5c, 0xab67,
 0xab70, 0xabbf,
 0xfb00, 0xfb06,
 0xfb13, 0xfb17,
@@ -7183,7 +7248,7 @@ CR_Caucasian_Albanian[] = { 2,
 
 /* PROPERTY: 'Cf': General Category */
 static const OnigCodePoint
-CR_Cf[] = { 19,
+CR_Cf[] = { 20,
 0x00ad, 0x00ad,
 0x0600, 0x0605,
 0x061c, 0x061c,
@@ -7199,6 +7264,7 @@ CR_Cf[] = { 19,
 0xfff9, 0xfffb,
 0x110bd, 0x110bd,
 0x110cd, 0x110cd,
+0x13430, 0x13438,
 0x1bca0, 0x1bca3,
 0x1d173, 0x1d17a,
 0xe0001, 0xe0001,
@@ -7223,7 +7289,7 @@ CR_Cham[] = { 4,
 
 /* PROPERTY: 'Changes_When_Casefolded': Derived Property */
 static const OnigCodePoint
-CR_Changes_When_Casefolded[] = { 607,
+CR_Changes_When_Casefolded[] = { 612,
 0x0041, 0x005a,
 0x00b5, 0x00b5,
 0x00c0, 0x00d6,
@@ -7821,6 +7887,11 @@ CR_Changes_When_Casefolded[] = { 607,
 0xa7b0, 0xa7b4,
 0xa7b6, 0xa7b6,
 0xa7b8, 0xa7b8,
+0xa7ba, 0xa7ba,
+0xa7bc, 0xa7bc,
+0xa7be, 0xa7be,
+0xa7c2, 0xa7c2,
+0xa7c4, 0xa7c6,
 0xab70, 0xabbf,
 0xfb00, 0xfb06,
 0xfb13, 0xfb17,
@@ -7835,7 +7906,7 @@ CR_Changes_When_Casefolded[] = { 607,
 
 /* PROPERTY: 'Changes_When_Casemapped': Derived Property */
 static const OnigCodePoint
-CR_Changes_When_Casemapped[] = { 121,
+CR_Changes_When_Casemapped[] = { 123,
 0x0041, 0x005a,
 0x0061, 0x007a,
 0x00b5, 0x00b5,
@@ -7863,7 +7934,7 @@ CR_Changes_When_Casemapped[] = { 121,
 0x0275, 0x0275,
 0x027d, 0x027d,
 0x0280, 0x0280,
-0x0283, 0x0283,
+0x0282, 0x0283,
 0x0287, 0x028c,
 0x0292, 0x0292,
 0x029d, 0x029e,
@@ -7895,6 +7966,7 @@ CR_Changes_When_Casemapped[] = { 121,
 0x1cbd, 0x1cbf,
 0x1d79, 0x1d79,
 0x1d7d, 0x1d7d,
+0x1d8e, 0x1d8e,
 0x1e00, 0x1e9b,
 0x1e9e, 0x1e9e,
 0x1ea0, 0x1f15,
@@ -7940,9 +8012,10 @@ CR_Changes_When_Casemapped[] = { 121,
 0xa732, 0xa76f,
 0xa779, 0xa787,
 0xa78b, 0xa78d,
-0xa790, 0xa793,
+0xa790, 0xa794,
 0xa796, 0xa7ae,
-0xa7b0, 0xa7b9,
+0xa7b0, 0xa7bf,
+0xa7c2, 0xa7c6,
 0xab53, 0xab53,
 0xab70, 0xabbf,
 0xfb00, 0xfb06,
@@ -7961,7 +8034,7 @@ CR_Changes_When_Casemapped[] = { 121,
 
 /* PROPERTY: 'Changes_When_Lowercased': Derived Property */
 static const OnigCodePoint
-CR_Changes_When_Lowercased[] = { 594,
+CR_Changes_When_Lowercased[] = { 599,
 0x0041, 0x005a,
 0x00c0, 0x00d6,
 0x00d8, 0x00de,
@@ -8549,6 +8622,11 @@ CR_Changes_When_Lowercased[] = { 594,
 0xa7b0, 0xa7b4,
 0xa7b6, 0xa7b6,
 0xa7b8, 0xa7b8,
+0xa7ba, 0xa7ba,
+0xa7bc, 0xa7bc,
+0xa7be, 0xa7be,
+0xa7c2, 0xa7c2,
+0xa7c4, 0xa7c6,
 0xff21, 0xff3a,
 0x10400, 0x10427,
 0x104b0, 0x104d3,
@@ -8560,7 +8638,7 @@ CR_Changes_When_Lowercased[] = { 594,
 
 /* PROPERTY: 'Changes_When_Titlecased': Derived Property */
 static const OnigCodePoint
-CR_Changes_When_Titlecased[] = { 610,
+CR_Changes_When_Titlecased[] = { 615,
 0x0061, 0x007a,
 0x00b5, 0x00b5,
 0x00df, 0x00f6,
@@ -8718,7 +8796,7 @@ CR_Changes_When_Titlecased[] = { 610,
 0x0275, 0x0275,
 0x027d, 0x027d,
 0x0280, 0x0280,
-0x0283, 0x0283,
+0x0282, 0x0283,
 0x0287, 0x028c,
 0x0292, 0x0292,
 0x029d, 0x029e,
@@ -8851,6 +8929,7 @@ CR_Changes_When_Titlecased[] = { 610,
 0x1c80, 0x1c88,
 0x1d79, 0x1d79,
 0x1d7d, 0x1d7d,
+0x1d8e, 0x1d8e,
 0x1e01, 0x1e01,
 0x1e03, 0x1e03,
 0x1e05, 0x1e05,
@@ -9146,7 +9225,7 @@ CR_Changes_When_Titlecased[] = { 610,
 0xa787, 0xa787,
 0xa78c, 0xa78c,
 0xa791, 0xa791,
-0xa793, 0xa793,
+0xa793, 0xa794,
 0xa797, 0xa797,
 0xa799, 0xa799,
 0xa79b, 0xa79b,
@@ -9160,6 +9239,10 @@ CR_Changes_When_Titlecased[] = { 610,
 0xa7b5, 0xa7b5,
 0xa7b7, 0xa7b7,
 0xa7b9, 0xa7b9,
+0xa7bb, 0xa7bb,
+0xa7bd, 0xa7bd,
+0xa7bf, 0xa7bf,
+0xa7c3, 0xa7c3,
 0xab53, 0xab53,
 0xab70, 0xabbf,
 0xfb00, 0xfb06,
@@ -9175,7 +9258,7 @@ CR_Changes_When_Titlecased[] = { 610,
 
 /* PROPERTY: 'Changes_When_Uppercased': Derived Property */
 static const OnigCodePoint
-CR_Changes_When_Uppercased[] = { 611,
+CR_Changes_When_Uppercased[] = { 616,
 0x0061, 0x007a,
 0x00b5, 0x00b5,
 0x00df, 0x00f6,
@@ -9332,7 +9415,7 @@ CR_Changes_When_Uppercased[] = { 611,
 0x0275, 0x0275,
 0x027d, 0x027d,
 0x0280, 0x0280,
-0x0283, 0x0283,
+0x0282, 0x0283,
 0x0287, 0x028c,
 0x0292, 0x0292,
 0x029d, 0x029e,
@@ -9467,6 +9550,7 @@ CR_Changes_When_Uppercased[] = { 611,
 0x1c80, 0x1c88,
 0x1d79, 0x1d79,
 0x1d7d, 0x1d7d,
+0x1d8e, 0x1d8e,
 0x1e01, 0x1e01,
 0x1e03, 0x1e03,
 0x1e05, 0x1e05,
@@ -9762,7 +9846,7 @@ CR_Changes_When_Uppercased[] = { 611,
 0xa787, 0xa787,
 0xa78c, 0xa78c,
 0xa791, 0xa791,
-0xa793, 0xa793,
+0xa793, 0xa794,
 0xa797, 0xa797,
 0xa799, 0xa799,
 0xa79b, 0xa79b,
@@ -9776,6 +9860,10 @@ CR_Changes_When_Uppercased[] = { 611,
 0xa7b5, 0xa7b5,
 0xa7b7, 0xa7b7,
 0xa7b9, 0xa7b9,
+0xa7bb, 0xa7bb,
+0xa7bd, 0xa7bd,
+0xa7bf, 0xa7bf,
+0xa7c3, 0xa7c3,
 0xab53, 0xab53,
 0xab70, 0xabbf,
 0xfb00, 0xfb06,
@@ -9799,7 +9887,7 @@ CR_Cherokee[] = { 3,
 
 /* PROPERTY: 'Cn': General Category */
 static const OnigCodePoint
-CR_Cn[] = { 658,
+CR_Cn[] = { 666,
 0x0378, 0x0379,
 0x0380, 0x0383,
 0x038b, 0x038b,
@@ -9908,7 +9996,7 @@ CR_Cn[] = { 658,
 0x0c57, 0x0c57,
 0x0c5b, 0x0c5f,
 0x0c64, 0x0c65,
-0x0c70, 0x0c77,
+0x0c70, 0x0c76,
 0x0c8d, 0x0c8d,
 0x0c91, 0x0c91,
 0x0ca9, 0x0ca9,
@@ -9945,17 +10033,10 @@ CR_Cn[] = { 658,
 0x0e3b, 0x0e3e,
 0x0e5c, 0x0e80,
 0x0e83, 0x0e83,
-0x0e85, 0x0e86,
-0x0e89, 0x0e89,
-0x0e8b, 0x0e8c,
-0x0e8e, 0x0e93,
-0x0e98, 0x0e98,
-0x0ea0, 0x0ea0,
+0x0e85, 0x0e85,
+0x0e8b, 0x0e8b,
 0x0ea4, 0x0ea4,
 0x0ea6, 0x0ea6,
-0x0ea8, 0x0ea9,
-0x0eac, 0x0eac,
-0x0eba, 0x0eba,
 0x0ebe, 0x0ebf,
 0x0ec5, 0x0ec5,
 0x0ec7, 0x0ec7,
@@ -10032,7 +10113,7 @@ CR_Cn[] = { 658,
 0x1c89, 0x1c8f,
 0x1cbb, 0x1cbc,
 0x1cc8, 0x1ccf,
-0x1cfa, 0x1cff,
+0x1cfb, 0x1cff,
 0x1dfa, 0x1dfa,
 0x1f16, 0x1f17,
 0x1f1e, 0x1f1f,
@@ -10061,8 +10142,6 @@ CR_Cn[] = { 658,
 0x244b, 0x245f,
 0x2b74, 0x2b75,
 0x2b96, 0x2b97,
-0x2bc9, 0x2bc9,
-0x2bff, 0x2bff,
 0x2c2f, 0x2c2f,
 0x2c5f, 0x2c5f,
 0x2cf4, 0x2cf8,
@@ -10080,7 +10159,7 @@ CR_Cn[] = { 658,
 0x2dcf, 0x2dcf,
 0x2dd7, 0x2dd7,
 0x2ddf, 0x2ddf,
-0x2e4f, 0x2e7f,
+0x2e50, 0x2e7f,
 0x2e9a, 0x2e9a,
 0x2ef4, 0x2eff,
 0x2fd6, 0x2fef,
@@ -10093,14 +10172,14 @@ CR_Cn[] = { 658,
 0x31bb, 0x31bf,
 0x31e4, 0x31ef,
 0x321f, 0x321f,
-0x32ff, 0x32ff,
 0x4db6, 0x4dbf,
 0x9ff0, 0x9fff,
 0xa48d, 0xa48f,
 0xa4c7, 0xa4cf,
 0xa62c, 0xa63f,
 0xa6f8, 0xa6ff,
-0xa7ba, 0xa7f6,
+0xa7c0, 0xa7c1,
+0xa7c7, 0xa7f6,
 0xa82c, 0xa82f,
 0xa83a, 0xa83f,
 0xa878, 0xa87f,
@@ -10121,7 +10200,7 @@ CR_Cn[] = { 658,
 0xab17, 0xab1f,
 0xab27, 0xab27,
 0xab2f, 0xab2f,
-0xab66, 0xab6f,
+0xab68, 0xab6f,
 0xabee, 0xabef,
 0xabfa, 0xabff,
 0xd7a4, 0xd7af,
@@ -10227,7 +10306,8 @@ CR_Cn[] = { 658,
 0x10d3a, 0x10e5f,
 0x10e7f, 0x10eff,
 0x10f28, 0x10f2f,
-0x10f5a, 0x10fff,
+0x10f5a, 0x10fdf,
+0x10ff7, 0x10fff,
 0x1104e, 0x11051,
 0x11070, 0x1107e,
 0x110c2, 0x110cc,
@@ -10266,7 +10346,7 @@ CR_Cn[] = { 658,
 0x11375, 0x113ff,
 0x1145a, 0x1145a,
 0x1145c, 0x1145c,
-0x1145f, 0x1147f,
+0x11460, 0x1147f,
 0x114c8, 0x114cf,
 0x114da, 0x1157f,
 0x115b6, 0x115b7,
@@ -10274,16 +10354,18 @@ CR_Cn[] = { 658,
 0x11645, 0x1164f,
 0x1165a, 0x1165f,
 0x1166d, 0x1167f,
-0x116b8, 0x116bf,
+0x116b9, 0x116bf,
 0x116ca, 0x116ff,
 0x1171b, 0x1171c,
 0x1172c, 0x1172f,
 0x11740, 0x117ff,
 0x1183c, 0x1189f,
 0x118f3, 0x118fe,
-0x11900, 0x119ff,
+0x11900, 0x1199f,
+0x119a8, 0x119a9,
+0x119d8, 0x119d9,
+0x119e5, 0x119ff,
 0x11a48, 0x11a4f,
-0x11a84, 0x11a85,
 0x11aa3, 0x11abf,
 0x11af9, 0x11bff,
 0x11c09, 0x11c09,
@@ -10306,12 +10388,14 @@ CR_Cn[] = { 658,
 0x11d92, 0x11d92,
 0x11d99, 0x11d9f,
 0x11daa, 0x11edf,
-0x11ef9, 0x11fff,
+0x11ef9, 0x11fbf,
+0x11ff2, 0x11ffe,
 0x1239a, 0x123ff,
 0x1246f, 0x1246f,
 0x12475, 0x1247f,
 0x12544, 0x12fff,
-0x1342f, 0x143ff,
+0x1342f, 0x1342f,
+0x13439, 0x143ff,
 0x14647, 0x167ff,
 0x16a39, 0x16a3f,
 0x16a5f, 0x16a5f,
@@ -10325,13 +10409,15 @@ CR_Cn[] = { 658,
 0x16b78, 0x16b7c,
 0x16b90, 0x16e3f,
 0x16e9b, 0x16eff,
-0x16f45, 0x16f4f,
-0x16f7f, 0x16f8e,
+0x16f4b, 0x16f4e,
+0x16f88, 0x16f8e,
 0x16fa0, 0x16fdf,
-0x16fe2, 0x16fff,
-0x187f2, 0x187ff,
+0x16fe4, 0x16fff,
+0x187f8, 0x187ff,
 0x18af3, 0x1afff,
-0x1b11f, 0x1b16f,
+0x1b11f, 0x1b14f,
+0x1b153, 0x1b163,
+0x1b168, 0x1b16f,
 0x1b2fc, 0x1bbff,
 0x1bc6b, 0x1bc6f,
 0x1bc7d, 0x1bc7f,
@@ -10372,13 +10458,20 @@ CR_Cn[] = { 658,
 0x1e019, 0x1e01a,
 0x1e022, 0x1e022,
 0x1e025, 0x1e025,
-0x1e02b, 0x1e7ff,
+0x1e02b, 0x1e0ff,
+0x1e12d, 0x1e12f,
+0x1e13e, 0x1e13f,
+0x1e14a, 0x1e14d,
+0x1e150, 0x1e2bf,
+0x1e2fa, 0x1e2fe,
+0x1e300, 0x1e7ff,
 0x1e8c5, 0x1e8c6,
 0x1e8d7, 0x1e8ff,
-0x1e94b, 0x1e94f,
+0x1e94c, 0x1e94f,
 0x1e95a, 0x1e95d,
 0x1e960, 0x1ec70,
-0x1ecb5, 0x1edff,
+0x1ecb5, 0x1ed00,
+0x1ed3e, 0x1edff,
 0x1ee04, 0x1ee04,
 0x1ee20, 0x1ee20,
 0x1ee23, 0x1ee23,
@@ -10420,33 +10513,36 @@ CR_Cn[] = { 658,
 0x1f0d0, 0x1f0d0,
 0x1f0f6, 0x1f0ff,
 0x1f10d, 0x1f10f,
-0x1f16c, 0x1f16f,
+0x1f16d, 0x1f16f,
 0x1f1ad, 0x1f1e5,
 0x1f203, 0x1f20f,
 0x1f23c, 0x1f23f,
 0x1f249, 0x1f24f,
 0x1f252, 0x1f25f,
 0x1f266, 0x1f2ff,
-0x1f6d5, 0x1f6df,
+0x1f6d6, 0x1f6df,
 0x1f6ed, 0x1f6ef,
-0x1f6fa, 0x1f6ff,
+0x1f6fb, 0x1f6ff,
 0x1f774, 0x1f77f,
-0x1f7d9, 0x1f7ff,
+0x1f7d9, 0x1f7df,
+0x1f7ec, 0x1f7ff,
 0x1f80c, 0x1f80f,
 0x1f848, 0x1f84f,
 0x1f85a, 0x1f85f,
 0x1f888, 0x1f88f,
 0x1f8ae, 0x1f8ff,
-0x1f90c, 0x1f90f,
-0x1f93f, 0x1f93f,
-0x1f971, 0x1f972,
+0x1f90c, 0x1f90c,
+0x1f972, 0x1f972,
 0x1f977, 0x1f979,
-0x1f97b, 0x1f97b,
-0x1f9a3, 0x1f9af,
-0x1f9ba, 0x1f9bf,
-0x1f9c3, 0x1f9cf,
-0x1fa00, 0x1fa5f,
-0x1fa6e, 0x1ffff,
+0x1f9a3, 0x1f9a4,
+0x1f9ab, 0x1f9ad,
+0x1f9cb, 0x1f9cc,
+0x1fa54, 0x1fa5f,
+0x1fa6e, 0x1fa6f,
+0x1fa74, 0x1fa77,
+0x1fa7b, 0x1fa7f,
+0x1fa83, 0x1fa8f,
+0x1fa96, 0x1ffff,
 0x2a6d7, 0x2a6ff,
 0x2b735, 0x2b73f,
 0x2b81e, 0x2b81f,
@@ -10470,7 +10566,7 @@ CR_Co[] = { 3,
 
 /* PROPERTY: 'Common': Script */
 static const OnigCodePoint
-CR_Common[] = { 166,
+CR_Common[] = { 172,
 0x0000, 0x0040,
 0x005b, 0x0060,
 0x007b, 0x00a9,
@@ -10506,6 +10602,7 @@ CR_Common[] = { 166,
 0x1ce9, 0x1cec,
 0x1cee, 0x1cf3,
 0x1cf5, 0x1cf7,
+0x1cfa, 0x1cfa,
 0x2000, 0x200b,
 0x200e, 0x2064,
 0x2066, 0x2070,
@@ -10523,9 +10620,8 @@ CR_Common[] = { 166,
 0x2460, 0x27ff,
 0x2900, 0x2b73,
 0x2b76, 0x2b95,
-0x2b98, 0x2bc8,
-0x2bca, 0x2bfe,
-0x2e00, 0x2e4e,
+0x2b98, 0x2bff,
+0x2e00, 0x2e4f,
 0x2ff0, 0x2ffb,
 0x3000, 0x3004,
 0x3006, 0x3006,
@@ -10539,6 +10635,7 @@ CR_Common[] = { 166,
 0x31c0, 0x31e3,
 0x3220, 0x325f,
 0x327f, 0x32cf,
+0x32ff, 0x32ff,
 0x3358, 0x33ff,
 0x4dc0, 0x4dff,
 0xa700, 0xa721,
@@ -10567,6 +10664,7 @@ CR_Common[] = { 166,
 0x10190, 0x1019b,
 0x101d0, 0x101fc,
 0x102e1, 0x102fb,
+0x16fe2, 0x16fe3,
 0x1bca0, 0x1bca3,
 0x1d000, 0x1d0f5,
 0x1d100, 0x1d126,
@@ -10600,6 +10698,7 @@ CR_Common[] = { 166,
 0x1d6a8, 0x1d7cb,
 0x1d7ce, 0x1d7ff,
 0x1ec71, 0x1ecb4,
+0x1ed01, 0x1ed3d,
 0x1f000, 0x1f02b,
 0x1f030, 0x1f093,
 0x1f0a0, 0x1f0ae,
@@ -10607,7 +10706,7 @@ CR_Common[] = { 166,
 0x1f0c1, 0x1f0cf,
 0x1f0d1, 0x1f0f5,
 0x1f100, 0x1f10c,
-0x1f110, 0x1f16b,
+0x1f110, 0x1f16c,
 0x1f170, 0x1f1ac,
 0x1f1e6, 0x1f1ff,
 0x1f201, 0x1f202,
@@ -10615,26 +10714,29 @@ CR_Common[] = { 166,
 0x1f240, 0x1f248,
 0x1f250, 0x1f251,
 0x1f260, 0x1f265,
-0x1f300, 0x1f6d4,
+0x1f300, 0x1f6d5,
 0x1f6e0, 0x1f6ec,
-0x1f6f0, 0x1f6f9,
+0x1f6f0, 0x1f6fa,
 0x1f700, 0x1f773,
 0x1f780, 0x1f7d8,
+0x1f7e0, 0x1f7eb,
 0x1f800, 0x1f80b,
 0x1f810, 0x1f847,
 0x1f850, 0x1f859,
 0x1f860, 0x1f887,
 0x1f890, 0x1f8ad,
 0x1f900, 0x1f90b,
-0x1f910, 0x1f93e,
-0x1f940, 0x1f970,
+0x1f90d, 0x1f971,
 0x1f973, 0x1f976,
-0x1f97a, 0x1f97a,
-0x1f97c, 0x1f9a2,
-0x1f9b0, 0x1f9b9,
-0x1f9c0, 0x1f9c2,
-0x1f9d0, 0x1f9ff,
+0x1f97a, 0x1f9a2,
+0x1f9a5, 0x1f9aa,
+0x1f9ae, 0x1f9ca,
+0x1f9cd, 0x1fa53,
 0x1fa60, 0x1fa6d,
+0x1fa70, 0x1fa73,
+0x1fa78, 0x1fa7a,
+0x1fa80, 0x1fa82,
+0x1fa90, 0x1fa95,
 0xe0001, 0xe0001,
 0xe0020, 0xe007f,
 }; /* END of CR_Common */
@@ -10757,14 +10859,14 @@ CR_Deseret[] = { 1,
 static const OnigCodePoint
 CR_Devanagari[] = { 4,
 0x0900, 0x0950,
-0x0953, 0x0963,
+0x0955, 0x0963,
 0x0966, 0x097f,
 0xa8e0, 0xa8ff,
 }; /* END of CR_Devanagari */
 
 /* PROPERTY: 'Diacritic': Binary Property */
 static const OnigCodePoint
-CR_Diacritic[] = { 163,
+CR_Diacritic[] = { 171,
 0x005e, 0x005e,
 0x0060, 0x0060,
 0x00a8, 0x00a8,
@@ -10816,6 +10918,7 @@ CR_Diacritic[] = { 163,
 0x0dca, 0x0dca,
 0x0e47, 0x0e4c,
 0x0e4e, 0x0e4e,
+0x0eba, 0x0eba,
 0x0ec8, 0x0ecc,
 0x0f18, 0x0f19,
 0x0f35, 0x0f35,
@@ -10827,9 +10930,12 @@ CR_Diacritic[] = { 163,
 0x0fc6, 0x0fc6,
 0x1037, 0x1037,
 0x1039, 0x103a,
+0x1063, 0x1064,
+0x1069, 0x106d,
 0x1087, 0x108d,
 0x108f, 0x108f,
 0x109a, 0x109b,
+0x135d, 0x135f,
 0x17c9, 0x17d3,
 0x17dd, 0x17dd,
 0x1939, 0x193b,
@@ -10866,8 +10972,8 @@ CR_Diacritic[] = { 163,
 0xa67f, 0xa67f,
 0xa69c, 0xa69d,
 0xa6f0, 0xa6f1,
-0xa717, 0xa721,
-0xa788, 0xa788,
+0xa700, 0xa721,
+0xa788, 0xa78a,
 0xa7f8, 0xa7f9,
 0xa8c4, 0xa8c4,
 0xa8e0, 0xa8f1,
@@ -10911,6 +11017,7 @@ CR_Diacritic[] = { 163,
 0x116b6, 0x116b7,
 0x1172b, 0x1172b,
 0x11839, 0x1183a,
+0x119e0, 0x119e0,
 0x11a34, 0x11a34,
 0x11a47, 0x11a47,
 0x11a99, 0x11a99,
@@ -10919,12 +11026,15 @@ CR_Diacritic[] = { 163,
 0x11d44, 0x11d45,
 0x11d97, 0x11d97,
 0x16af0, 0x16af4,
+0x16b30, 0x16b36,
 0x16f8f, 0x16f9f,
 0x1d167, 0x1d169,
 0x1d16d, 0x1d172,
 0x1d17b, 0x1d182,
 0x1d185, 0x1d18b,
 0x1d1aa, 0x1d1ad,
+0x1e130, 0x1e136,
+0x1e2ec, 0x1e2ef,
 0x1e8d0, 0x1e8d6,
 0x1e944, 0x1e946,
 0x1e948, 0x1e94a,
@@ -10948,8 +11058,9 @@ CR_Duployan[] = { 5,
 
 /* PROPERTY: 'Egyptian_Hieroglyphs': Script */
 static const OnigCodePoint
-CR_Egyptian_Hieroglyphs[] = { 1,
+CR_Egyptian_Hieroglyphs[] = { 2,
 0x13000, 0x1342e,
+0x13430, 0x13438,
 }; /* END of CR_Egyptian_Hieroglyphs */
 
 /* PROPERTY: 'Elbasan': Script */
@@ -10958,9 +11069,15 @@ CR_Elbasan[] = { 1,
 0x10500, 0x10527,
 }; /* END of CR_Elbasan */
 
+/* PROPERTY: 'Elymaic': Script */
+static const OnigCodePoint
+CR_Elymaic[] = { 1,
+0x10fe0, 0x10ff6,
+}; /* END of CR_Elymaic */
+
 /* PROPERTY: 'Emoji': Emoji Property */
 static const OnigCodePoint
-CR_Emoji[] = { 147,
+CR_Emoji[] = { 151,
 0x0023, 0x0023,
 0x002a, 0x002a,
 0x0030, 0x0039,
@@ -11093,21 +11210,25 @@ CR_Emoji[] = { 147,
 0x1f5fa, 0x1f64f,
 0x1f680, 0x1f6c5,
 0x1f6cb, 0x1f6d2,
+0x1f6d5, 0x1f6d5,
 0x1f6e0, 0x1f6e5,
 0x1f6e9, 0x1f6e9,
 0x1f6eb, 0x1f6ec,
 0x1f6f0, 0x1f6f0,
-0x1f6f3, 0x1f6f9,
-0x1f910, 0x1f93a,
-0x1f93c, 0x1f93e,
-0x1f940, 0x1f945,
-0x1f947, 0x1f970,
+0x1f6f3, 0x1f6fa,
+0x1f7e0, 0x1f7eb,
+0x1f90d, 0x1f93a,
+0x1f93c, 0x1f945,
+0x1f947, 0x1f971,
 0x1f973, 0x1f976,
-0x1f97a, 0x1f97a,
-0x1f97c, 0x1f9a2,
-0x1f9b0, 0x1f9b9,
-0x1f9c0, 0x1f9c2,
-0x1f9d0, 0x1f9ff,
+0x1f97a, 0x1f9a2,
+0x1f9a5, 0x1f9aa,
+0x1f9ae, 0x1f9ca,
+0x1f9cd, 0x1f9ff,
+0x1fa70, 0x1fa73,
+0x1fa78, 0x1fa7a,
+0x1fa80, 0x1fa82,
+0x1fa90, 0x1fa95,
 }; /* END of CR_Emoji */
 
 /* PROPERTY: 'Emoji_Component': Emoji Property */
@@ -11133,7 +11254,7 @@ CR_Emoji_Modifier[] = { 1,
 
 /* PROPERTY: 'Emoji_Modifier_Base': Emoji Property */
 static const OnigCodePoint
-CR_Emoji_Modifier_Base[] = { 34,
+CR_Emoji_Modifier_Base[] = { 36,
 0x261d, 0x261d,
 0x26f9, 0x26f9,
 0x270a, 0x270d,
@@ -11143,12 +11264,12 @@ CR_Emoji_Modifier_Base[] = { 34,
 0x1f3ca, 0x1f3cc,
 0x1f442, 0x1f443,
 0x1f446, 0x1f450,
-0x1f466, 0x1f469,
-0x1f46e, 0x1f46e,
-0x1f470, 0x1f478,
+0x1f466, 0x1f478,
 0x1f47c, 0x1f47c,
 0x1f481, 0x1f483,
 0x1f485, 0x1f487,
+0x1f48f, 0x1f48f,
+0x1f491, 0x1f491,
 0x1f4aa, 0x1f4aa,
 0x1f574, 0x1f575,
 0x1f57a, 0x1f57a,
@@ -11160,19 +11281,21 @@ CR_Emoji_Modifier_Base[] = { 34,
 0x1f6b4, 0x1f6b6,
 0x1f6c0, 0x1f6c0,
 0x1f6cc, 0x1f6cc,
-0x1f918, 0x1f91c,
-0x1f91e, 0x1f91f,
+0x1f90f, 0x1f90f,
+0x1f918, 0x1f91f,
 0x1f926, 0x1f926,
 0x1f930, 0x1f939,
-0x1f93d, 0x1f93e,
+0x1f93c, 0x1f93e,
 0x1f9b5, 0x1f9b6,
 0x1f9b8, 0x1f9b9,
+0x1f9bb, 0x1f9bb,
+0x1f9cd, 0x1f9cf,
 0x1f9d1, 0x1f9dd,
 }; /* END of CR_Emoji_Modifier_Base */
 
 /* PROPERTY: 'Emoji_Presentation': Emoji Property */
 static const OnigCodePoint
-CR_Emoji_Presentation[] = { 77,
+CR_Emoji_Presentation[] = { 81,
 0x231a, 0x231b,
 0x23e9, 0x23ec,
 0x23f0, 0x23f0,
@@ -11238,18 +11361,22 @@ CR_Emoji_Presentation[] = { 77,
 0x1f680, 0x1f6c5,
 0x1f6cc, 0x1f6cc,
 0x1f6d0, 0x1f6d2,
+0x1f6d5, 0x1f6d5,
 0x1f6eb, 0x1f6ec,
-0x1f6f4, 0x1f6f9,
-0x1f910, 0x1f93a,
-0x1f93c, 0x1f93e,
-0x1f940, 0x1f945,
-0x1f947, 0x1f970,
+0x1f6f4, 0x1f6fa,
+0x1f7e0, 0x1f7eb,
+0x1f90d, 0x1f93a,
+0x1f93c, 0x1f945,
+0x1f947, 0x1f971,
 0x1f973, 0x1f976,
-0x1f97a, 0x1f97a,
-0x1f97c, 0x1f9a2,
-0x1f9b0, 0x1f9b9,
-0x1f9c0, 0x1f9c2,
-0x1f9d0, 0x1f9ff,
+0x1f97a, 0x1f9a2,
+0x1f9a5, 0x1f9aa,
+0x1f9ae, 0x1f9ca,
+0x1f9cd, 0x1f9ff,
+0x1fa70, 0x1fa73,
+0x1fa78, 0x1fa7a,
+0x1fa80, 0x1fa82,
+0x1fa90, 0x1fa95,
 }; /* END of CR_Emoji_Presentation */
 
 /* PROPERTY: 'Ethiopic': Script */
@@ -11373,7 +11500,7 @@ CR_Extended_Pictographic[] = { 77,
 
 /* PROPERTY: 'Extender': Binary Property */
 static const OnigCodePoint
-CR_Extender[] = { 29,
+CR_Extender[] = { 31,
 0x00b7, 0x00b7,
 0x02d0, 0x02d1,
 0x0640, 0x0640,
@@ -11402,6 +11529,8 @@ CR_Extender[] = { 29,
 0x11a98, 0x11a98,
 0x16b42, 0x16b43,
 0x16fe0, 0x16fe1,
+0x16fe3, 0x16fe3,
+0x1e13c, 0x1e13d,
 0x1e944, 0x1e946,
 }; /* END of CR_Extender */
 
@@ -11460,7 +11589,7 @@ CR_Grantha[] = { 15,
 
 /* PROPERTY: 'Grapheme_Base': Derived Property */
 static const OnigCodePoint
-CR_Grapheme_Base[] = { 806,
+CR_Grapheme_Base[] = { 819,
 0x0020, 0x007e,
 0x00a0, 0x00ac,
 0x00ae, 0x02ff,
@@ -11595,7 +11724,7 @@ CR_Grapheme_Base[] = { 806,
 0x0c58, 0x0c5a,
 0x0c60, 0x0c61,
 0x0c66, 0x0c6f,
-0x0c78, 0x0c80,
+0x0c77, 0x0c80,
 0x0c82, 0x0c8c,
 0x0c8e, 0x0c90,
 0x0c92, 0x0ca8,
@@ -11638,16 +11767,10 @@ CR_Grapheme_Base[] = { 806,
 0x0e4f, 0x0e5b,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb0,
+0x0ea7, 0x0eb0,
 0x0eb2, 0x0eb3,
 0x0ebd, 0x0ebd,
 0x0ec0, 0x0ec4,
@@ -11745,7 +11868,6 @@ CR_Grapheme_Base[] = { 806,
 0x1a90, 0x1a99,
 0x1aa0, 0x1aad,
 0x1b04, 0x1b33,
-0x1b35, 0x1b35,
 0x1b3b, 0x1b3b,
 0x1b3d, 0x1b41,
 0x1b43, 0x1b4b,
@@ -11770,6 +11892,7 @@ CR_Grapheme_Base[] = { 806,
 0x1ce9, 0x1cec,
 0x1cee, 0x1cf3,
 0x1cf5, 0x1cf7,
+0x1cfa, 0x1cfa,
 0x1d00, 0x1dbf,
 0x1e00, 0x1f15,
 0x1f18, 0x1f1d,
@@ -11799,9 +11922,7 @@ CR_Grapheme_Base[] = { 806,
 0x2440, 0x244a,
 0x2460, 0x2b73,
 0x2b76, 0x2b95,
-0x2b98, 0x2bc8,
-0x2bca, 0x2bfe,
-0x2c00, 0x2c2e,
+0x2b98, 0x2c2e,
 0x2c30, 0x2c5e,
 0x2c60, 0x2cee,
 0x2cf2, 0x2cf3,
@@ -11819,7 +11940,7 @@ CR_Grapheme_Base[] = { 806,
 0x2dc8, 0x2dce,
 0x2dd0, 0x2dd6,
 0x2dd8, 0x2dde,
-0x2e00, 0x2e4e,
+0x2e00, 0x2e4f,
 0x2e80, 0x2e99,
 0x2e9b, 0x2ef3,
 0x2f00, 0x2fd5,
@@ -11833,8 +11954,7 @@ CR_Grapheme_Base[] = { 806,
 0x3190, 0x31ba,
 0x31c0, 0x31e3,
 0x31f0, 0x321e,
-0x3220, 0x32fe,
-0x3300, 0x4db5,
+0x3220, 0x4db5,
 0x4dc0, 0x9fef,
 0xa000, 0xa48c,
 0xa490, 0xa4c6,
@@ -11844,7 +11964,8 @@ CR_Grapheme_Base[] = { 806,
 0xa67e, 0xa69d,
 0xa6a0, 0xa6ef,
 0xa6f2, 0xa6f7,
-0xa700, 0xa7b9,
+0xa700, 0xa7bf,
+0xa7c2, 0xa7c6,
 0xa7f7, 0xa801,
 0xa803, 0xa805,
 0xa807, 0xa80a,
@@ -11862,7 +11983,7 @@ CR_Grapheme_Base[] = { 806,
 0xa983, 0xa9b2,
 0xa9b4, 0xa9b5,
 0xa9ba, 0xa9bb,
-0xa9bd, 0xa9cd,
+0xa9be, 0xa9cd,
 0xa9cf, 0xa9d9,
 0xa9de, 0xa9e4,
 0xa9e6, 0xa9fe,
@@ -11887,7 +12008,7 @@ CR_Grapheme_Base[] = { 806,
 0xab11, 0xab16,
 0xab20, 0xab26,
 0xab28, 0xab2e,
-0xab30, 0xab65,
+0xab30, 0xab67,
 0xab70, 0xabe4,
 0xabe6, 0xabe7,
 0xabe9, 0xabec,
@@ -11996,6 +12117,7 @@ CR_Grapheme_Base[] = { 806,
 0x10f00, 0x10f27,
 0x10f30, 0x10f45,
 0x10f51, 0x10f59,
+0x10fe0, 0x10ff6,
 0x11000, 0x11000,
 0x11002, 0x11037,
 0x11047, 0x1104d,
@@ -12049,6 +12171,7 @@ CR_Grapheme_Base[] = { 806,
 0x11447, 0x11459,
 0x1145b, 0x1145b,
 0x1145d, 0x1145d,
+0x1145f, 0x1145f,
 0x11480, 0x114af,
 0x114b1, 0x114b2,
 0x114b9, 0x114b9,
@@ -12072,6 +12195,7 @@ CR_Grapheme_Base[] = { 806,
 0x116ac, 0x116ac,
 0x116ae, 0x116af,
 0x116b6, 0x116b6,
+0x116b8, 0x116b8,
 0x116c0, 0x116c9,
 0x11700, 0x1171a,
 0x11720, 0x11721,
@@ -12082,14 +12206,17 @@ CR_Grapheme_Base[] = { 806,
 0x1183b, 0x1183b,
 0x118a0, 0x118f2,
 0x118ff, 0x118ff,
+0x119a0, 0x119a7,
+0x119aa, 0x119d3,
+0x119dc, 0x119df,
+0x119e1, 0x119e4,
 0x11a00, 0x11a00,
 0x11a0b, 0x11a32,
 0x11a39, 0x11a3a,
 0x11a3f, 0x11a46,
 0x11a50, 0x11a50,
 0x11a57, 0x11a58,
-0x11a5c, 0x11a83,
-0x11a86, 0x11a89,
+0x11a5c, 0x11a89,
 0x11a97, 0x11a97,
 0x11a9a, 0x11aa2,
 0x11ac0, 0x11af8,
@@ -12116,7 +12243,8 @@ CR_Grapheme_Base[] = { 806,
 0x11da0, 0x11da9,
 0x11ee0, 0x11ef2,
 0x11ef5, 0x11ef8,
-0x12000, 0x12399,
+0x11fc0, 0x11ff1,
+0x11fff, 0x12399,
 0x12400, 0x1246e,
 0x12470, 0x12474,
 0x12480, 0x12543,
@@ -12135,13 +12263,15 @@ CR_Grapheme_Base[] = { 806,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16e40, 0x16e9a,
-0x16f00, 0x16f44,
-0x16f50, 0x16f7e,
+0x16f00, 0x16f4a,
+0x16f50, 0x16f87,
 0x16f93, 0x16f9f,
-0x16fe0, 0x16fe1,
-0x17000, 0x187f1,
+0x16fe0, 0x16fe3,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b000, 0x1b11e,
+0x1b150, 0x1b152,
+0x1b164, 0x1b167,
 0x1b170, 0x1b2fb,
 0x1bc00, 0x1bc6a,
 0x1bc70, 0x1bc7c,
@@ -12187,12 +12317,21 @@ CR_Grapheme_Base[] = { 806,
 0x1da6d, 0x1da74,
 0x1da76, 0x1da83,
 0x1da85, 0x1da8b,
+0x1e100, 0x1e12c,
+0x1e137, 0x1e13d,
+0x1e140, 0x1e149,
+0x1e14e, 0x1e14f,
+0x1e2c0, 0x1e2eb,
+0x1e2f0, 0x1e2f9,
+0x1e2ff, 0x1e2ff,
 0x1e800, 0x1e8c4,
 0x1e8c7, 0x1e8cf,
 0x1e900, 0x1e943,
+0x1e94b, 0x1e94b,
 0x1e950, 0x1e959,
 0x1e95e, 0x1e95f,
 0x1ec71, 0x1ecb4,
+0x1ed01, 0x1ed3d,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
 0x1ee21, 0x1ee22,
@@ -12234,33 +12373,36 @@ CR_Grapheme_Base[] = { 806,
 0x1f0c1, 0x1f0cf,
 0x1f0d1, 0x1f0f5,
 0x1f100, 0x1f10c,
-0x1f110, 0x1f16b,
+0x1f110, 0x1f16c,
 0x1f170, 0x1f1ac,
 0x1f1e6, 0x1f202,
 0x1f210, 0x1f23b,
 0x1f240, 0x1f248,
 0x1f250, 0x1f251,
 0x1f260, 0x1f265,
-0x1f300, 0x1f6d4,
+0x1f300, 0x1f6d5,
 0x1f6e0, 0x1f6ec,
-0x1f6f0, 0x1f6f9,
+0x1f6f0, 0x1f6fa,
 0x1f700, 0x1f773,
 0x1f780, 0x1f7d8,
+0x1f7e0, 0x1f7eb,
 0x1f800, 0x1f80b,
 0x1f810, 0x1f847,
 0x1f850, 0x1f859,
 0x1f860, 0x1f887,
 0x1f890, 0x1f8ad,
 0x1f900, 0x1f90b,
-0x1f910, 0x1f93e,
-0x1f940, 0x1f970,
+0x1f90d, 0x1f971,
 0x1f973, 0x1f976,
-0x1f97a, 0x1f97a,
-0x1f97c, 0x1f9a2,
-0x1f9b0, 0x1f9b9,
-0x1f9c0, 0x1f9c2,
-0x1f9d0, 0x1f9ff,
+0x1f97a, 0x1f9a2,
+0x1f9a5, 0x1f9aa,
+0x1f9ae, 0x1f9ca,
+0x1f9cd, 0x1fa53,
 0x1fa60, 0x1fa6d,
+0x1fa70, 0x1fa73,
+0x1fa78, 0x1fa7a,
+0x1fa80, 0x1fa82,
+0x1fa90, 0x1fa95,
 0x20000, 0x2a6d6,
 0x2a700, 0x2b734,
 0x2b740, 0x2b81d,
@@ -12271,7 +12413,7 @@ CR_Grapheme_Base[] = { 806,
 
 /* PROPERTY: 'Grapheme_Extend': Derived Property */
 static const OnigCodePoint
-CR_Grapheme_Extend[] = { 331,
+CR_Grapheme_Extend[] = { 335,
 0x0300, 0x036f,
 0x0483, 0x0489,
 0x0591, 0x05bd,
@@ -12370,8 +12512,7 @@ CR_Grapheme_Extend[] = { 331,
 0x0e34, 0x0e3a,
 0x0e47, 0x0e4e,
 0x0eb1, 0x0eb1,
-0x0eb4, 0x0eb9,
-0x0ebb, 0x0ebc,
+0x0eb4, 0x0ebc,
 0x0ec8, 0x0ecd,
 0x0f18, 0x0f19,
 0x0f35, 0x0f35,
@@ -12422,8 +12563,7 @@ CR_Grapheme_Extend[] = { 331,
 0x1a7f, 0x1a7f,
 0x1ab0, 0x1abe,
 0x1b00, 0x1b03,
-0x1b34, 0x1b34,
-0x1b36, 0x1b3a,
+0x1b34, 0x1b3a,
 0x1b3c, 0x1b3c,
 0x1b42, 0x1b42,
 0x1b6b, 0x1b73,
@@ -12468,7 +12608,7 @@ CR_Grapheme_Extend[] = { 331,
 0xa980, 0xa982,
 0xa9b3, 0xa9b3,
 0xa9b6, 0xa9b9,
-0xa9bc, 0xa9bc,
+0xa9bc, 0xa9bd,
 0xa9e5, 0xa9e5,
 0xaa29, 0xaa2e,
 0xaa31, 0xaa32,
@@ -12553,6 +12693,9 @@ CR_Grapheme_Extend[] = { 331,
 0x11727, 0x1172b,
 0x1182f, 0x11837,
 0x11839, 0x1183a,
+0x119d4, 0x119d7,
+0x119da, 0x119db,
+0x119e0, 0x119e0,
 0x11a01, 0x11a0a,
 0x11a33, 0x11a38,
 0x11a3b, 0x11a3e,
@@ -12579,6 +12722,7 @@ CR_Grapheme_Extend[] = { 331,
 0x11ef3, 0x11ef4,
 0x16af0, 0x16af4,
 0x16b30, 0x16b36,
+0x16f4f, 0x16f4f,
 0x16f8f, 0x16f92,
 0x1bc9d, 0x1bc9e,
 0x1d165, 0x1d165,
@@ -12599,6 +12743,8 @@ CR_Grapheme_Extend[] = { 331,
 0x1e01b, 0x1e021,
 0x1e023, 0x1e024,
 0x1e026, 0x1e02a,
+0x1e130, 0x1e136,
+0x1e2ec, 0x1e2ef,
 0x1e8d0, 0x1e8d6,
 0x1e944, 0x1e94a,
 0xe0020, 0xe007f,
@@ -12607,7 +12753,7 @@ CR_Grapheme_Extend[] = { 331,
 
 /* PROPERTY: 'Grapheme_Link': Derived Property */
 static const OnigCodePoint
-CR_Grapheme_Link[] = { 50,
+CR_Grapheme_Link[] = { 52,
 0x094d, 0x094d,
 0x09cd, 0x09cd,
 0x0a4d, 0x0a4d,
@@ -12620,6 +12766,7 @@ CR_Grapheme_Link[] = { 50,
 0x0d4d, 0x0d4d,
 0x0dca, 0x0dca,
 0x0e3a, 0x0e3a,
+0x0eba, 0x0eba,
 0x0f84, 0x0f84,
 0x1039, 0x103a,
 0x1714, 0x1714,
@@ -12652,6 +12799,7 @@ CR_Grapheme_Link[] = { 50,
 0x116b6, 0x116b6,
 0x1172b, 0x1172b,
 0x11839, 0x11839,
+0x119e0, 0x119e0,
 0x11a34, 0x11a34,
 0x11a47, 0x11a47,
 0x11a99, 0x11a99,
@@ -12841,10 +12989,11 @@ CR_Hex_Digit[] = { 6,
 
 /* PROPERTY: 'Hiragana': Script */
 static const OnigCodePoint
-CR_Hiragana[] = { 4,
+CR_Hiragana[] = { 5,
 0x3041, 0x3096,
 0x309d, 0x309f,
 0x1b001, 0x1b11e,
+0x1b150, 0x1b152,
 0x1f200, 0x1f200,
 }; /* END of CR_Hiragana */
 
@@ -12878,7 +13027,7 @@ CR_IDS_Trinary_Operator[] = { 1,
 
 /* PROPERTY: 'ID_Continue': Derived Property */
 static const OnigCodePoint
-CR_ID_Continue[] = { 707,
+CR_ID_Continue[] = { 713,
 0x0030, 0x0039,
 0x0041, 0x005a,
 0x005f, 0x005f,
@@ -13064,17 +13213,10 @@ CR_ID_Continue[] = { 707,
 0x0e50, 0x0e59,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb9,
-0x0ebb, 0x0ebd,
+0x0ea7, 0x0ebd,
 0x0ec0, 0x0ec4,
 0x0ec6, 0x0ec6,
 0x0ec8, 0x0ecd,
@@ -13166,7 +13308,7 @@ CR_ID_Continue[] = { 707,
 0x1c90, 0x1cba,
 0x1cbd, 0x1cbf,
 0x1cd0, 0x1cd2,
-0x1cd4, 0x1cf9,
+0x1cd4, 0x1cfa,
 0x1d00, 0x1df9,
 0x1dfb, 0x1f15,
 0x1f18, 0x1f1d,
@@ -13250,7 +13392,8 @@ CR_ID_Continue[] = { 707,
 0xa67f, 0xa6f1,
 0xa717, 0xa71f,
 0xa722, 0xa788,
-0xa78b, 0xa7b9,
+0xa78b, 0xa7bf,
+0xa7c2, 0xa7c6,
 0xa7f7, 0xa827,
 0xa840, 0xa873,
 0xa880, 0xa8c5,
@@ -13277,7 +13420,7 @@ CR_ID_Continue[] = { 707,
 0xab20, 0xab26,
 0xab28, 0xab2e,
 0xab30, 0xab5a,
-0xab5c, 0xab65,
+0xab5c, 0xab67,
 0xab70, 0xabea,
 0xabec, 0xabed,
 0xabf0, 0xabf9,
@@ -13379,6 +13522,7 @@ CR_ID_Continue[] = { 707,
 0x10f00, 0x10f1c,
 0x10f27, 0x10f27,
 0x10f30, 0x10f50,
+0x10fe0, 0x10ff6,
 0x11000, 0x11046,
 0x11066, 0x1106f,
 0x1107f, 0x110ba,
@@ -13420,7 +13564,7 @@ CR_ID_Continue[] = { 707,
 0x11370, 0x11374,
 0x11400, 0x1144a,
 0x11450, 0x11459,
-0x1145e, 0x1145e,
+0x1145e, 0x1145f,
 0x11480, 0x114c5,
 0x114c7, 0x114c7,
 0x114d0, 0x114d9,
@@ -13430,7 +13574,7 @@ CR_ID_Continue[] = { 707,
 0x11600, 0x11640,
 0x11644, 0x11644,
 0x11650, 0x11659,
-0x11680, 0x116b7,
+0x11680, 0x116b8,
 0x116c0, 0x116c9,
 0x11700, 0x1171a,
 0x1171d, 0x1172b,
@@ -13438,10 +13582,13 @@ CR_ID_Continue[] = { 707,
 0x11800, 0x1183a,
 0x118a0, 0x118e9,
 0x118ff, 0x118ff,
+0x119a0, 0x119a7,
+0x119aa, 0x119d7,
+0x119da, 0x119e1,
+0x119e3, 0x119e4,
 0x11a00, 0x11a3e,
 0x11a47, 0x11a47,
-0x11a50, 0x11a83,
-0x11a86, 0x11a99,
+0x11a50, 0x11a99,
 0x11a9d, 0x11a9d,
 0x11ac0, 0x11af8,
 0x11c00, 0x11c08,
@@ -13481,13 +13628,16 @@ CR_ID_Continue[] = { 707,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16e40, 0x16e7f,
-0x16f00, 0x16f44,
-0x16f50, 0x16f7e,
+0x16f00, 0x16f4a,
+0x16f4f, 0x16f87,
 0x16f8f, 0x16f9f,
 0x16fe0, 0x16fe1,
-0x17000, 0x187f1,
+0x16fe3, 0x16fe3,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b000, 0x1b11e,
+0x1b150, 0x1b152,
+0x1b164, 0x1b167,
 0x1b170, 0x1b2fb,
 0x1bc00, 0x1bc6a,
 0x1bc70, 0x1bc7c,
@@ -13542,9 +13692,14 @@ CR_ID_Continue[] = { 707,
 0x1e01b, 0x1e021,
 0x1e023, 0x1e024,
 0x1e026, 0x1e02a,
+0x1e100, 0x1e12c,
+0x1e130, 0x1e13d,
+0x1e140, 0x1e149,
+0x1e14e, 0x1e14e,
+0x1e2c0, 0x1e2f9,
 0x1e800, 0x1e8c4,
 0x1e8d0, 0x1e8d6,
-0x1e900, 0x1e94a,
+0x1e900, 0x1e94b,
 0x1e950, 0x1e959,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
@@ -13590,7 +13745,7 @@ CR_ID_Continue[] = { 707,
 
 /* PROPERTY: 'ID_Start': Derived Property */
 static const OnigCodePoint
-CR_ID_Start[] = { 599,
+CR_ID_Start[] = { 609,
 0x0041, 0x005a,
 0x0061, 0x007a,
 0x00aa, 0x00aa,
@@ -13735,16 +13890,10 @@ CR_ID_Start[] = { 599,
 0x0e40, 0x0e46,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb0,
+0x0ea7, 0x0eb0,
 0x0eb2, 0x0eb3,
 0x0ebd, 0x0ebd,
 0x0ec0, 0x0ec4,
@@ -13824,8 +13973,9 @@ CR_ID_Start[] = { 599,
 0x1c90, 0x1cba,
 0x1cbd, 0x1cbf,
 0x1ce9, 0x1cec,
-0x1cee, 0x1cf1,
+0x1cee, 0x1cf3,
 0x1cf5, 0x1cf6,
+0x1cfa, 0x1cfa,
 0x1d00, 0x1dbf,
 0x1e00, 0x1f15,
 0x1f18, 0x1f1d,
@@ -13905,7 +14055,8 @@ CR_ID_Start[] = { 599,
 0xa6a0, 0xa6ef,
 0xa717, 0xa71f,
 0xa722, 0xa788,
-0xa78b, 0xa7b9,
+0xa78b, 0xa7bf,
+0xa7c2, 0xa7c6,
 0xa7f7, 0xa801,
 0xa803, 0xa805,
 0xa807, 0xa80a,
@@ -13943,7 +14094,7 @@ CR_ID_Start[] = { 599,
 0xab20, 0xab26,
 0xab28, 0xab2e,
 0xab30, 0xab5a,
-0xab5c, 0xab65,
+0xab5c, 0xab67,
 0xab70, 0xabe2,
 0xac00, 0xd7a3,
 0xd7b0, 0xd7c6,
@@ -14031,6 +14182,7 @@ CR_ID_Start[] = { 599,
 0x10f00, 0x10f1c,
 0x10f27, 0x10f27,
 0x10f30, 0x10f45,
+0x10fe0, 0x10ff6,
 0x11003, 0x11037,
 0x11083, 0x110af,
 0x110d0, 0x110e8,
@@ -14061,6 +14213,7 @@ CR_ID_Start[] = { 599,
 0x1135d, 0x11361,
 0x11400, 0x11434,
 0x11447, 0x1144a,
+0x1145f, 0x1145f,
 0x11480, 0x114af,
 0x114c4, 0x114c5,
 0x114c7, 0x114c7,
@@ -14069,16 +14222,20 @@ CR_ID_Start[] = { 599,
 0x11600, 0x1162f,
 0x11644, 0x11644,
 0x11680, 0x116aa,
+0x116b8, 0x116b8,
 0x11700, 0x1171a,
 0x11800, 0x1182b,
 0x118a0, 0x118df,
 0x118ff, 0x118ff,
+0x119a0, 0x119a7,
+0x119aa, 0x119d0,
+0x119e1, 0x119e1,
+0x119e3, 0x119e3,
 0x11a00, 0x11a00,
 0x11a0b, 0x11a32,
 0x11a3a, 0x11a3a,
 0x11a50, 0x11a50,
-0x11a5c, 0x11a83,
-0x11a86, 0x11a89,
+0x11a5c, 0x11a89,
 0x11a9d, 0x11a9d,
 0x11ac0, 0x11af8,
 0x11c00, 0x11c08,
@@ -14107,13 +14264,16 @@ CR_ID_Start[] = { 599,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16e40, 0x16e7f,
-0x16f00, 0x16f44,
+0x16f00, 0x16f4a,
 0x16f50, 0x16f50,
 0x16f93, 0x16f9f,
 0x16fe0, 0x16fe1,
-0x17000, 0x187f1,
+0x16fe3, 0x16fe3,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b000, 0x1b11e,
+0x1b150, 0x1b152,
+0x1b164, 0x1b167,
 0x1b170, 0x1b2fb,
 0x1bc00, 0x1bc6a,
 0x1bc70, 0x1bc7c,
@@ -14149,8 +14309,13 @@ CR_ID_Start[] = { 599,
 0x1d78a, 0x1d7a8,
 0x1d7aa, 0x1d7c2,
 0x1d7c4, 0x1d7cb,
+0x1e100, 0x1e12c,
+0x1e137, 0x1e13d,
+0x1e14e, 0x1e14e,
+0x1e2c0, 0x1e2eb,
 0x1e800, 0x1e8c4,
 0x1e900, 0x1e943,
+0x1e94b, 0x1e94b,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
 0x1ee21, 0x1ee22,
@@ -14202,7 +14367,7 @@ CR_Ideographic[] = { 16,
 0x4e00, 0x9fef,
 0xf900, 0xfa6d,
 0xfa70, 0xfad9,
-0x17000, 0x187f1,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b170, 0x1b2fb,
 0x20000, 0x2a6d6,
@@ -14227,7 +14392,7 @@ CR_Inherited[] = { 28,
 0x0485, 0x0486,
 0x064b, 0x0655,
 0x0670, 0x0670,
-0x0951, 0x0952,
+0x0951, 0x0954,
 0x1ab0, 0x1abe,
 0x1cd0, 0x1cd2,
 0x1cd4, 0x1ce0,
@@ -14308,7 +14473,7 @@ CR_Kannada[] = { 13,
 
 /* PROPERTY: 'Katakana': Script */
 static const OnigCodePoint
-CR_Katakana[] = { 8,
+CR_Katakana[] = { 9,
 0x30a1, 0x30fa,
 0x30fd, 0x30ff,
 0x31f0, 0x31ff,
@@ -14317,6 +14482,7 @@ CR_Katakana[] = { 8,
 0xff66, 0xff6f,
 0xff71, 0xff9d,
 0x1b000, 0x1b000,
+0x1b164, 0x1b167,
 }; /* END of CR_Katakana */
 
 /* PROPERTY: 'Kayah_Li': Script */
@@ -14364,7 +14530,7 @@ CR_Khudawadi[] = { 2,
 
 /* PROPERTY: 'L': Major Category */
 static const OnigCodePoint
-CR_L[] = { 599,
+CR_L[] = { 609,
 0x0041, 0x005a,
 0x0061, 0x007a,
 0x00aa, 0x00aa,
@@ -14509,16 +14675,10 @@ CR_L[] = { 599,
 0x0e40, 0x0e46,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb0,
+0x0ea7, 0x0eb0,
 0x0eb2, 0x0eb3,
 0x0ebd, 0x0ebd,
 0x0ec0, 0x0ec4,
@@ -14599,8 +14759,9 @@ CR_L[] = { 599,
 0x1c90, 0x1cba,
 0x1cbd, 0x1cbf,
 0x1ce9, 0x1cec,
-0x1cee, 0x1cf1,
+0x1cee, 0x1cf3,
 0x1cf5, 0x1cf6,
+0x1cfa, 0x1cfa,
 0x1d00, 0x1dbf,
 0x1e00, 0x1f15,
 0x1f18, 0x1f1d,
@@ -14681,7 +14842,8 @@ CR_L[] = { 599,
 0xa6a0, 0xa6e5,
 0xa717, 0xa71f,
 0xa722, 0xa788,
-0xa78b, 0xa7b9,
+0xa78b, 0xa7bf,
+0xa7c2, 0xa7c6,
 0xa7f7, 0xa801,
 0xa803, 0xa805,
 0xa807, 0xa80a,
@@ -14719,7 +14881,7 @@ CR_L[] = { 599,
 0xab20, 0xab26,
 0xab28, 0xab2e,
 0xab30, 0xab5a,
-0xab5c, 0xab65,
+0xab5c, 0xab67,
 0xab70, 0xabe2,
 0xac00, 0xd7a3,
 0xd7b0, 0xd7c6,
@@ -14806,6 +14968,7 @@ CR_L[] = { 599,
 0x10f00, 0x10f1c,
 0x10f27, 0x10f27,
 0x10f30, 0x10f45,
+0x10fe0, 0x10ff6,
 0x11003, 0x11037,
 0x11083, 0x110af,
 0x110d0, 0x110e8,
@@ -14836,6 +14999,7 @@ CR_L[] = { 599,
 0x1135d, 0x11361,
 0x11400, 0x11434,
 0x11447, 0x1144a,
+0x1145f, 0x1145f,
 0x11480, 0x114af,
 0x114c4, 0x114c5,
 0x114c7, 0x114c7,
@@ -14844,16 +15008,20 @@ CR_L[] = { 599,
 0x11600, 0x1162f,
 0x11644, 0x11644,
 0x11680, 0x116aa,
+0x116b8, 0x116b8,
 0x11700, 0x1171a,
 0x11800, 0x1182b,
 0x118a0, 0x118df,
 0x118ff, 0x118ff,
+0x119a0, 0x119a7,
+0x119aa, 0x119d0,
+0x119e1, 0x119e1,
+0x119e3, 0x119e3,
 0x11a00, 0x11a00,
 0x11a0b, 0x11a32,
 0x11a3a, 0x11a3a,
 0x11a50, 0x11a50,
-0x11a5c, 0x11a83,
-0x11a86, 0x11a89,
+0x11a5c, 0x11a89,
 0x11a9d, 0x11a9d,
 0x11ac0, 0x11af8,
 0x11c00, 0x11c08,
@@ -14881,13 +15049,16 @@ CR_L[] = { 599,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16e40, 0x16e7f,
-0x16f00, 0x16f44,
+0x16f00, 0x16f4a,
 0x16f50, 0x16f50,
 0x16f93, 0x16f9f,
 0x16fe0, 0x16fe1,
-0x17000, 0x187f1,
+0x16fe3, 0x16fe3,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b000, 0x1b11e,
+0x1b150, 0x1b152,
+0x1b164, 0x1b167,
 0x1b170, 0x1b2fb,
 0x1bc00, 0x1bc6a,
 0x1bc70, 0x1bc7c,
@@ -14923,8 +15094,13 @@ CR_L[] = { 599,
 0x1d78a, 0x1d7a8,
 0x1d7aa, 0x1d7c2,
 0x1d7c4, 0x1d7cb,
+0x1e100, 0x1e12c,
+0x1e137, 0x1e13d,
+0x1e14e, 0x1e14e,
+0x1e2c0, 0x1e2eb,
 0x1e800, 0x1e8c4,
 0x1e900, 0x1e943,
+0x1e94b, 0x1e94b,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
 0x1ee21, 0x1ee22,
@@ -14968,7 +15144,7 @@ CR_L[] = { 599,
 
 /* PROPERTY: 'LC': General Category */
 static const OnigCodePoint
-CR_LC[] = { 130,
+CR_LC[] = { 131,
 0x0041, 0x005a,
 0x0061, 0x007a,
 0x00b5, 0x00b5,
@@ -15052,10 +15228,11 @@ CR_LC[] = { 130,
 0xa722, 0xa76f,
 0xa771, 0xa787,
 0xa78b, 0xa78e,
-0xa790, 0xa7b9,
+0xa790, 0xa7bf,
+0xa7c2, 0xa7c6,
 0xa7fa, 0xa7fa,
 0xab30, 0xab5a,
-0xab60, 0xab65,
+0xab60, 0xab67,
 0xab70, 0xabbf,
 0xfb00, 0xfb06,
 0xfb13, 0xfb17,
@@ -15103,20 +15280,13 @@ CR_LC[] = { 130,
 
 /* PROPERTY: 'Lao': Script */
 static const OnigCodePoint
-CR_Lao[] = { 18,
+CR_Lao[] = { 11,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb9,
-0x0ebb, 0x0ebd,
+0x0ea7, 0x0ebd,
 0x0ec0, 0x0ec4,
 0x0ec6, 0x0ec6,
 0x0ec8, 0x0ecd,
@@ -15126,7 +15296,7 @@ CR_Lao[] = { 18,
 
 /* PROPERTY: 'Latin': Script */
 static const OnigCodePoint
-CR_Latin[] = { 30,
+CR_Latin[] = { 32,
 0x0041, 0x005a,
 0x0061, 0x007a,
 0x00aa, 0x00aa,
@@ -15150,10 +15320,12 @@ CR_Latin[] = { 30,
 0x2160, 0x2188,
 0x2c60, 0x2c7f,
 0xa722, 0xa787,
-0xa78b, 0xa7b9,
+0xa78b, 0xa7bf,
+0xa7c2, 0xa7c6,
 0xa7f7, 0xa7ff,
 0xab30, 0xab5a,
 0xab5c, 0xab64,
+0xab66, 0xab67,
 0xfb00, 0xfb06,
 0xff21, 0xff3a,
 0xff41, 0xff5a,
@@ -15205,7 +15377,7 @@ CR_Lisu[] = { 1,
 
 /* PROPERTY: 'Ll': General Category */
 static const OnigCodePoint
-CR_Ll[] = { 638,
+CR_Ll[] = { 642,
 0x0061, 0x007a,
 0x00b5, 0x00b5,
 0x00df, 0x00f6,
@@ -15803,9 +15975,13 @@ CR_Ll[] = { 638,
 0xa7b5, 0xa7b5,
 0xa7b7, 0xa7b7,
 0xa7b9, 0xa7b9,
+0xa7bb, 0xa7bb,
+0xa7bd, 0xa7bd,
+0xa7bf, 0xa7bf,
+0xa7c3, 0xa7c3,
 0xa7fa, 0xa7fa,
 0xab30, 0xab5a,
-0xab60, 0xab65,
+0xab60, 0xab67,
 0xab70, 0xabbf,
 0xfb00, 0xfb06,
 0xfb13, 0xfb17,
@@ -15848,7 +16024,7 @@ CR_Ll[] = { 638,
 
 /* PROPERTY: 'Lm': General Category */
 static const OnigCodePoint
-CR_Lm[] = { 57,
+CR_Lm[] = { 60,
 0x02b0, 0x02c1,
 0x02c6, 0x02d1,
 0x02e0, 0x02e4,
@@ -15906,11 +16082,14 @@ CR_Lm[] = { 57,
 0x16b40, 0x16b43,
 0x16f93, 0x16f9f,
 0x16fe0, 0x16fe1,
+0x16fe3, 0x16fe3,
+0x1e137, 0x1e13d,
+0x1e94b, 0x1e94b,
 }; /* END of CR_Lm */
 
 /* PROPERTY: 'Lo': General Category */
 static const OnigCodePoint
-CR_Lo[] = { 470,
+CR_Lo[] = { 476,
 0x00aa, 0x00aa,
 0x00ba, 0x00ba,
 0x01bb, 0x01bb,
@@ -16029,16 +16208,10 @@ CR_Lo[] = { 470,
 0x0e40, 0x0e45,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb0,
+0x0ea7, 0x0eb0,
 0x0eb2, 0x0eb3,
 0x0ebd, 0x0ebd,
 0x0ec0, 0x0ec4,
@@ -16108,8 +16281,9 @@ CR_Lo[] = { 470,
 0x1c4d, 0x1c4f,
 0x1c5a, 0x1c77,
 0x1ce9, 0x1cec,
-0x1cee, 0x1cf1,
+0x1cee, 0x1cf3,
 0x1cf5, 0x1cf6,
+0x1cfa, 0x1cfa,
 0x2135, 0x2138,
 0x2d30, 0x2d67,
 0x2d80, 0x2d96,
@@ -16259,6 +16433,7 @@ CR_Lo[] = { 470,
 0x10f00, 0x10f1c,
 0x10f27, 0x10f27,
 0x10f30, 0x10f45,
+0x10fe0, 0x10ff6,
 0x11003, 0x11037,
 0x11083, 0x110af,
 0x110d0, 0x110e8,
@@ -16289,6 +16464,7 @@ CR_Lo[] = { 470,
 0x1135d, 0x11361,
 0x11400, 0x11434,
 0x11447, 0x1144a,
+0x1145f, 0x1145f,
 0x11480, 0x114af,
 0x114c4, 0x114c5,
 0x114c7, 0x114c7,
@@ -16297,15 +16473,19 @@ CR_Lo[] = { 470,
 0x11600, 0x1162f,
 0x11644, 0x11644,
 0x11680, 0x116aa,
+0x116b8, 0x116b8,
 0x11700, 0x1171a,
 0x11800, 0x1182b,
 0x118ff, 0x118ff,
+0x119a0, 0x119a7,
+0x119aa, 0x119d0,
+0x119e1, 0x119e1,
+0x119e3, 0x119e3,
 0x11a00, 0x11a00,
 0x11a0b, 0x11a32,
 0x11a3a, 0x11a3a,
 0x11a50, 0x11a50,
-0x11a5c, 0x11a83,
-0x11a86, 0x11a89,
+0x11a5c, 0x11a89,
 0x11a9d, 0x11a9d,
 0x11ac0, 0x11af8,
 0x11c00, 0x11c08,
@@ -16331,16 +16511,21 @@ CR_Lo[] = { 470,
 0x16b00, 0x16b2f,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
-0x16f00, 0x16f44,
+0x16f00, 0x16f4a,
 0x16f50, 0x16f50,
-0x17000, 0x187f1,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b000, 0x1b11e,
+0x1b150, 0x1b152,
+0x1b164, 0x1b167,
 0x1b170, 0x1b2fb,
 0x1bc00, 0x1bc6a,
 0x1bc70, 0x1bc7c,
 0x1bc80, 0x1bc88,
 0x1bc90, 0x1bc99,
+0x1e100, 0x1e12c,
+0x1e14e, 0x1e14e,
+0x1e2c0, 0x1e2eb,
 0x1e800, 0x1e8c4,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
@@ -16415,7 +16600,7 @@ CR_Lt[] = { 10,
 
 /* PROPERTY: 'Lu': General Category */
 static const OnigCodePoint
-CR_Lu[] = { 631,
+CR_Lu[] = { 636,
 0x0041, 0x005a,
 0x00c0, 0x00d6,
 0x00d8, 0x00de,
@@ -17009,6 +17194,11 @@ CR_Lu[] = { 631,
 0xa7b0, 0xa7b4,
 0xa7b6, 0xa7b6,
 0xa7b8, 0xa7b8,
+0xa7ba, 0xa7ba,
+0xa7bc, 0xa7bc,
+0xa7be, 0xa7be,
+0xa7c2, 0xa7c2,
+0xa7c4, 0xa7c6,
 0xff21, 0xff3a,
 0x10400, 0x10427,
 0x104b0, 0x104d3,
@@ -17064,7 +17254,7 @@ CR_Lydian[] = { 2,
 
 /* PROPERTY: 'M': Major Category */
 static const OnigCodePoint
-CR_M[] = { 275,
+CR_M[] = { 280,
 0x0300, 0x036f,
 0x0483, 0x0489,
 0x0591, 0x05bd,
@@ -17160,8 +17350,7 @@ CR_M[] = { 275,
 0x0e34, 0x0e3a,
 0x0e47, 0x0e4e,
 0x0eb1, 0x0eb1,
-0x0eb4, 0x0eb9,
-0x0ebb, 0x0ebc,
+0x0eb4, 0x0ebc,
 0x0ec8, 0x0ecd,
 0x0f18, 0x0f19,
 0x0f35, 0x0f35,
@@ -17209,7 +17398,7 @@ CR_M[] = { 275,
 0x1cd0, 0x1cd2,
 0x1cd4, 0x1ce8,
 0x1ced, 0x1ced,
-0x1cf2, 0x1cf4,
+0x1cf4, 0x1cf4,
 0x1cf7, 0x1cf9,
 0x1dc0, 0x1df9,
 0x1dfb, 0x1dff,
@@ -17296,6 +17485,9 @@ CR_M[] = { 275,
 0x116ab, 0x116b7,
 0x1171d, 0x1172b,
 0x1182c, 0x1183a,
+0x119d1, 0x119d7,
+0x119da, 0x119e0,
+0x119e4, 0x119e4,
 0x11a01, 0x11a0a,
 0x11a33, 0x11a39,
 0x11a3b, 0x11a3e,
@@ -17317,7 +17509,8 @@ CR_M[] = { 275,
 0x11ef3, 0x11ef6,
 0x16af0, 0x16af4,
 0x16b30, 0x16b36,
-0x16f51, 0x16f7e,
+0x16f4f, 0x16f4f,
+0x16f51, 0x16f87,
 0x16f8f, 0x16f92,
 0x1bc9d, 0x1bc9e,
 0x1d165, 0x1d169,
@@ -17337,6 +17530,8 @@ CR_M[] = { 275,
 0x1e01b, 0x1e021,
 0x1e023, 0x1e024,
 0x1e026, 0x1e02a,
+0x1e130, 0x1e136,
+0x1e2ec, 0x1e2ef,
 0x1e8d0, 0x1e8d6,
 0x1e944, 0x1e94a,
 0xe0100, 0xe01ef,
@@ -17546,7 +17741,7 @@ CR_Math[] = { 138,
 
 /* PROPERTY: 'Mc': General Category */
 static const OnigCodePoint
-CR_Mc[] = { 166,
+CR_Mc[] = { 168,
 0x0903, 0x0903,
 0x093b, 0x093b,
 0x093e, 0x0940,
@@ -17633,7 +17828,6 @@ CR_Mc[] = { 166,
 0x1c24, 0x1c2b,
 0x1c34, 0x1c35,
 0x1ce1, 0x1ce1,
-0x1cf2, 0x1cf3,
 0x1cf7, 0x1cf7,
 0x302e, 0x302f,
 0xa823, 0xa824,
@@ -17644,7 +17838,7 @@ CR_Mc[] = { 166,
 0xa983, 0xa983,
 0xa9b4, 0xa9b5,
 0xa9ba, 0xa9bb,
-0xa9bd, 0xa9c0,
+0xa9be, 0xa9c0,
 0xaa2f, 0xaa30,
 0xaa33, 0xaa34,
 0xaa4d, 0xaa4d,
@@ -17698,6 +17892,9 @@ CR_Mc[] = { 166,
 0x11726, 0x11726,
 0x1182c, 0x1182e,
 0x11838, 0x11838,
+0x119d1, 0x119d3,
+0x119dc, 0x119df,
+0x119e4, 0x119e4,
 0x11a39, 0x11a39,
 0x11a57, 0x11a58,
 0x11a97, 0x11a97,
@@ -17710,7 +17907,7 @@ CR_Mc[] = { 166,
 0x11d93, 0x11d94,
 0x11d96, 0x11d96,
 0x11ef5, 0x11ef6,
-0x16f51, 0x16f7e,
+0x16f51, 0x16f87,
 0x1d165, 0x1d166,
 0x1d16d, 0x1d172,
 }; /* END of CR_Mc */
@@ -17763,14 +17960,14 @@ CR_Meroitic_Hieroglyphs[] = { 1,
 /* PROPERTY: 'Miao': Script */
 static const OnigCodePoint
 CR_Miao[] = { 3,
-0x16f00, 0x16f44,
-0x16f50, 0x16f7e,
+0x16f00, 0x16f4a,
+0x16f4f, 0x16f87,
 0x16f8f, 0x16f9f,
 }; /* END of CR_Miao */
 
 /* PROPERTY: 'Mn': General Category */
 static const OnigCodePoint
-CR_Mn[] = { 313,
+CR_Mn[] = { 318,
 0x0300, 0x036f,
 0x0483, 0x0487,
 0x0591, 0x05bd,
@@ -17859,8 +18056,7 @@ CR_Mn[] = { 313,
 0x0e34, 0x0e3a,
 0x0e47, 0x0e4e,
 0x0eb1, 0x0eb1,
-0x0eb4, 0x0eb9,
-0x0ebb, 0x0ebc,
+0x0eb4, 0x0ebc,
 0x0ec8, 0x0ecd,
 0x0f18, 0x0f19,
 0x0f35, 0x0f35,
@@ -17958,7 +18154,7 @@ CR_Mn[] = { 313,
 0xa980, 0xa982,
 0xa9b3, 0xa9b3,
 0xa9b6, 0xa9b9,
-0xa9bc, 0xa9bc,
+0xa9bc, 0xa9bd,
 0xa9e5, 0xa9e5,
 0xaa29, 0xaa2e,
 0xaa31, 0xaa32,
@@ -18037,6 +18233,9 @@ CR_Mn[] = { 313,
 0x11727, 0x1172b,
 0x1182f, 0x11837,
 0x11839, 0x1183a,
+0x119d4, 0x119d7,
+0x119da, 0x119db,
+0x119e0, 0x119e0,
 0x11a01, 0x11a0a,
 0x11a33, 0x11a38,
 0x11a3b, 0x11a3e,
@@ -18063,6 +18262,7 @@ CR_Mn[] = { 313,
 0x11ef3, 0x11ef4,
 0x16af0, 0x16af4,
 0x16b30, 0x16b36,
+0x16f4f, 0x16f4f,
 0x16f8f, 0x16f92,
 0x1bc9d, 0x1bc9e,
 0x1d167, 0x1d169,
@@ -18081,6 +18281,8 @@ CR_Mn[] = { 313,
 0x1e01b, 0x1e021,
 0x1e023, 0x1e024,
 0x1e026, 0x1e02a,
+0x1e130, 0x1e136,
+0x1e2ec, 0x1e2ef,
 0x1e8d0, 0x1e8d6,
 0x1e944, 0x1e94a,
 0xe0100, 0xe01ef,
@@ -18133,7 +18335,7 @@ CR_Myanmar[] = { 3,
 
 /* PROPERTY: 'N': Major Category */
 static const OnigCodePoint
-CR_N[] = { 125,
+CR_N[] = { 130,
 0x0030, 0x0039,
 0x00b2, 0x00b3,
 0x00b9, 0x00b9,
@@ -18245,6 +18447,7 @@ CR_N[] = { 125,
 0x11c50, 0x11c6c,
 0x11d50, 0x11d59,
 0x11da0, 0x11da9,
+0x11fc0, 0x11fd4,
 0x12400, 0x1246e,
 0x16a60, 0x16a69,
 0x16b50, 0x16b59,
@@ -18253,11 +18456,15 @@ CR_N[] = { 125,
 0x1d2e0, 0x1d2f3,
 0x1d360, 0x1d378,
 0x1d7ce, 0x1d7ff,
+0x1e140, 0x1e149,
+0x1e2f0, 0x1e2f9,
 0x1e8c7, 0x1e8cf,
 0x1e950, 0x1e959,
 0x1ec71, 0x1ecab,
 0x1ecad, 0x1ecaf,
 0x1ecb1, 0x1ecb4,
+0x1ed01, 0x1ed2d,
+0x1ed2f, 0x1ed3d,
 0x1f100, 0x1f10c,
 }; /* END of CR_N */
 
@@ -18268,6 +18475,14 @@ CR_Nabataean[] = { 2,
 0x108a7, 0x108af,
 }; /* END of CR_Nabataean */
 
+/* PROPERTY: 'Nandinagari': Script */
+static const OnigCodePoint
+CR_Nandinagari[] = { 3,
+0x119a0, 0x119a7,
+0x119aa, 0x119d7,
+0x119da, 0x119e4,
+}; /* END of CR_Nandinagari */
+
 /* PROPERTY: 'Nd': General Category */
 #define CR_Nd CR_Digit
 
@@ -18285,7 +18500,7 @@ static const OnigCodePoint
 CR_Newa[] = { 3,
 0x11400, 0x11459,
 0x1145b, 0x1145b,
-0x1145d, 0x1145e,
+0x1145d, 0x1145f,
 }; /* END of CR_Newa */
 
 /* PROPERTY: 'Nko': Script */
@@ -18314,7 +18529,7 @@ CR_Nl[] = { 12,
 
 /* PROPERTY: 'No': General Category */
 static const OnigCodePoint
-CR_No[] = { 67,
+CR_No[] = { 70,
 0x00b2, 0x00b3,
 0x00b9, 0x00b9,
 0x00bc, 0x00be,
@@ -18373,6 +18588,7 @@ CR_No[] = { 67,
 0x1173a, 0x1173b,
 0x118ea, 0x118f2,
 0x11c5a, 0x11c6c,
+0x11fc0, 0x11fd4,
 0x16b5b, 0x16b61,
 0x16e80, 0x16e96,
 0x1d2e0, 0x1d2f3,
@@ -18381,6 +18597,8 @@ CR_No[] = { 67,
 0x1ec71, 0x1ecab,
 0x1ecad, 0x1ecaf,
 0x1ecb1, 0x1ecb4,
+0x1ed01, 0x1ed2d,
+0x1ed2f, 0x1ed3d,
 0x1f100, 0x1f10c,
 }; /* END of CR_No */
 
@@ -18414,6 +18632,15 @@ CR_Nushu[] = { 2,
 0x1b170, 0x1b2fb,
 }; /* END of CR_Nushu */
 
+/* PROPERTY: 'Nyiakeng_Puachue_Hmong': Script */
+static const OnigCodePoint
+CR_Nyiakeng_Puachue_Hmong[] = { 4,
+0x1e100, 0x1e12c,
+0x1e130, 0x1e13d,
+0x1e140, 0x1e149,
+0x1e14e, 0x1e14f,
+}; /* END of CR_Nyiakeng_Puachue_Hmong */
+
 /* PROPERTY: 'Ogham': Script */
 static const OnigCodePoint
 CR_Ogham[] = { 1,
@@ -18513,7 +18740,7 @@ CR_Osmanya[] = { 2,
 
 /* PROPERTY: 'Other_Alphabetic': Binary Property */
 static const OnigCodePoint
-CR_Other_Alphabetic[] = { 213,
+CR_Other_Alphabetic[] = { 221,
 0x0345, 0x0345,
 0x05b0, 0x05bd,
 0x05bf, 0x05bf,
@@ -18611,12 +18838,12 @@ CR_Other_Alphabetic[] = { 213,
 0x103b, 0x103e,
 0x1056, 0x1059,
 0x105e, 0x1060,
-0x1062, 0x1062,
-0x1067, 0x1068,
+0x1062, 0x1064,
+0x1067, 0x106d,
 0x1071, 0x1074,
-0x1082, 0x1086,
-0x109c, 0x109d,
-0x135f, 0x135f,
+0x1082, 0x108d,
+0x108f, 0x108f,
+0x109a, 0x109d,
 0x1712, 0x1713,
 0x1732, 0x1733,
 0x1752, 0x1753,
@@ -18635,24 +18862,28 @@ CR_Other_Alphabetic[] = { 213,
 0x1ba1, 0x1ba9,
 0x1bac, 0x1bad,
 0x1be7, 0x1bf1,
-0x1c24, 0x1c35,
-0x1cf2, 0x1cf3,
+0x1c24, 0x1c36,
 0x1de7, 0x1df4,
 0x24b6, 0x24e9,
 0x2de0, 0x2dff,
 0xa674, 0xa67b,
 0xa69e, 0xa69f,
+0xa802, 0xa802,
+0xa80b, 0xa80b,
 0xa823, 0xa827,
 0xa880, 0xa881,
 0xa8b4, 0xa8c3,
 0xa8c5, 0xa8c5,
+0xa8ff, 0xa8ff,
 0xa926, 0xa92a,
 0xa947, 0xa952,
 0xa980, 0xa983,
 0xa9b4, 0xa9bf,
+0xa9e5, 0xa9e5,
 0xaa29, 0xaa36,
 0xaa43, 0xaa43,
 0xaa4c, 0xaa4d,
+0xaa7b, 0xaa7d,
 0xaab0, 0xaab0,
 0xaab2, 0xaab4,
 0xaab7, 0xaab8,
@@ -18696,6 +18927,9 @@ CR_Other_Alphabetic[] = { 213,
 0x116ab, 0x116b5,
 0x1171d, 0x1172a,
 0x1182c, 0x11838,
+0x119d1, 0x119d7,
+0x119da, 0x119df,
+0x119e4, 0x119e4,
 0x11a01, 0x11a0a,
 0x11a35, 0x11a39,
 0x11a3b, 0x11a3e,
@@ -18715,8 +18949,9 @@ CR_Other_Alphabetic[] = { 213,
 0x11d90, 0x11d91,
 0x11d93, 0x11d96,
 0x11ef3, 0x11ef6,
-0x16b30, 0x16b36,
-0x16f51, 0x16f7e,
+0x16f4f, 0x16f4f,
+0x16f51, 0x16f87,
+0x16f8f, 0x16f92,
 0x1bc9e, 0x1bc9e,
 0x1e000, 0x1e006,
 0x1e008, 0x1e018,
@@ -18747,7 +18982,7 @@ CR_Other_Default_Ignorable_Code_Point[] = { 11,
 
 /* PROPERTY: 'Other_Grapheme_Extend': Binary Property */
 static const OnigCodePoint
-CR_Other_Grapheme_Extend[] = { 23,
+CR_Other_Grapheme_Extend[] = { 24,
 0x09be, 0x09be,
 0x09d7, 0x09d7,
 0x0b3e, 0x0b3e,
@@ -18760,6 +18995,7 @@ CR_Other_Grapheme_Extend[] = { 23,
 0x0d57, 0x0d57,
 0x0dcf, 0x0dcf,
 0x0ddf, 0x0ddf,
+0x1b35, 0x1b35,
 0x200c, 0x200c,
 0x302e, 0x302f,
 0xff9e, 0xff9f,
@@ -19189,7 +19425,7 @@ CR_Pi[] = { 11,
 
 /* PROPERTY: 'Po': General Category */
 static const OnigCodePoint
-CR_Po[] = { 175,
+CR_Po[] = { 179,
 0x0021, 0x0023,
 0x0025, 0x0027,
 0x002a, 0x002a,
@@ -19225,6 +19461,7 @@ CR_Po[] = { 175,
 0x09fd, 0x09fd,
 0x0a76, 0x0a76,
 0x0af0, 0x0af0,
+0x0c77, 0x0c77,
 0x0c84, 0x0c84,
 0x0df4, 0x0df4,
 0x0e4f, 0x0e4f,
@@ -19237,7 +19474,7 @@ CR_Po[] = { 175,
 0x104a, 0x104f,
 0x10fb, 0x10fb,
 0x1360, 0x1368,
-0x166d, 0x166e,
+0x166e, 0x166e,
 0x16eb, 0x16ed,
 0x1735, 0x1736,
 0x17d4, 0x17d6,
@@ -19276,7 +19513,7 @@ CR_Po[] = { 175,
 0x2e30, 0x2e39,
 0x2e3c, 0x2e3f,
 0x2e41, 0x2e41,
-0x2e43, 0x2e4e,
+0x2e43, 0x2e4f,
 0x3001, 0x3003,
 0x303d, 0x303d,
 0x30fb, 0x30fb,
@@ -19350,18 +19587,21 @@ CR_Po[] = { 175,
 0x11660, 0x1166c,
 0x1173c, 0x1173e,
 0x1183b, 0x1183b,
+0x119e2, 0x119e2,
 0x11a3f, 0x11a46,
 0x11a9a, 0x11a9c,
 0x11a9e, 0x11aa2,
 0x11c41, 0x11c45,
 0x11c70, 0x11c71,
 0x11ef7, 0x11ef8,
+0x11fff, 0x11fff,
 0x12470, 0x12474,
 0x16a6e, 0x16a6f,
 0x16af5, 0x16af5,
 0x16b37, 0x16b3b,
 0x16b44, 0x16b44,
 0x16e97, 0x16e9a,
+0x16fe2, 0x16fe2,
 0x1bc9f, 0x1bc9f,
 0x1da87, 0x1da8b,
 0x1e95e, 0x1e95f,
@@ -19514,7 +19754,7 @@ CR_Runic[] = { 2,
 
 /* PROPERTY: 'S': Major Category */
 static const OnigCodePoint
-CR_S[] = { 220,
+CR_S[] = { 226,
 0x0024, 0x0024,
 0x002b, 0x002b,
 0x003c, 0x003e,
@@ -19570,6 +19810,7 @@ CR_S[] = { 220,
 0x0fd5, 0x0fd8,
 0x109e, 0x109f,
 0x1390, 0x1399,
+0x166d, 0x166d,
 0x17db, 0x17db,
 0x1940, 0x1940,
 0x19de, 0x19ff,
@@ -19614,8 +19855,7 @@ CR_S[] = { 220,
 0x29dc, 0x29fb,
 0x29fe, 0x2b73,
 0x2b76, 0x2b95,
-0x2b98, 0x2bc8,
-0x2bca, 0x2bfe,
+0x2b98, 0x2bff,
 0x2ce5, 0x2cea,
 0x2e80, 0x2e99,
 0x2e9b, 0x2ef3,
@@ -19635,8 +19875,7 @@ CR_S[] = { 220,
 0x3250, 0x3250,
 0x3260, 0x327f,
 0x328a, 0x32b0,
-0x32c0, 0x32fe,
-0x3300, 0x33ff,
+0x32c0, 0x33ff,
 0x4dc0, 0x4dff,
 0xa490, 0xa4c6,
 0xa700, 0xa716,
@@ -19671,6 +19910,7 @@ CR_S[] = { 220,
 0x10877, 0x10878,
 0x10ac8, 0x10ac8,
 0x1173f, 0x1173f,
+0x11fd5, 0x11ff1,
 0x16b3c, 0x16b3f,
 0x16b45, 0x16b45,
 0x1bc9c, 0x1bc9c,
@@ -19699,8 +19939,11 @@ CR_S[] = { 220,
 0x1da6d, 0x1da74,
 0x1da76, 0x1da83,
 0x1da85, 0x1da86,
+0x1e14f, 0x1e14f,
+0x1e2ff, 0x1e2ff,
 0x1ecac, 0x1ecac,
 0x1ecb0, 0x1ecb0,
+0x1ed2e, 0x1ed2e,
 0x1eef0, 0x1eef1,
 0x1f000, 0x1f02b,
 0x1f030, 0x1f093,
@@ -19708,33 +19951,36 @@ CR_S[] = { 220,
 0x1f0b1, 0x1f0bf,
 0x1f0c1, 0x1f0cf,
 0x1f0d1, 0x1f0f5,
-0x1f110, 0x1f16b,
+0x1f110, 0x1f16c,
 0x1f170, 0x1f1ac,
 0x1f1e6, 0x1f202,
 0x1f210, 0x1f23b,
 0x1f240, 0x1f248,
 0x1f250, 0x1f251,
 0x1f260, 0x1f265,
-0x1f300, 0x1f6d4,
+0x1f300, 0x1f6d5,
 0x1f6e0, 0x1f6ec,
-0x1f6f0, 0x1f6f9,
+0x1f6f0, 0x1f6fa,
 0x1f700, 0x1f773,
 0x1f780, 0x1f7d8,
+0x1f7e0, 0x1f7eb,
 0x1f800, 0x1f80b,
 0x1f810, 0x1f847,
 0x1f850, 0x1f859,
 0x1f860, 0x1f887,
 0x1f890, 0x1f8ad,
 0x1f900, 0x1f90b,
-0x1f910, 0x1f93e,
-0x1f940, 0x1f970,
+0x1f90d, 0x1f971,
 0x1f973, 0x1f976,
-0x1f97a, 0x1f97a,
-0x1f97c, 0x1f9a2,
-0x1f9b0, 0x1f9b9,
-0x1f9c0, 0x1f9c2,
-0x1f9d0, 0x1f9ff,
+0x1f97a, 0x1f9a2,
+0x1f9a5, 0x1f9aa,
+0x1f9ae, 0x1f9ca,
+0x1f9cd, 0x1fa53,
 0x1fa60, 0x1fa6d,
+0x1fa70, 0x1fa73,
+0x1fa78, 0x1fa7a,
+0x1fa80, 0x1fa82,
+0x1fa90, 0x1fa95,
 }; /* END of CR_S */
 
 /* PROPERTY: 'Samaritan': Script */
@@ -19753,7 +19999,7 @@ CR_Saurashtra[] = { 2,
 
 /* PROPERTY: 'Sc': General Category */
 static const OnigCodePoint
-CR_Sc[] = { 19,
+CR_Sc[] = { 21,
 0x0024, 0x0024,
 0x00a2, 0x00a5,
 0x058f, 0x058f,
@@ -19772,6 +20018,8 @@ CR_Sc[] = { 19,
 0xff04, 0xff04,
 0xffe0, 0xffe1,
 0xffe5, 0xffe6,
+0x11fdd, 0x11fe0,
+0x1e2ff, 0x1e2ff,
 0x1ecb0, 0x1ecb0,
 }; /* END of CR_Sc */
 
@@ -20005,7 +20253,7 @@ CR_Sm[] = { 64,
 
 /* PROPERTY: 'So': General Category */
 static const OnigCodePoint
-CR_So[] = { 174,
+CR_So[] = { 180,
 0x00a6, 0x00a6,
 0x00a9, 0x00a9,
 0x00ae, 0x00ae,
@@ -20037,6 +20285,7 @@ CR_So[] = { 174,
 0x0fd5, 0x0fd8,
 0x109e, 0x109f,
 0x1390, 0x1399,
+0x166d, 0x166d,
 0x1940, 0x1940,
 0x19de, 0x19ff,
 0x1b61, 0x1b6a,
@@ -20085,8 +20334,7 @@ CR_So[] = { 174,
 0x2b45, 0x2b46,
 0x2b4d, 0x2b73,
 0x2b76, 0x2b95,
-0x2b98, 0x2bc8,
-0x2bca, 0x2bfe,
+0x2b98, 0x2bff,
 0x2ce5, 0x2cea,
 0x2e80, 0x2e99,
 0x2e9b, 0x2ef3,
@@ -20105,8 +20353,7 @@ CR_So[] = { 174,
 0x3250, 0x3250,
 0x3260, 0x327f,
 0x328a, 0x32b0,
-0x32c0, 0x32fe,
-0x3300, 0x33ff,
+0x32c0, 0x33ff,
 0x4dc0, 0x4dff,
 0xa490, 0xa4c6,
 0xa828, 0xa82b,
@@ -20127,6 +20374,8 @@ CR_So[] = { 174,
 0x10877, 0x10878,
 0x10ac8, 0x10ac8,
 0x1173f, 0x1173f,
+0x11fd5, 0x11fdc,
+0x11fe1, 0x11ff1,
 0x16b3c, 0x16b3f,
 0x16b45, 0x16b45,
 0x1bc9c, 0x1bc9c,
@@ -20145,14 +20394,16 @@ CR_So[] = { 174,
 0x1da6d, 0x1da74,
 0x1da76, 0x1da83,
 0x1da85, 0x1da86,
+0x1e14f, 0x1e14f,
 0x1ecac, 0x1ecac,
+0x1ed2e, 0x1ed2e,
 0x1f000, 0x1f02b,
 0x1f030, 0x1f093,
 0x1f0a0, 0x1f0ae,
 0x1f0b1, 0x1f0bf,
 0x1f0c1, 0x1f0cf,
 0x1f0d1, 0x1f0f5,
-0x1f110, 0x1f16b,
+0x1f110, 0x1f16c,
 0x1f170, 0x1f1ac,
 0x1f1e6, 0x1f202,
 0x1f210, 0x1f23b,
@@ -20160,26 +20411,29 @@ CR_So[] = { 174,
 0x1f250, 0x1f251,
 0x1f260, 0x1f265,
 0x1f300, 0x1f3fa,
-0x1f400, 0x1f6d4,
+0x1f400, 0x1f6d5,
 0x1f6e0, 0x1f6ec,
-0x1f6f0, 0x1f6f9,
+0x1f6f0, 0x1f6fa,
 0x1f700, 0x1f773,
 0x1f780, 0x1f7d8,
+0x1f7e0, 0x1f7eb,
 0x1f800, 0x1f80b,
 0x1f810, 0x1f847,
 0x1f850, 0x1f859,
 0x1f860, 0x1f887,
 0x1f890, 0x1f8ad,
 0x1f900, 0x1f90b,
-0x1f910, 0x1f93e,
-0x1f940, 0x1f970,
+0x1f90d, 0x1f971,
 0x1f973, 0x1f976,
-0x1f97a, 0x1f97a,
-0x1f97c, 0x1f9a2,
-0x1f9b0, 0x1f9b9,
-0x1f9c0, 0x1f9c2,
-0x1f9d0, 0x1f9ff,
+0x1f97a, 0x1f9a2,
+0x1f9a5, 0x1f9aa,
+0x1f9ae, 0x1f9ca,
+0x1f9cd, 0x1fa53,
 0x1fa60, 0x1fa6d,
+0x1fa70, 0x1fa73,
+0x1fa78, 0x1fa7a,
+0x1fa80, 0x1fa82,
+0x1fa90, 0x1fa95,
 }; /* END of CR_So */
 
 /* PROPERTY: 'Soft_Dotted': Binary Property */
@@ -20233,9 +20487,8 @@ CR_Sora_Sompeng[] = { 2,
 
 /* PROPERTY: 'Soyombo': Script */
 static const OnigCodePoint
-CR_Soyombo[] = { 2,
-0x11a50, 0x11a83,
-0x11a86, 0x11aa2,
+CR_Soyombo[] = { 1,
+0x11a50, 0x11aa2,
 }; /* END of CR_Soyombo */
 
 /* PROPERTY: 'Sundanese': Script */
@@ -20302,13 +20555,13 @@ CR_Tai_Viet[] = { 2,
 /* PROPERTY: 'Takri': Script */
 static const OnigCodePoint
 CR_Takri[] = { 2,
-0x11680, 0x116b7,
+0x11680, 0x116b8,
 0x116c0, 0x116c9,
 }; /* END of CR_Takri */
 
 /* PROPERTY: 'Tamil': Script */
 static const OnigCodePoint
-CR_Tamil[] = { 16,
+CR_Tamil[] = { 18,
 0x0b82, 0x0b83,
 0x0b85, 0x0b8a,
 0x0b8e, 0x0b90,
@@ -20325,13 +20578,15 @@ CR_Tamil[] = { 16,
 0x0bd0, 0x0bd0,
 0x0bd7, 0x0bd7,
 0x0be6, 0x0bfa,
+0x11fc0, 0x11ff1,
+0x11fff, 0x11fff,
 }; /* END of CR_Tamil */
 
 /* PROPERTY: 'Tangut': Script */
 static const OnigCodePoint
 CR_Tangut[] = { 3,
 0x16fe0, 0x16fe0,
-0x17000, 0x187f1,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 }; /* END of CR_Tangut */
 
@@ -20349,7 +20604,7 @@ CR_Telugu[] = { 12,
 0x0c58, 0x0c5a,
 0x0c60, 0x0c63,
 0x0c66, 0x0c6f,
-0x0c78, 0x0c7f,
+0x0c77, 0x0c7f,
 }; /* END of CR_Telugu */
 
 /* PROPERTY: 'Terminal_Punctuation': Binary Property */
@@ -20379,7 +20634,7 @@ CR_Terminal_Punctuation[] = { 102,
 0x0f0d, 0x0f12,
 0x104a, 0x104b,
 0x1361, 0x1368,
-0x166d, 0x166e,
+0x166e, 0x166e,
 0x16eb, 0x16ed,
 0x1735, 0x1736,
 0x17d4, 0x17d6,
@@ -20398,7 +20653,7 @@ CR_Terminal_Punctuation[] = { 102,
 0x2e3c, 0x2e3c,
 0x2e41, 0x2e41,
 0x2e4c, 0x2e4c,
-0x2e4e, 0x2e4e,
+0x2e4e, 0x2e4f,
 0x3001, 0x3002,
 0xa4fe, 0xa4ff,
 0xa60d, 0xa60f,
@@ -20527,7 +20782,7 @@ CR_Unified_Ideograph[] = { 14,
 
 /* PROPERTY: 'Unknown': Script */
 static const OnigCodePoint
-CR_Unknown[] = { 656,
+CR_Unknown[] = { 664,
 0x0378, 0x0379,
 0x0380, 0x0383,
 0x038b, 0x038b,
@@ -20636,7 +20891,7 @@ CR_Unknown[] = { 656,
 0x0c57, 0x0c57,
 0x0c5b, 0x0c5f,
 0x0c64, 0x0c65,
-0x0c70, 0x0c77,
+0x0c70, 0x0c76,
 0x0c8d, 0x0c8d,
 0x0c91, 0x0c91,
 0x0ca9, 0x0ca9,
@@ -20673,17 +20928,10 @@ CR_Unknown[] = { 656,
 0x0e3b, 0x0e3e,
 0x0e5c, 0x0e80,
 0x0e83, 0x0e83,
-0x0e85, 0x0e86,
-0x0e89, 0x0e89,
-0x0e8b, 0x0e8c,
-0x0e8e, 0x0e93,
-0x0e98, 0x0e98,
-0x0ea0, 0x0ea0,
+0x0e85, 0x0e85,
+0x0e8b, 0x0e8b,
 0x0ea4, 0x0ea4,
 0x0ea6, 0x0ea6,
-0x0ea8, 0x0ea9,
-0x0eac, 0x0eac,
-0x0eba, 0x0eba,
 0x0ebe, 0x0ebf,
 0x0ec5, 0x0ec5,
 0x0ec7, 0x0ec7,
@@ -20760,7 +21008,7 @@ CR_Unknown[] = { 656,
 0x1c89, 0x1c8f,
 0x1cbb, 0x1cbc,
 0x1cc8, 0x1ccf,
-0x1cfa, 0x1cff,
+0x1cfb, 0x1cff,
 0x1dfa, 0x1dfa,
 0x1f16, 0x1f17,
 0x1f1e, 0x1f1f,
@@ -20789,8 +21037,6 @@ CR_Unknown[] = { 656,
 0x244b, 0x245f,
 0x2b74, 0x2b75,
 0x2b96, 0x2b97,
-0x2bc9, 0x2bc9,
-0x2bff, 0x2bff,
 0x2c2f, 0x2c2f,
 0x2c5f, 0x2c5f,
 0x2cf4, 0x2cf8,
@@ -20808,7 +21054,7 @@ CR_Unknown[] = { 656,
 0x2dcf, 0x2dcf,
 0x2dd7, 0x2dd7,
 0x2ddf, 0x2ddf,
-0x2e4f, 0x2e7f,
+0x2e50, 0x2e7f,
 0x2e9a, 0x2e9a,
 0x2ef4, 0x2eff,
 0x2fd6, 0x2fef,
@@ -20821,14 +21067,14 @@ CR_Unknown[] = { 656,
 0x31bb, 0x31bf,
 0x31e4, 0x31ef,
 0x321f, 0x321f,
-0x32ff, 0x32ff,
 0x4db6, 0x4dbf,
 0x9ff0, 0x9fff,
 0xa48d, 0xa48f,
 0xa4c7, 0xa4cf,
 0xa62c, 0xa63f,
 0xa6f8, 0xa6ff,
-0xa7ba, 0xa7f6,
+0xa7c0, 0xa7c1,
+0xa7c7, 0xa7f6,
 0xa82c, 0xa82f,
 0xa83a, 0xa83f,
 0xa878, 0xa87f,
@@ -20849,7 +21095,7 @@ CR_Unknown[] = { 656,
 0xab17, 0xab1f,
 0xab27, 0xab27,
 0xab2f, 0xab2f,
-0xab66, 0xab6f,
+0xab68, 0xab6f,
 0xabee, 0xabef,
 0xabfa, 0xabff,
 0xd7a4, 0xd7af,
@@ -20955,7 +21201,8 @@ CR_Unknown[] = { 656,
 0x10d3a, 0x10e5f,
 0x10e7f, 0x10eff,
 0x10f28, 0x10f2f,
-0x10f5a, 0x10fff,
+0x10f5a, 0x10fdf,
+0x10ff7, 0x10fff,
 0x1104e, 0x11051,
 0x11070, 0x1107e,
 0x110c2, 0x110cc,
@@ -20994,7 +21241,7 @@ CR_Unknown[] = { 656,
 0x11375, 0x113ff,
 0x1145a, 0x1145a,
 0x1145c, 0x1145c,
-0x1145f, 0x1147f,
+0x11460, 0x1147f,
 0x114c8, 0x114cf,
 0x114da, 0x1157f,
 0x115b6, 0x115b7,
@@ -21002,16 +21249,18 @@ CR_Unknown[] = { 656,
 0x11645, 0x1164f,
 0x1165a, 0x1165f,
 0x1166d, 0x1167f,
-0x116b8, 0x116bf,
+0x116b9, 0x116bf,
 0x116ca, 0x116ff,
 0x1171b, 0x1171c,
 0x1172c, 0x1172f,
 0x11740, 0x117ff,
 0x1183c, 0x1189f,
 0x118f3, 0x118fe,
-0x11900, 0x119ff,
+0x11900, 0x1199f,
+0x119a8, 0x119a9,
+0x119d8, 0x119d9,
+0x119e5, 0x119ff,
 0x11a48, 0x11a4f,
-0x11a84, 0x11a85,
 0x11aa3, 0x11abf,
 0x11af9, 0x11bff,
 0x11c09, 0x11c09,
@@ -21034,12 +21283,14 @@ CR_Unknown[] = { 656,
 0x11d92, 0x11d92,
 0x11d99, 0x11d9f,
 0x11daa, 0x11edf,
-0x11ef9, 0x11fff,
+0x11ef9, 0x11fbf,
+0x11ff2, 0x11ffe,
 0x1239a, 0x123ff,
 0x1246f, 0x1246f,
 0x12475, 0x1247f,
 0x12544, 0x12fff,
-0x1342f, 0x143ff,
+0x1342f, 0x1342f,
+0x13439, 0x143ff,
 0x14647, 0x167ff,
 0x16a39, 0x16a3f,
 0x16a5f, 0x16a5f,
@@ -21053,13 +21304,15 @@ CR_Unknown[] = { 656,
 0x16b78, 0x16b7c,
 0x16b90, 0x16e3f,
 0x16e9b, 0x16eff,
-0x16f45, 0x16f4f,
-0x16f7f, 0x16f8e,
+0x16f4b, 0x16f4e,
+0x16f88, 0x16f8e,
 0x16fa0, 0x16fdf,
-0x16fe2, 0x16fff,
-0x187f2, 0x187ff,
+0x16fe4, 0x16fff,
+0x187f8, 0x187ff,
 0x18af3, 0x1afff,
-0x1b11f, 0x1b16f,
+0x1b11f, 0x1b14f,
+0x1b153, 0x1b163,
+0x1b168, 0x1b16f,
 0x1b2fc, 0x1bbff,
 0x1bc6b, 0x1bc6f,
 0x1bc7d, 0x1bc7f,
@@ -21100,13 +21353,20 @@ CR_Unknown[] = { 656,
 0x1e019, 0x1e01a,
 0x1e022, 0x1e022,
 0x1e025, 0x1e025,
-0x1e02b, 0x1e7ff,
+0x1e02b, 0x1e0ff,
+0x1e12d, 0x1e12f,
+0x1e13e, 0x1e13f,
+0x1e14a, 0x1e14d,
+0x1e150, 0x1e2bf,
+0x1e2fa, 0x1e2fe,
+0x1e300, 0x1e7ff,
 0x1e8c5, 0x1e8c6,
 0x1e8d7, 0x1e8ff,
-0x1e94b, 0x1e94f,
+0x1e94c, 0x1e94f,
 0x1e95a, 0x1e95d,
 0x1e960, 0x1ec70,
-0x1ecb5, 0x1edff,
+0x1ecb5, 0x1ed00,
+0x1ed3e, 0x1edff,
 0x1ee04, 0x1ee04,
 0x1ee20, 0x1ee20,
 0x1ee23, 0x1ee23,
@@ -21148,33 +21408,36 @@ CR_Unknown[] = { 656,
 0x1f0d0, 0x1f0d0,
 0x1f0f6, 0x1f0ff,
 0x1f10d, 0x1f10f,
-0x1f16c, 0x1f16f,
+0x1f16d, 0x1f16f,
 0x1f1ad, 0x1f1e5,
 0x1f203, 0x1f20f,
 0x1f23c, 0x1f23f,
 0x1f249, 0x1f24f,
 0x1f252, 0x1f25f,
 0x1f266, 0x1f2ff,
-0x1f6d5, 0x1f6df,
+0x1f6d6, 0x1f6df,
 0x1f6ed, 0x1f6ef,
-0x1f6fa, 0x1f6ff,
+0x1f6fb, 0x1f6ff,
 0x1f774, 0x1f77f,
-0x1f7d9, 0x1f7ff,
+0x1f7d9, 0x1f7df,
+0x1f7ec, 0x1f7ff,
 0x1f80c, 0x1f80f,
 0x1f848, 0x1f84f,
 0x1f85a, 0x1f85f,
 0x1f888, 0x1f88f,
 0x1f8ae, 0x1f8ff,
-0x1f90c, 0x1f90f,
-0x1f93f, 0x1f93f,
-0x1f971, 0x1f972,
+0x1f90c, 0x1f90c,
+0x1f972, 0x1f972,
 0x1f977, 0x1f979,
-0x1f97b, 0x1f97b,
-0x1f9a3, 0x1f9af,
-0x1f9ba, 0x1f9bf,
-0x1f9c3, 0x1f9cf,
-0x1fa00, 0x1fa5f,
-0x1fa6e, 0x1ffff,
+0x1f9a3, 0x1f9a4,
+0x1f9ab, 0x1f9ad,
+0x1f9cb, 0x1f9cc,
+0x1fa54, 0x1fa5f,
+0x1fa6e, 0x1fa6f,
+0x1fa74, 0x1fa77,
+0x1fa7b, 0x1fa7f,
+0x1fa83, 0x1fa8f,
+0x1fa96, 0x1ffff,
 0x2a6d7, 0x2a6ff,
 0x2b735, 0x2b73f,
 0x2b81e, 0x2b81f,
@@ -21203,6 +21466,13 @@ CR_Variation_Selector[] = { 3,
 0xe0100, 0xe01ef,
 }; /* END of CR_Variation_Selector */
 
+/* PROPERTY: 'Wancho': Script */
+static const OnigCodePoint
+CR_Wancho[] = { 2,
+0x1e2c0, 0x1e2f9,
+0x1e2ff, 0x1e2ff,
+}; /* END of CR_Wancho */
+
 /* PROPERTY: 'Warang_Citi': Script */
 static const OnigCodePoint
 CR_Warang_Citi[] = { 2,
@@ -21215,7 +21485,7 @@ CR_Warang_Citi[] = { 2,
 
 /* PROPERTY: 'XID_Continue': Derived Property */
 static const OnigCodePoint
-CR_XID_Continue[] = { 714,
+CR_XID_Continue[] = { 720,
 0x0030, 0x0039,
 0x0041, 0x005a,
 0x005f, 0x005f,
@@ -21401,17 +21671,10 @@ CR_XID_Continue[] = { 714,
 0x0e50, 0x0e59,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb9,
-0x0ebb, 0x0ebd,
+0x0ea7, 0x0ebd,
 0x0ec0, 0x0ec4,
 0x0ec6, 0x0ec6,
 0x0ec8, 0x0ecd,
@@ -21503,7 +21766,7 @@ CR_XID_Continue[] = { 714,
 0x1c90, 0x1cba,
 0x1cbd, 0x1cbf,
 0x1cd0, 0x1cd2,
-0x1cd4, 0x1cf9,
+0x1cd4, 0x1cfa,
 0x1d00, 0x1df9,
 0x1dfb, 0x1f15,
 0x1f18, 0x1f1d,
@@ -21588,7 +21851,8 @@ CR_XID_Continue[] = { 714,
 0xa67f, 0xa6f1,
 0xa717, 0xa71f,
 0xa722, 0xa788,
-0xa78b, 0xa7b9,
+0xa78b, 0xa7bf,
+0xa7c2, 0xa7c6,
 0xa7f7, 0xa827,
 0xa840, 0xa873,
 0xa880, 0xa8c5,
@@ -21615,7 +21879,7 @@ CR_XID_Continue[] = { 714,
 0xab20, 0xab26,
 0xab28, 0xab2e,
 0xab30, 0xab5a,
-0xab5c, 0xab65,
+0xab5c, 0xab67,
 0xab70, 0xabea,
 0xabec, 0xabed,
 0xabf0, 0xabf9,
@@ -21723,6 +21987,7 @@ CR_XID_Continue[] = { 714,
 0x10f00, 0x10f1c,
 0x10f27, 0x10f27,
 0x10f30, 0x10f50,
+0x10fe0, 0x10ff6,
 0x11000, 0x11046,
 0x11066, 0x1106f,
 0x1107f, 0x110ba,
@@ -21764,7 +22029,7 @@ CR_XID_Continue[] = { 714,
 0x11370, 0x11374,
 0x11400, 0x1144a,
 0x11450, 0x11459,
-0x1145e, 0x1145e,
+0x1145e, 0x1145f,
 0x11480, 0x114c5,
 0x114c7, 0x114c7,
 0x114d0, 0x114d9,
@@ -21774,7 +22039,7 @@ CR_XID_Continue[] = { 714,
 0x11600, 0x11640,
 0x11644, 0x11644,
 0x11650, 0x11659,
-0x11680, 0x116b7,
+0x11680, 0x116b8,
 0x116c0, 0x116c9,
 0x11700, 0x1171a,
 0x1171d, 0x1172b,
@@ -21782,10 +22047,13 @@ CR_XID_Continue[] = { 714,
 0x11800, 0x1183a,
 0x118a0, 0x118e9,
 0x118ff, 0x118ff,
+0x119a0, 0x119a7,
+0x119aa, 0x119d7,
+0x119da, 0x119e1,
+0x119e3, 0x119e4,
 0x11a00, 0x11a3e,
 0x11a47, 0x11a47,
-0x11a50, 0x11a83,
-0x11a86, 0x11a99,
+0x11a50, 0x11a99,
 0x11a9d, 0x11a9d,
 0x11ac0, 0x11af8,
 0x11c00, 0x11c08,
@@ -21825,13 +22093,16 @@ CR_XID_Continue[] = { 714,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16e40, 0x16e7f,
-0x16f00, 0x16f44,
-0x16f50, 0x16f7e,
+0x16f00, 0x16f4a,
+0x16f4f, 0x16f87,
 0x16f8f, 0x16f9f,
 0x16fe0, 0x16fe1,
-0x17000, 0x187f1,
+0x16fe3, 0x16fe3,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b000, 0x1b11e,
+0x1b150, 0x1b152,
+0x1b164, 0x1b167,
 0x1b170, 0x1b2fb,
 0x1bc00, 0x1bc6a,
 0x1bc70, 0x1bc7c,
@@ -21886,9 +22157,14 @@ CR_XID_Continue[] = { 714,
 0x1e01b, 0x1e021,
 0x1e023, 0x1e024,
 0x1e026, 0x1e02a,
+0x1e100, 0x1e12c,
+0x1e130, 0x1e13d,
+0x1e140, 0x1e149,
+0x1e14e, 0x1e14e,
+0x1e2c0, 0x1e2f9,
 0x1e800, 0x1e8c4,
 0x1e8d0, 0x1e8d6,
-0x1e900, 0x1e94a,
+0x1e900, 0x1e94b,
 0x1e950, 0x1e959,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
@@ -21934,7 +22210,7 @@ CR_XID_Continue[] = { 714,
 
 /* PROPERTY: 'XID_Start': Derived Property */
 static const OnigCodePoint
-CR_XID_Start[] = { 606,
+CR_XID_Start[] = { 616,
 0x0041, 0x005a,
 0x0061, 0x007a,
 0x00aa, 0x00aa,
@@ -22079,16 +22355,10 @@ CR_XID_Start[] = { 606,
 0x0e40, 0x0e46,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb0,
+0x0ea7, 0x0eb0,
 0x0eb2, 0x0eb2,
 0x0ebd, 0x0ebd,
 0x0ec0, 0x0ec4,
@@ -22168,8 +22438,9 @@ CR_XID_Start[] = { 606,
 0x1c90, 0x1cba,
 0x1cbd, 0x1cbf,
 0x1ce9, 0x1cec,
-0x1cee, 0x1cf1,
+0x1cee, 0x1cf3,
 0x1cf5, 0x1cf6,
+0x1cfa, 0x1cfa,
 0x1d00, 0x1dbf,
 0x1e00, 0x1f15,
 0x1f18, 0x1f1d,
@@ -22249,7 +22520,8 @@ CR_XID_Start[] = { 606,
 0xa6a0, 0xa6ef,
 0xa717, 0xa71f,
 0xa722, 0xa788,
-0xa78b, 0xa7b9,
+0xa78b, 0xa7bf,
+0xa7c2, 0xa7c6,
 0xa7f7, 0xa801,
 0xa803, 0xa805,
 0xa807, 0xa80a,
@@ -22287,7 +22559,7 @@ CR_XID_Start[] = { 606,
 0xab20, 0xab26,
 0xab28, 0xab2e,
 0xab30, 0xab5a,
-0xab5c, 0xab65,
+0xab5c, 0xab67,
 0xab70, 0xabe2,
 0xac00, 0xd7a3,
 0xd7b0, 0xd7c6,
@@ -22382,6 +22654,7 @@ CR_XID_Start[] = { 606,
 0x10f00, 0x10f1c,
 0x10f27, 0x10f27,
 0x10f30, 0x10f45,
+0x10fe0, 0x10ff6,
 0x11003, 0x11037,
 0x11083, 0x110af,
 0x110d0, 0x110e8,
@@ -22412,6 +22685,7 @@ CR_XID_Start[] = { 606,
 0x1135d, 0x11361,
 0x11400, 0x11434,
 0x11447, 0x1144a,
+0x1145f, 0x1145f,
 0x11480, 0x114af,
 0x114c4, 0x114c5,
 0x114c7, 0x114c7,
@@ -22420,16 +22694,20 @@ CR_XID_Start[] = { 606,
 0x11600, 0x1162f,
 0x11644, 0x11644,
 0x11680, 0x116aa,
+0x116b8, 0x116b8,
 0x11700, 0x1171a,
 0x11800, 0x1182b,
 0x118a0, 0x118df,
 0x118ff, 0x118ff,
+0x119a0, 0x119a7,
+0x119aa, 0x119d0,
+0x119e1, 0x119e1,
+0x119e3, 0x119e3,
 0x11a00, 0x11a00,
 0x11a0b, 0x11a32,
 0x11a3a, 0x11a3a,
 0x11a50, 0x11a50,
-0x11a5c, 0x11a83,
-0x11a86, 0x11a89,
+0x11a5c, 0x11a89,
 0x11a9d, 0x11a9d,
 0x11ac0, 0x11af8,
 0x11c00, 0x11c08,
@@ -22458,13 +22736,16 @@ CR_XID_Start[] = { 606,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16e40, 0x16e7f,
-0x16f00, 0x16f44,
+0x16f00, 0x16f4a,
 0x16f50, 0x16f50,
 0x16f93, 0x16f9f,
 0x16fe0, 0x16fe1,
-0x17000, 0x187f1,
+0x16fe3, 0x16fe3,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b000, 0x1b11e,
+0x1b150, 0x1b152,
+0x1b164, 0x1b167,
 0x1b170, 0x1b2fb,
 0x1bc00, 0x1bc6a,
 0x1bc70, 0x1bc7c,
@@ -22500,8 +22781,13 @@ CR_XID_Start[] = { 606,
 0x1d78a, 0x1d7a8,
 0x1d7aa, 0x1d7c2,
 0x1d7c4, 0x1d7cb,
+0x1e100, 0x1e12c,
+0x1e137, 0x1e13d,
+0x1e14e, 0x1e14e,
+0x1e2c0, 0x1e2eb,
 0x1e800, 0x1e8c4,
 0x1e900, 0x1e943,
+0x1e94b, 0x1e94b,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
 0x1ee21, 0x1ee22,
@@ -23805,6 +24091,12 @@ CR_In_Sogdian[] = { 1,
 0x10f30, 0x10f6f,
 }; /* END of CR_In_Sogdian */
 
+/* PROPERTY: 'In_Elymaic': Block */
+static const OnigCodePoint
+CR_In_Elymaic[] = { 1,
+0x10fe0, 0x10fff,
+}; /* END of CR_In_Elymaic */
+
 /* PROPERTY: 'In_Brahmi': Block */
 static const OnigCodePoint
 CR_In_Brahmi[] = { 1,
@@ -23925,6 +24217,12 @@ CR_In_Warang_Citi[] = { 1,
 0x118a0, 0x118ff,
 }; /* END of CR_In_Warang_Citi */
 
+/* PROPERTY: 'In_Nandinagari': Block */
+static const OnigCodePoint
+CR_In_Nandinagari[] = { 1,
+0x119a0, 0x119ff,
+}; /* END of CR_In_Nandinagari */
+
 /* PROPERTY: 'In_Zanabazar_Square': Block */
 static const OnigCodePoint
 CR_In_Zanabazar_Square[] = { 1,
@@ -23973,6 +24271,12 @@ CR_In_Makasar[] = { 1,
 0x11ee0, 0x11eff,
 }; /* END of CR_In_Makasar */
 
+/* PROPERTY: 'In_Tamil_Supplement': Block */
+static const OnigCodePoint
+CR_In_Tamil_Supplement[] = { 1,
+0x11fc0, 0x11fff,
+}; /* END of CR_In_Tamil_Supplement */
+
 /* PROPERTY: 'In_Cuneiform': Block */
 static const OnigCodePoint
 CR_In_Cuneiform[] = { 1,
@@ -23997,6 +24301,12 @@ CR_In_Egyptian_Hieroglyphs[] = { 1,
 0x13000, 0x1342f,
 }; /* END of CR_In_Egyptian_Hieroglyphs */
 
+/* PROPERTY: 'In_Egyptian_Hieroglyph_Format_Controls': Block */
+static const OnigCodePoint
+CR_In_Egyptian_Hieroglyph_Format_Controls[] = { 1,
+0x13430, 0x1343f,
+}; /* END of CR_In_Egyptian_Hieroglyph_Format_Controls */
+
 /* PROPERTY: 'In_Anatolian_Hieroglyphs': Block */
 static const OnigCodePoint
 CR_In_Anatolian_Hieroglyphs[] = { 1,
@@ -24069,6 +24379,12 @@ CR_In_Kana_Extended_A[] = { 1,
 0x1b100, 0x1b12f,
 }; /* END of CR_In_Kana_Extended_A */
 
+/* PROPERTY: 'In_Small_Kana_Extension': Block */
+static const OnigCodePoint
+CR_In_Small_Kana_Extension[] = { 1,
+0x1b130, 0x1b16f,
+}; /* END of CR_In_Small_Kana_Extension */
+
 /* PROPERTY: 'In_Nushu': Block */
 static const OnigCodePoint
 CR_In_Nushu[] = { 1,
@@ -24141,6 +24457,18 @@ CR_In_Glagolitic_Supplement[] = { 1,
 0x1e000, 0x1e02f,
 }; /* END of CR_In_Glagolitic_Supplement */
 
+/* PROPERTY: 'In_Nyiakeng_Puachue_Hmong': Block */
+static const OnigCodePoint
+CR_In_Nyiakeng_Puachue_Hmong[] = { 1,
+0x1e100, 0x1e14f,
+}; /* END of CR_In_Nyiakeng_Puachue_Hmong */
+
+/* PROPERTY: 'In_Wancho': Block */
+static const OnigCodePoint
+CR_In_Wancho[] = { 1,
+0x1e2c0, 0x1e2ff,
+}; /* END of CR_In_Wancho */
+
 /* PROPERTY: 'In_Mende_Kikakui': Block */
 static const OnigCodePoint
 CR_In_Mende_Kikakui[] = { 1,
@@ -24159,6 +24487,12 @@ CR_In_Indic_Siyaq_Numbers[] = { 1,
 0x1ec70, 0x1ecbf,
 }; /* END of CR_In_Indic_Siyaq_Numbers */
 
+/* PROPERTY: 'In_Ottoman_Siyaq_Numbers': Block */
+static const OnigCodePoint
+CR_In_Ottoman_Siyaq_Numbers[] = { 1,
+0x1ed00, 0x1ed4f,
+}; /* END of CR_In_Ottoman_Siyaq_Numbers */
+
 /* PROPERTY: 'In_Arabic_Mathematical_Alphabetic_Symbols': Block */
 static const OnigCodePoint
 CR_In_Arabic_Mathematical_Alphabetic_Symbols[] = { 1,
@@ -24249,6 +24583,12 @@ CR_In_Chess_Symbols[] = { 1,
 0x1fa00, 0x1fa6f,
 }; /* END of CR_In_Chess_Symbols */
 
+/* PROPERTY: 'In_Symbols_and_Pictographs_Extended_A': Block */
+static const OnigCodePoint
+CR_In_Symbols_and_Pictographs_Extended_A[] = { 1,
+0x1fa70, 0x1faff,
+}; /* END of CR_In_Symbols_and_Pictographs_Extended_A */
+
 /* PROPERTY: 'In_CJK_Unified_Ideographs_Extension_B': Block */
 static const OnigCodePoint
 CR_In_CJK_Unified_Ideographs_Extension_B[] = { 1,
@@ -24311,7 +24651,7 @@ CR_In_Supplementary_Private_Use_Area_B[] = { 1,
 
 /* PROPERTY: 'In_No_Block': Block */
 static const OnigCodePoint
-CR_In_No_Block[] = { 51,
+CR_In_No_Block[] = { 53,
 0x0870, 0x089f,
 0x2fe0, 0x2fef,
 0x10200, 0x1027f,
@@ -24325,39 +24665,41 @@ CR_In_No_Block[] = { 51,
 0x10c50, 0x10c7f,
 0x10d40, 0x10e5f,
 0x10e80, 0x10eff,
-0x10f70, 0x10fff,
+0x10f70, 0x10fdf,
 0x11250, 0x1127f,
 0x11380, 0x113ff,
 0x114e0, 0x1157f,
 0x116d0, 0x116ff,
 0x11740, 0x117ff,
 0x11850, 0x1189f,
-0x11900, 0x119ff,
+0x11900, 0x1199f,
 0x11ab0, 0x11abf,
 0x11b00, 0x11bff,
 0x11cc0, 0x11cff,
 0x11db0, 0x11edf,
-0x11f00, 0x11fff,
+0x11f00, 0x11fbf,
 0x12550, 0x12fff,
-0x13430, 0x143ff,
+0x13440, 0x143ff,
 0x14680, 0x167ff,
 0x16a70, 0x16acf,
 0x16b90, 0x16e3f,
 0x16ea0, 0x16eff,
 0x16fa0, 0x16fdf,
 0x18b00, 0x1afff,
-0x1b130, 0x1b16f,
 0x1b300, 0x1bbff,
 0x1bcb0, 0x1cfff,
 0x1d250, 0x1d2df,
 0x1d380, 0x1d3ff,
 0x1dab0, 0x1dfff,
-0x1e030, 0x1e7ff,
+0x1e030, 0x1e0ff,
+0x1e150, 0x1e2bf,
+0x1e300, 0x1e7ff,
 0x1e8e0, 0x1e8ff,
 0x1e960, 0x1ec6f,
-0x1ecc0, 0x1edff,
+0x1ecc0, 0x1ecff,
+0x1ed50, 0x1edff,
 0x1ef00, 0x1efff,
-0x1fa70, 0x1ffff,
+0x1fb00, 0x1ffff,
 0x2a6e0, 0x2a6ff,
 0x2ebf0, 0x2f7ff,
 0x2fa20, 0xdffff,
@@ -24438,6 +24780,7 @@ const CodeRanges[] = {
   CR_Duployan,
   CR_Egyptian_Hieroglyphs,
   CR_Elbasan,
+  CR_Elymaic,
   CR_Emoji,
   CR_Emoji_Component,
   CR_Emoji_Modifier,
@@ -24528,6 +24871,7 @@ const CodeRanges[] = {
   CR_Myanmar,
   CR_N,
   CR_Nabataean,
+  CR_Nandinagari,
   CR_Nd,
   CR_New_Tai_Lue,
   CR_Newa,
@@ -24536,6 +24880,7 @@ const CodeRanges[] = {
   CR_No,
   CR_Noncharacter_Code_Point,
   CR_Nushu,
+  CR_Nyiakeng_Puachue_Hmong,
   CR_Ogham,
   CR_Ol_Chiki,
   CR_Old_Hungarian,
@@ -24620,6 +24965,7 @@ const CodeRanges[] = {
   CR_Uppercase,
   CR_Vai,
   CR_Variation_Selector,
+  CR_Wancho,
   CR_Warang_Citi,
   CR_White_Space,
   CR_XID_Continue,
@@ -24837,6 +25183,7 @@ const CodeRanges[] = {
   CR_In_Rumi_Numeral_Symbols,
   CR_In_Old_Sogdian,
   CR_In_Sogdian,
+  CR_In_Elymaic,
   CR_In_Brahmi,
   CR_In_Kaithi,
   CR_In_Sora_Sompeng,
@@ -24857,6 +25204,7 @@ const CodeRanges[] = {
   CR_In_Ahom,
   CR_In_Dogra,
   CR_In_Warang_Citi,
+  CR_In_Nandinagari,
   CR_In_Zanabazar_Square,
   CR_In_Soyombo,
   CR_In_Pau_Cin_Hau,
@@ -24865,10 +25213,12 @@ const CodeRanges[] = {
   CR_In_Masaram_Gondi,
   CR_In_Gunjala_Gondi,
   CR_In_Makasar,
+  CR_In_Tamil_Supplement,
   CR_In_Cuneiform,
   CR_In_Cuneiform_Numbers_and_Punctuation,
   CR_In_Early_Dynastic_Cuneiform,
   CR_In_Egyptian_Hieroglyphs,
+  CR_In_Egyptian_Hieroglyph_Format_Controls,
   CR_In_Anatolian_Hieroglyphs,
   CR_In_Bamum_Supplement,
   CR_In_Mro,
@@ -24881,6 +25231,7 @@ const CodeRanges[] = {
   CR_In_Tangut_Components,
   CR_In_Kana_Supplement,
   CR_In_Kana_Extended_A,
+  CR_In_Small_Kana_Extension,
   CR_In_Nushu,
   CR_In_Duployan,
   CR_In_Shorthand_Format_Controls,
@@ -24893,9 +25244,12 @@ const CodeRanges[] = {
   CR_In_Mathematical_Alphanumeric_Symbols,
   CR_In_Sutton_SignWriting,
   CR_In_Glagolitic_Supplement,
+  CR_In_Nyiakeng_Puachue_Hmong,
+  CR_In_Wancho,
   CR_In_Mende_Kikakui,
   CR_In_Adlam,
   CR_In_Indic_Siyaq_Numbers,
+  CR_In_Ottoman_Siyaq_Numbers,
   CR_In_Arabic_Mathematical_Alphabetic_Symbols,
   CR_In_Mahjong_Tiles,
   CR_In_Domino_Tiles,
@@ -24911,6 +25265,7 @@ const CodeRanges[] = {
   CR_In_Supplemental_Arrows_C,
   CR_In_Supplemental_Symbols_and_Pictographs,
   CR_In_Chess_Symbols,
+  CR_In_Symbols_and_Pictographs_Extended_A,
   CR_In_CJK_Unified_Ideographs_Extension_B,
   CR_In_CJK_Unified_Ideographs_Extension_C,
   CR_In_CJK_Unified_Ideographs_Extension_D,
@@ -24927,12 +25282,12 @@ const CodeRanges[] = {
 #define pool_offset(s) offsetof(struct unicode_prop_name_pool_t, unicode_prop_name_pool_str##s)
 
 
-#define TOTAL_KEYWORDS 784
+#define TOTAL_KEYWORDS 801
 #define MIN_WORD_LENGTH 1
 #define MAX_WORD_LENGTH 44
 #define MIN_HASH_VALUE 10
-#define MAX_HASH_VALUE 5516
-/* maximum key range = 5507, duplicates = 0 */
+#define MAX_HASH_VALUE 5809
+/* maximum key range = 5800, duplicates = 0 */
 
 #ifndef GPERF_DOWNCASE
 #define GPERF_DOWNCASE 1
@@ -24991,32 +25346,32 @@ hash (register const char *str, register size_t len)
 {
   static const unsigned short asso_values[] =
     {
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517,    0, 1387,  107,  399,   14,
-      1024,  783,  831,    7, 1473,   25,  363,   89,    3,   17,
-      1203,  711,   59,  149,  313,  590, 1257,  334,  172, 1559,
-        22,    2,    1, 5517, 5517, 5517, 5517,    0, 1387,  107,
-       399,   14, 1024,  783,  831,    7, 1473,   25,  363,   89,
-         3,   17, 1203,  711,   59,  149,  313,  590, 1257,  334,
-       172, 1559,   22,    2,    1, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517,
-      5517, 5517, 5517, 5517, 5517, 5517, 5517, 5517
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810,    0, 1121,  136,  394,   19,
+       417, 1048,  958,    7,  856,    8,  415,  103,    3,   16,
+      1380, 1068,   56,  181,  326,  631, 1151,  930,  358, 1083,
+         8,    0,    5, 5810, 5810, 5810, 5810,    0, 1121,  136,
+       394,   19,  417, 1048,  958,    7,  856,    8,  415,  103,
+         3,   16, 1380, 1068,   56,  181,  326,  631, 1151,  930,
+       358, 1083,    8,    0,    5, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810,
+      5810, 5810, 5810, 5810, 5810, 5810, 5810, 5810
     };
   register unsigned int hval = (unsigned int )len;
 
@@ -25059,1574 +25414,1608 @@ hash (register const char *str, register size_t len)
 struct unicode_prop_name_pool_t
   {
     char unicode_prop_name_pool_str10[sizeof("lana")];
+    char unicode_prop_name_pool_str14[sizeof("z")];
+    char unicode_prop_name_pool_str16[sizeof("yi")];
     char unicode_prop_name_pool_str17[sizeof("lina")];
-    char unicode_prop_name_pool_str18[sizeof("yi")];
-    char unicode_prop_name_pool_str22[sizeof("cn")];
-    char unicode_prop_name_pool_str24[sizeof("z")];
-    char unicode_prop_name_pool_str25[sizeof("mn")];
-    char unicode_prop_name_pool_str27[sizeof("yiii")];
-    char unicode_prop_name_pool_str30[sizeof("ci")];
-    char unicode_prop_name_pool_str31[sizeof("mani")];
-    char unicode_prop_name_pool_str39[sizeof("lo")];
-    char unicode_prop_name_pool_str40[sizeof("lao")];
-    char unicode_prop_name_pool_str41[sizeof("laoo")];
-    char unicode_prop_name_pool_str45[sizeof("miao")];
-    char unicode_prop_name_pool_str46[sizeof("maka")];
-    char unicode_prop_name_pool_str47[sizeof("me")];
-    char unicode_prop_name_pool_str50[sizeof("co")];
-    char unicode_prop_name_pool_str51[sizeof("loe")];
-    char unicode_prop_name_pool_str68[sizeof("inkannada")];
-    char unicode_prop_name_pool_str70[sizeof("innko")];
-    char unicode_prop_name_pool_str71[sizeof("zzzz")];
-    char unicode_prop_name_pool_str73[sizeof("gran")];
-    char unicode_prop_name_pool_str75[sizeof("pi")];
-    char unicode_prop_name_pool_str79[sizeof("lineara")];
-    char unicode_prop_name_pool_str84[sizeof("cari")];
-    char unicode_prop_name_pool_str85[sizeof("carian")];
-    char unicode_prop_name_pool_str89[sizeof("pe")];
-    char unicode_prop_name_pool_str95[sizeof("po")];
-    char unicode_prop_name_pool_str96[sizeof("kana")];
-    char unicode_prop_name_pool_str99[sizeof("mendekikakui")];
-    char unicode_prop_name_pool_str101[sizeof("geor")];
-    char unicode_prop_name_pool_str102[sizeof("meeteimayek")];
-    char unicode_prop_name_pool_str105[sizeof("mark")];
-    char unicode_prop_name_pool_str107[sizeof("m")];
-    char unicode_prop_name_pool_str109[sizeof("grek")];
+    char unicode_prop_name_pool_str24[sizeof("mn")];
+    char unicode_prop_name_pool_str25[sizeof("yiii")];
+    char unicode_prop_name_pool_str27[sizeof("cn")];
+    char unicode_prop_name_pool_str28[sizeof("maka")];
+    char unicode_prop_name_pool_str30[sizeof("mani")];
+    char unicode_prop_name_pool_str33[sizeof("zzzz")];
+    char unicode_prop_name_pool_str34[sizeof("inkannada")];
+    char unicode_prop_name_pool_str35[sizeof("ci")];
+    char unicode_prop_name_pool_str37[sizeof("lo")];
+    char unicode_prop_name_pool_str38[sizeof("lao")];
+    char unicode_prop_name_pool_str39[sizeof("laoo")];
+    char unicode_prop_name_pool_str43[sizeof("miao")];
+    char unicode_prop_name_pool_str51[sizeof("innko")];
+    char unicode_prop_name_pool_str53[sizeof("co")];
+    char unicode_prop_name_pool_str56[sizeof("me")];
+    char unicode_prop_name_pool_str60[sizeof("loe")];
+    char unicode_prop_name_pool_str70[sizeof("gran")];
+    char unicode_prop_name_pool_str72[sizeof("pi")];
+    char unicode_prop_name_pool_str76[sizeof("lineara")];
+    char unicode_prop_name_pool_str84[sizeof("mark")];
+    char unicode_prop_name_pool_str86[sizeof("cari")];
+    char unicode_prop_name_pool_str87[sizeof("carian")];
+    char unicode_prop_name_pool_str90[sizeof("po")];
+    char unicode_prop_name_pool_str91[sizeof("mendekikakui")];
+    char unicode_prop_name_pool_str94[sizeof("grek")];
+    char unicode_prop_name_pool_str96[sizeof("pe")];
+    char unicode_prop_name_pool_str99[sizeof("meeteimayek")];
+    char unicode_prop_name_pool_str101[sizeof("inkharoshthi")];
+    char unicode_prop_name_pool_str102[sizeof("geor")];
+    char unicode_prop_name_pool_str103[sizeof("greek")];
+    char unicode_prop_name_pool_str107[sizeof("mro")];
+    char unicode_prop_name_pool_str108[sizeof("mroo")];
+    char unicode_prop_name_pool_str110[sizeof("kana")];
     char unicode_prop_name_pool_str111[sizeof("mero")];
-    char unicode_prop_name_pool_str113[sizeof("mro")];
-    char unicode_prop_name_pool_str114[sizeof("mroo")];
-    char unicode_prop_name_pool_str120[sizeof("gonm")];
-    char unicode_prop_name_pool_str122[sizeof("c")];
-    char unicode_prop_name_pool_str132[sizeof("cakm")];
-    char unicode_prop_name_pool_str135[sizeof("greek")];
-    char unicode_prop_name_pool_str138[sizeof("inkharoshthi")];
-    char unicode_prop_name_pool_str141[sizeof("mandaic")];
-    char unicode_prop_name_pool_str143[sizeof("inosmanya")];
-    char unicode_prop_name_pool_str144[sizeof("inarmenian")];
-    char unicode_prop_name_pool_str145[sizeof("inmanichaean")];
-    char unicode_prop_name_pool_str149[sizeof("common")];
-    char unicode_prop_name_pool_str156[sizeof("inmro")];
-    char unicode_prop_name_pool_str157[sizeof("inmiao")];
-    char unicode_prop_name_pool_str160[sizeof("qaai")];
-    char unicode_prop_name_pool_str168[sizeof("inchakma")];
-    char unicode_prop_name_pool_str170[sizeof("cans")];
-    char unicode_prop_name_pool_str181[sizeof("connectorpunctuation")];
-    char unicode_prop_name_pool_str183[sizeof("lm")];
-    char unicode_prop_name_pool_str187[sizeof("marc")];
-    char unicode_prop_name_pool_str188[sizeof("inmyanmar")];
-    char unicode_prop_name_pool_str189[sizeof("vai")];
-    char unicode_prop_name_pool_str190[sizeof("vaii")];
-    char unicode_prop_name_pool_str199[sizeof("inideographicsymbolsandpunctuation")];
-    char unicode_prop_name_pool_str201[sizeof("merc")];
-    char unicode_prop_name_pool_str203[sizeof("inavestan")];
-    char unicode_prop_name_pool_str204[sizeof("incuneiformnumbersandpunctuation")];
-    char unicode_prop_name_pool_str210[sizeof("inmakasar")];
-    char unicode_prop_name_pool_str211[sizeof("inrunic")];
-    char unicode_prop_name_pool_str212[sizeof("incarian")];
-    char unicode_prop_name_pool_str217[sizeof("prependedconcatenationmark")];
-    char unicode_prop_name_pool_str219[sizeof("lc")];
-    char unicode_prop_name_pool_str220[sizeof("inipaextensions")];
-    char unicode_prop_name_pool_str222[sizeof("inkhmer")];
-    char unicode_prop_name_pool_str225[sizeof("perm")];
-    char unicode_prop_name_pool_str227[sizeof("combiningmark")];
-    char unicode_prop_name_pool_str229[sizeof("inahom")];
-    char unicode_prop_name_pool_str230[sizeof("cc")];
-    char unicode_prop_name_pool_str232[sizeof("incherokee")];
-    char unicode_prop_name_pool_str233[sizeof("mc")];
-    char unicode_prop_name_pool_str245[sizeof("insharada")];
-    char unicode_prop_name_pool_str251[sizeof("masaramgondi")];
-    char unicode_prop_name_pool_str252[sizeof("incuneiform")];
-    char unicode_prop_name_pool_str257[sizeof("makasar")];
-    char unicode_prop_name_pool_str260[sizeof("qaac")];
-    char unicode_prop_name_pool_str261[sizeof("inarrows")];
-    char unicode_prop_name_pool_str262[sizeof("armn")];
-    char unicode_prop_name_pool_str265[sizeof("lineseparator")];
-    char unicode_prop_name_pool_str266[sizeof("armi")];
-    char unicode_prop_name_pool_str275[sizeof("pc")];
-    char unicode_prop_name_pool_str276[sizeof("armenian")];
-    char unicode_prop_name_pool_str280[sizeof("insamaritan")];
-    char unicode_prop_name_pool_str290[sizeof("inmasaramgondi")];
-    char unicode_prop_name_pool_str292[sizeof("inzanabazarsquare")];
-    char unicode_prop_name_pool_str293[sizeof("qmark")];
-    char unicode_prop_name_pool_str295[sizeof("inmarchen")];
-    char unicode_prop_name_pool_str301[sizeof("zs")];
-    char unicode_prop_name_pool_str314[sizeof("cs")];
-    char unicode_prop_name_pool_str318[sizeof("incyrillic")];
-    char unicode_prop_name_pool_str319[sizeof("incham")];
-    char unicode_prop_name_pool_str323[sizeof("latn")];
-    char unicode_prop_name_pool_str326[sizeof("inscriptionalparthian")];
-    char unicode_prop_name_pool_str327[sizeof("latin")];
-    char unicode_prop_name_pool_str329[sizeof("ri")];
-    char unicode_prop_name_pool_str336[sizeof("inkhmersymbols")];
-    char unicode_prop_name_pool_str347[sizeof("pcm")];
-    char unicode_prop_name_pool_str349[sizeof("inthaana")];
-    char unicode_prop_name_pool_str355[sizeof("mtei")];
-    char unicode_prop_name_pool_str358[sizeof("insyriac")];
-    char unicode_prop_name_pool_str359[sizeof("ps")];
-    char unicode_prop_name_pool_str361[sizeof("inthai")];
-    char unicode_prop_name_pool_str367[sizeof("l")];
-    char unicode_prop_name_pool_str371[sizeof("innewa")];
-    char unicode_prop_name_pool_str376[sizeof("inkatakana")];
-    char unicode_prop_name_pool_str382[sizeof("ascii")];
-    char unicode_prop_name_pool_str383[sizeof("initialpunctuation")];
-    char unicode_prop_name_pool_str388[sizeof("inkaithi")];
-    char unicode_prop_name_pool_str393[sizeof("arabic")];
-    char unicode_prop_name_pool_str405[sizeof("inideographicdescriptioncharacters")];
-    char unicode_prop_name_pool_str417[sizeof("inlineara")];
-    char unicode_prop_name_pool_str423[sizeof("mand")];
-    char unicode_prop_name_pool_str429[sizeof("mongolian")];
-    char unicode_prop_name_pool_str430[sizeof("inlao")];
-    char unicode_prop_name_pool_str435[sizeof("katakana")];
-    char unicode_prop_name_pool_str437[sizeof("mend")];
-    char unicode_prop_name_pool_str439[sizeof("intakri")];
-    char unicode_prop_name_pool_str441[sizeof("inruminumeralsymbols")];
-    char unicode_prop_name_pool_str442[sizeof("prti")];
-    char unicode_prop_name_pool_str444[sizeof("modi")];
-    char unicode_prop_name_pool_str447[sizeof("inwarangciti")];
-    char unicode_prop_name_pool_str453[sizeof("incjkcompatibilityforms")];
-    char unicode_prop_name_pool_str457[sizeof("inspecials")];
-    char unicode_prop_name_pool_str458[sizeof("incjkcompatibilityideographs")];
-    char unicode_prop_name_pool_str459[sizeof("ideo")];
-    char unicode_prop_name_pool_str462[sizeof("privateuse")];
-    char unicode_prop_name_pool_str463[sizeof("kali")];
-    char unicode_prop_name_pool_str465[sizeof("inmyanmarextendeda")];
-    char unicode_prop_name_pool_str468[sizeof("letter")];
-    char unicode_prop_name_pool_str469[sizeof("brai")];
-    char unicode_prop_name_pool_str470[sizeof("inkanaextendeda")];
-    char unicode_prop_name_pool_str472[sizeof("vs")];
-    char unicode_prop_name_pool_str473[sizeof("xidcontinue")];
-    char unicode_prop_name_pool_str477[sizeof("lower")];
-    char unicode_prop_name_pool_str478[sizeof("inchesssymbols")];
-    char unicode_prop_name_pool_str480[sizeof("control")];
-    char unicode_prop_name_pool_str487[sizeof("inadlam")];
-    char unicode_prop_name_pool_str488[sizeof("grlink")];
-    char unicode_prop_name_pool_str495[sizeof("knda")];
-    char unicode_prop_name_pool_str496[sizeof("inmeeteimayek")];
-    char unicode_prop_name_pool_str498[sizeof("kannada")];
-    char unicode_prop_name_pool_str511[sizeof("inmiscellaneousmathematicalsymbolsa")];
-    char unicode_prop_name_pool_str515[sizeof("palm")];
-    char unicode_prop_name_pool_str516[sizeof("inlycian")];
-    char unicode_prop_name_pool_str517[sizeof("intransportandmapsymbols")];
-    char unicode_prop_name_pool_str526[sizeof("inoldnortharabian")];
-    char unicode_prop_name_pool_str532[sizeof("inemoticons")];
-    char unicode_prop_name_pool_str533[sizeof("letternumber")];
-    char unicode_prop_name_pool_str536[sizeof("inmodi")];
-    char unicode_prop_name_pool_str539[sizeof("xidc")];
-    char unicode_prop_name_pool_str543[sizeof("lowercase")];
-    char unicode_prop_name_pool_str545[sizeof("inancientsymbols")];
-    char unicode_prop_name_pool_str548[sizeof("cwcm")];
-    char unicode_prop_name_pool_str553[sizeof("inmedefaidrin")];
-    char unicode_prop_name_pool_str556[sizeof("psalterpahlavi")];
-    char unicode_prop_name_pool_str564[sizeof("gothic")];
-    char unicode_prop_name_pool_str565[sizeof("inmendekikakui")];
-    char unicode_prop_name_pool_str567[sizeof("brahmi")];
-    char unicode_prop_name_pool_str569[sizeof("inolditalic")];
-    char unicode_prop_name_pool_str580[sizeof("inmalayalam")];
-    char unicode_prop_name_pool_str581[sizeof("xids")];
-    char unicode_prop_name_pool_str582[sizeof("incommonindicnumberforms")];
-    char unicode_prop_name_pool_str588[sizeof("meroiticcursive")];
-    char unicode_prop_name_pool_str589[sizeof("inlinearbideograms")];
-    char unicode_prop_name_pool_str597[sizeof("patternwhitespace")];
-    char unicode_prop_name_pool_str604[sizeof("insundanese")];
-    char unicode_prop_name_pool_str606[sizeof("joinc")];
-    char unicode_prop_name_pool_str611[sizeof("inoldsogdian")];
-    char unicode_prop_name_pool_str619[sizeof("incjkstrokes")];
-    char unicode_prop_name_pool_str626[sizeof("so")];
-    char unicode_prop_name_pool_str630[sizeof("patternsyntax")];
-    char unicode_prop_name_pool_str631[sizeof("lt")];
-    char unicode_prop_name_pool_str632[sizeof("incjkcompatibilityideographssupplement")];
-    char unicode_prop_name_pool_str635[sizeof("inmandaic")];
-    char unicode_prop_name_pool_str636[sizeof("insylotinagri")];
-    char unicode_prop_name_pool_str641[sizeof("idc")];
-    char unicode_prop_name_pool_str642[sizeof("sk")];
-    char unicode_prop_name_pool_str656[sizeof("alnum")];
-    char unicode_prop_name_pool_str670[sizeof("sora")];
-    char unicode_prop_name_pool_str671[sizeof("bamum")];
-    char unicode_prop_name_pool_str672[sizeof("inoldsoutharabian")];
-    char unicode_prop_name_pool_str675[sizeof("patws")];
-    char unicode_prop_name_pool_str676[sizeof("inmusicalsymbols")];
-    char unicode_prop_name_pool_str690[sizeof("idsbinaryoperator")];
-    char unicode_prop_name_pool_str699[sizeof("indominotiles")];
-    char unicode_prop_name_pool_str701[sizeof("bass")];
-    char unicode_prop_name_pool_str703[sizeof("innewtailue")];
-    char unicode_prop_name_pool_str705[sizeof("ital")];
-    char unicode_prop_name_pool_str707[sizeof("inmiscellaneoussymbols")];
-    char unicode_prop_name_pool_str710[sizeof("inopticalcharacterrecognition")];
-    char unicode_prop_name_pool_str711[sizeof("grext")];
-    char unicode_prop_name_pool_str712[sizeof("inkanasupplement")];
-    char unicode_prop_name_pool_str716[sizeof("inmiscellaneoussymbolsandarrows")];
-    char unicode_prop_name_pool_str721[sizeof("inmiscellaneoussymbolsandpictographs")];
-    char unicode_prop_name_pool_str723[sizeof("unknown")];
-    char unicode_prop_name_pool_str724[sizeof("inmodifiertoneletters")];
-    char unicode_prop_name_pool_str725[sizeof("ids")];
-    char unicode_prop_name_pool_str729[sizeof("zl")];
-    char unicode_prop_name_pool_str730[sizeof("inlatinextendeda")];
-    char unicode_prop_name_pool_str731[sizeof("ll")];
-    char unicode_prop_name_pool_str732[sizeof("intaile")];
-    char unicode_prop_name_pool_str738[sizeof("incontrolpictures")];
-    char unicode_prop_name_pool_str740[sizeof("s")];
-    char unicode_prop_name_pool_str741[sizeof("batk")];
-    char unicode_prop_name_pool_str742[sizeof("samr")];
-    char unicode_prop_name_pool_str753[sizeof("lisu")];
-    char unicode_prop_name_pool_str756[sizeof("print")];
-    char unicode_prop_name_pool_str757[sizeof("samaritan")];
-    char unicode_prop_name_pool_str758[sizeof("inlatinextendede")];
-    char unicode_prop_name_pool_str759[sizeof("intaitham")];
-    char unicode_prop_name_pool_str760[sizeof("pauc")];
-    char unicode_prop_name_pool_str767[sizeof("batak")];
-    char unicode_prop_name_pool_str770[sizeof("sm")];
-    char unicode_prop_name_pool_str773[sizeof("bali")];
-    char unicode_prop_name_pool_str778[sizeof("inancientgreekmusicalnotation")];
-    char unicode_prop_name_pool_str779[sizeof("uideo")];
-    char unicode_prop_name_pool_str781[sizeof("intaixuanjingsymbols")];
-    char unicode_prop_name_pool_str782[sizeof("oriya")];
-    char unicode_prop_name_pool_str791[sizeof("incyrillicextendeda")];
-    char unicode_prop_name_pool_str793[sizeof("bengali")];
-    char unicode_prop_name_pool_str794[sizeof("inugaritic")];
-    char unicode_prop_name_pool_str801[sizeof("balinese")];
-    char unicode_prop_name_pool_str806[sizeof("sc")];
-    char unicode_prop_name_pool_str807[sizeof("intamil")];
-    char unicode_prop_name_pool_str808[sizeof("inlydian")];
-    char unicode_prop_name_pool_str809[sizeof("inmultani")];
-    char unicode_prop_name_pool_str814[sizeof("gong")];
-    char unicode_prop_name_pool_str817[sizeof("blank")];
-    char unicode_prop_name_pool_str823[sizeof("ingrantha")];
-    char unicode_prop_name_pool_str824[sizeof("mong")];
-    char unicode_prop_name_pool_str833[sizeof("inearlydynasticcuneiform")];
-    char unicode_prop_name_pool_str838[sizeof("insaurashtra")];
-    char unicode_prop_name_pool_str839[sizeof("georgian")];
-    char unicode_prop_name_pool_str846[sizeof("zinh")];
-    char unicode_prop_name_pool_str849[sizeof("inosage")];
-    char unicode_prop_name_pool_str854[sizeof("ingeneralpunctuation")];
-    char unicode_prop_name_pool_str857[sizeof("incaucasianalbanian")];
-    char unicode_prop_name_pool_str859[sizeof("pd")];
-    char unicode_prop_name_pool_str866[sizeof("canadianaboriginal")];
-    char unicode_prop_name_pool_str867[sizeof("glagolitic")];
-    char unicode_prop_name_pool_str870[sizeof("inspacingmodifierletters")];
-    char unicode_prop_name_pool_str871[sizeof("idcontinue")];
-    char unicode_prop_name_pool_str875[sizeof("inoldturkic")];
-    char unicode_prop_name_pool_str884[sizeof("plrd")];
-    char unicode_prop_name_pool_str885[sizeof("joincontrol")];
-    char unicode_prop_name_pool_str890[sizeof("idst")];
-    char unicode_prop_name_pool_str892[sizeof("inhanifirohingya")];
-    char unicode_prop_name_pool_str893[sizeof("osage")];
-    char unicode_prop_name_pool_str898[sizeof("incyrillicextendedc")];
-    char unicode_prop_name_pool_str900[sizeof("ingeorgian")];
-    char unicode_prop_name_pool_str902[sizeof("unassigned")];
-    char unicode_prop_name_pool_str907[sizeof("lowercaseletter")];
-    char unicode_prop_name_pool_str908[sizeof("emoji")];
-    char unicode_prop_name_pool_str912[sizeof("indeseret")];
-    char unicode_prop_name_pool_str916[sizeof("inancientgreeknumbers")];
-    char unicode_prop_name_pool_str917[sizeof("inmongolian")];
-    char unicode_prop_name_pool_str922[sizeof("cher")];
-    char unicode_prop_name_pool_str923[sizeof("cherokee")];
-    char unicode_prop_name_pool_str928[sizeof("inhiragana")];
-    char unicode_prop_name_pool_str930[sizeof("phoenician")];
-    char unicode_prop_name_pool_str931[sizeof("marchen")];
-    char unicode_prop_name_pool_str937[sizeof("xsux")];
-    char unicode_prop_name_pool_str938[sizeof("cham")];
-    char unicode_prop_name_pool_str940[sizeof("chakma")];
-    char unicode_prop_name_pool_str943[sizeof("inmeeteimayekextensions")];
-    char unicode_prop_name_pool_str944[sizeof("inlatinextendedc")];
-    char unicode_prop_name_pool_str947[sizeof("kaithi")];
-    char unicode_prop_name_pool_str951[sizeof("graphemebase")];
-    char unicode_prop_name_pool_str952[sizeof("idstart")];
-    char unicode_prop_name_pool_str953[sizeof("osma")];
-    char unicode_prop_name_pool_str962[sizeof("adlm")];
-    char unicode_prop_name_pool_str965[sizeof("inmahajani")];
-    char unicode_prop_name_pool_str966[sizeof("cased")];
-    char unicode_prop_name_pool_str969[sizeof("runr")];
-    char unicode_prop_name_pool_str970[sizeof("sinhala")];
-    char unicode_prop_name_pool_str971[sizeof("manichaean")];
-    char unicode_prop_name_pool_str972[sizeof("inogham")];
-    char unicode_prop_name_pool_str973[sizeof("graphemelink")];
-    char unicode_prop_name_pool_str976[sizeof("ingurmukhi")];
-    char unicode_prop_name_pool_str977[sizeof("cwt")];
-    char unicode_prop_name_pool_str982[sizeof("khojki")];
-    char unicode_prop_name_pool_str983[sizeof("khar")];
-    char unicode_prop_name_pool_str987[sizeof("multani")];
-    char unicode_prop_name_pool_str989[sizeof("gunjalagondi")];
-    char unicode_prop_name_pool_str995[sizeof("casedletter")];
-    char unicode_prop_name_pool_str997[sizeof("inethiopic")];
-    char unicode_prop_name_pool_str999[sizeof("inolchiki")];
-    char unicode_prop_name_pool_str1000[sizeof("variationselector")];
-    char unicode_prop_name_pool_str1003[sizeof("sind")];
-    char unicode_prop_name_pool_str1004[sizeof("incountingrodnumerals")];
-    char unicode_prop_name_pool_str1007[sizeof("logicalorderexception")];
-    char unicode_prop_name_pool_str1020[sizeof("insinhala")];
-    char unicode_prop_name_pool_str1024[sizeof("bidic")];
-    char unicode_prop_name_pool_str1034[sizeof("dia")];
-    char unicode_prop_name_pool_str1035[sizeof("insorasompeng")];
-    char unicode_prop_name_pool_str1036[sizeof("anatolianhieroglyphs")];
-    char unicode_prop_name_pool_str1038[sizeof("inlowsurrogates")];
-    char unicode_prop_name_pool_str1040[sizeof("di")];
-    char unicode_prop_name_pool_str1048[sizeof("ahom")];
-    char unicode_prop_name_pool_str1050[sizeof("inenclosedalphanumerics")];
-    char unicode_prop_name_pool_str1052[sizeof("adlam")];
-    char unicode_prop_name_pool_str1060[sizeof("inkhudawadi")];
-    char unicode_prop_name_pool_str1061[sizeof("cntrl")];
-    char unicode_prop_name_pool_str1062[sizeof("xidstart")];
-    char unicode_prop_name_pool_str1067[sizeof("xdigit")];
-    char unicode_prop_name_pool_str1069[sizeof("phnx")];
-    char unicode_prop_name_pool_str1071[sizeof("emojimodifier")];
-    char unicode_prop_name_pool_str1072[sizeof("khmr")];
-    char unicode_prop_name_pool_str1073[sizeof("insiddham")];
-    char unicode_prop_name_pool_str1077[sizeof("cwl")];
-    char unicode_prop_name_pool_str1082[sizeof("bamu")];
-    char unicode_prop_name_pool_str1086[sizeof("ingreekandcoptic")];
-    char unicode_prop_name_pool_str1087[sizeof("inmiscellaneoustechnical")];
-    char unicode_prop_name_pool_str1100[sizeof("sterm")];
-    char unicode_prop_name_pool_str1101[sizeof("inscriptionalpahlavi")];
-    char unicode_prop_name_pool_str1102[sizeof("inlatinextendedadditional")];
-    char unicode_prop_name_pool_str1103[sizeof("kharoshthi")];
-    char unicode_prop_name_pool_str1125[sizeof("runic")];
-    char unicode_prop_name_pool_str1127[sizeof("odi")];
-    char unicode_prop_name_pool_str1128[sizeof("ahex")];
-    char unicode_prop_name_pool_str1132[sizeof("khmer")];
-    char unicode_prop_name_pool_str1138[sizeof("incyrillicsupplement")];
-    char unicode_prop_name_pool_str1145[sizeof("incherokeesupplement")];
-    char unicode_prop_name_pool_str1153[sizeof("inmeroitichieroglyphs")];
-    char unicode_prop_name_pool_str1156[sizeof("enclosingmark")];
-    char unicode_prop_name_pool_str1157[sizeof("glag")];
-    char unicode_prop_name_pool_str1160[sizeof("inkangxiradicals")];
-    char unicode_prop_name_pool_str1165[sizeof("math")];
-    char unicode_prop_name_pool_str1166[sizeof("quotationmark")];
-    char unicode_prop_name_pool_str1172[sizeof("goth")];
-    char unicode_prop_name_pool_str1179[sizeof("emojimodifierbase")];
-    char unicode_prop_name_pool_str1180[sizeof("ugar")];
-    char unicode_prop_name_pool_str1185[sizeof("lu")];
-    char unicode_prop_name_pool_str1189[sizeof("radical")];
-    char unicode_prop_name_pool_str1198[sizeof("incjkunifiedideographsextensiona")];
-    char unicode_prop_name_pool_str1203[sizeof("beng")];
-    char unicode_prop_name_pool_str1205[sizeof("braille")];
-    char unicode_prop_name_pool_str1207[sizeof("n")];
-    char unicode_prop_name_pool_str1209[sizeof("sundanese")];
-    char unicode_prop_name_pool_str1210[sizeof("olck")];
-    char unicode_prop_name_pool_str1212[sizeof("incjkunifiedideographsextensione")];
-    char unicode_prop_name_pool_str1213[sizeof("diacritic")];
-    char unicode_prop_name_pool_str1217[sizeof("grantha")];
-    char unicode_prop_name_pool_str1223[sizeof("inenclosedalphanumericsupplement")];
-    char unicode_prop_name_pool_str1227[sizeof("olchiki")];
-    char unicode_prop_name_pool_str1228[sizeof("oidc")];
-    char unicode_prop_name_pool_str1229[sizeof("olower")];
-    char unicode_prop_name_pool_str1230[sizeof("regionalindicator")];
-    char unicode_prop_name_pool_str1239[sizeof("no")];
-    char unicode_prop_name_pool_str1240[sizeof("intirhuta")];
-    char unicode_prop_name_pool_str1242[sizeof("inhatran")];
-    char unicode_prop_name_pool_str1243[sizeof("saur")];
-    char unicode_prop_name_pool_str1244[sizeof("kthi")];
-    char unicode_prop_name_pool_str1246[sizeof("ingeometricshapes")];
-    char unicode_prop_name_pool_str1250[sizeof("guru")];
-    char unicode_prop_name_pool_str1256[sizeof("ingreekextended")];
-    char unicode_prop_name_pool_str1258[sizeof("paucinhau")];
-    char unicode_prop_name_pool_str1260[sizeof("xpeo")];
-    char unicode_prop_name_pool_str1263[sizeof("p")];
-    char unicode_prop_name_pool_str1264[sizeof("phli")];
-    char unicode_prop_name_pool_str1265[sizeof("nko")];
-    char unicode_prop_name_pool_str1266[sizeof("nkoo")];
-    char unicode_prop_name_pool_str1270[sizeof("oids")];
-    char unicode_prop_name_pool_str1276[sizeof("indogra")];
-    char unicode_prop_name_pool_str1280[sizeof("inphoenician")];
-    char unicode_prop_name_pool_str1283[sizeof("punct")];
-    char unicode_prop_name_pool_str1284[sizeof("limbu")];
-    char unicode_prop_name_pool_str1286[sizeof("gurmukhi")];
-    char unicode_prop_name_pool_str1287[sizeof("mult")];
-    char unicode_prop_name_pool_str1293[sizeof("brah")];
-    char unicode_prop_name_pool_str1297[sizeof("taile")];
-    char unicode_prop_name_pool_str1299[sizeof("inoldhungarian")];
-    char unicode_prop_name_pool_str1301[sizeof("takri")];
-    char unicode_prop_name_pool_str1303[sizeof("bidicontrol")];
-    char unicode_prop_name_pool_str1304[sizeof("invai")];
-    char unicode_prop_name_pool_str1305[sizeof("incjkunifiedideographsextensionc")];
-    char unicode_prop_name_pool_str1314[sizeof("inenclosedideographicsupplement")];
-    char unicode_prop_name_pool_str1320[sizeof("decimalnumber")];
-    char unicode_prop_name_pool_str1331[sizeof("lepc")];
-    char unicode_prop_name_pool_str1333[sizeof("inherited")];
-    char unicode_prop_name_pool_str1337[sizeof("incjkunifiedideographs")];
-    char unicode_prop_name_pool_str1338[sizeof("graphemeextend")];
-    char unicode_prop_name_pool_str1339[sizeof("saurashtra")];
-    char unicode_prop_name_pool_str1343[sizeof("caseignorable")];
-    char unicode_prop_name_pool_str1344[sizeof("emojicomponent")];
-    char unicode_prop_name_pool_str1345[sizeof("takr")];
-    char unicode_prop_name_pool_str1360[sizeof("inanatolianhieroglyphs")];
-    char unicode_prop_name_pool_str1363[sizeof("inornamentaldingbats")];
-    char unicode_prop_name_pool_str1366[sizeof("inphaistosdisc")];
-    char unicode_prop_name_pool_str1371[sizeof("insogdian")];
-    char unicode_prop_name_pool_str1372[sizeof("indingbats")];
-    char unicode_prop_name_pool_str1390[sizeof("sd")];
-    char unicode_prop_name_pool_str1395[sizeof("zanb")];
-    char unicode_prop_name_pool_str1397[sizeof("insinhalaarchaicnumbers")];
-    char unicode_prop_name_pool_str1398[sizeof("ideographic")];
-    char unicode_prop_name_pool_str1399[sizeof("sidd")];
-    char unicode_prop_name_pool_str1404[sizeof("linb")];
-    char unicode_prop_name_pool_str1407[sizeof("sogdian")];
-    char unicode_prop_name_pool_str1408[sizeof("bhks")];
-    char unicode_prop_name_pool_str1411[sizeof("sogo")];
-    char unicode_prop_name_pool_str1420[sizeof("bhaiksuki")];
-    char unicode_prop_name_pool_str1423[sizeof("term")];
-    char unicode_prop_name_pool_str1425[sizeof("insundanesesupplement")];
-    char unicode_prop_name_pool_str1428[sizeof("intags")];
-    char unicode_prop_name_pool_str1432[sizeof("innabataean")];
-    char unicode_prop_name_pool_str1435[sizeof("sinh")];
-    char unicode_prop_name_pool_str1438[sizeof("shavian")];
-    char unicode_prop_name_pool_str1440[sizeof("inbhaiksuki")];
-    char unicode_prop_name_pool_str1441[sizeof("inelbasan")];
-    char unicode_prop_name_pool_str1442[sizeof("inimperialaramaic")];
-    char unicode_prop_name_pool_str1446[sizeof("inshavian")];
-    char unicode_prop_name_pool_str1448[sizeof("intangut")];
-    char unicode_prop_name_pool_str1451[sizeof("inshorthandformatcontrols")];
-    char unicode_prop_name_pool_str1454[sizeof("inkanbun")];
-    char unicode_prop_name_pool_str1455[sizeof("sentenceterminal")];
-    char unicode_prop_name_pool_str1458[sizeof("medf")];
-    char unicode_prop_name_pool_str1461[sizeof("coptic")];
-    char unicode_prop_name_pool_str1466[sizeof("linearb")];
-    char unicode_prop_name_pool_str1468[sizeof("medefaidrin")];
-    char unicode_prop_name_pool_str1470[sizeof("inethiopicextendeda")];
-    char unicode_prop_name_pool_str1478[sizeof("inhanunoo")];
-    char unicode_prop_name_pool_str1482[sizeof("han")];
-    char unicode_prop_name_pool_str1483[sizeof("cwcf")];
-    char unicode_prop_name_pool_str1487[sizeof("hani")];
-    char unicode_prop_name_pool_str1490[sizeof("limb")];
-    char unicode_prop_name_pool_str1497[sizeof("hano")];
-    char unicode_prop_name_pool_str1504[sizeof("ingeometricshapesextended")];
-    char unicode_prop_name_pool_str1520[sizeof("hanunoo")];
-    char unicode_prop_name_pool_str1528[sizeof("inlatinextendedd")];
-    char unicode_prop_name_pool_str1530[sizeof("inarabic")];
-    char unicode_prop_name_pool_str1531[sizeof("cwu")];
-    char unicode_prop_name_pool_str1534[sizeof("asciihexdigit")];
-    char unicode_prop_name_pool_str1537[sizeof("ininscriptionalparthian")];
-    char unicode_prop_name_pool_str1539[sizeof("format")];
-    char unicode_prop_name_pool_str1540[sizeof("ininscriptionalpahlavi")];
-    char unicode_prop_name_pool_str1543[sizeof("hira")];
-    char unicode_prop_name_pool_str1549[sizeof("dsrt")];
-    char unicode_prop_name_pool_str1551[sizeof("copt")];
-    char unicode_prop_name_pool_str1552[sizeof("ugaritic")];
-    char unicode_prop_name_pool_str1555[sizeof("newa")];
-    char unicode_prop_name_pool_str1557[sizeof("arab")];
-    char unicode_prop_name_pool_str1558[sizeof("inkhojki")];
-    char unicode_prop_name_pool_str1559[sizeof("oldpersian")];
-    char unicode_prop_name_pool_str1569[sizeof("punctuation")];
-    char unicode_prop_name_pool_str1580[sizeof("deseret")];
-    char unicode_prop_name_pool_str1581[sizeof("newtailue")];
-    char unicode_prop_name_pool_str1582[sizeof("newline")];
-    char unicode_prop_name_pool_str1584[sizeof("ext")];
-    char unicode_prop_name_pool_str1586[sizeof("sund")];
-    char unicode_prop_name_pool_str1587[sizeof("ogam")];
-    char unicode_prop_name_pool_str1589[sizeof("inbasiclatin")];
-    char unicode_prop_name_pool_str1590[sizeof("inarabicpresentationformsa")];
-    char unicode_prop_name_pool_str1593[sizeof("cprt")];
-    char unicode_prop_name_pool_str1594[sizeof("imperialaramaic")];
-    char unicode_prop_name_pool_str1597[sizeof("incjkunifiedideographsextensiond")];
-    char unicode_prop_name_pool_str1598[sizeof("assigned")];
-    char unicode_prop_name_pool_str1605[sizeof("taiviet")];
-    char unicode_prop_name_pool_str1608[sizeof("innushu")];
-    char unicode_prop_name_pool_str1618[sizeof("inoriya")];
-    char unicode_prop_name_pool_str1622[sizeof("wara")];
-    char unicode_prop_name_pool_str1624[sizeof("java")];
-    char unicode_prop_name_pool_str1626[sizeof("sorasompeng")];
-    char unicode_prop_name_pool_str1628[sizeof("inkayahli")];
-    char unicode_prop_name_pool_str1630[sizeof("orkh")];
-    char unicode_prop_name_pool_str1633[sizeof("closepunctuation")];
-    char unicode_prop_name_pool_str1636[sizeof("grbase")];
-    char unicode_prop_name_pool_str1638[sizeof("tale")];
-    char unicode_prop_name_pool_str1640[sizeof("bopo")];
-    char unicode_prop_name_pool_str1659[sizeof("javanese")];
-    char unicode_prop_name_pool_str1661[sizeof("osge")];
-    char unicode_prop_name_pool_str1662[sizeof("oldpermic")];
-    char unicode_prop_name_pool_str1665[sizeof("inoldpersian")];
-    char unicode_prop_name_pool_str1677[sizeof("phag")];
-    char unicode_prop_name_pool_str1678[sizeof("alpha")];
-    char unicode_prop_name_pool_str1680[sizeof("lyci")];
-    char unicode_prop_name_pool_str1681[sizeof("lycian")];
-    char unicode_prop_name_pool_str1687[sizeof("inkatakanaphoneticextensions")];
-    char unicode_prop_name_pool_str1690[sizeof("incjksymbolsandpunctuation")];
-    char unicode_prop_name_pool_str1691[sizeof("inhanguljamo")];
-    char unicode_prop_name_pool_str1697[sizeof("inhanguljamoextendeda")];
-    char unicode_prop_name_pool_str1701[sizeof("avestan")];
-    char unicode_prop_name_pool_str1708[sizeof("inpalmyrene")];
-    char unicode_prop_name_pool_str1709[sizeof("inlepcha")];
-    char unicode_prop_name_pool_str1710[sizeof("indevanagari")];
-    char unicode_prop_name_pool_str1713[sizeof("taml")];
-    char unicode_prop_name_pool_str1714[sizeof("sgnw")];
-    char unicode_prop_name_pool_str1717[sizeof("inblockelements")];
-    char unicode_prop_name_pool_str1726[sizeof("inlisu")];
-    char unicode_prop_name_pool_str1728[sizeof("mymr")];
-    char unicode_prop_name_pool_str1731[sizeof("myanmar")];
-    char unicode_prop_name_pool_str1733[sizeof("graph")];
-    char unicode_prop_name_pool_str1736[sizeof("cuneiform")];
-    char unicode_prop_name_pool_str1737[sizeof("extender")];
-    char unicode_prop_name_pool_str1741[sizeof("inphoneticextensions")];
-    char unicode_prop_name_pool_str1749[sizeof("inmongoliansupplement")];
-    char unicode_prop_name_pool_str1750[sizeof("bopomofo")];
-    char unicode_prop_name_pool_str1754[sizeof("intibetan")];
-    char unicode_prop_name_pool_str1758[sizeof("innumberforms")];
-    char unicode_prop_name_pool_str1759[sizeof("shaw")];
-    char unicode_prop_name_pool_str1760[sizeof("inbatak")];
-    char unicode_prop_name_pool_str1765[sizeof("inoldpermic")];
-    char unicode_prop_name_pool_str1766[sizeof("incoptic")];
-    char unicode_prop_name_pool_str1776[sizeof("invariationselectors")];
-    char unicode_prop_name_pool_str1779[sizeof("insoyombo")];
-    char unicode_prop_name_pool_str1782[sizeof("terminalpunctuation")];
-    char unicode_prop_name_pool_str1783[sizeof("bugi")];
-    char unicode_prop_name_pool_str1791[sizeof("insyriacsupplement")];
-    char unicode_prop_name_pool_str1793[sizeof("sogd")];
-    char unicode_prop_name_pool_str1798[sizeof("hatran")];
-    char unicode_prop_name_pool_str1807[sizeof("inbyzantinemusicalsymbols")];
-    char unicode_prop_name_pool_str1809[sizeof("inbalinese")];
-    char unicode_prop_name_pool_str1811[sizeof("buginese")];
-    char unicode_prop_name_pool_str1815[sizeof("innoblock")];
-    char unicode_prop_name_pool_str1817[sizeof("inethiopicsupplement")];
-    char unicode_prop_name_pool_str1820[sizeof("inglagolitic")];
-    char unicode_prop_name_pool_str1824[sizeof("ingeorgiansupplement")];
-    char unicode_prop_name_pool_str1826[sizeof("space")];
-    char unicode_prop_name_pool_str1827[sizeof("sharada")];
-    char unicode_prop_name_pool_str1829[sizeof("dogra")];
-    char unicode_prop_name_pool_str1830[sizeof("avst")];
-    char unicode_prop_name_pool_str1834[sizeof("hex")];
-    char unicode_prop_name_pool_str1837[sizeof("inunifiedcanadianaboriginalsyllabics")];
-    char unicode_prop_name_pool_str1838[sizeof("inverticalforms")];
-    char unicode_prop_name_pool_str1839[sizeof("spacingmark")];
-    char unicode_prop_name_pool_str1845[sizeof("inarabicextendeda")];
-    char unicode_prop_name_pool_str1849[sizeof("hatr")];
-    char unicode_prop_name_pool_str1850[sizeof("modifierletter")];
-    char unicode_prop_name_pool_str1852[sizeof("inmyanmarextendedb")];
-    char unicode_prop_name_pool_str1858[sizeof("incjkcompatibility")];
-    char unicode_prop_name_pool_str1860[sizeof("khudawadi")];
-    char unicode_prop_name_pool_str1863[sizeof("invedicextensions")];
-    char unicode_prop_name_pool_str1868[sizeof("inethiopicextended")];
-    char unicode_prop_name_pool_str1875[sizeof("ingeorgianextended")];
-    char unicode_prop_name_pool_str1883[sizeof("shrd")];
-    char unicode_prop_name_pool_str1887[sizeof("dogr")];
-    char unicode_prop_name_pool_str1892[sizeof("intelugu")];
-    char unicode_prop_name_pool_str1898[sizeof("inmiscellaneousmathematicalsymbolsb")];
-    char unicode_prop_name_pool_str1899[sizeof("inmayannumerals")];
-    char unicode_prop_name_pool_str1902[sizeof("olditalic")];
-    char unicode_prop_name_pool_str1904[sizeof("inbraillepatterns")];
-    char unicode_prop_name_pool_str1911[sizeof("oalpha")];
-    char unicode_prop_name_pool_str1913[sizeof("inmathematicalalphanumericsymbols")];
-    char unicode_prop_name_pool_str1915[sizeof("inphoneticextensionssupplement")];
-    char unicode_prop_name_pool_str1916[sizeof("intagalog")];
-    char unicode_prop_name_pool_str1921[sizeof("insuttonsignwriting")];
-    char unicode_prop_name_pool_str1923[sizeof("siddham")];
-    char unicode_prop_name_pool_str1927[sizeof("intaiviet")];
-    char unicode_prop_name_pool_str1931[sizeof("nl")];
-    char unicode_prop_name_pool_str1934[sizeof("separator")];
-    char unicode_prop_name_pool_str1938[sizeof("ethi")];
-    char unicode_prop_name_pool_str1943[sizeof("patsyn")];
-    char unicode_prop_name_pool_str1948[sizeof("rohg")];
-    char unicode_prop_name_pool_str1950[sizeof("invariationselectorssupplement")];
-    char unicode_prop_name_pool_str1956[sizeof("inyiradicals")];
-    char unicode_prop_name_pool_str1957[sizeof("otheridcontinue")];
-    char unicode_prop_name_pool_str1964[sizeof("idsb")];
-    char unicode_prop_name_pool_str1965[sizeof("insmallformvariants")];
-    char unicode_prop_name_pool_str1972[sizeof("lydi")];
-    char unicode_prop_name_pool_str1973[sizeof("lydian")];
-    char unicode_prop_name_pool_str1978[sizeof("other")];
-    char unicode_prop_name_pool_str1987[sizeof("othernumber")];
-    char unicode_prop_name_pool_str1999[sizeof("cyrl")];
-    char unicode_prop_name_pool_str2003[sizeof("nd")];
-    char unicode_prop_name_pool_str2006[sizeof("induployan")];
-    char unicode_prop_name_pool_str2008[sizeof("dash")];
-    char unicode_prop_name_pool_str2010[sizeof("zanabazarsquare")];
-    char unicode_prop_name_pool_str2016[sizeof("incopticepactnumbers")];
-    char unicode_prop_name_pool_str2020[sizeof("number")];
-    char unicode_prop_name_pool_str2023[sizeof("inphagspa")];
-    char unicode_prop_name_pool_str2032[sizeof("mlym")];
-    char unicode_prop_name_pool_str2037[sizeof("malayalam")];
-    char unicode_prop_name_pool_str2038[sizeof("word")];
-    char unicode_prop_name_pool_str2040[sizeof("sarb")];
-    char unicode_prop_name_pool_str2047[sizeof("tang")];
-    char unicode_prop_name_pool_str2050[sizeof("otheralphabetic")];
-    char unicode_prop_name_pool_str2051[sizeof("tagbanwa")];
-    char unicode_prop_name_pool_str2057[sizeof("lepcha")];
-    char unicode_prop_name_pool_str2062[sizeof("surrogate")];
-    char unicode_prop_name_pool_str2063[sizeof("palmyrene")];
-    char unicode_prop_name_pool_str2064[sizeof("cf")];
-    char unicode_prop_name_pool_str2070[sizeof("ingothic")];
-    char unicode_prop_name_pool_str2071[sizeof("inmeroiticcursive")];
-    char unicode_prop_name_pool_str2077[sizeof("tamil")];
-    char unicode_prop_name_pool_str2084[sizeof("oldhungarian")];
-    char unicode_prop_name_pool_str2085[sizeof("titlecaseletter")];
-    char unicode_prop_name_pool_str2092[sizeof("thaa")];
-    char unicode_prop_name_pool_str2095[sizeof("inunifiedcanadianaboriginalsyllabicsextended")];
-    char unicode_prop_name_pool_str2097[sizeof("thaana")];
-    char unicode_prop_name_pool_str2099[sizeof("thai")];
-    char unicode_prop_name_pool_str2109[sizeof("pf")];
-    char unicode_prop_name_pool_str2110[sizeof("extendedpictographic")];
-    char unicode_prop_name_pool_str2121[sizeof("incjkradicalssupplement")];
-    char unicode_prop_name_pool_str2124[sizeof("indevanagariextended")];
-    char unicode_prop_name_pool_str2133[sizeof("gujr")];
-    char unicode_prop_name_pool_str2144[sizeof("gujarati")];
-    char unicode_prop_name_pool_str2158[sizeof("tirh")];
-    char unicode_prop_name_pool_str2160[sizeof("caucasianalbanian")];
-    char unicode_prop_name_pool_str2178[sizeof("incyrillicextendedb")];
-    char unicode_prop_name_pool_str2187[sizeof("soyo")];
-    char unicode_prop_name_pool_str2188[sizeof("inhangulsyllables")];
-    char unicode_prop_name_pool_str2190[sizeof("inbamum")];
-    char unicode_prop_name_pool_str2191[sizeof("taitham")];
-    char unicode_prop_name_pool_str2196[sizeof("meroitichieroglyphs")];
-    char unicode_prop_name_pool_str2213[sizeof("intifinagh")];
-    char unicode_prop_name_pool_str2214[sizeof("talu")];
-    char unicode_prop_name_pool_str2217[sizeof("inbengali")];
-    char unicode_prop_name_pool_str2222[sizeof("incjkunifiedideographsextensionf")];
-    char unicode_prop_name_pool_str2223[sizeof("buhd")];
-    char unicode_prop_name_pool_str2228[sizeof("telu")];
-    char unicode_prop_name_pool_str2229[sizeof("inbuginese")];
-    char unicode_prop_name_pool_str2232[sizeof("idstrinaryoperator")];
-    char unicode_prop_name_pool_str2233[sizeof("tirhuta")];
-    char unicode_prop_name_pool_str2238[sizeof("oldturkic")];
-    char unicode_prop_name_pool_str2245[sizeof("incombiningdiacriticalmarks")];
-    char unicode_prop_name_pool_str2249[sizeof("phagspa")];
-    char unicode_prop_name_pool_str2255[sizeof("incombiningdiacriticalmarksforsymbols")];
-    char unicode_prop_name_pool_str2258[sizeof("changeswhencasemapped")];
-    char unicode_prop_name_pool_str2259[sizeof("inlatin1supplement")];
-    char unicode_prop_name_pool_str2261[sizeof("inbrahmi")];
-    char unicode_prop_name_pool_str2263[sizeof("hang")];
-    char unicode_prop_name_pool_str2264[sizeof("nchar")];
-    char unicode_prop_name_pool_str2286[sizeof("oldsogdian")];
-    char unicode_prop_name_pool_str2299[sizeof("deva")];
-    char unicode_prop_name_pool_str2301[sizeof("ingujarati")];
-    char unicode_prop_name_pool_str2305[sizeof("otherlowercase")];
-    char unicode_prop_name_pool_str2311[sizeof("ingunjalagondi")];
-    char unicode_prop_name_pool_str2315[sizeof("devanagari")];
-    char unicode_prop_name_pool_str2319[sizeof("syrc")];
-    char unicode_prop_name_pool_str2325[sizeof("mahj")];
-    char unicode_prop_name_pool_str2330[sizeof("hiragana")];
-    char unicode_prop_name_pool_str2333[sizeof("orya")];
-    char unicode_prop_name_pool_str2336[sizeof("mahajani")];
-    char unicode_prop_name_pool_str2341[sizeof("incurrencysymbols")];
-    char unicode_prop_name_pool_str2342[sizeof("spaceseparator")];
-    char unicode_prop_name_pool_str2347[sizeof("otherletter")];
-    char unicode_prop_name_pool_str2348[sizeof("inlinearbsyllabary")];
-    char unicode_prop_name_pool_str2351[sizeof("inrejang")];
-    char unicode_prop_name_pool_str2352[sizeof("hmng")];
-    char unicode_prop_name_pool_str2357[sizeof("ogrext")];
-    char unicode_prop_name_pool_str2376[sizeof("inaegeannumbers")];
-    char unicode_prop_name_pool_str2389[sizeof("changeswhentitlecased")];
-    char unicode_prop_name_pool_str2409[sizeof("zp")];
-    char unicode_prop_name_pool_str2411[sizeof("mathsymbol")];
-    char unicode_prop_name_pool_str2414[sizeof("khoj")];
-    char unicode_prop_name_pool_str2419[sizeof("incombiningdiacriticalmarkssupplement")];
-    char unicode_prop_name_pool_str2421[sizeof("warangciti")];
-    char unicode_prop_name_pool_str2428[sizeof("syriac")];
-    char unicode_prop_name_pool_str2429[sizeof("finalpunctuation")];
-    char unicode_prop_name_pool_str2437[sizeof("othersymbol")];
-    char unicode_prop_name_pool_str2444[sizeof("currencysymbol")];
-    char unicode_prop_name_pool_str2445[sizeof("digit")];
-    char unicode_prop_name_pool_str2449[sizeof("emojipresentation")];
-    char unicode_prop_name_pool_str2455[sizeof("inpsalterpahlavi")];
-    char unicode_prop_name_pool_str2456[sizeof("softdotted")];
-    char unicode_prop_name_pool_str2460[sizeof("phlp")];
-    char unicode_prop_name_pool_str2461[sizeof("noncharactercodepoint")];
-    char unicode_prop_name_pool_str2464[sizeof("inlimbu")];
-    char unicode_prop_name_pool_str2465[sizeof("nonspacingmark")];
-    char unicode_prop_name_pool_str2467[sizeof("omath")];
-    char unicode_prop_name_pool_str2473[sizeof("cyrillic")];
-    char unicode_prop_name_pool_str2476[sizeof("inenclosedcjklettersandmonths")];
-    char unicode_prop_name_pool_str2482[sizeof("tangut")];
-    char unicode_prop_name_pool_str2484[sizeof("changeswhenlowercased")];
-    char unicode_prop_name_pool_str2496[sizeof("inalphabeticpresentationforms")];
-    char unicode_prop_name_pool_str2500[sizeof("intangutcomponents")];
-    char unicode_prop_name_pool_str2503[sizeof("incombiningdiacriticalmarksextended")];
-    char unicode_prop_name_pool_str2508[sizeof("ogham")];
-    char unicode_prop_name_pool_str2518[sizeof("osmanya")];
-    char unicode_prop_name_pool_str2521[sizeof("intagbanwa")];
-    char unicode_prop_name_pool_str2525[sizeof("inprivateusearea")];
-    char unicode_prop_name_pool_str2529[sizeof("inpaucinhau")];
-    char unicode_prop_name_pool_str2532[sizeof("otheruppercase")];
-    char unicode_prop_name_pool_str2533[sizeof("sylo")];
-    char unicode_prop_name_pool_str2537[sizeof("elba")];
-    char unicode_prop_name_pool_str2553[sizeof("paragraphseparator")];
-    char unicode_prop_name_pool_str2554[sizeof("inbassavah")];
-    char unicode_prop_name_pool_str2559[sizeof("otheridstart")];
-    char unicode_prop_name_pool_str2567[sizeof("signwriting")];
-    char unicode_prop_name_pool_str2576[sizeof("rjng")];
-    char unicode_prop_name_pool_str2584[sizeof("whitespace")];
-    char unicode_prop_name_pool_str2585[sizeof("incjkunifiedideographsextensionb")];
-    char unicode_prop_name_pool_str2586[sizeof("inletterlikesymbols")];
-    char unicode_prop_name_pool_str2623[sizeof("buhid")];
-    char unicode_prop_name_pool_str2642[sizeof("oupper")];
-    char unicode_prop_name_pool_str2644[sizeof("bassavah")];
-    char unicode_prop_name_pool_str2647[sizeof("inhebrew")];
-    char unicode_prop_name_pool_str2653[sizeof("narb")];
-    char unicode_prop_name_pool_str2659[sizeof("inbuhid")];
-    char unicode_prop_name_pool_str2662[sizeof("inbopomofo")];
-    char unicode_prop_name_pool_str2692[sizeof("elbasan")];
-    char unicode_prop_name_pool_str2700[sizeof("incombininghalfmarks")];
-    char unicode_prop_name_pool_str2707[sizeof("inindicsiyaqnumbers")];
-    char unicode_prop_name_pool_str2711[sizeof("changeswhenuppercased")];
-    char unicode_prop_name_pool_str2743[sizeof("inmathematicaloperators")];
-    char unicode_prop_name_pool_str2745[sizeof("inarabicmathematicalalphabeticsymbols")];
-    char unicode_prop_name_pool_str2764[sizeof("hluw")];
-    char unicode_prop_name_pool_str2770[sizeof("hexdigit")];
-    char unicode_prop_name_pool_str2771[sizeof("deprecated")];
-    char unicode_prop_name_pool_str2776[sizeof("insuperscriptsandsubscripts")];
-    char unicode_prop_name_pool_str2777[sizeof("nshu")];
-    char unicode_prop_name_pool_str2782[sizeof("injavanese")];
-    char unicode_prop_name_pool_str2790[sizeof("inbamumsupplement")];
-    char unicode_prop_name_pool_str2798[sizeof("hangul")];
-    char unicode_prop_name_pool_str2826[sizeof("unifiedideograph")];
-    char unicode_prop_name_pool_str2831[sizeof("tavt")];
-    char unicode_prop_name_pool_str2843[sizeof("othermath")];
-    char unicode_prop_name_pool_str2849[sizeof("pahawhhmong")];
-    char unicode_prop_name_pool_str2850[sizeof("sylotinagri")];
-    char unicode_prop_name_pool_str2853[sizeof("hung")];
-    char unicode_prop_name_pool_str2856[sizeof("kayahli")];
-    char unicode_prop_name_pool_str2861[sizeof("inpahawhhmong")];
-    char unicode_prop_name_pool_str2863[sizeof("upper")];
-    char unicode_prop_name_pool_str2884[sizeof("inalchemicalsymbols")];
-    char unicode_prop_name_pool_str2907[sizeof("nbat")];
-    char unicode_prop_name_pool_str2915[sizeof("nabataean")];
-    char unicode_prop_name_pool_str2929[sizeof("uppercase")];
-    char unicode_prop_name_pool_str2937[sizeof("hebr")];
-    char unicode_prop_name_pool_str2947[sizeof("inmahjongtiles")];
-    char unicode_prop_name_pool_str2954[sizeof("oldnortharabian")];
-    char unicode_prop_name_pool_str2963[sizeof("inarabicsupplement")];
-    char unicode_prop_name_pool_str2968[sizeof("tibt")];
-    char unicode_prop_name_pool_str2974[sizeof("tibetan")];
-    char unicode_prop_name_pool_str2975[sizeof("inhighprivateusesurrogates")];
-    char unicode_prop_name_pool_str2976[sizeof("insupplementalarrowsa")];
-    char unicode_prop_name_pool_str2977[sizeof("inarabicpresentationformsb")];
-    char unicode_prop_name_pool_str2986[sizeof("otherdefaultignorablecodepoint")];
-    char unicode_prop_name_pool_str2987[sizeof("symbol")];
-    char unicode_prop_name_pool_str3012[sizeof("inplayingcards")];
-    char unicode_prop_name_pool_str3013[sizeof("inhalfwidthandfullwidthforms")];
-    char unicode_prop_name_pool_str3052[sizeof("wspace")];
-    char unicode_prop_name_pool_str3071[sizeof("tfng")];
-    char unicode_prop_name_pool_str3080[sizeof("insupplementalmathematicaloperators")];
-    char unicode_prop_name_pool_str3083[sizeof("insupplementalarrowsc")];
-    char unicode_prop_name_pool_str3084[sizeof("inhanguljamoextendedb")];
-    char unicode_prop_name_pool_str3112[sizeof("aghb")];
-    char unicode_prop_name_pool_str3120[sizeof("cypriot")];
-    char unicode_prop_name_pool_str3127[sizeof("nushu")];
-    char unicode_prop_name_pool_str3130[sizeof("tifinagh")];
-    char unicode_prop_name_pool_str3139[sizeof("otherpunctuation")];
-    char unicode_prop_name_pool_str3177[sizeof("alphabetic")];
-    char unicode_prop_name_pool_str3184[sizeof("dupl")];
-    char unicode_prop_name_pool_str3190[sizeof("tglg")];
-    char unicode_prop_name_pool_str3193[sizeof("changeswhencasefolded")];
-    char unicode_prop_name_pool_str3210[sizeof("tagalog")];
-    char unicode_prop_name_pool_str3228[sizeof("modifiersymbol")];
-    char unicode_prop_name_pool_str3231[sizeof("any")];
-    char unicode_prop_name_pool_str3239[sizeof("inglagoliticsupplement")];
-    char unicode_prop_name_pool_str3262[sizeof("ethiopic")];
-    char unicode_prop_name_pool_str3293[sizeof("uppercaseletter")];
-    char unicode_prop_name_pool_str3297[sizeof("dashpunctuation")];
-    char unicode_prop_name_pool_str3304[sizeof("hanifirohingya")];
-    char unicode_prop_name_pool_str3328[sizeof("inyijinghexagramsymbols")];
-    char unicode_prop_name_pool_str3337[sizeof("incypriotsyllabary")];
-    char unicode_prop_name_pool_str3375[sizeof("rejang")];
-    char unicode_prop_name_pool_str3426[sizeof("defaultignorablecodepoint")];
-    char unicode_prop_name_pool_str3431[sizeof("tagb")];
-    char unicode_prop_name_pool_str3447[sizeof("dep")];
-    char unicode_prop_name_pool_str3471[sizeof("inyisyllables")];
-    char unicode_prop_name_pool_str3485[sizeof("oldsoutharabian")];
-    char unicode_prop_name_pool_str3504[sizeof("inlatinextendedb")];
-    char unicode_prop_name_pool_str3514[sizeof("insupplementalpunctuation")];
-    char unicode_prop_name_pool_str3517[sizeof("othergraphemeextend")];
-    char unicode_prop_name_pool_str3562[sizeof("hebrew")];
-    char unicode_prop_name_pool_str3564[sizeof("inboxdrawing")];
-    char unicode_prop_name_pool_str3570[sizeof("inhighsurrogates")];
-    char unicode_prop_name_pool_str3603[sizeof("telugu")];
-    char unicode_prop_name_pool_str3623[sizeof("inbopomofoextended")];
-    char unicode_prop_name_pool_str3666[sizeof("soyombo")];
-    char unicode_prop_name_pool_str3764[sizeof("inegyptianhieroglyphs")];
-    char unicode_prop_name_pool_str4052[sizeof("openpunctuation")];
-    char unicode_prop_name_pool_str4129[sizeof("insupplementaryprivateuseareaa")];
-    char unicode_prop_name_pool_str4261[sizeof("hyphen")];
-    char unicode_prop_name_pool_str4277[sizeof("inhangulcompatibilityjamo")];
-    char unicode_prop_name_pool_str4332[sizeof("egyp")];
-    char unicode_prop_name_pool_str4363[sizeof("insupplementalarrowsb")];
-    char unicode_prop_name_pool_str4404[sizeof("duployan")];
-    char unicode_prop_name_pool_str4639[sizeof("insupplementalsymbolsandpictographs")];
-    char unicode_prop_name_pool_str4682[sizeof("zyyy")];
-    char unicode_prop_name_pool_str5231[sizeof("egyptianhieroglyphs")];
-    char unicode_prop_name_pool_str5516[sizeof("insupplementaryprivateuseareab")];
+    char unicode_prop_name_pool_str120[sizeof("m")];
+    char unicode_prop_name_pool_str133[sizeof("gonm")];
+    char unicode_prop_name_pool_str134[sizeof("cakm")];
+    char unicode_prop_name_pool_str139[sizeof("inosmanya")];
+    char unicode_prop_name_pool_str142[sizeof("inmanichaean")];
+    char unicode_prop_name_pool_str146[sizeof("inarmenian")];
+    char unicode_prop_name_pool_str151[sizeof("inmro")];
+    char unicode_prop_name_pool_str152[sizeof("inmiao")];
+    char unicode_prop_name_pool_str156[sizeof("c")];
+    char unicode_prop_name_pool_str163[sizeof("inchakma")];
+    char unicode_prop_name_pool_str166[sizeof("common")];
+    char unicode_prop_name_pool_str169[sizeof("mandaic")];
+    char unicode_prop_name_pool_str182[sizeof("inmyanmar")];
+    char unicode_prop_name_pool_str187[sizeof("inmakasar")];
+    char unicode_prop_name_pool_str192[sizeof("qaai")];
+    char unicode_prop_name_pool_str200[sizeof("inideographicsymbolsandpunctuation")];
+    char unicode_prop_name_pool_str204[sizeof("inkhmer")];
+    char unicode_prop_name_pool_str207[sizeof("cans")];
+    char unicode_prop_name_pool_str209[sizeof("prependedconcatenationmark")];
+    char unicode_prop_name_pool_str211[sizeof("lm")];
+    char unicode_prop_name_pool_str212[sizeof("marc")];
+    char unicode_prop_name_pool_str219[sizeof("connectorpunctuation")];
+    char unicode_prop_name_pool_str220[sizeof("inrunic")];
+    char unicode_prop_name_pool_str221[sizeof("incarian")];
+    char unicode_prop_name_pool_str223[sizeof("inavestan")];
+    char unicode_prop_name_pool_str225[sizeof("combiningmark")];
+    char unicode_prop_name_pool_str226[sizeof("incuneiformnumbersandpunctuation")];
+    char unicode_prop_name_pool_str231[sizeof("merc")];
+    char unicode_prop_name_pool_str238[sizeof("perm")];
+    char unicode_prop_name_pool_str239[sizeof("inahom")];
+    char unicode_prop_name_pool_str240[sizeof("inipaextensions")];
+    char unicode_prop_name_pool_str251[sizeof("incherokee")];
+    char unicode_prop_name_pool_str257[sizeof("insharada")];
+    char unicode_prop_name_pool_str268[sizeof("makasar")];
+    char unicode_prop_name_pool_str272[sizeof("inarrows")];
+    char unicode_prop_name_pool_str277[sizeof("lc")];
+    char unicode_prop_name_pool_str279[sizeof("masaramgondi")];
+    char unicode_prop_name_pool_str283[sizeof("incuneiform")];
+    char unicode_prop_name_pool_str290[sizeof("mc")];
+    char unicode_prop_name_pool_str293[sizeof("cc")];
+    char unicode_prop_name_pool_str295[sizeof("inzanabazarsquare")];
+    char unicode_prop_name_pool_str298[sizeof("lineseparator")];
+    char unicode_prop_name_pool_str302[sizeof("armn")];
+    char unicode_prop_name_pool_str305[sizeof("qmark")];
+    char unicode_prop_name_pool_str306[sizeof("armi")];
+    char unicode_prop_name_pool_str309[sizeof("insamaritan")];
+    char unicode_prop_name_pool_str316[sizeof("armenian")];
+    char unicode_prop_name_pool_str318[sizeof("inmarchen")];
+    char unicode_prop_name_pool_str319[sizeof("inmasaramgondi")];
+    char unicode_prop_name_pool_str321[sizeof("qaac")];
+    char unicode_prop_name_pool_str330[sizeof("pc")];
+    char unicode_prop_name_pool_str335[sizeof("inscriptionalparthian")];
+    char unicode_prop_name_pool_str336[sizeof("latn")];
+    char unicode_prop_name_pool_str340[sizeof("latin")];
+    char unicode_prop_name_pool_str342[sizeof("ri")];
+    char unicode_prop_name_pool_str345[sizeof("inthaana")];
+    char unicode_prop_name_pool_str352[sizeof("inkhmersymbols")];
+    char unicode_prop_name_pool_str355[sizeof("inkatakana")];
+    char unicode_prop_name_pool_str356[sizeof("incyrillic")];
+    char unicode_prop_name_pool_str357[sizeof("inthai")];
+    char unicode_prop_name_pool_str359[sizeof("incham")];
+    char unicode_prop_name_pool_str367[sizeof("inkaithi")];
+    char unicode_prop_name_pool_str369[sizeof("zs")];
+    char unicode_prop_name_pool_str372[sizeof("mtei")];
+    char unicode_prop_name_pool_str375[sizeof("vai")];
+    char unicode_prop_name_pool_str376[sizeof("vaii")];
+    char unicode_prop_name_pool_str379[sizeof("initialpunctuation")];
+    char unicode_prop_name_pool_str383[sizeof("cs")];
+    char unicode_prop_name_pool_str399[sizeof("insyriac")];
+    char unicode_prop_name_pool_str401[sizeof("pcm")];
+    char unicode_prop_name_pool_str415[sizeof("intakri")];
+    char unicode_prop_name_pool_str417[sizeof("mand")];
+    char unicode_prop_name_pool_str419[sizeof("l")];
+    char unicode_prop_name_pool_str420[sizeof("ps")];
+    char unicode_prop_name_pool_str427[sizeof("dia")];
+    char unicode_prop_name_pool_str431[sizeof("inkanaextendeda")];
+    char unicode_prop_name_pool_str433[sizeof("di")];
+    char unicode_prop_name_pool_str436[sizeof("mend")];
+    char unicode_prop_name_pool_str437[sizeof("modi")];
+    char unicode_prop_name_pool_str441[sizeof("ideo")];
+    char unicode_prop_name_pool_str445[sizeof("katakana")];
+    char unicode_prop_name_pool_str449[sizeof("prti")];
+    char unicode_prop_name_pool_str456[sizeof("inideographicdescriptioncharacters")];
+    char unicode_prop_name_pool_str457[sizeof("inlineara")];
+    char unicode_prop_name_pool_str458[sizeof("xidcontinue")];
+    char unicode_prop_name_pool_str461[sizeof("brai")];
+    char unicode_prop_name_pool_str463[sizeof("inlao")];
+    char unicode_prop_name_pool_str472[sizeof("ascii")];
+    char unicode_prop_name_pool_str474[sizeof("privateuse")];
+    char unicode_prop_name_pool_str477[sizeof("arabic")];
+    char unicode_prop_name_pool_str478[sizeof("mongolian")];
+    char unicode_prop_name_pool_str480[sizeof("inmyanmarextendeda")];
+    char unicode_prop_name_pool_str481[sizeof("inruminumeralsymbols")];
+    char unicode_prop_name_pool_str485[sizeof("letter")];
+    char unicode_prop_name_pool_str487[sizeof("innandinagari")];
+    char unicode_prop_name_pool_str499[sizeof("inmeeteimayek")];
+    char unicode_prop_name_pool_str500[sizeof("inoldnortharabian")];
+    char unicode_prop_name_pool_str503[sizeof("grlink")];
+    char unicode_prop_name_pool_str504[sizeof("knda")];
+    char unicode_prop_name_pool_str507[sizeof("kannada")];
+    char unicode_prop_name_pool_str509[sizeof("incjkcompatibilityforms")];
+    char unicode_prop_name_pool_str514[sizeof("incjkcompatibilityideographs")];
+    char unicode_prop_name_pool_str528[sizeof("inmodi")];
+    char unicode_prop_name_pool_str529[sizeof("kali")];
+    char unicode_prop_name_pool_str532[sizeof("control")];
+    char unicode_prop_name_pool_str536[sizeof("inadlam")];
+    char unicode_prop_name_pool_str538[sizeof("inspecials")];
+    char unicode_prop_name_pool_str540[sizeof("inmendekikakui")];
+    char unicode_prop_name_pool_str545[sizeof("intransportandmapsymbols")];
+    char unicode_prop_name_pool_str547[sizeof("letternumber")];
+    char unicode_prop_name_pool_str549[sizeof("xidc")];
+    char unicode_prop_name_pool_str550[sizeof("inmedefaidrin")];
+    char unicode_prop_name_pool_str558[sizeof("inchesssymbols")];
+    char unicode_prop_name_pool_str564[sizeof("inemoticons")];
+    char unicode_prop_name_pool_str573[sizeof("brahmi")];
+    char unicode_prop_name_pool_str575[sizeof("inolditalic")];
+    char unicode_prop_name_pool_str578[sizeof("palm")];
+    char unicode_prop_name_pool_str580[sizeof("inlycian")];
+    char unicode_prop_name_pool_str588[sizeof("inmiscellaneousmathematicalsymbolsa")];
+    char unicode_prop_name_pool_str594[sizeof("xids")];
+    char unicode_prop_name_pool_str603[sizeof("psalterpahlavi")];
+    char unicode_prop_name_pool_str619[sizeof("insundanese")];
+    char unicode_prop_name_pool_str620[sizeof("inoldsogdian")];
+    char unicode_prop_name_pool_str632[sizeof("diacritic")];
+    char unicode_prop_name_pool_str634[sizeof("gothic")];
+    char unicode_prop_name_pool_str635[sizeof("inancientsymbols")];
+    char unicode_prop_name_pool_str639[sizeof("meroiticcursive")];
+    char unicode_prop_name_pool_str643[sizeof("inmalayalam")];
+    char unicode_prop_name_pool_str648[sizeof("patternwhitespace")];
+    char unicode_prop_name_pool_str649[sizeof("sk")];
+    char unicode_prop_name_pool_str652[sizeof("insmallkanaextension")];
+    char unicode_prop_name_pool_str656[sizeof("inmandaic")];
+    char unicode_prop_name_pool_str657[sizeof("lt")];
+    char unicode_prop_name_pool_str665[sizeof("so")];
+    char unicode_prop_name_pool_str666[sizeof("inlinearbideograms")];
+    char unicode_prop_name_pool_str668[sizeof("incommonindicnumberforms")];
+    char unicode_prop_name_pool_str669[sizeof("incjkcompatibilityideographssupplement")];
+    char unicode_prop_name_pool_str677[sizeof("idc")];
+    char unicode_prop_name_pool_str678[sizeof("inoldsoutharabian")];
+    char unicode_prop_name_pool_str699[sizeof("insylotinagri")];
+    char unicode_prop_name_pool_str701[sizeof("idsbinaryoperator")];
+    char unicode_prop_name_pool_str707[sizeof("sora")];
+    char unicode_prop_name_pool_str708[sizeof("bamum")];
+    char unicode_prop_name_pool_str709[sizeof("inkanasupplement")];
+    char unicode_prop_name_pool_str710[sizeof("incjkstrokes")];
+    char unicode_prop_name_pool_str715[sizeof("joinc")];
+    char unicode_prop_name_pool_str718[sizeof("inopticalcharacterrecognition")];
+    char unicode_prop_name_pool_str722[sizeof("vs")];
+    char unicode_prop_name_pool_str728[sizeof("indominotiles")];
+    char unicode_prop_name_pool_str732[sizeof("batk")];
+    char unicode_prop_name_pool_str739[sizeof("grext")];
+    char unicode_prop_name_pool_str741[sizeof("batak")];
+    char unicode_prop_name_pool_str749[sizeof("patws")];
+    char unicode_prop_name_pool_str752[sizeof("inmodifiertoneletters")];
+    char unicode_prop_name_pool_str753[sizeof("ital")];
+    char unicode_prop_name_pool_str760[sizeof("bass")];
+    char unicode_prop_name_pool_str763[sizeof("decimalnumber")];
+    char unicode_prop_name_pool_str765[sizeof("alnum")];
+    char unicode_prop_name_pool_str767[sizeof("ids")];
+    char unicode_prop_name_pool_str776[sizeof("print")];
+    char unicode_prop_name_pool_str778[sizeof("inlatinextendeda")];
+    char unicode_prop_name_pool_str782[sizeof("intaitham")];
+    char unicode_prop_name_pool_str783[sizeof("inmusicalsymbols")];
+    char unicode_prop_name_pool_str785[sizeof("intaile")];
+    char unicode_prop_name_pool_str794[sizeof("samr")];
+    char unicode_prop_name_pool_str809[sizeof("samaritan")];
+    char unicode_prop_name_pool_str813[sizeof("s")];
+    char unicode_prop_name_pool_str816[sizeof("inlatinextendede")];
+    char unicode_prop_name_pool_str820[sizeof("bali")];
+    char unicode_prop_name_pool_str826[sizeof("lisu")];
+    char unicode_prop_name_pool_str827[sizeof("pauc")];
+    char unicode_prop_name_pool_str828[sizeof("patternsyntax")];
+    char unicode_prop_name_pool_str829[sizeof("incontrolpictures")];
+    char unicode_prop_name_pool_str830[sizeof("blank")];
+    char unicode_prop_name_pool_str834[sizeof("inmiscellaneoussymbols")];
+    char unicode_prop_name_pool_str835[sizeof("ll")];
+    char unicode_prop_name_pool_str836[sizeof("inancientgreekmusicalnotation")];
+    char unicode_prop_name_pool_str837[sizeof("zl")];
+    char unicode_prop_name_pool_str838[sizeof("inlydian")];
+    char unicode_prop_name_pool_str839[sizeof("sm")];
+    char unicode_prop_name_pool_str843[sizeof("inmiscellaneoussymbolsandarrows")];
+    char unicode_prop_name_pool_str844[sizeof("inugaritic")];
+    char unicode_prop_name_pool_str845[sizeof("bengali")];
+    char unicode_prop_name_pool_str846[sizeof("pd")];
+    char unicode_prop_name_pool_str848[sizeof("inmiscellaneoussymbolsandpictographs")];
+    char unicode_prop_name_pool_str850[sizeof("medf")];
+    char unicode_prop_name_pool_str855[sizeof("cf")];
+    char unicode_prop_name_pool_str858[sizeof("balinese")];
+    char unicode_prop_name_pool_str860[sizeof("medefaidrin")];
+    char unicode_prop_name_pool_str865[sizeof("han")];
+    char unicode_prop_name_pool_str869[sizeof("intamil")];
+    char unicode_prop_name_pool_str870[sizeof("hani")];
+    char unicode_prop_name_pool_str871[sizeof("inmultani")];
+    char unicode_prop_name_pool_str879[sizeof("hano")];
+    char unicode_prop_name_pool_str887[sizeof("inshorthandformatcontrols")];
+    char unicode_prop_name_pool_str891[sizeof("insaurashtra")];
+    char unicode_prop_name_pool_str892[sizeof("pf")];
+    char unicode_prop_name_pool_str894[sizeof("inoldturkic")];
+    char unicode_prop_name_pool_str896[sizeof("idcontinue")];
+    char unicode_prop_name_pool_str901[sizeof("hanunoo")];
+    char unicode_prop_name_pool_str905[sizeof("sc")];
+    char unicode_prop_name_pool_str906[sizeof("inkhojki")];
+    char unicode_prop_name_pool_str913[sizeof("idst")];
+    char unicode_prop_name_pool_str915[sizeof("canadianaboriginal")];
+    char unicode_prop_name_pool_str923[sizeof("hira")];
+    char unicode_prop_name_pool_str925[sizeof("plrd")];
+    char unicode_prop_name_pool_str939[sizeof("incaucasianalbanian")];
+    char unicode_prop_name_pool_str940[sizeof("indeseret")];
+    char unicode_prop_name_pool_str945[sizeof("inearlydynasticcuneiform")];
+    char unicode_prop_name_pool_str946[sizeof("inspacingmodifierletters")];
+    char unicode_prop_name_pool_str950[sizeof("innewa")];
+    char unicode_prop_name_pool_str972[sizeof("idstart")];
+    char unicode_prop_name_pool_str977[sizeof("zinh")];
+    char unicode_prop_name_pool_str981[sizeof("incyrillicextendeda")];
+    char unicode_prop_name_pool_str984[sizeof("dsrt")];
+    char unicode_prop_name_pool_str993[sizeof("cased")];
+    char unicode_prop_name_pool_str999[sizeof("glagolitic")];
+    char unicode_prop_name_pool_str1002[sizeof("inhanifirohingya")];
+    char unicode_prop_name_pool_str1006[sizeof("inancientgreeknumbers")];
+    char unicode_prop_name_pool_str1008[sizeof("inmeeteimayekextensions")];
+    char unicode_prop_name_pool_str1009[sizeof("intaixuanjingsymbols")];
+    char unicode_prop_name_pool_str1016[sizeof("joincontrol")];
+    char unicode_prop_name_pool_str1020[sizeof("runr")];
+    char unicode_prop_name_pool_str1023[sizeof("inwarangciti")];
+    char unicode_prop_name_pool_str1025[sizeof("deseret")];
+    char unicode_prop_name_pool_str1035[sizeof("inhiragana")];
+    char unicode_prop_name_pool_str1039[sizeof("sind")];
+    char unicode_prop_name_pool_str1047[sizeof("cherokee")];
+    char unicode_prop_name_pool_str1050[sizeof("inlatinextendedc")];
+    char unicode_prop_name_pool_str1052[sizeof("adlm")];
+    char unicode_prop_name_pool_str1053[sizeof("phoenician")];
+    char unicode_prop_name_pool_str1056[sizeof("cher")];
+    char unicode_prop_name_pool_str1059[sizeof("marchen")];
+    char unicode_prop_name_pool_str1062[sizeof("inkhudawadi")];
+    char unicode_prop_name_pool_str1063[sizeof("sinhala")];
+    char unicode_prop_name_pool_str1066[sizeof("lower")];
+    char unicode_prop_name_pool_str1068[sizeof("graphemelink")];
+    char unicode_prop_name_pool_str1069[sizeof("xidstart")];
+    char unicode_prop_name_pool_str1071[sizeof("ingrantha")];
+    char unicode_prop_name_pool_str1072[sizeof("bidic")];
+    char unicode_prop_name_pool_str1074[sizeof("xdigit")];
+    char unicode_prop_name_pool_str1076[sizeof("casedletter")];
+    char unicode_prop_name_pool_str1078[sizeof("gong")];
+    char unicode_prop_name_pool_str1079[sizeof("multani")];
+    char unicode_prop_name_pool_str1082[sizeof("gunjalagondi")];
+    char unicode_prop_name_pool_str1084[sizeof("cham")];
+    char unicode_prop_name_pool_str1086[sizeof("chakma")];
+    char unicode_prop_name_pool_str1087[sizeof("mong")];
+    char unicode_prop_name_pool_str1088[sizeof("kaithi")];
+    char unicode_prop_name_pool_str1089[sizeof("inmahajani")];
+    char unicode_prop_name_pool_str1090[sizeof("graphemebase")];
+    char unicode_prop_name_pool_str1092[sizeof("insiddham")];
+    char unicode_prop_name_pool_str1095[sizeof("inogham")];
+    char unicode_prop_name_pool_str1101[sizeof("inosage")];
+    char unicode_prop_name_pool_str1102[sizeof("incountingrodnumerals")];
+    char unicode_prop_name_pool_str1104[sizeof("inwancho")];
+    char unicode_prop_name_pool_str1105[sizeof("khojki")];
+    char unicode_prop_name_pool_str1107[sizeof("ingeneralpunctuation")];
+    char unicode_prop_name_pool_str1108[sizeof("georgian")];
+    char unicode_prop_name_pool_str1117[sizeof("incyrillicextendedc")];
+    char unicode_prop_name_pool_str1118[sizeof("inkayahli")];
+    char unicode_prop_name_pool_str1121[sizeof("khar")];
+    char unicode_prop_name_pool_str1124[sizeof("inoriya")];
+    char unicode_prop_name_pool_str1126[sizeof("manichaean")];
+    char unicode_prop_name_pool_str1132[sizeof("bamu")];
+    char unicode_prop_name_pool_str1133[sizeof("zanb")];
+    char unicode_prop_name_pool_str1136[sizeof("oriya")];
+    char unicode_prop_name_pool_str1137[sizeof("inolchiki")];
+    char unicode_prop_name_pool_str1138[sizeof("linb")];
+    char unicode_prop_name_pool_str1141[sizeof("inethiopic")];
+    char unicode_prop_name_pool_str1143[sizeof("wara")];
+    char unicode_prop_name_pool_str1144[sizeof("ingeorgian")];
+    char unicode_prop_name_pool_str1149[sizeof("innabataean")];
+    char unicode_prop_name_pool_str1154[sizeof("inkanbun")];
+    char unicode_prop_name_pool_str1156[sizeof("adlam")];
+    char unicode_prop_name_pool_str1157[sizeof("inbhaiksuki")];
+    char unicode_prop_name_pool_str1162[sizeof("insinhala")];
+    char unicode_prop_name_pool_str1163[sizeof("inelbasan")];
+    char unicode_prop_name_pool_str1169[sizeof("lowercase")];
+    char unicode_prop_name_pool_str1178[sizeof("takri")];
+    char unicode_prop_name_pool_str1179[sizeof("inmongolian")];
+    char unicode_prop_name_pool_str1181[sizeof("invai")];
+    char unicode_prop_name_pool_str1182[sizeof("xsux")];
+    char unicode_prop_name_pool_str1183[sizeof("cntrl")];
+    char unicode_prop_name_pool_str1186[sizeof("emoji")];
+    char unicode_prop_name_pool_str1187[sizeof("sterm")];
+    char unicode_prop_name_pool_str1189[sizeof("cuneiform")];
+    char unicode_prop_name_pool_str1192[sizeof("cwcm")];
+    char unicode_prop_name_pool_str1194[sizeof("hatran")];
+    char unicode_prop_name_pool_str1197[sizeof("linearb")];
+    char unicode_prop_name_pool_str1201[sizeof("taile")];
+    char unicode_prop_name_pool_str1202[sizeof("inlatinextendedadditional")];
+    char unicode_prop_name_pool_str1203[sizeof("inenclosedalphanumerics")];
+    char unicode_prop_name_pool_str1205[sizeof("anatolianhieroglyphs")];
+    char unicode_prop_name_pool_str1206[sizeof("incyrillicsupplement")];
+    char unicode_prop_name_pool_str1208[sizeof("intamilsupplement")];
+    char unicode_prop_name_pool_str1215[sizeof("inmiscellaneoustechnical")];
+    char unicode_prop_name_pool_str1217[sizeof("ahom")];
+    char unicode_prop_name_pool_str1218[sizeof("incherokeesupplement")];
+    char unicode_prop_name_pool_str1219[sizeof("takr")];
+    char unicode_prop_name_pool_str1224[sizeof("khmr")];
+    char unicode_prop_name_pool_str1228[sizeof("incjkunifiedideographsextensiona")];
+    char unicode_prop_name_pool_str1231[sizeof("quotationmark")];
+    char unicode_prop_name_pool_str1233[sizeof("lyci")];
+    char unicode_prop_name_pool_str1234[sizeof("lycian")];
+    char unicode_prop_name_pool_str1235[sizeof("ingurmukhi")];
+    char unicode_prop_name_pool_str1237[sizeof("runic")];
+    char unicode_prop_name_pool_str1238[sizeof("limb")];
+    char unicode_prop_name_pool_str1240[sizeof("inscriptionalpahlavi")];
+    char unicode_prop_name_pool_str1242[sizeof("hatr")];
+    char unicode_prop_name_pool_str1244[sizeof("variationselector")];
+    char unicode_prop_name_pool_str1246[sizeof("modifierletter")];
+    char unicode_prop_name_pool_str1247[sizeof("incjkunifiedideographsextensione")];
+    char unicode_prop_name_pool_str1262[sizeof("mymr")];
+    char unicode_prop_name_pool_str1265[sizeof("myanmar")];
+    char unicode_prop_name_pool_str1267[sizeof("lu")];
+    char unicode_prop_name_pool_str1275[sizeof("kharoshthi")];
+    char unicode_prop_name_pool_str1276[sizeof("inarabic")];
+    char unicode_prop_name_pool_str1278[sizeof("radical")];
+    char unicode_prop_name_pool_str1281[sizeof("khmer")];
+    char unicode_prop_name_pool_str1286[sizeof("inunifiedcanadianaboriginalsyllabics")];
+    char unicode_prop_name_pool_str1292[sizeof("osage")];
+    char unicode_prop_name_pool_str1296[sizeof("sundanese")];
+    char unicode_prop_name_pool_str1300[sizeof("innewtailue")];
+    char unicode_prop_name_pool_str1302[sizeof("logicalorderexception")];
+    char unicode_prop_name_pool_str1304[sizeof("math")];
+    char unicode_prop_name_pool_str1306[sizeof("braille")];
+    char unicode_prop_name_pool_str1311[sizeof("goth")];
+    char unicode_prop_name_pool_str1312[sizeof("insorasompeng")];
+    char unicode_prop_name_pool_str1316[sizeof("insoyombo")];
+    char unicode_prop_name_pool_str1317[sizeof("arab")];
+    char unicode_prop_name_pool_str1322[sizeof("saur")];
+    char unicode_prop_name_pool_str1329[sizeof("guru")];
+    char unicode_prop_name_pool_str1333[sizeof("term")];
+    char unicode_prop_name_pool_str1337[sizeof("paucinhau")];
+    char unicode_prop_name_pool_str1338[sizeof("inbasiclatin")];
+    char unicode_prop_name_pool_str1339[sizeof("inarabicpresentationformsa")];
+    char unicode_prop_name_pool_str1347[sizeof("punct")];
+    char unicode_prop_name_pool_str1348[sizeof("gurmukhi")];
+    char unicode_prop_name_pool_str1354[sizeof("grantha")];
+    char unicode_prop_name_pool_str1355[sizeof("inshavian")];
+    char unicode_prop_name_pool_str1356[sizeof("osma")];
+    char unicode_prop_name_pool_str1357[sizeof("inenclosedalphanumericsupplement")];
+    char unicode_prop_name_pool_str1360[sizeof("intirhuta")];
+    char unicode_prop_name_pool_str1361[sizeof("inelymaic")];
+    char unicode_prop_name_pool_str1362[sizeof("inhatran")];
+    char unicode_prop_name_pool_str1364[sizeof("incjkunifiedideographsextensionc")];
+    char unicode_prop_name_pool_str1365[sizeof("emojimodifier")];
+    char unicode_prop_name_pool_str1368[sizeof("uideo")];
+    char unicode_prop_name_pool_str1373[sizeof("bidicontrol")];
+    char unicode_prop_name_pool_str1379[sizeof("phnx")];
+    char unicode_prop_name_pool_str1380[sizeof("limbu")];
+    char unicode_prop_name_pool_str1384[sizeof("n")];
+    char unicode_prop_name_pool_str1388[sizeof("inenclosedideographicsupplement")];
+    char unicode_prop_name_pool_str1392[sizeof("mult")];
+    char unicode_prop_name_pool_str1398[sizeof("kthi")];
+    char unicode_prop_name_pool_str1399[sizeof("incjkunifiedideographs")];
+    char unicode_prop_name_pool_str1401[sizeof("ingreekandcoptic")];
+    char unicode_prop_name_pool_str1403[sizeof("inoldhungarian")];
+    char unicode_prop_name_pool_str1406[sizeof("incjkcompatibility")];
+    char unicode_prop_name_pool_str1409[sizeof("grbase")];
+    char unicode_prop_name_pool_str1411[sizeof("nandinagari")];
+    char unicode_prop_name_pool_str1412[sizeof("brah")];
+    char unicode_prop_name_pool_str1414[sizeof("no")];
+    char unicode_prop_name_pool_str1421[sizeof("sd")];
+    char unicode_prop_name_pool_str1423[sizeof("nko")];
+    char unicode_prop_name_pool_str1424[sizeof("nkoo")];
+    char unicode_prop_name_pool_str1427[sizeof("xpeo")];
+    char unicode_prop_name_pool_str1430[sizeof("sidd")];
+    char unicode_prop_name_pool_str1435[sizeof("inherited")];
+    char unicode_prop_name_pool_str1437[sizeof("p")];
+    char unicode_prop_name_pool_str1440[sizeof("phli")];
+    char unicode_prop_name_pool_str1443[sizeof("inmeroitichieroglyphs")];
+    char unicode_prop_name_pool_str1444[sizeof("inphoenician")];
+    char unicode_prop_name_pool_str1449[sizeof("inmayannumerals")];
+    char unicode_prop_name_pool_str1453[sizeof("saurashtra")];
+    char unicode_prop_name_pool_str1455[sizeof("inkangxiradicals")];
+    char unicode_prop_name_pool_str1461[sizeof("enclosingmark")];
+    char unicode_prop_name_pool_str1467[sizeof("graphemeextend")];
+    char unicode_prop_name_pool_str1468[sizeof("beng")];
+    char unicode_prop_name_pool_str1473[sizeof("inbatak")];
+    char unicode_prop_name_pool_str1474[sizeof("glag")];
+    char unicode_prop_name_pool_str1475[sizeof("ahex")];
+    char unicode_prop_name_pool_str1477[sizeof("patsyn")];
+    char unicode_prop_name_pool_str1479[sizeof("odi")];
+    char unicode_prop_name_pool_str1486[sizeof("dogra")];
+    char unicode_prop_name_pool_str1489[sizeof("intibetan")];
+    char unicode_prop_name_pool_str1491[sizeof("lydi")];
+    char unicode_prop_name_pool_str1492[sizeof("lydian")];
+    char unicode_prop_name_pool_str1499[sizeof("inblockelements")];
+    char unicode_prop_name_pool_str1506[sizeof("cwcf")];
+    char unicode_prop_name_pool_str1507[sizeof("inunifiedcanadianaboriginalsyllabicsextended")];
+    char unicode_prop_name_pool_str1508[sizeof("regionalindicator")];
+    char unicode_prop_name_pool_str1509[sizeof("ingreekextended")];
+    char unicode_prop_name_pool_str1513[sizeof("emojimodifierbase")];
+    char unicode_prop_name_pool_str1514[sizeof("inanatolianhieroglyphs")];
+    char unicode_prop_name_pool_str1516[sizeof("indogra")];
+    char unicode_prop_name_pool_str1517[sizeof("taiviet")];
+    char unicode_prop_name_pool_str1524[sizeof("inyiradicals")];
+    char unicode_prop_name_pool_str1525[sizeof("unassigned")];
+    char unicode_prop_name_pool_str1532[sizeof("insundanesesupplement")];
+    char unicode_prop_name_pool_str1535[sizeof("innumberforms")];
+    char unicode_prop_name_pool_str1538[sizeof("lowercaseletter")];
+    char unicode_prop_name_pool_str1541[sizeof("dogr")];
+    char unicode_prop_name_pool_str1542[sizeof("lepc")];
+    char unicode_prop_name_pool_str1545[sizeof("bhks")];
+    char unicode_prop_name_pool_str1553[sizeof("word")];
+    char unicode_prop_name_pool_str1554[sizeof("gujr")];
+    char unicode_prop_name_pool_str1555[sizeof("inphaistosdisc")];
+    char unicode_prop_name_pool_str1557[sizeof("bhaiksuki")];
+    char unicode_prop_name_pool_str1560[sizeof("dash")];
+    char unicode_prop_name_pool_str1562[sizeof("inarabicextendeda")];
+    char unicode_prop_name_pool_str1565[sizeof("gujarati")];
+    char unicode_prop_name_pool_str1566[sizeof("inlatinextendedd")];
+    char unicode_prop_name_pool_str1567[sizeof("innoblock")];
+    char unicode_prop_name_pool_str1570[sizeof("java")];
+    char unicode_prop_name_pool_str1576[sizeof("ingeometricshapes")];
+    char unicode_prop_name_pool_str1577[sizeof("cyrl")];
+    char unicode_prop_name_pool_str1582[sizeof("indevanagari")];
+    char unicode_prop_name_pool_str1583[sizeof("inbalinese")];
+    char unicode_prop_name_pool_str1585[sizeof("inbyzantinemusicalsymbols")];
+    char unicode_prop_name_pool_str1589[sizeof("tale")];
+    char unicode_prop_name_pool_str1591[sizeof("deva")];
+    char unicode_prop_name_pool_str1594[sizeof("hex")];
+    char unicode_prop_name_pool_str1601[sizeof("inmyanmarextendedb")];
+    char unicode_prop_name_pool_str1603[sizeof("sinh")];
+    char unicode_prop_name_pool_str1604[sizeof("cwt")];
+    char unicode_prop_name_pool_str1606[sizeof("shavian")];
+    char unicode_prop_name_pool_str1607[sizeof("devanagari")];
+    char unicode_prop_name_pool_str1609[sizeof("oidc")];
+    char unicode_prop_name_pool_str1615[sizeof("javanese")];
+    char unicode_prop_name_pool_str1621[sizeof("mlym")];
+    char unicode_prop_name_pool_str1622[sizeof("incjkunifiedideographsextensiond")];
+    char unicode_prop_name_pool_str1624[sizeof("sentenceterminal")];
+    char unicode_prop_name_pool_str1626[sizeof("malayalam")];
+    char unicode_prop_name_pool_str1628[sizeof("inhanunoo")];
+    char unicode_prop_name_pool_str1629[sizeof("insinhalaarchaicnumbers")];
+    char unicode_prop_name_pool_str1631[sizeof("olck")];
+    char unicode_prop_name_pool_str1633[sizeof("inimperialaramaic")];
+    char unicode_prop_name_pool_str1636[sizeof("olower")];
+    char unicode_prop_name_pool_str1638[sizeof("palmyrene")];
+    char unicode_prop_name_pool_str1642[sizeof("avestan")];
+    char unicode_prop_name_pool_str1645[sizeof("incjkunifiedideographsextensionf")];
+    char unicode_prop_name_pool_str1646[sizeof("insogdian")];
+    char unicode_prop_name_pool_str1647[sizeof("indingbats")];
+    char unicode_prop_name_pool_str1648[sizeof("olchiki")];
+    char unicode_prop_name_pool_str1654[sizeof("oids")];
+    char unicode_prop_name_pool_str1661[sizeof("punctuation")];
+    char unicode_prop_name_pool_str1663[sizeof("sund")];
+    char unicode_prop_name_pool_str1666[sizeof("inbraillepatterns")];
+    char unicode_prop_name_pool_str1669[sizeof("emojicomponent")];
+    char unicode_prop_name_pool_str1672[sizeof("ideographic")];
+    char unicode_prop_name_pool_str1673[sizeof("taml")];
+    char unicode_prop_name_pool_str1688[sizeof("format")];
+    char unicode_prop_name_pool_str1694[sizeof("inornamentaldingbats")];
+    char unicode_prop_name_pool_str1700[sizeof("coptic")];
+    char unicode_prop_name_pool_str1702[sizeof("caseignorable")];
+    char unicode_prop_name_pool_str1708[sizeof("idsb")];
+    char unicode_prop_name_pool_str1709[sizeof("inmiscellaneousmathematicalsymbolsb")];
+    char unicode_prop_name_pool_str1712[sizeof("sogdian")];
+    char unicode_prop_name_pool_str1715[sizeof("sogo")];
+    char unicode_prop_name_pool_str1720[sizeof("terminalpunctuation")];
+    char unicode_prop_name_pool_str1722[sizeof("intangut")];
+    char unicode_prop_name_pool_str1729[sizeof("intifinagh")];
+    char unicode_prop_name_pool_str1733[sizeof("inlowsurrogates")];
+    char unicode_prop_name_pool_str1743[sizeof("invariationselectors")];
+    char unicode_prop_name_pool_str1745[sizeof("copt")];
+    char unicode_prop_name_pool_str1750[sizeof("soyo")];
+    char unicode_prop_name_pool_str1753[sizeof("intags")];
+    char unicode_prop_name_pool_str1756[sizeof("inverticalforms")];
+    char unicode_prop_name_pool_str1757[sizeof("ininscriptionalparthian")];
+    char unicode_prop_name_pool_str1760[sizeof("ininscriptionalpahlavi")];
+    char unicode_prop_name_pool_str1763[sizeof("meroitichieroglyphs")];
+    char unicode_prop_name_pool_str1764[sizeof("asciihexdigit")];
+    char unicode_prop_name_pool_str1766[sizeof("inethiopicextendeda")];
+    char unicode_prop_name_pool_str1767[sizeof("invedicextensions")];
+    char unicode_prop_name_pool_str1781[sizeof("nand")];
+    char unicode_prop_name_pool_str1782[sizeof("cwl")];
+    char unicode_prop_name_pool_str1785[sizeof("cprt")];
+    char unicode_prop_name_pool_str1791[sizeof("innushu")];
+    char unicode_prop_name_pool_str1794[sizeof("zanabazarsquare")];
+    char unicode_prop_name_pool_str1797[sizeof("ingeometricshapesextended")];
+    char unicode_prop_name_pool_str1798[sizeof("avst")];
+    char unicode_prop_name_pool_str1808[sizeof("imperialaramaic")];
+    char unicode_prop_name_pool_str1810[sizeof("bopo")];
+    char unicode_prop_name_pool_str1812[sizeof("sarb")];
+    char unicode_prop_name_pool_str1819[sizeof("inoldpersian")];
+    char unicode_prop_name_pool_str1830[sizeof("intaiviet")];
+    char unicode_prop_name_pool_str1834[sizeof("mahj")];
+    char unicode_prop_name_pool_str1838[sizeof("inkatakanaphoneticextensions")];
+    char unicode_prop_name_pool_str1845[sizeof("mahajani")];
+    char unicode_prop_name_pool_str1871[sizeof("closepunctuation")];
+    char unicode_prop_name_pool_str1875[sizeof("inlisu")];
+    char unicode_prop_name_pool_str1878[sizeof("softdotted")];
+    char unicode_prop_name_pool_str1897[sizeof("unknown")];
+    char unicode_prop_name_pool_str1898[sizeof("invariationselectorssupplement")];
+    char unicode_prop_name_pool_str1910[sizeof("syrc")];
+    char unicode_prop_name_pool_str1911[sizeof("hang")];
+    char unicode_prop_name_pool_str1926[sizeof("incjksymbolsandpunctuation")];
+    char unicode_prop_name_pool_str1932[sizeof("ingujarati")];
+    char unicode_prop_name_pool_str1933[sizeof("bopomofo")];
+    char unicode_prop_name_pool_str1936[sizeof("alpha")];
+    char unicode_prop_name_pool_str1937[sizeof("khoj")];
+    char unicode_prop_name_pool_str1939[sizeof("inpalmyrene")];
+    char unicode_prop_name_pool_str1942[sizeof("ingunjalagondi")];
+    char unicode_prop_name_pool_str1948[sizeof("inoldpermic")];
+    char unicode_prop_name_pool_str1950[sizeof("inlepcha")];
+    char unicode_prop_name_pool_str1951[sizeof("assigned")];
+    char unicode_prop_name_pool_str1955[sizeof("incurrencysymbols")];
+    char unicode_prop_name_pool_str1958[sizeof("insmallformvariants")];
+    char unicode_prop_name_pool_str1959[sizeof("sorasompeng")];
+    char unicode_prop_name_pool_str1964[sizeof("inlinearbsyllabary")];
+    char unicode_prop_name_pool_str1965[sizeof("oldpersian")];
+    char unicode_prop_name_pool_str1972[sizeof("caucasianalbanian")];
+    char unicode_prop_name_pool_str1973[sizeof("inenclosedcjklettersandmonths")];
+    char unicode_prop_name_pool_str1975[sizeof("hiragana")];
+    char unicode_prop_name_pool_str1976[sizeof("inbamum")];
+    char unicode_prop_name_pool_str1979[sizeof("inrejang")];
+    char unicode_prop_name_pool_str1984[sizeof("graph")];
+    char unicode_prop_name_pool_str1990[sizeof("sharada")];
+    char unicode_prop_name_pool_str1991[sizeof("inethiopicsupplement")];
+    char unicode_prop_name_pool_str1996[sizeof("indevanagariextended")];
+    char unicode_prop_name_pool_str1997[sizeof("incoptic")];
+    char unicode_prop_name_pool_str1998[sizeof("insyriacsupplement")];
+    char unicode_prop_name_pool_str2004[sizeof("inmeroiticcursive")];
+    char unicode_prop_name_pool_str2014[sizeof("hmng")];
+    char unicode_prop_name_pool_str2022[sizeof("intelugu")];
+    char unicode_prop_name_pool_str2029[sizeof("incombiningdiacriticalmarks")];
+    char unicode_prop_name_pool_str2031[sizeof("mathsymbol")];
+    char unicode_prop_name_pool_str2036[sizeof("titlecaseletter")];
+    char unicode_prop_name_pool_str2038[sizeof("ugar")];
+    char unicode_prop_name_pool_str2039[sizeof("incombiningdiacriticalmarksforsymbols")];
+    char unicode_prop_name_pool_str2040[sizeof("spacingmark")];
+    char unicode_prop_name_pool_str2043[sizeof("shrd")];
+    char unicode_prop_name_pool_str2047[sizeof("injavanese")];
+    char unicode_prop_name_pool_str2048[sizeof("syriac")];
+    char unicode_prop_name_pool_str2054[sizeof("space")];
+    char unicode_prop_name_pool_str2056[sizeof("hebr")];
+    char unicode_prop_name_pool_str2061[sizeof("ext")];
+    char unicode_prop_name_pool_str2064[sizeof("inhanguljamo")];
+    char unicode_prop_name_pool_str2066[sizeof("phag")];
+    char unicode_prop_name_pool_str2076[sizeof("inhanguljamoextendeda")];
+    char unicode_prop_name_pool_str2082[sizeof("wancho")];
+    char unicode_prop_name_pool_str2084[sizeof("bugi")];
+    char unicode_prop_name_pool_str2089[sizeof("tamil")];
+    char unicode_prop_name_pool_str2093[sizeof("sogd")];
+    char unicode_prop_name_pool_str2094[sizeof("orkh")];
+    char unicode_prop_name_pool_str2097[sizeof("oldpermic")];
+    char unicode_prop_name_pool_str2100[sizeof("siddham")];
+    char unicode_prop_name_pool_str2102[sizeof("incyrillicextendedb")];
+    char unicode_prop_name_pool_str2105[sizeof("inbrahmi")];
+    char unicode_prop_name_pool_str2108[sizeof("inmongoliansupplement")];
+    char unicode_prop_name_pool_str2113[sizeof("thaa")];
+    char unicode_prop_name_pool_str2118[sizeof("thaana")];
+    char unicode_prop_name_pool_str2120[sizeof("thai")];
+    char unicode_prop_name_pool_str2122[sizeof("buginese")];
+    char unicode_prop_name_pool_str2127[sizeof("ingeorgiansupplement")];
+    char unicode_prop_name_pool_str2129[sizeof("digit")];
+    char unicode_prop_name_pool_str2132[sizeof("cyrillic")];
+    char unicode_prop_name_pool_str2149[sizeof("sylo")];
+    char unicode_prop_name_pool_str2150[sizeof("inphoneticextensions")];
+    char unicode_prop_name_pool_str2151[sizeof("separator")];
+    char unicode_prop_name_pool_str2159[sizeof("inethiopicextended")];
+    char unicode_prop_name_pool_str2163[sizeof("inmathematicalalphanumericsymbols")];
+    char unicode_prop_name_pool_str2168[sizeof("insymbolsandpictographsextendeda")];
+    char unicode_prop_name_pool_str2170[sizeof("nd")];
+    char unicode_prop_name_pool_str2176[sizeof("tirh")];
+    char unicode_prop_name_pool_str2178[sizeof("tirhuta")];
+    char unicode_prop_name_pool_str2184[sizeof("incombiningdiacriticalmarkssupplement")];
+    char unicode_prop_name_pool_str2193[sizeof("extender")];
+    char unicode_prop_name_pool_str2197[sizeof("wcho")];
+    char unicode_prop_name_pool_str2199[sizeof("inbengali")];
+    char unicode_prop_name_pool_str2201[sizeof("talu")];
+    char unicode_prop_name_pool_str2206[sizeof("tang")];
+    char unicode_prop_name_pool_str2207[sizeof("warangciti")];
+    char unicode_prop_name_pool_str2210[sizeof("tagbanwa")];
+    char unicode_prop_name_pool_str2211[sizeof("orya")];
+    char unicode_prop_name_pool_str2212[sizeof("nl")];
+    char unicode_prop_name_pool_str2213[sizeof("induployan")];
+    char unicode_prop_name_pool_str2214[sizeof("cwu")];
+    char unicode_prop_name_pool_str2216[sizeof("inbuginese")];
+    char unicode_prop_name_pool_str2220[sizeof("telu")];
+    char unicode_prop_name_pool_str2223[sizeof("ogam")];
+    char unicode_prop_name_pool_str2226[sizeof("taitham")];
+    char unicode_prop_name_pool_str2237[sizeof("rjng")];
+    char unicode_prop_name_pool_str2240[sizeof("insuttonsignwriting")];
+    char unicode_prop_name_pool_str2250[sizeof("incombiningdiacriticalmarksextended")];
+    char unicode_prop_name_pool_str2251[sizeof("number")];
+    char unicode_prop_name_pool_str2264[sizeof("inyijinghexagramsymbols")];
+    char unicode_prop_name_pool_str2277[sizeof("whitespace")];
+    char unicode_prop_name_pool_str2278[sizeof("currencysymbol")];
+    char unicode_prop_name_pool_str2285[sizeof("inottomansiyaqnumbers")];
+    char unicode_prop_name_pool_str2288[sizeof("inlimbu")];
+    char unicode_prop_name_pool_str2293[sizeof("incopticepactnumbers")];
+    char unicode_prop_name_pool_str2295[sizeof("ingeorgianextended")];
+    char unicode_prop_name_pool_str2305[sizeof("inphoneticextensionssupplement")];
+    char unicode_prop_name_pool_str2308[sizeof("any")];
+    char unicode_prop_name_pool_str2320[sizeof("osge")];
+    char unicode_prop_name_pool_str2325[sizeof("defaultignorablecodepoint")];
+    char unicode_prop_name_pool_str2326[sizeof("hangul")];
+    char unicode_prop_name_pool_str2333[sizeof("newa")];
+    char unicode_prop_name_pool_str2343[sizeof("ethi")];
+    char unicode_prop_name_pool_str2345[sizeof("hanifirohingya")];
+    char unicode_prop_name_pool_str2346[sizeof("hmnp")];
+    char unicode_prop_name_pool_str2348[sizeof("olditalic")];
+    char unicode_prop_name_pool_str2349[sizeof("incjkunifiedideographsextensionb")];
+    char unicode_prop_name_pool_str2352[sizeof("rohg")];
+    char unicode_prop_name_pool_str2353[sizeof("innyiakengpuachuehmong")];
+    char unicode_prop_name_pool_str2355[sizeof("incjkradicalssupplement")];
+    char unicode_prop_name_pool_str2364[sizeof("newtailue")];
+    char unicode_prop_name_pool_str2365[sizeof("newline")];
+    char unicode_prop_name_pool_str2366[sizeof("lepcha")];
+    char unicode_prop_name_pool_str2375[sizeof("deprecated")];
+    char unicode_prop_name_pool_str2381[sizeof("buhd")];
+    char unicode_prop_name_pool_str2391[sizeof("inglagolitic")];
+    char unicode_prop_name_pool_str2395[sizeof("inaegeannumbers")];
+    char unicode_prop_name_pool_str2400[sizeof("modifiersymbol")];
+    char unicode_prop_name_pool_str2410[sizeof("surrogate")];
+    char unicode_prop_name_pool_str2418[sizeof("inletterlikesymbols")];
+    char unicode_prop_name_pool_str2426[sizeof("idstrinaryoperator")];
+    char unicode_prop_name_pool_str2442[sizeof("intagalog")];
+    char unicode_prop_name_pool_str2443[sizeof("tangut")];
+    char unicode_prop_name_pool_str2445[sizeof("osmanya")];
+    char unicode_prop_name_pool_str2447[sizeof("oalpha")];
+    char unicode_prop_name_pool_str2448[sizeof("inphagspa")];
+    char unicode_prop_name_pool_str2455[sizeof("ugaritic")];
+    char unicode_prop_name_pool_str2456[sizeof("otheridcontinue")];
+    char unicode_prop_name_pool_str2460[sizeof("inarabicpresentationformsb")];
+    char unicode_prop_name_pool_str2462[sizeof("inbassavah")];
+    char unicode_prop_name_pool_str2469[sizeof("other")];
+    char unicode_prop_name_pool_str2478[sizeof("othernumber")];
+    char unicode_prop_name_pool_str2480[sizeof("sylotinagri")];
+    char unicode_prop_name_pool_str2487[sizeof("ingothic")];
+    char unicode_prop_name_pool_str2498[sizeof("inbuhid")];
+    char unicode_prop_name_pool_str2502[sizeof("inlatin1supplement")];
+    char unicode_prop_name_pool_str2516[sizeof("intagbanwa")];
+    char unicode_prop_name_pool_str2523[sizeof("shaw")];
+    char unicode_prop_name_pool_str2529[sizeof("oldhungarian")];
+    char unicode_prop_name_pool_str2538[sizeof("inmahjongtiles")];
+    char unicode_prop_name_pool_str2542[sizeof("hung")];
+    char unicode_prop_name_pool_str2544[sizeof("tifinagh")];
+    char unicode_prop_name_pool_str2554[sizeof("inbopomofo")];
+    char unicode_prop_name_pool_str2561[sizeof("narb")];
+    char unicode_prop_name_pool_str2571[sizeof("inyisyllables")];
+    char unicode_prop_name_pool_str2573[sizeof("kayahli")];
+    char unicode_prop_name_pool_str2578[sizeof("otheralphabetic")];
+    char unicode_prop_name_pool_str2582[sizeof("phagspa")];
+    char unicode_prop_name_pool_str2584[sizeof("inprivateusearea")];
+    char unicode_prop_name_pool_str2588[sizeof("elba")];
+    char unicode_prop_name_pool_str2591[sizeof("nchar")];
+    char unicode_prop_name_pool_str2607[sizeof("spaceseparator")];
+    char unicode_prop_name_pool_str2609[sizeof("tibt")];
+    char unicode_prop_name_pool_str2611[sizeof("extendedpictographic")];
+    char unicode_prop_name_pool_str2615[sizeof("tibetan")];
+    char unicode_prop_name_pool_str2616[sizeof("sgnw")];
+    char unicode_prop_name_pool_str2622[sizeof("hexdigit")];
+    char unicode_prop_name_pool_str2623[sizeof("tfng")];
+    char unicode_prop_name_pool_str2627[sizeof("inbamumsupplement")];
+    char unicode_prop_name_pool_str2632[sizeof("tavt")];
+    char unicode_prop_name_pool_str2633[sizeof("incombininghalfmarks")];
+    char unicode_prop_name_pool_str2634[sizeof("inarabicmathematicalalphabeticsymbols")];
+    char unicode_prop_name_pool_str2638[sizeof("khudawadi")];
+    char unicode_prop_name_pool_str2641[sizeof("inhalfwidthandfullwidthforms")];
+    char unicode_prop_name_pool_str2652[sizeof("inhangulsyllables")];
+    char unicode_prop_name_pool_str2653[sizeof("elym")];
+    char unicode_prop_name_pool_str2669[sizeof("symbol")];
+    char unicode_prop_name_pool_str2692[sizeof("bassavah")];
+    char unicode_prop_name_pool_str2696[sizeof("elymaic")];
+    char unicode_prop_name_pool_str2698[sizeof("changeswhencasemapped")];
+    char unicode_prop_name_pool_str2709[sizeof("oldturkic")];
+    char unicode_prop_name_pool_str2725[sizeof("inplayingcards")];
+    char unicode_prop_name_pool_str2767[sizeof("zp")];
+    char unicode_prop_name_pool_str2775[sizeof("elbasan")];
+    char unicode_prop_name_pool_str2776[sizeof("buhid")];
+    char unicode_prop_name_pool_str2779[sizeof("noncharactercodepoint")];
+    char unicode_prop_name_pool_str2785[sizeof("finalpunctuation")];
+    char unicode_prop_name_pool_str2794[sizeof("inpsalterpahlavi")];
+    char unicode_prop_name_pool_str2800[sizeof("inpaucinhau")];
+    char unicode_prop_name_pool_str2801[sizeof("nonspacingmark")];
+    char unicode_prop_name_pool_str2804[sizeof("changeswhentitlecased")];
+    char unicode_prop_name_pool_str2808[sizeof("inindicsiyaqnumbers")];
+    char unicode_prop_name_pool_str2813[sizeof("phlp")];
+    char unicode_prop_name_pool_str2824[sizeof("wspace")];
+    char unicode_prop_name_pool_str2831[sizeof("nbat")];
+    char unicode_prop_name_pool_str2836[sizeof("hluw")];
+    char unicode_prop_name_pool_str2838[sizeof("cypriot")];
+    char unicode_prop_name_pool_str2839[sizeof("nabataean")];
+    char unicode_prop_name_pool_str2841[sizeof("inalchemicalsymbols")];
+    char unicode_prop_name_pool_str2847[sizeof("dupl")];
+    char unicode_prop_name_pool_str2856[sizeof("otherlowercase")];
+    char unicode_prop_name_pool_str2875[sizeof("inarabicsupplement")];
+    char unicode_prop_name_pool_str2876[sizeof("inalphabeticpresentationforms")];
+    char unicode_prop_name_pool_str2890[sizeof("otherletter")];
+    char unicode_prop_name_pool_str2916[sizeof("emojipresentation")];
+    char unicode_prop_name_pool_str2930[sizeof("changeswhenlowercased")];
+    char unicode_prop_name_pool_str2953[sizeof("dashpunctuation")];
+    char unicode_prop_name_pool_str2954[sizeof("oldsogdian")];
+    char unicode_prop_name_pool_str2970[sizeof("intangutcomponents")];
+    char unicode_prop_name_pool_str2977[sizeof("soyombo")];
+    char unicode_prop_name_pool_str2996[sizeof("paragraphseparator")];
+    char unicode_prop_name_pool_str3012[sizeof("changeswhencasefolded")];
+    char unicode_prop_name_pool_str3015[sizeof("othersymbol")];
+    char unicode_prop_name_pool_str3020[sizeof("inlatinextendedb")];
+    char unicode_prop_name_pool_str3072[sizeof("otheruppercase")];
+    char unicode_prop_name_pool_str3079[sizeof("otheridstart")];
+    char unicode_prop_name_pool_str3084[sizeof("inhebrew")];
+    char unicode_prop_name_pool_str3088[sizeof("oldnortharabian")];
+    char unicode_prop_name_pool_str3092[sizeof("omath")];
+    char unicode_prop_name_pool_str3099[sizeof("incypriotsyllabary")];
+    char unicode_prop_name_pool_str3118[sizeof("inmathematicaloperators")];
+    char unicode_prop_name_pool_str3146[sizeof("changeswhenuppercased")];
+    char unicode_prop_name_pool_str3154[sizeof("nshu")];
+    char unicode_prop_name_pool_str3182[sizeof("insuperscriptsandsubscripts")];
+    char unicode_prop_name_pool_str3188[sizeof("ogrext")];
+    char unicode_prop_name_pool_str3197[sizeof("inhanguljamoextendedb")];
+    char unicode_prop_name_pool_str3198[sizeof("alphabetic")];
+    char unicode_prop_name_pool_str3199[sizeof("dep")];
+    char unicode_prop_name_pool_str3216[sizeof("oupper")];
+    char unicode_prop_name_pool_str3258[sizeof("zyyy")];
+    char unicode_prop_name_pool_str3267[sizeof("aghb")];
+    char unicode_prop_name_pool_str3285[sizeof("ogham")];
+    char unicode_prop_name_pool_str3306[sizeof("rejang")];
+    char unicode_prop_name_pool_str3324[sizeof("tagb")];
+    char unicode_prop_name_pool_str3350[sizeof("hyphen")];
+    char unicode_prop_name_pool_str3355[sizeof("insupplementalarrowsa")];
+    char unicode_prop_name_pool_str3413[sizeof("inpahawhhmong")];
+    char unicode_prop_name_pool_str3459[sizeof("nushu")];
+    char unicode_prop_name_pool_str3478[sizeof("othermath")];
+    char unicode_prop_name_pool_str3491[sizeof("insupplementalarrowsc")];
+    char unicode_prop_name_pool_str3494[sizeof("insupplementalmathematicaloperators")];
+    char unicode_prop_name_pool_str3500[sizeof("otherdefaultignorablecodepoint")];
+    char unicode_prop_name_pool_str3527[sizeof("inhighprivateusesurrogates")];
+    char unicode_prop_name_pool_str3538[sizeof("duployan")];
+    char unicode_prop_name_pool_str3663[sizeof("oldsoutharabian")];
+    char unicode_prop_name_pool_str3666[sizeof("tglg")];
+    char unicode_prop_name_pool_str3685[sizeof("tagalog")];
+    char unicode_prop_name_pool_str3692[sizeof("inbopomofoextended")];
+    char unicode_prop_name_pool_str3731[sizeof("signwriting")];
+    char unicode_prop_name_pool_str3750[sizeof("inegyptianhieroglyphs")];
+    char unicode_prop_name_pool_str3763[sizeof("inegyptianhieroglyphformatcontrols")];
+    char unicode_prop_name_pool_str3807[sizeof("upper")];
+    char unicode_prop_name_pool_str3810[sizeof("otherpunctuation")];
+    char unicode_prop_name_pool_str3872[sizeof("ethiopic")];
+    char unicode_prop_name_pool_str3881[sizeof("hebrew")];
+    char unicode_prop_name_pool_str3901[sizeof("telugu")];
+    char unicode_prop_name_pool_str3910[sizeof("uppercase")];
+    char unicode_prop_name_pool_str3937[sizeof("insupplementalpunctuation")];
+    char unicode_prop_name_pool_str3946[sizeof("unifiedideograph")];
+    char unicode_prop_name_pool_str3961[sizeof("pahawhhmong")];
+    char unicode_prop_name_pool_str3971[sizeof("inglagoliticsupplement")];
+    char unicode_prop_name_pool_str3992[sizeof("inboxdrawing")];
+    char unicode_prop_name_pool_str4279[sizeof("uppercaseletter")];
+    char unicode_prop_name_pool_str4298[sizeof("othergraphemeextend")];
+    char unicode_prop_name_pool_str4401[sizeof("inhighsurrogates")];
+    char unicode_prop_name_pool_str4476[sizeof("insupplementalarrowsb")];
+    char unicode_prop_name_pool_str4562[sizeof("inhangulcompatibilityjamo")];
+    char unicode_prop_name_pool_str4563[sizeof("egyp")];
+    char unicode_prop_name_pool_str4577[sizeof("insupplementalsymbolsandpictographs")];
+    char unicode_prop_name_pool_str4659[sizeof("nyiakengpuachuehmong")];
+    char unicode_prop_name_pool_str4688[sizeof("insupplementaryprivateuseareaa")];
+    char unicode_prop_name_pool_str4822[sizeof("openpunctuation")];
+    char unicode_prop_name_pool_str4851[sizeof("egyptianhieroglyphs")];
+    char unicode_prop_name_pool_str5809[sizeof("insupplementaryprivateuseareab")];
   };
 static const struct unicode_prop_name_pool_t unicode_prop_name_pool_contents =
   {
     "lana",
-    "lina",
-    "yi",
-    "cn",
     "z",
+    "yi",
+    "lina",
     "mn",
     "yiii",
-    "ci",
+    "cn",
+    "maka",
     "mani",
+    "zzzz",
+    "inkannada",
+    "ci",
     "lo",
     "lao",
     "laoo",
     "miao",
-    "maka",
-    "me",
+    "innko",
     "co",
+    "me",
     "loe",
-    "inkannada",
-    "innko",
-    "zzzz",
     "gran",
     "pi",
     "lineara",
+    "mark",
     "cari",
     "carian",
-    "pe",
     "po",
-    "kana",
     "mendekikakui",
-    "geor",
-    "meeteimayek",
-    "mark",
-    "m",
     "grek",
-    "mero",
+    "pe",
+    "meeteimayek",
+    "inkharoshthi",
+    "geor",
+    "greek",
     "mro",
     "mroo",
+    "kana",
+    "mero",
+    "m",
     "gonm",
-    "c",
     "cakm",
-    "greek",
-    "inkharoshthi",
-    "mandaic",
     "inosmanya",
-    "inarmenian",
     "inmanichaean",
-    "common",
+    "inarmenian",
     "inmro",
     "inmiao",
-    "qaai",
+    "c",
     "inchakma",
+    "common",
+    "mandaic",
+    "inmyanmar",
+    "inmakasar",
+    "qaai",
+    "inideographicsymbolsandpunctuation",
+    "inkhmer",
     "cans",
-    "connectorpunctuation",
+    "prependedconcatenationmark",
     "lm",
     "marc",
-    "inmyanmar",
-    "vai",
-    "vaii",
-    "inideographicsymbolsandpunctuation",
-    "merc",
-    "inavestan",
-    "incuneiformnumbersandpunctuation",
-    "inmakasar",
+    "connectorpunctuation",
     "inrunic",
     "incarian",
-    "prependedconcatenationmark",
-    "lc",
-    "inipaextensions",
-    "inkhmer",
-    "perm",
+    "inavestan",
     "combiningmark",
+    "incuneiformnumbersandpunctuation",
+    "merc",
+    "perm",
     "inahom",
-    "cc",
+    "inipaextensions",
     "incherokee",
-    "mc",
     "insharada",
-    "masaramgondi",
-    "incuneiform",
     "makasar",
-    "qaac",
     "inarrows",
-    "armn",
+    "lc",
+    "masaramgondi",
+    "incuneiform",
+    "mc",
+    "cc",
+    "inzanabazarsquare",
     "lineseparator",
+    "armn",
+    "qmark",
     "armi",
-    "pc",
-    "armenian",
     "insamaritan",
-    "inmasaramgondi",
-    "inzanabazarsquare",
-    "qmark",
+    "armenian",
     "inmarchen",
-    "zs",
-    "cs",
-    "incyrillic",
-    "incham",
-    "latn",
+    "inmasaramgondi",
+    "qaac",
+    "pc",
     "inscriptionalparthian",
+    "latn",
     "latin",
     "ri",
-    "inkhmersymbols",
-    "pcm",
     "inthaana",
+    "inkhmersymbols",
+    "inkatakana",
+    "incyrillic",
+    "inthai",
+    "incham",
+    "inkaithi",
+    "zs",
     "mtei",
+    "vai",
+    "vaii",
+    "initialpunctuation",
+    "cs",
     "insyriac",
-    "ps",
-    "inthai",
+    "pcm",
+    "intakri",
+    "mand",
     "l",
-    "innewa",
-    "inkatakana",
-    "ascii",
-    "initialpunctuation",
-    "inkaithi",
-    "arabic",
-    "inideographicdescriptioncharacters",
-    "inlineara",
-    "mand",
-    "mongolian",
-    "inlao",
-    "katakana",
+    "ps",
+    "dia",
+    "inkanaextendeda",
+    "di",
     "mend",
-    "intakri",
-    "inruminumeralsymbols",
-    "prti",
     "modi",
-    "inwarangciti",
-    "incjkcompatibilityforms",
-    "inspecials",
-    "incjkcompatibilityideographs",
     "ideo",
+    "katakana",
+    "prti",
+    "inideographicdescriptioncharacters",
+    "inlineara",
+    "xidcontinue",
+    "brai",
+    "inlao",
+    "ascii",
     "privateuse",
-    "kali",
+    "arabic",
+    "mongolian",
     "inmyanmarextendeda",
+    "inruminumeralsymbols",
     "letter",
-    "brai",
-    "inkanaextendeda",
-    "vs",
-    "xidcontinue",
-    "lower",
-    "inchesssymbols",
-    "control",
-    "inadlam",
+    "innandinagari",
+    "inmeeteimayek",
+    "inoldnortharabian",
     "grlink",
     "knda",
-    "inmeeteimayek",
     "kannada",
-    "inmiscellaneousmathematicalsymbolsa",
-    "palm",
-    "inlycian",
+    "incjkcompatibilityforms",
+    "incjkcompatibilityideographs",
+    "inmodi",
+    "kali",
+    "control",
+    "inadlam",
+    "inspecials",
+    "inmendekikakui",
     "intransportandmapsymbols",
-    "inoldnortharabian",
-    "inemoticons",
     "letternumber",
-    "inmodi",
     "xidc",
-    "lowercase",
-    "inancientsymbols",
-    "cwcm",
     "inmedefaidrin",
-    "psalterpahlavi",
-    "gothic",
-    "inmendekikakui",
+    "inchesssymbols",
+    "inemoticons",
     "brahmi",
     "inolditalic",
-    "inmalayalam",
+    "palm",
+    "inlycian",
+    "inmiscellaneousmathematicalsymbolsa",
     "xids",
-    "incommonindicnumberforms",
-    "meroiticcursive",
-    "inlinearbideograms",
-    "patternwhitespace",
+    "psalterpahlavi",
     "insundanese",
-    "joinc",
     "inoldsogdian",
-    "incjkstrokes",
-    "so",
-    "patternsyntax",
+    "diacritic",
+    "gothic",
+    "inancientsymbols",
+    "meroiticcursive",
+    "inmalayalam",
+    "patternwhitespace",
+    "sk",
+    "insmallkanaextension",
+    "inmandaic",
     "lt",
+    "so",
+    "inlinearbideograms",
+    "incommonindicnumberforms",
     "incjkcompatibilityideographssupplement",
-    "inmandaic",
-    "insylotinagri",
     "idc",
-    "sk",
-    "alnum",
-    "sora",
-    "bamum",
     "inoldsoutharabian",
-    "patws",
-    "inmusicalsymbols",
+    "insylotinagri",
     "idsbinaryoperator",
-    "indominotiles",
-    "bass",
-    "innewtailue",
-    "ital",
-    "inmiscellaneoussymbols",
+    "sora",
+    "bamum",
+    "inkanasupplement",
+    "incjkstrokes",
+    "joinc",
     "inopticalcharacterrecognition",
+    "vs",
+    "indominotiles",
+    "batk",
     "grext",
-    "inkanasupplement",
-    "inmiscellaneoussymbolsandarrows",
-    "inmiscellaneoussymbolsandpictographs",
-    "unknown",
+    "batak",
+    "patws",
     "inmodifiertoneletters",
+    "ital",
+    "bass",
+    "decimalnumber",
+    "alnum",
     "ids",
-    "zl",
+    "print",
     "inlatinextendeda",
-    "ll",
+    "intaitham",
+    "inmusicalsymbols",
     "intaile",
-    "incontrolpictures",
-    "s",
-    "batk",
     "samr",
-    "lisu",
-    "print",
     "samaritan",
+    "s",
     "inlatinextendede",
-    "intaitham",
-    "pauc",
-    "batak",
-    "sm",
     "bali",
+    "lisu",
+    "pauc",
+    "patternsyntax",
+    "incontrolpictures",
+    "blank",
+    "inmiscellaneoussymbols",
+    "ll",
     "inancientgreekmusicalnotation",
-    "uideo",
-    "intaixuanjingsymbols",
-    "oriya",
-    "incyrillicextendeda",
-    "bengali",
+    "zl",
+    "inlydian",
+    "sm",
+    "inmiscellaneoussymbolsandarrows",
     "inugaritic",
+    "bengali",
+    "pd",
+    "inmiscellaneoussymbolsandpictographs",
+    "medf",
+    "cf",
     "balinese",
-    "sc",
+    "medefaidrin",
+    "han",
     "intamil",
-    "inlydian",
+    "hani",
     "inmultani",
-    "gong",
-    "blank",
-    "ingrantha",
-    "mong",
-    "inearlydynasticcuneiform",
+    "hano",
+    "inshorthandformatcontrols",
     "insaurashtra",
-    "georgian",
-    "zinh",
-    "inosage",
-    "ingeneralpunctuation",
-    "incaucasianalbanian",
-    "pd",
-    "canadianaboriginal",
-    "glagolitic",
-    "inspacingmodifierletters",
-    "idcontinue",
+    "pf",
     "inoldturkic",
-    "plrd",
-    "joincontrol",
+    "idcontinue",
+    "hanunoo",
+    "sc",
+    "inkhojki",
     "idst",
-    "inhanifirohingya",
-    "osage",
-    "incyrillicextendedc",
-    "ingeorgian",
-    "unassigned",
-    "lowercaseletter",
-    "emoji",
+    "canadianaboriginal",
+    "hira",
+    "plrd",
+    "incaucasianalbanian",
     "indeseret",
+    "inearlydynasticcuneiform",
+    "inspacingmodifierletters",
+    "innewa",
+    "idstart",
+    "zinh",
+    "incyrillicextendeda",
+    "dsrt",
+    "cased",
+    "glagolitic",
+    "inhanifirohingya",
     "inancientgreeknumbers",
-    "inmongolian",
-    "cher",
-    "cherokee",
+    "inmeeteimayekextensions",
+    "intaixuanjingsymbols",
+    "joincontrol",
+    "runr",
+    "inwarangciti",
+    "deseret",
     "inhiragana",
+    "sind",
+    "cherokee",
+    "inlatinextendedc",
+    "adlm",
     "phoenician",
+    "cher",
     "marchen",
-    "xsux",
+    "inkhudawadi",
+    "sinhala",
+    "lower",
+    "graphemelink",
+    "xidstart",
+    "ingrantha",
+    "bidic",
+    "xdigit",
+    "casedletter",
+    "gong",
+    "multani",
+    "gunjalagondi",
     "cham",
     "chakma",
-    "inmeeteimayekextensions",
-    "inlatinextendedc",
+    "mong",
     "kaithi",
-    "graphemebase",
-    "idstart",
-    "osma",
-    "adlm",
     "inmahajani",
-    "cased",
-    "runr",
-    "sinhala",
-    "manichaean",
+    "graphemebase",
+    "insiddham",
     "inogham",
-    "graphemelink",
-    "ingurmukhi",
-    "cwt",
+    "inosage",
+    "incountingrodnumerals",
+    "inwancho",
     "khojki",
-    "khar",
-    "multani",
-    "gunjalagondi",
-    "casedletter",
-    "inethiopic",
+    "ingeneralpunctuation",
+    "georgian",
+    "incyrillicextendedc",
+    "inkayahli",
+    "khar",
+    "inoriya",
+    "manichaean",
+    "bamu",
+    "zanb",
+    "oriya",
     "inolchiki",
-    "variationselector",
-    "sind",
-    "incountingrodnumerals",
-    "logicalorderexception",
-    "insinhala",
-    "bidic",
-    "dia",
-    "insorasompeng",
-    "anatolianhieroglyphs",
-    "inlowsurrogates",
-    "di",
-    "ahom",
-    "inenclosedalphanumerics",
+    "linb",
+    "inethiopic",
+    "wara",
+    "ingeorgian",
+    "innabataean",
+    "inkanbun",
     "adlam",
-    "inkhudawadi",
+    "inbhaiksuki",
+    "insinhala",
+    "inelbasan",
+    "lowercase",
+    "takri",
+    "inmongolian",
+    "invai",
+    "xsux",
     "cntrl",
-    "xidstart",
-    "xdigit",
-    "phnx",
-    "emojimodifier",
-    "khmr",
-    "insiddham",
-    "cwl",
-    "bamu",
-    "ingreekandcoptic",
-    "inmiscellaneoustechnical",
+    "emoji",
     "sterm",
-    "inscriptionalpahlavi",
+    "cuneiform",
+    "cwcm",
+    "hatran",
+    "linearb",
+    "taile",
     "inlatinextendedadditional",
-    "kharoshthi",
-    "runic",
-    "odi",
-    "ahex",
-    "khmer",
+    "inenclosedalphanumerics",
+    "anatolianhieroglyphs",
     "incyrillicsupplement",
+    "intamilsupplement",
+    "inmiscellaneoustechnical",
+    "ahom",
     "incherokeesupplement",
-    "inmeroitichieroglyphs",
-    "enclosingmark",
-    "glag",
-    "inkangxiradicals",
-    "math",
+    "takr",
+    "khmr",
+    "incjkunifiedideographsextensiona",
     "quotationmark",
-    "goth",
-    "emojimodifierbase",
-    "ugar",
+    "lyci",
+    "lycian",
+    "ingurmukhi",
+    "runic",
+    "limb",
+    "inscriptionalpahlavi",
+    "hatr",
+    "variationselector",
+    "modifierletter",
+    "incjkunifiedideographsextensione",
+    "mymr",
+    "myanmar",
     "lu",
+    "kharoshthi",
+    "inarabic",
     "radical",
-    "incjkunifiedideographsextensiona",
-    "beng",
-    "braille",
-    "n",
+    "khmer",
+    "inunifiedcanadianaboriginalsyllabics",
+    "osage",
     "sundanese",
-    "olck",
-    "incjkunifiedideographsextensione",
-    "diacritic",
+    "innewtailue",
+    "logicalorderexception",
+    "math",
+    "braille",
+    "goth",
+    "insorasompeng",
+    "insoyombo",
+    "arab",
+    "saur",
+    "guru",
+    "term",
+    "paucinhau",
+    "inbasiclatin",
+    "inarabicpresentationformsa",
+    "punct",
+    "gurmukhi",
     "grantha",
+    "inshavian",
+    "osma",
     "inenclosedalphanumericsupplement",
-    "olchiki",
-    "oidc",
-    "olower",
-    "regionalindicator",
-    "no",
     "intirhuta",
+    "inelymaic",
     "inhatran",
-    "saur",
+    "incjkunifiedideographsextensionc",
+    "emojimodifier",
+    "uideo",
+    "bidicontrol",
+    "phnx",
+    "limbu",
+    "n",
+    "inenclosedideographicsupplement",
+    "mult",
     "kthi",
-    "ingeometricshapes",
-    "guru",
-    "ingreekextended",
-    "paucinhau",
+    "incjkunifiedideographs",
+    "ingreekandcoptic",
+    "inoldhungarian",
+    "incjkcompatibility",
+    "grbase",
+    "nandinagari",
+    "brah",
+    "no",
+    "sd",
+    "nko",
+    "nkoo",
     "xpeo",
+    "sidd",
+    "inherited",
     "p",
     "phli",
-    "nko",
-    "nkoo",
-    "oids",
-    "indogra",
+    "inmeroitichieroglyphs",
     "inphoenician",
-    "punct",
-    "limbu",
-    "gurmukhi",
-    "mult",
-    "brah",
-    "taile",
-    "inoldhungarian",
-    "takri",
-    "bidicontrol",
-    "invai",
-    "incjkunifiedideographsextensionc",
-    "inenclosedideographicsupplement",
-    "decimalnumber",
-    "lepc",
-    "inherited",
-    "incjkunifiedideographs",
-    "graphemeextend",
+    "inmayannumerals",
     "saurashtra",
-    "caseignorable",
-    "emojicomponent",
-    "takr",
+    "inkangxiradicals",
+    "enclosingmark",
+    "graphemeextend",
+    "beng",
+    "inbatak",
+    "glag",
+    "ahex",
+    "patsyn",
+    "odi",
+    "dogra",
+    "intibetan",
+    "lydi",
+    "lydian",
+    "inblockelements",
+    "cwcf",
+    "inunifiedcanadianaboriginalsyllabicsextended",
+    "regionalindicator",
+    "ingreekextended",
+    "emojimodifierbase",
     "inanatolianhieroglyphs",
-    "inornamentaldingbats",
-    "inphaistosdisc",
-    "insogdian",
-    "indingbats",
-    "sd",
-    "zanb",
-    "insinhalaarchaicnumbers",
-    "ideographic",
-    "sidd",
-    "linb",
-    "sogdian",
+    "indogra",
+    "taiviet",
+    "inyiradicals",
+    "unassigned",
+    "insundanesesupplement",
+    "innumberforms",
+    "lowercaseletter",
+    "dogr",
+    "lepc",
     "bhks",
-    "sogo",
+    "word",
+    "gujr",
+    "inphaistosdisc",
     "bhaiksuki",
-    "term",
-    "insundanesesupplement",
-    "intags",
-    "innabataean",
+    "dash",
+    "inarabicextendeda",
+    "gujarati",
+    "inlatinextendedd",
+    "innoblock",
+    "java",
+    "ingeometricshapes",
+    "cyrl",
+    "indevanagari",
+    "inbalinese",
+    "inbyzantinemusicalsymbols",
+    "tale",
+    "deva",
+    "hex",
+    "inmyanmarextendedb",
     "sinh",
+    "cwt",
     "shavian",
-    "inbhaiksuki",
-    "inelbasan",
-    "inimperialaramaic",
-    "inshavian",
-    "intangut",
-    "inshorthandformatcontrols",
-    "inkanbun",
+    "devanagari",
+    "oidc",
+    "javanese",
+    "mlym",
+    "incjkunifiedideographsextensiond",
     "sentenceterminal",
-    "medf",
-    "coptic",
-    "linearb",
-    "medefaidrin",
-    "inethiopicextendeda",
+    "malayalam",
     "inhanunoo",
-    "han",
-    "cwcf",
-    "hani",
-    "limb",
-    "hano",
-    "ingeometricshapesextended",
-    "hanunoo",
-    "inlatinextendedd",
-    "inarabic",
-    "cwu",
-    "asciihexdigit",
-    "ininscriptionalparthian",
-    "format",
-    "ininscriptionalpahlavi",
-    "hira",
-    "dsrt",
-    "copt",
-    "ugaritic",
-    "newa",
-    "arab",
-    "inkhojki",
-    "oldpersian",
+    "insinhalaarchaicnumbers",
+    "olck",
+    "inimperialaramaic",
+    "olower",
+    "palmyrene",
+    "avestan",
+    "incjkunifiedideographsextensionf",
+    "insogdian",
+    "indingbats",
+    "olchiki",
+    "oids",
     "punctuation",
-    "deseret",
-    "newtailue",
-    "newline",
-    "ext",
     "sund",
-    "ogam",
-    "inbasiclatin",
-    "inarabicpresentationformsa",
+    "inbraillepatterns",
+    "emojicomponent",
+    "ideographic",
+    "taml",
+    "format",
+    "inornamentaldingbats",
+    "coptic",
+    "caseignorable",
+    "idsb",
+    "inmiscellaneousmathematicalsymbolsb",
+    "sogdian",
+    "sogo",
+    "terminalpunctuation",
+    "intangut",
+    "intifinagh",
+    "inlowsurrogates",
+    "invariationselectors",
+    "copt",
+    "soyo",
+    "intags",
+    "inverticalforms",
+    "ininscriptionalparthian",
+    "ininscriptionalpahlavi",
+    "meroitichieroglyphs",
+    "asciihexdigit",
+    "inethiopicextendeda",
+    "invedicextensions",
+    "nand",
+    "cwl",
     "cprt",
-    "imperialaramaic",
-    "incjkunifiedideographsextensiond",
-    "assigned",
-    "taiviet",
     "innushu",
-    "inoriya",
-    "wara",
-    "java",
-    "sorasompeng",
-    "inkayahli",
-    "orkh",
-    "closepunctuation",
-    "grbase",
-    "tale",
+    "zanabazarsquare",
+    "ingeometricshapesextended",
+    "avst",
+    "imperialaramaic",
     "bopo",
-    "javanese",
-    "osge",
-    "oldpermic",
+    "sarb",
     "inoldpersian",
-    "phag",
-    "alpha",
-    "lyci",
-    "lycian",
+    "intaiviet",
+    "mahj",
     "inkatakanaphoneticextensions",
-    "incjksymbolsandpunctuation",
-    "inhanguljamo",
-    "inhanguljamoextendeda",
-    "avestan",
-    "inpalmyrene",
-    "inlepcha",
-    "indevanagari",
-    "taml",
-    "sgnw",
-    "inblockelements",
+    "mahajani",
+    "closepunctuation",
     "inlisu",
-    "mymr",
-    "myanmar",
-    "graph",
-    "cuneiform",
-    "extender",
-    "inphoneticextensions",
-    "inmongoliansupplement",
-    "bopomofo",
-    "intibetan",
-    "innumberforms",
-    "shaw",
-    "inbatak",
-    "inoldpermic",
-    "incoptic",
-    "invariationselectors",
-    "insoyombo",
-    "terminalpunctuation",
-    "bugi",
-    "insyriacsupplement",
-    "sogd",
-    "hatran",
-    "inbyzantinemusicalsymbols",
-    "inbalinese",
-    "buginese",
-    "innoblock",
-    "inethiopicsupplement",
-    "inglagolitic",
-    "ingeorgiansupplement",
-    "space",
-    "sharada",
-    "dogra",
-    "avst",
-    "hex",
-    "inunifiedcanadianaboriginalsyllabics",
-    "inverticalforms",
-    "spacingmark",
-    "inarabicextendeda",
-    "hatr",
-    "modifierletter",
-    "inmyanmarextendedb",
-    "incjkcompatibility",
-    "khudawadi",
-    "invedicextensions",
-    "inethiopicextended",
-    "ingeorgianextended",
-    "shrd",
-    "dogr",
-    "intelugu",
-    "inmiscellaneousmathematicalsymbolsb",
-    "inmayannumerals",
-    "olditalic",
-    "inbraillepatterns",
-    "oalpha",
-    "inmathematicalalphanumericsymbols",
-    "inphoneticextensionssupplement",
-    "intagalog",
-    "insuttonsignwriting",
-    "siddham",
-    "intaiviet",
-    "nl",
-    "separator",
-    "ethi",
-    "patsyn",
-    "rohg",
+    "softdotted",
+    "unknown",
     "invariationselectorssupplement",
-    "inyiradicals",
-    "otheridcontinue",
-    "idsb",
-    "insmallformvariants",
-    "lydi",
-    "lydian",
-    "other",
-    "othernumber",
-    "cyrl",
-    "nd",
-    "induployan",
-    "dash",
-    "zanabazarsquare",
-    "incopticepactnumbers",
-    "number",
-    "inphagspa",
-    "mlym",
-    "malayalam",
-    "word",
-    "sarb",
-    "tang",
-    "otheralphabetic",
-    "tagbanwa",
-    "lepcha",
-    "surrogate",
-    "palmyrene",
-    "cf",
-    "ingothic",
-    "inmeroiticcursive",
-    "tamil",
-    "oldhungarian",
-    "titlecaseletter",
-    "thaa",
-    "inunifiedcanadianaboriginalsyllabicsextended",
-    "thaana",
-    "thai",
-    "pf",
-    "extendedpictographic",
-    "incjkradicalssupplement",
-    "indevanagariextended",
-    "gujr",
-    "gujarati",
-    "tirh",
-    "caucasianalbanian",
-    "incyrillicextendedb",
-    "soyo",
-    "inhangulsyllables",
-    "inbamum",
-    "taitham",
-    "meroitichieroglyphs",
-    "intifinagh",
-    "talu",
-    "inbengali",
-    "incjkunifiedideographsextensionf",
-    "buhd",
-    "telu",
-    "inbuginese",
-    "idstrinaryoperator",
-    "tirhuta",
-    "oldturkic",
-    "incombiningdiacriticalmarks",
-    "phagspa",
-    "incombiningdiacriticalmarksforsymbols",
-    "changeswhencasemapped",
-    "inlatin1supplement",
-    "inbrahmi",
+    "syrc",
     "hang",
-    "nchar",
-    "oldsogdian",
-    "deva",
+    "incjksymbolsandpunctuation",
     "ingujarati",
-    "otherlowercase",
+    "bopomofo",
+    "alpha",
+    "khoj",
+    "inpalmyrene",
     "ingunjalagondi",
-    "devanagari",
-    "syrc",
-    "mahj",
-    "hiragana",
-    "orya",
-    "mahajani",
+    "inoldpermic",
+    "inlepcha",
+    "assigned",
     "incurrencysymbols",
-    "spaceseparator",
-    "otherletter",
+    "insmallformvariants",
+    "sorasompeng",
     "inlinearbsyllabary",
+    "oldpersian",
+    "caucasianalbanian",
+    "inenclosedcjklettersandmonths",
+    "hiragana",
+    "inbamum",
     "inrejang",
+    "graph",
+    "sharada",
+    "inethiopicsupplement",
+    "indevanagariextended",
+    "incoptic",
+    "insyriacsupplement",
+    "inmeroiticcursive",
     "hmng",
-    "ogrext",
-    "inaegeannumbers",
-    "changeswhentitlecased",
-    "zp",
+    "intelugu",
+    "incombiningdiacriticalmarks",
     "mathsymbol",
-    "khoj",
-    "incombiningdiacriticalmarkssupplement",
-    "warangciti",
+    "titlecaseletter",
+    "ugar",
+    "incombiningdiacriticalmarksforsymbols",
+    "spacingmark",
+    "shrd",
+    "injavanese",
     "syriac",
-    "finalpunctuation",
-    "othersymbol",
-    "currencysymbol",
+    "space",
+    "hebr",
+    "ext",
+    "inhanguljamo",
+    "phag",
+    "inhanguljamoextendeda",
+    "wancho",
+    "bugi",
+    "tamil",
+    "sogd",
+    "orkh",
+    "oldpermic",
+    "siddham",
+    "incyrillicextendedb",
+    "inbrahmi",
+    "inmongoliansupplement",
+    "thaa",
+    "thaana",
+    "thai",
+    "buginese",
+    "ingeorgiansupplement",
     "digit",
-    "emojipresentation",
-    "inpsalterpahlavi",
-    "softdotted",
-    "phlp",
-    "noncharactercodepoint",
-    "inlimbu",
-    "nonspacingmark",
-    "omath",
     "cyrillic",
-    "inenclosedcjklettersandmonths",
-    "tangut",
-    "changeswhenlowercased",
-    "inalphabeticpresentationforms",
-    "intangutcomponents",
-    "incombiningdiacriticalmarksextended",
-    "ogham",
-    "osmanya",
-    "intagbanwa",
-    "inprivateusearea",
-    "inpaucinhau",
-    "otheruppercase",
     "sylo",
-    "elba",
-    "paragraphseparator",
-    "inbassavah",
-    "otheridstart",
-    "signwriting",
+    "inphoneticextensions",
+    "separator",
+    "inethiopicextended",
+    "inmathematicalalphanumericsymbols",
+    "insymbolsandpictographsextendeda",
+    "nd",
+    "tirh",
+    "tirhuta",
+    "incombiningdiacriticalmarkssupplement",
+    "extender",
+    "wcho",
+    "inbengali",
+    "talu",
+    "tang",
+    "warangciti",
+    "tagbanwa",
+    "orya",
+    "nl",
+    "induployan",
+    "cwu",
+    "inbuginese",
+    "telu",
+    "ogam",
+    "taitham",
     "rjng",
+    "insuttonsignwriting",
+    "incombiningdiacriticalmarksextended",
+    "number",
+    "inyijinghexagramsymbols",
     "whitespace",
+    "currencysymbol",
+    "inottomansiyaqnumbers",
+    "inlimbu",
+    "incopticepactnumbers",
+    "ingeorgianextended",
+    "inphoneticextensionssupplement",
+    "any",
+    "osge",
+    "defaultignorablecodepoint",
+    "hangul",
+    "newa",
+    "ethi",
+    "hanifirohingya",
+    "hmnp",
+    "olditalic",
     "incjkunifiedideographsextensionb",
-    "inletterlikesymbols",
-    "buhid",
-    "oupper",
-    "bassavah",
-    "inhebrew",
-    "narb",
-    "inbuhid",
-    "inbopomofo",
-    "elbasan",
-    "incombininghalfmarks",
-    "inindicsiyaqnumbers",
-    "changeswhenuppercased",
-    "inmathematicaloperators",
-    "inarabicmathematicalalphabeticsymbols",
-    "hluw",
-    "hexdigit",
+    "rohg",
+    "innyiakengpuachuehmong",
+    "incjkradicalssupplement",
+    "newtailue",
+    "newline",
+    "lepcha",
     "deprecated",
-    "insuperscriptsandsubscripts",
-    "nshu",
-    "injavanese",
-    "inbamumsupplement",
-    "hangul",
-    "unifiedideograph",
-    "tavt",
-    "othermath",
-    "pahawhhmong",
+    "buhd",
+    "inglagolitic",
+    "inaegeannumbers",
+    "modifiersymbol",
+    "surrogate",
+    "inletterlikesymbols",
+    "idstrinaryoperator",
+    "intagalog",
+    "tangut",
+    "osmanya",
+    "oalpha",
+    "inphagspa",
+    "ugaritic",
+    "otheridcontinue",
+    "inarabicpresentationformsb",
+    "inbassavah",
+    "other",
+    "othernumber",
     "sylotinagri",
+    "ingothic",
+    "inbuhid",
+    "inlatin1supplement",
+    "intagbanwa",
+    "shaw",
+    "oldhungarian",
+    "inmahjongtiles",
     "hung",
+    "tifinagh",
+    "inbopomofo",
+    "narb",
+    "inyisyllables",
     "kayahli",
-    "inpahawhhmong",
-    "upper",
-    "inalchemicalsymbols",
-    "nbat",
-    "nabataean",
-    "uppercase",
-    "hebr",
-    "inmahjongtiles",
-    "oldnortharabian",
-    "inarabicsupplement",
+    "otheralphabetic",
+    "phagspa",
+    "inprivateusearea",
+    "elba",
+    "nchar",
+    "spaceseparator",
     "tibt",
+    "extendedpictographic",
     "tibetan",
-    "inhighprivateusesurrogates",
-    "insupplementalarrowsa",
-    "inarabicpresentationformsb",
-    "otherdefaultignorablecodepoint",
+    "sgnw",
+    "hexdigit",
+    "tfng",
+    "inbamumsupplement",
+    "tavt",
+    "incombininghalfmarks",
+    "inarabicmathematicalalphabeticsymbols",
+    "khudawadi",
+    "inhalfwidthandfullwidthforms",
+    "inhangulsyllables",
+    "elym",
     "symbol",
+    "bassavah",
+    "elymaic",
+    "changeswhencasemapped",
+    "oldturkic",
     "inplayingcards",
-    "inhalfwidthandfullwidthforms",
+    "zp",
+    "elbasan",
+    "buhid",
+    "noncharactercodepoint",
+    "finalpunctuation",
+    "inpsalterpahlavi",
+    "inpaucinhau",
+    "nonspacingmark",
+    "changeswhentitlecased",
+    "inindicsiyaqnumbers",
+    "phlp",
     "wspace",
-    "tfng",
-    "insupplementalmathematicaloperators",
-    "insupplementalarrowsc",
-    "inhanguljamoextendedb",
-    "aghb",
+    "nbat",
+    "hluw",
     "cypriot",
-    "nushu",
-    "tifinagh",
-    "otherpunctuation",
-    "alphabetic",
+    "nabataean",
+    "inalchemicalsymbols",
     "dupl",
-    "tglg",
-    "changeswhencasefolded",
-    "tagalog",
-    "modifiersymbol",
-    "any",
-    "inglagoliticsupplement",
-    "ethiopic",
-    "uppercaseletter",
+    "otherlowercase",
+    "inarabicsupplement",
+    "inalphabeticpresentationforms",
+    "otherletter",
+    "emojipresentation",
+    "changeswhenlowercased",
     "dashpunctuation",
-    "hanifirohingya",
-    "inyijinghexagramsymbols",
+    "oldsogdian",
+    "intangutcomponents",
+    "soyombo",
+    "paragraphseparator",
+    "changeswhencasefolded",
+    "othersymbol",
+    "inlatinextendedb",
+    "otheruppercase",
+    "otheridstart",
+    "inhebrew",
+    "oldnortharabian",
+    "omath",
     "incypriotsyllabary",
+    "inmathematicaloperators",
+    "changeswhenuppercased",
+    "nshu",
+    "insuperscriptsandsubscripts",
+    "ogrext",
+    "inhanguljamoextendedb",
+    "alphabetic",
+    "dep",
+    "oupper",
+    "zyyy",
+    "aghb",
+    "ogham",
     "rejang",
-    "defaultignorablecodepoint",
     "tagb",
-    "dep",
-    "inyisyllables",
+    "hyphen",
+    "insupplementalarrowsa",
+    "inpahawhhmong",
+    "nushu",
+    "othermath",
+    "insupplementalarrowsc",
+    "insupplementalmathematicaloperators",
+    "otherdefaultignorablecodepoint",
+    "inhighprivateusesurrogates",
+    "duployan",
     "oldsoutharabian",
-    "inlatinextendedb",
-    "insupplementalpunctuation",
-    "othergraphemeextend",
+    "tglg",
+    "tagalog",
+    "inbopomofoextended",
+    "signwriting",
+    "inegyptianhieroglyphs",
+    "inegyptianhieroglyphformatcontrols",
+    "upper",
+    "otherpunctuation",
+    "ethiopic",
     "hebrew",
+    "telugu",
+    "uppercase",
+    "insupplementalpunctuation",
+    "unifiedideograph",
+    "pahawhhmong",
+    "inglagoliticsupplement",
     "inboxdrawing",
+    "uppercaseletter",
+    "othergraphemeextend",
     "inhighsurrogates",
-    "telugu",
-    "inbopomofoextended",
-    "soyombo",
-    "inegyptianhieroglyphs",
-    "openpunctuation",
-    "insupplementaryprivateuseareaa",
-    "hyphen",
+    "insupplementalarrowsb",
     "inhangulcompatibilityjamo",
     "egyp",
-    "insupplementalarrowsb",
-    "duployan",
     "insupplementalsymbolsandpictographs",
-    "zyyy",
+    "nyiakengpuachuehmong",
+    "insupplementaryprivateuseareaa",
+    "openpunctuation",
     "egyptianhieroglyphs",
     "insupplementaryprivateuseareab"
   };
@@ -26639,2216 +27028,2305 @@ unicode_lookup_property_name (register const char *str, register size_t len)
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1},
 
-      {pool_offset(10),                               235},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(10),                               238},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(17),                               124},
+      {pool_offset(14),                                  262},
+      {-1},
 
-      {pool_offset(18),                                 257},
-      {-1}, {-1}, {-1},
+      {pool_offset(16),                                 261},
+
+      {pool_offset(17),                               125},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(22),                                  53},
+      {pool_offset(24),                                 154},
+
+      {pool_offset(25),                               261},
       {-1},
 
-      {pool_offset(24),                                  258},
+      {pool_offset(27),                                  53},
 
-      {pool_offset(25),                                 153},
+      {pool_offset(28),                               139},
       {-1},
 
-      {pool_offset(27),                               257},
+      {pool_offset(30),                               142},
       {-1}, {-1},
 
-      {pool_offset(30),                                  40},
+      {pool_offset(33),                               252},
 
-      {pool_offset(31),                               141},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(34),                          295},
+
+      {pool_offset(35),                                  40},
+      {-1},
 
-      {pool_offset(39),                                 129},
+      {pool_offset(37),                                 130},
 
-      {pool_offset(40),                                120},
+      {pool_offset(38),                                121},
 
-      {pool_offset(41),                               120},
+      {pool_offset(39),                               121},
       {-1}, {-1}, {-1},
 
-      {pool_offset(45),                               152},
+      {pool_offset(43),                               153},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(46),                               138},
+      {pool_offset(51),                              283},
+      {-1},
 
-      {pool_offset(47),                                 146},
+      {pool_offset(53),                                  54},
       {-1}, {-1},
 
-      {pool_offset(50),                                  54},
+      {pool_offset(56),                                 147},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(51),                                130},
+      {pool_offset(60),                                131},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(68),                          291},
+      {pool_offset(70),                                83},
       {-1},
 
-      {pool_offset(70),                              279},
-
-      {pool_offset(71),                               249},
-      {-1},
-
-      {pool_offset(73),                                82},
-      {-1},
-
-      {pool_offset(75),                                 202},
+      {pool_offset(72),                                 205},
       {-1}, {-1}, {-1},
 
-      {pool_offset(79),                            124},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(76),                            125},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(84),                                39},
+      {pool_offset(84),                               137},
+      {-1},
 
-      {pool_offset(85),                              39},
-      {-1}, {-1}, {-1},
+      {pool_offset(86),                                39},
 
-      {pool_offset(89),                                 198},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(87),                              39},
+      {-1}, {-1},
 
-      {pool_offset(95),                                 203},
+      {pool_offset(90),                                 206},
 
-      {pool_offset(96),                               112},
+      {pool_offset(91),                       150},
       {-1}, {-1},
 
-      {pool_offset(99),                       149},
+      {pool_offset(94),                                87},
       {-1},
 
-      {pool_offset(101),                                79},
-
-      {pool_offset(102),                        148},
+      {pool_offset(96),                                 201},
       {-1}, {-1},
 
-      {pool_offset(105),                               136},
+      {pool_offset(99),                        149},
       {-1},
 
-      {pool_offset(107),                                  136},
-      {-1},
-
-      {pool_offset(109),                                86},
-      {-1},
+      {pool_offset(101),                       460},
 
-      {pool_offset(111),                               151},
-      {-1},
+      {pool_offset(102),                                80},
 
-      {pool_offset(113),                                156},
+      {pool_offset(103),                               87},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(114),                               156},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(107),                                157},
 
-      {pool_offset(120),                               143},
+      {pool_offset(108),                               157},
       {-1},
 
-      {pool_offset(122),                                   37},
+      {pool_offset(110),                               113},
+
+      {pool_offset(111),                               152},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(120),                                  137},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(132),                                45},
-      {-1}, {-1},
+      {pool_offset(133),                               144},
 
-      {pool_offset(135),                               86},
-      {-1}, {-1},
+      {pool_offset(134),                                45},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(138),                       456},
+      {pool_offset(139),                          446},
       {-1}, {-1},
 
-      {pool_offset(141),                            140},
-      {-1},
+      {pool_offset(142),                       463},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(143),                          442},
+      {pool_offset(146),                         277},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(144),                         273},
+      {pool_offset(151),                              512},
 
-      {pool_offset(145),                       459},
+      {pool_offset(152),                             516},
       {-1}, {-1}, {-1},
 
-      {pool_offset(149),                              55},
+      {pool_offset(156),                                   37},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(156),                              504},
+      {pool_offset(163),                           478},
+      {-1}, {-1},
 
-      {pool_offset(157),                             508},
+      {pool_offset(166),                              55},
       {-1}, {-1},
 
-      {pool_offset(160),                               105},
+      {pool_offset(169),                            141},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1},
+
+      {pool_offset(182),                          301},
+      {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(187),                          503},
+      {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(192),                               106},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(168),                           473},
-      {-1},
+      {pool_offset(200), 517},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(170),                                38},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1},
+      {pool_offset(204),                            314},
+      {-1}, {-1},
 
-      {pool_offset(181),               196},
+      {pool_offset(207),                                38},
       {-1},
 
-      {pool_offset(183),                                 128},
-      {-1}, {-1}, {-1},
+      {pool_offset(209),         207},
+      {-1},
 
-      {pool_offset(187),                               142},
+      {pool_offset(211),                                 129},
 
-      {pool_offset(188),                          297},
+      {pool_offset(212),                               143},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(189),                                251},
+      {pool_offset(219),               199},
 
-      {pool_offset(190),                               251},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(220),                            309},
 
-      {pool_offset(199), 509},
+      {pool_offset(221),                           437},
       {-1},
 
-      {pool_offset(201),                               150},
+      {pool_offset(223),                          464},
       {-1},
 
-      {pool_offset(203),                          460},
+      {pool_offset(225),                      137},
 
-      {pool_offset(204),   499},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(226),   506},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(210),                          497},
+      {pool_offset(231),                               151},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(211),                            305},
+      {pool_offset(238),                               177},
 
-      {pool_offset(212),                           433},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(239),                             492},
 
-      {pool_offset(217),         204},
+      {pool_offset(240),                    271},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1},
 
-      {pool_offset(219),                                 119},
+      {pool_offset(251),                         306},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(220),                    267},
+      {pool_offset(257),                          480},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1},
 
-      {pool_offset(222),                            310},
-      {-1}, {-1},
+      {pool_offset(268),                            139},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(225),                               174},
-      {-1},
+      {pool_offset(272),                           344},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(227),                      136},
+      {pool_offset(277),                                 120},
       {-1},
 
-      {pool_offset(229),                             487},
+      {pool_offset(279),                       144},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(230),                                  43},
-      {-1},
+      {pool_offset(283),                        505},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(290),                                 146},
+      {-1}, {-1},
 
-      {pool_offset(232),                         302},
+      {pool_offset(293),                                  43},
+      {-1},
 
-      {pool_offset(233),                                 145},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(295),                  496},
       {-1}, {-1},
 
-      {pool_offset(245),                          475},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(298),                      264},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(251),                       143},
+      {pool_offset(302),                                22},
+      {-1}, {-1},
 
-      {pool_offset(252),                        498},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(305),                              210},
 
-      {pool_offset(257),                            138},
+      {pool_offset(306),                               105},
       {-1}, {-1},
 
-      {pool_offset(260),                                56},
+      {pool_offset(309),                        284},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(261),                           340},
+      {pool_offset(316),                            22},
+      {-1},
 
-      {pool_offset(262),                                22},
-      {-1}, {-1},
+      {pool_offset(318),                          500},
 
-      {pool_offset(265),                      260},
+      {pool_offset(319),                     501},
+      {-1},
 
-      {pool_offset(266),                               104},
+      {pool_offset(321),                                56},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(275),                                 196},
+      {pool_offset(330),                                 199},
+      {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(335),              108},
 
-      {pool_offset(276),                            22},
+      {pool_offset(336),                               122},
       {-1}, {-1}, {-1},
 
-      {pool_offset(280),                        280},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(290),                     495},
+      {pool_offset(340),                              122},
       {-1},
 
-      {pool_offset(292),                  490},
+      {pool_offset(342),                                 212},
+      {-1}, {-1},
 
-      {pool_offset(293),                              207},
-      {-1},
+      {pool_offset(345),                           282},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(295),                          494},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(352),                     320},
+      {-1}, {-1},
 
-      {pool_offset(301),                                 262},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1},
+      {pool_offset(355),                         375},
 
-      {pool_offset(314),                                  57},
-      {-1}, {-1}, {-1},
+      {pool_offset(356),                         275},
+
+      {pool_offset(357),                             298},
+      {-1},
 
-      {pool_offset(318),                         271},
+      {pool_offset(359),                             405},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(319),                             401},
-      {-1}, {-1}, {-1},
+      {pool_offset(367),                           476},
+      {-1},
 
-      {pool_offset(323),                               121},
+      {pool_offset(369),                                 266},
       {-1}, {-1},
 
-      {pool_offset(326),              107},
+      {pool_offset(372),                               149},
+      {-1}, {-1},
 
-      {pool_offset(327),                              121},
-      {-1},
+      {pool_offset(375),                                254},
+
+      {pool_offset(376),                               254},
+      {-1}, {-1},
 
-      {pool_offset(329),                                 209},
+      {pool_offset(379),                 205},
+      {-1}, {-1}, {-1},
+
+      {pool_offset(383),                                  57},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(336),                     316},
+      {pool_offset(399),                           280},
+      {-1},
+
+      {pool_offset(401),                                207},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(415),                            491},
       {-1},
 
-      {pool_offset(347),                                204},
+      {pool_offset(417),                               141},
       {-1},
 
-      {pool_offset(349),                           278},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(419),                                  119},
 
-      {pool_offset(355),                               148},
-      {-1}, {-1},
+      {pool_offset(420),                                 208},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(358),                           276},
+      {pool_offset(427),                                 66},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(359),                                 205},
+      {pool_offset(431),                    521},
       {-1},
 
-      {pool_offset(361),                             294},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(433),                                  62},
+      {-1}, {-1},
 
-      {pool_offset(367),                                  118},
-      {-1}, {-1}, {-1},
+      {pool_offset(436),                               150},
 
-      {pool_offset(371),                             481},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(437),                               155},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(376),                         371},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(441),                               104},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(382),                               14},
+      {pool_offset(445),                           113},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(383),                 202},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(449),                               108},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(388),                           471},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(456), 372},
 
-      {pool_offset(393),                              21},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1},
+      {pool_offset(457),                          450},
 
-      {pool_offset(405), 368},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(458),                        259},
       {-1}, {-1},
 
-      {pool_offset(417),                          446},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(461),                                34},
+      {-1},
 
-      {pool_offset(423),                               140},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(463),                              299},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(429),                          155},
+      {pool_offset(472),                               14},
+      {-1},
 
-      {pool_offset(430),                              295},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(474),                          54},
+      {-1}, {-1},
 
-      {pool_offset(435),                           112},
-      {-1},
+      {pool_offset(477),                              21},
 
-      {pool_offset(437),                               149},
+      {pool_offset(478),                          156},
       {-1},
 
-      {pool_offset(439),                            486},
-      {-1},
+      {pool_offset(480),                 406},
 
-      {pool_offset(441),               467},
+      {pool_offset(481),               471},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(442),                               107},
+      {pool_offset(485),                             119},
       {-1},
 
-      {pool_offset(444),                               154},
+      {pool_offset(487),                      495},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1},
 
-      {pool_offset(447),                       489},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(453),            421},
-      {-1}, {-1}, {-1},
+      {pool_offset(499),                      412},
 
-      {pool_offset(457),                         425},
+      {pool_offset(500),                  462},
+      {-1}, {-1},
 
-      {pool_offset(458),       415},
+      {pool_offset(503),                              86},
 
-      {pool_offset(459),                               103},
+      {pool_offset(504),                               112},
       {-1}, {-1},
 
-      {pool_offset(462),                          54},
-
-      {pool_offset(463),                               113},
+      {pool_offset(507),                            112},
       {-1},
 
-      {pool_offset(465),                 402},
-      {-1}, {-1},
+      {pool_offset(509),            425},
+      {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(514),       419},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(468),                             118},
+      {pool_offset(528),                             489},
+
+      {pool_offset(529),                               114},
+      {-1}, {-1},
 
-      {pool_offset(469),                                34},
+      {pool_offset(532),                             43},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(470),                    513},
+      {pool_offset(536),                            538},
       {-1},
 
-      {pool_offset(472),                                 252},
+      {pool_offset(538),                         429},
+      {-1},
 
-      {pool_offset(473),                        255},
-      {-1}, {-1}, {-1},
+      {pool_offset(540),                     537},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(477),                                6},
+      {pool_offset(545),           550},
+      {-1},
 
-      {pool_offset(478),                     543},
+      {pool_offset(547),                       167},
       {-1},
 
-      {pool_offset(480),                             43},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(549),                               259},
 
-      {pool_offset(487),                            527},
+      {pool_offset(550),                      515},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(488),                              85},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(558),                     555},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(495),                               111},
+      {pool_offset(564),                        548},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(496),                      408},
+      {pool_offset(573),                              33},
       {-1},
 
-      {pool_offset(498),                            111},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1},
+      {pool_offset(575),                        439},
+      {-1}, {-1},
 
-      {pool_offset(511), 351},
-      {-1}, {-1}, {-1},
+      {pool_offset(578),                               195},
+      {-1},
 
-      {pool_offset(515),                               192},
+      {pool_offset(580),                           436},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(516),                           432},
+      {pool_offset(588), 355},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(517),           538},
+      {pool_offset(594),                               260},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(526),                  458},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(603),                     209},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(532),                        536},
+      {pool_offset(619),                        325},
 
-      {pool_offset(533),                       165},
+      {pool_offset(620),                       472},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1},
 
-      {pool_offset(536),                             484},
-      {-1}, {-1},
+      {pool_offset(632),                           66},
+      {-1},
 
-      {pool_offset(539),                               255},
-      {-1}, {-1}, {-1},
+      {pool_offset(634),                              82},
 
-      {pool_offset(543),                          131},
-      {-1},
+      {pool_offset(635),                   434},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(545),                   430},
-      {-1}, {-1},
+      {pool_offset(639),                    151},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(548),                                48},
+      {pool_offset(643),                        296},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(553),                      507},
+      {pool_offset(648),                  197},
+
+      {pool_offset(649),                                 225},
       {-1}, {-1},
 
-      {pool_offset(556),                     206},
+      {pool_offset(652),               522},
+      {-1}, {-1}, {-1},
+
+      {pool_offset(656),                          285},
+
+      {pool_offset(657),                                 133},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(564),                              81},
+      {pool_offset(665),                                 227},
 
-      {pool_offset(565),                     526},
+      {pool_offset(666),                 431},
       {-1},
 
-      {pool_offset(567),                              33},
-      {-1},
+      {pool_offset(668),           396},
 
-      {pool_offset(569),                        435},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1},
+      {pool_offset(669), 562},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(580),                        292},
+      {pool_offset(677),                                102},
 
-      {pool_offset(581),                               256},
+      {pool_offset(678),                  461},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1},
 
-      {pool_offset(582),           392},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(699),                      395},
+      {-1},
 
-      {pool_offset(588),                    150},
+      {pool_offset(701),                  100},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(589),                 427},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(707),                               230},
 
-      {pool_offset(597),                  194},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(708),                               26},
 
-      {pool_offset(604),                        321},
-      {-1},
+      {pool_offset(709),                   520},
 
-      {pool_offset(606),                              109},
+      {pool_offset(710),                       380},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(611),                       468},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(619),                       376},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(715),                              110},
+      {-1}, {-1},
 
-      {pool_offset(626),                                 224},
+      {pool_offset(718),      348},
       {-1}, {-1}, {-1},
 
-      {pool_offset(630),                      193},
-
-      {pool_offset(631),                                 132},
-
-      {pool_offset(632), 549},
-      {-1}, {-1},
+      {pool_offset(722),                                 255},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(635),                          281},
+      {pool_offset(728),                      543},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(636),                      391},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(732),                                28},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(641),                                101},
+      {pool_offset(739),                               85},
+      {-1},
 
-      {pool_offset(642),                                 222},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(741),                               28},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(656),                               13},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(749),                              197},
+      {-1}, {-1},
 
-      {pool_offset(670),                               227},
+      {pool_offset(752),              393},
 
-      {pool_offset(671),                               26},
+      {pool_offset(753),                               175},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(672),                  457},
+      {pool_offset(760),                                27},
       {-1}, {-1},
 
-      {pool_offset(675),                              194},
+      {pool_offset(763),                      163},
+      {-1},
 
-      {pool_offset(676),                   518},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(765),                               13},
+      {-1},
 
-      {pool_offset(690),                   99},
+      {pool_offset(767),                                103},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(699),                      531},
+      {pool_offset(776),                                7},
       {-1},
 
-      {pool_offset(701),                                27},
-      {-1},
+      {pool_offset(778),                   269},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(703),                        315},
-      {-1},
+      {pool_offset(782),                          322},
 
-      {pool_offset(705),                               172},
+      {pool_offset(783),                   527},
       {-1},
 
-      {pool_offset(707),             349},
+      {pool_offset(785),                            318},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(794),                               216},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(809),                          216},
+      {-1}, {-1}, {-1},
+
+      {pool_offset(813),                                  215},
       {-1}, {-1},
 
-      {pool_offset(710),      344},
+      {pool_offset(816),                   410},
+      {-1}, {-1}, {-1},
+
+      {pool_offset(820),                                25},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(826),                               127},
+
+      {pool_offset(827),                               198},
+
+      {pool_offset(828),                      196},
 
-      {pool_offset(711),                               84},
+      {pool_offset(829),                  347},
 
-      {pool_offset(712),                   512},
+      {pool_offset(830),                                2},
       {-1}, {-1}, {-1},
 
-      {pool_offset(716),    357},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(834),             353},
 
-      {pool_offset(721), 535},
-      {-1},
+      {pool_offset(835),                                 128},
 
-      {pool_offset(723),                            249},
+      {pool_offset(836),      528},
 
-      {pool_offset(724),              389},
+      {pool_offset(837),                                 264},
 
-      {pool_offset(725),                                102},
+      {pool_offset(838),                           457},
+
+      {pool_offset(839),                                 226},
       {-1}, {-1}, {-1},
 
-      {pool_offset(729),                                 260},
+      {pool_offset(843),    361},
 
-      {pool_offset(730),                   265},
+      {pool_offset(844),                         442},
 
-      {pool_offset(731),                                 127},
+      {pool_offset(845),                             29},
 
-      {pool_offset(732),                            314},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(846),                                 200},
+      {-1},
 
-      {pool_offset(738),                  343},
+      {pool_offset(848), 547},
       {-1},
 
-      {pool_offset(740),                                  212},
+      {pool_offset(850),                               148},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(741),                                28},
+      {pool_offset(855),                                  44},
+      {-1}, {-1},
 
-      {pool_offset(742),                               213},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(858),                            25},
       {-1},
 
-      {pool_offset(753),                               126},
-      {-1}, {-1},
+      {pool_offset(860),                        148},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(756),                                7},
+      {pool_offset(865),                                 91},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(757),                          213},
+      {pool_offset(869),                            293},
 
-      {pool_offset(758),                   406},
+      {pool_offset(870),                                91},
 
-      {pool_offset(759),                          318},
+      {pool_offset(871),                          483},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(760),                               195},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(879),                                94},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(767),                               28},
-      {-1}, {-1},
+      {pool_offset(887),          525},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(770),                                 223},
-      {-1}, {-1},
+      {pool_offset(891),                       398},
+
+      {pool_offset(892),                                 202},
+      {-1},
+
+      {pool_offset(894),                        468},
+      {-1},
 
-      {pool_offset(773),                                25},
+      {pool_offset(896),                         102},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(778),      519},
+      {pool_offset(901),                             94},
+      {-1}, {-1}, {-1},
+
+      {pool_offset(905),                                 218},
 
-      {pool_offset(779),                              248},
-      {-1},
+      {pool_offset(906),                           482},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(781),               521},
+      {pool_offset(913),                               101},
+      {-1},
 
-      {pool_offset(782),                              179},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(915),                  38},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(791),                364},
+      {pool_offset(923),                                98},
       {-1},
 
-      {pool_offset(793),                             29},
+      {pool_offset(925),                               153},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(794),                         438},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(939),                449},
 
-      {pool_offset(801),                            25},
+      {pool_offset(940),                          444},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(806),                                 215},
+      {pool_offset(945),           507},
 
-      {pool_offset(807),                            289},
+      {pool_offset(946),           272},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(808),                           453},
+      {pool_offset(950),                             486},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(809),                          478},
+      {pool_offset(972),                            103},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(814),                                88},
+      {pool_offset(977),                               106},
+      {-1}, {-1}, {-1},
+
+      {pool_offset(981),                368},
       {-1}, {-1},
 
-      {pool_offset(817),                                2},
+      {pool_offset(984),                                64},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(993),                               41},
       {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(823),                          480},
+      {pool_offset(999),                          81},
+      {-1}, {-1},
 
-      {pool_offset(824),                               155},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1002),                   470},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(833),           500},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1006),              433},
+      {-1},
 
-      {pool_offset(838),                       394},
+      {pool_offset(1008),            408},
 
-      {pool_offset(839),                            79},
+      {pool_offset(1009),               530},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(846),                               105},
+      {pool_offset(1016),                        110},
+      {-1}, {-1}, {-1},
+
+      {pool_offset(1020),                               214},
       {-1}, {-1},
 
-      {pool_offset(849),                            443},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1023),                       494},
+      {-1},
 
-      {pool_offset(854),               334},
+      {pool_offset(1025),                             64},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(1035),                         374},
+      {-1}, {-1}, {-1},
+
+      {pool_offset(1039),                               118},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(1047),                            52},
       {-1}, {-1},
 
-      {pool_offset(857),                445},
+      {pool_offset(1050),                   363},
       {-1},
 
-      {pool_offset(859),                                 197},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1052),                                16},
 
-      {pool_offset(866),                  38},
+      {pool_offset(1053),                         204},
+      {-1}, {-1},
 
-      {pool_offset(867),                          80},
+      {pool_offset(1056),                                52},
       {-1}, {-1},
 
-      {pool_offset(870),           268},
+      {pool_offset(1059),                            143},
+      {-1}, {-1},
 
-      {pool_offset(871),                         101},
-      {-1}, {-1}, {-1},
+      {pool_offset(1062),                        484},
 
-      {pool_offset(875),                        464},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1063),                            224},
+      {-1}, {-1},
 
-      {pool_offset(884),                               152},
+      {pool_offset(1066),                                6},
+      {-1},
 
-      {pool_offset(885),                        109},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1068),                        86},
 
-      {pool_offset(890),                               100},
+      {pool_offset(1069),                           260},
       {-1},
 
-      {pool_offset(892),                   466},
+      {pool_offset(1071),                          485},
 
-      {pool_offset(893),                              180},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1072),                               31},
+      {-1},
 
-      {pool_offset(898),                325},
+      {pool_offset(1074),                              11},
       {-1},
 
-      {pool_offset(900),                         298},
+      {pool_offset(1076),                        120},
       {-1},
 
-      {pool_offset(902),                          53},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1078),                                89},
 
-      {pool_offset(907),                    127},
+      {pool_offset(1079),                            158},
+      {-1}, {-1},
 
-      {pool_offset(908),                               71},
-      {-1}, {-1}, {-1},
+      {pool_offset(1082),                        89},
+      {-1},
 
-      {pool_offset(912),                          440},
-      {-1}, {-1}, {-1},
+      {pool_offset(1084),                                46},
+      {-1},
 
-      {pool_offset(916),              429},
+      {pool_offset(1086),                              45},
 
-      {pool_offset(917),                        311},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1087),                               156},
 
-      {pool_offset(922),                                52},
+      {pool_offset(1088),                             111},
 
-      {pool_offset(923),                            52},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1089),                         479},
 
-      {pool_offset(928),                         370},
+      {pool_offset(1090),                        84},
       {-1},
 
-      {pool_offset(930),                         201},
+      {pool_offset(1092),                          488},
+      {-1}, {-1},
 
-      {pool_offset(931),                            142},
+      {pool_offset(1095),                            308},
       {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(937),                                58},
+      {pool_offset(1101),                            447},
 
-      {pool_offset(938),                                46},
+      {pool_offset(1102),              531},
       {-1},
 
-      {pool_offset(940),                              45},
-      {-1}, {-1},
+      {pool_offset(1104),                           536},
+
+      {pool_offset(1105),                             117},
+      {-1},
 
-      {pool_offset(943),            404},
+      {pool_offset(1107),               338},
 
-      {pool_offset(944),                   359},
+      {pool_offset(1108),                            80},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(1117),                329},
+
+      {pool_offset(1118),                          400},
       {-1}, {-1},
 
-      {pool_offset(947),                             110},
-      {-1}, {-1}, {-1},
+      {pool_offset(1121),                               115},
+      {-1}, {-1},
 
-      {pool_offset(951),                        83},
+      {pool_offset(1124),                            292},
+      {-1},
 
-      {pool_offset(952),                            102},
+      {pool_offset(1126),                         142},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(953),                               181},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1132),                                26},
 
-      {pool_offset(962),                                16},
+      {pool_offset(1133),                               263},
       {-1}, {-1},
 
-      {pool_offset(965),                         474},
+      {pool_offset(1136),                              182},
 
-      {pool_offset(966),                               41},
+      {pool_offset(1137),                          328},
+
+      {pool_offset(1138),                               126},
       {-1}, {-1},
 
-      {pool_offset(969),                               211},
+      {pool_offset(1141),                         304},
+      {-1},
 
-      {pool_offset(970),                            221},
+      {pool_offset(1143),                               257},
 
-      {pool_offset(971),                         141},
+      {pool_offset(1144),                         302},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(972),                            304},
+      {pool_offset(1149),                        454},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(973),                        85},
-      {-1}, {-1},
+      {pool_offset(1154),                           378},
+      {-1},
 
-      {pool_offset(976),                         286},
+      {pool_offset(1156),                               16},
 
-      {pool_offset(977),                                 50},
+      {pool_offset(1157),                        499},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(982),                             116},
+      {pool_offset(1162),                          297},
 
-      {pool_offset(983),                               114},
-      {-1}, {-1}, {-1},
+      {pool_offset(1163),                          448},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(987),                            157},
-      {-1},
+      {pool_offset(1169),                          132},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(989),                        88},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1178),                              240},
 
-      {pool_offset(995),                        119},
+      {pool_offset(1179),                        315},
       {-1},
 
-      {pool_offset(997),                         300},
-      {-1},
+      {pool_offset(1181),                              390},
 
-      {pool_offset(999),                          324},
+      {pool_offset(1182),                                58},
 
-      {pool_offset(1000),                  252},
+      {pool_offset(1183),                                3},
       {-1}, {-1},
 
-      {pool_offset(1003),                               117},
+      {pool_offset(1186),                               72},
 
-      {pool_offset(1004),              522},
-      {-1}, {-1},
+      {pool_offset(1187),                              219},
+      {-1},
 
-      {pool_offset(1007),              130},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1},
+      {pool_offset(1189),                           58},
+      {-1}, {-1},
 
-      {pool_offset(1020),                          293},
-      {-1}, {-1}, {-1},
+      {pool_offset(1192),                                48},
+      {-1},
 
-      {pool_offset(1024),                               31},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1194),                              95},
+      {-1}, {-1},
 
-      {pool_offset(1034),                                 66},
+      {pool_offset(1197),                            126},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(1035),                      472},
+      {pool_offset(1201),                              237},
 
-      {pool_offset(1036),                19},
-      {-1},
+      {pool_offset(1202),          336},
 
-      {pool_offset(1038),                    413},
+      {pool_offset(1203),            349},
       {-1},
 
-      {pool_offset(1040),                                  62},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(1048),                                17},
-      {-1},
+      {pool_offset(1205),                19},
 
-      {pool_offset(1050),            345},
+      {pool_offset(1206),               276},
       {-1},
 
-      {pool_offset(1052),                               16},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(1060),                        479},
-
-      {pool_offset(1061),                                3},
-
-      {pool_offset(1062),                           256},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1208),                  504},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1067),                              11},
+      {pool_offset(1215),           346},
       {-1},
 
-      {pool_offset(1069),                               201},
-      {-1},
+      {pool_offset(1217),                                17},
 
-      {pool_offset(1071),                       73},
+      {pool_offset(1218),               411},
 
-      {pool_offset(1072),                               115},
+      {pool_offset(1219),                               240},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1073),                          483},
+      {pool_offset(1224),                               116},
       {-1}, {-1}, {-1},
 
-      {pool_offset(1077),                                 49},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1228),   384},
+      {-1}, {-1},
 
-      {pool_offset(1082),                                26},
-      {-1}, {-1}, {-1},
+      {pool_offset(1231),                      210},
+      {-1},
 
-      {pool_offset(1086),                   270},
+      {pool_offset(1233),                               135},
 
-      {pool_offset(1087),           342},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1},
+      {pool_offset(1234),                             135},
 
-      {pool_offset(1100),                              216},
+      {pool_offset(1235),                         290},
+      {-1},
 
-      {pool_offset(1101),               106},
+      {pool_offset(1237),                              214},
 
-      {pool_offset(1102),          332},
+      {pool_offset(1238),                               124},
+      {-1},
 
-      {pool_offset(1103),                         114},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1},
+      {pool_offset(1240),               107},
+      {-1},
 
-      {pool_offset(1125),                              211},
+      {pool_offset(1242),                                95},
       {-1},
 
-      {pool_offset(1127),                                183},
+      {pool_offset(1244),                  255},
+      {-1},
 
-      {pool_offset(1128),                                15},
-      {-1}, {-1}, {-1},
+      {pool_offset(1246),                     129},
 
-      {pool_offset(1132),                              115},
+      {pool_offset(1247),   560},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1138),               272},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1262),                               159},
+      {-1}, {-1},
+
+      {pool_offset(1265),                            159},
+      {-1},
 
-      {pool_offset(1145),               407},
+      {pool_offset(1267),                                 134},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1153),              454},
-      {-1}, {-1},
+      {pool_offset(1275),                         115},
 
-      {pool_offset(1156),                      146},
+      {pool_offset(1276),                           279},
+      {-1},
 
-      {pool_offset(1157),                                80},
+      {pool_offset(1278),                            211},
       {-1}, {-1},
 
-      {pool_offset(1160),                   367},
+      {pool_offset(1281),                              116},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1165),                               144},
-
-      {pool_offset(1166),                      207},
+      {pool_offset(1286), 307},
       {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1172),                                81},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(1179),                   74},
-
-      {pool_offset(1180),                               247},
-      {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(1185),                                 133},
+      {pool_offset(1292),                              183},
       {-1}, {-1}, {-1},
 
-      {pool_offset(1189),                            208},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(1198),   380},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1296),                          232},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(1203),                                29},
+      {pool_offset(1300),                        319},
       {-1},
 
-      {pool_offset(1205),                             34},
+      {pool_offset(1302),              131},
       {-1},
 
-      {pool_offset(1207),                                  159},
+      {pool_offset(1304),                               145},
       {-1},
 
-      {pool_offset(1209),                          229},
-
-      {pool_offset(1210),                               170},
-      {-1},
+      {pool_offset(1306),                             34},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1212),   547},
+      {pool_offset(1311),                                82},
 
-      {pool_offset(1213),                           66},
+      {pool_offset(1312),                      477},
       {-1}, {-1}, {-1},
 
-      {pool_offset(1217),                             82},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1316),                          497},
+
+      {pool_offset(1317),                                21},
+      {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(1322),                               217},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1223),   533},
+      {pool_offset(1329),                                90},
       {-1}, {-1}, {-1},
 
-      {pool_offset(1227),                            170},
+      {pool_offset(1333),                               244},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(1228),                               185},
+      {pool_offset(1337),                          198},
 
-      {pool_offset(1229),                             187},
+      {pool_offset(1338),                       267},
 
-      {pool_offset(1230),                  209},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1339),         421},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1239),                                 166},
+      {pool_offset(1347),                                8},
 
-      {pool_offset(1240),                          482},
-      {-1},
+      {pool_offset(1348),                            90},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1242),                           451},
+      {pool_offset(1354),                             83},
 
-      {pool_offset(1243),                               214},
+      {pool_offset(1355),                          445},
 
-      {pool_offset(1244),                               110},
-      {-1},
+      {pool_offset(1356),                               184},
 
-      {pool_offset(1246),                  348},
-      {-1}, {-1}, {-1},
+      {pool_offset(1357),   545},
+      {-1}, {-1},
 
-      {pool_offset(1250),                                89},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1360),                          487},
 
-      {pool_offset(1256),                    333},
-      {-1},
+      {pool_offset(1361),                          474},
 
-      {pool_offset(1258),                          195},
+      {pool_offset(1362),                           455},
       {-1},
 
-      {pool_offset(1260),                               175},
+      {pool_offset(1364),   558},
+
+      {pool_offset(1365),                       74},
       {-1}, {-1},
 
-      {pool_offset(1263),                                  190},
+      {pool_offset(1368),                              251},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1264),                               106},
+      {pool_offset(1373),                         31},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1265),                                164},
+      {pool_offset(1379),                               204},
 
-      {pool_offset(1266),                               164},
+      {pool_offset(1380),                              124},
       {-1}, {-1}, {-1},
 
-      {pool_offset(1270),                               186},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1384),                                  160},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(1276),                            488},
+      {pool_offset(1388),    546},
       {-1}, {-1}, {-1},
 
-      {pool_offset(1280),                       452},
-      {-1}, {-1},
+      {pool_offset(1392),                               158},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1283),                                8},
+      {pool_offset(1398),                               111},
 
-      {pool_offset(1284),                              123},
+      {pool_offset(1399),             386},
       {-1},
 
-      {pool_offset(1286),                            89},
+      {pool_offset(1401),                   274},
+      {-1},
 
-      {pool_offset(1287),                               157},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1403),                     469},
+      {-1}, {-1},
 
-      {pool_offset(1293),                                33},
-      {-1}, {-1}, {-1},
+      {pool_offset(1406),                 383},
+      {-1}, {-1},
 
-      {pool_offset(1297),                              234},
+      {pool_offset(1409),                              84},
       {-1},
 
-      {pool_offset(1299),                     465},
+      {pool_offset(1411),                        162},
+
+      {pool_offset(1412),                                33},
       {-1},
 
-      {pool_offset(1301),                              237},
+      {pool_offset(1414),                                 168},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(1421),                                 228},
       {-1},
 
-      {pool_offset(1303),                         31},
+      {pool_offset(1423),                                166},
 
-      {pool_offset(1304),                              386},
+      {pool_offset(1424),                               166},
+      {-1}, {-1},
 
-      {pool_offset(1305),   545},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1427),                               178},
+      {-1}, {-1},
 
-      {pool_offset(1314),    534},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1430),                               222},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1320),                      161},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1435),                          106},
       {-1},
 
-      {pool_offset(1331),                               122},
-      {-1},
+      {pool_offset(1437),                                  193},
+      {-1}, {-1},
 
-      {pool_offset(1333),                          105},
-      {-1}, {-1}, {-1},
+      {pool_offset(1440),                               107},
+      {-1}, {-1},
 
-      {pool_offset(1337),             382},
+      {pool_offset(1443),              458},
 
-      {pool_offset(1338),                      84},
+      {pool_offset(1444),                       456},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1339),                         214},
+      {pool_offset(1449),                    529},
       {-1}, {-1}, {-1},
 
-      {pool_offset(1343),                       40},
-
-      {pool_offset(1344),                      72},
+      {pool_offset(1453),                         217},
+      {-1},
 
-      {pool_offset(1345),                               237},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1455),                   371},
       {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1360),             502},
-      {-1}, {-1},
+      {pool_offset(1461),                      147},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1363),               537},
-      {-1}, {-1},
+      {pool_offset(1467),                      85},
 
-      {pool_offset(1366),                     431},
+      {pool_offset(1468),                                29},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1371),                          469},
-
-      {pool_offset(1372),                         350},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1473),                            326},
 
-      {pool_offset(1390),                                 225},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1474),                                81},
 
-      {pool_offset(1395),                               259},
+      {pool_offset(1475),                                15},
       {-1},
 
-      {pool_offset(1397),            476},
-
-      {pool_offset(1398),                        103},
+      {pool_offset(1477),                             196},
+      {-1},
 
-      {pool_offset(1399),                               219},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1479),                                186},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1404),                               125},
+      {pool_offset(1486),                               67},
       {-1}, {-1},
 
-      {pool_offset(1407),                            226},
+      {pool_offset(1489),                          300},
+      {-1},
+
+      {pool_offset(1491),                               136},
 
-      {pool_offset(1408),                                30},
-      {-1}, {-1},
+      {pool_offset(1492),                             136},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1411),                               176},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1499),                    351},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1420),                           30},
-      {-1}, {-1},
+      {pool_offset(1506),                                47},
 
-      {pool_offset(1423),                               241},
-      {-1},
+      {pool_offset(1507), 316},
 
-      {pool_offset(1425),              327},
-      {-1}, {-1},
+      {pool_offset(1508),                  212},
 
-      {pool_offset(1428),                             550},
+      {pool_offset(1509),                    337},
       {-1}, {-1}, {-1},
 
-      {pool_offset(1432),                        450},
-      {-1}, {-1},
-
-      {pool_offset(1435),                               221},
-      {-1}, {-1},
+      {pool_offset(1513),                   75},
 
-      {pool_offset(1438),                            218},
+      {pool_offset(1514),             510},
       {-1},
 
-      {pool_offset(1440),                        493},
+      {pool_offset(1516),                            493},
 
-      {pool_offset(1441),                          444},
+      {pool_offset(1517),                            239},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1442),                  448},
-      {-1}, {-1}, {-1},
+      {pool_offset(1524),                       388},
 
-      {pool_offset(1446),                          441},
-      {-1},
+      {pool_offset(1525),                          53},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1448),                           510},
+      {pool_offset(1532),              331},
       {-1}, {-1},
 
-      {pool_offset(1451),          516},
+      {pool_offset(1535),                      343},
       {-1}, {-1},
 
-      {pool_offset(1454),                           374},
-
-      {pool_offset(1455),                   216},
+      {pool_offset(1538),                    128},
       {-1}, {-1},
 
-      {pool_offset(1458),                               147},
+      {pool_offset(1541),                                67},
+
+      {pool_offset(1542),                               123},
       {-1}, {-1},
 
-      {pool_offset(1461),                              56},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1545),                                30},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1466),                            125},
-      {-1},
+      {pool_offset(1553),                                12},
 
-      {pool_offset(1468),                        147},
+      {pool_offset(1554),                                88},
+
+      {pool_offset(1555),                     435},
       {-1},
 
-      {pool_offset(1470),                405},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1557),                           30},
+      {-1}, {-1},
 
-      {pool_offset(1478),                          307},
-      {-1}, {-1}, {-1},
+      {pool_offset(1560),                                61},
+      {-1},
+
+      {pool_offset(1562),                  287},
+      {-1}, {-1},
 
-      {pool_offset(1482),                                 90},
+      {pool_offset(1565),                            88},
 
-      {pool_offset(1483),                                47},
-      {-1}, {-1}, {-1},
+      {pool_offset(1566),                   394},
 
-      {pool_offset(1487),                                90},
+      {pool_offset(1567),                          567},
       {-1}, {-1},
 
-      {pool_offset(1490),                               123},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1570),                               109},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1497),                                93},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1576),                  352},
 
-      {pool_offset(1504),          540},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1577),                                60},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1520),                             93},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1582),                       288},
 
-      {pool_offset(1528),                   390},
+      {pool_offset(1583),                         324},
       {-1},
 
-      {pool_offset(1530),                           275},
-
-      {pool_offset(1531),                                 51},
-      {-1}, {-1},
-
-      {pool_offset(1534),                       15},
-      {-1}, {-1},
+      {pool_offset(1585),          526},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(1537),            461},
+      {pool_offset(1589),                               237},
       {-1},
 
-      {pool_offset(1539),                              44},
-
-      {pool_offset(1540),             462},
+      {pool_offset(1591),                                65},
       {-1}, {-1},
 
-      {pool_offset(1543),                                97},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1594),                                 97},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1549),                                64},
+      {pool_offset(1601),                 404},
       {-1},
 
-      {pool_offset(1551),                                56},
+      {pool_offset(1603),                               224},
 
-      {pool_offset(1552),                           247},
-      {-1}, {-1},
+      {pool_offset(1604),                                 50},
+      {-1},
+
+      {pool_offset(1606),                            221},
 
-      {pool_offset(1555),                               163},
+      {pool_offset(1607),                          65},
       {-1},
 
-      {pool_offset(1557),                                21},
+      {pool_offset(1609),                               188},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(1615),                           109},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1558),                           477},
+      {pool_offset(1621),                               140},
 
-      {pool_offset(1559),                         175},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1622),   559},
+      {-1},
 
-      {pool_offset(1569),                        190},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1624),                   219},
       {-1},
 
-      {pool_offset(1580),                             64},
+      {pool_offset(1626),                          140},
+      {-1},
 
-      {pool_offset(1581),                          162},
+      {pool_offset(1628),                          311},
 
-      {pool_offset(1582),                              0},
+      {pool_offset(1629),            481},
       {-1},
 
-      {pool_offset(1584),                                 78},
+      {pool_offset(1631),                               173},
       {-1},
 
-      {pool_offset(1586),                               229},
+      {pool_offset(1633),                  452},
+      {-1}, {-1},
 
-      {pool_offset(1587),                               169},
+      {pool_offset(1636),                             190},
       {-1},
 
-      {pool_offset(1589),                       263},
+      {pool_offset(1638),                          195},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(1590),         417},
+      {pool_offset(1642),                             24},
       {-1}, {-1},
 
-      {pool_offset(1593),                                59},
+      {pool_offset(1645),   561},
 
-      {pool_offset(1594),                    104},
-      {-1}, {-1},
+      {pool_offset(1646),                          473},
 
-      {pool_offset(1597),   546},
+      {pool_offset(1647),                         354},
 
-      {pool_offset(1598),                            23},
+      {pool_offset(1648),                            173},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(1654),                               189},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1605),                            236},
+      {pool_offset(1661),                        193},
+      {-1},
+
+      {pool_offset(1663),                               232},
+      {-1}, {-1},
+
+      {pool_offset(1666),                  357},
+      {-1}, {-1},
+
+      {pool_offset(1669),                      73},
       {-1}, {-1},
 
-      {pool_offset(1608),                            514},
+      {pool_offset(1672),                        104},
+
+      {pool_offset(1673),                               241},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1618),                            288},
-      {-1}, {-1}, {-1},
+      {pool_offset(1688),                              44},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1622),                               253},
-      {-1},
+      {pool_offset(1694),               549},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1624),                               108},
+      {pool_offset(1700),                              56},
       {-1},
 
-      {pool_offset(1626),                        227},
-      {-1},
+      {pool_offset(1702),                       40},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1628),                          396},
-      {-1},
+      {pool_offset(1708),                               100},
 
-      {pool_offset(1630),                               178},
+      {pool_offset(1709), 359},
       {-1}, {-1},
 
-      {pool_offset(1633),                   198},
+      {pool_offset(1712),                            229},
       {-1}, {-1},
 
-      {pool_offset(1636),                              83},
-      {-1},
+      {pool_offset(1715),                               179},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1638),                               234},
+      {pool_offset(1720),                244},
       {-1},
 
-      {pool_offset(1640),                                32},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1722),                           518},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(1729),                         366},
+      {-1}, {-1}, {-1},
+
+      {pool_offset(1733),                    417},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1659),                           108},
+      {pool_offset(1743),               422},
       {-1},
 
-      {pool_offset(1661),                               180},
+      {pool_offset(1745),                                56},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1662),                          174},
+      {pool_offset(1750),                               231},
       {-1}, {-1},
 
-      {pool_offset(1665),                       439},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1753),                             563},
       {-1}, {-1},
 
-      {pool_offset(1677),                               200},
-
-      {pool_offset(1678),                                1},
-      {-1},
-
-      {pool_offset(1680),                               134},
-
-      {pool_offset(1681),                             134},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1756),                    423},
 
-      {pool_offset(1687),       377},
+      {pool_offset(1757),            465},
       {-1}, {-1},
 
-      {pool_offset(1690),         369},
+      {pool_offset(1760),             466},
+      {-1}, {-1},
 
-      {pool_offset(1691),                       299},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1763),                152},
 
-      {pool_offset(1697),              398},
-      {-1}, {-1}, {-1},
+      {pool_offset(1764),                       15},
+      {-1},
 
-      {pool_offset(1701),                             24},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1766),                409},
 
-      {pool_offset(1708),                        449},
+      {pool_offset(1767),                  332},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1709),                           323},
+      {pool_offset(1781),                               162},
 
-      {pool_offset(1710),                       284},
+      {pool_offset(1782),                                 49},
       {-1}, {-1},
 
-      {pool_offset(1713),                               238},
+      {pool_offset(1785),                                59},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1714),                               220},
+      {pool_offset(1791),                            523},
       {-1}, {-1},
 
-      {pool_offset(1717),                    347},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(1726),                             385},
-      {-1},
-
-      {pool_offset(1728),                               158},
+      {pool_offset(1794),                    263},
       {-1}, {-1},
 
-      {pool_offset(1731),                            158},
-      {-1},
+      {pool_offset(1797),          552},
 
-      {pool_offset(1733),                                5},
-      {-1}, {-1},
+      {pool_offset(1798),                                24},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1736),                           58},
+      {pool_offset(1808),                    105},
+      {-1},
 
-      {pool_offset(1737),                            78},
-      {-1}, {-1}, {-1},
+      {pool_offset(1810),                                32},
+      {-1},
 
-      {pool_offset(1741),               329},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1812),                               180},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1749),              485},
+      {pool_offset(1819),                       443},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1},
 
-      {pool_offset(1750),                            32},
+      {pool_offset(1830),                          407},
       {-1}, {-1}, {-1},
 
-      {pool_offset(1754),                          296},
+      {pool_offset(1834),                               138},
       {-1}, {-1}, {-1},
 
-      {pool_offset(1758),                      339},
+      {pool_offset(1838),       381},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1759),                               218},
+      {pool_offset(1845),                           138},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1760),                            322},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1871),                   201},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(1765),                        437},
+      {pool_offset(1875),                             389},
+      {-1}, {-1},
 
-      {pool_offset(1766),                           360},
+      {pool_offset(1878),                         228},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1776),               418},
-      {-1}, {-1},
+      {pool_offset(1897),                            252},
 
-      {pool_offset(1779),                          491},
+      {pool_offset(1898),     564},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1},
 
-      {pool_offset(1782),                241},
-
-      {pool_offset(1783),                                35},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(1791),                 282},
-      {-1},
+      {pool_offset(1910),                               234},
 
-      {pool_offset(1793),                               226},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1911),                                92},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1798),                              94},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1926),         373},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1807),          517},
-      {-1},
+      {pool_offset(1932),                         291},
 
-      {pool_offset(1809),                         320},
-      {-1},
+      {pool_offset(1933),                            32},
+      {-1}, {-1},
 
-      {pool_offset(1811),                            35},
-      {-1}, {-1}, {-1},
+      {pool_offset(1936),                                1},
 
-      {pool_offset(1815),                          554},
+      {pool_offset(1937),                               117},
       {-1},
 
-      {pool_offset(1817),               301},
+      {pool_offset(1939),                        453},
       {-1}, {-1},
 
-      {pool_offset(1820),                       358},
-      {-1}, {-1}, {-1},
-
-      {pool_offset(1824),               361},
-      {-1},
-
-      {pool_offset(1826),                                9},
+      {pool_offset(1942),                     502},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1827),                            217},
+      {pool_offset(1948),                        441},
       {-1},
 
-      {pool_offset(1829),                               67},
+      {pool_offset(1950),                           327},
 
-      {pool_offset(1830),                                24},
+      {pool_offset(1951),                            23},
       {-1}, {-1}, {-1},
 
-      {pool_offset(1834),                                 96},
+      {pool_offset(1955),                  340},
       {-1}, {-1},
 
-      {pool_offset(1837), 303},
+      {pool_offset(1958),                426},
 
-      {pool_offset(1838),                    419},
+      {pool_offset(1959),                        230},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1839),                        145},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1964),                 430},
 
-      {pool_offset(1845),                  283},
-      {-1}, {-1}, {-1},
+      {pool_offset(1965),                         178},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1849),                                94},
+      {pool_offset(1972),                   42},
 
-      {pool_offset(1850),                     128},
+      {pool_offset(1973),      382},
       {-1},
 
-      {pool_offset(1852),                 400},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(1858),                 379},
-      {-1},
+      {pool_offset(1975),                            98},
 
-      {pool_offset(1860),                          117},
+      {pool_offset(1976),                            392},
       {-1}, {-1},
 
-      {pool_offset(1863),                  328},
+      {pool_offset(1979),                           401},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1868),                 363},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(1875),                 326},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1984),                                5},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1883),                               217},
-      {-1}, {-1}, {-1},
+      {pool_offset(1990),                            220},
 
-      {pool_offset(1887),                                67},
+      {pool_offset(1991),               305},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1892),                           290},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(1996),               399},
 
-      {pool_offset(1898), 355},
+      {pool_offset(1997),                           364},
 
-      {pool_offset(1899),                    520},
-      {-1}, {-1},
+      {pool_offset(1998),                 286},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1902),                          172},
-      {-1},
+      {pool_offset(2004),                  459},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1904),                  353},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2014),                               194},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1911),                             182},
-      {-1},
+      {pool_offset(2022),                           294},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1913),  523},
+      {pool_offset(2029),        273},
       {-1},
 
-      {pool_offset(1915),     330},
-
-      {pool_offset(1916),                          306},
+      {pool_offset(2031),                         226},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1921),                524},
+      {pool_offset(2036),                    133},
       {-1},
 
-      {pool_offset(1923),                            219},
-      {-1}, {-1}, {-1},
+      {pool_offset(2038),                               250},
 
-      {pool_offset(1927),                          403},
-      {-1}, {-1}, {-1},
+      {pool_offset(2039), 341},
 
-      {pool_offset(1931),                                 165},
+      {pool_offset(2040),                        146},
       {-1}, {-1},
 
-      {pool_offset(1934),                          258},
+      {pool_offset(2043),                               220},
       {-1}, {-1}, {-1},
 
-      {pool_offset(1938),                                76},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2047),                         403},
 
-      {pool_offset(1943),                             193},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2048),                             234},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1948),                                92},
+      {pool_offset(2054),                                9},
       {-1},
 
-      {pool_offset(1950),     551},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2056),                                96},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1956),                       384},
+      {pool_offset(2061),                                 79},
+      {-1}, {-1},
 
-      {pool_offset(1957),                    185},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2064),                       303},
+      {-1},
 
-      {pool_offset(1964),                                99},
+      {pool_offset(2066),                               203},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1965),                422},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2076),              402},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1972),                               135},
+      {pool_offset(2082),                             256},
+      {-1},
 
-      {pool_offset(1973),                             135},
+      {pool_offset(2084),                                35},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(1978),                               37},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(1987),                        166},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1},
-
-      {pool_offset(1999),                                60},
+      {pool_offset(2089),                              241},
       {-1}, {-1}, {-1},
 
-      {pool_offset(2003),                                 161},
+      {pool_offset(2093),                               229},
+
+      {pool_offset(2094),                               181},
       {-1}, {-1},
 
-      {pool_offset(2006),                         515},
-      {-1},
+      {pool_offset(2097),                          177},
+      {-1}, {-1},
 
-      {pool_offset(2008),                                61},
+      {pool_offset(2100),                            222},
       {-1},
 
-      {pool_offset(2010),                    259},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(2016),               434},
-      {-1}, {-1}, {-1},
+      {pool_offset(2102),                391},
+      {-1}, {-1},
 
-      {pool_offset(2020),                             159},
+      {pool_offset(2105),                           475},
       {-1}, {-1},
 
-      {pool_offset(2023),                          393},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2108),              490},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2032),                               139},
+      {pool_offset(2113),                               245},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2037),                          139},
+      {pool_offset(2118),                             245},
+      {-1},
 
-      {pool_offset(2038),                                12},
+      {pool_offset(2120),                               246},
       {-1},
 
-      {pool_offset(2040),                               177},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2122),                            35},
+      {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(2127),               365},
+      {-1},
 
-      {pool_offset(2047),                               239},
+      {pool_offset(2129),                                4},
       {-1}, {-1},
 
-      {pool_offset(2050),                    182},
+      {pool_offset(2132),                            60},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2051),                           233},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2149),                               233},
 
-      {pool_offset(2057),                             122},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2150),               333},
 
-      {pool_offset(2062),                           57},
+      {pool_offset(2151),                          262},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2063),                          192},
+      {pool_offset(2159),                 367},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(2064),                                  44},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2163),  532},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2070),                           436},
+      {pool_offset(2168),   556},
+      {-1},
 
-      {pool_offset(2071),                  455},
+      {pool_offset(2170),                                 163},
       {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2077),                              238},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2176),                               249},
+      {-1},
 
-      {pool_offset(2084),                       171},
+      {pool_offset(2178),                            249},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2085),                    132},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2184), 335},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2092),                               242},
-      {-1}, {-1},
+      {pool_offset(2193),                            79},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(2095), 312},
+      {pool_offset(2197),                               256},
       {-1},
 
-      {pool_offset(2097),                             242},
+      {pool_offset(2199),                          289},
       {-1},
 
-      {pool_offset(2099),                               243},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2201),                               164},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2109),                                 199},
+      {pool_offset(2206),                               242},
 
-      {pool_offset(2110),                77},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2207),                         257},
+      {-1}, {-1},
+
+      {pool_offset(2210),                           236},
+
+      {pool_offset(2211),                               182},
+
+      {pool_offset(2212),                                 167},
+
+      {pool_offset(2213),                         524},
+
+      {pool_offset(2214),                                 51},
       {-1},
 
-      {pool_offset(2121),            366},
+      {pool_offset(2216),                         321},
+      {-1}, {-1}, {-1},
+
+      {pool_offset(2220),                               243},
       {-1}, {-1},
 
-      {pool_offset(2124),               395},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2223),                               172},
+      {-1}, {-1},
 
-      {pool_offset(2133),                                87},
+      {pool_offset(2226),                            238},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1},
 
-      {pool_offset(2144),                            87},
+      {pool_offset(2237),                               213},
+      {-1}, {-1},
+
+      {pool_offset(2240),                533},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2158),                               246},
-      {-1},
+      {pool_offset(2250), 323},
 
-      {pool_offset(2160),                   42},
+      {pool_offset(2251),                             160},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(2178),                387},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2264),            385},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(2187),                               228},
+      {pool_offset(2277),                         258},
 
-      {pool_offset(2188),                  409},
-      {-1},
+      {pool_offset(2278),                     218},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2190),                            388},
+      {pool_offset(2285),              540},
+      {-1}, {-1},
 
-      {pool_offset(2191),                            235},
+      {pool_offset(2288),                            317},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2196),                151},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2293),               438},
+      {-1},
 
-      {pool_offset(2213),                         362},
+      {pool_offset(2295),                 330},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2214),                               162},
+      {pool_offset(2305),     334},
       {-1}, {-1},
 
-      {pool_offset(2217),                          285},
-      {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(2222),   548},
+      {pool_offset(2308),                                 20},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1},
 
-      {pool_offset(2223),                                36},
+      {pool_offset(2320),                               183},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2228),                               240},
+      {pool_offset(2325),           62},
 
-      {pool_offset(2229),                         317},
-      {-1}, {-1},
+      {pool_offset(2326),                              92},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2232),                 100},
+      {pool_offset(2333),                               165},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2233),                            246},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2343),                                77},
+      {-1},
 
-      {pool_offset(2238),                          178},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2345),                      93},
 
-      {pool_offset(2245),        269},
-      {-1}, {-1}, {-1},
+      {pool_offset(2346),                               171},
+      {-1},
 
-      {pool_offset(2249),                            200},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2348),                          175},
 
-      {pool_offset(2255), 337},
+      {pool_offset(2349),   557},
       {-1}, {-1},
 
-      {pool_offset(2258),               48},
+      {pool_offset(2352),                                93},
 
-      {pool_offset(2259),                 264},
+      {pool_offset(2353),             535},
       {-1},
 
-      {pool_offset(2261),                           470},
-      {-1},
+      {pool_offset(2355),            370},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2263),                                91},
+      {pool_offset(2364),                          164},
 
-      {pool_offset(2264),                              167},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1},
+      {pool_offset(2365),                              0},
+
+      {pool_offset(2366),                             123},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(2375),                          63},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2286),                         176},
+      {pool_offset(2381),                                36},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(2391),                       362},
       {-1}, {-1}, {-1},
 
-      {pool_offset(2299),                                65},
-      {-1},
+      {pool_offset(2395),                    432},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2301),                         287},
-      {-1}, {-1}, {-1},
+      {pool_offset(2400),                     225},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2305),                     187},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2410),                           57},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2311),                     496},
-      {-1}, {-1}, {-1},
+      {pool_offset(2418),                342},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2315),                          65},
-      {-1}, {-1}, {-1},
+      {pool_offset(2426),                 101},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2319),                               231},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2442),                          310},
 
-      {pool_offset(2325),                               137},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2443),                             242},
+      {-1},
 
-      {pool_offset(2330),                            97},
-      {-1}, {-1},
+      {pool_offset(2445),                            184},
+      {-1},
 
-      {pool_offset(2333),                               179},
-      {-1}, {-1},
+      {pool_offset(2447),                             185},
 
-      {pool_offset(2336),                           137},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2448),                          397},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2341),                  336},
+      {pool_offset(2455),                           250},
 
-      {pool_offset(2342),                     262},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2456),                    188},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(2347),                        129},
+      {pool_offset(2460),         427},
+      {-1},
 
-      {pool_offset(2348),                 426},
-      {-1}, {-1},
+      {pool_offset(2462),                         513},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2351),                           397},
+      {pool_offset(2469),                               37},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2352),                               191},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2478),                        168},
+      {-1},
 
-      {pool_offset(2357),                             184},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2480),                        233},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2376),                    428},
+      {pool_offset(2487),                           440},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1},
+
+      {pool_offset(2498),                            312},
       {-1}, {-1}, {-1},
 
-      {pool_offset(2389),               50},
+      {pool_offset(2502),                 268},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2409),                                 261},
-      {-1},
+      {pool_offset(2516),                         313},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2411),                         223},
-      {-1}, {-1},
+      {pool_offset(2523),                               221},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2414),                               116},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2529),                       174},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(2538),                     542},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(2419), 331},
+      {pool_offset(2542),                               174},
       {-1},
 
-      {pool_offset(2421),                         253},
+      {pool_offset(2544),                           248},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(2554),                         376},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2428),                             231},
-
-      {pool_offset(2429),                   199},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2561),                               176},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2437),                        224},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2571),                      387},
+      {-1},
 
-      {pool_offset(2444),                     215},
+      {pool_offset(2573),                            114},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2445),                                4},
+      {pool_offset(2578),                    185},
       {-1}, {-1}, {-1},
 
-      {pool_offset(2449),                   75},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(2455),                   463},
+      {pool_offset(2582),                            203},
+      {-1},
 
-      {pool_offset(2456),                         225},
+      {pool_offset(2584),                   418},
       {-1}, {-1}, {-1},
 
-      {pool_offset(2460),                               206},
-
-      {pool_offset(2461),              167},
+      {pool_offset(2588),                                70},
       {-1}, {-1},
 
-      {pool_offset(2464),                            313},
+      {pool_offset(2591),                              169},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2465),                     153},
+      {pool_offset(2607),                     266},
       {-1},
 
-      {pool_offset(2467),                              188},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2609),                               247},
+      {-1},
 
-      {pool_offset(2473),                            60},
-      {-1}, {-1},
+      {pool_offset(2611),                78},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(2476),      378},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2615),                            247},
 
-      {pool_offset(2482),                             239},
-      {-1},
+      {pool_offset(2616),                               223},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2484),               49},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1},
+      {pool_offset(2622),                            97},
 
-      {pool_offset(2496),      416},
+      {pool_offset(2623),                               248},
       {-1}, {-1}, {-1},
 
-      {pool_offset(2500),                 511},
-      {-1}, {-1},
-
-      {pool_offset(2503), 319},
+      {pool_offset(2627),                  511},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2508),                              169},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(2518),                            181},
-      {-1}, {-1},
+      {pool_offset(2632),                               239},
 
-      {pool_offset(2521),                         309},
-      {-1}, {-1}, {-1},
+      {pool_offset(2633),               424},
 
-      {pool_offset(2525),                   414},
+      {pool_offset(2634), 541},
       {-1}, {-1}, {-1},
 
-      {pool_offset(2529),                        492},
+      {pool_offset(2638),                          118},
       {-1}, {-1},
 
-      {pool_offset(2532),                     189},
+      {pool_offset(2641),       428},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1},
 
-      {pool_offset(2533),                               230},
-      {-1}, {-1}, {-1},
+      {pool_offset(2652),                  413},
 
-      {pool_offset(2537),                                70},
+      {pool_offset(2653),                                71},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2553),                 261},
-
-      {pool_offset(2554),                         505},
+      {pool_offset(2669),                             215},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2559),                       186},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(2567),                        220},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2692),                            27},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(2576),                               210},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2696),                             71},
+      {-1},
 
-      {pool_offset(2584),                         254},
+      {pool_offset(2698),               48},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1},
 
-      {pool_offset(2585),   544},
+      {pool_offset(2709),                          181},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2586),                338},
+      {pool_offset(2725),                     544},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2623),                               36},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2767),                                 265},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2642),                             189},
-      {-1},
+      {pool_offset(2775),                             70},
 
-      {pool_offset(2644),                            27},
+      {pool_offset(2776),                               36},
       {-1}, {-1},
 
-      {pool_offset(2647),                           274},
+      {pool_offset(2779),              169},
       {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2653),                               173},
+      {pool_offset(2785),                   202},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(2794),                   467},
       {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2659),                            308},
-      {-1}, {-1},
+      {pool_offset(2800),                        498},
 
-      {pool_offset(2662),                         372},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2801),                     154},
       {-1}, {-1},
 
-      {pool_offset(2692),                             70},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(2700),               420},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(2707),                528},
+      {pool_offset(2804),               50},
       {-1}, {-1}, {-1},
 
-      {pool_offset(2711),               51},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2808),                539},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2743),            341},
-      {-1},
-
-      {pool_offset(2745), 529},
+      {pool_offset(2813),                               209},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(2764),                                19},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1},
 
-      {pool_offset(2770),                            96},
+      {pool_offset(2824),                             258},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2771),                          63},
+      {pool_offset(2831),                               161},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2776),        335},
+      {pool_offset(2836),                                19},
+      {-1},
 
-      {pool_offset(2777),                               168},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2838),                             59},
 
-      {pool_offset(2782),                         399},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2839),                          161},
+      {-1},
 
-      {pool_offset(2790),                  503},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2841),                551},
+      {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2798),                              91},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2847),                                68},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(2856),                     190},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2826),                   248},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2875),                 281},
 
-      {pool_offset(2831),                               236},
+      {pool_offset(2876),      420},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1},
-
-      {pool_offset(2843),                          188},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(2849),                        191},
-
-      {pool_offset(2850),                        230},
-      {-1}, {-1},
-
-      {pool_offset(2853),                               171},
-      {-1}, {-1},
-
-      {pool_offset(2856),                            113},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2861),                      506},
-      {-1},
-
-      {pool_offset(2863),                               10},
+      {pool_offset(2890),                        130},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2884),                539},
+      {pool_offset(2916),                   76},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(2930),               49},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2907),                               160},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2953),                    200},
 
-      {pool_offset(2915),                          160},
+      {pool_offset(2954),                         179},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2929),                          250},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(2970),                 519},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2937),                                95},
+      {pool_offset(2977),                            231},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2947),                     530},
+      {pool_offset(2996),                 265},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2954),                    173},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(3012),               47},
+      {-1}, {-1},
 
-      {pool_offset(2963),                 277},
+      {pool_offset(3015),                        227},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2968),                               244},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(3020),                   270},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2974),                            244},
+      {pool_offset(3072),                     192},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2975),         412},
+      {pool_offset(3079),                       189},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2976),              352},
+      {pool_offset(3084),                           278},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(2977),         423},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(3088),                    176},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(2986),     183},
+      {pool_offset(3092),                              191},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(2987),                             212},
+      {pool_offset(3099),                 451},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(3012),                     532},
-
-      {pool_offset(3013),       424},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(3118),            345},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1},
 
-      {pool_offset(3052),                             254},
+      {pool_offset(3146),               51},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(3154),                               170},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(3071),                               245},
+      {pool_offset(3182),        339},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(3188),                             187},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(3080), 356},
-      {-1}, {-1},
+      {pool_offset(3197),              414},
 
-      {pool_offset(3083),              541},
+      {pool_offset(3198),                          18},
 
-      {pool_offset(3084),              410},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(3199),                                 63},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(3112),                                42},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(3120),                             59},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(3127),                              168},
-      {-1}, {-1},
-
-      {pool_offset(3130),                           245},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(3139),                   203},
+      {pool_offset(3216),                             192},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1},
-
-      {pool_offset(3177),                          18},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(3184),                                68},
       {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(3190),                               232},
-      {-1}, {-1},
-
-      {pool_offset(3193),               47},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(3258),                                55},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(3210),                            232},
+      {pool_offset(3267),                                42},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(3228),                     222},
+      {pool_offset(3285),                              172},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1},
 
-      {pool_offset(3231),                                 20},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(3306),                             213},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(3239),             525},
+      {pool_offset(3324),                               236},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(3350),                              99},
       {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(3262),                            76},
+      {pool_offset(3355),              356},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1},
 
-      {pool_offset(3293),                    133},
-      {-1}, {-1}, {-1},
-
-      {pool_offset(3297),                    197},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(3413),                      514},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(3304),                      92},
+      {pool_offset(3459),                              170},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(3478),                          191},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1},
+
+      {pool_offset(3491),              553},
+      {-1}, {-1},
+
+      {pool_offset(3494), 360},
       {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(3328),            381},
+      {pool_offset(3500),     186},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(3337),                 447},
+      {pool_offset(3527),         416},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1},
+
+      {pool_offset(3538),                            68},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1},
-
-      {pool_offset(3375),                             210},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(3426),           62},
-      {-1}, {-1}, {-1}, {-1},
+      {pool_offset(3663),                    180},
+      {-1}, {-1},
 
-      {pool_offset(3431),                               233},
+      {pool_offset(3666),                               235},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(3685),                            235},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(3447),                                 63},
+      {pool_offset(3692),                 379},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(3471),                      383},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1},
 
-      {pool_offset(3485),                    177},
+      {pool_offset(3731),                        223},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(3504),                   266},
+      {pool_offset(3750),              508},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(3514),          365},
-      {-1}, {-1},
-
-      {pool_offset(3517),                184},
+      {pool_offset(3763), 509},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(3562),                              95},
-      {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(3564),                       346},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {pool_offset(3807),                               10},
+      {-1}, {-1},
 
-      {pool_offset(3570),                   411},
+      {pool_offset(3810),                   206},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(3872),                            77},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(3603),                             240},
+      {pool_offset(3881),                              96},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1},
 
-      {pool_offset(3623),                 375},
+      {pool_offset(3901),                             243},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(3910),                          253},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(3937),          369},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(3946),                   251},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(3961),                        194},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(3666),                            228},
+      {pool_offset(3971),             534},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1},
+
+      {pool_offset(3992),                       350},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
@@ -28857,9 +29335,6 @@ unicode_lookup_property_name (register const char *str, register size_t len)
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(3764),              501},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
@@ -28883,33 +29358,38 @@ unicode_lookup_property_name (register const char *str, register size_t len)
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(4279),                    134},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(4298),                187},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(4052),                    205},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1},
+
+      {pool_offset(4401),                   415},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(4129),     552},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1},
+
+      {pool_offset(4476),              358},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
@@ -28919,34 +29399,32 @@ unicode_lookup_property_name (register const char *str, register size_t len)
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(4562),          377},
 
-      {pool_offset(4261),                              98},
+      {pool_offset(4563),                                69},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1},
 
-      {pool_offset(4277),          373},
+      {pool_offset(4577), 554},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(4332),                                69},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1},
 
-      {pool_offset(4363),              354},
+      {pool_offset(4659),               171},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1},
+      {-1},
 
-      {pool_offset(4404),                            68},
+      {pool_offset(4688),     565},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
@@ -28961,9 +29439,15 @@ unicode_lookup_property_name (register const char *str, register size_t len)
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+
+      {pool_offset(4822),                    208},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1},
+
+      {pool_offset(4851),                 69},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
@@ -28973,15 +29457,10 @@ unicode_lookup_property_name (register const char *str, register size_t len)
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(4639), 542},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(4682),                                55},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
@@ -29042,9 +29521,6 @@ unicode_lookup_property_name (register const char *str, register size_t len)
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-
-      {pool_offset(5231),                 69},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
@@ -29076,9 +29552,11 @@ unicode_lookup_property_name (register const char *str, register size_t len)
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1},
 
-      {pool_offset(5516),     553}
+      {pool_offset(5809),     566}
     };
 
   if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
@@ -29102,10 +29580,10 @@ unicode_lookup_property_name (register const char *str, register size_t len)
 
 
 
-#define UNICODE_PROPERTY_VERSION  11_0_0
+#define UNICODE_PROPERTY_VERSION  12_1_0
 
 #define PROPERTY_NAME_MAX_SIZE  59
-#define CODE_RANGES_NUM         555
+#define CODE_RANGES_NUM         568
 
 #define PROP_INDEX_NEWLINE 0
 #define PROP_INDEX_ALPHA 1
@@ -29131,8 +29609,8 @@ unicode_lookup_property_name (register const char *str, register size_t len)
 #define PROP_INDEX_ANATOLIANHIEROGLYPHS 19
 #define PROP_INDEX_HLUW 19
 #define PROP_INDEX_ANY 20
-#define PROP_INDEX_ARAB 21
 #define PROP_INDEX_ARABIC 21
+#define PROP_INDEX_ARAB 21
 #define PROP_INDEX_ARMN 22
 #define PROP_INDEX_ARMENIAN 22
 #define PROP_INDEX_ASSIGNED 23
@@ -29228,666 +29706,683 @@ unicode_lookup_property_name (register const char *str, register size_t len)
 #define PROP_INDEX_EGYP 69
 #define PROP_INDEX_ELBA 70
 #define PROP_INDEX_ELBASAN 70
-#define PROP_INDEX_EMOJI 71
-#define PROP_INDEX_EMOJICOMPONENT 72
-#define PROP_INDEX_EMOJIMODIFIER 73
-#define PROP_INDEX_EMOJIMODIFIERBASE 74
-#define PROP_INDEX_EMOJIPRESENTATION 75
-#define PROP_INDEX_ETHIOPIC 76
-#define PROP_INDEX_ETHI 76
-#define PROP_INDEX_EXTENDEDPICTOGRAPHIC 77
-#define PROP_INDEX_EXT 78
-#define PROP_INDEX_EXTENDER 78
-#define PROP_INDEX_GEORGIAN 79
-#define PROP_INDEX_GEOR 79
-#define PROP_INDEX_GLAG 80
-#define PROP_INDEX_GLAGOLITIC 80
-#define PROP_INDEX_GOTH 81
-#define PROP_INDEX_GOTHIC 81
-#define PROP_INDEX_GRAN 82
-#define PROP_INDEX_GRANTHA 82
-#define PROP_INDEX_GRBASE 83
-#define PROP_INDEX_GRAPHEMEBASE 83
-#define PROP_INDEX_GREXT 84
-#define PROP_INDEX_GRAPHEMEEXTEND 84
-#define PROP_INDEX_GRAPHEMELINK 85
-#define PROP_INDEX_GRLINK 85
-#define PROP_INDEX_GREEK 86
-#define PROP_INDEX_GREK 86
-#define PROP_INDEX_GUJARATI 87
-#define PROP_INDEX_GUJR 87
-#define PROP_INDEX_GUNJALAGONDI 88
-#define PROP_INDEX_GONG 88
-#define PROP_INDEX_GURU 89
-#define PROP_INDEX_GURMUKHI 89
-#define PROP_INDEX_HANI 90
-#define PROP_INDEX_HAN 90
-#define PROP_INDEX_HANG 91
-#define PROP_INDEX_HANGUL 91
-#define PROP_INDEX_HANIFIROHINGYA 92
-#define PROP_INDEX_ROHG 92
-#define PROP_INDEX_HANUNOO 93
-#define PROP_INDEX_HANO 93
-#define PROP_INDEX_HATR 94
-#define PROP_INDEX_HATRAN 94
-#define PROP_INDEX_HEBREW 95
-#define PROP_INDEX_HEBR 95
-#define PROP_INDEX_HEXDIGIT 96
-#define PROP_INDEX_HEX 96
-#define PROP_INDEX_HIRAGANA 97
-#define PROP_INDEX_HIRA 97
-#define PROP_INDEX_HYPHEN 98
-#define PROP_INDEX_IDSB 99
-#define PROP_INDEX_IDSBINARYOPERATOR 99
-#define PROP_INDEX_IDST 100
-#define PROP_INDEX_IDSTRINARYOPERATOR 100
-#define PROP_INDEX_IDCONTINUE 101
-#define PROP_INDEX_IDC 101
-#define PROP_INDEX_IDS 102
-#define PROP_INDEX_IDSTART 102
-#define PROP_INDEX_IDEO 103
-#define PROP_INDEX_IDEOGRAPHIC 103
-#define PROP_INDEX_ARMI 104
-#define PROP_INDEX_IMPERIALARAMAIC 104
-#define PROP_INDEX_ZINH 105
-#define PROP_INDEX_INHERITED 105
-#define PROP_INDEX_QAAI 105
-#define PROP_INDEX_PHLI 106
-#define PROP_INDEX_INSCRIPTIONALPAHLAVI 106
-#define PROP_INDEX_INSCRIPTIONALPARTHIAN 107
-#define PROP_INDEX_PRTI 107
-#define PROP_INDEX_JAVANESE 108
-#define PROP_INDEX_JAVA 108
-#define PROP_INDEX_JOINC 109
-#define PROP_INDEX_JOINCONTROL 109
-#define PROP_INDEX_KAITHI 110
-#define PROP_INDEX_KTHI 110
-#define PROP_INDEX_KNDA 111
-#define PROP_INDEX_KANNADA 111
-#define PROP_INDEX_KATAKANA 112
-#define PROP_INDEX_KANA 112
-#define PROP_INDEX_KAYAHLI 113
-#define PROP_INDEX_KALI 113
-#define PROP_INDEX_KHAROSHTHI 114
-#define PROP_INDEX_KHAR 114
-#define PROP_INDEX_KHMR 115
-#define PROP_INDEX_KHMER 115
-#define PROP_INDEX_KHOJ 116
-#define PROP_INDEX_KHOJKI 116
-#define PROP_INDEX_KHUDAWADI 117
-#define PROP_INDEX_SIND 117
-#define PROP_INDEX_L 118
-#define PROP_INDEX_LETTER 118
-#define PROP_INDEX_LC 119
-#define PROP_INDEX_CASEDLETTER 119
-#define PROP_INDEX_LAO 120
-#define PROP_INDEX_LAOO 120
-#define PROP_INDEX_LATN 121
-#define PROP_INDEX_LATIN 121
-#define PROP_INDEX_LEPC 122
-#define PROP_INDEX_LEPCHA 122
-#define PROP_INDEX_LIMBU 123
-#define PROP_INDEX_LIMB 123
-#define PROP_INDEX_LINA 124
-#define PROP_INDEX_LINEARA 124
-#define PROP_INDEX_LINB 125
-#define PROP_INDEX_LINEARB 125
-#define PROP_INDEX_LISU 126
-#define PROP_INDEX_LOWERCASELETTER 127
-#define PROP_INDEX_LL 127
-#define PROP_INDEX_LM 128
-#define PROP_INDEX_MODIFIERLETTER 128
-#define PROP_INDEX_LO 129
-#define PROP_INDEX_OTHERLETTER 129
-#define PROP_INDEX_LOGICALORDEREXCEPTION 130
-#define PROP_INDEX_LOE 130
-#define PROP_INDEX_LOWERCASE 131
-#define PROP_INDEX_LT 132
-#define PROP_INDEX_TITLECASELETTER 132
-#define PROP_INDEX_UPPERCASELETTER 133
-#define PROP_INDEX_LU 133
-#define PROP_INDEX_LYCI 134
-#define PROP_INDEX_LYCIAN 134
-#define PROP_INDEX_LYDI 135
-#define PROP_INDEX_LYDIAN 135
-#define PROP_INDEX_M 136
-#define PROP_INDEX_COMBININGMARK 136
-#define PROP_INDEX_MARK 136
-#define PROP_INDEX_MAHJ 137
-#define PROP_INDEX_MAHAJANI 137
-#define PROP_INDEX_MAKASAR 138
-#define PROP_INDEX_MAKA 138
-#define PROP_INDEX_MALAYALAM 139
-#define PROP_INDEX_MLYM 139
-#define PROP_INDEX_MAND 140
-#define PROP_INDEX_MANDAIC 140
-#define PROP_INDEX_MANI 141
-#define PROP_INDEX_MANICHAEAN 141
-#define PROP_INDEX_MARC 142
-#define PROP_INDEX_MARCHEN 142
-#define PROP_INDEX_MASARAMGONDI 143
-#define PROP_INDEX_GONM 143
-#define PROP_INDEX_MATH 144
-#define PROP_INDEX_MC 145
-#define PROP_INDEX_SPACINGMARK 145
-#define PROP_INDEX_ENCLOSINGMARK 146
-#define PROP_INDEX_ME 146
-#define PROP_INDEX_MEDEFAIDRIN 147
-#define PROP_INDEX_MEDF 147
-#define PROP_INDEX_MEETEIMAYEK 148
-#define PROP_INDEX_MTEI 148
-#define PROP_INDEX_MENDEKIKAKUI 149
-#define PROP_INDEX_MEND 149
-#define PROP_INDEX_MEROITICCURSIVE 150
-#define PROP_INDEX_MERC 150
-#define PROP_INDEX_MEROITICHIEROGLYPHS 151
-#define PROP_INDEX_MERO 151
-#define PROP_INDEX_PLRD 152
-#define PROP_INDEX_MIAO 152
-#define PROP_INDEX_MN 153
-#define PROP_INDEX_NONSPACINGMARK 153
-#define PROP_INDEX_MODI 154
-#define PROP_INDEX_MONGOLIAN 155
-#define PROP_INDEX_MONG 155
-#define PROP_INDEX_MRO 156
-#define PROP_INDEX_MROO 156
-#define PROP_INDEX_MULT 157
-#define PROP_INDEX_MULTANI 157
-#define PROP_INDEX_MYANMAR 158
-#define PROP_INDEX_MYMR 158
-#define PROP_INDEX_NUMBER 159
-#define PROP_INDEX_N 159
-#define PROP_INDEX_NABATAEAN 160
-#define PROP_INDEX_NBAT 160
-#define PROP_INDEX_DECIMALNUMBER 161
-#define PROP_INDEX_ND 161
-#define PROP_INDEX_TALU 162
-#define PROP_INDEX_NEWTAILUE 162
-#define PROP_INDEX_NEWA 163
-#define PROP_INDEX_NKO 164
-#define PROP_INDEX_NKOO 164
-#define PROP_INDEX_LETTERNUMBER 165
-#define PROP_INDEX_NL 165
-#define PROP_INDEX_OTHERNUMBER 166
-#define PROP_INDEX_NO 166
-#define PROP_INDEX_NONCHARACTERCODEPOINT 167
-#define PROP_INDEX_NCHAR 167
-#define PROP_INDEX_NSHU 168
-#define PROP_INDEX_NUSHU 168
-#define PROP_INDEX_OGHAM 169
-#define PROP_INDEX_OGAM 169
-#define PROP_INDEX_OLCK 170
-#define PROP_INDEX_OLCHIKI 170
-#define PROP_INDEX_HUNG 171
-#define PROP_INDEX_OLDHUNGARIAN 171
-#define PROP_INDEX_ITAL 172
-#define PROP_INDEX_OLDITALIC 172
-#define PROP_INDEX_NARB 173
-#define PROP_INDEX_OLDNORTHARABIAN 173
-#define PROP_INDEX_OLDPERMIC 174
-#define PROP_INDEX_PERM 174
-#define PROP_INDEX_OLDPERSIAN 175
-#define PROP_INDEX_XPEO 175
-#define PROP_INDEX_SOGO 176
-#define PROP_INDEX_OLDSOGDIAN 176
-#define PROP_INDEX_SARB 177
-#define PROP_INDEX_OLDSOUTHARABIAN 177
-#define PROP_INDEX_OLDTURKIC 178
-#define PROP_INDEX_ORKH 178
-#define PROP_INDEX_ORYA 179
-#define PROP_INDEX_ORIYA 179
-#define PROP_INDEX_OSAGE 180
-#define PROP_INDEX_OSGE 180
-#define PROP_INDEX_OSMANYA 181
-#define PROP_INDEX_OSMA 181
-#define PROP_INDEX_OTHERALPHABETIC 182
-#define PROP_INDEX_OALPHA 182
-#define PROP_INDEX_ODI 183
-#define PROP_INDEX_OTHERDEFAULTIGNORABLECODEPOINT 183
-#define PROP_INDEX_OGREXT 184
-#define PROP_INDEX_OTHERGRAPHEMEEXTEND 184
-#define PROP_INDEX_OIDC 185
-#define PROP_INDEX_OTHERIDCONTINUE 185
-#define PROP_INDEX_OTHERIDSTART 186
-#define PROP_INDEX_OIDS 186
-#define PROP_INDEX_OTHERLOWERCASE 187
-#define PROP_INDEX_OLOWER 187
-#define PROP_INDEX_OTHERMATH 188
-#define PROP_INDEX_OMATH 188
-#define PROP_INDEX_OTHERUPPERCASE 189
-#define PROP_INDEX_OUPPER 189
-#define PROP_INDEX_P 190
-#define PROP_INDEX_PUNCTUATION 190
-#define PROP_INDEX_PAHAWHHMONG 191
-#define PROP_INDEX_HMNG 191
-#define PROP_INDEX_PALMYRENE 192
-#define PROP_INDEX_PALM 192
-#define PROP_INDEX_PATTERNSYNTAX 193
-#define PROP_INDEX_PATSYN 193
-#define PROP_INDEX_PATWS 194
-#define PROP_INDEX_PATTERNWHITESPACE 194
-#define PROP_INDEX_PAUCINHAU 195
-#define PROP_INDEX_PAUC 195
-#define PROP_INDEX_CONNECTORPUNCTUATION 196
-#define PROP_INDEX_PC 196
-#define PROP_INDEX_DASHPUNCTUATION 197
-#define PROP_INDEX_PD 197
-#define PROP_INDEX_PE 198
-#define PROP_INDEX_CLOSEPUNCTUATION 198
-#define PROP_INDEX_FINALPUNCTUATION 199
-#define PROP_INDEX_PF 199
-#define PROP_INDEX_PHAG 200
-#define PROP_INDEX_PHAGSPA 200
-#define PROP_INDEX_PHOENICIAN 201
-#define PROP_INDEX_PHNX 201
-#define PROP_INDEX_PI 202
-#define PROP_INDEX_INITIALPUNCTUATION 202
-#define PROP_INDEX_OTHERPUNCTUATION 203
-#define PROP_INDEX_PO 203
-#define PROP_INDEX_PREPENDEDCONCATENATIONMARK 204
-#define PROP_INDEX_PCM 204
-#define PROP_INDEX_PS 205
-#define PROP_INDEX_OPENPUNCTUATION 205
-#define PROP_INDEX_PHLP 206
-#define PROP_INDEX_PSALTERPAHLAVI 206
-#define PROP_INDEX_QUOTATIONMARK 207
-#define PROP_INDEX_QMARK 207
-#define PROP_INDEX_RADICAL 208
-#define PROP_INDEX_RI 209
-#define PROP_INDEX_REGIONALINDICATOR 209
-#define PROP_INDEX_REJANG 210
-#define PROP_INDEX_RJNG 210
-#define PROP_INDEX_RUNIC 211
-#define PROP_INDEX_RUNR 211
-#define PROP_INDEX_S 212
-#define PROP_INDEX_SYMBOL 212
-#define PROP_INDEX_SAMARITAN 213
-#define PROP_INDEX_SAMR 213
-#define PROP_INDEX_SAURASHTRA 214
-#define PROP_INDEX_SAUR 214
-#define PROP_INDEX_SC 215
-#define PROP_INDEX_CURRENCYSYMBOL 215
-#define PROP_INDEX_SENTENCETERMINAL 216
-#define PROP_INDEX_STERM 216
-#define PROP_INDEX_SHARADA 217
-#define PROP_INDEX_SHRD 217
-#define PROP_INDEX_SHAVIAN 218
-#define PROP_INDEX_SHAW 218
-#define PROP_INDEX_SIDDHAM 219
-#define PROP_INDEX_SIDD 219
-#define PROP_INDEX_SIGNWRITING 220
-#define PROP_INDEX_SGNW 220
-#define PROP_INDEX_SINH 221
-#define PROP_INDEX_SINHALA 221
-#define PROP_INDEX_SK 222
-#define PROP_INDEX_MODIFIERSYMBOL 222
-#define PROP_INDEX_MATHSYMBOL 223
-#define PROP_INDEX_SM 223
-#define PROP_INDEX_SO 224
-#define PROP_INDEX_OTHERSYMBOL 224
-#define PROP_INDEX_SD 225
-#define PROP_INDEX_SOFTDOTTED 225
-#define PROP_INDEX_SOGD 226
-#define PROP_INDEX_SOGDIAN 226
-#define PROP_INDEX_SORASOMPENG 227
-#define PROP_INDEX_SORA 227
-#define PROP_INDEX_SOYO 228
-#define PROP_INDEX_SOYOMBO 228
-#define PROP_INDEX_SUND 229
-#define PROP_INDEX_SUNDANESE 229
-#define PROP_INDEX_SYLO 230
-#define PROP_INDEX_SYLOTINAGRI 230
-#define PROP_INDEX_SYRC 231
-#define PROP_INDEX_SYRIAC 231
-#define PROP_INDEX_TGLG 232
-#define PROP_INDEX_TAGALOG 232
-#define PROP_INDEX_TAGBANWA 233
-#define PROP_INDEX_TAGB 233
-#define PROP_INDEX_TAILE 234
-#define PROP_INDEX_TALE 234
-#define PROP_INDEX_TAITHAM 235
-#define PROP_INDEX_LANA 235
-#define PROP_INDEX_TAIVIET 236
-#define PROP_INDEX_TAVT 236
-#define PROP_INDEX_TAKRI 237
-#define PROP_INDEX_TAKR 237
-#define PROP_INDEX_TAMIL 238
-#define PROP_INDEX_TAML 238
-#define PROP_INDEX_TANG 239
-#define PROP_INDEX_TANGUT 239
-#define PROP_INDEX_TELUGU 240
-#define PROP_INDEX_TELU 240
-#define PROP_INDEX_TERM 241
-#define PROP_INDEX_TERMINALPUNCTUATION 241
-#define PROP_INDEX_THAA 242
-#define PROP_INDEX_THAANA 242
-#define PROP_INDEX_THAI 243
-#define PROP_INDEX_TIBT 244
-#define PROP_INDEX_TIBETAN 244
-#define PROP_INDEX_TFNG 245
-#define PROP_INDEX_TIFINAGH 245
-#define PROP_INDEX_TIRHUTA 246
-#define PROP_INDEX_TIRH 246
-#define PROP_INDEX_UGAR 247
-#define PROP_INDEX_UGARITIC 247
-#define PROP_INDEX_UNIFIEDIDEOGRAPH 248
-#define PROP_INDEX_UIDEO 248
-#define PROP_INDEX_ZZZZ 249
-#define PROP_INDEX_UNKNOWN 249
-#define PROP_INDEX_UPPERCASE 250
-#define PROP_INDEX_VAII 251
-#define PROP_INDEX_VAI 251
-#define PROP_INDEX_VARIATIONSELECTOR 252
-#define PROP_INDEX_VS 252
-#define PROP_INDEX_WARANGCITI 253
-#define PROP_INDEX_WARA 253
-#define PROP_INDEX_WHITESPACE 254
-#define PROP_INDEX_WSPACE 254
-#define PROP_INDEX_XIDC 255
-#define PROP_INDEX_XIDCONTINUE 255
-#define PROP_INDEX_XIDS 256
-#define PROP_INDEX_XIDSTART 256
-#define PROP_INDEX_YI 257
-#define PROP_INDEX_YIII 257
-#define PROP_INDEX_SEPARATOR 258
-#define PROP_INDEX_Z 258
-#define PROP_INDEX_ZANABAZARSQUARE 259
-#define PROP_INDEX_ZANB 259
-#define PROP_INDEX_ZL 260
-#define PROP_INDEX_LINESEPARATOR 260
-#define PROP_INDEX_ZP 261
-#define PROP_INDEX_PARAGRAPHSEPARATOR 261
-#define PROP_INDEX_ZS 262
-#define PROP_INDEX_SPACESEPARATOR 262
-#define PROP_INDEX_INBASICLATIN 263
-#define PROP_INDEX_INLATIN1SUPPLEMENT 264
-#define PROP_INDEX_INLATINEXTENDEDA 265
-#define PROP_INDEX_INLATINEXTENDEDB 266
-#define PROP_INDEX_INIPAEXTENSIONS 267
-#define PROP_INDEX_INSPACINGMODIFIERLETTERS 268
-#define PROP_INDEX_INCOMBININGDIACRITICALMARKS 269
-#define PROP_INDEX_INGREEKANDCOPTIC 270
-#define PROP_INDEX_INCYRILLIC 271
-#define PROP_INDEX_INCYRILLICSUPPLEMENT 272
-#define PROP_INDEX_INARMENIAN 273
-#define PROP_INDEX_INHEBREW 274
-#define PROP_INDEX_INARABIC 275
-#define PROP_INDEX_INSYRIAC 276
-#define PROP_INDEX_INARABICSUPPLEMENT 277
-#define PROP_INDEX_INTHAANA 278
-#define PROP_INDEX_INNKO 279
-#define PROP_INDEX_INSAMARITAN 280
-#define PROP_INDEX_INMANDAIC 281
-#define PROP_INDEX_INSYRIACSUPPLEMENT 282
-#define PROP_INDEX_INARABICEXTENDEDA 283
-#define PROP_INDEX_INDEVANAGARI 284
-#define PROP_INDEX_INBENGALI 285
-#define PROP_INDEX_INGURMUKHI 286
-#define PROP_INDEX_INGUJARATI 287
-#define PROP_INDEX_INORIYA 288
-#define PROP_INDEX_INTAMIL 289
-#define PROP_INDEX_INTELUGU 290
-#define PROP_INDEX_INKANNADA 291
-#define PROP_INDEX_INMALAYALAM 292
-#define PROP_INDEX_INSINHALA 293
-#define PROP_INDEX_INTHAI 294
-#define PROP_INDEX_INLAO 295
-#define PROP_INDEX_INTIBETAN 296
-#define PROP_INDEX_INMYANMAR 297
-#define PROP_INDEX_INGEORGIAN 298
-#define PROP_INDEX_INHANGULJAMO 299
-#define PROP_INDEX_INETHIOPIC 300
-#define PROP_INDEX_INETHIOPICSUPPLEMENT 301
-#define PROP_INDEX_INCHEROKEE 302
-#define PROP_INDEX_INUNIFIEDCANADIANABORIGINALSYLLABICS 303
-#define PROP_INDEX_INOGHAM 304
-#define PROP_INDEX_INRUNIC 305
-#define PROP_INDEX_INTAGALOG 306
-#define PROP_INDEX_INHANUNOO 307
-#define PROP_INDEX_INBUHID 308
-#define PROP_INDEX_INTAGBANWA 309
-#define PROP_INDEX_INKHMER 310
-#define PROP_INDEX_INMONGOLIAN 311
-#define PROP_INDEX_INUNIFIEDCANADIANABORIGINALSYLLABICSEXTENDED 312
-#define PROP_INDEX_INLIMBU 313
-#define PROP_INDEX_INTAILE 314
-#define PROP_INDEX_INNEWTAILUE 315
-#define PROP_INDEX_INKHMERSYMBOLS 316
-#define PROP_INDEX_INBUGINESE 317
-#define PROP_INDEX_INTAITHAM 318
-#define PROP_INDEX_INCOMBININGDIACRITICALMARKSEXTENDED 319
-#define PROP_INDEX_INBALINESE 320
-#define PROP_INDEX_INSUNDANESE 321
-#define PROP_INDEX_INBATAK 322
-#define PROP_INDEX_INLEPCHA 323
-#define PROP_INDEX_INOLCHIKI 324
-#define PROP_INDEX_INCYRILLICEXTENDEDC 325
-#define PROP_INDEX_INGEORGIANEXTENDED 326
-#define PROP_INDEX_INSUNDANESESUPPLEMENT 327
-#define PROP_INDEX_INVEDICEXTENSIONS 328
-#define PROP_INDEX_INPHONETICEXTENSIONS 329
-#define PROP_INDEX_INPHONETICEXTENSIONSSUPPLEMENT 330
-#define PROP_INDEX_INCOMBININGDIACRITICALMARKSSUPPLEMENT 331
-#define PROP_INDEX_INLATINEXTENDEDADDITIONAL 332
-#define PROP_INDEX_INGREEKEXTENDED 333
-#define PROP_INDEX_INGENERALPUNCTUATION 334
-#define PROP_INDEX_INSUPERSCRIPTSANDSUBSCRIPTS 335
-#define PROP_INDEX_INCURRENCYSYMBOLS 336
-#define PROP_INDEX_INCOMBININGDIACRITICALMARKSFORSYMBOLS 337
-#define PROP_INDEX_INLETTERLIKESYMBOLS 338
-#define PROP_INDEX_INNUMBERFORMS 339
-#define PROP_INDEX_INARROWS 340
-#define PROP_INDEX_INMATHEMATICALOPERATORS 341
-#define PROP_INDEX_INMISCELLANEOUSTECHNICAL 342
-#define PROP_INDEX_INCONTROLPICTURES 343
-#define PROP_INDEX_INOPTICALCHARACTERRECOGNITION 344
-#define PROP_INDEX_INENCLOSEDALPHANUMERICS 345
-#define PROP_INDEX_INBOXDRAWING 346
-#define PROP_INDEX_INBLOCKELEMENTS 347
-#define PROP_INDEX_INGEOMETRICSHAPES 348
-#define PROP_INDEX_INMISCELLANEOUSSYMBOLS 349
-#define PROP_INDEX_INDINGBATS 350
-#define PROP_INDEX_INMISCELLANEOUSMATHEMATICALSYMBOLSA 351
-#define PROP_INDEX_INSUPPLEMENTALARROWSA 352
-#define PROP_INDEX_INBRAILLEPATTERNS 353
-#define PROP_INDEX_INSUPPLEMENTALARROWSB 354
-#define PROP_INDEX_INMISCELLANEOUSMATHEMATICALSYMBOLSB 355
-#define PROP_INDEX_INSUPPLEMENTALMATHEMATICALOPERATORS 356
-#define PROP_INDEX_INMISCELLANEOUSSYMBOLSANDARROWS 357
-#define PROP_INDEX_INGLAGOLITIC 358
-#define PROP_INDEX_INLATINEXTENDEDC 359
-#define PROP_INDEX_INCOPTIC 360
-#define PROP_INDEX_INGEORGIANSUPPLEMENT 361
-#define PROP_INDEX_INTIFINAGH 362
-#define PROP_INDEX_INETHIOPICEXTENDED 363
-#define PROP_INDEX_INCYRILLICEXTENDEDA 364
-#define PROP_INDEX_INSUPPLEMENTALPUNCTUATION 365
-#define PROP_INDEX_INCJKRADICALSSUPPLEMENT 366
-#define PROP_INDEX_INKANGXIRADICALS 367
-#define PROP_INDEX_INIDEOGRAPHICDESCRIPTIONCHARACTERS 368
-#define PROP_INDEX_INCJKSYMBOLSANDPUNCTUATION 369
-#define PROP_INDEX_INHIRAGANA 370
-#define PROP_INDEX_INKATAKANA 371
-#define PROP_INDEX_INBOPOMOFO 372
-#define PROP_INDEX_INHANGULCOMPATIBILITYJAMO 373
-#define PROP_INDEX_INKANBUN 374
-#define PROP_INDEX_INBOPOMOFOEXTENDED 375
-#define PROP_INDEX_INCJKSTROKES 376
-#define PROP_INDEX_INKATAKANAPHONETICEXTENSIONS 377
-#define PROP_INDEX_INENCLOSEDCJKLETTERSANDMONTHS 378
-#define PROP_INDEX_INCJKCOMPATIBILITY 379
-#define PROP_INDEX_INCJKUNIFIEDIDEOGRAPHSEXTENSIONA 380
-#define PROP_INDEX_INYIJINGHEXAGRAMSYMBOLS 381
-#define PROP_INDEX_INCJKUNIFIEDIDEOGRAPHS 382
-#define PROP_INDEX_INYISYLLABLES 383
-#define PROP_INDEX_INYIRADICALS 384
-#define PROP_INDEX_INLISU 385
-#define PROP_INDEX_INVAI 386
-#define PROP_INDEX_INCYRILLICEXTENDEDB 387
-#define PROP_INDEX_INBAMUM 388
-#define PROP_INDEX_INMODIFIERTONELETTERS 389
-#define PROP_INDEX_INLATINEXTENDEDD 390
-#define PROP_INDEX_INSYLOTINAGRI 391
-#define PROP_INDEX_INCOMMONINDICNUMBERFORMS 392
-#define PROP_INDEX_INPHAGSPA 393
-#define PROP_INDEX_INSAURASHTRA 394
-#define PROP_INDEX_INDEVANAGARIEXTENDED 395
-#define PROP_INDEX_INKAYAHLI 396
-#define PROP_INDEX_INREJANG 397
-#define PROP_INDEX_INHANGULJAMOEXTENDEDA 398
-#define PROP_INDEX_INJAVANESE 399
-#define PROP_INDEX_INMYANMAREXTENDEDB 400
-#define PROP_INDEX_INCHAM 401
-#define PROP_INDEX_INMYANMAREXTENDEDA 402
-#define PROP_INDEX_INTAIVIET 403
-#define PROP_INDEX_INMEETEIMAYEKEXTENSIONS 404
-#define PROP_INDEX_INETHIOPICEXTENDEDA 405
-#define PROP_INDEX_INLATINEXTENDEDE 406
-#define PROP_INDEX_INCHEROKEESUPPLEMENT 407
-#define PROP_INDEX_INMEETEIMAYEK 408
-#define PROP_INDEX_INHANGULSYLLABLES 409
-#define PROP_INDEX_INHANGULJAMOEXTENDEDB 410
-#define PROP_INDEX_INHIGHSURROGATES 411
-#define PROP_INDEX_INHIGHPRIVATEUSESURROGATES 412
-#define PROP_INDEX_INLOWSURROGATES 413
-#define PROP_INDEX_INPRIVATEUSEAREA 414
-#define PROP_INDEX_INCJKCOMPATIBILITYIDEOGRAPHS 415
-#define PROP_INDEX_INALPHABETICPRESENTATIONFORMS 416
-#define PROP_INDEX_INARABICPRESENTATIONFORMSA 417
-#define PROP_INDEX_INVARIATIONSELECTORS 418
-#define PROP_INDEX_INVERTICALFORMS 419
-#define PROP_INDEX_INCOMBININGHALFMARKS 420
-#define PROP_INDEX_INCJKCOMPATIBILITYFORMS 421
-#define PROP_INDEX_INSMALLFORMVARIANTS 422
-#define PROP_INDEX_INARABICPRESENTATIONFORMSB 423
-#define PROP_INDEX_INHALFWIDTHANDFULLWIDTHFORMS 424
-#define PROP_INDEX_INSPECIALS 425
-#define PROP_INDEX_INLINEARBSYLLABARY 426
-#define PROP_INDEX_INLINEARBIDEOGRAMS 427
-#define PROP_INDEX_INAEGEANNUMBERS 428
-#define PROP_INDEX_INANCIENTGREEKNUMBERS 429
-#define PROP_INDEX_INANCIENTSYMBOLS 430
-#define PROP_INDEX_INPHAISTOSDISC 431
-#define PROP_INDEX_INLYCIAN 432
-#define PROP_INDEX_INCARIAN 433
-#define PROP_INDEX_INCOPTICEPACTNUMBERS 434
-#define PROP_INDEX_INOLDITALIC 435
-#define PROP_INDEX_INGOTHIC 436
-#define PROP_INDEX_INOLDPERMIC 437
-#define PROP_INDEX_INUGARITIC 438
-#define PROP_INDEX_INOLDPERSIAN 439
-#define PROP_INDEX_INDESERET 440
-#define PROP_INDEX_INSHAVIAN 441
-#define PROP_INDEX_INOSMANYA 442
-#define PROP_INDEX_INOSAGE 443
-#define PROP_INDEX_INELBASAN 444
-#define PROP_INDEX_INCAUCASIANALBANIAN 445
-#define PROP_INDEX_INLINEARA 446
-#define PROP_INDEX_INCYPRIOTSYLLABARY 447
-#define PROP_INDEX_INIMPERIALARAMAIC 448
-#define PROP_INDEX_INPALMYRENE 449
-#define PROP_INDEX_INNABATAEAN 450
-#define PROP_INDEX_INHATRAN 451
-#define PROP_INDEX_INPHOENICIAN 452
-#define PROP_INDEX_INLYDIAN 453
-#define PROP_INDEX_INMEROITICHIEROGLYPHS 454
-#define PROP_INDEX_INMEROITICCURSIVE 455
-#define PROP_INDEX_INKHAROSHTHI 456
-#define PROP_INDEX_INOLDSOUTHARABIAN 457
-#define PROP_INDEX_INOLDNORTHARABIAN 458
-#define PROP_INDEX_INMANICHAEAN 459
-#define PROP_INDEX_INAVESTAN 460
-#define PROP_INDEX_ININSCRIPTIONALPARTHIAN 461
-#define PROP_INDEX_ININSCRIPTIONALPAHLAVI 462
-#define PROP_INDEX_INPSALTERPAHLAVI 463
-#define PROP_INDEX_INOLDTURKIC 464
-#define PROP_INDEX_INOLDHUNGARIAN 465
-#define PROP_INDEX_INHANIFIROHINGYA 466
-#define PROP_INDEX_INRUMINUMERALSYMBOLS 467
-#define PROP_INDEX_INOLDSOGDIAN 468
-#define PROP_INDEX_INSOGDIAN 469
-#define PROP_INDEX_INBRAHMI 470
-#define PROP_INDEX_INKAITHI 471
-#define PROP_INDEX_INSORASOMPENG 472
-#define PROP_INDEX_INCHAKMA 473
-#define PROP_INDEX_INMAHAJANI 474
-#define PROP_INDEX_INSHARADA 475
-#define PROP_INDEX_INSINHALAARCHAICNUMBERS 476
-#define PROP_INDEX_INKHOJKI 477
-#define PROP_INDEX_INMULTANI 478
-#define PROP_INDEX_INKHUDAWADI 479
-#define PROP_INDEX_INGRANTHA 480
-#define PROP_INDEX_INNEWA 481
-#define PROP_INDEX_INTIRHUTA 482
-#define PROP_INDEX_INSIDDHAM 483
-#define PROP_INDEX_INMODI 484
-#define PROP_INDEX_INMONGOLIANSUPPLEMENT 485
-#define PROP_INDEX_INTAKRI 486
-#define PROP_INDEX_INAHOM 487
-#define PROP_INDEX_INDOGRA 488
-#define PROP_INDEX_INWARANGCITI 489
-#define PROP_INDEX_INZANABAZARSQUARE 490
-#define PROP_INDEX_INSOYOMBO 491
-#define PROP_INDEX_INPAUCINHAU 492
-#define PROP_INDEX_INBHAIKSUKI 493
-#define PROP_INDEX_INMARCHEN 494
-#define PROP_INDEX_INMASARAMGONDI 495
-#define PROP_INDEX_INGUNJALAGONDI 496
-#define PROP_INDEX_INMAKASAR 497
-#define PROP_INDEX_INCUNEIFORM 498
-#define PROP_INDEX_INCUNEIFORMNUMBERSANDPUNCTUATION 499
-#define PROP_INDEX_INEARLYDYNASTICCUNEIFORM 500
-#define PROP_INDEX_INEGYPTIANHIEROGLYPHS 501
-#define PROP_INDEX_INANATOLIANHIEROGLYPHS 502
-#define PROP_INDEX_INBAMUMSUPPLEMENT 503
-#define PROP_INDEX_INMRO 504
-#define PROP_INDEX_INBASSAVAH 505
-#define PROP_INDEX_INPAHAWHHMONG 506
-#define PROP_INDEX_INMEDEFAIDRIN 507
-#define PROP_INDEX_INMIAO 508
-#define PROP_INDEX_INIDEOGRAPHICSYMBOLSANDPUNCTUATION 509
-#define PROP_INDEX_INTANGUT 510
-#define PROP_INDEX_INTANGUTCOMPONENTS 511
-#define PROP_INDEX_INKANASUPPLEMENT 512
-#define PROP_INDEX_INKANAEXTENDEDA 513
-#define PROP_INDEX_INNUSHU 514
-#define PROP_INDEX_INDUPLOYAN 515
-#define PROP_INDEX_INSHORTHANDFORMATCONTROLS 516
-#define PROP_INDEX_INBYZANTINEMUSICALSYMBOLS 517
-#define PROP_INDEX_INMUSICALSYMBOLS 518
-#define PROP_INDEX_INANCIENTGREEKMUSICALNOTATION 519
-#define PROP_INDEX_INMAYANNUMERALS 520
-#define PROP_INDEX_INTAIXUANJINGSYMBOLS 521
-#define PROP_INDEX_INCOUNTINGRODNUMERALS 522
-#define PROP_INDEX_INMATHEMATICALALPHANUMERICSYMBOLS 523
-#define PROP_INDEX_INSUTTONSIGNWRITING 524
-#define PROP_INDEX_INGLAGOLITICSUPPLEMENT 525
-#define PROP_INDEX_INMENDEKIKAKUI 526
-#define PROP_INDEX_INADLAM 527
-#define PROP_INDEX_ININDICSIYAQNUMBERS 528
-#define PROP_INDEX_INARABICMATHEMATICALALPHABETICSYMBOLS 529
-#define PROP_INDEX_INMAHJONGTILES 530
-#define PROP_INDEX_INDOMINOTILES 531
-#define PROP_INDEX_INPLAYINGCARDS 532
-#define PROP_INDEX_INENCLOSEDALPHANUMERICSUPPLEMENT 533
-#define PROP_INDEX_INENCLOSEDIDEOGRAPHICSUPPLEMENT 534
-#define PROP_INDEX_INMISCELLANEOUSSYMBOLSANDPICTOGRAPHS 535
-#define PROP_INDEX_INEMOTICONS 536
-#define PROP_INDEX_INORNAMENTALDINGBATS 537
-#define PROP_INDEX_INTRANSPORTANDMAPSYMBOLS 538
-#define PROP_INDEX_INALCHEMICALSYMBOLS 539
-#define PROP_INDEX_INGEOMETRICSHAPESEXTENDED 540
-#define PROP_INDEX_INSUPPLEMENTALARROWSC 541
-#define PROP_INDEX_INSUPPLEMENTALSYMBOLSANDPICTOGRAPHS 542
-#define PROP_INDEX_INCHESSSYMBOLS 543
-#define PROP_INDEX_INCJKUNIFIEDIDEOGRAPHSEXTENSIONB 544
-#define PROP_INDEX_INCJKUNIFIEDIDEOGRAPHSEXTENSIONC 545
-#define PROP_INDEX_INCJKUNIFIEDIDEOGRAPHSEXTENSIOND 546
-#define PROP_INDEX_INCJKUNIFIEDIDEOGRAPHSEXTENSIONE 547
-#define PROP_INDEX_INCJKUNIFIEDIDEOGRAPHSEXTENSIONF 548
-#define PROP_INDEX_INCJKCOMPATIBILITYIDEOGRAPHSSUPPLEMENT 549
-#define PROP_INDEX_INTAGS 550
-#define PROP_INDEX_INVARIATIONSELECTORSSUPPLEMENT 551
-#define PROP_INDEX_INSUPPLEMENTARYPRIVATEUSEAREAA 552
-#define PROP_INDEX_INSUPPLEMENTARYPRIVATEUSEAREAB 553
-#define PROP_INDEX_INNOBLOCK 554
+#define PROP_INDEX_ELYM 71
+#define PROP_INDEX_ELYMAIC 71
+#define PROP_INDEX_EMOJI 72
+#define PROP_INDEX_EMOJICOMPONENT 73
+#define PROP_INDEX_EMOJIMODIFIER 74
+#define PROP_INDEX_EMOJIMODIFIERBASE 75
+#define PROP_INDEX_EMOJIPRESENTATION 76
+#define PROP_INDEX_ETHIOPIC 77
+#define PROP_INDEX_ETHI 77
+#define PROP_INDEX_EXTENDEDPICTOGRAPHIC 78
+#define PROP_INDEX_EXT 79
+#define PROP_INDEX_EXTENDER 79
+#define PROP_INDEX_GEORGIAN 80
+#define PROP_INDEX_GEOR 80
+#define PROP_INDEX_GLAG 81
+#define PROP_INDEX_GLAGOLITIC 81
+#define PROP_INDEX_GOTH 82
+#define PROP_INDEX_GOTHIC 82
+#define PROP_INDEX_GRAN 83
+#define PROP_INDEX_GRANTHA 83
+#define PROP_INDEX_GRBASE 84
+#define PROP_INDEX_GRAPHEMEBASE 84
+#define PROP_INDEX_GREXT 85
+#define PROP_INDEX_GRAPHEMEEXTEND 85
+#define PROP_INDEX_GRAPHEMELINK 86
+#define PROP_INDEX_GRLINK 86
+#define PROP_INDEX_GREEK 87
+#define PROP_INDEX_GREK 87
+#define PROP_INDEX_GUJARATI 88
+#define PROP_INDEX_GUJR 88
+#define PROP_INDEX_GUNJALAGONDI 89
+#define PROP_INDEX_GONG 89
+#define PROP_INDEX_GURU 90
+#define PROP_INDEX_GURMUKHI 90
+#define PROP_INDEX_HANI 91
+#define PROP_INDEX_HAN 91
+#define PROP_INDEX_HANG 92
+#define PROP_INDEX_HANGUL 92
+#define PROP_INDEX_HANIFIROHINGYA 93
+#define PROP_INDEX_ROHG 93
+#define PROP_INDEX_HANUNOO 94
+#define PROP_INDEX_HANO 94
+#define PROP_INDEX_HATR 95
+#define PROP_INDEX_HATRAN 95
+#define PROP_INDEX_HEBREW 96
+#define PROP_INDEX_HEBR 96
+#define PROP_INDEX_HEXDIGIT 97
+#define PROP_INDEX_HEX 97
+#define PROP_INDEX_HIRAGANA 98
+#define PROP_INDEX_HIRA 98
+#define PROP_INDEX_HYPHEN 99
+#define PROP_INDEX_IDSB 100
+#define PROP_INDEX_IDSBINARYOPERATOR 100
+#define PROP_INDEX_IDST 101
+#define PROP_INDEX_IDSTRINARYOPERATOR 101
+#define PROP_INDEX_IDCONTINUE 102
+#define PROP_INDEX_IDC 102
+#define PROP_INDEX_IDS 103
+#define PROP_INDEX_IDSTART 103
+#define PROP_INDEX_IDEO 104
+#define PROP_INDEX_IDEOGRAPHIC 104
+#define PROP_INDEX_ARMI 105
+#define PROP_INDEX_IMPERIALARAMAIC 105
+#define PROP_INDEX_ZINH 106
+#define PROP_INDEX_INHERITED 106
+#define PROP_INDEX_QAAI 106
+#define PROP_INDEX_PHLI 107
+#define PROP_INDEX_INSCRIPTIONALPAHLAVI 107
+#define PROP_INDEX_INSCRIPTIONALPARTHIAN 108
+#define PROP_INDEX_PRTI 108
+#define PROP_INDEX_JAVANESE 109
+#define PROP_INDEX_JAVA 109
+#define PROP_INDEX_JOINC 110
+#define PROP_INDEX_JOINCONTROL 110
+#define PROP_INDEX_KAITHI 111
+#define PROP_INDEX_KTHI 111
+#define PROP_INDEX_KNDA 112
+#define PROP_INDEX_KANNADA 112
+#define PROP_INDEX_KATAKANA 113
+#define PROP_INDEX_KANA 113
+#define PROP_INDEX_KAYAHLI 114
+#define PROP_INDEX_KALI 114
+#define PROP_INDEX_KHAROSHTHI 115
+#define PROP_INDEX_KHAR 115
+#define PROP_INDEX_KHMR 116
+#define PROP_INDEX_KHMER 116
+#define PROP_INDEX_KHOJ 117
+#define PROP_INDEX_KHOJKI 117
+#define PROP_INDEX_KHUDAWADI 118
+#define PROP_INDEX_SIND 118
+#define PROP_INDEX_L 119
+#define PROP_INDEX_LETTER 119
+#define PROP_INDEX_LC 120
+#define PROP_INDEX_CASEDLETTER 120
+#define PROP_INDEX_LAO 121
+#define PROP_INDEX_LAOO 121
+#define PROP_INDEX_LATN 122
+#define PROP_INDEX_LATIN 122
+#define PROP_INDEX_LEPC 123
+#define PROP_INDEX_LEPCHA 123
+#define PROP_INDEX_LIMBU 124
+#define PROP_INDEX_LIMB 124
+#define PROP_INDEX_LINA 125
+#define PROP_INDEX_LINEARA 125
+#define PROP_INDEX_LINB 126
+#define PROP_INDEX_LINEARB 126
+#define PROP_INDEX_LISU 127
+#define PROP_INDEX_LOWERCASELETTER 128
+#define PROP_INDEX_LL 128
+#define PROP_INDEX_LM 129
+#define PROP_INDEX_MODIFIERLETTER 129
+#define PROP_INDEX_LO 130
+#define PROP_INDEX_OTHERLETTER 130
+#define PROP_INDEX_LOGICALORDEREXCEPTION 131
+#define PROP_INDEX_LOE 131
+#define PROP_INDEX_LOWERCASE 132
+#define PROP_INDEX_LT 133
+#define PROP_INDEX_TITLECASELETTER 133
+#define PROP_INDEX_UPPERCASELETTER 134
+#define PROP_INDEX_LU 134
+#define PROP_INDEX_LYCI 135
+#define PROP_INDEX_LYCIAN 135
+#define PROP_INDEX_LYDI 136
+#define PROP_INDEX_LYDIAN 136
+#define PROP_INDEX_M 137
+#define PROP_INDEX_COMBININGMARK 137
+#define PROP_INDEX_MARK 137
+#define PROP_INDEX_MAHJ 138
+#define PROP_INDEX_MAHAJANI 138
+#define PROP_INDEX_MAKASAR 139
+#define PROP_INDEX_MAKA 139
+#define PROP_INDEX_MALAYALAM 140
+#define PROP_INDEX_MLYM 140
+#define PROP_INDEX_MAND 141
+#define PROP_INDEX_MANDAIC 141
+#define PROP_INDEX_MANI 142
+#define PROP_INDEX_MANICHAEAN 142
+#define PROP_INDEX_MARC 143
+#define PROP_INDEX_MARCHEN 143
+#define PROP_INDEX_MASARAMGONDI 144
+#define PROP_INDEX_GONM 144
+#define PROP_INDEX_MATH 145
+#define PROP_INDEX_MC 146
+#define PROP_INDEX_SPACINGMARK 146
+#define PROP_INDEX_ENCLOSINGMARK 147
+#define PROP_INDEX_ME 147
+#define PROP_INDEX_MEDEFAIDRIN 148
+#define PROP_INDEX_MEDF 148
+#define PROP_INDEX_MEETEIMAYEK 149
+#define PROP_INDEX_MTEI 149
+#define PROP_INDEX_MENDEKIKAKUI 150
+#define PROP_INDEX_MEND 150
+#define PROP_INDEX_MEROITICCURSIVE 151
+#define PROP_INDEX_MERC 151
+#define PROP_INDEX_MEROITICHIEROGLYPHS 152
+#define PROP_INDEX_MERO 152
+#define PROP_INDEX_PLRD 153
+#define PROP_INDEX_MIAO 153
+#define PROP_INDEX_MN 154
+#define PROP_INDEX_NONSPACINGMARK 154
+#define PROP_INDEX_MODI 155
+#define PROP_INDEX_MONGOLIAN 156
+#define PROP_INDEX_MONG 156
+#define PROP_INDEX_MRO 157
+#define PROP_INDEX_MROO 157
+#define PROP_INDEX_MULT 158
+#define PROP_INDEX_MULTANI 158
+#define PROP_INDEX_MYANMAR 159
+#define PROP_INDEX_MYMR 159
+#define PROP_INDEX_NUMBER 160
+#define PROP_INDEX_N 160
+#define PROP_INDEX_NABATAEAN 161
+#define PROP_INDEX_NBAT 161
+#define PROP_INDEX_NAND 162
+#define PROP_INDEX_NANDINAGARI 162
+#define PROP_INDEX_DECIMALNUMBER 163
+#define PROP_INDEX_ND 163
+#define PROP_INDEX_TALU 164
+#define PROP_INDEX_NEWTAILUE 164
+#define PROP_INDEX_NEWA 165
+#define PROP_INDEX_NKO 166
+#define PROP_INDEX_NKOO 166
+#define PROP_INDEX_LETTERNUMBER 167
+#define PROP_INDEX_NL 167
+#define PROP_INDEX_OTHERNUMBER 168
+#define PROP_INDEX_NO 168
+#define PROP_INDEX_NONCHARACTERCODEPOINT 169
+#define PROP_INDEX_NCHAR 169
+#define PROP_INDEX_NSHU 170
+#define PROP_INDEX_NUSHU 170
+#define PROP_INDEX_HMNP 171
+#define PROP_INDEX_NYIAKENGPUACHUEHMONG 171
+#define PROP_INDEX_OGHAM 172
+#define PROP_INDEX_OGAM 172
+#define PROP_INDEX_OLCK 173
+#define PROP_INDEX_OLCHIKI 173
+#define PROP_INDEX_HUNG 174
+#define PROP_INDEX_OLDHUNGARIAN 174
+#define PROP_INDEX_ITAL 175
+#define PROP_INDEX_OLDITALIC 175
+#define PROP_INDEX_NARB 176
+#define PROP_INDEX_OLDNORTHARABIAN 176
+#define PROP_INDEX_OLDPERMIC 177
+#define PROP_INDEX_PERM 177
+#define PROP_INDEX_OLDPERSIAN 178
+#define PROP_INDEX_XPEO 178
+#define PROP_INDEX_SOGO 179
+#define PROP_INDEX_OLDSOGDIAN 179
+#define PROP_INDEX_SARB 180
+#define PROP_INDEX_OLDSOUTHARABIAN 180
+#define PROP_INDEX_OLDTURKIC 181
+#define PROP_INDEX_ORKH 181
+#define PROP_INDEX_ORYA 182
+#define PROP_INDEX_ORIYA 182
+#define PROP_INDEX_OSAGE 183
+#define PROP_INDEX_OSGE 183
+#define PROP_INDEX_OSMANYA 184
+#define PROP_INDEX_OSMA 184
+#define PROP_INDEX_OTHERALPHABETIC 185
+#define PROP_INDEX_OALPHA 185
+#define PROP_INDEX_ODI 186
+#define PROP_INDEX_OTHERDEFAULTIGNORABLECODEPOINT 186
+#define PROP_INDEX_OGREXT 187
+#define PROP_INDEX_OTHERGRAPHEMEEXTEND 187
+#define PROP_INDEX_OIDC 188
+#define PROP_INDEX_OTHERIDCONTINUE 188
+#define PROP_INDEX_OTHERIDSTART 189
+#define PROP_INDEX_OIDS 189
+#define PROP_INDEX_OTHERLOWERCASE 190
+#define PROP_INDEX_OLOWER 190
+#define PROP_INDEX_OTHERMATH 191
+#define PROP_INDEX_OMATH 191
+#define PROP_INDEX_OTHERUPPERCASE 192
+#define PROP_INDEX_OUPPER 192
+#define PROP_INDEX_P 193
+#define PROP_INDEX_PUNCTUATION 193
+#define PROP_INDEX_PAHAWHHMONG 194
+#define PROP_INDEX_HMNG 194
+#define PROP_INDEX_PALMYRENE 195
+#define PROP_INDEX_PALM 195
+#define PROP_INDEX_PATTERNSYNTAX 196
+#define PROP_INDEX_PATSYN 196
+#define PROP_INDEX_PATWS 197
+#define PROP_INDEX_PATTERNWHITESPACE 197
+#define PROP_INDEX_PAUCINHAU 198
+#define PROP_INDEX_PAUC 198
+#define PROP_INDEX_CONNECTORPUNCTUATION 199
+#define PROP_INDEX_PC 199
+#define PROP_INDEX_DASHPUNCTUATION 200
+#define PROP_INDEX_PD 200
+#define PROP_INDEX_PE 201
+#define PROP_INDEX_CLOSEPUNCTUATION 201
+#define PROP_INDEX_FINALPUNCTUATION 202
+#define PROP_INDEX_PF 202
+#define PROP_INDEX_PHAG 203
+#define PROP_INDEX_PHAGSPA 203
+#define PROP_INDEX_PHOENICIAN 204
+#define PROP_INDEX_PHNX 204
+#define PROP_INDEX_PI 205
+#define PROP_INDEX_INITIALPUNCTUATION 205
+#define PROP_INDEX_OTHERPUNCTUATION 206
+#define PROP_INDEX_PO 206
+#define PROP_INDEX_PREPENDEDCONCATENATIONMARK 207
+#define PROP_INDEX_PCM 207
+#define PROP_INDEX_PS 208
+#define PROP_INDEX_OPENPUNCTUATION 208
+#define PROP_INDEX_PHLP 209
+#define PROP_INDEX_PSALTERPAHLAVI 209
+#define PROP_INDEX_QUOTATIONMARK 210
+#define PROP_INDEX_QMARK 210
+#define PROP_INDEX_RADICAL 211
+#define PROP_INDEX_RI 212
+#define PROP_INDEX_REGIONALINDICATOR 212
+#define PROP_INDEX_REJANG 213
+#define PROP_INDEX_RJNG 213
+#define PROP_INDEX_RUNIC 214
+#define PROP_INDEX_RUNR 214
+#define PROP_INDEX_S 215
+#define PROP_INDEX_SYMBOL 215
+#define PROP_INDEX_SAMARITAN 216
+#define PROP_INDEX_SAMR 216
+#define PROP_INDEX_SAURASHTRA 217
+#define PROP_INDEX_SAUR 217
+#define PROP_INDEX_SC 218
+#define PROP_INDEX_CURRENCYSYMBOL 218
+#define PROP_INDEX_SENTENCETERMINAL 219
+#define PROP_INDEX_STERM 219
+#define PROP_INDEX_SHARADA 220
+#define PROP_INDEX_SHRD 220
+#define PROP_INDEX_SHAVIAN 221
+#define PROP_INDEX_SHAW 221
+#define PROP_INDEX_SIDDHAM 222
+#define PROP_INDEX_SIDD 222
+#define PROP_INDEX_SIGNWRITING 223
+#define PROP_INDEX_SGNW 223
+#define PROP_INDEX_SINH 224
+#define PROP_INDEX_SINHALA 224
+#define PROP_INDEX_SK 225
+#define PROP_INDEX_MODIFIERSYMBOL 225
+#define PROP_INDEX_MATHSYMBOL 226
+#define PROP_INDEX_SM 226
+#define PROP_INDEX_SO 227
+#define PROP_INDEX_OTHERSYMBOL 227
+#define PROP_INDEX_SD 228
+#define PROP_INDEX_SOFTDOTTED 228
+#define PROP_INDEX_SOGD 229
+#define PROP_INDEX_SOGDIAN 229
+#define PROP_INDEX_SORASOMPENG 230
+#define PROP_INDEX_SORA 230
+#define PROP_INDEX_SOYO 231
+#define PROP_INDEX_SOYOMBO 231
+#define PROP_INDEX_SUND 232
+#define PROP_INDEX_SUNDANESE 232
+#define PROP_INDEX_SYLO 233
+#define PROP_INDEX_SYLOTINAGRI 233
+#define PROP_INDEX_SYRC 234
+#define PROP_INDEX_SYRIAC 234
+#define PROP_INDEX_TGLG 235
+#define PROP_INDEX_TAGALOG 235
+#define PROP_INDEX_TAGBANWA 236
+#define PROP_INDEX_TAGB 236
+#define PROP_INDEX_TAILE 237
+#define PROP_INDEX_TALE 237
+#define PROP_INDEX_TAITHAM 238
+#define PROP_INDEX_LANA 238
+#define PROP_INDEX_TAIVIET 239
+#define PROP_INDEX_TAVT 239
+#define PROP_INDEX_TAKRI 240
+#define PROP_INDEX_TAKR 240
+#define PROP_INDEX_TAMIL 241
+#define PROP_INDEX_TAML 241
+#define PROP_INDEX_TANG 242
+#define PROP_INDEX_TANGUT 242
+#define PROP_INDEX_TELUGU 243
+#define PROP_INDEX_TELU 243
+#define PROP_INDEX_TERM 244
+#define PROP_INDEX_TERMINALPUNCTUATION 244
+#define PROP_INDEX_THAA 245
+#define PROP_INDEX_THAANA 245
+#define PROP_INDEX_THAI 246
+#define PROP_INDEX_TIBT 247
+#define PROP_INDEX_TIBETAN 247
+#define PROP_INDEX_TFNG 248
+#define PROP_INDEX_TIFINAGH 248
+#define PROP_INDEX_TIRHUTA 249
+#define PROP_INDEX_TIRH 249
+#define PROP_INDEX_UGAR 250
+#define PROP_INDEX_UGARITIC 250
+#define PROP_INDEX_UNIFIEDIDEOGRAPH 251
+#define PROP_INDEX_UIDEO 251
+#define PROP_INDEX_ZZZZ 252
+#define PROP_INDEX_UNKNOWN 252
+#define PROP_INDEX_UPPERCASE 253
+#define PROP_INDEX_VAII 254
+#define PROP_INDEX_VAI 254
+#define PROP_INDEX_VARIATIONSELECTOR 255
+#define PROP_INDEX_VS 255
+#define PROP_INDEX_WCHO 256
+#define PROP_INDEX_WANCHO 256
+#define PROP_INDEX_WARANGCITI 257
+#define PROP_INDEX_WARA 257
+#define PROP_INDEX_WHITESPACE 258
+#define PROP_INDEX_WSPACE 258
+#define PROP_INDEX_XIDC 259
+#define PROP_INDEX_XIDCONTINUE 259
+#define PROP_INDEX_XIDS 260
+#define PROP_INDEX_XIDSTART 260
+#define PROP_INDEX_YI 261
+#define PROP_INDEX_YIII 261
+#define PROP_INDEX_SEPARATOR 262
+#define PROP_INDEX_Z 262
+#define PROP_INDEX_ZANABAZARSQUARE 263
+#define PROP_INDEX_ZANB 263
+#define PROP_INDEX_ZL 264
+#define PROP_INDEX_LINESEPARATOR 264
+#define PROP_INDEX_ZP 265
+#define PROP_INDEX_PARAGRAPHSEPARATOR 265
+#define PROP_INDEX_ZS 266
+#define PROP_INDEX_SPACESEPARATOR 266
+#define PROP_INDEX_INBASICLATIN 267
+#define PROP_INDEX_INLATIN1SUPPLEMENT 268
+#define PROP_INDEX_INLATINEXTENDEDA 269
+#define PROP_INDEX_INLATINEXTENDEDB 270
+#define PROP_INDEX_INIPAEXTENSIONS 271
+#define PROP_INDEX_INSPACINGMODIFIERLETTERS 272
+#define PROP_INDEX_INCOMBININGDIACRITICALMARKS 273
+#define PROP_INDEX_INGREEKANDCOPTIC 274
+#define PROP_INDEX_INCYRILLIC 275
+#define PROP_INDEX_INCYRILLICSUPPLEMENT 276
+#define PROP_INDEX_INARMENIAN 277
+#define PROP_INDEX_INHEBREW 278
+#define PROP_INDEX_INARABIC 279
+#define PROP_INDEX_INSYRIAC 280
+#define PROP_INDEX_INARABICSUPPLEMENT 281
+#define PROP_INDEX_INTHAANA 282
+#define PROP_INDEX_INNKO 283
+#define PROP_INDEX_INSAMARITAN 284
+#define PROP_INDEX_INMANDAIC 285
+#define PROP_INDEX_INSYRIACSUPPLEMENT 286
+#define PROP_INDEX_INARABICEXTENDEDA 287
+#define PROP_INDEX_INDEVANAGARI 288
+#define PROP_INDEX_INBENGALI 289
+#define PROP_INDEX_INGURMUKHI 290
+#define PROP_INDEX_INGUJARATI 291
+#define PROP_INDEX_INORIYA 292
+#define PROP_INDEX_INTAMIL 293
+#define PROP_INDEX_INTELUGU 294
+#define PROP_INDEX_INKANNADA 295
+#define PROP_INDEX_INMALAYALAM 296
+#define PROP_INDEX_INSINHALA 297
+#define PROP_INDEX_INTHAI 298
+#define PROP_INDEX_INLAO 299
+#define PROP_INDEX_INTIBETAN 300
+#define PROP_INDEX_INMYANMAR 301
+#define PROP_INDEX_INGEORGIAN 302
+#define PROP_INDEX_INHANGULJAMO 303
+#define PROP_INDEX_INETHIOPIC 304
+#define PROP_INDEX_INETHIOPICSUPPLEMENT 305
+#define PROP_INDEX_INCHEROKEE 306
+#define PROP_INDEX_INUNIFIEDCANADIANABORIGINALSYLLABICS 307
+#define PROP_INDEX_INOGHAM 308
+#define PROP_INDEX_INRUNIC 309
+#define PROP_INDEX_INTAGALOG 310
+#define PROP_INDEX_INHANUNOO 311
+#define PROP_INDEX_INBUHID 312
+#define PROP_INDEX_INTAGBANWA 313
+#define PROP_INDEX_INKHMER 314
+#define PROP_INDEX_INMONGOLIAN 315
+#define PROP_INDEX_INUNIFIEDCANADIANABORIGINALSYLLABICSEXTENDED 316
+#define PROP_INDEX_INLIMBU 317
+#define PROP_INDEX_INTAILE 318
+#define PROP_INDEX_INNEWTAILUE 319
+#define PROP_INDEX_INKHMERSYMBOLS 320
+#define PROP_INDEX_INBUGINESE 321
+#define PROP_INDEX_INTAITHAM 322
+#define PROP_INDEX_INCOMBININGDIACRITICALMARKSEXTENDED 323
+#define PROP_INDEX_INBALINESE 324
+#define PROP_INDEX_INSUNDANESE 325
+#define PROP_INDEX_INBATAK 326
+#define PROP_INDEX_INLEPCHA 327
+#define PROP_INDEX_INOLCHIKI 328
+#define PROP_INDEX_INCYRILLICEXTENDEDC 329
+#define PROP_INDEX_INGEORGIANEXTENDED 330
+#define PROP_INDEX_INSUNDANESESUPPLEMENT 331
+#define PROP_INDEX_INVEDICEXTENSIONS 332
+#define PROP_INDEX_INPHONETICEXTENSIONS 333
+#define PROP_INDEX_INPHONETICEXTENSIONSSUPPLEMENT 334
+#define PROP_INDEX_INCOMBININGDIACRITICALMARKSSUPPLEMENT 335
+#define PROP_INDEX_INLATINEXTENDEDADDITIONAL 336
+#define PROP_INDEX_INGREEKEXTENDED 337
+#define PROP_INDEX_INGENERALPUNCTUATION 338
+#define PROP_INDEX_INSUPERSCRIPTSANDSUBSCRIPTS 339
+#define PROP_INDEX_INCURRENCYSYMBOLS 340
+#define PROP_INDEX_INCOMBININGDIACRITICALMARKSFORSYMBOLS 341
+#define PROP_INDEX_INLETTERLIKESYMBOLS 342
+#define PROP_INDEX_INNUMBERFORMS 343
+#define PROP_INDEX_INARROWS 344
+#define PROP_INDEX_INMATHEMATICALOPERATORS 345
+#define PROP_INDEX_INMISCELLANEOUSTECHNICAL 346
+#define PROP_INDEX_INCONTROLPICTURES 347
+#define PROP_INDEX_INOPTICALCHARACTERRECOGNITION 348
+#define PROP_INDEX_INENCLOSEDALPHANUMERICS 349
+#define PROP_INDEX_INBOXDRAWING 350
+#define PROP_INDEX_INBLOCKELEMENTS 351
+#define PROP_INDEX_INGEOMETRICSHAPES 352
+#define PROP_INDEX_INMISCELLANEOUSSYMBOLS 353
+#define PROP_INDEX_INDINGBATS 354
+#define PROP_INDEX_INMISCELLANEOUSMATHEMATICALSYMBOLSA 355
+#define PROP_INDEX_INSUPPLEMENTALARROWSA 356
+#define PROP_INDEX_INBRAILLEPATTERNS 357
+#define PROP_INDEX_INSUPPLEMENTALARROWSB 358
+#define PROP_INDEX_INMISCELLANEOUSMATHEMATICALSYMBOLSB 359
+#define PROP_INDEX_INSUPPLEMENTALMATHEMATICALOPERATORS 360
+#define PROP_INDEX_INMISCELLANEOUSSYMBOLSANDARROWS 361
+#define PROP_INDEX_INGLAGOLITIC 362
+#define PROP_INDEX_INLATINEXTENDEDC 363
+#define PROP_INDEX_INCOPTIC 364
+#define PROP_INDEX_INGEORGIANSUPPLEMENT 365
+#define PROP_INDEX_INTIFINAGH 366
+#define PROP_INDEX_INETHIOPICEXTENDED 367
+#define PROP_INDEX_INCYRILLICEXTENDEDA 368
+#define PROP_INDEX_INSUPPLEMENTALPUNCTUATION 369
+#define PROP_INDEX_INCJKRADICALSSUPPLEMENT 370
+#define PROP_INDEX_INKANGXIRADICALS 371
+#define PROP_INDEX_INIDEOGRAPHICDESCRIPTIONCHARACTERS 372
+#define PROP_INDEX_INCJKSYMBOLSANDPUNCTUATION 373
+#define PROP_INDEX_INHIRAGANA 374
+#define PROP_INDEX_INKATAKANA 375
+#define PROP_INDEX_INBOPOMOFO 376
+#define PROP_INDEX_INHANGULCOMPATIBILITYJAMO 377
+#define PROP_INDEX_INKANBUN 378
+#define PROP_INDEX_INBOPOMOFOEXTENDED 379
+#define PROP_INDEX_INCJKSTROKES 380
+#define PROP_INDEX_INKATAKANAPHONETICEXTENSIONS 381
+#define PROP_INDEX_INENCLOSEDCJKLETTERSANDMONTHS 382
+#define PROP_INDEX_INCJKCOMPATIBILITY 383
+#define PROP_INDEX_INCJKUNIFIEDIDEOGRAPHSEXTENSIONA 384
+#define PROP_INDEX_INYIJINGHEXAGRAMSYMBOLS 385
+#define PROP_INDEX_INCJKUNIFIEDIDEOGRAPHS 386
+#define PROP_INDEX_INYISYLLABLES 387
+#define PROP_INDEX_INYIRADICALS 388
+#define PROP_INDEX_INLISU 389
+#define PROP_INDEX_INVAI 390
+#define PROP_INDEX_INCYRILLICEXTENDEDB 391
+#define PROP_INDEX_INBAMUM 392
+#define PROP_INDEX_INMODIFIERTONELETTERS 393
+#define PROP_INDEX_INLATINEXTENDEDD 394
+#define PROP_INDEX_INSYLOTINAGRI 395
+#define PROP_INDEX_INCOMMONINDICNUMBERFORMS 396
+#define PROP_INDEX_INPHAGSPA 397
+#define PROP_INDEX_INSAURASHTRA 398
+#define PROP_INDEX_INDEVANAGARIEXTENDED 399
+#define PROP_INDEX_INKAYAHLI 400
+#define PROP_INDEX_INREJANG 401
+#define PROP_INDEX_INHANGULJAMOEXTENDEDA 402
+#define PROP_INDEX_INJAVANESE 403
+#define PROP_INDEX_INMYANMAREXTENDEDB 404
+#define PROP_INDEX_INCHAM 405
+#define PROP_INDEX_INMYANMAREXTENDEDA 406
+#define PROP_INDEX_INTAIVIET 407
+#define PROP_INDEX_INMEETEIMAYEKEXTENSIONS 408
+#define PROP_INDEX_INETHIOPICEXTENDEDA 409
+#define PROP_INDEX_INLATINEXTENDEDE 410
+#define PROP_INDEX_INCHEROKEESUPPLEMENT 411
+#define PROP_INDEX_INMEETEIMAYEK 412
+#define PROP_INDEX_INHANGULSYLLABLES 413
+#define PROP_INDEX_INHANGULJAMOEXTENDEDB 414
+#define PROP_INDEX_INHIGHSURROGATES 415
+#define PROP_INDEX_INHIGHPRIVATEUSESURROGATES 416
+#define PROP_INDEX_INLOWSURROGATES 417
+#define PROP_INDEX_INPRIVATEUSEAREA 418
+#define PROP_INDEX_INCJKCOMPATIBILITYIDEOGRAPHS 419
+#define PROP_INDEX_INALPHABETICPRESENTATIONFORMS 420
+#define PROP_INDEX_INARABICPRESENTATIONFORMSA 421
+#define PROP_INDEX_INVARIATIONSELECTORS 422
+#define PROP_INDEX_INVERTICALFORMS 423
+#define PROP_INDEX_INCOMBININGHALFMARKS 424
+#define PROP_INDEX_INCJKCOMPATIBILITYFORMS 425
+#define PROP_INDEX_INSMALLFORMVARIANTS 426
+#define PROP_INDEX_INARABICPRESENTATIONFORMSB 427
+#define PROP_INDEX_INHALFWIDTHANDFULLWIDTHFORMS 428
+#define PROP_INDEX_INSPECIALS 429
+#define PROP_INDEX_INLINEARBSYLLABARY 430
+#define PROP_INDEX_INLINEARBIDEOGRAMS 431
+#define PROP_INDEX_INAEGEANNUMBERS 432
+#define PROP_INDEX_INANCIENTGREEKNUMBERS 433
+#define PROP_INDEX_INANCIENTSYMBOLS 434
+#define PROP_INDEX_INPHAISTOSDISC 435
+#define PROP_INDEX_INLYCIAN 436
+#define PROP_INDEX_INCARIAN 437
+#define PROP_INDEX_INCOPTICEPACTNUMBERS 438
+#define PROP_INDEX_INOLDITALIC 439
+#define PROP_INDEX_INGOTHIC 440
+#define PROP_INDEX_INOLDPERMIC 441
+#define PROP_INDEX_INUGARITIC 442
+#define PROP_INDEX_INOLDPERSIAN 443
+#define PROP_INDEX_INDESERET 444
+#define PROP_INDEX_INSHAVIAN 445
+#define PROP_INDEX_INOSMANYA 446
+#define PROP_INDEX_INOSAGE 447
+#define PROP_INDEX_INELBASAN 448
+#define PROP_INDEX_INCAUCASIANALBANIAN 449
+#define PROP_INDEX_INLINEARA 450
+#define PROP_INDEX_INCYPRIOTSYLLABARY 451
+#define PROP_INDEX_INIMPERIALARAMAIC 452
+#define PROP_INDEX_INPALMYRENE 453
+#define PROP_INDEX_INNABATAEAN 454
+#define PROP_INDEX_INHATRAN 455
+#define PROP_INDEX_INPHOENICIAN 456
+#define PROP_INDEX_INLYDIAN 457
+#define PROP_INDEX_INMEROITICHIEROGLYPHS 458
+#define PROP_INDEX_INMEROITICCURSIVE 459
+#define PROP_INDEX_INKHAROSHTHI 460
+#define PROP_INDEX_INOLDSOUTHARABIAN 461
+#define PROP_INDEX_INOLDNORTHARABIAN 462
+#define PROP_INDEX_INMANICHAEAN 463
+#define PROP_INDEX_INAVESTAN 464
+#define PROP_INDEX_ININSCRIPTIONALPARTHIAN 465
+#define PROP_INDEX_ININSCRIPTIONALPAHLAVI 466
+#define PROP_INDEX_INPSALTERPAHLAVI 467
+#define PROP_INDEX_INOLDTURKIC 468
+#define PROP_INDEX_INOLDHUNGARIAN 469
+#define PROP_INDEX_INHANIFIROHINGYA 470
+#define PROP_INDEX_INRUMINUMERALSYMBOLS 471
+#define PROP_INDEX_INOLDSOGDIAN 472
+#define PROP_INDEX_INSOGDIAN 473
+#define PROP_INDEX_INELYMAIC 474
+#define PROP_INDEX_INBRAHMI 475
+#define PROP_INDEX_INKAITHI 476
+#define PROP_INDEX_INSORASOMPENG 477
+#define PROP_INDEX_INCHAKMA 478
+#define PROP_INDEX_INMAHAJANI 479
+#define PROP_INDEX_INSHARADA 480
+#define PROP_INDEX_INSINHALAARCHAICNUMBERS 481
+#define PROP_INDEX_INKHOJKI 482
+#define PROP_INDEX_INMULTANI 483
+#define PROP_INDEX_INKHUDAWADI 484
+#define PROP_INDEX_INGRANTHA 485
+#define PROP_INDEX_INNEWA 486
+#define PROP_INDEX_INTIRHUTA 487
+#define PROP_INDEX_INSIDDHAM 488
+#define PROP_INDEX_INMODI 489
+#define PROP_INDEX_INMONGOLIANSUPPLEMENT 490
+#define PROP_INDEX_INTAKRI 491
+#define PROP_INDEX_INAHOM 492
+#define PROP_INDEX_INDOGRA 493
+#define PROP_INDEX_INWARANGCITI 494
+#define PROP_INDEX_INNANDINAGARI 495
+#define PROP_INDEX_INZANABAZARSQUARE 496
+#define PROP_INDEX_INSOYOMBO 497
+#define PROP_INDEX_INPAUCINHAU 498
+#define PROP_INDEX_INBHAIKSUKI 499
+#define PROP_INDEX_INMARCHEN 500
+#define PROP_INDEX_INMASARAMGONDI 501
+#define PROP_INDEX_INGUNJALAGONDI 502
+#define PROP_INDEX_INMAKASAR 503
+#define PROP_INDEX_INTAMILSUPPLEMENT 504
+#define PROP_INDEX_INCUNEIFORM 505
+#define PROP_INDEX_INCUNEIFORMNUMBERSANDPUNCTUATION 506
+#define PROP_INDEX_INEARLYDYNASTICCUNEIFORM 507
+#define PROP_INDEX_INEGYPTIANHIEROGLYPHS 508
+#define PROP_INDEX_INEGYPTIANHIEROGLYPHFORMATCONTROLS 509
+#define PROP_INDEX_INANATOLIANHIEROGLYPHS 510
+#define PROP_INDEX_INBAMUMSUPPLEMENT 511
+#define PROP_INDEX_INMRO 512
+#define PROP_INDEX_INBASSAVAH 513
+#define PROP_INDEX_INPAHAWHHMONG 514
+#define PROP_INDEX_INMEDEFAIDRIN 515
+#define PROP_INDEX_INMIAO 516
+#define PROP_INDEX_INIDEOGRAPHICSYMBOLSANDPUNCTUATION 517
+#define PROP_INDEX_INTANGUT 518
+#define PROP_INDEX_INTANGUTCOMPONENTS 519
+#define PROP_INDEX_INKANASUPPLEMENT 520
+#define PROP_INDEX_INKANAEXTENDEDA 521
+#define PROP_INDEX_INSMALLKANAEXTENSION 522
+#define PROP_INDEX_INNUSHU 523
+#define PROP_INDEX_INDUPLOYAN 524
+#define PROP_INDEX_INSHORTHANDFORMATCONTROLS 525
+#define PROP_INDEX_INBYZANTINEMUSICALSYMBOLS 526
+#define PROP_INDEX_INMUSICALSYMBOLS 527
+#define PROP_INDEX_INANCIENTGREEKMUSICALNOTATION 528
+#define PROP_INDEX_INMAYANNUMERALS 529
+#define PROP_INDEX_INTAIXUANJINGSYMBOLS 530
+#define PROP_INDEX_INCOUNTINGRODNUMERALS 531
+#define PROP_INDEX_INMATHEMATICALALPHANUMERICSYMBOLS 532
+#define PROP_INDEX_INSUTTONSIGNWRITING 533
+#define PROP_INDEX_INGLAGOLITICSUPPLEMENT 534
+#define PROP_INDEX_INNYIAKENGPUACHUEHMONG 535
+#define PROP_INDEX_INWANCHO 536
+#define PROP_INDEX_INMENDEKIKAKUI 537
+#define PROP_INDEX_INADLAM 538
+#define PROP_INDEX_ININDICSIYAQNUMBERS 539
+#define PROP_INDEX_INOTTOMANSIYAQNUMBERS 540
+#define PROP_INDEX_INARABICMATHEMATICALALPHABETICSYMBOLS 541
+#define PROP_INDEX_INMAHJONGTILES 542
+#define PROP_INDEX_INDOMINOTILES 543
+#define PROP_INDEX_INPLAYINGCARDS 544
+#define PROP_INDEX_INENCLOSEDALPHANUMERICSUPPLEMENT 545
+#define PROP_INDEX_INENCLOSEDIDEOGRAPHICSUPPLEMENT 546
+#define PROP_INDEX_INMISCELLANEOUSSYMBOLSANDPICTOGRAPHS 547
+#define PROP_INDEX_INEMOTICONS 548
+#define PROP_INDEX_INORNAMENTALDINGBATS 549
+#define PROP_INDEX_INTRANSPORTANDMAPSYMBOLS 550
+#define PROP_INDEX_INALCHEMICALSYMBOLS 551
+#define PROP_INDEX_INGEOMETRICSHAPESEXTENDED 552
+#define PROP_INDEX_INSUPPLEMENTALARROWSC 553
+#define PROP_INDEX_INSUPPLEMENTALSYMBOLSANDPICTOGRAPHS 554
+#define PROP_INDEX_INCHESSSYMBOLS 555
+#define PROP_INDEX_INSYMBOLSANDPICTOGRAPHSEXTENDEDA 556
+#define PROP_INDEX_INCJKUNIFIEDIDEOGRAPHSEXTENSIONB 557
+#define PROP_INDEX_INCJKUNIFIEDIDEOGRAPHSEXTENSIONC 558
+#define PROP_INDEX_INCJKUNIFIEDIDEOGRAPHSEXTENSIOND 559
+#define PROP_INDEX_INCJKUNIFIEDIDEOGRAPHSEXTENSIONE 560
+#define PROP_INDEX_INCJKUNIFIEDIDEOGRAPHSEXTENSIONF 561
+#define PROP_INDEX_INCJKCOMPATIBILITYIDEOGRAPHSSUPPLEMENT 562
+#define PROP_INDEX_INTAGS 563
+#define PROP_INDEX_INVARIATIONSELECTORSSUPPLEMENT 564
+#define PROP_INDEX_INSUPPLEMENTARYPRIVATEUSEAREAA 565
+#define PROP_INDEX_INSUPPLEMENTARYPRIVATEUSEAREAB 566
+#define PROP_INDEX_INNOBLOCK 567
index 75ae98a837349b352ff70cd75193d393897ad4ad..eddc1082ee4cfc7cb3a3f144bc974579704a7ed0 100644 (file)
@@ -1,5 +1,5 @@
 /* ANSI-C code produced by gperf version 3.1 */
-/* Command-line: /usr/bin/gperf -T -C -c -t -j1 -L ANSI-C --ignore-case --pic -Q unicode_prop_name_pool -N unicode_lookup_property_name --output-file gperf2.tmp unicode_property_data_posix.gperf  */
+/* Command-line: /usr/local/bin/gperf -T -C -c -t -j1 -L ANSI-C --ignore-case --pic -Q unicode_prop_name_pool -N unicode_lookup_property_name --output-file gperf2.tmp unicode_property_data_posix.gperf  */
 /* Computed positions: -k'1,3' */
 
 #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
@@ -42,7 +42,7 @@ CR_NEWLINE[] = { 1,
 
 /* PROPERTY: 'Alpha': POSIX [[:Alpha:]] */
 static const OnigCodePoint
-CR_Alpha[] = { 676,
+CR_Alpha[] = { 679,
 0x0041, 0x005a,
 0x0061, 0x007a,
 0x00aa, 0x00aa,
@@ -226,16 +226,10 @@ CR_Alpha[] = { 676,
 0x0e4d, 0x0e4d,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb9,
+0x0ea7, 0x0eb9,
 0x0ebb, 0x0ebd,
 0x0ec0, 0x0ec4,
 0x0ec6, 0x0ec6,
@@ -250,11 +244,8 @@ CR_Alpha[] = { 676,
 0x1000, 0x1036,
 0x1038, 0x1038,
 0x103b, 0x103f,
-0x1050, 0x1062,
-0x1065, 0x1068,
-0x106e, 0x1086,
-0x108e, 0x108e,
-0x109c, 0x109d,
+0x1050, 0x108f,
+0x109a, 0x109d,
 0x10a0, 0x10c5,
 0x10c7, 0x10c7,
 0x10cd, 0x10cd,
@@ -275,7 +266,6 @@ CR_Alpha[] = { 676,
 0x12d8, 0x1310,
 0x1312, 0x1315,
 0x1318, 0x135a,
-0x135f, 0x135f,
 0x1380, 0x138f,
 0x13a0, 0x13f5,
 0x13f8, 0x13fd,
@@ -316,7 +306,7 @@ CR_Alpha[] = { 676,
 0x1bac, 0x1baf,
 0x1bba, 0x1be5,
 0x1be7, 0x1bf1,
-0x1c00, 0x1c35,
+0x1c00, 0x1c36,
 0x1c4d, 0x1c4f,
 0x1c5a, 0x1c7d,
 0x1c80, 0x1c88,
@@ -325,6 +315,7 @@ CR_Alpha[] = { 676,
 0x1ce9, 0x1cec,
 0x1cee, 0x1cf3,
 0x1cf5, 0x1cf6,
+0x1cfa, 0x1cfa,
 0x1d00, 0x1dbf,
 0x1de7, 0x1df4,
 0x1e00, 0x1f15,
@@ -409,31 +400,28 @@ CR_Alpha[] = { 676,
 0xa67f, 0xa6ef,
 0xa717, 0xa71f,
 0xa722, 0xa788,
-0xa78b, 0xa7b9,
-0xa7f7, 0xa801,
-0xa803, 0xa805,
-0xa807, 0xa80a,
-0xa80c, 0xa827,
+0xa78b, 0xa7bf,
+0xa7c2, 0xa7c6,
+0xa7f7, 0xa805,
+0xa807, 0xa827,
 0xa840, 0xa873,
 0xa880, 0xa8c3,
 0xa8c5, 0xa8c5,
 0xa8f2, 0xa8f7,
 0xa8fb, 0xa8fb,
-0xa8fd, 0xa8fe,
+0xa8fd, 0xa8ff,
 0xa90a, 0xa92a,
 0xa930, 0xa952,
 0xa960, 0xa97c,
 0xa980, 0xa9b2,
 0xa9b4, 0xa9bf,
 0xa9cf, 0xa9cf,
-0xa9e0, 0xa9e4,
-0xa9e6, 0xa9ef,
+0xa9e0, 0xa9ef,
 0xa9fa, 0xa9fe,
 0xaa00, 0xaa36,
 0xaa40, 0xaa4d,
 0xaa60, 0xaa76,
-0xaa7a, 0xaa7a,
-0xaa7e, 0xaabe,
+0xaa7a, 0xaabe,
 0xaac0, 0xaac0,
 0xaac2, 0xaac2,
 0xaadb, 0xaadd,
@@ -445,7 +433,7 @@ CR_Alpha[] = { 676,
 0xab20, 0xab26,
 0xab28, 0xab2e,
 0xab30, 0xab5a,
-0xab5c, 0xab65,
+0xab5c, 0xab67,
 0xab70, 0xabea,
 0xac00, 0xd7a3,
 0xd7b0, 0xd7c6,
@@ -533,6 +521,7 @@ CR_Alpha[] = { 676,
 0x10f00, 0x10f1c,
 0x10f27, 0x10f27,
 0x10f30, 0x10f45,
+0x10fe0, 0x10ff6,
 0x11000, 0x11045,
 0x11082, 0x110b8,
 0x110d0, 0x110e8,
@@ -570,6 +559,7 @@ CR_Alpha[] = { 676,
 0x11400, 0x11441,
 0x11443, 0x11445,
 0x11447, 0x1144a,
+0x1145f, 0x1145f,
 0x11480, 0x114c1,
 0x114c4, 0x114c5,
 0x114c7, 0x114c7,
@@ -580,15 +570,20 @@ CR_Alpha[] = { 676,
 0x11640, 0x11640,
 0x11644, 0x11644,
 0x11680, 0x116b5,
+0x116b8, 0x116b8,
 0x11700, 0x1171a,
 0x1171d, 0x1172a,
 0x11800, 0x11838,
 0x118a0, 0x118df,
 0x118ff, 0x118ff,
+0x119a0, 0x119a7,
+0x119aa, 0x119d7,
+0x119da, 0x119df,
+0x119e1, 0x119e1,
+0x119e3, 0x119e4,
 0x11a00, 0x11a32,
 0x11a35, 0x11a3e,
-0x11a50, 0x11a83,
-0x11a86, 0x11a97,
+0x11a50, 0x11a97,
 0x11a9d, 0x11a9d,
 0x11ac0, 0x11af8,
 0x11c00, 0x11c08,
@@ -621,18 +616,21 @@ CR_Alpha[] = { 676,
 0x16800, 0x16a38,
 0x16a40, 0x16a5e,
 0x16ad0, 0x16aed,
-0x16b00, 0x16b36,
+0x16b00, 0x16b2f,
 0x16b40, 0x16b43,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16e40, 0x16e7f,
-0x16f00, 0x16f44,
-0x16f50, 0x16f7e,
-0x16f93, 0x16f9f,
+0x16f00, 0x16f4a,
+0x16f4f, 0x16f87,
+0x16f8f, 0x16f9f,
 0x16fe0, 0x16fe1,
-0x17000, 0x187f1,
+0x16fe3, 0x16fe3,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b000, 0x1b11e,
+0x1b150, 0x1b152,
+0x1b164, 0x1b167,
 0x1b170, 0x1b2fb,
 0x1bc00, 0x1bc6a,
 0x1bc70, 0x1bc7c,
@@ -674,9 +672,14 @@ CR_Alpha[] = { 676,
 0x1e01b, 0x1e021,
 0x1e023, 0x1e024,
 0x1e026, 0x1e02a,
+0x1e100, 0x1e12c,
+0x1e137, 0x1e13d,
+0x1e14e, 0x1e14e,
+0x1e2c0, 0x1e2eb,
 0x1e800, 0x1e8c4,
 0x1e900, 0x1e943,
 0x1e947, 0x1e947,
+0x1e94b, 0x1e94b,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
 0x1ee21, 0x1ee22,
@@ -743,7 +746,7 @@ CR_Cntrl[] = { 2,
 
 /* PROPERTY: 'Digit': POSIX [[:Digit:]] */
 static const OnigCodePoint
-CR_Digit[] = { 57,
+CR_Digit[] = { 59,
 0x0030, 0x0039,
 0x0660, 0x0669,
 0x06f0, 0x06f9,
@@ -800,12 +803,14 @@ CR_Digit[] = { 57,
 0x16a60, 0x16a69,
 0x16b50, 0x16b59,
 0x1d7ce, 0x1d7ff,
+0x1e140, 0x1e149,
+0x1e2f0, 0x1e2f9,
 0x1e950, 0x1e959,
 }; /* END of CR_Digit */
 
 /* PROPERTY: 'Graph': POSIX [[:Graph:]] */
 static const OnigCodePoint
-CR_Graph[] = { 663,
+CR_Graph[] = { 671,
 0x0021, 0x007e,
 0x00a1, 0x0377,
 0x037a, 0x037f,
@@ -916,7 +921,7 @@ CR_Graph[] = { 663,
 0x0c58, 0x0c5a,
 0x0c60, 0x0c63,
 0x0c66, 0x0c6f,
-0x0c78, 0x0c8c,
+0x0c77, 0x0c8c,
 0x0c8e, 0x0c90,
 0x0c92, 0x0ca8,
 0x0caa, 0x0cb3,
@@ -953,17 +958,10 @@ CR_Graph[] = { 663,
 0x0e3f, 0x0e5b,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb9,
-0x0ebb, 0x0ebd,
+0x0ea7, 0x0ebd,
 0x0ec0, 0x0ec4,
 0x0ec6, 0x0ec6,
 0x0ec8, 0x0ecd,
@@ -1040,7 +1038,7 @@ CR_Graph[] = { 663,
 0x1c4d, 0x1c88,
 0x1c90, 0x1cba,
 0x1cbd, 0x1cc7,
-0x1cd0, 0x1cf9,
+0x1cd0, 0x1cfa,
 0x1d00, 0x1df9,
 0x1dfb, 0x1f15,
 0x1f18, 0x1f1d,
@@ -1072,9 +1070,7 @@ CR_Graph[] = { 663,
 0x2440, 0x244a,
 0x2460, 0x2b73,
 0x2b76, 0x2b95,
-0x2b98, 0x2bc8,
-0x2bca, 0x2bfe,
-0x2c00, 0x2c2e,
+0x2b98, 0x2c2e,
 0x2c30, 0x2c5e,
 0x2c60, 0x2cf3,
 0x2cf9, 0x2d25,
@@ -1091,7 +1087,7 @@ CR_Graph[] = { 663,
 0x2dc8, 0x2dce,
 0x2dd0, 0x2dd6,
 0x2dd8, 0x2dde,
-0x2de0, 0x2e4e,
+0x2de0, 0x2e4f,
 0x2e80, 0x2e99,
 0x2e9b, 0x2ef3,
 0x2f00, 0x2fd5,
@@ -1104,14 +1100,14 @@ CR_Graph[] = { 663,
 0x3190, 0x31ba,
 0x31c0, 0x31e3,
 0x31f0, 0x321e,
-0x3220, 0x32fe,
-0x3300, 0x4db5,
+0x3220, 0x4db5,
 0x4dc0, 0x9fef,
 0xa000, 0xa48c,
 0xa490, 0xa4c6,
 0xa4d0, 0xa62b,
 0xa640, 0xa6f7,
-0xa700, 0xa7b9,
+0xa700, 0xa7bf,
+0xa7c2, 0xa7c6,
 0xa7f7, 0xa82b,
 0xa830, 0xa839,
 0xa840, 0xa877,
@@ -1132,7 +1128,7 @@ CR_Graph[] = { 663,
 0xab11, 0xab16,
 0xab20, 0xab26,
 0xab28, 0xab2e,
-0xab30, 0xab65,
+0xab30, 0xab67,
 0xab70, 0xabed,
 0xabf0, 0xabf9,
 0xac00, 0xd7a3,
@@ -1239,6 +1235,7 @@ CR_Graph[] = { 663,
 0x10e60, 0x10e7e,
 0x10f00, 0x10f27,
 0x10f30, 0x10f59,
+0x10fe0, 0x10ff6,
 0x11000, 0x1104d,
 0x11052, 0x1106f,
 0x1107f, 0x110c1,
@@ -1277,7 +1274,7 @@ CR_Graph[] = { 663,
 0x11370, 0x11374,
 0x11400, 0x11459,
 0x1145b, 0x1145b,
-0x1145d, 0x1145e,
+0x1145d, 0x1145f,
 0x11480, 0x114c7,
 0x114d0, 0x114d9,
 0x11580, 0x115b5,
@@ -1285,7 +1282,7 @@ CR_Graph[] = { 663,
 0x11600, 0x11644,
 0x11650, 0x11659,
 0x11660, 0x1166c,
-0x11680, 0x116b7,
+0x11680, 0x116b8,
 0x116c0, 0x116c9,
 0x11700, 0x1171a,
 0x1171d, 0x1172b,
@@ -1293,9 +1290,11 @@ CR_Graph[] = { 663,
 0x11800, 0x1183b,
 0x118a0, 0x118f2,
 0x118ff, 0x118ff,
+0x119a0, 0x119a7,
+0x119aa, 0x119d7,
+0x119da, 0x119e4,
 0x11a00, 0x11a47,
-0x11a50, 0x11a83,
-0x11a86, 0x11aa2,
+0x11a50, 0x11aa2,
 0x11ac0, 0x11af8,
 0x11c00, 0x11c08,
 0x11c0a, 0x11c36,
@@ -1318,11 +1317,13 @@ CR_Graph[] = { 663,
 0x11d93, 0x11d98,
 0x11da0, 0x11da9,
 0x11ee0, 0x11ef8,
-0x12000, 0x12399,
+0x11fc0, 0x11ff1,
+0x11fff, 0x12399,
 0x12400, 0x1246e,
 0x12470, 0x12474,
 0x12480, 0x12543,
 0x13000, 0x1342e,
+0x13430, 0x13438,
 0x14400, 0x14646,
 0x16800, 0x16a38,
 0x16a40, 0x16a5e,
@@ -1336,13 +1337,15 @@ CR_Graph[] = { 663,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16e40, 0x16e9a,
-0x16f00, 0x16f44,
-0x16f50, 0x16f7e,
+0x16f00, 0x16f4a,
+0x16f4f, 0x16f87,
 0x16f8f, 0x16f9f,
-0x16fe0, 0x16fe1,
-0x17000, 0x187f1,
+0x16fe0, 0x16fe3,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b000, 0x1b11e,
+0x1b150, 0x1b152,
+0x1b164, 0x1b167,
 0x1b170, 0x1b2fb,
 0x1bc00, 0x1bc6a,
 0x1bc70, 0x1bc7c,
@@ -1384,12 +1387,19 @@ CR_Graph[] = { 663,
 0x1e01b, 0x1e021,
 0x1e023, 0x1e024,
 0x1e026, 0x1e02a,
+0x1e100, 0x1e12c,
+0x1e130, 0x1e13d,
+0x1e140, 0x1e149,
+0x1e14e, 0x1e14f,
+0x1e2c0, 0x1e2f9,
+0x1e2ff, 0x1e2ff,
 0x1e800, 0x1e8c4,
 0x1e8c7, 0x1e8d6,
-0x1e900, 0x1e94a,
+0x1e900, 0x1e94b,
 0x1e950, 0x1e959,
 0x1e95e, 0x1e95f,
 0x1ec71, 0x1ecb4,
+0x1ed01, 0x1ed3d,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
 0x1ee21, 0x1ee22,
@@ -1431,33 +1441,36 @@ CR_Graph[] = { 663,
 0x1f0c1, 0x1f0cf,
 0x1f0d1, 0x1f0f5,
 0x1f100, 0x1f10c,
-0x1f110, 0x1f16b,
+0x1f110, 0x1f16c,
 0x1f170, 0x1f1ac,
 0x1f1e6, 0x1f202,
 0x1f210, 0x1f23b,
 0x1f240, 0x1f248,
 0x1f250, 0x1f251,
 0x1f260, 0x1f265,
-0x1f300, 0x1f6d4,
+0x1f300, 0x1f6d5,
 0x1f6e0, 0x1f6ec,
-0x1f6f0, 0x1f6f9,
+0x1f6f0, 0x1f6fa,
 0x1f700, 0x1f773,
 0x1f780, 0x1f7d8,
+0x1f7e0, 0x1f7eb,
 0x1f800, 0x1f80b,
 0x1f810, 0x1f847,
 0x1f850, 0x1f859,
 0x1f860, 0x1f887,
 0x1f890, 0x1f8ad,
 0x1f900, 0x1f90b,
-0x1f910, 0x1f93e,
-0x1f940, 0x1f970,
+0x1f90d, 0x1f971,
 0x1f973, 0x1f976,
-0x1f97a, 0x1f97a,
-0x1f97c, 0x1f9a2,
-0x1f9b0, 0x1f9b9,
-0x1f9c0, 0x1f9c2,
-0x1f9d0, 0x1f9ff,
+0x1f97a, 0x1f9a2,
+0x1f9a5, 0x1f9aa,
+0x1f9ae, 0x1f9ca,
+0x1f9cd, 0x1fa53,
 0x1fa60, 0x1fa6d,
+0x1fa70, 0x1fa73,
+0x1fa78, 0x1fa7a,
+0x1fa80, 0x1fa82,
+0x1fa90, 0x1fa95,
 0x20000, 0x2a6d6,
 0x2a700, 0x2b734,
 0x2b740, 0x2b81d,
@@ -1473,7 +1486,7 @@ CR_Graph[] = { 663,
 
 /* PROPERTY: 'Lower': POSIX [[:Lower:]] */
 static const OnigCodePoint
-CR_Lower[] = { 645,
+CR_Lower[] = { 649,
 0x0061, 0x007a,
 0x00aa, 0x00aa,
 0x00b5, 0x00b5,
@@ -2078,9 +2091,13 @@ CR_Lower[] = { 645,
 0xa7b5, 0xa7b5,
 0xa7b7, 0xa7b7,
 0xa7b9, 0xa7b9,
+0xa7bb, 0xa7bb,
+0xa7bd, 0xa7bd,
+0xa7bf, 0xa7bf,
+0xa7c3, 0xa7c3,
 0xa7f8, 0xa7fa,
 0xab30, 0xab5a,
-0xab5c, 0xab65,
+0xab5c, 0xab67,
 0xab70, 0xabbf,
 0xfb00, 0xfb06,
 0xfb13, 0xfb17,
@@ -2123,7 +2140,7 @@ CR_Lower[] = { 645,
 
 /* PROPERTY: 'Print': POSIX [[:Print:]] */
 static const OnigCodePoint
-CR_Print[] = { 660,
+CR_Print[] = { 668,
 0x0020, 0x007e,
 0x00a0, 0x0377,
 0x037a, 0x037f,
@@ -2234,7 +2251,7 @@ CR_Print[] = { 660,
 0x0c58, 0x0c5a,
 0x0c60, 0x0c63,
 0x0c66, 0x0c6f,
-0x0c78, 0x0c8c,
+0x0c77, 0x0c8c,
 0x0c8e, 0x0c90,
 0x0c92, 0x0ca8,
 0x0caa, 0x0cb3,
@@ -2271,17 +2288,10 @@ CR_Print[] = { 660,
 0x0e3f, 0x0e5b,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb9,
-0x0ebb, 0x0ebd,
+0x0ea7, 0x0ebd,
 0x0ec0, 0x0ec4,
 0x0ec6, 0x0ec6,
 0x0ec8, 0x0ecd,
@@ -2357,7 +2367,7 @@ CR_Print[] = { 660,
 0x1c4d, 0x1c88,
 0x1c90, 0x1cba,
 0x1cbd, 0x1cc7,
-0x1cd0, 0x1cf9,
+0x1cd0, 0x1cfa,
 0x1d00, 0x1df9,
 0x1dfb, 0x1f15,
 0x1f18, 0x1f1d,
@@ -2387,9 +2397,7 @@ CR_Print[] = { 660,
 0x2440, 0x244a,
 0x2460, 0x2b73,
 0x2b76, 0x2b95,
-0x2b98, 0x2bc8,
-0x2bca, 0x2bfe,
-0x2c00, 0x2c2e,
+0x2b98, 0x2c2e,
 0x2c30, 0x2c5e,
 0x2c60, 0x2cf3,
 0x2cf9, 0x2d25,
@@ -2406,7 +2414,7 @@ CR_Print[] = { 660,
 0x2dc8, 0x2dce,
 0x2dd0, 0x2dd6,
 0x2dd8, 0x2dde,
-0x2de0, 0x2e4e,
+0x2de0, 0x2e4f,
 0x2e80, 0x2e99,
 0x2e9b, 0x2ef3,
 0x2f00, 0x2fd5,
@@ -2419,14 +2427,14 @@ CR_Print[] = { 660,
 0x3190, 0x31ba,
 0x31c0, 0x31e3,
 0x31f0, 0x321e,
-0x3220, 0x32fe,
-0x3300, 0x4db5,
+0x3220, 0x4db5,
 0x4dc0, 0x9fef,
 0xa000, 0xa48c,
 0xa490, 0xa4c6,
 0xa4d0, 0xa62b,
 0xa640, 0xa6f7,
-0xa700, 0xa7b9,
+0xa700, 0xa7bf,
+0xa7c2, 0xa7c6,
 0xa7f7, 0xa82b,
 0xa830, 0xa839,
 0xa840, 0xa877,
@@ -2447,7 +2455,7 @@ CR_Print[] = { 660,
 0xab11, 0xab16,
 0xab20, 0xab26,
 0xab28, 0xab2e,
-0xab30, 0xab65,
+0xab30, 0xab67,
 0xab70, 0xabed,
 0xabf0, 0xabf9,
 0xac00, 0xd7a3,
@@ -2554,6 +2562,7 @@ CR_Print[] = { 660,
 0x10e60, 0x10e7e,
 0x10f00, 0x10f27,
 0x10f30, 0x10f59,
+0x10fe0, 0x10ff6,
 0x11000, 0x1104d,
 0x11052, 0x1106f,
 0x1107f, 0x110c1,
@@ -2592,7 +2601,7 @@ CR_Print[] = { 660,
 0x11370, 0x11374,
 0x11400, 0x11459,
 0x1145b, 0x1145b,
-0x1145d, 0x1145e,
+0x1145d, 0x1145f,
 0x11480, 0x114c7,
 0x114d0, 0x114d9,
 0x11580, 0x115b5,
@@ -2600,7 +2609,7 @@ CR_Print[] = { 660,
 0x11600, 0x11644,
 0x11650, 0x11659,
 0x11660, 0x1166c,
-0x11680, 0x116b7,
+0x11680, 0x116b8,
 0x116c0, 0x116c9,
 0x11700, 0x1171a,
 0x1171d, 0x1172b,
@@ -2608,9 +2617,11 @@ CR_Print[] = { 660,
 0x11800, 0x1183b,
 0x118a0, 0x118f2,
 0x118ff, 0x118ff,
+0x119a0, 0x119a7,
+0x119aa, 0x119d7,
+0x119da, 0x119e4,
 0x11a00, 0x11a47,
-0x11a50, 0x11a83,
-0x11a86, 0x11aa2,
+0x11a50, 0x11aa2,
 0x11ac0, 0x11af8,
 0x11c00, 0x11c08,
 0x11c0a, 0x11c36,
@@ -2633,11 +2644,13 @@ CR_Print[] = { 660,
 0x11d93, 0x11d98,
 0x11da0, 0x11da9,
 0x11ee0, 0x11ef8,
-0x12000, 0x12399,
+0x11fc0, 0x11ff1,
+0x11fff, 0x12399,
 0x12400, 0x1246e,
 0x12470, 0x12474,
 0x12480, 0x12543,
 0x13000, 0x1342e,
+0x13430, 0x13438,
 0x14400, 0x14646,
 0x16800, 0x16a38,
 0x16a40, 0x16a5e,
@@ -2651,13 +2664,15 @@ CR_Print[] = { 660,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16e40, 0x16e9a,
-0x16f00, 0x16f44,
-0x16f50, 0x16f7e,
+0x16f00, 0x16f4a,
+0x16f4f, 0x16f87,
 0x16f8f, 0x16f9f,
-0x16fe0, 0x16fe1,
-0x17000, 0x187f1,
+0x16fe0, 0x16fe3,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b000, 0x1b11e,
+0x1b150, 0x1b152,
+0x1b164, 0x1b167,
 0x1b170, 0x1b2fb,
 0x1bc00, 0x1bc6a,
 0x1bc70, 0x1bc7c,
@@ -2699,12 +2714,19 @@ CR_Print[] = { 660,
 0x1e01b, 0x1e021,
 0x1e023, 0x1e024,
 0x1e026, 0x1e02a,
+0x1e100, 0x1e12c,
+0x1e130, 0x1e13d,
+0x1e140, 0x1e149,
+0x1e14e, 0x1e14f,
+0x1e2c0, 0x1e2f9,
+0x1e2ff, 0x1e2ff,
 0x1e800, 0x1e8c4,
 0x1e8c7, 0x1e8d6,
-0x1e900, 0x1e94a,
+0x1e900, 0x1e94b,
 0x1e950, 0x1e959,
 0x1e95e, 0x1e95f,
 0x1ec71, 0x1ecb4,
+0x1ed01, 0x1ed3d,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
 0x1ee21, 0x1ee22,
@@ -2746,33 +2768,36 @@ CR_Print[] = { 660,
 0x1f0c1, 0x1f0cf,
 0x1f0d1, 0x1f0f5,
 0x1f100, 0x1f10c,
-0x1f110, 0x1f16b,
+0x1f110, 0x1f16c,
 0x1f170, 0x1f1ac,
 0x1f1e6, 0x1f202,
 0x1f210, 0x1f23b,
 0x1f240, 0x1f248,
 0x1f250, 0x1f251,
 0x1f260, 0x1f265,
-0x1f300, 0x1f6d4,
+0x1f300, 0x1f6d5,
 0x1f6e0, 0x1f6ec,
-0x1f6f0, 0x1f6f9,
+0x1f6f0, 0x1f6fa,
 0x1f700, 0x1f773,
 0x1f780, 0x1f7d8,
+0x1f7e0, 0x1f7eb,
 0x1f800, 0x1f80b,
 0x1f810, 0x1f847,
 0x1f850, 0x1f859,
 0x1f860, 0x1f887,
 0x1f890, 0x1f8ad,
 0x1f900, 0x1f90b,
-0x1f910, 0x1f93e,
-0x1f940, 0x1f970,
+0x1f90d, 0x1f971,
 0x1f973, 0x1f976,
-0x1f97a, 0x1f97a,
-0x1f97c, 0x1f9a2,
-0x1f9b0, 0x1f9b9,
-0x1f9c0, 0x1f9c2,
-0x1f9d0, 0x1f9ff,
+0x1f97a, 0x1f9a2,
+0x1f9a5, 0x1f9aa,
+0x1f9ae, 0x1f9ca,
+0x1f9cd, 0x1fa53,
 0x1fa60, 0x1fa6d,
+0x1fa70, 0x1fa73,
+0x1fa78, 0x1fa7a,
+0x1fa80, 0x1fa82,
+0x1fa90, 0x1fa95,
 0x20000, 0x2a6d6,
 0x2a700, 0x2b734,
 0x2b740, 0x2b81d,
@@ -2788,7 +2813,7 @@ CR_Print[] = { 660,
 
 /* PROPERTY: 'Punct': POSIX [[:Punct:]] */
 static const OnigCodePoint
-CR_Punct[] = { 178,
+CR_Punct[] = { 182,
 0x0021, 0x0023,
 0x0025, 0x002a,
 0x002c, 0x002f,
@@ -2828,6 +2853,7 @@ CR_Punct[] = { 178,
 0x09fd, 0x09fd,
 0x0a76, 0x0a76,
 0x0af0, 0x0af0,
+0x0c77, 0x0c77,
 0x0c84, 0x0c84,
 0x0df4, 0x0df4,
 0x0e4f, 0x0e4f,
@@ -2842,7 +2868,7 @@ CR_Punct[] = { 178,
 0x10fb, 0x10fb,
 0x1360, 0x1368,
 0x1400, 0x1400,
-0x166d, 0x166e,
+0x166e, 0x166e,
 0x169b, 0x169c,
 0x16eb, 0x16ed,
 0x1735, 0x1736,
@@ -2877,7 +2903,7 @@ CR_Punct[] = { 178,
 0x2cfe, 0x2cff,
 0x2d70, 0x2d70,
 0x2e00, 0x2e2e,
-0x2e30, 0x2e4e,
+0x2e30, 0x2e4f,
 0x3001, 0x3003,
 0x3008, 0x3011,
 0x3014, 0x301f,
@@ -2952,18 +2978,21 @@ CR_Punct[] = { 178,
 0x11660, 0x1166c,
 0x1173c, 0x1173e,
 0x1183b, 0x1183b,
+0x119e2, 0x119e2,
 0x11a3f, 0x11a46,
 0x11a9a, 0x11a9c,
 0x11a9e, 0x11aa2,
 0x11c41, 0x11c45,
 0x11c70, 0x11c71,
 0x11ef7, 0x11ef8,
+0x11fff, 0x11fff,
 0x12470, 0x12474,
 0x16a6e, 0x16a6f,
 0x16af5, 0x16af5,
 0x16b37, 0x16b3b,
 0x16b44, 0x16b44,
 0x16e97, 0x16e9a,
+0x16fe2, 0x16fe2,
 0x1bc9f, 0x1bc9f,
 0x1da87, 0x1da8b,
 0x1e95e, 0x1e95f,
@@ -2986,7 +3015,7 @@ CR_Space[] = { 10,
 
 /* PROPERTY: 'Upper': POSIX [[:Upper:]] */
 static const OnigCodePoint
-CR_Upper[] = { 636,
+CR_Upper[] = { 641,
 0x0041, 0x005a,
 0x00c0, 0x00d6,
 0x00d8, 0x00de,
@@ -3582,6 +3611,11 @@ CR_Upper[] = { 636,
 0xa7b0, 0xa7b4,
 0xa7b6, 0xa7b6,
 0xa7b8, 0xa7b8,
+0xa7ba, 0xa7ba,
+0xa7bc, 0xa7bc,
+0xa7be, 0xa7be,
+0xa7c2, 0xa7c2,
+0xa7c4, 0xa7c6,
 0xff21, 0xff3a,
 0x10400, 0x10427,
 0x104b0, 0x104d3,
@@ -3635,7 +3669,7 @@ CR_XDigit[] = { 3,
 
 /* PROPERTY: 'Word': POSIX [[:Word:]] */
 static const OnigCodePoint
-CR_Word[] = { 710,
+CR_Word[] = { 716,
 0x0030, 0x0039,
 0x0041, 0x005a,
 0x005f, 0x005f,
@@ -3820,17 +3854,10 @@ CR_Word[] = { 710,
 0x0e50, 0x0e59,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb9,
-0x0ebb, 0x0ebd,
+0x0ea7, 0x0ebd,
 0x0ec0, 0x0ec4,
 0x0ec6, 0x0ec6,
 0x0ec8, 0x0ecd,
@@ -3921,7 +3948,7 @@ CR_Word[] = { 710,
 0x1c90, 0x1cba,
 0x1cbd, 0x1cbf,
 0x1cd0, 0x1cd2,
-0x1cd4, 0x1cf9,
+0x1cd4, 0x1cfa,
 0x1d00, 0x1df9,
 0x1dfb, 0x1f15,
 0x1f18, 0x1f1d,
@@ -4007,7 +4034,8 @@ CR_Word[] = { 710,
 0xa67f, 0xa6f1,
 0xa717, 0xa71f,
 0xa722, 0xa788,
-0xa78b, 0xa7b9,
+0xa78b, 0xa7bf,
+0xa7c2, 0xa7c6,
 0xa7f7, 0xa827,
 0xa840, 0xa873,
 0xa880, 0xa8c5,
@@ -4034,7 +4062,7 @@ CR_Word[] = { 710,
 0xab20, 0xab26,
 0xab28, 0xab2e,
 0xab30, 0xab5a,
-0xab5c, 0xab65,
+0xab5c, 0xab67,
 0xab70, 0xabea,
 0xabec, 0xabed,
 0xabf0, 0xabf9,
@@ -4136,6 +4164,7 @@ CR_Word[] = { 710,
 0x10f00, 0x10f1c,
 0x10f27, 0x10f27,
 0x10f30, 0x10f50,
+0x10fe0, 0x10ff6,
 0x11000, 0x11046,
 0x11066, 0x1106f,
 0x1107f, 0x110ba,
@@ -4177,7 +4206,7 @@ CR_Word[] = { 710,
 0x11370, 0x11374,
 0x11400, 0x1144a,
 0x11450, 0x11459,
-0x1145e, 0x1145e,
+0x1145e, 0x1145f,
 0x11480, 0x114c5,
 0x114c7, 0x114c7,
 0x114d0, 0x114d9,
@@ -4187,7 +4216,7 @@ CR_Word[] = { 710,
 0x11600, 0x11640,
 0x11644, 0x11644,
 0x11650, 0x11659,
-0x11680, 0x116b7,
+0x11680, 0x116b8,
 0x116c0, 0x116c9,
 0x11700, 0x1171a,
 0x1171d, 0x1172b,
@@ -4195,10 +4224,13 @@ CR_Word[] = { 710,
 0x11800, 0x1183a,
 0x118a0, 0x118e9,
 0x118ff, 0x118ff,
+0x119a0, 0x119a7,
+0x119aa, 0x119d7,
+0x119da, 0x119e1,
+0x119e3, 0x119e4,
 0x11a00, 0x11a3e,
 0x11a47, 0x11a47,
-0x11a50, 0x11a83,
-0x11a86, 0x11a99,
+0x11a50, 0x11a99,
 0x11a9d, 0x11a9d,
 0x11ac0, 0x11af8,
 0x11c00, 0x11c08,
@@ -4238,13 +4270,16 @@ CR_Word[] = { 710,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16e40, 0x16e7f,
-0x16f00, 0x16f44,
-0x16f50, 0x16f7e,
+0x16f00, 0x16f4a,
+0x16f4f, 0x16f87,
 0x16f8f, 0x16f9f,
 0x16fe0, 0x16fe1,
-0x17000, 0x187f1,
+0x16fe3, 0x16fe3,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b000, 0x1b11e,
+0x1b150, 0x1b152,
+0x1b164, 0x1b167,
 0x1b170, 0x1b2fb,
 0x1bc00, 0x1bc6a,
 0x1bc70, 0x1bc7c,
@@ -4299,9 +4334,14 @@ CR_Word[] = { 710,
 0x1e01b, 0x1e021,
 0x1e023, 0x1e024,
 0x1e026, 0x1e02a,
+0x1e100, 0x1e12c,
+0x1e130, 0x1e13d,
+0x1e140, 0x1e149,
+0x1e14e, 0x1e14e,
+0x1e2c0, 0x1e2f9,
 0x1e800, 0x1e8c4,
 0x1e8d0, 0x1e8d6,
-0x1e900, 0x1e94a,
+0x1e900, 0x1e94b,
 0x1e950, 0x1e959,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
@@ -4350,7 +4390,7 @@ CR_Word[] = { 710,
 
 /* PROPERTY: 'Alnum': POSIX [[:Alnum:]] */
 static const OnigCodePoint
-CR_Alnum[] = { 713,
+CR_Alnum[] = { 715,
 0x0030, 0x0039,
 0x0041, 0x005a,
 0x0061, 0x007a,
@@ -4543,16 +4583,10 @@ CR_Alnum[] = { 713,
 0x0e50, 0x0e59,
 0x0e81, 0x0e82,
 0x0e84, 0x0e84,
-0x0e87, 0x0e88,
-0x0e8a, 0x0e8a,
-0x0e8d, 0x0e8d,
-0x0e94, 0x0e97,
-0x0e99, 0x0e9f,
-0x0ea1, 0x0ea3,
+0x0e86, 0x0e8a,
+0x0e8c, 0x0ea3,
 0x0ea5, 0x0ea5,
-0x0ea7, 0x0ea7,
-0x0eaa, 0x0eab,
-0x0ead, 0x0eb9,
+0x0ea7, 0x0eb9,
 0x0ebb, 0x0ebd,
 0x0ec0, 0x0ec4,
 0x0ec6, 0x0ec6,
@@ -4569,12 +4603,7 @@ CR_Alnum[] = { 713,
 0x1000, 0x1036,
 0x1038, 0x1038,
 0x103b, 0x1049,
-0x1050, 0x1062,
-0x1065, 0x1068,
-0x106e, 0x1086,
-0x108e, 0x108e,
-0x1090, 0x1099,
-0x109c, 0x109d,
+0x1050, 0x109d,
 0x10a0, 0x10c5,
 0x10c7, 0x10c7,
 0x10cd, 0x10cd,
@@ -4595,7 +4624,6 @@ CR_Alnum[] = { 713,
 0x12d8, 0x1310,
 0x1312, 0x1315,
 0x1318, 0x135a,
-0x135f, 0x135f,
 0x1380, 0x138f,
 0x13a0, 0x13f5,
 0x13f8, 0x13fd,
@@ -4641,7 +4669,7 @@ CR_Alnum[] = { 713,
 0x1b80, 0x1ba9,
 0x1bac, 0x1be5,
 0x1be7, 0x1bf1,
-0x1c00, 0x1c35,
+0x1c00, 0x1c36,
 0x1c40, 0x1c49,
 0x1c4d, 0x1c7d,
 0x1c80, 0x1c88,
@@ -4650,6 +4678,7 @@ CR_Alnum[] = { 713,
 0x1ce9, 0x1cec,
 0x1cee, 0x1cf3,
 0x1cf5, 0x1cf6,
+0x1cfa, 0x1cfa,
 0x1d00, 0x1dbf,
 0x1de7, 0x1df4,
 0x1e00, 0x1f15,
@@ -4733,32 +4762,28 @@ CR_Alnum[] = { 713,
 0xa67f, 0xa6ef,
 0xa717, 0xa71f,
 0xa722, 0xa788,
-0xa78b, 0xa7b9,
-0xa7f7, 0xa801,
-0xa803, 0xa805,
-0xa807, 0xa80a,
-0xa80c, 0xa827,
+0xa78b, 0xa7bf,
+0xa7c2, 0xa7c6,
+0xa7f7, 0xa805,
+0xa807, 0xa827,
 0xa840, 0xa873,
 0xa880, 0xa8c3,
 0xa8c5, 0xa8c5,
 0xa8d0, 0xa8d9,
 0xa8f2, 0xa8f7,
 0xa8fb, 0xa8fb,
-0xa8fd, 0xa8fe,
-0xa900, 0xa92a,
+0xa8fd, 0xa92a,
 0xa930, 0xa952,
 0xa960, 0xa97c,
 0xa980, 0xa9b2,
 0xa9b4, 0xa9bf,
 0xa9cf, 0xa9d9,
-0xa9e0, 0xa9e4,
-0xa9e6, 0xa9fe,
+0xa9e0, 0xa9fe,
 0xaa00, 0xaa36,
 0xaa40, 0xaa4d,
 0xaa50, 0xaa59,
 0xaa60, 0xaa76,
-0xaa7a, 0xaa7a,
-0xaa7e, 0xaabe,
+0xaa7a, 0xaabe,
 0xaac0, 0xaac0,
 0xaac2, 0xaac2,
 0xaadb, 0xaadd,
@@ -4770,7 +4795,7 @@ CR_Alnum[] = { 713,
 0xab20, 0xab26,
 0xab28, 0xab2e,
 0xab30, 0xab5a,
-0xab5c, 0xab65,
+0xab5c, 0xab67,
 0xab70, 0xabea,
 0xabf0, 0xabf9,
 0xac00, 0xd7a3,
@@ -4862,6 +4887,7 @@ CR_Alnum[] = { 713,
 0x10f00, 0x10f1c,
 0x10f27, 0x10f27,
 0x10f30, 0x10f45,
+0x10fe0, 0x10ff6,
 0x11000, 0x11045,
 0x11066, 0x1106f,
 0x11082, 0x110b8,
@@ -4904,6 +4930,7 @@ CR_Alnum[] = { 713,
 0x11443, 0x11445,
 0x11447, 0x1144a,
 0x11450, 0x11459,
+0x1145f, 0x1145f,
 0x11480, 0x114c1,
 0x114c4, 0x114c5,
 0x114c7, 0x114c7,
@@ -4916,6 +4943,7 @@ CR_Alnum[] = { 713,
 0x11644, 0x11644,
 0x11650, 0x11659,
 0x11680, 0x116b5,
+0x116b8, 0x116b8,
 0x116c0, 0x116c9,
 0x11700, 0x1171a,
 0x1171d, 0x1172a,
@@ -4923,10 +4951,14 @@ CR_Alnum[] = { 713,
 0x11800, 0x11838,
 0x118a0, 0x118e9,
 0x118ff, 0x118ff,
+0x119a0, 0x119a7,
+0x119aa, 0x119d7,
+0x119da, 0x119df,
+0x119e1, 0x119e1,
+0x119e3, 0x119e4,
 0x11a00, 0x11a32,
 0x11a35, 0x11a3e,
-0x11a50, 0x11a83,
-0x11a86, 0x11a97,
+0x11a50, 0x11a97,
 0x11a9d, 0x11a9d,
 0x11ac0, 0x11af8,
 0x11c00, 0x11c08,
@@ -4963,19 +4995,22 @@ CR_Alnum[] = { 713,
 0x16a40, 0x16a5e,
 0x16a60, 0x16a69,
 0x16ad0, 0x16aed,
-0x16b00, 0x16b36,
+0x16b00, 0x16b2f,
 0x16b40, 0x16b43,
 0x16b50, 0x16b59,
 0x16b63, 0x16b77,
 0x16b7d, 0x16b8f,
 0x16e40, 0x16e7f,
-0x16f00, 0x16f44,
-0x16f50, 0x16f7e,
-0x16f93, 0x16f9f,
+0x16f00, 0x16f4a,
+0x16f4f, 0x16f87,
+0x16f8f, 0x16f9f,
 0x16fe0, 0x16fe1,
-0x17000, 0x187f1,
+0x16fe3, 0x16fe3,
+0x17000, 0x187f7,
 0x18800, 0x18af2,
 0x1b000, 0x1b11e,
+0x1b150, 0x1b152,
+0x1b164, 0x1b167,
 0x1b170, 0x1b2fb,
 0x1bc00, 0x1bc6a,
 0x1bc70, 0x1bc7c,
@@ -5018,9 +5053,16 @@ CR_Alnum[] = { 713,
 0x1e01b, 0x1e021,
 0x1e023, 0x1e024,
 0x1e026, 0x1e02a,
+0x1e100, 0x1e12c,
+0x1e137, 0x1e13d,
+0x1e140, 0x1e149,
+0x1e14e, 0x1e14e,
+0x1e2c0, 0x1e2eb,
+0x1e2f0, 0x1e2f9,
 0x1e800, 0x1e8c4,
 0x1e900, 0x1e943,
 0x1e947, 0x1e947,
+0x1e94b, 0x1e94b,
 0x1e950, 0x1e959,
 0x1ee00, 0x1ee03,
 0x1ee05, 0x1ee1f,
index bf71df0dd5c2e40b7bfa54b33dc9726a4449d136..b2228e0848438f9869e9487d05568a14969b84af 100644 (file)
@@ -1,7 +1,7 @@
 /* This file was converted by gperf_unfold_key_conv.py
       from gperf output file. */
 /* ANSI-C code produced by gperf version 3.1 */
-/* Command-line: /usr/bin/gperf -n -C -T -c -t -j1 -L ANSI-C -F,-1,0 -N onigenc_unicode_unfold_key unicode_unfold_key.gperf  */
+/* Command-line: /usr/local/bin/gperf -n -C -T -c -t -j1 -L ANSI-C -F,-1,0 -N onigenc_unicode_unfold_key unicode_unfold_key.gperf  */
 /* Computed positions: -k'1-3' */
 
 
 #include <string.h>
 #include "regenc.h"
 
-#define TOTAL_KEYWORDS 1480
+#define TOTAL_KEYWORDS 1487
 #define MIN_WORD_LENGTH 3
 #define MAX_WORD_LENGTH 3
 #define MIN_HASH_VALUE 10
-#define MAX_HASH_VALUE 1993
-/* maximum key range = 1984, duplicates = 0 */
+#define MAX_HASH_VALUE 1958
+/* maximum key range = 1949, duplicates = 0 */
 
 #ifdef __GNUC__
 __inline
@@ -56,36 +56,36 @@ hash(OnigCodePoint codes[])
 {
   static const unsigned short asso_values[] =
     {
-         9,    5,    2,  214,  176,    1,  110, 1994, 1994, 1994,
-      1994, 1994, 1994,   13, 1994, 1994, 1994,   77, 1994, 1994,
-        71, 1994, 1994, 1994, 1994,   86, 1994, 1994, 1994,    7,
-      1994,    0,    3, 1994,   50,  560, 1509,  132, 1501,  552,
-      1492,  546, 1586,  538, 1491,    4, 1480,  518, 1475,  510,
-      1467,  879, 1578,  855, 1459,  527, 1426,  234, 1067,  497,
-      1458,  486, 1450,  352, 1436,  831, 1577,  783,  285,  639,
-      1576,  629, 1567,  575, 1566,  609, 1556,  567, 1425,  598,
-      1151,  587, 1064,  461,  668, 1035,  427, 1414,  160, 1411,
-        21, 1404, 1253, 1289, 1416, 1537,  482, 1402,  669, 1391,
-      1302, 1305, 1277, 1095, 1220, 1076,  261,  869, 1387,  475,
-      1340,  151,  327,  845,  859,  824,  731,  816,  539,  715,
-       212,  707,   83, 1297, 1046, 1278,  529, 1380,  520, 1352,
-       184, 1086,  235, 1073,  275, 1052,  193, 1258,    8, 1060,
-       655, 1030,  513, 1022,  393,  254,  344, 1265,  203, 1246,
-       193, 1548,   15, 1376,  120, 1545, 1591,  525, 1590,  232,
-      1583, 1365, 1465,  464, 1011,  451, 1353,   18,    6,  383,
-      1236,  802,    8,  438,  940,  163, 1533,  427,  858,  244,
-      1225,  360, 1212,  333,  575,  219, 1002,  206, 1209,  320,
-       735,  140, 1199,  410, 1188,   73,  973,  103,  965,   63,
-       944,   53,  791,  196,  788,  116,  695,   93,  921,   83,
-       930,  182,  762,   31,  685,  311,  913,  268,  671,   44,
-       906,  302, 1186,  293, 1180,  280, 1154,  885, 1354,  660,
-       760,  650, 1174, 1169,  402,  897,  641,  726, 1162, 1153,
-       622, 1316,  994, 1143,  664, 1134,  447,  173,  375, 1124,
-         0, 1111,  371,  956,  156, 1270,  147, 1117,  113,  504,
-      1994, 1105,  112, 1347, 1994, 1339,   75, 1335,   65, 1331,
-       591, 1096,   45, 1393, 1994, 1198,  239, 1324,   26,  984,
-        18, 1528,   40, 1517,  124,  421,   27,  904,   91,  137,
-        16
+         9,    5,    2,  111,  176,    1,  110, 1959, 1959, 1959,
+      1959, 1959, 1959,   13, 1959, 1959, 1959,   77, 1959, 1959,
+        63, 1959, 1959, 1959, 1959,   86, 1959, 1959, 1959,    7,
+      1959,    0,    3, 1959,  191,  624, 1536,  132, 1519,  613,
+      1513,  607, 1602,  586, 1505,    4, 1497,  570, 1492,  554,
+      1482,  907, 1601,  898, 1469,  595, 1468,  405, 1463,  546,
+      1458,  538, 1453,  474, 1444,  890, 1596,  877, 1419,  725,
+      1590,  698, 1588,  635, 1160,  682, 1021,  338, 1122,  671,
+       812,  559,  819, 1580,  756, 1082,  744, 1438,  637, 1428,
+       266, 1429, 1502, 1285, 1440, 1578,  467, 1419,  873,  490,
+      1380,  779,  731, 1057, 1261, 1034, 1567,  762, 1389,  495,
+      1510,  156,  648,  805, 1537,  862, 1523,  853, 1469,  845,
+      1252,  796,  342, 1297,  801, 1287,  542, 1408,  477, 1400,
+       237, 1109,   20, 1099,  548, 1067,    1, 1280,  326, 1043,
+       767, 1030,  756,  938,  598,  254,   26, 1275,  165, 1270,
+       149, 1575,   15, 1368,  133, 1202,  625,  403,  408,  373,
+       296, 1397,  283,  519, 1381,  503, 1372,   18,    6,  415,
+      1253,  769,    8,  484, 1358,  658, 1565,  464,  427,  244,
+      1241,  360, 1233,  390, 1350,  219,  377,  206, 1223,  328,
+      1211,  145, 1198,  454,  135,   73, 1020,  103, 1012,   63,
+       995,   53,  748,  196,  573,  116,  684,   93,  983,   83,
+      1004,  182,  735,   31,  713,  319,  977,  306,  706,   44,
+       836,  293, 1187,  280, 1135,  268,  671,  976, 1350,  447,
+      1182,  437,  964,  946,  351,  932, 1349,  923, 1090, 1194,
+      1175,  827, 1299, 1165, 1410, 1155, 1522, 1557,  313, 1146,
+       424, 1136,  233, 1130,  161, 1316,   93,  167,  134,  618,
+      1959, 1118,  128, 1342, 1959, 1335,  124, 1331,   75, 1327,
+       191, 1308,   45, 1545, 1959, 1534,    1,  230,    9,  643,
+         5, 1564,   40, 1553,   65,  531,   55,  993,   25, 1476,
+         2
     };
   return asso_values[(unsigned char)onig_codes_byte_at(codes, 2)+35] + asso_values[(unsigned char)onig_codes_byte_at(codes, 1)+1] + asso_values[(unsigned char)onig_codes_byte_at(codes, 0)];
 }
@@ -98,21 +98,20 @@ onigenc_unicode_unfold_key(OnigCodePoint code)
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1040a, 3420, 1},
-
-      {0x01d7, 444, 1},
+      {0x1040a, 3441, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1fd7, 31, 3},
+      {0x01f1, 483, 1},
 
-      {0x1e0a, 1876, 1},
+      {0x1e0a, 1882, 1},
 
-      {0x040a, 1026, 1},
+      {0x040a, 1029, 1},
 
       {0x010a, 186, 1},
 
-      {0x1f0a, 2237, 1},
+      {0x1f0a, 2243, 1},
 
-      {0x2c0a, 2600, 1},
+      {0x2c0a, 2606, 1},
 
       {0x1f85, 154, 2},
 
@@ -120,3134 +119,3154 @@ onigenc_unicode_unfold_key(OnigCodePoint code)
 
       {0x1f89, 134, 2},
 
-      {0x2c67, 2720, 1},
+      {0x1ff3, 96, 2},
 
-      {0x1c85, 951, 1},
+      {0x1c85, 954, 1},
 
-      {0xab85, 1660, 1},
+      {0xab85, 1663, 1},
 
-      {0x10c85, 3633, 1},
+      {0x10c85, 3654, 1},
 
-      {0xab89, 1672, 1},
+      {0xab89, 1675, 1},
 
-      {0x10c89, 3645, 1},
+      {0x10c89, 3666, 1},
 
-      {0x1e84, 2060, 1},
+      {0x1e84, 2066, 1},
 
-      {0x2c75, 2732, 1},
+      {0x2c75, 2738, 1},
 
       {0x0184, 360, 1},
 
       {0x1f84, 149, 2},
 
-      {0x2c84, 2741, 1},
+      {0x2c84, 2747, 1},
 
-      {0xab75, 1612, 1},
+      {0xab75, 1615, 1},
 
-      {0xa784, 3255, 1},
+      {0xa784, 3261, 1},
 
-      {0x1c84, 951, 1},
+      {0x1c84, 954, 1},
 
-      {0xab84, 1657, 1},
+      {0xab84, 1660, 1},
 
-      {0x10c84, 3630, 1},
+      {0x10c84, 3651, 1},
 
-      {0x104b2, 3516, 1},
+      {0x104b2, 3537, 1},
 
-      {0x1ff3, 96, 2},
+      {0x1f6f, 2378, 1},
 
-      {0x1ffb, 2414, 1},
+      {0x2c6f, 604, 1},
 
-      {0x1eb2, 2114, 1},
+      {0x1eb2, 2120, 1},
 
-      {0x04b2, 1156, 1},
+      {0x04b2, 1159, 1},
 
-      {0x01b2, 697, 1},
+      {0x01b2, 700, 1},
 
       {0x1fb2, 249, 2},
 
-      {0x2cb2, 2810, 1},
+      {0x2cb2, 2816, 1},
 
-      {0xa684, 3090, 1},
+      {0xa684, 3096, 1},
 
-      {0xa7b2, 706, 1},
+      {0xa7b2, 709, 1},
 
-      {0x1cb2, 1561, 1},
+      {0x1cb2, 1564, 1},
 
-      {0xabb2, 1795, 1},
+      {0xabb2, 1798, 1},
 
-      {0x10cb2, 3768, 1},
+      {0x10cb2, 3789, 1},
 
-      {0x104b8, 3534, 1},
+      {0x104b8, 3555, 1},
 
       {0x01f7, 414, 1},
 
       {0x1ff7, 67, 3},
 
-      {0x1eb8, 2123, 1},
+      {0x1eb8, 2129, 1},
 
-      {0x04b8, 1165, 1},
+      {0x04b8, 1168, 1},
 
       {0x01b8, 408, 1},
 
-      {0x1fb8, 2417, 1},
+      {0x1fb8, 2423, 1},
 
-      {0x2cb8, 2819, 1},
+      {0x2cb8, 2825, 1},
 
-      {0x2ced, 2888, 1},
+      {0x2ced, 2894, 1},
 
-      {0xa7b8, 3306, 1},
+      {0xa7b8, 3315, 1},
 
-      {0x1cb8, 1579, 1},
+      {0x1cb8, 1582, 1},
 
-      {0xabb8, 1813, 1},
+      {0xabb8, 1816, 1},
 
-      {0x1ea6, 2096, 1},
+      {0x1ea6, 2102, 1},
 
-      {0x04a6, 1138, 1},
+      {0x04a6, 1141, 1},
 
       {0x01a6, 679, 1},
 
       {0x1fa6, 239, 2},
 
-      {0x2ca6, 2792, 1},
+      {0x2ca6, 2798, 1},
 
-      {0x2167, 2462, 1},
+      {0x1ffb, 2420, 1},
 
-      {0xa7a6, 3294, 1},
+      {0xa7a6, 3303, 1},
 
-      {0x1ca6, 1525, 1},
+      {0x1ca6, 1528, 1},
 
-      {0xaba6, 1759, 1},
+      {0xaba6, 1762, 1},
 
-      {0x10ca6, 3732, 1},
+      {0x10ca6, 3753, 1},
 
-      {0x1ea4, 2093, 1},
+      {0x1ea4, 2099, 1},
 
-      {0x04a4, 1135, 1},
+      {0x04a4, 1138, 1},
 
       {0x01a4, 390, 1},
 
       {0x1fa4, 229, 2},
 
-      {0x2ca4, 2789, 1},
+      {0x2ca4, 2795, 1},
 
-      {0x1fe9, 2432, 1},
+      {0x1ff9, 2408, 1},
 
-      {0xa7a4, 3291, 1},
+      {0xa7a4, 3300, 1},
 
-      {0x1ca4, 1519, 1},
+      {0x1ca4, 1522, 1},
 
-      {0xaba4, 1753, 1},
+      {0xaba4, 1756, 1},
 
-      {0x10ca4, 3726, 1},
+      {0x10ca4, 3747, 1},
 
-      {0x1ea0, 2087, 1},
+      {0x1ea0, 2093, 1},
 
-      {0x04a0, 1129, 1},
+      {0x04a0, 1132, 1},
 
       {0x01a0, 384, 1},
 
       {0x1fa0, 209, 2},
 
-      {0x2ca0, 2783, 1},
+      {0x2ca0, 2789, 1},
 
-      {0x1fe7, 47, 3},
+      {0x1fe9, 2438, 1},
 
-      {0xa7a0, 3285, 1},
+      {0xa7a0, 3294, 1},
 
-      {0x1ca0, 1507, 1},
+      {0x1ca0, 1510, 1},
 
-      {0xaba0, 1741, 1},
+      {0xaba0, 1744, 1},
 
-      {0x10ca0, 3714, 1},
+      {0x10ca0, 3735, 1},
 
-      {0x1eae, 2108, 1},
+      {0x1eae, 2114, 1},
 
-      {0x04ae, 1150, 1},
+      {0x04ae, 1153, 1},
 
-      {0x01ae, 688, 1},
+      {0x01ae, 691, 1},
 
       {0x1fae, 239, 2},
 
-      {0x2cae, 2804, 1},
+      {0x2cae, 2810, 1},
 
-      {0x0057, 65, 1},
+      {0x13fd, 1855, 1},
 
       {0xa7ae, 655, 1},
 
-      {0x1cae, 1549, 1},
+      {0x1cae, 1552, 1},
 
-      {0xabae, 1783, 1},
+      {0xabae, 1786, 1},
 
-      {0x10cae, 3756, 1},
+      {0x10cae, 3777, 1},
 
-      {0x1eac, 2105, 1},
+      {0x1eac, 2111, 1},
 
-      {0x04ac, 1147, 1},
+      {0x04ac, 1150, 1},
 
       {0x01ac, 396, 1},
 
       {0x1fac, 229, 2},
 
-      {0x2cac, 2801, 1},
+      {0x2cac, 2807, 1},
 
-      {0x13fb, 1846, 1},
+      {0x00dd, 162, 1},
 
       {0xa7ac, 637, 1},
 
-      {0x1cac, 1543, 1},
+      {0x1cac, 1546, 1},
 
-      {0xabac, 1777, 1},
+      {0xabac, 1780, 1},
 
-      {0x10cac, 3750, 1},
+      {0x10cac, 3771, 1},
 
-      {0x1ea2, 2090, 1},
+      {0x1ea2, 2096, 1},
 
-      {0x04a2, 1132, 1},
+      {0x04a2, 1135, 1},
 
       {0x01a2, 387, 1},
 
       {0x1fa2, 219, 2},
 
-      {0x2ca2, 2786, 1},
+      {0x2ca2, 2792, 1},
 
-      {0x10b2, 2948, 1},
+      {0x10b2, 2954, 1},
 
-      {0xa7a2, 3288, 1},
+      {0xa7a2, 3297, 1},
 
-      {0x1ca2, 1513, 1},
+      {0x1ca2, 1516, 1},
 
-      {0xaba2, 1747, 1},
+      {0xaba2, 1750, 1},
 
-      {0x10ca2, 3720, 1},
+      {0x10ca2, 3741, 1},
 
-      {0x118b2, 3825, 1},
+      {0x118b2, 3846, 1},
 
-      {0x050a, 1288, 1},
+      {0x050a, 1291, 1},
 
-      {0x1fe3, 41, 3},
+      {0x020a, 517, 1},
 
-      {0x1eaa, 2102, 1},
+      {0x1eaa, 2108, 1},
 
-      {0x04aa, 1144, 1},
+      {0x04aa, 1147, 1},
 
-      {0x00df, 24, 2},
+      {0x13fb, 1849, 1},
 
       {0x1faa, 219, 2},
 
-      {0x2caa, 2798, 1},
+      {0x2caa, 2804, 1},
 
-      {0x10b8, 2966, 1},
+      {0x10b8, 2972, 1},
 
       {0xa7aa, 646, 1},
 
-      {0x1caa, 1537, 1},
+      {0x1caa, 1540, 1},
 
-      {0xabaa, 1771, 1},
+      {0xabaa, 1774, 1},
 
-      {0x10caa, 3744, 1},
+      {0x10caa, 3765, 1},
 
-      {0x118b8, 3843, 1},
+      {0x118b8, 3864, 1},
 
-      {0x1ff9, 2402, 1},
+      {0x1fe7, 47, 3},
 
-      {0xab77, 1618, 1},
+      {0x13f9, 1843, 1},
 
-      {0x10402, 3396, 1},
+      {0x10402, 3417, 1},
 
-      {0x10a6, 2912, 1},
+      {0x10a6, 2918, 1},
 
-      {0x0537, 1363, 1},
+      {0x1fe3, 41, 3},
 
-      {0x1e02, 1864, 1},
+      {0x1e02, 1870, 1},
 
-      {0x0402, 1002, 1},
+      {0x0402, 1005, 1},
 
       {0x0102, 174, 1},
 
-      {0x118a6, 3789, 1},
+      {0x118a6, 3810, 1},
 
-      {0x2c02, 2576, 1},
+      {0x2c02, 2582, 1},
 
-      {0x1efe, 2228, 1},
+      {0x019f, 673, 1},
 
-      {0x04fe, 1270, 1},
+      {0x1f9f, 204, 2},
 
-      {0x01fe, 499, 1},
+      {0x00df, 24, 2},
+
+      {0x10a4, 2912, 1},
+
+      {0xab77, 1621, 1},
+
+      {0x1c9f, 1507, 1},
+
+      {0xab9f, 1741, 1},
 
-      {0x10a4, 2906, 1},
+      {0x10c9f, 3732, 1},
 
-      {0x049c, 1123, 1},
+      {0x118a4, 3804, 1},
+
+      {0x049c, 1126, 1},
 
       {0x019c, 664, 1},
 
       {0x1f9c, 189, 2},
 
-      {0x2c9c, 2777, 1},
+      {0x2c9c, 2783, 1},
 
-      {0x118a4, 3783, 1},
+      {0x10a0, 2900, 1},
 
-      {0xa79c, 3279, 1},
+      {0xa79c, 3288, 1},
 
-      {0x1c9c, 1495, 1},
+      {0x1c9c, 1498, 1},
 
-      {0xab9c, 1729, 1},
+      {0xab9c, 1732, 1},
 
-      {0x10c9c, 3702, 1},
+      {0x10c9c, 3723, 1},
 
-      {0x10a0, 2894, 1},
+      {0x118a0, 3792, 1},
 
-      {0x1e4c, 1975, 1},
+      {0x1e4c, 1981, 1},
 
-      {0x00dd, 162, 1},
+      {0xab73, 1609, 1},
 
       {0x014c, 279, 1},
 
-      {0x1f4c, 2333, 1},
+      {0x1f4c, 2339, 1},
 
-      {0x118a0, 3771, 1},
+      {0x10ae, 2942, 1},
 
       {0x004c, 31, 1},
 
-      {0xa74c, 3186, 1},
+      {0xa74c, 3192, 1},
 
       {0x01db, 450, 1},
 
-      {0x1fdb, 2396, 1},
+      {0x1fdb, 2402, 1},
 
-      {0x10ae, 2936, 1},
+      {0x118ae, 3834, 1},
 
       {0x00db, 156, 1},
 
-      {0x13fd, 1852, 1},
-
-      {0x1e8c, 2072, 1},
-
-      {0x048c, 1099, 1},
-
-      {0x118ae, 3813, 1},
-
-      {0x1f8c, 149, 2},
-
-      {0x2c8c, 2753, 1},
+      {0x1ede, 2186, 1},
 
-      {0xff37, 3378, 1},
+      {0x04de, 1225, 1},
 
-      {0xa64c, 3033, 1},
-
-      {0x10ac, 2930, 1},
+      {0x01de, 456, 1},
 
-      {0xab8c, 1681, 1},
+      {0x10ac, 2936, 1},
 
-      {0x10c8c, 3654, 1},
+      {0x2cde, 2882, 1},
 
-      {0x1ed4, 2165, 1},
+      {0x00de, 165, 1},
 
-      {0x04d4, 1207, 1},
+      {0xab71, 1603, 1},
 
-      {0x118ac, 3807, 1},
+      {0xa64c, 3039, 1},
 
-      {0x24b8, 2498, 1},
+      {0x118ac, 3828, 1},
 
-      {0x2cd4, 2861, 1},
+      {0x24b8, 2504, 1},
 
-      {0x00d4, 138, 1},
+      {0x03f1, 802, 1},
 
-      {0x104b0, 3510, 1},
+      {0x03ff, 730, 1},
 
-      {0x10a2, 2900, 1},
+      {0x104b0, 3531, 1},
 
-      {0xa68c, 3102, 1},
+      {0x10a2, 2906, 1},
 
-      {0x1eb0, 2111, 1},
+      {0x03f5, 758, 1},
 
-      {0x04b0, 1153, 1},
+      {0x1eb0, 2117, 1},
 
-      {0x0389, 736, 1},
+      {0x04b0, 1156, 1},
 
-      {0x118a2, 3777, 1},
+      {0x0389, 739, 1},
 
-      {0x2cb0, 2807, 1},
+      {0x118a2, 3798, 1},
 
-      {0x1f5f, 2348, 1},
+      {0x2cb0, 2813, 1},
+      {0xffffffff, -1, 0},
 
-      {0xa7b0, 709, 1},
+      {0xa7b0, 712, 1},
 
-      {0x1cb0, 1555, 1},
+      {0x1cb0, 1558, 1},
 
-      {0xabb0, 1789, 1},
+      {0xabb0, 1792, 1},
 
-      {0x10cb0, 3762, 1},
+      {0x10cb0, 3783, 1},
 
-      {0x03ff, 727, 1},
+      {0x2165, 2462, 1},
 
-      {0x10aa, 2924, 1},
+      {0x10aa, 2930, 1},
 
-      {0x03f5, 755, 1},
+      {0x1feb, 2414, 1},
 
-      {0x13f9, 1840, 1},
+      {0x2ceb, 2891, 1},
 
-      {0x1ea8, 2099, 1},
+      {0x1ea8, 2105, 1},
 
-      {0x04a8, 1141, 1},
+      {0x04a8, 1144, 1},
 
-      {0x118aa, 3801, 1},
+      {0x118aa, 3822, 1},
 
       {0x1fa8, 209, 2},
 
-      {0x2ca8, 2795, 1},
+      {0x2ca8, 2801, 1},
 
-      {0xab73, 1606, 1},
+      {0x03fd, 724, 1},
 
-      {0xa7a8, 3297, 1},
+      {0xa7a8, 3306, 1},
 
-      {0x1ca8, 1531, 1},
+      {0x1ca8, 1534, 1},
 
-      {0xaba8, 1765, 1},
+      {0xaba8, 1768, 1},
 
-      {0x10ca8, 3738, 1},
+      {0x10ca8, 3759, 1},
 
       {0x1e98, 38, 2},
 
-      {0x0498, 1117, 1},
+      {0x0498, 1120, 1},
 
       {0x0198, 375, 1},
 
       {0x1f98, 169, 2},
 
-      {0x2c98, 2771, 1},
-
-      {0xab71, 1600, 1},
+      {0x2c98, 2777, 1},
 
-      {0xa798, 3273, 1},
+      {0x2161, 2450, 1},
 
-      {0x1c98, 1483, 1},
+      {0xa798, 3282, 1},
 
-      {0xab98, 1717, 1},
+      {0x1c98, 1486, 1},
 
-      {0x10c98, 3690, 1},
+      {0xab98, 1720, 1},
 
-      {0x03f7, 887, 1},
+      {0x10c98, 3711, 1},
 
-      {0x0055, 59, 1},
+      {0x03f7, 890, 1},
 
-      {0x020a, 517, 1},
+      {0x216f, 2492, 1},
+      {0xffffffff, -1, 0},
 
       {0x1e96, 16, 2},
 
-      {0x0496, 1114, 1},
+      {0x0496, 1117, 1},
 
       {0x0196, 652, 1},
 
       {0x1f96, 199, 2},
 
-      {0x2c96, 2768, 1},
+      {0x2c96, 2774, 1},
 
-      {0xa698, 3120, 1},
+      {0xa698, 3126, 1},
 
-      {0xa796, 3270, 1},
+      {0xa796, 3279, 1},
 
-      {0x1c96, 1477, 1},
+      {0x1c96, 1480, 1},
 
-      {0xab96, 1711, 1},
+      {0xab96, 1714, 1},
 
-      {0x10c96, 3684, 1},
+      {0x10c96, 3705, 1},
 
-      {0x03a6, 813, 1},
+      {0x03a6, 816, 1},
 
-      {0x16e57, 3936, 1},
+      {0x1ef2, 2216, 1},
 
-      {0x10416, 3456, 1},
+      {0x04f2, 1255, 1},
 
-      {0x1e7c, 2048, 1},
+      {0x01f2, 483, 1},
 
-      {0x047c, 1087, 1},
+      {0x1ff2, 257, 2},
 
-      {0x1e16, 1894, 1},
+      {0x2cf2, 2897, 1},
 
-      {0x0416, 913, 1},
+      {0x01d9, 447, 1},
 
-      {0x0116, 204, 1},
+      {0x1fd9, 2432, 1},
 
-      {0xa696, 3117, 1},
+      {0xa696, 3123, 1},
 
-      {0x2c16, 2636, 1},
+      {0x00d9, 150, 1},
 
-      {0x03a4, 807, 1},
+      {0x03a4, 810, 1},
 
-      {0xab7c, 1633, 1},
+      {0x1f5f, 2354, 1},
 
-      {0x01f1, 483, 1},
+      {0x03f9, 884, 1},
 
-      {0x0502, 1276, 1},
+      {0x0502, 1279, 1},
 
-      {0x2165, 2456, 1},
+      {0x0202, 505, 1},
 
-      {0x1e90, 2078, 1},
+      {0x1e90, 2084, 1},
 
-      {0x0490, 1105, 1},
+      {0x0490, 1108, 1},
 
       {0x0190, 628, 1},
 
       {0x1f90, 169, 2},
 
-      {0x2c90, 2759, 1},
+      {0x2c90, 2765, 1},
 
-      {0x03a0, 795, 1},
+      {0x03a0, 798, 1},
 
-      {0xa790, 3264, 1},
+      {0xa790, 3270, 1},
 
-      {0x1c90, 1459, 1},
+      {0x1c90, 1462, 1},
 
-      {0xab90, 1693, 1},
+      {0xab90, 1696, 1},
 
-      {0x10c90, 3666, 1},
+      {0x10c90, 3687, 1},
 
-      {0x1e6e, 2027, 1},
+      {0x1e6e, 2033, 1},
 
-      {0x046e, 1066, 1},
+      {0x046e, 1069, 1},
 
       {0x016e, 330, 1},
 
-      {0x1f6e, 2369, 1},
+      {0x1f6e, 2375, 1},
 
       {0x2c6e, 667, 1},
 
-      {0x10b0, 2942, 1},
+      {0x10b0, 2948, 1},
 
-      {0xa76e, 3237, 1},
-
-      {0x054c, 1426, 1},
+      {0xa76e, 3243, 1},
+      {0xffffffff, -1, 0},
 
-      {0xa690, 3108, 1},
+      {0xa690, 3114, 1},
+      {0xffffffff, -1, 0},
 
-      {0x0147, 273, 1},
+      {0x118b0, 3840, 1},
 
-      {0x118b0, 3819, 1},
+      {0x104be, 3573, 1},
 
-      {0x104b6, 3528, 1},
+      {0x054c, 1429, 1},
 
-      {0x0047, 18, 1},
+      {0x024c, 598, 1},
 
-      {0x03fd, 721, 1},
+      {0x1ebe, 2138, 1},
 
-      {0x1eb6, 2120, 1},
+      {0x04be, 1177, 1},
+      {0xffffffff, -1, 0},
 
-      {0x04b6, 1162, 1},
+      {0x1fbe, 773, 1},
 
-      {0x0535, 1357, 1},
+      {0x2cbe, 2834, 1},
 
-      {0x1fb6, 58, 2},
+      {0x10a8, 2924, 1},
 
-      {0x2cb6, 2816, 1},
+      {0xa7be, 3324, 1},
 
-      {0x10a8, 2918, 1},
+      {0x1cbe, 1594, 1},
 
-      {0xa7b6, 3303, 1},
+      {0xabbe, 1834, 1},
 
-      {0x1cb6, 1573, 1},
+      {0x104bc, 3567, 1},
 
-      {0xabb6, 1807, 1},
+      {0x118a8, 3816, 1},
+      {0xffffffff, -1, 0},
 
-      {0x104be, 3552, 1},
+      {0x1ebc, 2135, 1},
 
-      {0x118a8, 3795, 1},
+      {0x04bc, 1174, 1},
 
-      {0x2c63, 1858, 1},
+      {0x01bc, 411, 1},
 
-      {0x1ebe, 2132, 1},
+      {0x1fbc, 62, 2},
 
-      {0x04be, 1174, 1},
+      {0x2cbc, 2831, 1},
 
-      {0x10421, 3489, 1},
+      {0x017f, 52, 1},
 
-      {0x1fbe, 770, 1},
+      {0xa7bc, 3321, 1},
 
-      {0x2cbe, 2828, 1},
+      {0x2c7f, 583, 1},
 
-      {0x2161, 2444, 1},
+      {0xabbc, 1828, 1},
+      {0xffffffff, -1, 0},
 
-      {0x0421, 947, 1},
+      {0x104ba, 3561, 1},
 
-      {0x1cbe, 1591, 1},
+      {0xab7f, 1645, 1},
 
-      {0xabbe, 1831, 1},
+      {0x03aa, 830, 1},
 
-      {0x2c21, 2669, 1},
+      {0x1eba, 2132, 1},
 
-      {0x104bc, 3546, 1},
+      {0x04ba, 1171, 1},
       {0xffffffff, -1, 0},
 
-      {0x03aa, 827, 1},
+      {0x1fba, 2381, 1},
 
-      {0x1ebc, 2129, 1},
+      {0x2cba, 2828, 1},
 
-      {0x04bc, 1171, 1},
+      {0x017d, 351, 1},
 
-      {0x01bc, 411, 1},
+      {0xa7ba, 3318, 1},
 
-      {0x1fbc, 62, 2},
+      {0x1cba, 1588, 1},
+
+      {0xabba, 1822, 1},
 
-      {0x2cbc, 2825, 1},
+      {0xa77d, 1858, 1},
 
-      {0x16e4c, 3903, 1},
+      {0x104b6, 3549, 1},
 
-      {0x104ba, 3540, 1},
+      {0xab7d, 1639, 1},
+      {0xffffffff, -1, 0},
 
-      {0x03f9, 881, 1},
+      {0x1eb6, 2126, 1},
 
-      {0xabbc, 1825, 1},
+      {0x04b6, 1165, 1},
 
-      {0x1eba, 2126, 1},
+      {0x16e4c, 3924, 1},
 
-      {0x04ba, 1168, 1},
+      {0x1fb6, 58, 2},
 
-      {0x216e, 2483, 1},
+      {0x2cb6, 2822, 1},
 
-      {0x1fba, 2375, 1},
+      {0x039f, 795, 1},
 
-      {0x2cba, 2822, 1},
+      {0xa7b6, 3312, 1},
 
-      {0xff35, 3372, 1},
+      {0x1cb6, 1576, 1},
 
-      {0x104b4, 3522, 1},
+      {0xabb6, 1810, 1},
 
-      {0x1cba, 1585, 1},
+      {0x01d5, 441, 1},
 
-      {0xabba, 1819, 1},
+      {0x104b4, 3543, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1eb4, 2117, 1},
+      {0x00d5, 141, 1},
 
-      {0x04b4, 1159, 1},
+      {0x1eb4, 2123, 1},
 
-      {0x03fe, 724, 1},
+      {0x04b4, 1162, 1},
 
-      {0x1fb4, 50, 2},
+      {0x039c, 785, 1},
 
-      {0x2cb4, 2813, 1},
+      {0x1fb4, 50, 2},
 
-      {0x039c, 782, 1},
+      {0x2cb4, 2819, 1},
+      {0xffffffff, -1, 0},
 
-      {0xa7b4, 3300, 1},
+      {0xa7b4, 3309, 1},
 
-      {0x1cb4, 1567, 1},
+      {0x1cb4, 1570, 1},
 
-      {0xabb4, 1801, 1},
+      {0xabb4, 1804, 1},
 
       {0x1e9a, 0, 2},
 
-      {0x049a, 1120, 1},
+      {0x049a, 1123, 1},
 
-      {0x0555, 1453, 1},
+      {0x2c67, 2726, 1},
 
       {0x1f9a, 179, 2},
 
-      {0x2c9a, 2774, 1},
+      {0x2c9a, 2780, 1},
+      {0xffffffff, -1, 0},
+
+      {0xa79a, 3285, 1},
 
-      {0x2163, 2450, 1},
+      {0x1c9a, 1492, 1},
 
-      {0xa79a, 3276, 1},
+      {0xab9a, 1726, 1},
 
-      {0x1c9a, 1489, 1},
+      {0x10c9a, 3717, 1},
 
-      {0xab9a, 1723, 1},
+      {0x1e2a, 1930, 1},
 
-      {0x10c9a, 3696, 1},
+      {0x042a, 980, 1},
 
-      {0x1f4d, 2336, 1},
+      {0x012a, 234, 1},
 
-      {0x16e5f, 3960, 1},
+      {0x1f2a, 2285, 1},
 
-      {0x004d, 34, 1},
+      {0x2c2a, 2702, 1},
 
-      {0x1e94, 2084, 1},
+      {0x03de, 857, 1},
 
-      {0x0494, 1111, 1},
+      {0xa72a, 3144, 1},
 
-      {0x0194, 640, 1},
+      {0x10be, 2990, 1},
 
-      {0x1f94, 189, 2},
+      {0xa69a, 3129, 1},
 
-      {0x2c94, 2765, 1},
+      {0x0057, 65, 1},
+
+      {0x104c7, 3600, 1},
+      {0xffffffff, -1, 0},
 
-      {0xa69a, 3123, 1},
+      {0x118be, 3882, 1},
 
-      {0x038c, 833, 1},
+      {0x1e90a, 4014, 1},
 
-      {0x1c94, 1471, 1},
+      {0x04c7, 1189, 1},
 
-      {0xab94, 1705, 1},
+      {0x01c7, 421, 1},
 
-      {0x10c94, 3678, 1},
+      {0x1fc7, 15, 3},
       {0xffffffff, -1, 0},
 
-      {0x0516, 1306, 1},
+      {0x00c7, 99, 1},
 
-      {0x10b6, 2960, 1},
+      {0x10bc, 2984, 1},
 
-      {0x0202, 505, 1},
+      {0x03b0, 41, 3},
 
-      {0x1f6f, 2372, 1},
+      {0xff37, 3399, 1},
 
-      {0x2c6f, 604, 1},
+      {0x1e92, 2087, 1},
 
-      {0x1041c, 3474, 1},
+      {0x0492, 1111, 1},
 
-      {0x118b6, 3837, 1},
+      {0x118bc, 3876, 1},
 
-      {0xa694, 3114, 1},
+      {0x1f92, 179, 2},
 
-      {0x1e1c, 1903, 1},
+      {0x2c92, 2768, 1},
 
-      {0x041c, 931, 1},
+      {0xfb02, 12, 2},
 
-      {0x011c, 213, 1},
+      {0xa792, 3273, 1},
 
-      {0x1f1c, 2267, 1},
+      {0x1c92, 1468, 1},
 
-      {0x2c1c, 2654, 1},
+      {0xab92, 1702, 1},
 
-      {0x10be, 2984, 1},
+      {0x10c92, 3693, 1},
 
-      {0x03b0, 41, 3},
+      {0x10ba, 2978, 1},
+      {0xffffffff, -1, 0},
 
-      {0x16e55, 3930, 1},
+      {0x03a8, 823, 1},
 
-      {0x1e92, 2081, 1},
+      {0x1e7c, 2054, 1},
 
-      {0x0492, 1108, 1},
+      {0x047c, 1090, 1},
 
-      {0x118be, 3861, 1},
+      {0x118ba, 3870, 1},
 
-      {0x1f92, 179, 2},
+      {0x0537, 1366, 1},
+
+      {0x1e97, 34, 2},
 
-      {0x2c92, 2762, 1},
+      {0xa692, 3117, 1},
 
-      {0x024c, 598, 1},
+      {0x0197, 649, 1},
 
-      {0xa792, 3267, 1},
+      {0x1f97, 204, 2},
 
-      {0x1c92, 1465, 1},
+      {0xab7c, 1636, 1},
 
-      {0xab92, 1699, 1},
+      {0x0398, 768, 1},
 
-      {0x10c92, 3672, 1},
+      {0x10b6, 2966, 1},
 
-      {0x10bc, 2978, 1},
+      {0x1c97, 1483, 1},
 
-      {0x0547, 1411, 1},
+      {0xab97, 1717, 1},
 
-      {0x03a8, 820, 1},
+      {0x10c97, 3708, 1},
+      {0xffffffff, -1, 0},
 
-      {0x01d9, 447, 1},
+      {0x118b6, 3858, 1},
 
-      {0x1fd9, 2426, 1},
+      {0x16e5f, 3981, 1},
 
-      {0x118bc, 3855, 1},
+      {0x1e94, 2090, 1},
 
-      {0x00d9, 150, 1},
+      {0x0494, 1114, 1},
 
-      {0x01d5, 441, 1},
+      {0x0194, 640, 1},
 
-      {0xa692, 3111, 1},
+      {0x1f94, 189, 2},
 
-      {0x10ba, 2972, 1},
+      {0x2c94, 2771, 1},
 
-      {0x00d5, 141, 1},
-      {0xffffffff, -1, 0},
+      {0x0396, 762, 1},
 
-      {0x0398, 765, 1},
+      {0x10b4, 2960, 1},
 
-      {0x1e86, 2063, 1},
+      {0x1c94, 1474, 1},
 
-      {0x118ba, 3849, 1},
+      {0xab94, 1708, 1},
 
-      {0x0186, 616, 1},
+      {0x10c94, 3699, 1},
 
-      {0x1f86, 159, 2},
+      {0x24be, 2522, 1},
 
-      {0x2c86, 2744, 1},
+      {0x118b4, 3852, 1},
 
-      {0x10b4, 2954, 1},
+      {0x10416, 3477, 1},
 
-      {0xa786, 3258, 1},
+      {0x1e7a, 2051, 1},
 
-      {0x1c86, 977, 1},
+      {0x047a, 1087, 1},
 
-      {0xab86, 1663, 1},
+      {0x1e16, 1900, 1},
 
-      {0x10c86, 3636, 1},
+      {0x0416, 916, 1},
+
+      {0x0116, 204, 1},
 
-      {0x118b4, 3831, 1},
+      {0xa694, 3120, 1},
 
-      {0x216f, 2486, 1},
+      {0x2c16, 2642, 1},
 
-      {0x0396, 759, 1},
+      {0x017b, 348, 1},
 
-      {0x1f6d, 2366, 1},
+      {0xab7a, 1630, 1},
 
-      {0x2c6d, 607, 1},
+      {0x24bc, 2516, 1},
       {0xffffffff, -1, 0},
 
-      {0x104c7, 3579, 1},
+      {0xa77b, 3249, 1},
 
-      {0x24b6, 2492, 1},
+      {0x1e86, 2069, 1},
 
-      {0xa686, 3093, 1},
+      {0xab7b, 1633, 1},
 
-      {0x1e90a, 3993, 1},
+      {0x0186, 616, 1},
 
-      {0x04c7, 1186, 1},
+      {0x1f86, 159, 2},
 
-      {0x01c7, 421, 1},
+      {0x2c86, 2750, 1},
 
-      {0x1fc7, 15, 3},
-      {0xffffffff, -1, 0},
+      {0x0390, 25, 3},
 
-      {0x00c7, 99, 1},
+      {0xa786, 3264, 1},
 
-      {0x16e47, 3888, 1},
-      {0xffffffff, -1, 0},
+      {0x1c86, 980, 1},
 
-      {0x1e9e, 24, 2},
+      {0xab86, 1666, 1},
 
-      {0x049e, 1126, 1},
+      {0x10c86, 3657, 1},
 
-      {0x24be, 2516, 1},
+      {0x24ba, 2510, 1},
 
-      {0x1f9e, 199, 2},
+      {0x01d7, 444, 1},
 
-      {0x2c9e, 2780, 1},
+      {0x1fd7, 31, 3},
 
-      {0x03f1, 799, 1},
+      {0x10c7, 3014, 1},
 
-      {0xa79e, 3282, 1},
+      {0x018f, 625, 1},
 
-      {0x1c9e, 1501, 1},
+      {0x1f8f, 164, 2},
 
-      {0xab9e, 1735, 1},
+      {0xff2a, 3360, 1},
+      {0xffffffff, -1, 0},
 
-      {0x10c9e, 3708, 1},
+      {0xa686, 3099, 1},
 
-      {0x0390, 25, 3},
+      {0x104c4, 3591, 1},
 
-      {0x1efa, 2222, 1},
+      {0xab8f, 1693, 1},
 
-      {0x04fa, 1264, 1},
+      {0x10c8f, 3684, 1},
 
-      {0x01fa, 493, 1},
+      {0x1ec4, 2147, 1},
 
-      {0x1ffa, 2411, 1},
+      {0x24b6, 2498, 1},
 
-      {0x24bc, 2510, 1},
-      {0xffffffff, -1, 0},
+      {0x01c4, 417, 1},
 
-      {0x1e8e, 2075, 1},
+      {0x1fc4, 54, 2},
 
-      {0x048e, 1102, 1},
+      {0x2cc4, 2843, 1},
 
-      {0x018e, 453, 1},
+      {0x00c4, 89, 1},
 
-      {0x1f8e, 159, 2},
+      {0xa7c4, 3276, 1},
 
-      {0x2c8e, 2756, 1},
+      {0x104c2, 3585, 1},
 
-      {0xff21, 3312, 1},
+      {0x216e, 2489, 1},
       {0xffffffff, -1, 0},
 
-      {0x24ba, 2504, 1},
+      {0x1ec2, 2144, 1},
+
+      {0x052a, 1339, 1},
 
-      {0xab8e, 1687, 1},
+      {0x022a, 562, 1},
 
-      {0x10c8e, 3660, 1},
+      {0x1fc2, 253, 2},
 
-      {0x054d, 1429, 1},
+      {0x2cc2, 2840, 1},
 
-      {0x1e8a, 2069, 1},
+      {0x00c2, 83, 1},
 
-      {0x048a, 1096, 1},
+      {0xa7c2, 3327, 1},
 
-      {0x018a, 622, 1},
+      {0x1e9e, 24, 2},
 
-      {0x1f8a, 139, 2},
+      {0x049e, 1129, 1},
+      {0xffffffff, -1, 0},
 
-      {0x2c8a, 2750, 1},
+      {0x1f9e, 199, 2},
 
-      {0x216d, 2480, 1},
+      {0x2c9e, 2786, 1},
 
-      {0x104d3, 3615, 1},
+      {0x037f, 887, 1},
 
-      {0xa68e, 3105, 1},
+      {0xa79e, 3291, 1},
 
-      {0xab8a, 1675, 1},
+      {0x1c9e, 1504, 1},
 
-      {0x10c8a, 3648, 1},
+      {0xab9e, 1738, 1},
 
-      {0x0216, 535, 1},
+      {0x10c9e, 3729, 1},
 
-      {0x01d3, 438, 1},
+      {0x1e8e, 2081, 1},
 
-      {0x1fd3, 25, 3},
+      {0x048e, 1105, 1},
 
-      {0x1e82, 2057, 1},
+      {0x018e, 453, 1},
 
-      {0x00d3, 135, 1},
+      {0x1f8e, 159, 2},
 
-      {0x0182, 357, 1},
+      {0x2c8e, 2762, 1},
 
-      {0x1f82, 139, 2},
+      {0x013d, 258, 1},
 
-      {0x2c82, 2738, 1},
+      {0x1f3d, 2318, 1},
 
-      {0xa68a, 3099, 1},
+      {0x1041c, 3495, 1},
 
-      {0xa782, 3252, 1},
+      {0xab8e, 1690, 1},
 
-      {0x1c82, 937, 1},
+      {0x10c8e, 3681, 1},
 
-      {0xab82, 1651, 1},
+      {0x1e1c, 1909, 1},
 
-      {0x10c82, 3624, 1},
+      {0x041c, 934, 1},
 
-      {0x1e30, 1933, 1},
+      {0x011c, 213, 1},
 
-      {0x051c, 1315, 1},
+      {0x1f1c, 2273, 1},
 
-      {0x0130, 261, 2},
+      {0x2c1c, 2660, 1},
 
-      {0x1e80, 2054, 1},
+      {0x1e902, 3990, 1},
 
-      {0x0480, 1093, 1},
+      {0x1f5d, 2351, 1},
       {0xffffffff, -1, 0},
 
-      {0x1f80, 129, 2},
+      {0xa68e, 3111, 1},
 
-      {0x2c80, 2735, 1},
+      {0x24c7, 2549, 1},
 
-      {0xa682, 3087, 1},
+      {0x1e8a, 2075, 1},
 
-      {0xa780, 3249, 1},
+      {0x048a, 1099, 1},
 
-      {0x1c80, 899, 1},
+      {0x018a, 622, 1},
 
-      {0xab80, 1645, 1},
+      {0x1f8a, 139, 2},
 
-      {0x10c80, 3618, 1},
+      {0x2c8a, 2756, 1},
 
-      {0x16e4d, 3906, 1},
+      {0x03d5, 816, 1},
 
-      {0x1e4a, 1972, 1},
+      {0x1e40, 1963, 1},
       {0xffffffff, -1, 0},
 
-      {0x014a, 276, 1},
-
-      {0x1f4a, 2327, 1},
+      {0xab8a, 1678, 1},
 
-      {0x10c7, 3008, 1},
+      {0x10c8a, 3669, 1},
 
-      {0x004a, 24, 1},
+      {0x16e57, 3957, 1},
 
-      {0xa74a, 3183, 1},
+      {0x1e4a, 1978, 1},
 
-      {0xa680, 3084, 1},
+      {0xa740, 3174, 1},
 
-      {0x1041a, 3468, 1},
+      {0x014a, 276, 1},
 
-      {0x013d, 258, 1},
+      {0x1f4a, 2333, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1f3d, 2312, 1},
+      {0x004a, 24, 1},
 
-      {0x1e1a, 1900, 1},
+      {0xa74a, 3189, 1},
 
-      {0x041a, 925, 1},
+      {0xa68a, 3105, 1},
 
-      {0x011a, 210, 1},
+      {0x1e82, 2063, 1},
 
-      {0x1f1a, 2261, 1},
+      {0x039a, 778, 1},
 
-      {0x2c1a, 2648, 1},
-      {0xffffffff, -1, 0},
+      {0x0182, 357, 1},
 
-      {0x13fa, 1843, 1},
+      {0x1f82, 139, 2},
 
-      {0xa64a, 3029, 1},
+      {0x2c82, 2744, 1},
 
-      {0x10418, 3462, 1},
-      {0xffffffff, -1, 0},
+      {0xa640, 3020, 1},
 
-      {0x039a, 775, 1},
+      {0xa782, 3258, 1},
 
-      {0x1e18, 1897, 1},
+      {0x1c82, 940, 1},
 
-      {0x0418, 919, 1},
+      {0xab82, 1654, 1},
 
-      {0x0118, 207, 1},
+      {0x10c82, 3645, 1},
 
-      {0x1f18, 2255, 1},
+      {0xa64a, 3035, 1},
 
-      {0x2c18, 2642, 1},
-      {0xffffffff, -1, 0},
+      {0x10c4, 3008, 1},
 
-      {0xfb02, 12, 2},
+      {0x0516, 1309, 1},
 
-      {0x1ee0, 2183, 1},
+      {0x0216, 535, 1},
 
-      {0x04e0, 1225, 1},
+      {0x2167, 2468, 1},
+      {0xffffffff, -1, 0},
 
-      {0x01e0, 459, 1},
+      {0x1e80, 2060, 1},
 
-      {0x1040e, 3432, 1},
+      {0x0480, 1096, 1},
 
-      {0x2ce0, 2879, 1},
+      {0xa682, 3093, 1},
 
-      {0x0394, 752, 1},
+      {0x1f80, 129, 2},
 
-      {0x1e0e, 1882, 1},
+      {0x2c80, 2741, 1},
 
-      {0x040e, 1038, 1},
+      {0x10c2, 3002, 1},
 
-      {0x010e, 192, 1},
+      {0xa780, 3255, 1},
 
-      {0x1f0e, 2249, 1},
+      {0x1c80, 902, 1},
 
-      {0x2c0e, 2612, 1},
+      {0xab80, 1648, 1},
 
-      {0x1040c, 3426, 1},
+      {0x10c80, 3639, 1},
 
-      {0x1f6b, 2360, 1},
+      {0x212a, 27, 1},
+      {0xffffffff, -1, 0},
 
-      {0x2c6b, 2726, 1},
+      {0x1efa, 2228, 1},
 
-      {0x1e0c, 1879, 1},
+      {0x04fa, 1267, 1},
 
-      {0x040c, 1032, 1},
+      {0x01fa, 493, 1},
 
-      {0x010c, 189, 1},
+      {0x1ffa, 2417, 1},
 
-      {0x1f0c, 2243, 1},
+      {0x1041a, 3489, 1},
 
-      {0x2c0c, 2606, 1},
+      {0x0392, 748, 1},
 
-      {0x1f5d, 2345, 1},
+      {0xa680, 3090, 1},
 
-      {0x10414, 3450, 1},
+      {0x1e1a, 1906, 1},
 
-      {0x1e7a, 2045, 1},
+      {0x041a, 928, 1},
 
-      {0x047a, 1084, 1},
+      {0x011a, 210, 1},
 
-      {0x1e14, 1891, 1},
+      {0x1f1a, 2267, 1},
 
-      {0x0414, 906, 1},
+      {0x2c1a, 2654, 1},
 
-      {0x0114, 201, 1},
+      {0x10418, 3483, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1e902, 3969, 1},
+      {0x1f5b, 2348, 1},
 
-      {0x2c14, 2630, 1},
+      {0x1e18, 1903, 1},
 
-      {0x1f5b, 2342, 1},
+      {0x0418, 922, 1},
 
-      {0xab7a, 1627, 1},
+      {0x0118, 207, 1},
 
-      {0x24c7, 2543, 1},
+      {0x1f18, 2261, 1},
 
-      {0x10408, 3414, 1},
+      {0x2c18, 2648, 1},
 
-      {0x0392, 745, 1},
+      {0x1040e, 3453, 1},
 
-      {0x0533, 1351, 1},
+      {0x2c63, 1861, 1},
 
-      {0x1e08, 1873, 1},
+      {0x0397, 765, 1},
 
-      {0x0408, 1020, 1},
+      {0x1e0e, 1888, 1},
 
-      {0x0108, 183, 1},
+      {0x040e, 1041, 1},
 
-      {0x1f08, 2231, 1},
+      {0x010e, 192, 1},
 
-      {0x2c08, 2594, 1},
+      {0x1f0e, 2255, 1},
 
-      {0x10406, 3408, 1},
+      {0x2c0e, 2618, 1},
 
-      {0x0053, 52, 1},
-      {0xffffffff, -1, 0},
+      {0x1e2e, 1936, 1},
 
-      {0x1e06, 1870, 1},
+      {0x042e, 993, 1},
 
-      {0x0406, 1014, 1},
+      {0x012e, 240, 1},
 
-      {0x0106, 180, 1},
+      {0x1f2e, 2297, 1},
 
-      {0x10404, 3402, 1},
+      {0x2c2e, 2714, 1},
+      {0xffffffff, -1, 0},
 
-      {0x2c06, 2588, 1},
+      {0xa72e, 3150, 1},
 
-      {0x03d5, 813, 1},
+      {0x0394, 755, 1},
 
-      {0x1e04, 1867, 1},
+      {0x1040c, 3447, 1},
+      {0xffffffff, -1, 0},
 
-      {0x0404, 1008, 1},
+      {0x24c4, 2540, 1},
 
-      {0x0104, 177, 1},
-      {0xffffffff, -1, 0},
+      {0x1e0c, 1885, 1},
 
-      {0x2c04, 2582, 1},
+      {0x040c, 1035, 1},
 
-      {0x10400, 3390, 1},
-      {0xffffffff, -1, 0},
+      {0x010c, 189, 1},
 
-      {0x0386, 730, 1},
+      {0x1f0c, 2249, 1},
 
-      {0x1e00, 1861, 1},
+      {0x2c0c, 2612, 1},
 
-      {0x0400, 996, 1},
+      {0x01a9, 685, 1},
 
-      {0x0100, 171, 1},
+      {0x1fa9, 214, 2},
 
-      {0x216b, 2474, 1},
+      {0x053d, 1384, 1},
 
-      {0x2c00, 2570, 1},
-      {0xffffffff, -1, 0},
+      {0x023d, 378, 1},
 
-      {0x021c, 544, 1},
+      {0x24c2, 2534, 1},
 
-      {0x1e2a, 1924, 1},
+      {0x1ca9, 1537, 1},
 
-      {0x042a, 977, 1},
+      {0xaba9, 1771, 1},
 
-      {0x012a, 234, 1},
+      {0x10ca9, 3762, 1},
 
-      {0x1f2a, 2279, 1},
+      {0x10408, 3435, 1},
 
-      {0x2c2a, 2696, 1},
+      {0x051c, 1318, 1},
 
-      {0x10426, 3504, 1},
+      {0x021c, 544, 1},
 
-      {0xa72a, 3138, 1},
+      {0x1e08, 1879, 1},
 
-      {0xff33, 3366, 1},
+      {0x0408, 1023, 1},
 
-      {0x1e26, 1918, 1},
+      {0x0108, 183, 1},
 
-      {0x0426, 965, 1},
+      {0x1f08, 2237, 1},
 
-      {0x0126, 228, 1},
+      {0x2c08, 2600, 1},
 
-      {0x1f95, 194, 2},
+      {0x0386, 733, 1},
 
-      {0x2c26, 2684, 1},
+      {0x10414, 3471, 1},
       {0xffffffff, -1, 0},
 
-      {0xa726, 3132, 1},
+      {0x13fa, 1846, 1},
 
-      {0x1c95, 1474, 1},
+      {0x1e14, 1897, 1},
 
-      {0xab95, 1708, 1},
+      {0x0414, 909, 1},
 
-      {0x10c95, 3681, 1},
+      {0x0114, 201, 1},
+      {0xffffffff, -1, 0},
 
-      {0x054a, 1420, 1},
+      {0x2c14, 2636, 1},
 
-      {0x039e, 789, 1},
+      {0x0540, 1393, 1},
 
-      {0x1e2e, 1930, 1},
+      {0x1f6d, 2372, 1},
 
-      {0x042e, 990, 1},
+      {0x2c6d, 607, 1},
 
-      {0x012e, 240, 1},
+      {0x038f, 842, 1},
 
-      {0x1f2e, 2291, 1},
+      {0x10406, 3429, 1},
 
-      {0x2c2e, 2708, 1},
+      {0x054a, 1423, 1},
 
-      {0x053d, 1381, 1},
+      {0x024a, 595, 1},
 
-      {0xa72e, 3144, 1},
+      {0x1e06, 1876, 1},
 
-      {0x1feb, 2408, 1},
+      {0x0406, 1017, 1},
 
-      {0x2ceb, 2885, 1},
+      {0x0106, 180, 1},
 
-      {0x051a, 1312, 1},
+      {0x10404, 3423, 1},
 
-      {0x03fa, 890, 1},
+      {0x2c06, 2594, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1e2c, 1927, 1},
+      {0x1e04, 1873, 1},
 
-      {0x042c, 984, 1},
+      {0x0404, 1011, 1},
 
-      {0x012c, 237, 1},
+      {0x0104, 177, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1f2c, 2285, 1},
+      {0x2c04, 2588, 1},
 
-      {0x2c2c, 2702, 1},
+      {0x1ee0, 2189, 1},
 
-      {0x038e, 836, 1},
+      {0x04e0, 1228, 1},
 
-      {0xa72c, 3141, 1},
+      {0x01e0, 459, 1},
 
-      {0xfb16, 125, 2},
-      {0xffffffff, -1, 0},
+      {0x10400, 3411, 1},
 
-      {0x0518, 1309, 1},
+      {0x2ce0, 2885, 1},
 
-      {0xff30, 3357, 1},
+      {0x03c2, 806, 1},
 
-      {0x1e28, 1921, 1},
+      {0x1e00, 1867, 1},
 
-      {0x0428, 971, 1},
+      {0x0400, 999, 1},
 
-      {0x0128, 231, 1},
+      {0x0100, 171, 1},
 
-      {0x1f28, 2273, 1},
+      {0x0179, 345, 1},
 
-      {0x2c28, 2690, 1},
+      {0x2c00, 2576, 1},
 
-      {0x038a, 739, 1},
+      {0x16e5d, 3975, 1},
 
-      {0xa728, 3135, 1},
-      {0xffffffff, -1, 0},
+      {0x039e, 792, 1},
 
-      {0x212a, 27, 1},
-      {0xffffffff, -1, 0},
+      {0xa779, 3246, 1},
 
-      {0x104cd, 3597, 1},
+      {0x10426, 3525, 1},
 
-      {0x050e, 1294, 1},
+      {0xab79, 1627, 1},
       {0xffffffff, -1, 0},
 
-      {0x16e4a, 3897, 1},
-
-      {0x04cd, 1195, 1},
+      {0x1e26, 1924, 1},
 
-      {0x01cd, 429, 1},
+      {0x0426, 968, 1},
 
-      {0x2126, 823, 1},
+      {0x0126, 228, 1},
 
-      {0x10424, 3498, 1},
+      {0xfb16, 125, 2},
 
-      {0x00cd, 117, 1},
+      {0x2c26, 2690, 1},
 
-      {0x050c, 1291, 1},
+      {0x038e, 839, 1},
 
-      {0x1e24, 1915, 1},
+      {0xa726, 3138, 1},
 
-      {0x0424, 959, 1},
+      {0x16e40, 3888, 1},
 
-      {0x0124, 225, 1},
+      {0x1ef4, 2219, 1},
 
-      {0x1e916, 4029, 1},
+      {0x04f4, 1258, 1},
 
-      {0x2c24, 2678, 1},
-      {0xffffffff, -1, 0},
+      {0x01f4, 487, 1},
 
-      {0xa724, 3129, 1},
+      {0x1ff4, 101, 2},
 
-      {0x10422, 3492, 1},
+      {0x16e4a, 3918, 1},
 
-      {0x0514, 1303, 1},
+      {0x051a, 1315, 1},
 
-      {0x104c9, 3585, 1},
+      {0x021a, 541, 1},
 
-      {0x1e22, 1912, 1},
+      {0x10a9, 2927, 1},
 
-      {0x0422, 951, 1},
+      {0x1f4d, 2342, 1},
 
-      {0x0122, 222, 1},
+      {0xff2e, 3372, 1},
 
-      {0x04c9, 1189, 1},
+      {0x004d, 34, 1},
+      {0xffffffff, -1, 0},
 
-      {0x2c22, 2672, 1},
+      {0x118a9, 3819, 1},
 
-      {0x1fc9, 2384, 1},
+      {0x0518, 1312, 1},
 
-      {0xa722, 3126, 1},
+      {0x0218, 538, 1},
 
-      {0x00c9, 105, 1},
+      {0x1e8c, 2078, 1},
 
-      {0x104c4, 3570, 1},
+      {0x048c, 1102, 1},
 
-      {0x0508, 1285, 1},
+      {0x038a, 742, 1},
 
-      {0x0553, 1447, 1},
+      {0x1f8c, 149, 2},
 
-      {0x1ec4, 2141, 1},
+      {0x2c8c, 2759, 1},
       {0xffffffff, -1, 0},
 
-      {0x01c4, 417, 1},
+      {0x050e, 1297, 1},
 
-      {0x1fc4, 54, 2},
+      {0x020e, 523, 1},
 
-      {0x2cc4, 2837, 1},
+      {0xab8c, 1684, 1},
 
-      {0x00c4, 89, 1},
+      {0x10c8c, 3675, 1},
 
-      {0x0506, 1282, 1},
+      {0x104bf, 3576, 1},
 
-      {0x104c2, 3564, 1},
+      {0x052e, 1345, 1},
 
-      {0x1f69, 2354, 1},
+      {0x022e, 568, 1},
 
-      {0x2c69, 2723, 1},
+      {0x1e2c, 1933, 1},
 
-      {0x1ec2, 2138, 1},
+      {0x042c, 987, 1},
 
-      {0x104d1, 3609, 1},
+      {0x012c, 237, 1},
 
-      {0x0504, 1279, 1},
+      {0x1f2c, 2291, 1},
 
-      {0x1fc2, 253, 2},
+      {0x2c2c, 2708, 1},
 
-      {0x2cc2, 2834, 1},
+      {0xa68c, 3108, 1},
 
-      {0x00c2, 83, 1},
+      {0xa72c, 3147, 1},
 
-      {0x01d1, 435, 1},
+      {0x1cbf, 1597, 1},
 
-      {0x16e5d, 3954, 1},
+      {0xabbf, 1837, 1},
 
-      {0x104b7, 3531, 1},
+      {0x050c, 1294, 1},
 
-      {0x00d1, 129, 1},
+      {0x020c, 520, 1},
 
-      {0x0500, 1273, 1},
+      {0x1e28, 1927, 1},
 
-      {0x013f, 261, 1},
-
-      {0x1f3f, 2318, 1},
-
-      {0x01b7, 703, 1},
-
-      {0x1fb7, 10, 3},
-
-      {0x0230, 571, 1},
-
-      {0x16e5b, 3948, 1},
+      {0x0428, 974, 1},
 
-      {0x052a, 1336, 1},
-
-      {0x1cb7, 1576, 1},
+      {0x0128, 231, 1},
 
-      {0xabb7, 1810, 1},
+      {0x1f28, 2279, 1},
 
-      {0x03e0, 857, 1},
-      {0xffffffff, -1, 0},
+      {0x2c28, 2696, 1},
 
-      {0x104b3, 3519, 1},
+      {0x1fab, 224, 2},
 
-      {0x1e921, 4062, 1},
+      {0xa728, 3141, 1},
       {0xffffffff, -1, 0},
 
-      {0x0526, 1330, 1},
-
-      {0x16e53, 3924, 1},
-
-      {0x01b3, 402, 1},
-
-      {0x1fb3, 62, 2},
-
-      {0x024a, 595, 1},
-      {0xffffffff, -1, 0},
+      {0xa7ab, 631, 1},
 
-      {0xa7b3, 3309, 1},
+      {0x1cab, 1543, 1},
 
-      {0x1cb3, 1564, 1},
+      {0xabab, 1777, 1},
 
-      {0xabb3, 1798, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x10cab, 3768, 1},
 
-      {0x023d, 378, 1},
+      {0x16e5b, 3969, 1},
 
-      {0x052e, 1342, 1},
+      {0x10424, 3519, 1},
 
-      {0x1fab, 224, 2},
+      {0x0508, 1288, 1},
 
-      {0x10cd, 3011, 1},
+      {0x0208, 514, 1},
 
-      {0x021a, 541, 1},
+      {0x1e24, 1921, 1},
 
-      {0xa7ab, 631, 1},
+      {0x0424, 962, 1},
 
-      {0x1cab, 1540, 1},
+      {0x0124, 225, 1},
+      {0xffffffff, -1, 0},
 
-      {0xabab, 1774, 1},
+      {0x2c24, 2684, 1},
 
-      {0x10cab, 3747, 1},
+      {0x104b7, 3552, 1},
 
-      {0x2169, 2468, 1},
-      {0xffffffff, -1, 0},
+      {0xa724, 3135, 1},
 
-      {0x1e56, 1990, 1},
+      {0x0514, 1306, 1},
 
-      {0x052c, 1339, 1},
+      {0x0214, 532, 1},
 
-      {0x0156, 294, 1},
+      {0x03fa, 893, 1},
 
-      {0x1f56, 62, 3},
+      {0x01b7, 706, 1},
 
-      {0x0218, 538, 1},
+      {0x1fb7, 10, 3},
 
-      {0x0056, 62, 1},
+      {0x104b3, 3540, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0xa756, 3201, 1},
+      {0x1cb7, 1579, 1},
 
-      {0xff2a, 3339, 1},
+      {0xabb7, 1813, 1},
 
-      {0x1e54, 1987, 1},
-      {0xffffffff, -1, 0},
+      {0x01b3, 402, 1},
 
-      {0x0154, 291, 1},
+      {0x1fb3, 62, 2},
 
-      {0x1f54, 57, 3},
+      {0x0506, 1285, 1},
 
-      {0x0528, 1333, 1},
+      {0x0206, 511, 1},
 
-      {0x0054, 56, 1},
+      {0xa7b3, 3330, 1},
 
-      {0xa754, 3198, 1},
+      {0x1cb3, 1567, 1},
 
-      {0xff26, 3327, 1},
+      {0xabb3, 1801, 1},
 
-      {0x104ca, 3588, 1},
+      {0x10422, 3513, 1},
 
-      {0x020e, 523, 1},
+      {0x0504, 1282, 1},
 
-      {0xa656, 3048, 1},
+      {0x0204, 508, 1},
 
-      {0x1eca, 2150, 1},
+      {0x1e22, 1918, 1},
 
-      {0x10c4, 3002, 1},
+      {0x0422, 954, 1},
 
-      {0x01ca, 425, 1},
+      {0x0122, 222, 1},
 
-      {0x1fca, 2387, 1},
+      {0xff26, 3348, 1},
 
-      {0x2cca, 2846, 1},
+      {0x2c22, 2678, 1},
 
-      {0x00ca, 108, 1},
+      {0xff35, 3393, 1},
 
-      {0x020c, 520, 1},
+      {0xa722, 3132, 1},
 
-      {0xa654, 3045, 1},
+      {0x104b1, 3534, 1},
 
-      {0xff2e, 3351, 1},
+      {0x0143, 267, 1},
 
-      {0x1e9b, 2005, 1},
+      {0x0500, 1276, 1},
 
-      {0x0051, 46, 1},
+      {0x0200, 502, 1},
 
-      {0x10c2, 2996, 1},
+      {0x0043, 6, 1},
 
-      {0x1f9b, 184, 2},
+      {0x01b1, 697, 1},
+      {0xffffffff, -1, 0},
 
-      {0x0524, 1327, 1},
+      {0x2163, 2456, 1},
       {0xffffffff, -1, 0},
 
-      {0x0214, 532, 1},
+      {0xa7b1, 688, 1},
 
-      {0x1c9b, 1492, 1},
+      {0x1cb1, 1561, 1},
 
-      {0xab9b, 1726, 1},
+      {0xabb1, 1795, 1},
 
-      {0x10c9b, 3699, 1},
+      {0x10cb1, 3786, 1},
 
-      {0xff2c, 3345, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x0526, 1333, 1},
 
-      {0x10b7, 2963, 1},
+      {0x0226, 556, 1},
 
-      {0x0522, 1324, 1},
+      {0x0535, 1360, 1},
 
-      {0x1e91c, 4047, 1},
+      {0x10bf, 2993, 1},
 
-      {0x0395, 755, 1},
+      {0x03a9, 826, 1},
 
-      {0x0208, 514, 1},
+      {0x01a7, 393, 1},
+
+      {0x1fa7, 244, 2},
 
-      {0x118b7, 3840, 1},
+      {0x1e916, 4050, 1},
 
-      {0x24cd, 2561, 1},
+      {0x118bf, 3885, 1},
       {0xffffffff, -1, 0},
 
-      {0xff28, 3333, 1},
+      {0x1ca7, 1531, 1},
 
-      {0x104c3, 3567, 1},
-      {0xffffffff, -1, 0},
+      {0xaba7, 1765, 1},
 
-      {0x104b1, 3513, 1},
+      {0x10ca7, 3756, 1},
 
-      {0x0206, 511, 1},
+      {0x054d, 1432, 1},
 
-      {0x04c3, 1180, 1},
+      {0x1f6b, 2366, 1},
 
-      {0x10b3, 2951, 1},
+      {0x2c6b, 2732, 1},
 
-      {0x1fc3, 71, 2},
+      {0x10ab, 2933, 1},
 
-      {0x01b1, 694, 1},
+      {0x1e48, 1975, 1},
+      {0xffffffff, -1, 0},
 
-      {0x00c3, 86, 1},
+      {0xff2c, 3366, 1},
 
-      {0x0204, 508, 1},
+      {0x1f48, 2327, 1},
 
-      {0x118b3, 3828, 1},
+      {0x118ab, 3825, 1},
 
-      {0xa7b1, 685, 1},
+      {0x0048, 21, 1},
 
-      {0x1cb1, 1558, 1},
+      {0xa748, 3186, 1},
 
-      {0xabb1, 1792, 1},
+      {0x1e88, 2072, 1},
 
-      {0x10cb1, 3765, 1},
+      {0x1f69, 2360, 1},
 
-      {0x10ab, 2927, 1},
+      {0x2c69, 2729, 1},
 
-      {0x24c9, 2549, 1},
+      {0x1f88, 129, 2},
 
-      {0x0200, 502, 1},
+      {0x2c88, 2753, 1},
       {0xffffffff, -1, 0},
 
-      {0xff24, 3321, 1},
+      {0xff28, 3354, 1},
 
-      {0x118ab, 3804, 1},
+      {0x1c88, 3035, 1},
 
-      {0x0531, 1345, 1},
+      {0xab88, 1672, 1},
 
-      {0x053f, 1387, 1},
+      {0x10c88, 3663, 1},
 
-      {0x10420, 3486, 1},
+      {0x1e42, 1966, 1},
 
-      {0x022a, 562, 1},
-
-      {0x24c4, 2534, 1},
+      {0xa648, 3032, 1},
 
-      {0x1e20, 1909, 1},
+      {0x052c, 1342, 1},
 
-      {0x0420, 944, 1},
+      {0x022c, 565, 1},
 
-      {0x0120, 219, 1},
+      {0x10b7, 2969, 1},
 
-      {0xff22, 3315, 1},
+      {0x0042, 3, 1},
 
-      {0x2c20, 2666, 1},
+      {0xa742, 3177, 1},
       {0xffffffff, -1, 0},
 
-      {0x0226, 556, 1},
+      {0xa688, 3102, 1},
 
-      {0x01a9, 682, 1},
+      {0x118b7, 3861, 1},
 
-      {0x1fa9, 214, 2},
+      {0x216d, 2486, 1},
 
-      {0x24c2, 2528, 1},
+      {0x10b3, 2957, 1},
 
-      {0x01a7, 393, 1},
+      {0xff24, 3342, 1},
 
-      {0x1fa7, 244, 2},
+      {0x0528, 1336, 1},
 
-      {0x1ca9, 1534, 1},
+      {0x0228, 559, 1},
 
-      {0xaba9, 1768, 1},
+      {0x03e0, 860, 1},
 
-      {0x10ca9, 3741, 1},
+      {0x118b3, 3849, 1},
 
-      {0x1ca7, 1528, 1},
+      {0x1e56, 1996, 1},
 
-      {0xaba7, 1762, 1},
+      {0xa642, 3023, 1},
 
-      {0x10ca7, 3735, 1},
+      {0x0156, 294, 1},
 
-      {0x022e, 568, 1},
+      {0x1f56, 62, 3},
 
-      {0x1e88, 2066, 1},
+      {0x16e4d, 3927, 1},
 
-      {0x24b7, 2495, 1},
-      {0xffffffff, -1, 0},
+      {0x0056, 62, 1},
 
-      {0x1f88, 129, 2},
+      {0xa756, 3207, 1},
 
-      {0x2c88, 2747, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x24bf, 2525, 1},
 
-      {0x1c88, 3029, 1},
+      {0x1f59, 2345, 1},
 
-      {0xab88, 1669, 1},
+      {0x1e4e, 1984, 1},
 
-      {0x10c88, 3642, 1},
+      {0x0059, 71, 1},
 
-      {0x022c, 565, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x014e, 282, 1},
 
-      {0xff31, 3360, 1},
+      {0x0524, 1330, 1},
 
-      {0x1e52, 1984, 1},
+      {0x0224, 553, 1},
 
-      {0x0556, 1456, 1},
+      {0x004e, 37, 1},
 
-      {0x0152, 288, 1},
+      {0xa74e, 3195, 1},
 
-      {0x1f52, 52, 3},
+      {0x10b1, 2951, 1},
 
-      {0xa688, 3096, 1},
+      {0x042d, 990, 1},
 
-      {0x0052, 49, 1},
+      {0xa656, 3054, 1},
 
-      {0xa752, 3195, 1},
+      {0x1f2d, 2294, 1},
 
-      {0x0228, 559, 1},
+      {0x2c2d, 2711, 1},
 
-      {0x1e50, 1981, 1},
+      {0x118b1, 3843, 1},
 
-      {0x0554, 1450, 1},
+      {0xff22, 3336, 1},
 
-      {0x0150, 285, 1},
+      {0x03f4, 768, 1},
 
-      {0x1f50, 84, 2},
+      {0x042f, 996, 1},
 
-      {0x1041e, 3480, 1},
+      {0x1e91c, 4068, 1},
 
-      {0x0050, 43, 1},
+      {0x1f2f, 2300, 1},
 
-      {0xa750, 3192, 1},
+      {0xa64e, 3042, 1},
 
-      {0x1e1e, 1906, 1},
+      {0x104ce, 3621, 1},
 
-      {0x041e, 937, 1},
+      {0x10a7, 2921, 1},
 
-      {0x011e, 216, 1},
+      {0x2126, 826, 1},
 
-      {0xa652, 3042, 1},
+      {0x1ece, 2162, 1},
 
-      {0x2c1e, 2660, 1},
+      {0xfb14, 109, 2},
+      {0xffffffff, -1, 0},
 
-      {0x03c2, 803, 1},
+      {0x118a7, 3813, 1},
 
-      {0x10c3, 2999, 1},
-      {0xffffffff, -1, 0},
+      {0x2cce, 2858, 1},
 
-      {0x10b1, 2945, 1},
+      {0x00ce, 120, 1},
 
-      {0x03d1, 765, 1},
+      {0x104b9, 3558, 1},
 
-      {0x0551, 1441, 1},
+      {0x038c, 836, 1},
 
-      {0xa650, 3039, 1},
+      {0x0522, 1327, 1},
 
-      {0x0224, 553, 1},
+      {0x0222, 550, 1},
 
-      {0x118b1, 3822, 1},
+      {0xff33, 3387, 1},
 
-      {0x1e4e, 1978, 1},
-      {0xffffffff, -1, 0},
+      {0x24b7, 2501, 1},
 
-      {0x014e, 282, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x1fb9, 2426, 1},
 
-      {0x004e, 37, 1},
+      {0xfb06, 29, 2},
 
-      {0xa74e, 3189, 1},
+      {0x0543, 1402, 1},
 
-      {0x10412, 3444, 1},
+      {0x0243, 354, 1},
 
-      {0x0222, 550, 1},
+      {0x1cb9, 1585, 1},
 
-      {0x16e56, 3933, 1},
+      {0xabb9, 1819, 1},
 
-      {0x1e12, 1888, 1},
+      {0x1e54, 1993, 1},
 
-      {0x0412, 899, 1},
+      {0xfb04, 5, 3},
 
-      {0x0112, 198, 1},
+      {0x0154, 291, 1},
+
+      {0x1f54, 57, 3},
 
-      {0x24ca, 2552, 1},
+      {0xff31, 3381, 1},
 
-      {0x2c12, 2624, 1},
+      {0x0054, 56, 1},
 
-      {0x018f, 625, 1},
+      {0xa754, 3204, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1f8f, 164, 2},
+      {0x1e52, 1990, 1},
 
-      {0x16e54, 3927, 1},
+      {0x0533, 1354, 1},
 
-      {0xa64e, 3036, 1},
+      {0x0152, 288, 1},
 
-      {0x004f, 40, 1},
+      {0x1f52, 52, 3},
 
-      {0x10a9, 2921, 1},
+      {0xfb00, 4, 2},
 
-      {0xab8f, 1690, 1},
+      {0x0052, 49, 1},
 
-      {0x10c8f, 3663, 1},
+      {0xa752, 3201, 1},
 
-      {0x10a7, 2915, 1},
+      {0x03ab, 833, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1e48, 1969, 1},
+      {0x1e50, 1987, 1},
 
-      {0x118a9, 3798, 1},
+      {0xa654, 3051, 1},
 
-      {0x03ab, 830, 1},
+      {0x0150, 285, 1},
 
-      {0x1f48, 2321, 1},
+      {0x1f50, 84, 2},
 
-      {0x118a7, 3792, 1},
+      {0x0531, 1348, 1},
 
-      {0x0048, 21, 1},
+      {0x0050, 43, 1},
 
-      {0xa748, 3180, 1},
+      {0xa750, 3198, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x10410, 3438, 1},
-      {0xffffffff, -1, 0},
+      {0xa652, 3048, 1},
 
-      {0x16e51, 3918, 1},
+      {0x0548, 1417, 1},
 
-      {0x1e10, 1885, 1},
+      {0x0248, 592, 1},
 
-      {0x0410, 893, 1},
+      {0x10420, 3507, 1},
 
-      {0x0110, 195, 1},
+      {0x013f, 261, 1},
 
-      {0x104c0, 3558, 1},
+      {0x1f3f, 2324, 1},
 
-      {0x2c10, 2618, 1},
+      {0x1e20, 1915, 1},
 
-      {0x1e91a, 4041, 1},
+      {0x0420, 947, 1},
 
-      {0x1ec0, 2135, 1},
+      {0x0120, 219, 1},
 
-      {0x04c0, 1198, 1},
+      {0xa650, 3045, 1},
 
-      {0xa648, 3026, 1},
+      {0x2c20, 2672, 1},
       {0xffffffff, -1, 0},
 
-      {0x2cc0, 2831, 1},
+      {0x16e43, 3897, 1},
+      {0xffffffff, -1, 0},
 
-      {0x00c0, 77, 1},
+      {0x1e91a, 4062, 1},
       {0xffffffff, -1, 0},
 
-      {0x24c3, 2531, 1},
+      {0x1041e, 3501, 1},
+      {0xffffffff, -1, 0},
 
-      {0x0520, 1321, 1},
+      {0x0542, 1399, 1},
 
-      {0x104c8, 3582, 1},
+      {0x1e1e, 1912, 1},
 
-      {0x1e918, 4035, 1},
-      {0xffffffff, -1, 0},
+      {0x041e, 940, 1},
 
-      {0x1ec8, 2147, 1},
+      {0x011e, 216, 1},
 
-      {0xfb14, 109, 2},
+      {0x1e918, 4056, 1},
 
-      {0x01c8, 421, 1},
+      {0x2c1e, 2666, 1},
 
-      {0x1fc8, 2381, 1},
+      {0x10412, 3465, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x2cc8, 2843, 1},
+      {0x1e12, 1894, 1},
 
-      {0x00c8, 102, 1},
+      {0x0412, 902, 1},
 
-      {0x104b9, 3537, 1},
+      {0x0112, 198, 1},
 
-      {0x1efc, 2225, 1},
+      {0x1e90e, 4026, 1},
 
-      {0x04fc, 1267, 1},
+      {0x2c12, 2630, 1},
+      {0xffffffff, -1, 0},
 
-      {0x01fc, 496, 1},
+      {0x10410, 3459, 1},
 
-      {0x1ffc, 96, 2},
+      {0xff2d, 3369, 1},
 
-      {0x1e90e, 4005, 1},
+      {0x0556, 1459, 1},
 
-      {0x1fb9, 2420, 1},
+      {0x1e10, 1891, 1},
 
-      {0x104b5, 3525, 1},
+      {0x0410, 896, 1},
 
-      {0x039b, 779, 1},
+      {0x0110, 195, 1},
       {0xffffffff, -1, 0},
 
-      {0x1cb9, 1582, 1},
+      {0x2c10, 2624, 1},
 
-      {0xabb9, 1816, 1},
+      {0xff2f, 3375, 1},
 
-      {0x01b5, 405, 1},
+      {0x10b9, 2975, 1},
 
-      {0x1e90c, 3999, 1},
+      {0x16e48, 3912, 1},
 
-      {0xfb06, 29, 2},
+      {0x054e, 1435, 1},
 
-      {0x00b5, 782, 1},
-      {0xffffffff, -1, 0},
+      {0x024e, 601, 1},
 
-      {0x1cb5, 1570, 1},
+      {0x1e90c, 4020, 1},
 
-      {0xabb5, 1804, 1},
+      {0x118b9, 3867, 1},
       {0xffffffff, -1, 0},
 
-      {0xfb04, 5, 3},
+      {0x104ca, 3609, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1fad, 234, 2},
+      {0x1eca, 2156, 1},
 
-      {0x1e914, 4023, 1},
+      {0x03a7, 820, 1},
 
-      {0x0552, 1444, 1},
+      {0x01ca, 425, 1},
 
-      {0xa7ad, 661, 1},
+      {0x1fca, 2393, 1},
 
-      {0x1cad, 1546, 1},
+      {0x2cca, 2852, 1},
 
-      {0xabad, 1780, 1},
+      {0x00ca, 108, 1},
 
-      {0x10cad, 3753, 1},
+      {0x104c8, 3603, 1},
+      {0xffffffff, -1, 0},
 
-      {0xfb00, 4, 2},
+      {0x16e42, 3894, 1},
 
-      {0x01af, 399, 1},
+      {0x1ec8, 2153, 1},
 
-      {0x1faf, 244, 2},
+      {0x1e908, 4008, 1},
 
-      {0x0550, 1438, 1},
-      {0xffffffff, -1, 0},
+      {0x01c8, 421, 1},
 
-      {0x1e908, 3987, 1},
+      {0x1fc8, 2387, 1},
 
-      {0x1caf, 1552, 1},
+      {0x2cc8, 2849, 1},
 
-      {0xabaf, 1786, 1},
+      {0x00c8, 102, 1},
 
-      {0x10caf, 3759, 1},
-      {0xffffffff, -1, 0},
+      {0x1e6c, 2030, 1},
 
-      {0x051e, 1318, 1},
+      {0x046c, 1066, 1},
 
-      {0x018b, 366, 1},
+      {0x016c, 327, 1},
 
-      {0x1f8b, 144, 2},
+      {0x1f6c, 2369, 1},
 
-      {0x1e906, 3981, 1},
-      {0xffffffff, -1, 0},
+      {0x1e914, 4044, 1},
 
-      {0xa78b, 3261, 1},
+      {0x104c6, 3597, 1},
 
-      {0x1fa5, 234, 2},
+      {0xa76c, 3240, 1},
 
-      {0xab8b, 1678, 1},
+      {0x0388, 736, 1},
 
-      {0x10c8b, 3651, 1},
+      {0x1ec6, 2150, 1},
 
-      {0x1e904, 3975, 1},
+      {0x216b, 2480, 1},
 
-      {0x1ca5, 1522, 1},
+      {0x16e56, 3954, 1},
 
-      {0xaba5, 1756, 1},
+      {0x1fc6, 67, 2},
 
-      {0x10ca5, 3729, 1},
-      {0xffffffff, -1, 0},
+      {0x2cc6, 2846, 1},
 
-      {0x054e, 1432, 1},
+      {0x00c6, 96, 1},
 
-      {0x1eda, 2174, 1},
+      {0xa7c6, 1864, 1},
 
-      {0x04da, 1216, 1},
+      {0x16e59, 3963, 1},
 
-      {0x1e900, 3963, 1},
+      {0x1e906, 4002, 1},
 
-      {0x1fda, 2393, 1},
+      {0x0554, 1453, 1},
 
-      {0x2cda, 2870, 1},
+      {0xa66c, 3087, 1},
 
-      {0x00da, 153, 1},
+      {0x16e4e, 3930, 1},
 
-      {0x10c0, 2990, 1},
+      {0x2169, 2474, 1},
 
-      {0x16e52, 3921, 1},
+      {0x24ce, 2570, 1},
 
-      {0x03a9, 823, 1},
+      {0x1e904, 3996, 1},
 
-      {0x0512, 1300, 1},
+      {0x104c5, 3594, 1},
       {0xffffffff, -1, 0},
 
-      {0x03a7, 817, 1},
+      {0x0552, 1447, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1fa3, 224, 2},
+      {0x04c5, 1186, 1},
 
-      {0x054f, 1435, 1},
+      {0x01c5, 417, 1},
       {0xffffffff, -1, 0},
 
-      {0x16e50, 3915, 1},
+      {0x24b9, 2507, 1},
+
+      {0x00c5, 92, 1},
 
-      {0x1ca3, 1516, 1},
+      {0xa7c5, 682, 1},
 
-      {0xaba3, 1750, 1},
+      {0x1e900, 3984, 1},
 
-      {0x10ca3, 3723, 1},
+      {0x0550, 1441, 1},
 
-      {0x13fc, 1849, 1},
+      {0x104c0, 3579, 1},
 
-      {0x1fa1, 214, 2},
+      {0x104b5, 3546, 1},
       {0xffffffff, -1, 0},
 
-      {0x0388, 733, 1},
+      {0x1ec0, 2141, 1},
 
-      {0x0548, 1414, 1},
+      {0x04c0, 1201, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1ca1, 1510, 1},
+      {0x01b5, 405, 1},
 
-      {0xaba1, 1744, 1},
+      {0x2cc0, 2837, 1},
 
-      {0x10ca1, 3717, 1},
+      {0x00c0, 77, 1},
 
-      {0x10b9, 2969, 1},
+      {0x00b5, 785, 1},
 
-      {0x1ef4, 2213, 1},
+      {0x053f, 1390, 1},
 
-      {0x04f4, 1255, 1},
+      {0x1cb5, 1573, 1},
 
-      {0x01f4, 487, 1},
+      {0xabb5, 1807, 1},
 
-      {0x1ff4, 101, 2},
+      {0x1fad, 234, 2},
 
-      {0x118b9, 3846, 1},
+      {0x0520, 1324, 1},
 
-      {0x0510, 1297, 1},
+      {0x0220, 381, 1},
 
-      {0x10b5, 2957, 1},
+      {0xa7ad, 661, 1},
 
-      {0x104cf, 3603, 1},
+      {0x1cad, 1549, 1},
 
-      {0x16e4e, 3909, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0xabad, 1783, 1},
 
-      {0x118b5, 3834, 1},
+      {0x10cad, 3774, 1},
 
-      {0x01cf, 432, 1},
+      {0x1efc, 2231, 1},
 
-      {0x0220, 381, 1},
+      {0x04fc, 1270, 1},
 
-      {0x10ad, 2933, 1},
+      {0x01fc, 496, 1},
 
-      {0x00cf, 123, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x1ffc, 96, 2},
 
-      {0x1e97, 34, 2},
+      {0x16e54, 3948, 1},
 
-      {0x118ad, 3810, 1},
+      {0x1fa5, 234, 2},
+      {0xffffffff, -1, 0},
 
-      {0x0197, 649, 1},
+      {0x051e, 1321, 1},
 
-      {0x1f97, 204, 2},
+      {0x021e, 547, 1},
 
-      {0x16e4f, 3912, 1},
+      {0x1ca5, 1525, 1},
 
-      {0x10af, 2939, 1},
-      {0xffffffff, -1, 0},
+      {0xaba5, 1759, 1},
 
-      {0x1c97, 1480, 1},
+      {0x10ca5, 3750, 1},
 
-      {0xab97, 1714, 1},
+      {0x16e52, 3942, 1},
 
-      {0x10c97, 3687, 1},
+      {0x01af, 399, 1},
 
-      {0x118af, 3816, 1},
+      {0x1faf, 244, 2},
 
-      {0x0181, 613, 1},
+      {0x0512, 1303, 1},
 
-      {0x1f81, 134, 2},
+      {0x0212, 529, 1},
       {0xffffffff, -1, 0},
 
-      {0x16e48, 3891, 1},
+      {0x1caf, 1555, 1},
 
-      {0x24c0, 2522, 1},
+      {0xabaf, 1789, 1},
 
-      {0x1c81, 906, 1},
+      {0x10caf, 3780, 1},
 
-      {0xab81, 1648, 1},
+      {0x16e50, 3936, 1},
 
-      {0x10c81, 3621, 1},
+      {0x1fa3, 224, 2},
+      {0xffffffff, -1, 0},
 
-      {0x10a5, 2909, 1},
+      {0x0510, 1300, 1},
 
-      {0x1e6c, 2024, 1},
+      {0x0210, 526, 1},
 
-      {0x046c, 1063, 1},
+      {0x1ca3, 1519, 1},
 
-      {0x016c, 327, 1},
+      {0xaba3, 1753, 1},
 
-      {0x1f6c, 2363, 1},
+      {0x10ca3, 3744, 1},
 
-      {0x118a5, 3786, 1},
-      {0xffffffff, -1, 0},
+      {0x0429, 977, 1},
 
-      {0xa76c, 3234, 1},
+      {0x1fa1, 214, 2},
 
-      {0x24c8, 2546, 1},
+      {0x1f29, 2282, 1},
 
-      {0x1e6a, 2021, 1},
+      {0x2c29, 2699, 1},
+      {0xffffffff, -1, 0},
 
-      {0x046a, 1060, 1},
+      {0x1ca1, 1513, 1},
 
-      {0x016a, 324, 1},
+      {0xaba1, 1747, 1},
 
-      {0x1f6a, 2357, 1},
+      {0x10ca1, 3738, 1},
 
-      {0x038f, 839, 1},
+      {0x1e6a, 2027, 1},
 
-      {0x1e32, 1936, 1},
+      {0x046a, 1063, 1},
 
-      {0xa76a, 3231, 1},
+      {0x016a, 324, 1},
 
-      {0x0132, 243, 1},
+      {0x1f6a, 2363, 1},
 
-      {0x24b9, 2501, 1},
+      {0x1e46, 1972, 1},
       {0xffffffff, -1, 0},
 
-      {0xa66c, 3081, 1},
+      {0xa76a, 3237, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0xa732, 3147, 1},
+      {0x0046, 15, 1},
 
-      {0x10a3, 2903, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0xa746, 3183, 1},
 
-      {0x021e, 547, 1},
+      {0x10c5, 3011, 1},
       {0xffffffff, -1, 0},
 
-      {0x118a3, 3780, 1},
+      {0x1e68, 2024, 1},
 
-      {0xa66a, 3078, 1},
+      {0x0468, 1060, 1},
 
-      {0x1f59, 2339, 1},
+      {0x0168, 321, 1},
 
-      {0x10a1, 2897, 1},
+      {0x1f68, 2357, 1},
+      {0xffffffff, -1, 0},
 
-      {0x0059, 71, 1},
+      {0xa66a, 3084, 1},
 
-      {0x1e64, 2012, 1},
+      {0xa768, 3234, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x0464, 1051, 1},
+      {0xa646, 3029, 1},
 
-      {0x0164, 315, 1},
+      {0x10c0, 2996, 1},
 
-      {0x118a1, 3774, 1},
+      {0x10b5, 2963, 1},
 
-      {0x2c64, 676, 1},
-      {0xffffffff, -1, 0},
+      {0x24ca, 2558, 1},
 
-      {0xa764, 3222, 1},
+      {0x13fc, 1852, 1},
 
-      {0x024e, 601, 1},
+      {0x1e44, 1969, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1e68, 2018, 1},
+      {0x118b5, 3855, 1},
 
-      {0x0468, 1057, 1},
+      {0x10ad, 2939, 1},
 
-      {0x0168, 321, 1},
+      {0xa668, 3081, 1},
 
-      {0x1f68, 2351, 1},
+      {0x0044, 9, 1},
 
-      {0x10417, 3459, 1},
+      {0xa744, 3180, 1},
 
-      {0x042f, 993, 1},
+      {0x24c8, 2552, 1},
 
-      {0xa768, 3228, 1},
+      {0x118ad, 3831, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1f2f, 2294, 1},
+      {0x1e64, 2018, 1},
 
-      {0x0417, 916, 1},
+      {0x0464, 1054, 1},
 
-      {0x0212, 529, 1},
+      {0x0164, 315, 1},
+      {0xffffffff, -1, 0},
 
-      {0xa664, 3069, 1},
+      {0x2c64, 676, 1},
 
-      {0x2c17, 2639, 1},
+      {0x10a5, 2915, 1},
 
-      {0x216c, 2477, 1},
+      {0xa764, 3228, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1e62, 2009, 1},
+      {0xa644, 3026, 1},
+      {0xffffffff, -1, 0},
 
-      {0x0462, 1047, 1},
+      {0x118a5, 3807, 1},
 
-      {0x0162, 312, 1},
+      {0x24c6, 2546, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1e46, 1966, 1},
+      {0x10af, 2945, 1},
 
-      {0x2c62, 658, 1},
+      {0x1e32, 1942, 1},
+      {0xffffffff, -1, 0},
 
-      {0xa668, 3075, 1},
+      {0x0132, 243, 1},
 
-      {0xa762, 3219, 1},
+      {0xa664, 3075, 1},
 
-      {0x216a, 2471, 1},
+      {0x118af, 3837, 1},
 
-      {0x0046, 15, 1},
+      {0x104cb, 3612, 1},
 
-      {0xa746, 3177, 1},
+      {0xa732, 3153, 1},
 
-      {0x0248, 592, 1},
+      {0x10a3, 2909, 1},
       {0xffffffff, -1, 0},
 
-      {0x2132, 2438, 1},
+      {0x04cb, 1195, 1},
 
-      {0x1e60, 2005, 1},
+      {0x01cb, 425, 1},
 
-      {0x0460, 1044, 1},
+      {0x1fcb, 2396, 1},
 
-      {0x0160, 309, 1},
+      {0x118a3, 3801, 1},
+
+      {0x00cb, 111, 1},
+
+      {0x24c5, 2543, 1},
+
+      {0x10a1, 2903, 1},
       {0xffffffff, -1, 0},
 
-      {0x2c60, 2711, 1},
+      {0x1e62, 2015, 1},
 
-      {0xa662, 3066, 1},
+      {0x0462, 1050, 1},
 
-      {0xa760, 3216, 1},
+      {0x0162, 312, 1},
 
-      {0x0210, 526, 1},
+      {0x118a1, 3795, 1},
 
-      {0xa646, 3023, 1},
+      {0x2c62, 658, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1e44, 1963, 1},
+      {0xa762, 3225, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1eec, 2201, 1},
+      {0x24c0, 2528, 1},
 
-      {0x04ec, 1243, 1},
+      {0x1e60, 2011, 1},
 
-      {0x01ec, 477, 1},
+      {0x0460, 1047, 1},
 
-      {0x1fec, 2435, 1},
+      {0x0160, 309, 1},
+      {0xffffffff, -1, 0},
 
-      {0x0044, 9, 1},
+      {0x2c60, 2717, 1},
 
-      {0xa744, 3174, 1},
+      {0xff29, 3357, 1},
 
-      {0x2164, 2453, 1},
+      {0xa760, 3222, 1},
       {0xffffffff, -1, 0},
 
-      {0xa660, 3063, 1},
+      {0xa662, 3072, 1},
 
-      {0x1ee2, 2186, 1},
+      {0x1ee2, 2192, 1},
 
-      {0x04e2, 1228, 1},
+      {0x04e2, 1231, 1},
 
       {0x01e2, 462, 1},
 
       {0x1fe2, 36, 3},
 
-      {0x2ce2, 2882, 1},
+      {0x2ce2, 2888, 1},
 
-      {0x2168, 2465, 1},
+      {0x042b, 984, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1ed8, 2171, 1},
+      {0x1f2b, 2288, 1},
 
-      {0x04d8, 1213, 1},
+      {0x2c2b, 2705, 1},
 
-      {0xa644, 3020, 1},
+      {0xa660, 3069, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1fd8, 2423, 1},
+      {0x216c, 2483, 1},
 
-      {0x2cd8, 2867, 1},
+      {0x1eda, 2180, 1},
 
-      {0x00d8, 147, 1},
+      {0x04da, 1219, 1},
 
-      {0x1ede, 2180, 1},
+      {0x104bd, 3570, 1},
 
-      {0x04de, 1222, 1},
+      {0x1fda, 2399, 1},
 
-      {0x01de, 456, 1},
+      {0x2cda, 2876, 1},
 
-      {0x03a5, 810, 1},
+      {0x00da, 153, 1},
 
-      {0x2cde, 2876, 1},
+      {0x1ed8, 2177, 1},
 
-      {0x00de, 165, 1},
+      {0x04d8, 1216, 1},
+      {0xffffffff, -1, 0},
 
-      {0x2162, 2447, 1},
+      {0x1fd8, 2429, 1},
 
-      {0x1ed6, 2168, 1},
+      {0x2cd8, 2873, 1},
 
-      {0x04d6, 1210, 1},
+      {0x00d8, 147, 1},
 
-      {0x24cf, 2567, 1},
+      {0x1cbd, 1591, 1},
 
-      {0x1fd6, 76, 2},
+      {0xabbd, 1831, 1},
 
-      {0x2cd6, 2864, 1},
+      {0x0546, 1411, 1},
 
-      {0x00d6, 144, 1},
-      {0xffffffff, -1, 0},
+      {0x0246, 589, 1},
 
-      {0x104d2, 3612, 1},
+      {0x1ed6, 2174, 1},
 
-      {0x03da, 848, 1},
+      {0x04d6, 1213, 1},
       {0xffffffff, -1, 0},
 
-      {0x1ed2, 2162, 1},
+      {0x1fd6, 76, 2},
 
-      {0x04d2, 1204, 1},
+      {0x2cd6, 2870, 1},
 
-      {0x2160, 2441, 1},
+      {0x00d6, 144, 1},
 
-      {0x1fd2, 20, 3},
+      {0x104d2, 3633, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x2cd2, 2858, 1},
+      {0x1ed2, 2168, 1},
 
-      {0x00d2, 132, 1},
+      {0x04d2, 1207, 1},
 
-      {0x104d0, 3606, 1},
+      {0x10427, 3528, 1},
 
-      {0x03a3, 803, 1},
-      {0xffffffff, -1, 0},
+      {0x1fd2, 20, 3},
+
+      {0x2cd2, 2864, 1},
 
-      {0x1ed0, 2159, 1},
+      {0x00d2, 132, 1},
 
-      {0x04d0, 1201, 1},
+      {0x0427, 971, 1},
 
-      {0x0532, 1348, 1},
+      {0x104d0, 3627, 1},
       {0xffffffff, -1, 0},
 
-      {0x2cd0, 2855, 1},
-
-      {0x00d0, 126, 1},
+      {0x2c27, 2693, 1},
 
-      {0x03a1, 799, 1},
+      {0x1ed0, 2165, 1},
 
-      {0x104cc, 3594, 1},
+      {0x04d0, 1204, 1},
 
-      {0x104bf, 3555, 1},
+      {0x0544, 1405, 1},
 
-      {0x042d, 987, 1},
+      {0x0244, 694, 1},
 
-      {0x1ecc, 2153, 1},
+      {0x2cd0, 2861, 1},
 
-      {0x1f2d, 2288, 1},
+      {0x00d0, 126, 1},
 
-      {0x2c2d, 2705, 1},
+      {0x03a5, 813, 1},
 
-      {0x1fcc, 71, 2},
+      {0x104cd, 3618, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x2ccc, 2849, 1},
+      {0xff32, 3384, 1},
 
-      {0x00cc, 114, 1},
+      {0x04cd, 1198, 1},
 
-      {0x104cb, 3591, 1},
+      {0x01cd, 429, 1},
+      {0xffffffff, -1, 0},
 
-      {0x03f4, 765, 1},
+      {0x104c3, 3588, 1},
 
-      {0x1cbf, 1594, 1},
+      {0x00cd, 117, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0xabbf, 1834, 1},
+      {0x04c3, 1183, 1},
 
-      {0x04cb, 1192, 1},
+      {0x104bb, 3564, 1},
 
-      {0x01cb, 425, 1},
+      {0x1fc3, 71, 2},
 
-      {0x1fcb, 2390, 1},
+      {0x16e46, 3906, 1},
 
-      {0x104c6, 3576, 1},
+      {0x00c3, 86, 1},
 
-      {0x00cb, 111, 1},
+      {0x03a3, 806, 1},
       {0xffffffff, -1, 0},
 
-      {0x1ec6, 2144, 1},
-
-      {0x03cf, 842, 1},
-
-      {0x104c5, 3573, 1},
+      {0x1fbb, 2384, 1},
 
-      {0x1fc6, 67, 2},
+      {0x104cc, 3615, 1},
 
-      {0x2cc6, 2840, 1},
+      {0x0532, 1351, 1},
 
-      {0x00c6, 96, 1},
+      {0x0232, 574, 1},
 
-      {0x04c5, 1183, 1},
+      {0x1ecc, 2159, 1},
 
-      {0x01c5, 417, 1},
+      {0xabbb, 1825, 1},
 
-      {0x104bd, 3549, 1},
+      {0x03a1, 802, 1},
 
-      {0x0397, 762, 1},
+      {0x1fcc, 71, 2},
 
-      {0x00c5, 92, 1},
-      {0xffffffff, -1, 0},
+      {0x2ccc, 2855, 1},
 
-      {0x1e920, 4059, 1},
+      {0x00cc, 114, 1},
 
-      {0xff32, 3363, 1},
+      {0x019d, 670, 1},
 
-      {0x104bb, 3543, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x1f9d, 194, 2},
 
-      {0x0546, 1408, 1},
+      {0x1e78, 2048, 1},
 
-      {0x1cbd, 1588, 1},
+      {0x0478, 1084, 1},
 
-      {0xabbd, 1828, 1},
+      {0x0178, 168, 1},
 
-      {0x1fbb, 2378, 1},
+      {0x1c9d, 1501, 1},
 
-      {0x019f, 673, 1},
+      {0xab9d, 1735, 1},
 
-      {0x1f9f, 204, 2},
+      {0x10c9d, 3726, 1},
       {0xffffffff, -1, 0},
 
-      {0x16e59, 3942, 1},
+      {0x16e44, 3900, 1},
 
-      {0xabbb, 1822, 1},
+      {0xab78, 1624, 1},
 
-      {0x1c9f, 1504, 1},
+      {0x1e9b, 2011, 1},
 
-      {0xab9f, 1738, 1},
+      {0x10bd, 2987, 1},
+      {0xffffffff, -1, 0},
 
-      {0x10c9f, 3711, 1},
+      {0x1f9b, 184, 2},
 
-      {0x1ef0, 2207, 1},
+      {0xff2b, 3363, 1},
+      {0xffffffff, -1, 0},
 
-      {0x04f0, 1249, 1},
+      {0x118bd, 3879, 1},
 
-      {0x01f0, 20, 2},
+      {0x1c9b, 1495, 1},
 
-      {0x019d, 670, 1},
+      {0xab9b, 1729, 1},
 
-      {0x1f9d, 194, 2},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x10c9b, 3720, 1},
 
-      {0x0544, 1402, 1},
+      {0x216a, 2477, 1},
 
-      {0x1c9d, 1498, 1},
-
-      {0xab9d, 1732, 1},
-
-      {0x10c9d, 3705, 1},
+      {0x24cb, 2561, 1},
 
       {0x1e99, 42, 2},
-      {0xffffffff, -1, 0},
 
-      {0xff2f, 3354, 1},
-
-      {0x1f99, 174, 2},
+      {0x1e920, 4080, 1},
       {0xffffffff, -1, 0},
 
-      {0x0193, 634, 1},
+      {0x1f99, 174, 2},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1f93, 184, 2},
+      {0x1c99, 1489, 1},
 
-      {0x1c99, 1486, 1},
+      {0xab99, 1723, 1},
 
-      {0xab99, 1720, 1},
+      {0x10c99, 3714, 1},
+      {0xffffffff, -1, 0},
 
-      {0x10c99, 3693, 1},
+      {0x2168, 2471, 1},
 
-      {0x1c93, 1468, 1},
+      {0x0193, 634, 1},
 
-      {0xab93, 1702, 1},
+      {0x1f93, 184, 2},
 
-      {0x10c93, 3675, 1},
+      {0x1e91e, 4074, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x0145, 270, 1},
+      {0x1c93, 1471, 1},
 
-      {0x16e46, 3885, 1},
-      {0xffffffff, -1, 0},
+      {0xab93, 1705, 1},
 
-      {0x0045, 12, 1},
-      {0xffffffff, -1, 0},
+      {0x10c93, 3696, 1},
 
       {0x0191, 369, 1},
 
       {0x1f91, 174, 2},
 
-      {0x1e91e, 4053, 1},
-      {0xffffffff, -1, 0},
-
-      {0x10bf, 2987, 1},
+      {0x1e912, 4038, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1c91, 1462, 1},
+      {0x1c91, 1465, 1},
 
-      {0xab91, 1696, 1},
+      {0xab91, 1699, 1},
 
-      {0x10c91, 3669, 1},
+      {0x10c91, 3690, 1},
       {0xffffffff, -1, 0},
 
-      {0x118bf, 3864, 1},
-      {0xffffffff, -1, 0},
+      {0x10cd, 3017, 1},
 
-      {0x0187, 363, 1},
+      {0xff27, 3351, 1},
 
-      {0x1f87, 164, 2},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x1e910, 4032, 1},
 
-      {0x16e44, 3879, 1},
+      {0x0187, 363, 1},
 
-      {0x1c87, 1047, 1},
+      {0x1f87, 164, 2},
 
-      {0xab87, 1666, 1},
+      {0x0055, 59, 1},
 
-      {0x10c87, 3639, 1},
+      {0x2164, 2459, 1},
 
-      {0x1e72, 2033, 1},
+      {0x10c3, 3005, 1},
 
-      {0x0472, 1072, 1},
+      {0x1c87, 1050, 1},
 
-      {0x0172, 336, 1},
+      {0xab87, 1669, 1},
 
-      {0x0232, 574, 1},
+      {0x10c87, 3660, 1},
 
-      {0x2c72, 2729, 1},
+      {0x0145, 270, 1},
 
-      {0x10c5, 3005, 1},
+      {0x10bb, 2981, 1},
       {0xffffffff, -1, 0},
 
-      {0x1e912, 4017, 1},
-
-      {0xab72, 1603, 1},
-
-      {0x0139, 252, 1},
-
-      {0x1f39, 2300, 1},
+      {0x0045, 12, 1},
 
-      {0x10bd, 2981, 1},
+      {0x24bd, 2519, 1},
+      {0xffffffff, -1, 0},
 
-      {0x1e66, 2015, 1},
+      {0x118bb, 3873, 1},
 
-      {0x0466, 1054, 1},
+      {0x1e72, 2039, 1},
 
-      {0x0166, 318, 1},
-      {0xffffffff, -1, 0},
+      {0x0472, 1075, 1},
 
-      {0x118bd, 3858, 1},
+      {0x0172, 336, 1},
 
-      {0x10bb, 2975, 1},
+      {0x2132, 2444, 1},
 
-      {0xa766, 3225, 1},
+      {0x2c72, 2735, 1},
 
-      {0x1e70, 2030, 1},
+      {0x1e70, 2036, 1},
 
-      {0x0470, 1069, 1},
+      {0x0470, 1072, 1},
 
       {0x0170, 333, 1},
 
-      {0x118bb, 3852, 1},
+      {0xab72, 1606, 1},
 
       {0x2c70, 610, 1},
 
-      {0x1edc, 2177, 1},
-
-      {0x04dc, 1219, 1},
-
-      {0x03ec, 875, 1},
+      {0x1e66, 2021, 1},
 
-      {0xab70, 1597, 1},
+      {0x0466, 1057, 1},
 
-      {0x2cdc, 2873, 1},
+      {0x0166, 318, 1},
 
-      {0x00dc, 159, 1},
+      {0xab70, 1600, 1},
+      {0xffffffff, -1, 0},
 
-      {0xa666, 3072, 1},
+      {0x1e3a, 1954, 1},
 
-      {0x1e910, 4011, 1},
+      {0xa766, 3231, 1},
 
-      {0x1e5a, 1996, 1},
+      {0x1e5a, 2002, 1},
 
-      {0x0143, 267, 1},
+      {0x1f3a, 2309, 1},
 
       {0x015a, 300, 1},
 
-      {0x03e2, 860, 1},
+      {0x2162, 2453, 1},
 
-      {0x0043, 6, 1},
+      {0xa73a, 3165, 1},
 
       {0x005a, 74, 1},
 
-      {0xa75a, 3207, 1},
+      {0xa75a, 3213, 1},
 
-      {0x24cc, 2558, 1},
+      {0x03e2, 863, 1},
+      {0xffffffff, -1, 0},
 
-      {0x24bf, 2519, 1},
+      {0x104cf, 3624, 1},
 
-      {0x03d8, 845, 1},
-      {0xffffffff, -1, 0},
+      {0x1e58, 1999, 1},
 
-      {0x1e3a, 1948, 1},
+      {0xa666, 3078, 1},
 
-      {0x0246, 589, 1},
-      {0xffffffff, -1, 0},
+      {0x0158, 297, 1},
 
-      {0x1f3a, 2303, 1},
+      {0x2160, 2447, 1},
 
-      {0x03de, 854, 1},
+      {0x01cf, 432, 1},
 
-      {0x24cb, 2555, 1},
+      {0x0058, 68, 1},
 
-      {0xa73a, 3159, 1},
+      {0xa758, 3210, 1},
 
-      {0xa65a, 3054, 1},
+      {0x00cf, 123, 1},
 
-      {0x1e58, 1993, 1},
+      {0xa65a, 3060, 1},
 
-      {0xff2d, 3348, 1},
+      {0x03da, 851, 1},
 
-      {0x0158, 297, 1},
+      {0x24cd, 2567, 1},
 
-      {0x03d6, 795, 1},
+      {0x1eec, 2207, 1},
 
-      {0x24c6, 2540, 1},
+      {0x04ec, 1246, 1},
 
-      {0x0058, 68, 1},
+      {0x01ec, 477, 1},
 
-      {0xa758, 3204, 1},
+      {0x1fec, 2441, 1},
 
-      {0x0141, 264, 1},
+      {0x03d8, 848, 1},
 
-      {0x1e42, 1960, 1},
+      {0x212b, 92, 1},
 
-      {0x24c5, 2537, 1},
+      {0x24c3, 2537, 1},
 
-      {0x0041, 0, 1},
+      {0xa658, 3057, 1},
 
-      {0x2166, 2459, 1},
+      {0x1edc, 2183, 1},
 
-      {0x0244, 691, 1},
+      {0x04dc, 1222, 1},
+      {0xffffffff, -1, 0},
 
-      {0x0042, 3, 1},
+      {0x24bb, 2513, 1},
 
-      {0xa742, 3171, 1},
+      {0x2cdc, 2879, 1},
 
-      {0x24bd, 2513, 1},
+      {0x00dc, 159, 1},
 
-      {0x104ce, 3600, 1},
-      {0xffffffff, -1, 0},
+      {0x03d6, 798, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0xa658, 3051, 1},
+      {0x24cc, 2564, 1},
 
-      {0x1ece, 2156, 1},
-      {0xffffffff, -1, 0},
+      {0x1eea, 2204, 1},
 
-      {0x24bb, 2507, 1},
+      {0x04ea, 1243, 1},
 
-      {0x03d0, 745, 1},
+      {0x01ea, 474, 1},
 
-      {0x2cce, 2852, 1},
+      {0x1fea, 2411, 1},
 
-      {0x00ce, 120, 1},
-      {0xffffffff, -1, 0},
+      {0x1ee8, 2201, 1},
 
-      {0xa642, 3017, 1},
+      {0x04e8, 1240, 1},
 
-      {0x1ef2, 2210, 1},
+      {0x01e8, 471, 1},
 
-      {0x04f2, 1252, 1},
+      {0x1fe8, 2435, 1},
 
-      {0x01f2, 483, 1},
+      {0x1ee6, 2198, 1},
 
-      {0x1ff2, 257, 2},
+      {0x04e6, 1237, 1},
 
-      {0x2cf2, 2891, 1},
-      {0xffffffff, -1, 0},
+      {0x01e6, 468, 1},
 
-      {0x0545, 1405, 1},
+      {0x1fe6, 88, 2},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1eea, 2198, 1},
+      {0x03d0, 748, 1},
 
-      {0x04ea, 1240, 1},
+      {0x1ee4, 2195, 1},
 
-      {0x01ea, 474, 1},
+      {0x04e4, 1234, 1},
 
-      {0x1fea, 2405, 1},
+      {0x01e4, 465, 1},
 
-      {0x1ee8, 2195, 1},
+      {0x1fe4, 80, 2},
 
-      {0x04e8, 1237, 1},
+      {0x104c9, 3606, 1},
 
-      {0x01e8, 471, 1},
+      {0x104c1, 3582, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1fe8, 2429, 1},
+      {0x04c9, 1192, 1},
 
-      {0x1ee6, 2192, 1},
+      {0x04c1, 1180, 1},
 
-      {0x04e6, 1234, 1},
+      {0x1fc9, 2390, 1},
 
-      {0x01e6, 468, 1},
+      {0x1f95, 194, 2},
 
-      {0x1fe6, 88, 2},
+      {0x00c9, 105, 1},
 
-      {0x1f4b, 2330, 1},
+      {0x00c1, 80, 1},
       {0xffffffff, -1, 0},
 
-      {0x004b, 27, 1},
+      {0x1c95, 1477, 1},
 
-      {0x0587, 105, 2},
+      {0xab95, 1711, 1},
 
-      {0x1ee4, 2189, 1},
+      {0x10c95, 3702, 1},
 
-      {0x04e4, 1231, 1},
+      {0x018b, 366, 1},
 
-      {0x01e4, 465, 1},
+      {0x1f8b, 144, 2},
 
-      {0x1fe4, 80, 2},
+      {0x0555, 1456, 1},
 
-      {0x104c1, 3561, 1},
+      {0x0587, 105, 2},
 
-      {0x1e5e, 2002, 1},
+      {0xa78b, 3267, 1},
       {0xffffffff, -1, 0},
 
-      {0x015e, 306, 1},
+      {0xab8b, 1681, 1},
 
-      {0x04c1, 1177, 1},
+      {0x10c8b, 3672, 1},
 
-      {0x1f83, 144, 2},
-      {0xffffffff, -1, 0},
+      {0x1e76, 2045, 1},
 
-      {0xa75e, 3213, 1},
+      {0x0476, 1081, 1},
 
-      {0x00c1, 80, 1},
+      {0x0176, 342, 1},
+
+      {0x0545, 1408, 1},
 
-      {0x1c83, 947, 1},
+      {0x0245, 703, 1},
+      {0xffffffff, -1, 0},
 
-      {0xab83, 1654, 1},
+      {0x039d, 789, 1},
 
-      {0x10c83, 3627, 1},
+      {0x1f83, 144, 2},
 
-      {0x0539, 1369, 1},
+      {0xab76, 1618, 1},
+      {0xffffffff, -1, 0},
 
-      {0x039f, 792, 1},
+      {0xff3a, 3408, 1},
 
-      {0x1e7e, 2051, 1},
+      {0x1c83, 950, 1},
 
-      {0x047e, 1090, 1},
+      {0xab83, 1657, 1},
 
-      {0x16e45, 3882, 1},
-      {0xffffffff, -1, 0},
+      {0x10c83, 3648, 1},
 
-      {0x2c7e, 580, 1},
+      {0x0141, 264, 1},
 
-      {0xa65e, 3060, 1},
+      {0x0181, 613, 1},
 
-      {0xa77e, 3246, 1},
+      {0x1f81, 134, 2},
+
+      {0x0041, 0, 1},
       {0xffffffff, -1, 0},
 
-      {0xab7e, 1639, 1},
+      {0x039b, 782, 1},
 
-      {0x03f0, 775, 1},
+      {0x1c81, 909, 1},
 
-      {0x039d, 786, 1},
+      {0xab81, 1651, 1},
 
-      {0x1e76, 2039, 1},
+      {0x10c81, 3642, 1},
 
-      {0x0476, 1078, 1},
+      {0x0149, 46, 2},
 
-      {0x0176, 342, 1},
+      {0x1f49, 2330, 1},
       {0xffffffff, -1, 0},
 
-      {0x1e5c, 1999, 1},
-      {0xffffffff, -1, 0},
+      {0x0049, 4086, 1},
 
-      {0x015c, 303, 1},
-      {0xffffffff, -1, 0},
+      {0x053a, 1375, 1},
 
-      {0xab76, 1615, 1},
+      {0x023a, 2720, 1},
 
-      {0x0399, 770, 1},
+      {0x1e7e, 2057, 1},
 
-      {0xa75c, 3210, 1},
+      {0x047e, 1093, 1},
 
-      {0x0543, 1399, 1},
+      {0x0399, 773, 1},
 
-      {0x0393, 749, 1},
+      {0x1e5e, 2008, 1},
 
-      {0x0149, 46, 2},
+      {0x2c7e, 580, 1},
+
+      {0x015e, 306, 1},
 
-      {0x1f49, 2324, 1},
+      {0xa77e, 3252, 1},
 
-      {0x1e40, 1957, 1},
+      {0x16e55, 3951, 1},
 
-      {0x0049, 4065, 1},
+      {0xab7e, 1642, 1},
 
-      {0x1eee, 2204, 1},
+      {0xa75e, 3219, 1},
 
-      {0x04ee, 1246, 1},
+      {0x104d1, 3630, 1},
 
-      {0x01ee, 480, 1},
+      {0x1e5c, 2005, 1},
+
+      {0x0393, 752, 1},
 
-      {0x0345, 770, 1},
+      {0x015c, 303, 1},
+      {0xffffffff, -1, 0},
 
-      {0xa740, 3168, 1},
+      {0x01d1, 435, 1},
 
-      {0xa65c, 3057, 1},
+      {0x16e45, 3903, 1},
 
-      {0x053a, 1372, 1},
+      {0xa75c, 3216, 1},
 
-      {0xff39, 3384, 1},
+      {0x00d1, 129, 1},
 
-      {0x0391, 742, 1},
+      {0x10421, 3510, 1},
 
-      {0x1e3e, 1954, 1},
+      {0x0391, 745, 1},
 
-      {0x2183, 2489, 1},
+      {0xa65e, 3066, 1},
 
-      {0x1e38, 1945, 1},
+      {0x1e3e, 1960, 1},
 
-      {0x1f3e, 2315, 1},
+      {0x0421, 950, 1},
       {0xffffffff, -1, 0},
 
-      {0x1f38, 2297, 1},
+      {0x1f3e, 2321, 1},
+
+      {0x2c21, 2675, 1},
+      {0xffffffff, -1, 0},
 
-      {0xa73e, 3165, 1},
+      {0xa73e, 3171, 1},
 
-      {0xa640, 3014, 1},
+      {0xa65c, 3063, 1},
 
-      {0xa738, 3156, 1},
+      {0x10c1, 2999, 1},
 
-      {0x1e36, 1942, 1},
+      {0x1e36, 1948, 1},
 
-      {0x0541, 1393, 1},
+      {0x1e38, 1951, 1},
 
       {0x0136, 249, 1},
 
-      {0x1e34, 1939, 1},
+      {0x24cf, 2573, 1},
+
+      {0x1f38, 2303, 1},
+      {0xffffffff, -1, 0},
+
+      {0xa736, 3159, 1},
 
-      {0x0542, 1396, 1},
+      {0xa738, 3162, 1},
+      {0xffffffff, -1, 0},
+
+      {0x0345, 773, 1},
+
+      {0x1e34, 1945, 1},
+
+      {0x16e5a, 3966, 1},
 
       {0x0134, 246, 1},
 
-      {0xa736, 3153, 1},
+      {0x1041d, 3498, 1},
 
       {0x013b, 255, 1},
 
-      {0x1f3b, 2306, 1},
-
-      {0xa734, 3150, 1},
-      {0xffffffff, -1, 0},
+      {0x1f3b, 2312, 1},
 
-      {0x0372, 715, 1},
+      {0xa734, 3156, 1},
 
-      {0x10415, 3453, 1},
+      {0x041d, 937, 1},
 
-      {0x16e43, 3876, 1},
+      {0x0372, 718, 1},
 
-      {0x16e5a, 3945, 1},
+      {0x1f1d, 2276, 1},
 
-      {0x042b, 981, 1},
+      {0x2c1d, 2663, 1},
 
-      {0x0415, 910, 1},
+      {0x16e58, 3960, 1},
 
-      {0x1f2b, 2282, 1},
+      {0x1041b, 3492, 1},
 
-      {0x2c2b, 2699, 1},
+      {0x0370, 715, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x2c15, 2633, 1},
+      {0x041b, 931, 1},
 
-      {0x10c1, 2993, 1},
-      {0xffffffff, -1, 0},
+      {0x10419, 3486, 1},
 
-      {0x1041d, 3477, 1},
+      {0x1f1b, 2270, 1},
 
-      {0x0245, 700, 1},
+      {0x2c1b, 2657, 1},
       {0xffffffff, -1, 0},
 
-      {0xff3a, 3387, 1},
+      {0x0419, 925, 1},
 
-      {0x041d, 934, 1},
+      {0x10417, 3480, 1},
 
-      {0xfb17, 117, 2},
+      {0x1f19, 2264, 1},
 
-      {0x1f1d, 2270, 1},
+      {0x2c19, 2651, 1},
+      {0xffffffff, -1, 0},
 
-      {0x2c1d, 2657, 1},
+      {0x0417, 919, 1},
 
-      {0x0370, 712, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x10415, 3474, 1},
+
+      {0x10413, 3468, 1},
 
-      {0x16e58, 3939, 1},
+      {0x2c17, 2645, 1},
       {0xffffffff, -1, 0},
 
-      {0x03dc, 851, 1},
+      {0x0415, 913, 1},
 
-      {0x1041b, 3471, 1},
+      {0x0413, 906, 1},
 
-      {0x24ce, 2564, 1},
+      {0x2166, 2465, 1},
 
-      {0x16e41, 3870, 1},
+      {0x2c15, 2639, 1},
 
-      {0x054b, 1423, 1},
+      {0x2c13, 2633, 1},
 
-      {0x041b, 928, 1},
+      {0x0053, 52, 1},
 
-      {0x16e42, 3873, 1},
+      {0x03cf, 845, 1},
 
-      {0x1f1b, 2264, 1},
+      {0x1efe, 2234, 1},
 
-      {0x2c1b, 2651, 1},
+      {0x04fe, 1273, 1},
 
-      {0x10419, 3465, 1},
+      {0x01fe, 499, 1},
 
-      {0x10413, 3447, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x1040f, 3456, 1},
+      {0xffffffff, -1, 0},
 
-      {0x0419, 922, 1},
+      {0x24c9, 2555, 1},
 
-      {0x0413, 903, 1},
+      {0x24c1, 2531, 1},
 
-      {0x1f19, 2258, 1},
+      {0x040f, 1044, 1},
 
-      {0x2c19, 2645, 1},
+      {0x03ec, 878, 1},
 
-      {0x2c13, 2627, 1},
+      {0x1f0f, 2258, 1},
 
-      {0x1040f, 3435, 1},
+      {0x2c0f, 2621, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1e917, 4032, 1},
-      {0xffffffff, -1, 0},
+      {0x1040d, 3450, 1},
 
-      {0x017f, 52, 1},
+      {0x0541, 1396, 1},
 
-      {0x040f, 1041, 1},
+      {0x0241, 586, 1},
 
-      {0x2c7f, 583, 1},
+      {0x03dc, 854, 1},
 
-      {0x1f0f, 2252, 1},
+      {0x040d, 1038, 1},
 
-      {0x2c0f, 2615, 1},
+      {0x1040b, 3444, 1},
 
-      {0x1040d, 3429, 1},
+      {0x1f0d, 2252, 1},
 
-      {0xab7f, 1642, 1},
+      {0x2c0d, 2615, 1},
       {0xffffffff, -1, 0},
 
-      {0x212b, 92, 1},
+      {0x040b, 1032, 1},
 
-      {0x040d, 1035, 1},
+      {0x0549, 1420, 1},
 
-      {0x1040b, 3423, 1},
+      {0x1f0b, 2246, 1},
 
-      {0x1f0d, 2246, 1},
+      {0x2c0b, 2609, 1},
 
-      {0x2c0d, 2609, 1},
-      {0xffffffff, -1, 0},
+      {0x10409, 3438, 1},
 
-      {0x040b, 1029, 1},
-      {0xffffffff, -1, 0},
+      {0x03ea, 875, 1},
 
-      {0x1f0b, 2240, 1},
+      {0x0139, 252, 1},
 
-      {0x2c0b, 2603, 1},
-      {0xffffffff, -1, 0},
+      {0x1f39, 2306, 1},
 
-      {0x24c1, 2525, 1},
+      {0x0409, 1026, 1},
 
-      {0x16e4b, 3900, 1},
+      {0x03e8, 872, 1},
 
-      {0x10409, 3417, 1},
+      {0x1f09, 2240, 1},
 
-      {0x10405, 3405, 1},
-      {0xffffffff, -1, 0},
+      {0x2c09, 2603, 1},
 
-      {0x0243, 354, 1},
+      {0x10405, 3426, 1},
 
-      {0x0409, 1023, 1},
+      {0x03e6, 869, 1},
 
-      {0x0405, 1011, 1},
+      {0xff21, 3333, 1},
 
-      {0x1f09, 2234, 1},
+      {0x1f4b, 2336, 1},
 
-      {0x2c09, 2597, 1},
+      {0x0405, 1014, 1},
 
-      {0x2c05, 2585, 1},
+      {0x004b, 27, 1},
 
-      {0x0549, 1417, 1},
+      {0x10403, 3420, 1},
 
-      {0x10403, 3399, 1},
+      {0x2c05, 2591, 1},
 
-      {0x16e5e, 3957, 1},
-      {0xffffffff, -1, 0},
+      {0x03e4, 866, 1},
 
-      {0x0540, 1390, 1},
+      {0x104d3, 3636, 1},
 
-      {0x0403, 1005, 1},
+      {0x0403, 1008, 1},
 
-      {0x023a, 2714, 1},
-      {0xffffffff, -1, 0},
+      {0xff36, 3396, 1},
 
-      {0x2c03, 2579, 1},
+      {0xff38, 3402, 1},
 
-      {0x10401, 3393, 1},
+      {0x2c03, 2585, 1},
 
-      {0x03ea, 872, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x01d3, 438, 1},
+
+      {0x1fd3, 25, 3},
 
-      {0x0401, 999, 1},
+      {0x0395, 758, 1},
 
-      {0x03e8, 869, 1},
+      {0x00d3, 135, 1},
 
-      {0x053e, 1384, 1},
+      {0x0051, 46, 1},
 
-      {0x2c01, 2573, 1},
+      {0x053e, 1387, 1},
 
-      {0x0538, 1366, 1},
+      {0x023e, 2723, 1},
 
-      {0x03e6, 866, 1},
+      {0xff34, 3390, 1},
 
-      {0x0241, 586, 1},
+      {0x16e41, 3891, 1},
 
-      {0x1ef8, 2219, 1},
+      {0x10401, 3414, 1},
 
-      {0x04f8, 1261, 1},
+      {0x1ef0, 2213, 1},
 
-      {0x01f8, 490, 1},
+      {0x04f0, 1252, 1},
 
-      {0x1ff8, 2399, 1},
+      {0x01f0, 20, 2},
 
-      {0x0536, 1360, 1},
-      {0xffffffff, -1, 0},
+      {0x0401, 1002, 1},
 
-      {0x03e4, 863, 1},
+      {0x0536, 1363, 1},
 
-      {0x0534, 1354, 1},
-      {0xffffffff, -1, 0},
+      {0x0538, 1369, 1},
 
-      {0x053b, 1375, 1},
+      {0x2c01, 2579, 1},
 
-      {0x16e5c, 3951, 1},
+      {0x16e49, 3915, 1},
 
-      {0x1ef6, 2216, 1},
+      {0x004f, 40, 1},
+      {0xffffffff, -1, 0},
 
-      {0x04f6, 1258, 1},
+      {0x0376, 721, 1},
 
-      {0x01f6, 372, 1},
+      {0x1eee, 2210, 1},
 
-      {0x1ff6, 92, 2},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x04ee, 1249, 1},
 
-      {0x16e49, 3894, 1},
+      {0x01ee, 480, 1},
+
+      {0x0534, 1357, 1},
       {0xffffffff, -1, 0},
 
-      {0x1f8d, 154, 2},
+      {0x053b, 1378, 1},
 
-      {0x1e3c, 1951, 1},
+      {0x023b, 577, 1},
 
-      {0x16e40, 3867, 1},
+      {0x16e5e, 3978, 1},
 
-      {0xa78d, 643, 1},
+      {0x1ef8, 2225, 1},
+
+      {0x04f8, 1264, 1},
 
-      {0x1f3c, 2309, 1},
+      {0x01f8, 490, 1},
 
-      {0xab8d, 1684, 1},
+      {0x1ff8, 2405, 1},
 
-      {0x10c8d, 3657, 1},
+      {0x1ed4, 2171, 1},
 
-      {0xa73c, 3162, 1},
+      {0x04d4, 1210, 1},
       {0xffffffff, -1, 0},
 
-      {0x1e78, 2042, 1},
+      {0x16e5c, 3972, 1},
 
-      {0x0478, 1081, 1},
+      {0x2cd4, 2867, 1},
 
-      {0x0178, 168, 1},
+      {0x00d4, 138, 1},
 
-      {0x1e74, 2036, 1},
+      {0x2183, 2495, 1},
 
-      {0x0474, 1075, 1},
+      {0x1ef6, 2222, 1},
 
-      {0x0174, 339, 1},
+      {0x04f6, 1261, 1},
 
-      {0xff38, 3381, 1},
+      {0x01f6, 372, 1},
 
-      {0x0376, 718, 1},
+      {0x1ff6, 92, 2},
 
-      {0xab78, 1621, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x1f8d, 154, 2},
+
+      {0x0147, 273, 1},
+      {0xffffffff, -1, 0},
 
-      {0xab74, 1609, 1},
+      {0xa78d, 643, 1},
 
-      {0x0429, 974, 1},
+      {0x0047, 18, 1},
 
-      {0xff36, 3375, 1},
+      {0xab8d, 1687, 1},
 
-      {0x1f29, 2276, 1},
+      {0x10c8d, 3678, 1},
 
-      {0x2c29, 2693, 1},
+      {0x1e74, 2042, 1},
 
-      {0xff34, 3369, 1},
-      {0xffffffff, -1, 0},
+      {0x0474, 1078, 1},
 
-      {0x10427, 3507, 1},
+      {0x0174, 339, 1},
 
-      {0x10425, 3501, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x1e3c, 1957, 1},
 
-      {0x0427, 968, 1},
+      {0x0553, 1450, 1},
 
-      {0x0425, 962, 1},
+      {0x1e30, 1939, 1},
 
-      {0x03ee, 878, 1},
+      {0x1f3c, 2315, 1},
 
-      {0x2c27, 2687, 1},
+      {0x0130, 261, 2},
 
-      {0x2c25, 2681, 1},
+      {0xab74, 1612, 1},
 
-      {0xff2b, 3342, 1},
+      {0xa73c, 3168, 1},
 
-      {0x10423, 3495, 1},
+      {0x10425, 3522, 1},
 
-      {0x1041f, 3483, 1},
+      {0x03d1, 768, 1},
 
-      {0x10411, 3441, 1},
+      {0x10423, 3516, 1},
       {0xffffffff, -1, 0},
 
-      {0x0423, 956, 1},
-
-      {0x041f, 941, 1},
+      {0x0425, 965, 1},
+      {0xffffffff, -1, 0},
 
-      {0x0411, 896, 1},
+      {0x0423, 959, 1},
 
-      {0x2c23, 2675, 1},
+      {0x2c25, 2687, 1},
 
-      {0x2c1f, 2663, 1},
+      {0x1041f, 3504, 1},
 
-      {0x2c11, 2621, 1},
+      {0x2c23, 2681, 1},
 
-      {0x10407, 3411, 1},
+      {0xff39, 3405, 1},
       {0xffffffff, -1, 0},
 
-      {0x017d, 351, 1},
-      {0xffffffff, -1, 0},
+      {0x041f, 944, 1},
 
-      {0x0407, 1017, 1},
+      {0x10411, 3462, 1},
 
-      {0x13f8, 1837, 1},
+      {0x10407, 3432, 1},
 
-      {0xa77d, 1855, 1},
+      {0x2c1f, 2669, 1},
+      {0xffffffff, -1, 0},
 
-      {0x2c07, 2591, 1},
+      {0x0411, 899, 1},
 
-      {0xab7d, 1636, 1},
+      {0x0407, 1020, 1},
+      {0xffffffff, -1, 0},
 
-      {0x017b, 348, 1},
+      {0x2c11, 2627, 1},
 
-      {0x0179, 345, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x2c07, 2597, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0xa77b, 3243, 1},
+      {0x0539, 1372, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0xa779, 3240, 1},
+      {0x13f8, 1840, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0xab7b, 1630, 1},
+      {0x054b, 1426, 1},
 
-      {0xab79, 1624, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x16e53, 3945, 1},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0},
 
-      {0x023e, 2717, 1},
+      {0x0551, 1444, 1},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x023b, 577, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x054f, 1438, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x037f, 884, 1},
+      {0x03fe, 727, 1},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x053c, 1378, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x16e4b, 3921, 1},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0xff29, 3336, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0xff30, 3378, 1},
+      {0xffffffff, -1, 0},
 
-      {0xff27, 3330, 1},
+      {0x16e51, 3939, 1},
+      {0xffffffff, -1, 0},
 
-      {0xff25, 3324, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x0547, 1414, 1},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0xff23, 3318, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0xff25, 3345, 1},
+      {0xffffffff, -1, 0},
+
+      {0xff23, 3339, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+
+      {0x053c, 1381, 1},
+
+      {0x16e4f, 3933, 1},
+      {0xffffffff, -1, 0},
+
+      {0x0230, 571, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+
+      {0xfb17, 117, 2},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+
+      {0xfb15, 113, 2},
+
+      {0xfb13, 121, 2},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+
+      {0x03f0, 778, 1},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+
+      {0x16e47, 3909, 1},
+      {0xffffffff, -1, 0},
+
+      {0x03ee, 881, 1},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+
+      {0xfb05, 29, 2},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+
+      {0xfb03, 0, 3},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0xfb15, 113, 2},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x1e921, 4083, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+
+      {0xfb01, 8, 2},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0},
 
-      {0x1e915, 4026, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-
-      {0xfb13, 121, 2},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-
-      {0x1e91d, 4050, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x1e91d, 4071, 1},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1e91b, 4044, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x1e91b, 4065, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1e919, 4038, 1},
+      {0x1e919, 4059, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1e913, 4020, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x1e917, 4053, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0xfb05, 29, 2},
-      {0xffffffff, -1, 0},
+      {0x1e915, 4047, 1},
 
-      {0x1e90f, 4008, 1},
+      {0x1e913, 4041, 1},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0},
-
-      {0xfb03, 0, 3},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1e90d, 4002, 1},
+      {0x1e90f, 4029, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1e90b, 3996, 1},
-      {0xffffffff, -1, 0},
+      {0x1e90d, 4023, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0xfb01, 8, 2},
+      {0x1e90b, 4017, 1},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-
-      {0x1e909, 3990, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1e905, 3978, 1},
+      {0x1e909, 4011, 1},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1e903, 3972, 1},
+      {0x1e905, 3999, 1},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1e901, 3966, 1},
+      {0x1e903, 3993, 1},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0xffffffff, -1, 0},
+
+      {0x1e901, 3987, 1},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
@@ -3258,15 +3277,15 @@ onigenc_unicode_unfold_key(OnigCodePoint code)
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
       {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1e91f, 4056, 1},
+      {0x1e91f, 4077, 1},
+      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
 
-      {0x1e911, 4014, 1},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
-      {0xffffffff, -1, 0}, {0xffffffff, -1, 0},
+      {0x1e911, 4035, 1},
 
-      {0x1e907, 3984, 1}
+      {0x1e907, 4005, 1}
     };
 
   if (0 == 0)
diff --git a/ext/mbstring/oniguruma/src/unicode_wb_data.c b/ext/mbstring/oniguruma/src/unicode_wb_data.c
new file mode 100644 (file)
index 0000000..7778157
--- /dev/null
@@ -0,0 +1,1023 @@
+/* unicode_wb_data.c: Generated by make_unicode_wb_data.py. */
+/*-
+ * Copyright (c) 2019  K.Kosako  <kkosako0 AT gmail DOT com>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#define WORD_BREAK_PROPERTY_VERSION  12_1_0
+
+/*
+ALetter
+CR
+Double_Quote
+Extend
+ExtendNumLet
+Format
+Hebrew_Letter
+Katakana
+LF
+MidLetter
+MidNum
+MidNumLet
+Newline
+Numeric
+Regional_Indicator
+Single_Quote
+WSegSpace
+ZWJ
+*/
+
+static int WB_RANGE_NUM = 970;
+static WB_RANGE_TYPE WB_RANGES[] = {
+ {0x00000a, 0x00000a, WB_LF },
+ {0x00000b, 0x00000c, WB_Newline },
+ {0x00000d, 0x00000d, WB_CR },
+ {0x000020, 0x000020, WB_WSegSpace },
+ {0x000022, 0x000022, WB_Double_Quote },
+ {0x000027, 0x000027, WB_Single_Quote },
+ {0x00002c, 0x00002c, WB_MidNum },
+ {0x00002e, 0x00002e, WB_MidNumLet },
+ {0x000030, 0x000039, WB_Numeric },
+ {0x00003a, 0x00003a, WB_MidLetter },
+ {0x00003b, 0x00003b, WB_MidNum },
+ {0x000041, 0x00005a, WB_ALetter },
+ {0x00005f, 0x00005f, WB_ExtendNumLet },
+ {0x000061, 0x00007a, WB_ALetter },
+ {0x000085, 0x000085, WB_Newline },
+ {0x0000aa, 0x0000aa, WB_ALetter },
+ {0x0000ad, 0x0000ad, WB_Format },
+ {0x0000b5, 0x0000b5, WB_ALetter },
+ {0x0000b7, 0x0000b7, WB_MidLetter },
+ {0x0000ba, 0x0000ba, WB_ALetter },
+ {0x0000c0, 0x0000d6, WB_ALetter },
+ {0x0000d8, 0x0000f6, WB_ALetter },
+ {0x0000f8, 0x0002d7, WB_ALetter },
+ {0x0002de, 0x0002e4, WB_ALetter },
+ {0x0002ec, 0x0002ff, WB_ALetter },
+ {0x000300, 0x00036f, WB_Extend },
+ {0x000370, 0x000374, WB_ALetter },
+ {0x000376, 0x000377, WB_ALetter },
+ {0x00037a, 0x00037d, WB_ALetter },
+ {0x00037e, 0x00037e, WB_MidNum },
+ {0x00037f, 0x00037f, WB_ALetter },
+ {0x000386, 0x000386, WB_ALetter },
+ {0x000387, 0x000387, WB_MidLetter },
+ {0x000388, 0x00038a, WB_ALetter },
+ {0x00038c, 0x00038c, WB_ALetter },
+ {0x00038e, 0x0003a1, WB_ALetter },
+ {0x0003a3, 0x0003f5, WB_ALetter },
+ {0x0003f7, 0x000481, WB_ALetter },
+ {0x000483, 0x000489, WB_Extend },
+ {0x00048a, 0x00052f, WB_ALetter },
+ {0x000531, 0x000556, WB_ALetter },
+ {0x000559, 0x000559, WB_ALetter },
+ {0x00055b, 0x00055c, WB_ALetter },
+ {0x00055e, 0x00055e, WB_ALetter },
+ {0x000560, 0x000588, WB_ALetter },
+ {0x000589, 0x000589, WB_MidNum },
+ {0x000591, 0x0005bd, WB_Extend },
+ {0x0005bf, 0x0005bf, WB_Extend },
+ {0x0005c1, 0x0005c2, WB_Extend },
+ {0x0005c4, 0x0005c5, WB_Extend },
+ {0x0005c7, 0x0005c7, WB_Extend },
+ {0x0005d0, 0x0005ea, WB_Hebrew_Letter },
+ {0x0005ef, 0x0005f2, WB_Hebrew_Letter },
+ {0x0005f3, 0x0005f3, WB_ALetter },
+ {0x0005f4, 0x0005f4, WB_MidLetter },
+ {0x000600, 0x000605, WB_Format },
+ {0x00060c, 0x00060d, WB_MidNum },
+ {0x000610, 0x00061a, WB_Extend },
+ {0x00061c, 0x00061c, WB_Format },
+ {0x000620, 0x00064a, WB_ALetter },
+ {0x00064b, 0x00065f, WB_Extend },
+ {0x000660, 0x000669, WB_Numeric },
+ {0x00066b, 0x00066b, WB_Numeric },
+ {0x00066c, 0x00066c, WB_MidNum },
+ {0x00066e, 0x00066f, WB_ALetter },
+ {0x000670, 0x000670, WB_Extend },
+ {0x000671, 0x0006d3, WB_ALetter },
+ {0x0006d5, 0x0006d5, WB_ALetter },
+ {0x0006d6, 0x0006dc, WB_Extend },
+ {0x0006dd, 0x0006dd, WB_Format },
+ {0x0006df, 0x0006e4, WB_Extend },
+ {0x0006e5, 0x0006e6, WB_ALetter },
+ {0x0006e7, 0x0006e8, WB_Extend },
+ {0x0006ea, 0x0006ed, WB_Extend },
+ {0x0006ee, 0x0006ef, WB_ALetter },
+ {0x0006f0, 0x0006f9, WB_Numeric },
+ {0x0006fa, 0x0006fc, WB_ALetter },
+ {0x0006ff, 0x0006ff, WB_ALetter },
+ {0x00070f, 0x00070f, WB_Format },
+ {0x000710, 0x000710, WB_ALetter },
+ {0x000711, 0x000711, WB_Extend },
+ {0x000712, 0x00072f, WB_ALetter },
+ {0x000730, 0x00074a, WB_Extend },
+ {0x00074d, 0x0007a5, WB_ALetter },
+ {0x0007a6, 0x0007b0, WB_Extend },
+ {0x0007b1, 0x0007b1, WB_ALetter },
+ {0x0007c0, 0x0007c9, WB_Numeric },
+ {0x0007ca, 0x0007ea, WB_ALetter },
+ {0x0007eb, 0x0007f3, WB_Extend },
+ {0x0007f4, 0x0007f5, WB_ALetter },
+ {0x0007f8, 0x0007f8, WB_MidNum },
+ {0x0007fa, 0x0007fa, WB_ALetter },
+ {0x0007fd, 0x0007fd, WB_Extend },
+ {0x000800, 0x000815, WB_ALetter },
+ {0x000816, 0x000819, WB_Extend },
+ {0x00081a, 0x00081a, WB_ALetter },
+ {0x00081b, 0x000823, WB_Extend },
+ {0x000824, 0x000824, WB_ALetter },
+ {0x000825, 0x000827, WB_Extend },
+ {0x000828, 0x000828, WB_ALetter },
+ {0x000829, 0x00082d, WB_Extend },
+ {0x000840, 0x000858, WB_ALetter },
+ {0x000859, 0x00085b, WB_Extend },
+ {0x000860, 0x00086a, WB_ALetter },
+ {0x0008a0, 0x0008b4, WB_ALetter },
+ {0x0008b6, 0x0008bd, WB_ALetter },
+ {0x0008d3, 0x0008e1, WB_Extend },
+ {0x0008e2, 0x0008e2, WB_Format },
+ {0x0008e3, 0x000903, WB_Extend },
+ {0x000904, 0x000939, WB_ALetter },
+ {0x00093a, 0x00093c, WB_Extend },
+ {0x00093d, 0x00093d, WB_ALetter },
+ {0x00093e, 0x00094f, WB_Extend },
+ {0x000950, 0x000950, WB_ALetter },
+ {0x000951, 0x000957, WB_Extend },
+ {0x000958, 0x000961, WB_ALetter },
+ {0x000962, 0x000963, WB_Extend },
+ {0x000966, 0x00096f, WB_Numeric },
+ {0x000971, 0x000980, WB_ALetter },
+ {0x000981, 0x000983, WB_Extend },
+ {0x000985, 0x00098c, WB_ALetter },
+ {0x00098f, 0x000990, WB_ALetter },
+ {0x000993, 0x0009a8, WB_ALetter },
+ {0x0009aa, 0x0009b0, WB_ALetter },
+ {0x0009b2, 0x0009b2, WB_ALetter },
+ {0x0009b6, 0x0009b9, WB_ALetter },
+ {0x0009bc, 0x0009bc, WB_Extend },
+ {0x0009bd, 0x0009bd, WB_ALetter },
+ {0x0009be, 0x0009c4, WB_Extend },
+ {0x0009c7, 0x0009c8, WB_Extend },
+ {0x0009cb, 0x0009cd, WB_Extend },
+ {0x0009ce, 0x0009ce, WB_ALetter },
+ {0x0009d7, 0x0009d7, WB_Extend },
+ {0x0009dc, 0x0009dd, WB_ALetter },
+ {0x0009df, 0x0009e1, WB_ALetter },
+ {0x0009e2, 0x0009e3, WB_Extend },
+ {0x0009e6, 0x0009ef, WB_Numeric },
+ {0x0009f0, 0x0009f1, WB_ALetter },
+ {0x0009fc, 0x0009fc, WB_ALetter },
+ {0x0009fe, 0x0009fe, WB_Extend },
+ {0x000a01, 0x000a03, WB_Extend },
+ {0x000a05, 0x000a0a, WB_ALetter },
+ {0x000a0f, 0x000a10, WB_ALetter },
+ {0x000a13, 0x000a28, WB_ALetter },
+ {0x000a2a, 0x000a30, WB_ALetter },
+ {0x000a32, 0x000a33, WB_ALetter },
+ {0x000a35, 0x000a36, WB_ALetter },
+ {0x000a38, 0x000a39, WB_ALetter },
+ {0x000a3c, 0x000a3c, WB_Extend },
+ {0x000a3e, 0x000a42, WB_Extend },
+ {0x000a47, 0x000a48, WB_Extend },
+ {0x000a4b, 0x000a4d, WB_Extend },
+ {0x000a51, 0x000a51, WB_Extend },
+ {0x000a59, 0x000a5c, WB_ALetter },
+ {0x000a5e, 0x000a5e, WB_ALetter },
+ {0x000a66, 0x000a6f, WB_Numeric },
+ {0x000a70, 0x000a71, WB_Extend },
+ {0x000a72, 0x000a74, WB_ALetter },
+ {0x000a75, 0x000a75, WB_Extend },
+ {0x000a81, 0x000a83, WB_Extend },
+ {0x000a85, 0x000a8d, WB_ALetter },
+ {0x000a8f, 0x000a91, WB_ALetter },
+ {0x000a93, 0x000aa8, WB_ALetter },
+ {0x000aaa, 0x000ab0, WB_ALetter },
+ {0x000ab2, 0x000ab3, WB_ALetter },
+ {0x000ab5, 0x000ab9, WB_ALetter },
+ {0x000abc, 0x000abc, WB_Extend },
+ {0x000abd, 0x000abd, WB_ALetter },
+ {0x000abe, 0x000ac5, WB_Extend },
+ {0x000ac7, 0x000ac9, WB_Extend },
+ {0x000acb, 0x000acd, WB_Extend },
+ {0x000ad0, 0x000ad0, WB_ALetter },
+ {0x000ae0, 0x000ae1, WB_ALetter },
+ {0x000ae2, 0x000ae3, WB_Extend },
+ {0x000ae6, 0x000aef, WB_Numeric },
+ {0x000af9, 0x000af9, WB_ALetter },
+ {0x000afa, 0x000aff, WB_Extend },
+ {0x000b01, 0x000b03, WB_Extend },
+ {0x000b05, 0x000b0c, WB_ALetter },
+ {0x000b0f, 0x000b10, WB_ALetter },
+ {0x000b13, 0x000b28, WB_ALetter },
+ {0x000b2a, 0x000b30, WB_ALetter },
+ {0x000b32, 0x000b33, WB_ALetter },
+ {0x000b35, 0x000b39, WB_ALetter },
+ {0x000b3c, 0x000b3c, WB_Extend },
+ {0x000b3d, 0x000b3d, WB_ALetter },
+ {0x000b3e, 0x000b44, WB_Extend },
+ {0x000b47, 0x000b48, WB_Extend },
+ {0x000b4b, 0x000b4d, WB_Extend },
+ {0x000b56, 0x000b57, WB_Extend },
+ {0x000b5c, 0x000b5d, WB_ALetter },
+ {0x000b5f, 0x000b61, WB_ALetter },
+ {0x000b62, 0x000b63, WB_Extend },
+ {0x000b66, 0x000b6f, WB_Numeric },
+ {0x000b71, 0x000b71, WB_ALetter },
+ {0x000b82, 0x000b82, WB_Extend },
+ {0x000b83, 0x000b83, WB_ALetter },
+ {0x000b85, 0x000b8a, WB_ALetter },
+ {0x000b8e, 0x000b90, WB_ALetter },
+ {0x000b92, 0x000b95, WB_ALetter },
+ {0x000b99, 0x000b9a, WB_ALetter },
+ {0x000b9c, 0x000b9c, WB_ALetter },
+ {0x000b9e, 0x000b9f, WB_ALetter },
+ {0x000ba3, 0x000ba4, WB_ALetter },
+ {0x000ba8, 0x000baa, WB_ALetter },
+ {0x000bae, 0x000bb9, WB_ALetter },
+ {0x000bbe, 0x000bc2, WB_Extend },
+ {0x000bc6, 0x000bc8, WB_Extend },
+ {0x000bca, 0x000bcd, WB_Extend },
+ {0x000bd0, 0x000bd0, WB_ALetter },
+ {0x000bd7, 0x000bd7, WB_Extend },
+ {0x000be6, 0x000bef, WB_Numeric },
+ {0x000c00, 0x000c04, WB_Extend },
+ {0x000c05, 0x000c0c, WB_ALetter },
+ {0x000c0e, 0x000c10, WB_ALetter },
+ {0x000c12, 0x000c28, WB_ALetter },
+ {0x000c2a, 0x000c39, WB_ALetter },
+ {0x000c3d, 0x000c3d, WB_ALetter },
+ {0x000c3e, 0x000c44, WB_Extend },
+ {0x000c46, 0x000c48, WB_Extend },
+ {0x000c4a, 0x000c4d, WB_Extend },
+ {0x000c55, 0x000c56, WB_Extend },
+ {0x000c58, 0x000c5a, WB_ALetter },
+ {0x000c60, 0x000c61, WB_ALetter },
+ {0x000c62, 0x000c63, WB_Extend },
+ {0x000c66, 0x000c6f, WB_Numeric },
+ {0x000c80, 0x000c80, WB_ALetter },
+ {0x000c81, 0x000c83, WB_Extend },
+ {0x000c85, 0x000c8c, WB_ALetter },
+ {0x000c8e, 0x000c90, WB_ALetter },
+ {0x000c92, 0x000ca8, WB_ALetter },
+ {0x000caa, 0x000cb3, WB_ALetter },
+ {0x000cb5, 0x000cb9, WB_ALetter },
+ {0x000cbc, 0x000cbc, WB_Extend },
+ {0x000cbd, 0x000cbd, WB_ALetter },
+ {0x000cbe, 0x000cc4, WB_Extend },
+ {0x000cc6, 0x000cc8, WB_Extend },
+ {0x000cca, 0x000ccd, WB_Extend },
+ {0x000cd5, 0x000cd6, WB_Extend },
+ {0x000cde, 0x000cde, WB_ALetter },
+ {0x000ce0, 0x000ce1, WB_ALetter },
+ {0x000ce2, 0x000ce3, WB_Extend },
+ {0x000ce6, 0x000cef, WB_Numeric },
+ {0x000cf1, 0x000cf2, WB_ALetter },
+ {0x000d00, 0x000d03, WB_Extend },
+ {0x000d05, 0x000d0c, WB_ALetter },
+ {0x000d0e, 0x000d10, WB_ALetter },
+ {0x000d12, 0x000d3a, WB_ALetter },
+ {0x000d3b, 0x000d3c, WB_Extend },
+ {0x000d3d, 0x000d3d, WB_ALetter },
+ {0x000d3e, 0x000d44, WB_Extend },
+ {0x000d46, 0x000d48, WB_Extend },
+ {0x000d4a, 0x000d4d, WB_Extend },
+ {0x000d4e, 0x000d4e, WB_ALetter },
+ {0x000d54, 0x000d56, WB_ALetter },
+ {0x000d57, 0x000d57, WB_Extend },
+ {0x000d5f, 0x000d61, WB_ALetter },
+ {0x000d62, 0x000d63, WB_Extend },
+ {0x000d66, 0x000d6f, WB_Numeric },
+ {0x000d7a, 0x000d7f, WB_ALetter },
+ {0x000d82, 0x000d83, WB_Extend },
+ {0x000d85, 0x000d96, WB_ALetter },
+ {0x000d9a, 0x000db1, WB_ALetter },
+ {0x000db3, 0x000dbb, WB_ALetter },
+ {0x000dbd, 0x000dbd, WB_ALetter },
+ {0x000dc0, 0x000dc6, WB_ALetter },
+ {0x000dca, 0x000dca, WB_Extend },
+ {0x000dcf, 0x000dd4, WB_Extend },
+ {0x000dd6, 0x000dd6, WB_Extend },
+ {0x000dd8, 0x000ddf, WB_Extend },
+ {0x000de6, 0x000def, WB_Numeric },
+ {0x000df2, 0x000df3, WB_Extend },
+ {0x000e31, 0x000e31, WB_Extend },
+ {0x000e34, 0x000e3a, WB_Extend },
+ {0x000e47, 0x000e4e, WB_Extend },
+ {0x000e50, 0x000e59, WB_Numeric },
+ {0x000eb1, 0x000eb1, WB_Extend },
+ {0x000eb4, 0x000ebc, WB_Extend },
+ {0x000ec8, 0x000ecd, WB_Extend },
+ {0x000ed0, 0x000ed9, WB_Numeric },
+ {0x000f00, 0x000f00, WB_ALetter },
+ {0x000f18, 0x000f19, WB_Extend },
+ {0x000f20, 0x000f29, WB_Numeric },
+ {0x000f35, 0x000f35, WB_Extend },
+ {0x000f37, 0x000f37, WB_Extend },
+ {0x000f39, 0x000f39, WB_Extend },
+ {0x000f3e, 0x000f3f, WB_Extend },
+ {0x000f40, 0x000f47, WB_ALetter },
+ {0x000f49, 0x000f6c, WB_ALetter },
+ {0x000f71, 0x000f84, WB_Extend },
+ {0x000f86, 0x000f87, WB_Extend },
+ {0x000f88, 0x000f8c, WB_ALetter },
+ {0x000f8d, 0x000f97, WB_Extend },
+ {0x000f99, 0x000fbc, WB_Extend },
+ {0x000fc6, 0x000fc6, WB_Extend },
+ {0x00102b, 0x00103e, WB_Extend },
+ {0x001040, 0x001049, WB_Numeric },
+ {0x001056, 0x001059, WB_Extend },
+ {0x00105e, 0x001060, WB_Extend },
+ {0x001062, 0x001064, WB_Extend },
+ {0x001067, 0x00106d, WB_Extend },
+ {0x001071, 0x001074, WB_Extend },
+ {0x001082, 0x00108d, WB_Extend },
+ {0x00108f, 0x00108f, WB_Extend },
+ {0x001090, 0x001099, WB_Numeric },
+ {0x00109a, 0x00109d, WB_Extend },
+ {0x0010a0, 0x0010c5, WB_ALetter },
+ {0x0010c7, 0x0010c7, WB_ALetter },
+ {0x0010cd, 0x0010cd, WB_ALetter },
+ {0x0010d0, 0x0010fa, WB_ALetter },
+ {0x0010fc, 0x001248, WB_ALetter },
+ {0x00124a, 0x00124d, WB_ALetter },
+ {0x001250, 0x001256, WB_ALetter },
+ {0x001258, 0x001258, WB_ALetter },
+ {0x00125a, 0x00125d, WB_ALetter },
+ {0x001260, 0x001288, WB_ALetter },
+ {0x00128a, 0x00128d, WB_ALetter },
+ {0x001290, 0x0012b0, WB_ALetter },
+ {0x0012b2, 0x0012b5, WB_ALetter },
+ {0x0012b8, 0x0012be, WB_ALetter },
+ {0x0012c0, 0x0012c0, WB_ALetter },
+ {0x0012c2, 0x0012c5, WB_ALetter },
+ {0x0012c8, 0x0012d6, WB_ALetter },
+ {0x0012d8, 0x001310, WB_ALetter },
+ {0x001312, 0x001315, WB_ALetter },
+ {0x001318, 0x00135a, WB_ALetter },
+ {0x00135d, 0x00135f, WB_Extend },
+ {0x001380, 0x00138f, WB_ALetter },
+ {0x0013a0, 0x0013f5, WB_ALetter },
+ {0x0013f8, 0x0013fd, WB_ALetter },
+ {0x001401, 0x00166c, WB_ALetter },
+ {0x00166f, 0x00167f, WB_ALetter },
+ {0x001680, 0x001680, WB_WSegSpace },
+ {0x001681, 0x00169a, WB_ALetter },
+ {0x0016a0, 0x0016ea, WB_ALetter },
+ {0x0016ee, 0x0016f8, WB_ALetter },
+ {0x001700, 0x00170c, WB_ALetter },
+ {0x00170e, 0x001711, WB_ALetter },
+ {0x001712, 0x001714, WB_Extend },
+ {0x001720, 0x001731, WB_ALetter },
+ {0x001732, 0x001734, WB_Extend },
+ {0x001740, 0x001751, WB_ALetter },
+ {0x001752, 0x001753, WB_Extend },
+ {0x001760, 0x00176c, WB_ALetter },
+ {0x00176e, 0x001770, WB_ALetter },
+ {0x001772, 0x001773, WB_Extend },
+ {0x0017b4, 0x0017d3, WB_Extend },
+ {0x0017dd, 0x0017dd, WB_Extend },
+ {0x0017e0, 0x0017e9, WB_Numeric },
+ {0x00180b, 0x00180d, WB_Extend },
+ {0x00180e, 0x00180e, WB_Format },
+ {0x001810, 0x001819, WB_Numeric },
+ {0x001820, 0x001878, WB_ALetter },
+ {0x001880, 0x001884, WB_ALetter },
+ {0x001885, 0x001886, WB_Extend },
+ {0x001887, 0x0018a8, WB_ALetter },
+ {0x0018a9, 0x0018a9, WB_Extend },
+ {0x0018aa, 0x0018aa, WB_ALetter },
+ {0x0018b0, 0x0018f5, WB_ALetter },
+ {0x001900, 0x00191e, WB_ALetter },
+ {0x001920, 0x00192b, WB_Extend },
+ {0x001930, 0x00193b, WB_Extend },
+ {0x001946, 0x00194f, WB_Numeric },
+ {0x0019d0, 0x0019d9, WB_Numeric },
+ {0x001a00, 0x001a16, WB_ALetter },
+ {0x001a17, 0x001a1b, WB_Extend },
+ {0x001a55, 0x001a5e, WB_Extend },
+ {0x001a60, 0x001a7c, WB_Extend },
+ {0x001a7f, 0x001a7f, WB_Extend },
+ {0x001a80, 0x001a89, WB_Numeric },
+ {0x001a90, 0x001a99, WB_Numeric },
+ {0x001ab0, 0x001abe, WB_Extend },
+ {0x001b00, 0x001b04, WB_Extend },
+ {0x001b05, 0x001b33, WB_ALetter },
+ {0x001b34, 0x001b44, WB_Extend },
+ {0x001b45, 0x001b4b, WB_ALetter },
+ {0x001b50, 0x001b59, WB_Numeric },
+ {0x001b6b, 0x001b73, WB_Extend },
+ {0x001b80, 0x001b82, WB_Extend },
+ {0x001b83, 0x001ba0, WB_ALetter },
+ {0x001ba1, 0x001bad, WB_Extend },
+ {0x001bae, 0x001baf, WB_ALetter },
+ {0x001bb0, 0x001bb9, WB_Numeric },
+ {0x001bba, 0x001be5, WB_ALetter },
+ {0x001be6, 0x001bf3, WB_Extend },
+ {0x001c00, 0x001c23, WB_ALetter },
+ {0x001c24, 0x001c37, WB_Extend },
+ {0x001c40, 0x001c49, WB_Numeric },
+ {0x001c4d, 0x001c4f, WB_ALetter },
+ {0x001c50, 0x001c59, WB_Numeric },
+ {0x001c5a, 0x001c7d, WB_ALetter },
+ {0x001c80, 0x001c88, WB_ALetter },
+ {0x001c90, 0x001cba, WB_ALetter },
+ {0x001cbd, 0x001cbf, WB_ALetter },
+ {0x001cd0, 0x001cd2, WB_Extend },
+ {0x001cd4, 0x001ce8, WB_Extend },
+ {0x001ce9, 0x001cec, WB_ALetter },
+ {0x001ced, 0x001ced, WB_Extend },
+ {0x001cee, 0x001cf3, WB_ALetter },
+ {0x001cf4, 0x001cf4, WB_Extend },
+ {0x001cf5, 0x001cf6, WB_ALetter },
+ {0x001cf7, 0x001cf9, WB_Extend },
+ {0x001cfa, 0x001cfa, WB_ALetter },
+ {0x001d00, 0x001dbf, WB_ALetter },
+ {0x001dc0, 0x001df9, WB_Extend },
+ {0x001dfb, 0x001dff, WB_Extend },
+ {0x001e00, 0x001f15, WB_ALetter },
+ {0x001f18, 0x001f1d, WB_ALetter },
+ {0x001f20, 0x001f45, WB_ALetter },
+ {0x001f48, 0x001f4d, WB_ALetter },
+ {0x001f50, 0x001f57, WB_ALetter },
+ {0x001f59, 0x001f59, WB_ALetter },
+ {0x001f5b, 0x001f5b, WB_ALetter },
+ {0x001f5d, 0x001f5d, WB_ALetter },
+ {0x001f5f, 0x001f7d, WB_ALetter },
+ {0x001f80, 0x001fb4, WB_ALetter },
+ {0x001fb6, 0x001fbc, WB_ALetter },
+ {0x001fbe, 0x001fbe, WB_ALetter },
+ {0x001fc2, 0x001fc4, WB_ALetter },
+ {0x001fc6, 0x001fcc, WB_ALetter },
+ {0x001fd0, 0x001fd3, WB_ALetter },
+ {0x001fd6, 0x001fdb, WB_ALetter },
+ {0x001fe0, 0x001fec, WB_ALetter },
+ {0x001ff2, 0x001ff4, WB_ALetter },
+ {0x001ff6, 0x001ffc, WB_ALetter },
+ {0x002000, 0x002006, WB_WSegSpace },
+ {0x002008, 0x00200a, WB_WSegSpace },
+ {0x00200c, 0x00200c, WB_Extend },
+ {0x00200d, 0x00200d, WB_ZWJ },
+ {0x00200e, 0x00200f, WB_Format },
+ {0x002018, 0x002019, WB_MidNumLet },
+ {0x002024, 0x002024, WB_MidNumLet },
+ {0x002027, 0x002027, WB_MidLetter },
+ {0x002028, 0x002029, WB_Newline },
+ {0x00202a, 0x00202e, WB_Format },
+ {0x00202f, 0x00202f, WB_ExtendNumLet },
+ {0x00203f, 0x002040, WB_ExtendNumLet },
+ {0x002044, 0x002044, WB_MidNum },
+ {0x002054, 0x002054, WB_ExtendNumLet },
+ {0x00205f, 0x00205f, WB_WSegSpace },
+ {0x002060, 0x002064, WB_Format },
+ {0x002066, 0x00206f, WB_Format },
+ {0x002071, 0x002071, WB_ALetter },
+ {0x00207f, 0x00207f, WB_ALetter },
+ {0x002090, 0x00209c, WB_ALetter },
+ {0x0020d0, 0x0020f0, WB_Extend },
+ {0x002102, 0x002102, WB_ALetter },
+ {0x002107, 0x002107, WB_ALetter },
+ {0x00210a, 0x002113, WB_ALetter },
+ {0x002115, 0x002115, WB_ALetter },
+ {0x002119, 0x00211d, WB_ALetter },
+ {0x002124, 0x002124, WB_ALetter },
+ {0x002126, 0x002126, WB_ALetter },
+ {0x002128, 0x002128, WB_ALetter },
+ {0x00212a, 0x00212d, WB_ALetter },
+ {0x00212f, 0x002139, WB_ALetter },
+ {0x00213c, 0x00213f, WB_ALetter },
+ {0x002145, 0x002149, WB_ALetter },
+ {0x00214e, 0x00214e, WB_ALetter },
+ {0x002160, 0x002188, WB_ALetter },
+ {0x0024b6, 0x0024e9, WB_ALetter },
+ {0x002c00, 0x002c2e, WB_ALetter },
+ {0x002c30, 0x002c5e, WB_ALetter },
+ {0x002c60, 0x002ce4, WB_ALetter },
+ {0x002ceb, 0x002cee, WB_ALetter },
+ {0x002cef, 0x002cf1, WB_Extend },
+ {0x002cf2, 0x002cf3, WB_ALetter },
+ {0x002d00, 0x002d25, WB_ALetter },
+ {0x002d27, 0x002d27, WB_ALetter },
+ {0x002d2d, 0x002d2d, WB_ALetter },
+ {0x002d30, 0x002d67, WB_ALetter },
+ {0x002d6f, 0x002d6f, WB_ALetter },
+ {0x002d7f, 0x002d7f, WB_Extend },
+ {0x002d80, 0x002d96, WB_ALetter },
+ {0x002da0, 0x002da6, WB_ALetter },
+ {0x002da8, 0x002dae, WB_ALetter },
+ {0x002db0, 0x002db6, WB_ALetter },
+ {0x002db8, 0x002dbe, WB_ALetter },
+ {0x002dc0, 0x002dc6, WB_ALetter },
+ {0x002dc8, 0x002dce, WB_ALetter },
+ {0x002dd0, 0x002dd6, WB_ALetter },
+ {0x002dd8, 0x002dde, WB_ALetter },
+ {0x002de0, 0x002dff, WB_Extend },
+ {0x002e2f, 0x002e2f, WB_ALetter },
+ {0x003000, 0x003000, WB_WSegSpace },
+ {0x003005, 0x003005, WB_ALetter },
+ {0x00302a, 0x00302f, WB_Extend },
+ {0x003031, 0x003035, WB_Katakana },
+ {0x00303b, 0x00303c, WB_ALetter },
+ {0x003099, 0x00309a, WB_Extend },
+ {0x00309b, 0x00309c, WB_Katakana },
+ {0x0030a0, 0x0030fa, WB_Katakana },
+ {0x0030fc, 0x0030ff, WB_Katakana },
+ {0x003105, 0x00312f, WB_ALetter },
+ {0x003131, 0x00318e, WB_ALetter },
+ {0x0031a0, 0x0031ba, WB_ALetter },
+ {0x0031f0, 0x0031ff, WB_Katakana },
+ {0x0032d0, 0x0032fe, WB_Katakana },
+ {0x003300, 0x003357, WB_Katakana },
+ {0x00a000, 0x00a48c, WB_ALetter },
+ {0x00a4d0, 0x00a4fd, WB_ALetter },
+ {0x00a500, 0x00a60c, WB_ALetter },
+ {0x00a610, 0x00a61f, WB_ALetter },
+ {0x00a620, 0x00a629, WB_Numeric },
+ {0x00a62a, 0x00a62b, WB_ALetter },
+ {0x00a640, 0x00a66e, WB_ALetter },
+ {0x00a66f, 0x00a672, WB_Extend },
+ {0x00a674, 0x00a67d, WB_Extend },
+ {0x00a67f, 0x00a69d, WB_ALetter },
+ {0x00a69e, 0x00a69f, WB_Extend },
+ {0x00a6a0, 0x00a6ef, WB_ALetter },
+ {0x00a6f0, 0x00a6f1, WB_Extend },
+ {0x00a717, 0x00a7bf, WB_ALetter },
+ {0x00a7c2, 0x00a7c6, WB_ALetter },
+ {0x00a7f7, 0x00a801, WB_ALetter },
+ {0x00a802, 0x00a802, WB_Extend },
+ {0x00a803, 0x00a805, WB_ALetter },
+ {0x00a806, 0x00a806, WB_Extend },
+ {0x00a807, 0x00a80a, WB_ALetter },
+ {0x00a80b, 0x00a80b, WB_Extend },
+ {0x00a80c, 0x00a822, WB_ALetter },
+ {0x00a823, 0x00a827, WB_Extend },
+ {0x00a840, 0x00a873, WB_ALetter },
+ {0x00a880, 0x00a881, WB_Extend },
+ {0x00a882, 0x00a8b3, WB_ALetter },
+ {0x00a8b4, 0x00a8c5, WB_Extend },
+ {0x00a8d0, 0x00a8d9, WB_Numeric },
+ {0x00a8e0, 0x00a8f1, WB_Extend },
+ {0x00a8f2, 0x00a8f7, WB_ALetter },
+ {0x00a8fb, 0x00a8fb, WB_ALetter },
+ {0x00a8fd, 0x00a8fe, WB_ALetter },
+ {0x00a8ff, 0x00a8ff, WB_Extend },
+ {0x00a900, 0x00a909, WB_Numeric },
+ {0x00a90a, 0x00a925, WB_ALetter },
+ {0x00a926, 0x00a92d, WB_Extend },
+ {0x00a930, 0x00a946, WB_ALetter },
+ {0x00a947, 0x00a953, WB_Extend },
+ {0x00a960, 0x00a97c, WB_ALetter },
+ {0x00a980, 0x00a983, WB_Extend },
+ {0x00a984, 0x00a9b2, WB_ALetter },
+ {0x00a9b3, 0x00a9c0, WB_Extend },
+ {0x00a9cf, 0x00a9cf, WB_ALetter },
+ {0x00a9d0, 0x00a9d9, WB_Numeric },
+ {0x00a9e5, 0x00a9e5, WB_Extend },
+ {0x00a9f0, 0x00a9f9, WB_Numeric },
+ {0x00aa00, 0x00aa28, WB_ALetter },
+ {0x00aa29, 0x00aa36, WB_Extend },
+ {0x00aa40, 0x00aa42, WB_ALetter },
+ {0x00aa43, 0x00aa43, WB_Extend },
+ {0x00aa44, 0x00aa4b, WB_ALetter },
+ {0x00aa4c, 0x00aa4d, WB_Extend },
+ {0x00aa50, 0x00aa59, WB_Numeric },
+ {0x00aa7b, 0x00aa7d, WB_Extend },
+ {0x00aab0, 0x00aab0, WB_Extend },
+ {0x00aab2, 0x00aab4, WB_Extend },
+ {0x00aab7, 0x00aab8, WB_Extend },
+ {0x00aabe, 0x00aabf, WB_Extend },
+ {0x00aac1, 0x00aac1, WB_Extend },
+ {0x00aae0, 0x00aaea, WB_ALetter },
+ {0x00aaeb, 0x00aaef, WB_Extend },
+ {0x00aaf2, 0x00aaf4, WB_ALetter },
+ {0x00aaf5, 0x00aaf6, WB_Extend },
+ {0x00ab01, 0x00ab06, WB_ALetter },
+ {0x00ab09, 0x00ab0e, WB_ALetter },
+ {0x00ab11, 0x00ab16, WB_ALetter },
+ {0x00ab20, 0x00ab26, WB_ALetter },
+ {0x00ab28, 0x00ab2e, WB_ALetter },
+ {0x00ab30, 0x00ab67, WB_ALetter },
+ {0x00ab70, 0x00abe2, WB_ALetter },
+ {0x00abe3, 0x00abea, WB_Extend },
+ {0x00abec, 0x00abed, WB_Extend },
+ {0x00abf0, 0x00abf9, WB_Numeric },
+ {0x00ac00, 0x00d7a3, WB_ALetter },
+ {0x00d7b0, 0x00d7c6, WB_ALetter },
+ {0x00d7cb, 0x00d7fb, WB_ALetter },
+ {0x00fb00, 0x00fb06, WB_ALetter },
+ {0x00fb13, 0x00fb17, WB_ALetter },
+ {0x00fb1d, 0x00fb1d, WB_Hebrew_Letter },
+ {0x00fb1e, 0x00fb1e, WB_Extend },
+ {0x00fb1f, 0x00fb28, WB_Hebrew_Letter },
+ {0x00fb2a, 0x00fb36, WB_Hebrew_Letter },
+ {0x00fb38, 0x00fb3c, WB_Hebrew_Letter },
+ {0x00fb3e, 0x00fb3e, WB_Hebrew_Letter },
+ {0x00fb40, 0x00fb41, WB_Hebrew_Letter },
+ {0x00fb43, 0x00fb44, WB_Hebrew_Letter },
+ {0x00fb46, 0x00fb4f, WB_Hebrew_Letter },
+ {0x00fb50, 0x00fbb1, WB_ALetter },
+ {0x00fbd3, 0x00fd3d, WB_ALetter },
+ {0x00fd50, 0x00fd8f, WB_ALetter },
+ {0x00fd92, 0x00fdc7, WB_ALetter },
+ {0x00fdf0, 0x00fdfb, WB_ALetter },
+ {0x00fe00, 0x00fe0f, WB_Extend },
+ {0x00fe10, 0x00fe10, WB_MidNum },
+ {0x00fe13, 0x00fe13, WB_MidLetter },
+ {0x00fe14, 0x00fe14, WB_MidNum },
+ {0x00fe20, 0x00fe2f, WB_Extend },
+ {0x00fe33, 0x00fe34, WB_ExtendNumLet },
+ {0x00fe4d, 0x00fe4f, WB_ExtendNumLet },
+ {0x00fe50, 0x00fe50, WB_MidNum },
+ {0x00fe52, 0x00fe52, WB_MidNumLet },
+ {0x00fe54, 0x00fe54, WB_MidNum },
+ {0x00fe55, 0x00fe55, WB_MidLetter },
+ {0x00fe70, 0x00fe74, WB_ALetter },
+ {0x00fe76, 0x00fefc, WB_ALetter },
+ {0x00feff, 0x00feff, WB_Format },
+ {0x00ff07, 0x00ff07, WB_MidNumLet },
+ {0x00ff0c, 0x00ff0c, WB_MidNum },
+ {0x00ff0e, 0x00ff0e, WB_MidNumLet },
+ {0x00ff10, 0x00ff19, WB_Numeric },
+ {0x00ff1a, 0x00ff1a, WB_MidLetter },
+ {0x00ff1b, 0x00ff1b, WB_MidNum },
+ {0x00ff21, 0x00ff3a, WB_ALetter },
+ {0x00ff3f, 0x00ff3f, WB_ExtendNumLet },
+ {0x00ff41, 0x00ff5a, WB_ALetter },
+ {0x00ff66, 0x00ff9d, WB_Katakana },
+ {0x00ff9e, 0x00ff9f, WB_Extend },
+ {0x00ffa0, 0x00ffbe, WB_ALetter },
+ {0x00ffc2, 0x00ffc7, WB_ALetter },
+ {0x00ffca, 0x00ffcf, WB_ALetter },
+ {0x00ffd2, 0x00ffd7, WB_ALetter },
+ {0x00ffda, 0x00ffdc, WB_ALetter },
+ {0x00fff9, 0x00fffb, WB_Format },
+ {0x010000, 0x01000b, WB_ALetter },
+ {0x01000d, 0x010026, WB_ALetter },
+ {0x010028, 0x01003a, WB_ALetter },
+ {0x01003c, 0x01003d, WB_ALetter },
+ {0x01003f, 0x01004d, WB_ALetter },
+ {0x010050, 0x01005d, WB_ALetter },
+ {0x010080, 0x0100fa, WB_ALetter },
+ {0x010140, 0x010174, WB_ALetter },
+ {0x0101fd, 0x0101fd, WB_Extend },
+ {0x010280, 0x01029c, WB_ALetter },
+ {0x0102a0, 0x0102d0, WB_ALetter },
+ {0x0102e0, 0x0102e0, WB_Extend },
+ {0x010300, 0x01031f, WB_ALetter },
+ {0x01032d, 0x01034a, WB_ALetter },
+ {0x010350, 0x010375, WB_ALetter },
+ {0x010376, 0x01037a, WB_Extend },
+ {0x010380, 0x01039d, WB_ALetter },
+ {0x0103a0, 0x0103c3, WB_ALetter },
+ {0x0103c8, 0x0103cf, WB_ALetter },
+ {0x0103d1, 0x0103d5, WB_ALetter },
+ {0x010400, 0x01049d, WB_ALetter },
+ {0x0104a0, 0x0104a9, WB_Numeric },
+ {0x0104b0, 0x0104d3, WB_ALetter },
+ {0x0104d8, 0x0104fb, WB_ALetter },
+ {0x010500, 0x010527, WB_ALetter },
+ {0x010530, 0x010563, WB_ALetter },
+ {0x010600, 0x010736, WB_ALetter },
+ {0x010740, 0x010755, WB_ALetter },
+ {0x010760, 0x010767, WB_ALetter },
+ {0x010800, 0x010805, WB_ALetter },
+ {0x010808, 0x010808, WB_ALetter },
+ {0x01080a, 0x010835, WB_ALetter },
+ {0x010837, 0x010838, WB_ALetter },
+ {0x01083c, 0x01083c, WB_ALetter },
+ {0x01083f, 0x010855, WB_ALetter },
+ {0x010860, 0x010876, WB_ALetter },
+ {0x010880, 0x01089e, WB_ALetter },
+ {0x0108e0, 0x0108f2, WB_ALetter },
+ {0x0108f4, 0x0108f5, WB_ALetter },
+ {0x010900, 0x010915, WB_ALetter },
+ {0x010920, 0x010939, WB_ALetter },
+ {0x010980, 0x0109b7, WB_ALetter },
+ {0x0109be, 0x0109bf, WB_ALetter },
+ {0x010a00, 0x010a00, WB_ALetter },
+ {0x010a01, 0x010a03, WB_Extend },
+ {0x010a05, 0x010a06, WB_Extend },
+ {0x010a0c, 0x010a0f, WB_Extend },
+ {0x010a10, 0x010a13, WB_ALetter },
+ {0x010a15, 0x010a17, WB_ALetter },
+ {0x010a19, 0x010a35, WB_ALetter },
+ {0x010a38, 0x010a3a, WB_Extend },
+ {0x010a3f, 0x010a3f, WB_Extend },
+ {0x010a60, 0x010a7c, WB_ALetter },
+ {0x010a80, 0x010a9c, WB_ALetter },
+ {0x010ac0, 0x010ac7, WB_ALetter },
+ {0x010ac9, 0x010ae4, WB_ALetter },
+ {0x010ae5, 0x010ae6, WB_Extend },
+ {0x010b00, 0x010b35, WB_ALetter },
+ {0x010b40, 0x010b55, WB_ALetter },
+ {0x010b60, 0x010b72, WB_ALetter },
+ {0x010b80, 0x010b91, WB_ALetter },
+ {0x010c00, 0x010c48, WB_ALetter },
+ {0x010c80, 0x010cb2, WB_ALetter },
+ {0x010cc0, 0x010cf2, WB_ALetter },
+ {0x010d00, 0x010d23, WB_ALetter },
+ {0x010d24, 0x010d27, WB_Extend },
+ {0x010d30, 0x010d39, WB_Numeric },
+ {0x010f00, 0x010f1c, WB_ALetter },
+ {0x010f27, 0x010f27, WB_ALetter },
+ {0x010f30, 0x010f45, WB_ALetter },
+ {0x010f46, 0x010f50, WB_Extend },
+ {0x010fe0, 0x010ff6, WB_ALetter },
+ {0x011000, 0x011002, WB_Extend },
+ {0x011003, 0x011037, WB_ALetter },
+ {0x011038, 0x011046, WB_Extend },
+ {0x011066, 0x01106f, WB_Numeric },
+ {0x01107f, 0x011082, WB_Extend },
+ {0x011083, 0x0110af, WB_ALetter },
+ {0x0110b0, 0x0110ba, WB_Extend },
+ {0x0110bd, 0x0110bd, WB_Format },
+ {0x0110cd, 0x0110cd, WB_Format },
+ {0x0110d0, 0x0110e8, WB_ALetter },
+ {0x0110f0, 0x0110f9, WB_Numeric },
+ {0x011100, 0x011102, WB_Extend },
+ {0x011103, 0x011126, WB_ALetter },
+ {0x011127, 0x011134, WB_Extend },
+ {0x011136, 0x01113f, WB_Numeric },
+ {0x011144, 0x011144, WB_ALetter },
+ {0x011145, 0x011146, WB_Extend },
+ {0x011150, 0x011172, WB_ALetter },
+ {0x011173, 0x011173, WB_Extend },
+ {0x011176, 0x011176, WB_ALetter },
+ {0x011180, 0x011182, WB_Extend },
+ {0x011183, 0x0111b2, WB_ALetter },
+ {0x0111b3, 0x0111c0, WB_Extend },
+ {0x0111c1, 0x0111c4, WB_ALetter },
+ {0x0111c9, 0x0111cc, WB_Extend },
+ {0x0111d0, 0x0111d9, WB_Numeric },
+ {0x0111da, 0x0111da, WB_ALetter },
+ {0x0111dc, 0x0111dc, WB_ALetter },
+ {0x011200, 0x011211, WB_ALetter },
+ {0x011213, 0x01122b, WB_ALetter },
+ {0x01122c, 0x011237, WB_Extend },
+ {0x01123e, 0x01123e, WB_Extend },
+ {0x011280, 0x011286, WB_ALetter },
+ {0x011288, 0x011288, WB_ALetter },
+ {0x01128a, 0x01128d, WB_ALetter },
+ {0x01128f, 0x01129d, WB_ALetter },
+ {0x01129f, 0x0112a8, WB_ALetter },
+ {0x0112b0, 0x0112de, WB_ALetter },
+ {0x0112df, 0x0112ea, WB_Extend },
+ {0x0112f0, 0x0112f9, WB_Numeric },
+ {0x011300, 0x011303, WB_Extend },
+ {0x011305, 0x01130c, WB_ALetter },
+ {0x01130f, 0x011310, WB_ALetter },
+ {0x011313, 0x011328, WB_ALetter },
+ {0x01132a, 0x011330, WB_ALetter },
+ {0x011332, 0x011333, WB_ALetter },
+ {0x011335, 0x011339, WB_ALetter },
+ {0x01133b, 0x01133c, WB_Extend },
+ {0x01133d, 0x01133d, WB_ALetter },
+ {0x01133e, 0x011344, WB_Extend },
+ {0x011347, 0x011348, WB_Extend },
+ {0x01134b, 0x01134d, WB_Extend },
+ {0x011350, 0x011350, WB_ALetter },
+ {0x011357, 0x011357, WB_Extend },
+ {0x01135d, 0x011361, WB_ALetter },
+ {0x011362, 0x011363, WB_Extend },
+ {0x011366, 0x01136c, WB_Extend },
+ {0x011370, 0x011374, WB_Extend },
+ {0x011400, 0x011434, WB_ALetter },
+ {0x011435, 0x011446, WB_Extend },
+ {0x011447, 0x01144a, WB_ALetter },
+ {0x011450, 0x011459, WB_Numeric },
+ {0x01145e, 0x01145e, WB_Extend },
+ {0x01145f, 0x01145f, WB_ALetter },
+ {0x011480, 0x0114af, WB_ALetter },
+ {0x0114b0, 0x0114c3, WB_Extend },
+ {0x0114c4, 0x0114c5, WB_ALetter },
+ {0x0114c7, 0x0114c7, WB_ALetter },
+ {0x0114d0, 0x0114d9, WB_Numeric },
+ {0x011580, 0x0115ae, WB_ALetter },
+ {0x0115af, 0x0115b5, WB_Extend },
+ {0x0115b8, 0x0115c0, WB_Extend },
+ {0x0115d8, 0x0115db, WB_ALetter },
+ {0x0115dc, 0x0115dd, WB_Extend },
+ {0x011600, 0x01162f, WB_ALetter },
+ {0x011630, 0x011640, WB_Extend },
+ {0x011644, 0x011644, WB_ALetter },
+ {0x011650, 0x011659, WB_Numeric },
+ {0x011680, 0x0116aa, WB_ALetter },
+ {0x0116ab, 0x0116b7, WB_Extend },
+ {0x0116b8, 0x0116b8, WB_ALetter },
+ {0x0116c0, 0x0116c9, WB_Numeric },
+ {0x01171d, 0x01172b, WB_Extend },
+ {0x011730, 0x011739, WB_Numeric },
+ {0x011800, 0x01182b, WB_ALetter },
+ {0x01182c, 0x01183a, WB_Extend },
+ {0x0118a0, 0x0118df, WB_ALetter },
+ {0x0118e0, 0x0118e9, WB_Numeric },
+ {0x0118ff, 0x0118ff, WB_ALetter },
+ {0x0119a0, 0x0119a7, WB_ALetter },
+ {0x0119aa, 0x0119d0, WB_ALetter },
+ {0x0119d1, 0x0119d7, WB_Extend },
+ {0x0119da, 0x0119e0, WB_Extend },
+ {0x0119e1, 0x0119e1, WB_ALetter },
+ {0x0119e3, 0x0119e3, WB_ALetter },
+ {0x0119e4, 0x0119e4, WB_Extend },
+ {0x011a00, 0x011a00, WB_ALetter },
+ {0x011a01, 0x011a0a, WB_Extend },
+ {0x011a0b, 0x011a32, WB_ALetter },
+ {0x011a33, 0x011a39, WB_Extend },
+ {0x011a3a, 0x011a3a, WB_ALetter },
+ {0x011a3b, 0x011a3e, WB_Extend },
+ {0x011a47, 0x011a47, WB_Extend },
+ {0x011a50, 0x011a50, WB_ALetter },
+ {0x011a51, 0x011a5b, WB_Extend },
+ {0x011a5c, 0x011a89, WB_ALetter },
+ {0x011a8a, 0x011a99, WB_Extend },
+ {0x011a9d, 0x011a9d, WB_ALetter },
+ {0x011ac0, 0x011af8, WB_ALetter },
+ {0x011c00, 0x011c08, WB_ALetter },
+ {0x011c0a, 0x011c2e, WB_ALetter },
+ {0x011c2f, 0x011c36, WB_Extend },
+ {0x011c38, 0x011c3f, WB_Extend },
+ {0x011c40, 0x011c40, WB_ALetter },
+ {0x011c50, 0x011c59, WB_Numeric },
+ {0x011c72, 0x011c8f, WB_ALetter },
+ {0x011c92, 0x011ca7, WB_Extend },
+ {0x011ca9, 0x011cb6, WB_Extend },
+ {0x011d00, 0x011d06, WB_ALetter },
+ {0x011d08, 0x011d09, WB_ALetter },
+ {0x011d0b, 0x011d30, WB_ALetter },
+ {0x011d31, 0x011d36, WB_Extend },
+ {0x011d3a, 0x011d3a, WB_Extend },
+ {0x011d3c, 0x011d3d, WB_Extend },
+ {0x011d3f, 0x011d45, WB_Extend },
+ {0x011d46, 0x011d46, WB_ALetter },
+ {0x011d47, 0x011d47, WB_Extend },
+ {0x011d50, 0x011d59, WB_Numeric },
+ {0x011d60, 0x011d65, WB_ALetter },
+ {0x011d67, 0x011d68, WB_ALetter },
+ {0x011d6a, 0x011d89, WB_ALetter },
+ {0x011d8a, 0x011d8e, WB_Extend },
+ {0x011d90, 0x011d91, WB_Extend },
+ {0x011d93, 0x011d97, WB_Extend },
+ {0x011d98, 0x011d98, WB_ALetter },
+ {0x011da0, 0x011da9, WB_Numeric },
+ {0x011ee0, 0x011ef2, WB_ALetter },
+ {0x011ef3, 0x011ef6, WB_Extend },
+ {0x012000, 0x012399, WB_ALetter },
+ {0x012400, 0x01246e, WB_ALetter },
+ {0x012480, 0x012543, WB_ALetter },
+ {0x013000, 0x01342e, WB_ALetter },
+ {0x013430, 0x013438, WB_Format },
+ {0x014400, 0x014646, WB_ALetter },
+ {0x016800, 0x016a38, WB_ALetter },
+ {0x016a40, 0x016a5e, WB_ALetter },
+ {0x016a60, 0x016a69, WB_Numeric },
+ {0x016ad0, 0x016aed, WB_ALetter },
+ {0x016af0, 0x016af4, WB_Extend },
+ {0x016b00, 0x016b2f, WB_ALetter },
+ {0x016b30, 0x016b36, WB_Extend },
+ {0x016b40, 0x016b43, WB_ALetter },
+ {0x016b50, 0x016b59, WB_Numeric },
+ {0x016b63, 0x016b77, WB_ALetter },
+ {0x016b7d, 0x016b8f, WB_ALetter },
+ {0x016e40, 0x016e7f, WB_ALetter },
+ {0x016f00, 0x016f4a, WB_ALetter },
+ {0x016f4f, 0x016f4f, WB_Extend },
+ {0x016f50, 0x016f50, WB_ALetter },
+ {0x016f51, 0x016f87, WB_Extend },
+ {0x016f8f, 0x016f92, WB_Extend },
+ {0x016f93, 0x016f9f, WB_ALetter },
+ {0x016fe0, 0x016fe1, WB_ALetter },
+ {0x016fe3, 0x016fe3, WB_ALetter },
+ {0x01b000, 0x01b000, WB_Katakana },
+ {0x01b164, 0x01b167, WB_Katakana },
+ {0x01bc00, 0x01bc6a, WB_ALetter },
+ {0x01bc70, 0x01bc7c, WB_ALetter },
+ {0x01bc80, 0x01bc88, WB_ALetter },
+ {0x01bc90, 0x01bc99, WB_ALetter },
+ {0x01bc9d, 0x01bc9e, WB_Extend },
+ {0x01bca0, 0x01bca3, WB_Format },
+ {0x01d165, 0x01d169, WB_Extend },
+ {0x01d16d, 0x01d172, WB_Extend },
+ {0x01d173, 0x01d17a, WB_Format },
+ {0x01d17b, 0x01d182, WB_Extend },
+ {0x01d185, 0x01d18b, WB_Extend },
+ {0x01d1aa, 0x01d1ad, WB_Extend },
+ {0x01d242, 0x01d244, WB_Extend },
+ {0x01d400, 0x01d454, WB_ALetter },
+ {0x01d456, 0x01d49c, WB_ALetter },
+ {0x01d49e, 0x01d49f, WB_ALetter },
+ {0x01d4a2, 0x01d4a2, WB_ALetter },
+ {0x01d4a5, 0x01d4a6, WB_ALetter },
+ {0x01d4a9, 0x01d4ac, WB_ALetter },
+ {0x01d4ae, 0x01d4b9, WB_ALetter },
+ {0x01d4bb, 0x01d4bb, WB_ALetter },
+ {0x01d4bd, 0x01d4c3, WB_ALetter },
+ {0x01d4c5, 0x01d505, WB_ALetter },
+ {0x01d507, 0x01d50a, WB_ALetter },
+ {0x01d50d, 0x01d514, WB_ALetter },
+ {0x01d516, 0x01d51c, WB_ALetter },
+ {0x01d51e, 0x01d539, WB_ALetter },
+ {0x01d53b, 0x01d53e, WB_ALetter },
+ {0x01d540, 0x01d544, WB_ALetter },
+ {0x01d546, 0x01d546, WB_ALetter },
+ {0x01d54a, 0x01d550, WB_ALetter },
+ {0x01d552, 0x01d6a5, WB_ALetter },
+ {0x01d6a8, 0x01d6c0, WB_ALetter },
+ {0x01d6c2, 0x01d6da, WB_ALetter },
+ {0x01d6dc, 0x01d6fa, WB_ALetter },
+ {0x01d6fc, 0x01d714, WB_ALetter },
+ {0x01d716, 0x01d734, WB_ALetter },
+ {0x01d736, 0x01d74e, WB_ALetter },
+ {0x01d750, 0x01d76e, WB_ALetter },
+ {0x01d770, 0x01d788, WB_ALetter },
+ {0x01d78a, 0x01d7a8, WB_ALetter },
+ {0x01d7aa, 0x01d7c2, WB_ALetter },
+ {0x01d7c4, 0x01d7cb, WB_ALetter },
+ {0x01d7ce, 0x01d7ff, WB_Numeric },
+ {0x01da00, 0x01da36, WB_Extend },
+ {0x01da3b, 0x01da6c, WB_Extend },
+ {0x01da75, 0x01da75, WB_Extend },
+ {0x01da84, 0x01da84, WB_Extend },
+ {0x01da9b, 0x01da9f, WB_Extend },
+ {0x01daa1, 0x01daaf, WB_Extend },
+ {0x01e000, 0x01e006, WB_Extend },
+ {0x01e008, 0x01e018, WB_Extend },
+ {0x01e01b, 0x01e021, WB_Extend },
+ {0x01e023, 0x01e024, WB_Extend },
+ {0x01e026, 0x01e02a, WB_Extend },
+ {0x01e100, 0x01e12c, WB_ALetter },
+ {0x01e130, 0x01e136, WB_Extend },
+ {0x01e137, 0x01e13d, WB_ALetter },
+ {0x01e140, 0x01e149, WB_Numeric },
+ {0x01e14e, 0x01e14e, WB_ALetter },
+ {0x01e2c0, 0x01e2eb, WB_ALetter },
+ {0x01e2ec, 0x01e2ef, WB_Extend },
+ {0x01e2f0, 0x01e2f9, WB_Numeric },
+ {0x01e800, 0x01e8c4, WB_ALetter },
+ {0x01e8d0, 0x01e8d6, WB_Extend },
+ {0x01e900, 0x01e943, WB_ALetter },
+ {0x01e944, 0x01e94a, WB_Extend },
+ {0x01e94b, 0x01e94b, WB_ALetter },
+ {0x01e950, 0x01e959, WB_Numeric },
+ {0x01ee00, 0x01ee03, WB_ALetter },
+ {0x01ee05, 0x01ee1f, WB_ALetter },
+ {0x01ee21, 0x01ee22, WB_ALetter },
+ {0x01ee24, 0x01ee24, WB_ALetter },
+ {0x01ee27, 0x01ee27, WB_ALetter },
+ {0x01ee29, 0x01ee32, WB_ALetter },
+ {0x01ee34, 0x01ee37, WB_ALetter },
+ {0x01ee39, 0x01ee39, WB_ALetter },
+ {0x01ee3b, 0x01ee3b, WB_ALetter },
+ {0x01ee42, 0x01ee42, WB_ALetter },
+ {0x01ee47, 0x01ee47, WB_ALetter },
+ {0x01ee49, 0x01ee49, WB_ALetter },
+ {0x01ee4b, 0x01ee4b, WB_ALetter },
+ {0x01ee4d, 0x01ee4f, WB_ALetter },
+ {0x01ee51, 0x01ee52, WB_ALetter },
+ {0x01ee54, 0x01ee54, WB_ALetter },
+ {0x01ee57, 0x01ee57, WB_ALetter },
+ {0x01ee59, 0x01ee59, WB_ALetter },
+ {0x01ee5b, 0x01ee5b, WB_ALetter },
+ {0x01ee5d, 0x01ee5d, WB_ALetter },
+ {0x01ee5f, 0x01ee5f, WB_ALetter },
+ {0x01ee61, 0x01ee62, WB_ALetter },
+ {0x01ee64, 0x01ee64, WB_ALetter },
+ {0x01ee67, 0x01ee6a, WB_ALetter },
+ {0x01ee6c, 0x01ee72, WB_ALetter },
+ {0x01ee74, 0x01ee77, WB_ALetter },
+ {0x01ee79, 0x01ee7c, WB_ALetter },
+ {0x01ee7e, 0x01ee7e, WB_ALetter },
+ {0x01ee80, 0x01ee89, WB_ALetter },
+ {0x01ee8b, 0x01ee9b, WB_ALetter },
+ {0x01eea1, 0x01eea3, WB_ALetter },
+ {0x01eea5, 0x01eea9, WB_ALetter },
+ {0x01eeab, 0x01eebb, WB_ALetter },
+ {0x01f130, 0x01f149, WB_ALetter },
+ {0x01f150, 0x01f169, WB_ALetter },
+ {0x01f170, 0x01f189, WB_ALetter },
+ {0x01f1e6, 0x01f1ff, WB_Regional_Indicator },
+ {0x01f3fb, 0x01f3ff, WB_Extend },
+ {0x0e0001, 0x0e0001, WB_Format },
+ {0x0e0020, 0x0e007f, WB_Extend },
+ {0x0e0100, 0x0e01ef, WB_Extend }
+};
index d2d56711d08b55069d8a7da188b53d4bf222fa3f..8bdadb205284d33632b1698de4bac4e98f880327 100644 (file)
@@ -2,7 +2,7 @@
   utf16_be.c -  Oniguruma (regular expression library)
 **********************************************************************/
 /*-
- * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2019  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -103,7 +103,25 @@ utf16be_mbc_enc_len(const UChar* p)
 static int
 is_valid_mbc_string(const UChar* s, const UChar* end)
 {
-  return onigenc_length_check_is_valid_mbc_string(ONIG_ENCODING_UTF16_BE, s, end);
+  while (s < end) {
+    int len = utf16be_mbc_enc_len(s);
+    if (len == 4) {
+      if (s + 2 >= end)
+        return FALSE;
+      if (! UTF16_IS_SURROGATE_SECOND(*(s+2)))
+        return FALSE;
+    }
+    else
+      if (UTF16_IS_SURROGATE_SECOND(*s))
+        return FALSE;
+
+    s += len;
+  }
+
+  if (s != end)
+    return FALSE;
+  else
+    return TRUE;
 }
 
 static int
@@ -148,7 +166,15 @@ utf16be_mbc_to_code(const UChar* p, const UChar* end)
 static int
 utf16be_code_to_mbclen(OnigCodePoint code)
 {
-  return (code > 0xffff ? 4 : 2);
+  if (code > 0xffff) {
+    if (code > 0x10ffff)
+      return ONIGERR_INVALID_CODE_POINT_VALUE;
+    else
+      return 4;
+  }
+  else {
+    return 2;
+  }
 }
 
 static int
@@ -176,7 +202,7 @@ utf16be_code_to_mbc(OnigCodePoint code, UChar *buf)
 
 static int
 utf16be_mbc_case_fold(OnigCaseFoldType flag,
-                     const UChar** pp, const UChar* end, UChar* fold)
+                      const UChar** pp, const UChar* end, UChar* fold)
 {
   const UChar* p = *pp;
 
@@ -200,7 +226,7 @@ utf16be_mbc_case_fold(OnigCaseFoldType flag,
   }
   else
     return onigenc_unicode_mbc_case_fold(ONIG_ENCODING_UTF16_BE, flag,
-                                        pp, end, fold);
+                                         pp, end, fold);
 }
 
 #if 0
@@ -220,8 +246,7 @@ utf16be_is_mbc_ambiguous(OnigCaseFoldType flag, const UChar** pp, const UChar* e
     }
 
     c = *p;
-    v = ONIGENC_IS_UNICODE_ISO_8859_1_BIT_CTYPE(c,
-               (BIT_CTYPE_UPPER | BIT_CTYPE_LOWER));
+    v = ONIGENC_IS_UNICODE_ISO_8859_1_BIT_CTYPE(c, (BIT_CTYPE_UPPER | BIT_CTYPE_LOWER));
 
     if ((v | BIT_CTYPE_LOWER) != 0) {
       /* 0xaa, 0xb5, 0xba are lower case letter, but can't convert. */
@@ -246,7 +271,8 @@ utf16be_left_adjust_char_head(const UChar* start, const UChar* s)
     s--;
   }
 
-  if (UTF16_IS_SURROGATE_SECOND(*s) && s > start + 1)
+  if (UTF16_IS_SURROGATE_SECOND(*s) && s > start + 1 &&
+      UTF16_IS_SURROGATE_FIRST(*(s-2)))
     s -= 2;
 
   return (UChar* )s;
@@ -257,7 +283,7 @@ utf16be_get_case_fold_codes_by_str(OnigCaseFoldType flag,
     const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[])
 {
   return onigenc_unicode_get_case_fold_codes_by_str(ONIG_ENCODING_UTF16_BE,
-                                                   flag, p, end, items);
+                                                    flag, p, end, items);
 }
 
 OnigEncodingType OnigEncodingUTF16_BE = {
index 17f474c15a3dedb38522a60bfbd3c4844dcae5b8..1fbc1b5e7a9a960b0114ff3b6ce1e624fb796de8 100644 (file)
@@ -2,7 +2,7 @@
   utf16_le.c -  Oniguruma (regular expression library)
 **********************************************************************/
 /*-
- * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2019  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -95,7 +95,15 @@ static const int EncLen_UTF16[] = {
 static int
 utf16le_code_to_mbclen(OnigCodePoint code)
 {
-  return (code > 0xffff ? 4 : 2);
+  if (code > 0xffff) {
+    if (code > 0x10ffff)
+      return ONIGERR_INVALID_CODE_POINT_VALUE;
+    else
+      return 4;
+  }
+  else {
+    return 2;
+  }
 }
 
 static int
@@ -110,7 +118,16 @@ is_valid_mbc_string(const UChar* p, const UChar* end)
   const UChar* end1 = end - 1;
 
   while (p < end1) {
-    p += utf16le_mbc_enc_len(p);
+    int len = utf16le_mbc_enc_len(p);
+    if (len == 4) {
+      if (p + 3 < end && ! UTF16_IS_SURROGATE_SECOND(*(p + 3)))
+        return FALSE;
+    }
+    else
+      if (UTF16_IS_SURROGATE_SECOND(*(p + 1)))
+        return FALSE;
+
+    p += len;
   }
 
   if (p != end)
@@ -185,7 +202,7 @@ utf16le_code_to_mbc(OnigCodePoint code, UChar *buf)
 
 static int
 utf16le_mbc_case_fold(OnigCaseFoldType flag,
-                     const UChar** pp, const UChar* end, UChar* fold)
+                      const UChar** pp, const UChar* end, UChar* fold)
 {
   const UChar* p = *pp;
 
@@ -208,13 +225,13 @@ utf16le_mbc_case_fold(OnigCaseFoldType flag,
   }
   else
     return onigenc_unicode_mbc_case_fold(ONIG_ENCODING_UTF16_LE, flag, pp, end,
-                                        fold);
+                                         fold);
 }
 
 #if 0
 static int
 utf16le_is_mbc_ambiguous(OnigCaseFoldType flag, const UChar** pp,
-                        const UChar* end)
+                         const UChar* end)
 {
   const UChar* p = *pp;
 
@@ -253,7 +270,8 @@ utf16le_left_adjust_char_head(const UChar* start, const UChar* s)
     s--;
   }
 
-  if (UTF16_IS_SURROGATE_SECOND(*(s+1)) && s > start + 1)
+  if (UTF16_IS_SURROGATE_SECOND(*(s+1)) && s > start + 1 &&
+      UTF16_IS_SURROGATE_FIRST(*(s-1)))
     s -= 2;
 
   return (UChar* )s;
@@ -264,7 +282,7 @@ utf16le_get_case_fold_codes_by_str(OnigCaseFoldType flag,
     const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[])
 {
   return onigenc_unicode_get_case_fold_codes_by_str(ONIG_ENCODING_UTF16_LE,
-                                                   flag, p, end, items);
+                                                    flag, p, end, items);
 }
 
 OnigEncodingType OnigEncodingUTF16_LE = {
index 0f6a89cd3f17fcd2624aeb2e32a288dba36fb3f2..fa19afe3b00b2ba34ea318332b3a3567d197b6d9 100644 (file)
@@ -91,7 +91,7 @@ utf32be_code_to_mbc(OnigCodePoint code, UChar *buf)
 
 static int
 utf32be_mbc_case_fold(OnigCaseFoldType flag,
-                     const UChar** pp, const UChar* end, UChar* fold)
+                      const UChar** pp, const UChar* end, UChar* fold)
 {
   const UChar* p = *pp;
 
@@ -117,7 +117,7 @@ utf32be_mbc_case_fold(OnigCaseFoldType flag,
   }
   else
     return onigenc_unicode_mbc_case_fold(ONIG_ENCODING_UTF32_BE, flag, pp, end,
-                                        fold);
+                                         fold);
 }
 
 #if 0
@@ -169,7 +169,7 @@ utf32be_get_case_fold_codes_by_str(OnigCaseFoldType flag,
     const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[])
 {
   return onigenc_unicode_get_case_fold_codes_by_str(ONIG_ENCODING_UTF32_BE,
-                                                   flag, p, end, items);
+                                                    flag, p, end, items);
 }
 
 OnigEncodingType OnigEncodingUTF32_BE = {
index 0a832cd7eda54dc180f016095fb4d5157ecb8585..56d08b6fd217d61ae539fdef67dad61b1f0d1f1d 100644 (file)
@@ -91,7 +91,7 @@ utf32le_code_to_mbc(OnigCodePoint code, UChar *buf)
 
 static int
 utf32le_mbc_case_fold(OnigCaseFoldType flag,
-                     const UChar** pp, const UChar* end, UChar* fold)
+                      const UChar** pp, const UChar* end, UChar* fold)
 {
   const UChar* p = *pp;
 
@@ -169,7 +169,7 @@ utf32le_get_case_fold_codes_by_str(OnigCaseFoldType flag,
     const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[])
 {
   return onigenc_unicode_get_case_fold_codes_by_str(ONIG_ENCODING_UTF32_LE,
-                                                   flag, p, end, items);
+                                                    flag, p, end, items);
 }
 
 OnigEncodingType OnigEncodingUTF32_LE = {
index 4d1f9ec5e6a8ad2e48a1088a3629f0d5c60c4648..70c150367d7533b5da2ad00237ff34f8aa951070 100644 (file)
@@ -2,7 +2,7 @@
   utf8.c -  Oniguruma (regular expression library)
 **********************************************************************/
 /*-
- * Copyright (c) 2002-2018  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2002-2019  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -29,6 +29,9 @@
 
 #include "regenc.h"
 
+/* U+0000 - U+10FFFF */
+#define USE_RFC3629_RANGE
+
 /* #define USE_INVALID_CODE_SCHEME */
 
 #ifdef USE_INVALID_CODE_SCHEME
@@ -57,7 +60,11 @@ static const int EncLen_UTF8[] = {
   2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
   2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
   3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+#ifdef USE_RFC3629_RANGE
   4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+#else
+  4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 1, 1
+#endif
 };
 
 static int
@@ -78,11 +85,11 @@ is_valid_mbc_string(const UChar* p, const UChar* end)
     len = mbc_enc_len(p++);
     if (len > 1) {
       for (i = 1; i < len; i++) {
-       if (p == end)
-         return FALSE;
+        if (p == end)
+          return FALSE;
 
-       if (! utf8_istail(*p++))
-         return FALSE;
+        if (! utf8_istail(*p++))
+          return FALSE;
       }
     }
   }
@@ -153,8 +160,10 @@ code_to_mbclen(OnigCodePoint code)
   else if ((code & 0xfffff800) == 0) return 2;
   else if ((code & 0xffff0000) == 0) return 3;
   else if ((code & 0xffe00000) == 0) return 4;
+#ifndef USE_RFC3629_RANGE
   else if ((code & 0xfc000000) == 0) return 5;
   else if ((code & 0x80000000) == 0) return 6;
+#endif
 #ifdef USE_INVALID_CODE_SCHEME
   else if (code == INVALID_CODE_FE) return 1;
   else if (code == INVALID_CODE_FF) return 1;
@@ -188,6 +197,7 @@ code_to_mbc(OnigCodePoint code, UChar *buf)
       *p++ = UTF8_TRAILS(code, 12);
       *p++ = UTF8_TRAILS(code,  6);
     }
+#ifndef USE_RFC3629_RANGE
     else if ((code & 0xfc000000) == 0) {
       *p++ = (UChar )(((code>>24) & 0x03) | 0xf8);
       *p++ = UTF8_TRAILS(code, 18);
@@ -201,6 +211,7 @@ code_to_mbc(OnigCodePoint code, UChar *buf)
       *p++ = UTF8_TRAILS(code, 12);
       *p++ = UTF8_TRAILS(code,  6);
     }
+#endif
 #ifdef USE_INVALID_CODE_SCHEME
     else if (code == INVALID_CODE_FE) {
       *p = 0xfe;
@@ -222,7 +233,7 @@ code_to_mbc(OnigCodePoint code, UChar *buf)
 
 static int
 mbc_case_fold(OnigCaseFoldType flag, const UChar** pp,
-             const UChar* end, UChar* fold)
+              const UChar* end, UChar* fold)
 {
   const UChar* p = *pp;
 
@@ -244,13 +255,13 @@ mbc_case_fold(OnigCaseFoldType flag, const UChar** pp,
   }
   else {
     return onigenc_unicode_mbc_case_fold(ONIG_ENCODING_UTF8, flag,
-                                        pp, end, fold);
+                                         pp, end, fold);
   }
 }
 
 static int
 get_ctype_code_range(OnigCtype ctype, OnigCodePoint *sb_out,
-                    const OnigCodePoint* ranges[])
+                     const OnigCodePoint* ranges[])
 {
   *sb_out = 0x80;
   return onigenc_unicode_ctype_code_range(ctype, ranges);
@@ -274,13 +285,17 @@ get_case_fold_codes_by_str(OnigCaseFoldType flag,
     const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[])
 {
   return onigenc_unicode_get_case_fold_codes_by_str(ONIG_ENCODING_UTF8,
-                                                   flag, p, end, items);
+                                                    flag, p, end, items);
 }
 
 OnigEncodingType OnigEncodingUTF8 = {
   mbc_enc_len,
   "UTF-8",     /* name */
+#ifdef USE_RFC3629_RANGE
   4,           /* max enc length */
+#else
+  6,
+#endif
   1,           /* min enc length */
   onigenc_is_mbc_newline_0x0a,
   mbc_to_code,