diff --git a/scripts/unicode.py b/scripts/unicode.py index d253dcd..48f6964 100755 --- a/scripts/unicode.py +++ b/scripts/unicode.py @@ -196,6 +196,37 @@ def load_properties(f, interestingprops: "list[str | tuple[str, str]] | None" = return props +# Direct-lookup windows for the Grapheme_Cluster_Break table. +# +# The windows below become direct-indexed `u8` arrays. +# +# The gaps between them are either resolved arithmetically +# or by a binary search over the residual range table. + +# Every arithmetic shortcut is asserted against the parsed UCD data in `emit_grapheme_module`, +# so a future Unicode version that invalidates one of these assumptions fails loudly here instead of silently emitting wrong tables. +# +# [0, T0_END) T0, direct +# [T0_END, T1_LO) CJK..Vai, all Any but for two Extended_Pictographic +# [T1_LO, T1_HI) T1, direct +# [HANGUL_LO, HANGUL_HI) Hangul syllables, LV every 28th and LVT otherwise +# [VS_LO, VS_HI) variation selectors, all Extend +# [T2_LO, T2_HI) T2, direct (emoji) +# everything else residual range table +GRAPHEME_T0_END = 0x30A0 # ends just past the last combining kana mark +GRAPHEME_T1_LO = 0xA660 +GRAPHEME_T1_HI = 0xAC00 +GRAPHEME_HANGUL_LO = 0xAC00 +GRAPHEME_HANGUL_HI = 0xD7A4 +GRAPHEME_VS_LO = 0xFE00 +GRAPHEME_VS_HI = 0xFE10 +GRAPHEME_T2_LO = 0x1F000 +GRAPHEME_T2_HI = 0x1FB00 + +# Number of bits the residual table reserves for the category, +# so that a range packs into `(start, end << CAT_BITS | category)`. +GRAPHEME_CAT_BITS = 5 + def escape_char(c): return "'\\u{%x}'" % c @@ -283,17 +314,33 @@ def emit_property_module(f, mod, tbl, emit: "list[str | tuple[str, str]]"): f.write(" }\n\n") f.write("}\n\n") +MAX_CODEPOINT = 0x10FFFF + def emit_break_module(f, break_table, break_cats, name): Name = name.capitalize() - f.write("""pub mod %s { - use core::result::Result::{Ok, Err}; + Prefix = Name[0] - pub use self::%sCat::*; + break_cats.append("Any") + break_cats.sort() - #[allow(non_camel_case_types)] - #[derive(Clone, Copy, PartialEq, Eq, Debug)] - pub enum %sCat { -""" % (name, Name, Name)) + # Each range is one `u32`, `start << cat_bits | category`. + # The category field is widened to a power of two so that masking an entry with `(1 << cat_bits) - 1` + # proves the decode-table index in bounds and the check folds away. + cat_bits = max(1, (len(break_cats) - 1).bit_length()) + cat_num = {cat: i for i, cat in enumerate(break_cats)} + + # Tile the whole codepoint space: gaps between the source ranges become explicit `Any` entries, + # so a codepoint's category is simply the last entry that starts at or before it, + # and one `u32` per range replaces a (char, char, Cat) triple. + packed = [] + next_start = 0 + for (lo, hi, cat) in break_table: + if lo > next_start: + packed.append(next_start << cat_bits | cat_num["Any"]) + packed.append(lo << cat_bits | cat_num[cat]) + next_start = hi + 1 + if next_start <= MAX_CODEPOINT: + packed.append(next_start << cat_bits | cat_num["Any"]) # We don't want the lookup table to be too large so choose a reasonable # cutoff. 0x20000 is selected because most of the range table entries are @@ -305,83 +352,364 @@ def emit_break_module(f, break_table, break_cats, name): lookup_interval = round(lookup_value_cutoff / lookup_table_len) - # Lookup table is a mapping from `character code / lookup_interval` to - # the index in the range table that covers the `character code`. + # Lookup table is a mapping from `character code / lookup_interval` to the index + # in the range table of the entry that covers that `character code`. lookup_table = [0] * lookup_table_len j = 0 for i in range(0, lookup_table_len): - lookup_from = i * lookup_interval - while j < len(break_table): - (_, entry_to, _) = break_table[j] - if entry_to >= lookup_from: - break - j += 1 - lookup_table[i] = j + cp = i * lookup_interval + while j + 1 < len(packed) and (packed[j + 1] >> cat_bits) <= cp: + j += 1 + lookup_table[i] = j - break_cats.append("Any") - break_cats.sort() + f.write("""pub mod %s { + pub use self::%sCat::*; + + #[allow(non_camel_case_types)] + #[derive(Clone, Copy, PartialEq, Eq, Debug)] + pub enum %sCat { +""" % (name, Name, Name)) for cat in break_cats: - f.write((" %sC_" % Name[0]) + cat + ",\n") + f.write(" %sC_%s,\n" % (Prefix, cat)) f.write(""" } - fn bsearch_range_value_table(c: char, r: &[(char, char, %sCat)], default_lower: u32, default_upper: u32) -> (u32, u32, %sCat) { - use core::cmp::Ordering::{Equal, Less, Greater}; - match r.binary_search_by(|&(lo, hi, _)| { - if lo <= c && c <= hi { Equal } - else if hi < c { Less } - else { Greater } - }) { - Ok(idx) => { - let (lower, upper, cat) = r[idx]; - (lower as u32, upper as u32, cat) - } - Err(idx) => { - ( - if idx > 0 { r[idx-1].1 as u32 + 1 } else { default_lower }, - r.get(idx).map(|c|c.0 as u32 - 1).unwrap_or(default_upper), - %sC_Any, - ) - } - } - } + /// Bits reserved for the category in each `%s_cat_table` entry. + const CAT_BITS: u32 = %d; + + /// Category of a `%s_cat_table` entry, indexed by its low `CAT_BITS` bits. + /// + /// Padded out to `1 << CAT_BITS` entries so that masking an entry proves the index in bounds. + /// `CATS[i] as usize == i`, so it doubles as an enumeration of every category. + pub const CATS: [%sCat; 1 << CAT_BITS] = [ + %s, + ]; pub fn %s_category(c: char) -> (u32, u32, %sCat) { - // Perform a quick O(1) lookup in a precomputed table to determine - // the slice of the range table to search in. + let c = c as u32; + + // Perform a quick O(1) lookup in a precomputed table + // to determine the slice of the range table to search in. let lookup_interval = 0x%x; - let idx = (c as u32 / lookup_interval) as usize; - let range = %s_cat_lookup.get(idx..(idx + 2)).map_or( - // If the `idx` is outside of the precomputed table - use the slice - // starting from the last covered index in the precomputed table and - // ending with the length of the range table. - %d..%d, - |r| (r[0] as usize)..((r[1] + 1) as usize) - ); - - // Compute pessimistic default lower and upper bounds on the category. - // If character doesn't map to any range and there is no adjacent range - // in the table slice - these bounds has to apply. - let lower = idx as u32 * lookup_interval; - let upper = lower + lookup_interval - 1; - bsearch_range_value_table(c, &%s_cat_table[range], lower, upper) + let idx = (c / lookup_interval) as usize; + let (lo, hi) = match %s_cat_lookup.get(idx..(idx + 2)) { + Some(r) => (r[0] as usize, r[1] as usize + 1), + // If the `idx` is outside of the precomputed table - use the slice + // starting from the last covered index in the precomputed table and + // ending with the length of the range table. + None => (%d, %s_cat_table.len()), + }; + + // The ranges tile the codepoint space, + // so the entry covering `c` is the last one that starts at or before it. + // `%s_cat_lookup` guarantees that the entry at `lo` starts at or before `c`, so the offset is never zero. + let i = lo + %s_cat_table[lo..hi].partition_point(|&e| (e >> CAT_BITS) <= c) - 1; + let entry = %s_cat_table[i]; + let upper = match %s_cat_table.get(i + 1) { + Some(&next) => (next >> CAT_BITS) - 1, + None => 0x%X, + }; + ( + entry >> CAT_BITS, + upper, + CATS[(entry & ((1 << CAT_BITS) - 1)) as usize], + ) } -""" % (Name, Name, Name[0], name, Name, lookup_interval, name, j, len(break_table), name)) - - - if len(break_table) <= 0xff: - lookup_type = "u8" - elif len(break_table) <= 0xffff: - lookup_type = "u16" +""" % (name, cat_bits, + name, Name, + ",\n ".join("%sC_%s" % (Prefix, break_cats[i]) if i < len(break_cats) else "%sC_Any" % Prefix + for i in range(1 << cat_bits)), + name, Name, lookup_interval, name, lookup_table[-1], name, name, name, name, name, + MAX_CODEPOINT)) + + if len(packed) <= 0x100: + lookup_type = "u8" + elif len(packed) <= 0x10000: + lookup_type = "u16" else: - lookup_type = "u32" + lookup_type = "u32" emit_table(f, "%s_cat_lookup" % name, lookup_table, "&[%s]" % lookup_type, pfun=lambda x: "%d" % x, is_pub=False, is_const=True) - emit_table(f, "%s_cat_table" % name, break_table, "&[(char, char, %sCat)]" % Name, - pfun=lambda x: "(%s,%s,%sC_%s)" % (escape_char(x[0]), escape_char(x[1]), Name[0], x[2]), + # One entry per range: `start << CAT_BITS | category`, sorted by start. + emit_table(f, "%s_cat_table" % name, packed, "&[u32]", + pfun=lambda x: "0x%X" % x, + is_pub=False, is_const=True) + f.write("}\n") + +def emit_nibble_window(f, name, values, per_line=24): + """Emit a direct-indexed category window, two categories per byte. + + There are 16 `Grapheme_Cluster_Break` categories, so one fits in a nibble + and the window costs half of what a byte per codepoint would. + + Unpacking is a shift and a mask at the use site, with no second load, + which a two-level trie would need. + + A byte string keeps the generated file compact and is a single token for rustc, + and the fixed-size array type lets the bounds check be avoidable at the call site. + """ + assert all(0 <= v <= 0xf for v in values), "a category does not fit in a nibble" + assert len(values) % 2 == 0, "window length must be even to pack in pairs" + packed = [values[i] | values[i + 1] << 4 for i in range(0, len(values), 2)] + f.write(" const %s: &[u8; %d] = b\"" % (name, len(packed))) + for i in range(0, len(packed), per_line): + if i: + f.write("\\\n ") + f.write("".join("\\x%02x" % v for v in packed[i:i + per_line])) + f.write("\";\n\n") + +def check_incb_derivable(catmap, cat_index, incb_extend, incb_linker): + """Check that `InCB=Extend` can be recovered from the grapheme category. + + `InCB=Extend` is `[gcb=Extend gcb=ZWJ] - InCB=Linker - U+200C`, + which is why no range table is emitted for it and `grapheme::is_incb_extend` in `src/grapheme.rs`. + + Derives it instead. Also checks that every `InCB=Linker` is Extend or ZWJ, + which is what lets the cursor skip the linker test for every other category. + + A future Unicode version that breaks either assumption fails loudly here. + """ + allowed = {cat_index["Extend"], cat_index["ZWJ"]} + for (label, ranges) in (("InCB=Extend", incb_extend), ("InCB=Linker", incb_linker)): + for (lo, hi) in ranges: + for cp in range(lo, hi + 1): + if catmap[cp] not in allowed: + raise AssertionError( + "U+%04X is %s but its Grapheme_Cluster_Break is not Extend or ZWJ; " + "the fast path in src/grapheme.rs assumes otherwise" % (cp, label)) + + linkers = {cp for (lo, hi) in incb_linker for cp in range(lo, hi + 1)} + actual = {cp for (lo, hi) in incb_extend for cp in range(lo, hi + 1)} + derived = {cp for cp in range(0, 0x110000) + if catmap[cp] in allowed and cp not in linkers and cp != 0x200C} + if actual != derived: + raise AssertionError( + "InCB=Extend is no longer [gcb=Extend gcb=ZWJ] - InCB=Linker - U+200C, so " + "grapheme::is_incb_extend would be wrong: missing=%s extra=%s" + % ([hex(c) for c in sorted(actual - derived)[:8]], + [hex(c) for c in sorted(derived - actual)[:8]])) + +def emit_grapheme_module(f, break_table, break_cats, incb_extend, incb_linker): + """Emit the grapheme module with direct-indexed category windows. + + Unlike the word/sentence/emoji modules this does not binary-search the whole range table. + + Real text lives almost entirely inside the direct windows or the arithmetic shortcuts, + so the common case is a single indexed load. + """ + cats = sorted(break_cats + ["Any"]) + # The pairwise rule table in src/grapheme.rs indexes categories with 4 bits, + # and the residual table packs one into GRAPHEME_CAT_BITS. + assert len(cats) <= 16, \ + "too many Grapheme_Cluster_Break categories for a 4-bit index: %s" % cats + assert len(cats) <= (1 << GRAPHEME_CAT_BITS), "category does not fit the residual packing" + assert cats[0] == "Any", "GC_Any must be category 0, the residual table's default" + cat_index = {name: i for i, name in enumerate(cats)} + + # Dense codepoint -> category map, defaulting to Any. + catmap = bytearray(0x110000) + for (lo, hi, cat) in break_table: + v = cat_index[cat] + for cp in range(lo, hi + 1): + catmap[cp] = v + + def check(cond, msg): + if not cond: + raise AssertionError( + "the grapheme category lookup shortcuts in scripts/unicode.py are stale " + "for Unicode %s: %s" % (UNICODE_VERSION_NUMBER, msg)) + + # The CJK..Vai gap is resolved with two equality tests. + gap = {cp for cp in range(GRAPHEME_T0_END, GRAPHEME_T1_LO) + if catmap[cp] != cat_index["Any"]} + check(gap == {0x3297, 0x3299}, + "expected only U+3297 and U+3299 to be non-Any in [%#x, %#x), found %s" + % (GRAPHEME_T0_END, GRAPHEME_T1_LO, sorted(hex(c) for c in gap))) + check(all(catmap[cp] == cat_index["Extended_Pictographic"] for cp in gap), + "U+3297/U+3299 are no longer Extended_Pictographic") + + # Hangul syllables are LV at every 28th codepoint and LVT otherwise. + for cp in range(GRAPHEME_HANGUL_LO, GRAPHEME_HANGUL_HI): + want = "LV" if (cp - GRAPHEME_HANGUL_LO) % 28 == 0 else "LVT" + check(catmap[cp] == cat_index[want], + "U+%04X is not %s" % (cp, want)) + + # Variation selectors are all Extend. + for cp in range(GRAPHEME_VS_LO, GRAPHEME_VS_HI): + check(catmap[cp] == cat_index["Extend"], "U+%04X is not Extend" % cp) + + check_incb_derivable(catmap, cat_index, incb_extend, incb_linker) + + # Everything the windows and the shortcuts do not cover. + residual_regions = [ + (GRAPHEME_HANGUL_HI, GRAPHEME_VS_LO), + (GRAPHEME_VS_HI, GRAPHEME_T2_LO), + (GRAPHEME_T2_HI, 0x110000), + ] + residual = [] + for (rlo, rhi) in residual_regions: + cp = rlo + while cp < rhi: + v = catmap[cp] + if v == cat_index["Any"]: + cp += 1 + continue + start = cp + while cp < rhi and catmap[cp] == v: + cp += 1 + residual.append((start, cp - 1, v)) + for (_, end, v) in residual: + assert end >> (32 - GRAPHEME_CAT_BITS) == 0 and v < (1 << GRAPHEME_CAT_BITS) + + # Replay the lookup that is about to be emitted over every codepoint and + # check it against the range table it is derived from. This catches an + # off-by-one in a window bound or in the residual table, which would + # otherwise only show up as a wrong break somewhere in the middle of a script + # nobody tests. + packed = [(start, end << GRAPHEME_CAT_BITS | v) for (start, end, v) in residual] + def emitted_lookup(cp): + if cp < GRAPHEME_T0_END: + return catmap[cp] # t0 + if cp < GRAPHEME_T1_LO: + return cat_index["Extended_Pictographic"] if cp in (0x3297, 0x3299) \ + else cat_index["Any"] + if cp < GRAPHEME_T1_HI: + return catmap[cp] # t1 + if cp < GRAPHEME_HANGUL_HI: + return cat_index["LV"] if (cp - GRAPHEME_HANGUL_LO) % 28 == 0 else cat_index["LVT"] + if GRAPHEME_T2_LO <= cp < GRAPHEME_T2_HI: + return catmap[cp] # t2 + if cp >> 4 == GRAPHEME_VS_LO >> 4: + return cat_index["Extend"] + lo, hi = 0, len(packed) + while lo < hi: + mid = (lo + hi) // 2 + (start, pk) = packed[mid] + if cp < start: + hi = mid + elif cp > pk >> GRAPHEME_CAT_BITS: + lo = mid + 1 + else: + return pk & ((1 << GRAPHEME_CAT_BITS) - 1) + return cat_index["Any"] + + for cp in range(0, 0x110000): + check(emitted_lookup(cp) == catmap[cp], + "the emitted lookup disagrees with the range table at U+%04X " + "(got %d, want %d)" % (cp, emitted_lookup(cp), catmap[cp])) + windows = (GRAPHEME_T0_END + (GRAPHEME_T1_HI - GRAPHEME_T1_LO) + + (GRAPHEME_T2_HI - GRAPHEME_T2_LO)) // 2 + sys.stderr.write( + "grapheme: %d packed bytes + %d residual ranges (%d B), verified over all " + "%d codepoints\n" % (windows, len(residual), len(residual) * 8, 0x110000)) + + f.write("""pub mod grapheme { + pub use self::GraphemeCat::*; + + /// `Grapheme_Cluster_Break` property values, plus `InCB=Consonant` folded in + /// as a category of its own since it never overlaps another one. + /// + /// The discriminants are the values stored in the tables below and are the + /// index space of the pairwise rule table in `src/grapheme.rs`. + #[allow(non_camel_case_types)] + #[repr(u8)] + #[derive(Clone, Copy, PartialEq, Eq, Debug)] + pub enum GraphemeCat { +""") + for cat in cats: + f.write(" GC_%s = %d,\n" % (cat, cat_index[cat])) + f.write(" }\n\n") + + f.write(" /// Every `GraphemeCat` in discriminant order, so `CATS[i] as u8 == i`.\n") + f.write(" pub const CATS: [GraphemeCat; 16] = [\n ") + f.write(",\n ".join(["GC_%s" % c for c in cats] + ["GC_Any"] * (16 - len(cats)))) + f.write(",\n ];\n\n") + + f.write(""" /// Category at index `i` of a window that packs two per byte, low nibble first. + #[inline] + fn nibble(window: &[u8; N], i: u32) -> u8 { + window[(i >> 1) as usize] >> ((i & 1) << 2) & 15 + } + + /// `Grapheme_Cluster_Break` of `c`, as a raw category byte. + /// + /// This is the hot path of grapheme cluster segmentation: everything below + /// U+30A0 (which is every script whose clusters are non-trivial, plus latin, + /// cyrillic and the kana) and the whole emoji block are a single load, the + /// CJK ideographs and the hangul syllables are arithmetic, and only the rare + /// tail reaches a binary search. + #[inline] + pub fn grapheme_category_raw(c: char) -> u8 { + let cp = c as u32; + if cp < 0x%X { + return nibble(grapheme_cat_t0, cp); + } + // CJK through Vai + if cp < 0x%X { + return if cp == 0x3297 || cp == 0x3299 { %d } else { %d }; + } + if cp < 0x%X { + return nibble(grapheme_cat_t1, cp - 0x%X); + } + // Hangul syllables: LV at every 28th, LVT otherwise + if cp < 0x%X { + return if (cp - 0x%X) %% 28 == 0 { %d } else { %d }; + } + if (0x%X..0x%X).contains(&cp) { + return nibble(grapheme_cat_t2, cp - 0x%X); + } + // Variation selectors + if cp >> 4 == 0x%X { + return %d; + } + grapheme_category_residual(cp) + } + + /// `Grapheme_Cluster_Break` of `c`. + #[inline] + pub fn grapheme_category(c: char) -> GraphemeCat { + CATS[(grapheme_category_raw(c) & 15) as usize] + } + + /// Cold half of [`grapheme_category_raw`], kept out of line so the hot half + /// stays small enough to inline. + fn grapheme_category_residual(cp: u32) -> u8 { + use core::cmp::Ordering::{Equal, Greater, Less}; + match grapheme_cat_residual.binary_search_by(|&(start, packed)| { + if cp < start { + Greater + } else if cp > packed >> %d { + Less + } else { + Equal + } + }) { + core::result::Result::Ok(idx) => (grapheme_cat_residual[idx].1 & %d) as u8, + core::result::Result::Err(_) => %d, + } + } + +""" % ( + GRAPHEME_T0_END, + GRAPHEME_T1_LO, cat_index["Extended_Pictographic"], cat_index["Any"], + GRAPHEME_T1_HI, GRAPHEME_T1_LO, + GRAPHEME_HANGUL_HI, GRAPHEME_HANGUL_LO, cat_index["LV"], cat_index["LVT"], + GRAPHEME_T2_LO, GRAPHEME_T2_HI, GRAPHEME_T2_LO, + GRAPHEME_VS_LO >> 4, cat_index["Extend"], + GRAPHEME_CAT_BITS, (1 << GRAPHEME_CAT_BITS) - 1, cat_index["Any"], + )) + + emit_nibble_window(f, "grapheme_cat_t0", catmap[0:GRAPHEME_T0_END]) + emit_nibble_window(f, "grapheme_cat_t1", catmap[GRAPHEME_T1_LO:GRAPHEME_T1_HI]) + emit_nibble_window(f, "grapheme_cat_t2", catmap[GRAPHEME_T2_LO:GRAPHEME_T2_HI]) + + f.write(" /// Ranges outside the direct windows, as `(start, end << %d | category)`.\n" + % GRAPHEME_CAT_BITS) + emit_table(f, "grapheme_cat_residual", residual, "&[(u32, u32)]", + pfun=lambda x: "(0x%x,0x%x)" % (x[0], x[1] << GRAPHEME_CAT_BITS | x[2]), is_pub=False, is_const=True) f.write("}\n") @@ -408,7 +736,7 @@ def emit_break_module(f, break_table, break_cats, name): emit_util_mod(rf) for (name, cat, pfuns) in ("general_category", gencats, ["N"]), \ - ("derived_property", derived, ["Alphabetic", ("InCB", "Extend")]): + ("derived_property", derived, ["Alphabetic"]): emit_property_module(rf, name, cat, pfuns) rf.write("""pub fn is_incb_linker(c: char) -> bool { @@ -417,7 +745,7 @@ def emit_break_module(f, break_table, break_cats, name): for (lo, hi) in derived[("InCB", "Linker")]: rf.write(f" | '\\u{{{lo:X}}}'") if lo != hi: - rf.write(f"..'\\u{{{lo:X}}}'") + rf.write(f"..='\\u{{{hi:X}}}'") rf.write(")\n}\n\n") @@ -444,7 +772,8 @@ def emit_break_module(f, break_table, break_cats, name): if chars[0] <= last: raise "Grapheme tables and Extended_Pictographic values overlap; need to store these separately!" last = chars[1] - emit_break_module(rf, grapheme_table, list(grapheme_cats.keys()), "grapheme") + emit_grapheme_module(rf, grapheme_table, list(grapheme_cats.keys()), + derived[("InCB", "Extend")], derived[("InCB", "Linker")]) rf.write("\n") word_cats = load_properties("auxiliary/WordBreakProperty.txt") diff --git a/src/grapheme.rs b/src/grapheme.rs index d33a351..dad6df6 100644 --- a/src/grapheme.rs +++ b/src/grapheme.rs @@ -8,7 +8,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use crate::tables::grapheme::GraphemeCat; +use crate::tables::grapheme::{self as gr, GraphemeCat}; use core::cmp; /// External iterator for grapheme clusters and byte offsets. @@ -79,7 +79,7 @@ impl<'a> DoubleEndedIterator for GraphemeIndices<'a> { #[derive(Clone, Debug)] pub struct Graphemes<'a> { string: &'a str, - cursor: GraphemeCursor, + cursor: GraphemeFwd<'a>, cursor_back: GraphemeCursor, } @@ -98,7 +98,7 @@ impl<'a> Graphemes<'a> { /// assert_eq!(iter.as_str(), ""); /// ``` pub fn as_str(&self) -> &'a str { - &self.string[self.cursor.cur_cursor()..self.cursor_back.cur_cursor()] + &self.string[self.cursor.offset..self.cursor_back.cur_cursor()] } } @@ -107,17 +107,19 @@ impl<'a> Iterator for Graphemes<'a> { #[inline] fn size_hint(&self) -> (usize, Option) { - let slen = self.cursor_back.cur_cursor() - self.cursor.cur_cursor(); + let slen = self.cursor_back.cur_cursor() - self.cursor.offset; (cmp::min(slen, 1), Some(slen)) } #[inline] fn next(&mut self) -> Option<&'a str> { - let start = self.cursor.cur_cursor(); + let start = self.cursor.offset; if start == self.cursor_back.cur_cursor() { return None; } - let next = self.cursor.next_boundary(self.string, 0).unwrap().unwrap(); + // Where a boundary lies is a property of the position, + // so the forward driver and the backward cursor agree wherever they meet. + let next = self.cursor.next_boundary(); Some(&self.string[start..next]) } } @@ -126,7 +128,7 @@ impl<'a> DoubleEndedIterator for Graphemes<'a> { #[inline] fn next_back(&mut self) -> Option<&'a str> { let end = self.cursor_back.cur_cursor(); - if end == self.cursor.cur_cursor() { + if end == self.cursor.offset { return None; } let prev = self @@ -143,7 +145,7 @@ pub fn new_graphemes(s: &str, is_extended: bool) -> Graphemes<'_> { let len = s.len(); Graphemes { string: s, - cursor: GraphemeCursor::new(0, len, is_extended), + cursor: GraphemeFwd::new(s, is_extended), cursor_back: GraphemeCursor::new(len, len, is_extended), } } @@ -212,11 +214,20 @@ pub struct GraphemeCursor { /// is set, then counts the number of RIS between that and `offset`, otherwise /// is an accurate count relative to the string. ris_count: Option, + /// Packed rule state for the text preceding `offset`, when it is known. + /// + /// The same value `GraphemeFwd::packed_state` holds; `None` here means the cursor has been seeked + /// or walked backwards and the backward scans have to recover the context. + /// + /// It is known whenever the cursor has walked forwards from the start of the string, + /// which is the case for `Graphemes` and `GraphemeIndices`. + /// + /// Then every rule is decided by a mask test and no rule ever has to scan backwards. + /// It is `None` after seeking or walking backwards, where the backward scans take over again. + packed_state: Option, /// Set if a call to `prev_boundary` or `next_boundary` was suspended due /// to needing more input. resuming: bool, - /// Cached grapheme category and associated scalar value range. - grapheme_cat_cache: (u32, u32, GraphemeCat), } /// An error return indicating that not enough content was available in the @@ -263,10 +274,24 @@ enum PairResult { Emoji, } +/// Whether a codepoint has `Indic_Conjunct_Break=Extend`, given its grapheme category. +/// +/// `InCB=Extend` is derived as +/// `[\p{gcb=Extend} \p{gcb=ZWJ}] - \p{InCB=Linker} - \p{InCB=Consonant} - U+200C`, +/// and no `InCB=Consonant` is `gcb=Extend` or `gcb=ZWJ`, +/// so the grapheme category the caller already has plus two equality tests decide it. +/// +/// That saves a binary search over a dedicated range table for every codepoint the cursor walks over. #[inline] -fn check_pair(before: GraphemeCat, after: GraphemeCat) -> PairResult { +fn is_incb_extend(cat: GraphemeCat, ch: char) -> bool { + matches!(cat, GraphemeCat::GC_Extend | GraphemeCat::GC_ZWJ) + && ch != '\u{200c}' + && !crate::tables::is_incb_linker(ch) +} + +const fn pair_rules(before: GraphemeCat, after: GraphemeCat) -> PairResult { use self::PairResult::*; - use crate::tables::grapheme::GraphemeCat::*; + use GraphemeCat::*; match (before, after) { (GC_CR, GC_LF) => NotBreak, // GB3 (GC_Control | GC_CR | GC_LF, _) => Break, // GB4 @@ -284,6 +309,232 @@ fn check_pair(before: GraphemeCat, after: GraphemeCat) -> PairResult { } } +// Bits of the packed rule state, which summarises everything +// the boundary rules can ask about the text preceding the cursor. +// +// It is a pure function of the codepoints consumed so far, +// so it carries across cluster boundaries and needs no reset. +// +// The bits a rule can ask about are laid out so that each `PAIR_MASK` entry selects exactly one of them, +// which turns every rule into a single `state & mask == 0` test. + +/// Always set, so that a mask of `ALWAYS` means "never a boundary". +const ALWAYS: u8 = 1 << 0; +/// An odd run of `Regional_Indicator` immediately precedes (GB12, GB13). +const RIS_ODD: u8 = 1 << 1; +/// The last codepoint is a ZWJ that was preceded by `Extended_Pictographic Extend*` (GB11). +const EMOJI_ZWJ: u8 = 1 << 2; +/// The `InCB=Consonant` run in progress contains an `InCB=Linker` (GB9c). +const INCB_LINKED: u8 = 1 << 3; +/// `Extended_Pictographic Extend*` immediately precedes; feeds `EMOJI_ZWJ` on a ZWJ. +const EXTPIC_RUN: u8 = 1 << 4; +/// `InCB=Consonant [InCB=Extend InCB=Linker]*` precedes. +const INCB_RUN: u8 = 1 << 5; +/// This cursor computes extended clusters, enabling GB9a, GB9b and GB9c. +const EXTENDED: u8 = 1 << 6; + +const _: () = assert!( + EXTENDED >> 1 == INCB_RUN, + "next_state_slow opens the InCB run by shifting the mode bit", +); + +/// Bits that survive consuming an `Extend`: the mode, plus the pictographic run that +/// GB11 allows `Extend*` to span. +const EXTEND_KEEP: u8 = EXTENDED | ALWAYS | EXTPIC_RUN; + +/// The state at the very start of a string. +#[inline] +const fn initial_state(is_extended: bool) -> u8 { + if is_extended { + ALWAYS | EXTENDED + } else { + ALWAYS + } +} + +/// The state bit that decides `check_pair`'s verdict for a pair of categories. +/// +/// A mask of `0` is an unconditional boundary and can never match, +/// while `ALWAYS` is unconditionally not a boundary. +const fn pair_mask(before: GraphemeCat, after: GraphemeCat) -> u8 { + match pair_rules(before, after) { + PairResult::NotBreak => ALWAYS, + PairResult::Break => 0, + PairResult::Extended => EXTENDED, + PairResult::InCbConsonant => INCB_LINKED, + PairResult::Regional => RIS_ODD, + PairResult::Emoji => EMOJI_ZWJ, + } +} + +/// `check_pair` evaluated for every category pair, +/// indexed by `(before as usize) << 4 | after as usize`. +/// +/// There is a boundary between the two codepoints exactly when the packed state and +/// the pair's mask share no bit. +const PAIR_MASK: [u8; 256] = { + let mut table = [0u8; 256]; + let mut before = 0; + while before < 16 { + let mut after = 0; + while after < 16 { + table[before << 4 | after] = pair_mask( + crate::tables::grapheme::CATS[before], + crate::tables::grapheme::CATS[after], + ); + after += 1; + } + before += 1; + } + table +}; + +/// The verdict for a pair of categories, for a cursor whose pre-context is unknown. +/// +/// Decodes `PAIR_MASK` rather than re-running the rules: each mask is a single bit, +/// so the mapping is total, and one indexed load beats matching on the pair. +#[inline] +fn check_pair(before: GraphemeCat, after: GraphemeCat) -> PairResult { + match PAIR_MASK[(before as usize) << 4 | after as usize] { + ALWAYS => PairResult::NotBreak, + RIS_ODD => PairResult::Regional, + EMOJI_ZWJ => PairResult::Emoji, + INCB_LINKED => PairResult::InCbConsonant, + EXTENDED => PairResult::Extended, + _ => PairResult::Break, + } +} + +/// State transition for consuming an `Extend` that continues an `InCB=Consonant` run. +/// +/// Split out of `next_state` because it is the only transition that has to look at +/// the codepoint rather than just its category. +#[inline] +fn extend_in_incb_run(state: u8, ch: char) -> u8 { + if ch == '\u{200c}' { + // ZWNJ is `InCB=None`, so it ends the conjunct sequence. + state & EXTEND_KEEP + } else if state & INCB_LINKED != 0 || crate::tables::is_incb_linker(ch) { + state & EXTEND_KEEP | INCB_LINKED | INCB_RUN + } else { + // `InCB=Extend`: the run continues but is still unlinked. + state & EXTEND_KEEP | INCB_RUN + } +} + +// The state machine works on raw category bytes, which is what the tables hand back and +// what indexes `PAIR_MASK`, so neither driver has to widen them to the enum. +const CAT_EXTEND: u8 = GraphemeCat::GC_Extend as u8; +const CAT_PICTOGRAPHIC: u8 = GraphemeCat::GC_Extended_Pictographic as u8; +const CAT_REGIONAL: u8 = GraphemeCat::GC_Regional_Indicator as u8; +const CAT_ZWJ: u8 = GraphemeCat::GC_ZWJ as u8; +const CAT_CONSONANT: u8 = GraphemeCat::GC_InCB_Consonant as u8; + +/// The only categories that carry anything forward. Everything else resets the state. +const STATEFUL_CATS: u16 = + 1 << CAT_EXTEND | 1 << CAT_PICTOGRAPHIC | 1 << CAT_REGIONAL | 1 << CAT_ZWJ | 1 << CAT_CONSONANT; + +/// The packed state after consuming `ch`, whose category is `cat`. +/// +/// Screening the five stateful categories with one mask test, +/// instead of letting the `match` in `next_state_slow` dispatch every codepoint. +#[inline] +fn next_state(state: u8, cat: u8, ch: char) -> u8 { + if STATEFUL_CATS & 1 << cat == 0 { + // Nothing to remember: keep only the mode flag. + state & EXTENDED | ALWAYS + } else { + next_state_slow(state, cat, ch) + } +} + +/// The half of `next_state` that only the five stateful categories reach. +#[inline] +fn next_state_slow(state: u8, cat: u8, ch: char) -> u8 { + let mode = state & EXTENDED; + match cat { + CAT_EXTEND if state & INCB_RUN != 0 => extend_in_incb_run(state, ch), + CAT_EXTEND => state & EXTEND_KEEP, + CAT_PICTOGRAPHIC => mode | ALWAYS | EXTPIC_RUN, + // Flip the parity of the run of regional indicators. + CAT_REGIONAL => mode | ((state & RIS_ODD) ^ (ALWAYS | RIS_ODD)), + // A ZWJ arms GB11 if a pictographic run precedes it, and is itself `InCB=Extend`, + // so any conjunct sequence in progress carries on. + CAT_ZWJ => mode | ((state & EXTPIC_RUN) >> 2) | (state & (ALWAYS | INCB_LINKED | INCB_RUN)), + // GB9c only applies to extended clusters. + // Never opening the run in legacy mode is what keeps `INCB_LINKED` clear there, + // so the `INCB_LINKED` mask stays a boundary. + // `EXTENDED >> 1 == INCB_RUN`, which opens the run without branching on the mode; + // consonants are common in the scripts GB9c exists for, and the branch mispredicts. + CAT_CONSONANT => mode | ALWAYS | (mode >> 1), + _ => mode | ALWAYS, + } +} + +/// Forward-only driver over a contiguous string. +/// +/// `GraphemeCursor` has to be able to recover the context that GB9c, GB11 and GB12/GB13 +/// need by scanning backwards, because it may be shown the string in pieces and walked in either direction. +#[derive(Clone, Debug)] +struct GraphemeFwd<'a> { + iter: core::str::CharIndices<'a>, + /// Total length of the string. + len: usize, + /// Byte offset of the start of the cluster being scanned. + offset: usize, + /// Category of the last consumed codepoint. + cat_before: u8, + /// Packed rule state for everything consumed so far. + /// + /// The same value `GraphemeCursor::packed_state` holds, seeded by `initial_state` and + /// advanced by `next_state` just the same. + /// + /// It needs no `Option` here because a forward-only driver always knows it. + packed_state: u8, +} + +impl<'a> GraphemeFwd<'a> { + fn new(s: &'a str, is_extended: bool) -> GraphemeFwd<'a> { + let mut fwd = GraphemeFwd { + iter: s.char_indices(), + len: s.len(), + offset: 0, + cat_before: GraphemeCat::GC_Any as u8, + packed_state: initial_state(is_extended), + }; + // Consume the first codepoint; nothing can break before it. + if let Some((_, ch)) = fwd.iter.next() { + fwd.cat_before = gr::grapheme_category_raw(ch); + fwd.packed_state = next_state(fwd.packed_state, fwd.cat_before, ch); + } + fwd + } + + /// Advance to the next boundary and return its offset. + #[inline] + fn next_boundary(&mut self) -> usize { + loop { + let (i, ch) = match self.iter.next() { + Some(next) => next, + None => { + self.offset = self.len; + return self.len; + } + }; + let cat_after = gr::grapheme_category_raw(ch); + let boundary = self.packed_state + & PAIR_MASK[(self.cat_before as usize) << 4 | cat_after as usize] + == 0; + self.packed_state = next_state(self.packed_state, cat_after, ch); + self.cat_before = cat_after; + if boundary { + self.offset = i; + return i; + } + } + } +} + impl GraphemeCursor { /// Create a new cursor. The string and initial offset are given at creation /// time, but the contents of the string are not. The `is_extended` parameter @@ -315,37 +566,16 @@ impl GraphemeCursor { pre_context_offset: None, incb_linker_count: None, ris_count: None, + packed_state: (offset == 0).then(|| initial_state(is_extended)), resuming: false, - grapheme_cat_cache: (0, 0, GraphemeCat::GC_Control), } } - fn grapheme_category(&mut self, ch: char) -> GraphemeCat { - use crate::tables::grapheme as gr; - use crate::tables::grapheme::GraphemeCat::*; - - if ch <= '\u{7e}' { - // Special-case optimization for ascii, except U+007F. This - // improves performance even for many primarily non-ascii texts, - // due to use of punctuation and white space characters from the - // ascii range. - if ch >= '\u{20}' { - GC_Any - } else if ch == '\n' { - GC_LF - } else if ch == '\r' { - GC_CR - } else { - GC_Control - } - } else { - // If this char isn't within the cached range, update the cache to the - // range that includes it. - if (ch as u32) < self.grapheme_cat_cache.0 || (ch as u32) > self.grapheme_cat_cache.1 { - self.grapheme_cat_cache = gr::grapheme_category(ch); - } - self.grapheme_cat_cache.2 - } + #[inline] + fn grapheme_category(&self, ch: char) -> GraphemeCat { + // Everything but a rare tail is a direct index into a category window, + // so there is no range left worth caching between calls. + gr::grapheme_category(ch) } // Not sure I'm gonna keep this, the advantage over new() seems thin. @@ -373,6 +603,7 @@ impl GraphemeCursor { self.cat_after = None; self.incb_linker_count = None; self.ris_count = None; + self.packed_state = (offset == 0).then(|| initial_state(self.is_extended)); } } @@ -437,6 +668,75 @@ impl GraphemeCursor { } } + /// Advance the RIS and `InCB=Linker` counters over one consumed codepoint. + /// + /// The packed state supersedes these for deciding a boundary, but they are still what + /// the backward scans resume from and what `is_boundary` consults at a chunk start. + #[inline] + fn step_counters(&mut self, cat: u8, ch: char) { + // Every `InCB=Linker` is `gcb=Extend`, so a category that is neither `Extend` nor + // `ZWJ` rules out both InCB roles without touching the codepoint. + if cat != CAT_EXTEND && cat != CAT_ZWJ { + self.incb_linker_count = Some(0); + } else if crate::tables::is_incb_linker(ch) { + self.incb_linker_count = Some(self.incb_linker_count.map_or(1, |c| c + 1)); + } else if ch == '\u{200c}' { + self.incb_linker_count = Some(0); + } + if cat == CAT_REGIONAL { + self.ris_count = self.ris_count.map(|c| c + 1); + } else { + self.ris_count = Some(0); + } + } + + /// Walk forward from `self.offset` to the next boundary, + /// with every rule resolved by the packed state. + /// + /// `chunk` must be the whole string and `packed_state` the state at `self.offset`. + /// + /// Each codepoint costs a category lookup, a mask test and a state update; + /// the backward scans and the `Option` bookkeeping the general path needs are + /// all unnecessary once the state is known. + /// + /// Leaves the cursor exactly as the general path would. + fn scan_boundary(&mut self, chunk: &str, packed_state: u8) -> usize { + let mut packed_state = packed_state; + let mut iter = chunk[self.offset..].chars(); + let mut ch = iter.next().expect("offset < len, so a codepoint follows"); + let mut cat = match self.cat_after { + Some(cat) => cat as u8, + None => gr::grapheme_category_raw(ch), + }; + loop { + self.offset += ch.len_utf8(); + packed_state = next_state(packed_state, cat, ch); + self.step_counters(cat, ch); + let cat_before = cat; + match iter.next() { + Some(next_ch) => { + ch = next_ch; + cat = gr::grapheme_category_raw(ch); + if packed_state & PAIR_MASK[(cat_before as usize) << 4 | cat as usize] == 0 { + self.state = GraphemeState::Break; + self.cat_before = Some(gr::CATS[cat_before as usize]); + self.cat_after = Some(gr::CATS[cat as usize]); + self.packed_state = Some(packed_state); + return self.offset; + } + } + None => { + // End of the string is always a boundary. + self.state = GraphemeState::Break; + self.cat_before = Some(gr::CATS[cat_before as usize]); + self.cat_after = None; + self.packed_state = Some(packed_state); + return self.offset; + } + } + } + } + #[inline] fn decide(&mut self, is_break: bool) { self.state = if is_break { @@ -488,16 +788,18 @@ impl GraphemeCursor { let mut incb_linker_count = self.incb_linker_count.unwrap_or(0); for ch in chunk.chars().rev() { + let cat = self.grapheme_category(ch); + if is_incb_extend(cat, ch) { + // We ignore InCB extends, continue + continue; + } if tables::is_incb_linker(ch) { // We found an InCB linker incb_linker_count += 1; self.incb_linker_count = Some(incb_linker_count); - } else if tables::derived_property::InCB_Extend(ch) { - // We ignore InCB extends, continue } else { // Prev character is neither linker nor extend, break suppressed iff it's InCB=Consonant - let result = !(self.incb_linker_count.unwrap_or(0) > 0 - && self.grapheme_category(ch) == gr::GC_InCB_Consonant); + let result = !(incb_linker_count > 0 && cat == gr::GC_InCB_Consonant); self.decide(result); return; } @@ -515,7 +817,6 @@ impl GraphemeCursor { #[inline] fn handle_regional(&mut self, chunk: &str, chunk_start: usize) { - use crate::tables::grapheme as gr; let mut ris_count = self.ris_count.unwrap_or(0); for ch in chunk.chars().rev() { if self.grapheme_category(ch) != gr::GC_Regional_Indicator { @@ -641,28 +942,42 @@ impl GraphemeCursor { let ch = chunk[..offset_in_chunk].chars().next_back().unwrap(); self.cat_before = Some(self.grapheme_category(ch)); } - match check_pair(self.cat_before.unwrap(), self.cat_after.unwrap()) { - PairResult::NotBreak => self.decision(false), - PairResult::Break => self.decision(true), - PairResult::Extended => { - let is_extended = self.is_extended; - self.decision(!is_extended) - } - PairResult::InCbConsonant => { - self.handle_incb_consonant(&chunk[..offset_in_chunk], chunk_start); - self.is_boundary_result() - } - PairResult::Regional => { - if let Some(ris_count) = self.ris_count { - return self.decision((ris_count % 2) == 0); + let (before, after) = (self.cat_before.unwrap(), self.cat_after.unwrap()); + match self.packed_state { + // The packed state already summarises the pre-context every rule cares about, + // so a single mask test replaces `check_pair` and the backward scans below. + // + // Only when the chunk starts the string, though: from there a backward scan can + // never run out of chunk, so skipping it cannot turn a `PreContext` request into an answer, + // and callers feeding the cursor in pieces see the protocol they always have. + // + // `ris_count` must already be known for the same reason as in `next_boundary`: + // `handle_regional` is the only scan whose side effect is visible later. + Some(packed_state) if chunk_start == 0 && self.ris_count.is_some() => self + .decision(packed_state & PAIR_MASK[(before as usize) << 4 | after as usize] == 0), + _ => match check_pair(before, after) { + PairResult::NotBreak => self.decision(false), + PairResult::Break => self.decision(true), + PairResult::Extended => { + let is_extended = self.is_extended; + self.decision(!is_extended) } - self.handle_regional(&chunk[..offset_in_chunk], chunk_start); - self.is_boundary_result() - } - PairResult::Emoji => { - self.handle_emoji(&chunk[..offset_in_chunk], chunk_start, false); - self.is_boundary_result() - } + PairResult::InCbConsonant => { + self.handle_incb_consonant(&chunk[..offset_in_chunk], chunk_start); + self.is_boundary_result() + } + PairResult::Regional => { + if let Some(ris_count) = self.ris_count { + return self.decision((ris_count % 2) == 0); + } + self.handle_regional(&chunk[..offset_in_chunk], chunk_start); + self.is_boundary_result() + } + PairResult::Emoji => { + self.handle_emoji(&chunk[..offset_in_chunk], chunk_start, false); + self.is_boundary_result() + } + }, } } @@ -707,6 +1022,20 @@ impl GraphemeCursor { if self.offset == self.len { return Ok(None); } + // Fast path: the whole string is in hand and the packed state is known, + // so no rule can need pre-context and none of the suspend/resume bookkeeping can come into play. + // + // That is the shape `Graphemes` and `GraphemeIndices` always call in, + // and a cursor walked forward from the start of a contiguous string as well. + // + // `handle_regional` seeds `ris_count` as a side effect, and whether it has run is observable at a chunk start, + // so leave the leading run of regional indicators to the general path. + if chunk_start == 0 && chunk.len() == self.len && !self.resuming && self.ris_count.is_some() + { + if let Some(packed_state) = self.packed_state { + return Ok(Some(self.scan_boundary(chunk, packed_state))); + } + } let mut iter = chunk[self.offset.saturating_sub(chunk_start)..].chars(); let mut ch = match iter.next() { Some(ch) => ch, @@ -724,16 +1053,13 @@ impl GraphemeCursor { if self.cat_before.is_none() { self.cat_before = Some(self.grapheme_category(ch)); } - if crate::tables::is_incb_linker(ch) { - self.incb_linker_count = Some(self.incb_linker_count.map_or(1, |c| c + 1)); - } else if !crate::tables::derived_property::InCB_Extend(ch) { - self.incb_linker_count = Some(0); - } - if self.cat_before.unwrap() == GraphemeCat::GC_Regional_Indicator { - self.ris_count = self.ris_count.map(|c| c + 1); - } else { - self.ris_count = Some(0); - } + let cat = self.cat_before.unwrap(); + self.step_counters(cat as u8, ch); + // Walking forwards also keeps the packed state exact, + // which is what lets `is_boundary` settle the stateful rules without scanning back. + self.packed_state = self + .packed_state + .map(|packed_state| next_state(packed_state, cat as u8, ch)); if let Some(next_ch) = iter.next() { ch = next_ch; self.cat_after = Some(self.grapheme_category(ch)); @@ -812,11 +1138,14 @@ impl GraphemeCursor { self.offset -= ch.len_utf8(); self.cat_after = self.cat_before.take(); self.state = GraphemeState::Unknown; + // The packed state only runs forwards, + // so it is unknown from here and the backward scans decide the stateful rules again. + self.packed_state = (self.offset == 0).then(|| initial_state(self.is_extended)); if let Some(incb_linker_count) = self.incb_linker_count { self.incb_linker_count = if incb_linker_count > 0 && crate::tables::is_incb_linker(ch) { Some(incb_linker_count - 1) - } else if crate::tables::derived_property::InCB_Extend(ch) { + } else if is_incb_extend(self.grapheme_category(ch), ch) { Some(incb_linker_count) } else { None diff --git a/src/tables.rs b/src/tables.rs index efa2a41..2185153 100644 --- a/src/tables.rs +++ b/src/tables.rs @@ -361,130 +361,6 @@ pub mod derived_property { super::util::bsearch_range_table(c, Alphabetic_table) } - const InCB_Extend_table: &[(char, char)] = &[ - ('\u{300}', '\u{36f}'), ('\u{483}', '\u{489}'), ('\u{591}', '\u{5bd}'), ('\u{5bf}', - '\u{5bf}'), ('\u{5c1}', '\u{5c2}'), ('\u{5c4}', '\u{5c5}'), ('\u{5c7}', '\u{5c7}'), - ('\u{610}', '\u{61a}'), ('\u{64b}', '\u{65f}'), ('\u{670}', '\u{670}'), ('\u{6d6}', - '\u{6dc}'), ('\u{6df}', '\u{6e4}'), ('\u{6e7}', '\u{6e8}'), ('\u{6ea}', '\u{6ed}'), - ('\u{711}', '\u{711}'), ('\u{730}', '\u{74a}'), ('\u{7a6}', '\u{7b0}'), ('\u{7eb}', - '\u{7f3}'), ('\u{7fd}', '\u{7fd}'), ('\u{816}', '\u{819}'), ('\u{81b}', '\u{823}'), - ('\u{825}', '\u{827}'), ('\u{829}', '\u{82d}'), ('\u{859}', '\u{85b}'), ('\u{897}', - '\u{89f}'), ('\u{8ca}', '\u{8e1}'), ('\u{8e3}', '\u{902}'), ('\u{93a}', '\u{93a}'), - ('\u{93c}', '\u{93c}'), ('\u{941}', '\u{948}'), ('\u{951}', '\u{957}'), ('\u{962}', - '\u{963}'), ('\u{981}', '\u{981}'), ('\u{9bc}', '\u{9bc}'), ('\u{9be}', '\u{9be}'), - ('\u{9c1}', '\u{9c4}'), ('\u{9d7}', '\u{9d7}'), ('\u{9e2}', '\u{9e3}'), ('\u{9fe}', - '\u{9fe}'), ('\u{a01}', '\u{a02}'), ('\u{a3c}', '\u{a3c}'), ('\u{a41}', '\u{a42}'), - ('\u{a47}', '\u{a48}'), ('\u{a4b}', '\u{a4d}'), ('\u{a51}', '\u{a51}'), ('\u{a70}', - '\u{a71}'), ('\u{a75}', '\u{a75}'), ('\u{a81}', '\u{a82}'), ('\u{abc}', '\u{abc}'), - ('\u{ac1}', '\u{ac5}'), ('\u{ac7}', '\u{ac8}'), ('\u{ae2}', '\u{ae3}'), ('\u{afa}', - '\u{aff}'), ('\u{b01}', '\u{b01}'), ('\u{b3c}', '\u{b3c}'), ('\u{b3e}', '\u{b3f}'), - ('\u{b41}', '\u{b44}'), ('\u{b55}', '\u{b57}'), ('\u{b62}', '\u{b63}'), ('\u{b82}', - '\u{b82}'), ('\u{bbe}', '\u{bbe}'), ('\u{bc0}', '\u{bc0}'), ('\u{bcd}', '\u{bcd}'), - ('\u{bd7}', '\u{bd7}'), ('\u{c00}', '\u{c00}'), ('\u{c04}', '\u{c04}'), ('\u{c3c}', - '\u{c3c}'), ('\u{c3e}', '\u{c40}'), ('\u{c46}', '\u{c48}'), ('\u{c4a}', '\u{c4c}'), - ('\u{c55}', '\u{c56}'), ('\u{c62}', '\u{c63}'), ('\u{c81}', '\u{c81}'), ('\u{cbc}', - '\u{cbc}'), ('\u{cbf}', '\u{cc0}'), ('\u{cc2}', '\u{cc2}'), ('\u{cc6}', '\u{cc8}'), - ('\u{cca}', '\u{ccd}'), ('\u{cd5}', '\u{cd6}'), ('\u{ce2}', '\u{ce3}'), ('\u{d00}', - '\u{d01}'), ('\u{d3b}', '\u{d3c}'), ('\u{d3e}', '\u{d3e}'), ('\u{d41}', '\u{d44}'), - ('\u{d57}', '\u{d57}'), ('\u{d62}', '\u{d63}'), ('\u{d81}', '\u{d81}'), ('\u{dca}', - '\u{dca}'), ('\u{dcf}', '\u{dcf}'), ('\u{dd2}', '\u{dd4}'), ('\u{dd6}', '\u{dd6}'), - ('\u{ddf}', '\u{ddf}'), ('\u{e31}', '\u{e31}'), ('\u{e34}', '\u{e3a}'), ('\u{e47}', - '\u{e4e}'), ('\u{eb1}', '\u{eb1}'), ('\u{eb4}', '\u{ebc}'), ('\u{ec8}', '\u{ece}'), - ('\u{f18}', '\u{f19}'), ('\u{f35}', '\u{f35}'), ('\u{f37}', '\u{f37}'), ('\u{f39}', - '\u{f39}'), ('\u{f71}', '\u{f7e}'), ('\u{f80}', '\u{f84}'), ('\u{f86}', '\u{f87}'), - ('\u{f8d}', '\u{f97}'), ('\u{f99}', '\u{fbc}'), ('\u{fc6}', '\u{fc6}'), ('\u{102d}', - '\u{1030}'), ('\u{1032}', '\u{1037}'), ('\u{103a}', '\u{103a}'), ('\u{103d}', '\u{103e}'), - ('\u{1058}', '\u{1059}'), ('\u{105e}', '\u{1060}'), ('\u{1071}', '\u{1074}'), ('\u{1082}', - '\u{1082}'), ('\u{1085}', '\u{1086}'), ('\u{108d}', '\u{108d}'), ('\u{109d}', '\u{109d}'), - ('\u{135d}', '\u{135f}'), ('\u{1712}', '\u{1715}'), ('\u{1732}', '\u{1734}'), ('\u{1752}', - '\u{1753}'), ('\u{1772}', '\u{1773}'), ('\u{17b4}', '\u{17b5}'), ('\u{17b7}', '\u{17bd}'), - ('\u{17c6}', '\u{17c6}'), ('\u{17c9}', '\u{17d1}'), ('\u{17d3}', '\u{17d3}'), ('\u{17dd}', - '\u{17dd}'), ('\u{180b}', '\u{180d}'), ('\u{180f}', '\u{180f}'), ('\u{1885}', '\u{1886}'), - ('\u{18a9}', '\u{18a9}'), ('\u{1920}', '\u{1922}'), ('\u{1927}', '\u{1928}'), ('\u{1932}', - '\u{1932}'), ('\u{1939}', '\u{193b}'), ('\u{1a17}', '\u{1a18}'), ('\u{1a1b}', '\u{1a1b}'), - ('\u{1a56}', '\u{1a56}'), ('\u{1a58}', '\u{1a5e}'), ('\u{1a62}', '\u{1a62}'), ('\u{1a65}', - '\u{1a6c}'), ('\u{1a73}', '\u{1a7c}'), ('\u{1a7f}', '\u{1a7f}'), ('\u{1ab0}', '\u{1add}'), - ('\u{1ae0}', '\u{1aeb}'), ('\u{1b00}', '\u{1b03}'), ('\u{1b34}', '\u{1b3d}'), ('\u{1b42}', - '\u{1b43}'), ('\u{1b6b}', '\u{1b73}'), ('\u{1b80}', '\u{1b81}'), ('\u{1ba2}', '\u{1ba5}'), - ('\u{1ba8}', '\u{1baa}'), ('\u{1bac}', '\u{1bad}'), ('\u{1be6}', '\u{1be6}'), ('\u{1be8}', - '\u{1be9}'), ('\u{1bed}', '\u{1bed}'), ('\u{1bef}', '\u{1bf3}'), ('\u{1c2c}', '\u{1c33}'), - ('\u{1c36}', '\u{1c37}'), ('\u{1cd0}', '\u{1cd2}'), ('\u{1cd4}', '\u{1ce0}'), ('\u{1ce2}', - '\u{1ce8}'), ('\u{1ced}', '\u{1ced}'), ('\u{1cf4}', '\u{1cf4}'), ('\u{1cf8}', '\u{1cf9}'), - ('\u{1dc0}', '\u{1dff}'), ('\u{200d}', '\u{200d}'), ('\u{20d0}', '\u{20f0}'), ('\u{2cef}', - '\u{2cf1}'), ('\u{2d7f}', '\u{2d7f}'), ('\u{2de0}', '\u{2dff}'), ('\u{302a}', '\u{302f}'), - ('\u{3099}', '\u{309a}'), ('\u{a66f}', '\u{a672}'), ('\u{a674}', '\u{a67d}'), ('\u{a69e}', - '\u{a69f}'), ('\u{a6f0}', '\u{a6f1}'), ('\u{a802}', '\u{a802}'), ('\u{a806}', '\u{a806}'), - ('\u{a80b}', '\u{a80b}'), ('\u{a825}', '\u{a826}'), ('\u{a82c}', '\u{a82c}'), ('\u{a8c4}', - '\u{a8c5}'), ('\u{a8e0}', '\u{a8f1}'), ('\u{a8ff}', '\u{a8ff}'), ('\u{a926}', '\u{a92d}'), - ('\u{a947}', '\u{a951}'), ('\u{a953}', '\u{a953}'), ('\u{a980}', '\u{a982}'), ('\u{a9b3}', - '\u{a9b3}'), ('\u{a9b6}', '\u{a9b9}'), ('\u{a9bc}', '\u{a9bd}'), ('\u{a9e5}', '\u{a9e5}'), - ('\u{aa29}', '\u{aa2e}'), ('\u{aa31}', '\u{aa32}'), ('\u{aa35}', '\u{aa36}'), ('\u{aa43}', - '\u{aa43}'), ('\u{aa4c}', '\u{aa4c}'), ('\u{aa7c}', '\u{aa7c}'), ('\u{aab0}', '\u{aab0}'), - ('\u{aab2}', '\u{aab4}'), ('\u{aab7}', '\u{aab8}'), ('\u{aabe}', '\u{aabf}'), ('\u{aac1}', - '\u{aac1}'), ('\u{aaec}', '\u{aaed}'), ('\u{abe5}', '\u{abe5}'), ('\u{abe8}', '\u{abe8}'), - ('\u{abed}', '\u{abed}'), ('\u{fb1e}', '\u{fb1e}'), ('\u{fe00}', '\u{fe0f}'), ('\u{fe20}', - '\u{fe2f}'), ('\u{ff9e}', '\u{ff9f}'), ('\u{101fd}', '\u{101fd}'), ('\u{102e0}', - '\u{102e0}'), ('\u{10376}', '\u{1037a}'), ('\u{10a01}', '\u{10a03}'), ('\u{10a05}', - '\u{10a06}'), ('\u{10a0c}', '\u{10a0f}'), ('\u{10a38}', '\u{10a3a}'), ('\u{10ae5}', - '\u{10ae6}'), ('\u{10d24}', '\u{10d27}'), ('\u{10d69}', '\u{10d6d}'), ('\u{10eab}', - '\u{10eac}'), ('\u{10efa}', '\u{10eff}'), ('\u{10f46}', '\u{10f50}'), ('\u{10f82}', - '\u{10f85}'), ('\u{11001}', '\u{11001}'), ('\u{11038}', '\u{11046}'), ('\u{11070}', - '\u{11070}'), ('\u{11073}', '\u{11074}'), ('\u{1107f}', '\u{11081}'), ('\u{110b3}', - '\u{110b6}'), ('\u{110b9}', '\u{110ba}'), ('\u{110c2}', '\u{110c2}'), ('\u{11100}', - '\u{11102}'), ('\u{11127}', '\u{1112b}'), ('\u{1112d}', '\u{11132}'), ('\u{11134}', - '\u{11134}'), ('\u{11173}', '\u{11173}'), ('\u{11180}', '\u{11181}'), ('\u{111b6}', - '\u{111be}'), ('\u{111c0}', '\u{111c0}'), ('\u{111c9}', '\u{111cc}'), ('\u{111cf}', - '\u{111cf}'), ('\u{1122f}', '\u{11231}'), ('\u{11234}', '\u{11237}'), ('\u{1123e}', - '\u{1123e}'), ('\u{11241}', '\u{11241}'), ('\u{112df}', '\u{112df}'), ('\u{112e3}', - '\u{112ea}'), ('\u{11300}', '\u{11301}'), ('\u{1133b}', '\u{1133c}'), ('\u{1133e}', - '\u{1133e}'), ('\u{11340}', '\u{11340}'), ('\u{1134d}', '\u{1134d}'), ('\u{11357}', - '\u{11357}'), ('\u{11366}', '\u{1136c}'), ('\u{11370}', '\u{11374}'), ('\u{113b8}', - '\u{113b8}'), ('\u{113bb}', '\u{113c0}'), ('\u{113c2}', '\u{113c2}'), ('\u{113c5}', - '\u{113c5}'), ('\u{113c7}', '\u{113c9}'), ('\u{113ce}', '\u{113cf}'), ('\u{113d2}', - '\u{113d2}'), ('\u{113e1}', '\u{113e2}'), ('\u{11438}', '\u{1143f}'), ('\u{11442}', - '\u{11444}'), ('\u{11446}', '\u{11446}'), ('\u{1145e}', '\u{1145e}'), ('\u{114b0}', - '\u{114b0}'), ('\u{114b3}', '\u{114b8}'), ('\u{114ba}', '\u{114ba}'), ('\u{114bd}', - '\u{114bd}'), ('\u{114bf}', '\u{114c0}'), ('\u{114c2}', '\u{114c3}'), ('\u{115af}', - '\u{115af}'), ('\u{115b2}', '\u{115b5}'), ('\u{115bc}', '\u{115bd}'), ('\u{115bf}', - '\u{115c0}'), ('\u{115dc}', '\u{115dd}'), ('\u{11633}', '\u{1163a}'), ('\u{1163d}', - '\u{1163d}'), ('\u{1163f}', '\u{11640}'), ('\u{116ab}', '\u{116ab}'), ('\u{116ad}', - '\u{116ad}'), ('\u{116b0}', '\u{116b7}'), ('\u{1171d}', '\u{1171d}'), ('\u{1171f}', - '\u{1171f}'), ('\u{11722}', '\u{11725}'), ('\u{11727}', '\u{1172b}'), ('\u{1182f}', - '\u{11837}'), ('\u{11839}', '\u{1183a}'), ('\u{11930}', '\u{11930}'), ('\u{1193b}', - '\u{1193d}'), ('\u{11943}', '\u{11943}'), ('\u{119d4}', '\u{119d7}'), ('\u{119da}', - '\u{119db}'), ('\u{119e0}', '\u{119e0}'), ('\u{11a01}', '\u{11a0a}'), ('\u{11a33}', - '\u{11a38}'), ('\u{11a3b}', '\u{11a3e}'), ('\u{11a51}', '\u{11a56}'), ('\u{11a59}', - '\u{11a5b}'), ('\u{11a8a}', '\u{11a96}'), ('\u{11a98}', '\u{11a98}'), ('\u{11b60}', - '\u{11b60}'), ('\u{11b62}', '\u{11b64}'), ('\u{11b66}', '\u{11b66}'), ('\u{11c30}', - '\u{11c36}'), ('\u{11c38}', '\u{11c3d}'), ('\u{11c3f}', '\u{11c3f}'), ('\u{11c92}', - '\u{11ca7}'), ('\u{11caa}', '\u{11cb0}'), ('\u{11cb2}', '\u{11cb3}'), ('\u{11cb5}', - '\u{11cb6}'), ('\u{11d31}', '\u{11d36}'), ('\u{11d3a}', '\u{11d3a}'), ('\u{11d3c}', - '\u{11d3d}'), ('\u{11d3f}', '\u{11d45}'), ('\u{11d47}', '\u{11d47}'), ('\u{11d90}', - '\u{11d91}'), ('\u{11d95}', '\u{11d95}'), ('\u{11d97}', '\u{11d97}'), ('\u{11ef3}', - '\u{11ef4}'), ('\u{11f00}', '\u{11f01}'), ('\u{11f36}', '\u{11f3a}'), ('\u{11f40}', - '\u{11f41}'), ('\u{11f5a}', '\u{11f5a}'), ('\u{13440}', '\u{13440}'), ('\u{13447}', - '\u{13455}'), ('\u{1611e}', '\u{16129}'), ('\u{1612d}', '\u{1612f}'), ('\u{16af0}', - '\u{16af4}'), ('\u{16b30}', '\u{16b36}'), ('\u{16f4f}', '\u{16f4f}'), ('\u{16f8f}', - '\u{16f92}'), ('\u{16fe4}', '\u{16fe4}'), ('\u{16ff0}', '\u{16ff1}'), ('\u{1bc9d}', - '\u{1bc9e}'), ('\u{1cf00}', '\u{1cf2d}'), ('\u{1cf30}', '\u{1cf46}'), ('\u{1d165}', - '\u{1d169}'), ('\u{1d16d}', '\u{1d172}'), ('\u{1d17b}', '\u{1d182}'), ('\u{1d185}', - '\u{1d18b}'), ('\u{1d1aa}', '\u{1d1ad}'), ('\u{1d242}', '\u{1d244}'), ('\u{1da00}', - '\u{1da36}'), ('\u{1da3b}', '\u{1da6c}'), ('\u{1da75}', '\u{1da75}'), ('\u{1da84}', - '\u{1da84}'), ('\u{1da9b}', '\u{1da9f}'), ('\u{1daa1}', '\u{1daaf}'), ('\u{1e000}', - '\u{1e006}'), ('\u{1e008}', '\u{1e018}'), ('\u{1e01b}', '\u{1e021}'), ('\u{1e023}', - '\u{1e024}'), ('\u{1e026}', '\u{1e02a}'), ('\u{1e08f}', '\u{1e08f}'), ('\u{1e130}', - '\u{1e136}'), ('\u{1e2ae}', '\u{1e2ae}'), ('\u{1e2ec}', '\u{1e2ef}'), ('\u{1e4ec}', - '\u{1e4ef}'), ('\u{1e5ee}', '\u{1e5ef}'), ('\u{1e6e3}', '\u{1e6e3}'), ('\u{1e6e6}', - '\u{1e6e6}'), ('\u{1e6ee}', '\u{1e6ef}'), ('\u{1e6f5}', '\u{1e6f5}'), ('\u{1e8d0}', - '\u{1e8d6}'), ('\u{1e944}', '\u{1e94a}'), ('\u{1f3fb}', '\u{1f3ff}'), ('\u{e0020}', - '\u{e007f}'), ('\u{e0100}', '\u{e01ef}') - ]; - - #[inline] - pub fn InCB_Extend(c: char) -> bool { - super::util::bsearch_range_table(c, InCB_Extend_table) - } - } pub fn is_incb_linker(c: char) -> bool { @@ -492,13 +368,37 @@ pub fn is_incb_linker(c: char) -> bool { } pub mod grapheme { - use core::result::Result::{Ok, Err}; - pub use self::GraphemeCat::*; + /// `Grapheme_Cluster_Break` property values, plus `InCB=Consonant` folded in + /// as a category of its own since it never overlaps another one. + /// + /// The discriminants are the values stored in the tables below and are the + /// index space of the pairwise rule table in `src/grapheme.rs`. #[allow(non_camel_case_types)] + #[repr(u8)] #[derive(Clone, Copy, PartialEq, Eq, Debug)] pub enum GraphemeCat { + GC_Any = 0, + GC_CR = 1, + GC_Control = 2, + GC_Extend = 3, + GC_Extended_Pictographic = 4, + GC_InCB_Consonant = 5, + GC_L = 6, + GC_LF = 7, + GC_LV = 8, + GC_LVT = 9, + GC_Prepend = 10, + GC_Regional_Indicator = 11, + GC_SpacingMark = 12, + GC_T = 13, + GC_V = 14, + GC_ZWJ = 15, + } + + /// Every `GraphemeCat` in discriminant order, so `CATS[i] as u8 == i`. + pub const CATS: [GraphemeCat; 16] = [ GC_Any, GC_CR, GC_Control, @@ -515,824 +415,501 @@ pub mod grapheme { GC_T, GC_V, GC_ZWJ, + ]; + + /// Category at index `i` of a window that packs two per byte, low nibble first. + #[inline] + fn nibble(window: &[u8; N], i: u32) -> u8 { + window[(i >> 1) as usize] >> ((i & 1) << 2) & 15 } - fn bsearch_range_value_table(c: char, r: &[(char, char, GraphemeCat)], default_lower: u32, default_upper: u32) -> (u32, u32, GraphemeCat) { - use core::cmp::Ordering::{Equal, Less, Greater}; - match r.binary_search_by(|&(lo, hi, _)| { - if lo <= c && c <= hi { Equal } - else if hi < c { Less } - else { Greater } - }) { - Ok(idx) => { - let (lower, upper, cat) = r[idx]; - (lower as u32, upper as u32, cat) - } - Err(idx) => { - ( - if idx > 0 { r[idx-1].1 as u32 + 1 } else { default_lower }, - r.get(idx).map(|c|c.0 as u32 - 1).unwrap_or(default_upper), - GC_Any, - ) - } + /// `Grapheme_Cluster_Break` of `c`, as a raw category byte. + /// + /// This is the hot path of grapheme cluster segmentation: everything below + /// U+30A0 (which is every script whose clusters are non-trivial, plus latin, + /// cyrillic and the kana) and the whole emoji block are a single load, the + /// CJK ideographs and the hangul syllables are arithmetic, and only the rare + /// tail reaches a binary search. + #[inline] + pub fn grapheme_category_raw(c: char) -> u8 { + let cp = c as u32; + if cp < 0x30A0 { + return nibble(grapheme_cat_t0, cp); + } + // CJK through Vai + if cp < 0xA660 { + return if cp == 0x3297 || cp == 0x3299 { 4 } else { 0 }; + } + if cp < 0xAC00 { + return nibble(grapheme_cat_t1, cp - 0xA660); + } + // Hangul syllables: LV at every 28th, LVT otherwise + if cp < 0xD7A4 { + return if (cp - 0xAC00) % 28 == 0 { 8 } else { 9 }; + } + if (0x1F000..0x1FB00).contains(&cp) { + return nibble(grapheme_cat_t2, cp - 0x1F000); + } + // Variation selectors + if cp >> 4 == 0xFE0 { + return 3; } + grapheme_category_residual(cp) } - pub fn grapheme_category(c: char) -> (u32, u32, GraphemeCat) { - // Perform a quick O(1) lookup in a precomputed table to determine - // the slice of the range table to search in. - let lookup_interval = 0x80; - let idx = (c as u32 / lookup_interval) as usize; - let range = grapheme_cat_lookup.get(idx..(idx + 2)).map_or( - // If the `idx` is outside of the precomputed table - use the slice - // starting from the last covered index in the precomputed table and - // ending with the length of the range table. - 1612..1618, - |r| (r[0] as usize)..((r[1] + 1) as usize) - ); + /// `Grapheme_Cluster_Break` of `c`. + #[inline] + pub fn grapheme_category(c: char) -> GraphemeCat { + CATS[(grapheme_category_raw(c) & 15) as usize] + } - // Compute pessimistic default lower and upper bounds on the category. - // If character doesn't map to any range and there is no adjacent range - // in the table slice - these bounds has to apply. - let lower = idx as u32 * lookup_interval; - let upper = lower + lookup_interval - 1; - bsearch_range_value_table(c, &grapheme_cat_table[range], lower, upper) + /// Cold half of [`grapheme_category_raw`], kept out of line so the hot half + /// stays small enough to inline. + fn grapheme_category_residual(cp: u32) -> u8 { + use core::cmp::Ordering::{Equal, Greater, Less}; + match grapheme_cat_residual.binary_search_by(|&(start, packed)| { + if cp < start { + Greater + } else if cp > packed >> 5 { + Less + } else { + Equal + } + }) { + core::result::Result::Ok(idx) => (grapheme_cat_residual[idx].1 & 31) as u8, + core::result::Result::Err(_) => 0, + } } - const grapheme_cat_lookup: &[u16] = &[ - 0, 5, 9, 9, 9, 9, 9, 10, 10, 10, 11, 11, 16, 21, 26, 29, 32, 37, 41, 56, 75, 85, 101, 119, - 128, 141, 154, 167, 177, 181, 185, 192, 197, 214, 221, 222, 224, 224, 224, 225, 225, 225, - 225, 225, 225, 225, 225, 229, 238, 241, 243, 251, 251, 265, 267, 276, 292, 296, 304, 304, - 305, 305, 305, 305, 305, 313, 314, 316, 318, 318, 318, 320, 323, 323, 324, 324, 328, 349, - 366, 384, 388, 388, 388, 389, 389, 389, 389, 393, 393, 393, 394, 395, 396, 396, 396, 396, - 396, 399, 400, 400, 400, 400, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, - 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, - 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, - 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, - 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, - 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, - 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, - 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, - 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, - 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, - 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, - 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, - 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, - 402, 402, 402, 404, 406, 406, 406, 413, 418, 423, 438, 451, 462, 462, 470, 479, 489, 497, - 507, 515, 525, 534, 543, 553, 561, 571, 579, 589, 598, 607, 617, 625, 635, 643, 653, 662, - 671, 681, 689, 699, 707, 717, 726, 735, 745, 753, 763, 771, 781, 790, 799, 809, 817, 827, - 835, 845, 854, 863, 873, 881, 891, 899, 909, 918, 927, 937, 945, 955, 963, 973, 982, 991, - 1001, 1009, 1019, 1027, 1037, 1046, 1055, 1065, 1073, 1083, 1091, 1101, 1110, 1119, 1129, - 1137, 1147, 1155, 1165, 1174, 1183, 1193, 1201, 1211, 1219, 1229, 1238, 1247, 1257, 1265, - 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, - 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, - 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, - 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, - 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1271, 1271, 1271, 1271, - 1271, 1271, 1273, 1274, 1274, 1276, 1276, 1276, 1276, 1277, 1277, 1278, 1279, 1279, 1279, - 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1279, 1288, 1289, 1289, 1289, - 1289, 1289, 1291, 1291, 1291, 1293, 1294, 1295, 1301, 1310, 1319, 1329, 1335, 1338, 1352, - 1368, 1375, 1386, 1386, 1394, 1400, 1405, 1411, 1411, 1415, 1415, 1429, 1435, 1446, 1451, - 1457, 1457, 1462, 1469, 1475, 1481, 1481, 1483, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1493, - 1493, 1493, 1493, 1493, 1493, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, - 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, - 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, - 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, - 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, - 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, 1496, - 1496, 1496, 1496, 1496, 1496, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, - 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1500, 1501, 1501, 1501, 1501, 1503, - 1503, 1503, 1503, 1504, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, - 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, - 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, - 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, - 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, - 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, - 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, - 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, - 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, - 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, - 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1508, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, 1510, - 1512, 1512, 1512, 1512, 1515, 1518, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1519, - 1519, 1519, 1519, 1519, 1519, 1519, 1519, 1522, 1525, 1525, 1525, 1525, 1525, 1525, 1525, - 1525, 1525, 1525, 1525, 1530, 1531, 1532, 1532, 1532, 1534, 1534, 1534, 1534, 1535, 1535, - 1536, 1536, 1540, 1540, 1540, 1540, 1541, 1542, 1542, 1542, 1542, 1542, 1542, 1542, 1542, - 1542, 1542, 1542, 1542, 1542, 1542, 1544, 1549, 1551, 1555, 1561, 1561, 1562, 1569, 1569, - 1570, 1575, 1591, 1592, 1598, 1598, 1599, 1602, 1607, 1609, 1610, 1611, 1612, 1612, 1612, - 1612, 1612, 1612, 1612, 1612, 1612, 1612 - ]; + const grapheme_cat_t0: &[u8; 6224] = b"\x22\x22\x22\x22\x22\x27\x12\x22\x22\x22\x22\x22\x22\x22\x22\x22\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x22\x22\x22\x22\x22\x22\x22\x22\ + \x22\x22\x22\x22\x22\x22\x22\x22\x00\x00\x00\x00\x40\x00\x20\x04\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\ + \x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\ + \x33\x33\x33\x33\x33\x33\x33\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x30\x33\x33\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x33\x33\x33\x33\x33\x33\x33\ + \x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x30\x30\x03\x33\x30\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \xaa\xaa\xaa\x00\x00\x00\x00\x00\x33\x33\x33\x33\x33\x03\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\ + \x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x33\x33\xa3\x30\x33\x33\x03\x30\x03\x33\x33\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x30\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x03\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x33\x33\x33\x33\ + \x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x30\x33\x33\x33\x33\x00\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x33\x33\x30\x33\x33\x33\x33\x30\x33\x30\x33\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaa\x00\x00\x30\x33\x33\x33\x33\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x33\x33\ + \x33\x33\x33\x33\x33\x33\x33\x33\x33\x3a\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\ + \x33\xc3\x00\x00\x00\x00\x00\x00\x00\x00\x50\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\ + \x55\x55\x55\x55\x55\xc3\x03\xcc\x3c\x33\x33\x33\xc3\xcc\x3c\xcc\x30\x33\x33\x33\x55\x55\x55\x55\ + \x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x55\x55\x55\x30\xcc\x00\x00\x00\x00\x00\x00\ + \x00\x00\x50\x55\x55\x55\x55\x55\x55\x55\x55\x55\x05\x55\x55\x55\x05\x05\x00\x55\x55\x00\x03\xc3\ + \x3c\x33\x03\xc0\x0c\xc0\x3c\x00\x00\x00\x00\x30\x00\x00\x55\x50\x00\x33\x00\x00\x00\x00\x00\x00\ + \x55\x00\x00\x00\x00\x00\x00\x03\x30\xc3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\xcc\x3c\x03\x00\x30\x03\x30\x33\x00\ + \x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x30\x00\x00\x00\x00\x00\ + \x30\xc3\x00\x00\x00\x00\x00\x00\x00\x00\x50\x55\x55\x55\x55\x55\x55\x55\x55\x55\x05\x55\x55\x55\ + \x05\x55\x50\x55\x55\x00\x03\xcc\x3c\x33\x33\x30\xc3\xc0\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x33\x33\x33\x30\xcc\x00\x00\x00\x00\x00\x00\ + \x00\x00\x50\x55\x55\x55\x55\x55\x55\x55\x55\x55\x05\x55\x55\x55\x05\x55\x50\x55\x55\x00\x03\x33\ + \x3c\x33\x03\xc0\x0c\xc0\x3c\x00\x00\x00\x30\x33\x00\x00\x55\x50\x00\x33\x00\x00\x00\x00\x00\x00\ + \x50\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\xc3\x0c\x00\xcc\x0c\xcc\x3c\x00\ + \x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \xc3\xcc\x03\x00\x00\x00\x00\x00\x00\x00\x50\x55\x55\x55\x55\x55\x55\x55\x55\x55\x05\x55\x55\x55\ + \x55\x55\x55\x55\x55\x00\x03\x33\xc3\xcc\x0c\x33\x03\x33\x33\x00\x00\x00\x30\x03\x55\x05\x00\x00\ + \x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\xcc\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x3c\ + \xc3\xc3\x0c\x33\x03\x33\x33\x00\x00\x00\x30\x03\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\ + \x00\xc0\x00\x00\x00\x00\x00\x00\x33\xcc\x00\x00\x00\x00\x00\x00\x00\x00\x50\x55\x55\x55\x55\x55\ + \x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x35\x03\xc3\x3c\x33\x03\xcc\x0c\xcc\x3c\x0a\ + \x00\x00\x00\x30\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x30\xcc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x30\xcc\x33\x03\x03\xcc\xcc\xcc\x3c\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\xcc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\xc0\x33\x33\x33\x03\x00\x00\ + \x00\x00\x00\x30\x33\x33\x33\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x30\xc0\x33\x33\x33\x33\x03\x00\x00\x00\x00\x00\x33\x33\x33\x03\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x30\x30\x30\x00\x00\xcc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x30\x33\x33\x33\x33\x33\x33\xc3\x33\x33\x03\x33\x00\x00\x30\x33\ + \x33\x33\x33\x33\x30\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x03\x00\ + \x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\ + \x55\x55\x55\x55\x55\x05\x30\x33\xc3\x33\x33\x33\x30\xc3\x3c\x53\x00\x00\x00\x00\x00\x00\x00\x00\ + \x55\x55\x55\xcc\x33\x55\x55\x33\x53\x00\x50\x05\x00\x00\x00\x55\x35\x33\x53\x55\x55\x55\x55\x55\ + \x55\x03\x3c\x03\x00\x00\x30\x05\x00\x00\x00\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x66\x66\x66\x66\x66\x66\x66\x66\ + \x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\ + \x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\xee\xee\xee\xee\xee\xee\xee\xee\ + \xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\xee\ + \xee\xee\xee\xee\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\ + \xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\xdd\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x30\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x33\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x03\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x33\x00\x00\x00\x00\x00\x00\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\ + \x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x33\x3c\x33\x33\x33\xcc\xcc\xcc\xcc\xc3\x3c\x33\x33\x33\ + \x33\x33\x00\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x30\x33\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x03\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x33\xc3\xcc\x3c\xc3\xcc\x00\x00\xcc\xc3\xcc\xcc\x3c\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x30\xc3\x3c\x00\x00\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\ + \x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\xc5\xc3\x33\x33\x33\x03\x03\x03\x30\x33\x33\x33\xc3\xcc\ + \xcc\x3c\x33\x33\x33\x33\x03\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\ + \x33\x33\x33\x33\x33\x33\x33\x00\x33\x33\x33\x33\x33\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x33\x33\x0c\x00\x00\x50\x05\x00\x00\x50\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\ + \x55\x55\x33\x33\x33\x33\x33\xcc\xcc\x33\x53\x55\x55\x55\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x30\x33\x33\x33\x33\x00\x00\x00\x00\x00\x00\x33\x5c\x55\x55\x55\x55\x55\x55\ + \x55\x55\x55\x55\x55\x55\x55\x55\xc5\x33\x33\xcc\x33\x33\x33\x55\x00\x00\x00\x00\x00\x50\x55\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x33\xcc\x3c\x3c\ + \x33\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\xcc\xcc\xcc\xcc\x33\x33\x33\x33\xcc\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x03\x33\x33\x33\x33\x33\x33\ + \xc3\x33\x33\x33\x03\x00\x30\x00\x00\x00\x03\xc0\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x33\x33\x33\x33\x33\x33\x33\ + \x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\xf3\x22\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x22\x22\x02\x00\x00\x00\x00\x00\x00\x04\x00\ + \x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x22\x22\x22\x22\x22\x22\x22\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33\x03\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x44\x44\x44\x00\x00\x00\x00\x00\x00\x00\x40\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x44\x44\x44\x44\x44\x00\x00\x44\x04\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x00\ + \x00\x00\x00\x04\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x44\x04\x44\x44\x04\x00\x00\x00\x00\x04\ + \x40\x00\x44\x00\x04\x00\x40\x00\x04\x44\x00\x04\x00\x04\x00\x44\x00\x00\x00\x00\x44\x04\x00\x00\ + \x04\x04\x00\x00\x44\x44\x44\x44\x44\x44\x00\x00\x00\x00\x00\x40\x04\x40\x40\x04\x04\x00\x00\x00\ + \x00\x00\x00\x00\x00\x40\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x44\x44\x40\x40\x04\x00\ + \x44\x00\x00\x40\x00\x44\x00\x00\x44\x00\x00\x00\x00\x00\x40\x04\x00\x00\x44\x00\x04\x00\x00\x44\ + \x40\x40\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x04\x00\x00\x44\x44\x44\x40\x44\x04\x40\x00\ + \x00\x04\x40\x00\x44\x44\x44\x40\x00\x04\x04\x04\x00\x00\x40\x00\x40\x00\x00\x00\x04\x00\x00\x00\ + \x00\x40\x04\x00\x00\x00\x00\x00\x00\x00\x04\x40\x00\x00\x04\x04\x00\x40\x44\x40\x00\x00\x00\x00\ + \x00\x40\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x40\x44\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x40\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x04\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x04\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x33\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x33\x33\x33\x33\x33\x33\x33\ + \x33\x33\x33\x33\x33\x33\x33\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x33\x33\ + \x04\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x30\x03\x00\x00"; - const grapheme_cat_table: &[(char, char, GraphemeCat)] = &[ - ('\u{0}', '\u{9}', GC_Control), ('\u{a}', '\u{a}', GC_LF), ('\u{b}', '\u{c}', GC_Control), - ('\u{d}', '\u{d}', GC_CR), ('\u{e}', '\u{1f}', GC_Control), ('\u{7f}', '\u{9f}', - GC_Control), ('\u{a9}', '\u{a9}', GC_Extended_Pictographic), ('\u{ad}', '\u{ad}', - GC_Control), ('\u{ae}', '\u{ae}', GC_Extended_Pictographic), ('\u{300}', '\u{36f}', - GC_Extend), ('\u{483}', '\u{489}', GC_Extend), ('\u{591}', '\u{5bd}', GC_Extend), - ('\u{5bf}', '\u{5bf}', GC_Extend), ('\u{5c1}', '\u{5c2}', GC_Extend), ('\u{5c4}', '\u{5c5}', - GC_Extend), ('\u{5c7}', '\u{5c7}', GC_Extend), ('\u{600}', '\u{605}', GC_Prepend), - ('\u{610}', '\u{61a}', GC_Extend), ('\u{61c}', '\u{61c}', GC_Control), ('\u{64b}', - '\u{65f}', GC_Extend), ('\u{670}', '\u{670}', GC_Extend), ('\u{6d6}', '\u{6dc}', GC_Extend), - ('\u{6dd}', '\u{6dd}', GC_Prepend), ('\u{6df}', '\u{6e4}', GC_Extend), ('\u{6e7}', - '\u{6e8}', GC_Extend), ('\u{6ea}', '\u{6ed}', GC_Extend), ('\u{70f}', '\u{70f}', - GC_Prepend), ('\u{711}', '\u{711}', GC_Extend), ('\u{730}', '\u{74a}', GC_Extend), - ('\u{7a6}', '\u{7b0}', GC_Extend), ('\u{7eb}', '\u{7f3}', GC_Extend), ('\u{7fd}', '\u{7fd}', - GC_Extend), ('\u{816}', '\u{819}', GC_Extend), ('\u{81b}', '\u{823}', GC_Extend), - ('\u{825}', '\u{827}', GC_Extend), ('\u{829}', '\u{82d}', GC_Extend), ('\u{859}', '\u{85b}', - GC_Extend), ('\u{890}', '\u{891}', GC_Prepend), ('\u{897}', '\u{89f}', GC_Extend), - ('\u{8ca}', '\u{8e1}', GC_Extend), ('\u{8e2}', '\u{8e2}', GC_Prepend), ('\u{8e3}', - '\u{902}', GC_Extend), ('\u{903}', '\u{903}', GC_SpacingMark), ('\u{915}', '\u{939}', - GC_InCB_Consonant), ('\u{93a}', '\u{93a}', GC_Extend), ('\u{93b}', '\u{93b}', - GC_SpacingMark), ('\u{93c}', '\u{93c}', GC_Extend), ('\u{93e}', '\u{940}', GC_SpacingMark), - ('\u{941}', '\u{948}', GC_Extend), ('\u{949}', '\u{94c}', GC_SpacingMark), ('\u{94d}', - '\u{94d}', GC_Extend), ('\u{94e}', '\u{94f}', GC_SpacingMark), ('\u{951}', '\u{957}', - GC_Extend), ('\u{958}', '\u{95f}', GC_InCB_Consonant), ('\u{962}', '\u{963}', GC_Extend), - ('\u{978}', '\u{97f}', GC_InCB_Consonant), ('\u{981}', '\u{981}', GC_Extend), ('\u{982}', - '\u{983}', GC_SpacingMark), ('\u{995}', '\u{9a8}', GC_InCB_Consonant), ('\u{9aa}', - '\u{9b0}', GC_InCB_Consonant), ('\u{9b2}', '\u{9b2}', GC_InCB_Consonant), ('\u{9b6}', - '\u{9b9}', GC_InCB_Consonant), ('\u{9bc}', '\u{9bc}', GC_Extend), ('\u{9be}', '\u{9be}', - GC_Extend), ('\u{9bf}', '\u{9c0}', GC_SpacingMark), ('\u{9c1}', '\u{9c4}', GC_Extend), - ('\u{9c7}', '\u{9c8}', GC_SpacingMark), ('\u{9cb}', '\u{9cc}', GC_SpacingMark), ('\u{9cd}', - '\u{9cd}', GC_Extend), ('\u{9d7}', '\u{9d7}', GC_Extend), ('\u{9dc}', '\u{9dd}', - GC_InCB_Consonant), ('\u{9df}', '\u{9df}', GC_InCB_Consonant), ('\u{9e2}', '\u{9e3}', - GC_Extend), ('\u{9f0}', '\u{9f1}', GC_InCB_Consonant), ('\u{9fe}', '\u{9fe}', GC_Extend), - ('\u{a01}', '\u{a02}', GC_Extend), ('\u{a03}', '\u{a03}', GC_SpacingMark), ('\u{a3c}', - '\u{a3c}', GC_Extend), ('\u{a3e}', '\u{a40}', GC_SpacingMark), ('\u{a41}', '\u{a42}', - GC_Extend), ('\u{a47}', '\u{a48}', GC_Extend), ('\u{a4b}', '\u{a4d}', GC_Extend), - ('\u{a51}', '\u{a51}', GC_Extend), ('\u{a70}', '\u{a71}', GC_Extend), ('\u{a75}', '\u{a75}', - GC_Extend), ('\u{a81}', '\u{a82}', GC_Extend), ('\u{a83}', '\u{a83}', GC_SpacingMark), - ('\u{a95}', '\u{aa8}', GC_InCB_Consonant), ('\u{aaa}', '\u{ab0}', GC_InCB_Consonant), - ('\u{ab2}', '\u{ab3}', GC_InCB_Consonant), ('\u{ab5}', '\u{ab9}', GC_InCB_Consonant), - ('\u{abc}', '\u{abc}', GC_Extend), ('\u{abe}', '\u{ac0}', GC_SpacingMark), ('\u{ac1}', - '\u{ac5}', GC_Extend), ('\u{ac7}', '\u{ac8}', GC_Extend), ('\u{ac9}', '\u{ac9}', - GC_SpacingMark), ('\u{acb}', '\u{acc}', GC_SpacingMark), ('\u{acd}', '\u{acd}', GC_Extend), - ('\u{ae2}', '\u{ae3}', GC_Extend), ('\u{af9}', '\u{af9}', GC_InCB_Consonant), ('\u{afa}', - '\u{aff}', GC_Extend), ('\u{b01}', '\u{b01}', GC_Extend), ('\u{b02}', '\u{b03}', - GC_SpacingMark), ('\u{b15}', '\u{b28}', GC_InCB_Consonant), ('\u{b2a}', '\u{b30}', - GC_InCB_Consonant), ('\u{b32}', '\u{b33}', GC_InCB_Consonant), ('\u{b35}', '\u{b39}', - GC_InCB_Consonant), ('\u{b3c}', '\u{b3c}', GC_Extend), ('\u{b3e}', '\u{b3f}', GC_Extend), - ('\u{b40}', '\u{b40}', GC_SpacingMark), ('\u{b41}', '\u{b44}', GC_Extend), ('\u{b47}', - '\u{b48}', GC_SpacingMark), ('\u{b4b}', '\u{b4c}', GC_SpacingMark), ('\u{b4d}', '\u{b4d}', - GC_Extend), ('\u{b55}', '\u{b57}', GC_Extend), ('\u{b5c}', '\u{b5d}', GC_InCB_Consonant), - ('\u{b5f}', '\u{b5f}', GC_InCB_Consonant), ('\u{b62}', '\u{b63}', GC_Extend), ('\u{b71}', - '\u{b71}', GC_InCB_Consonant), ('\u{b82}', '\u{b82}', GC_Extend), ('\u{bbe}', '\u{bbe}', - GC_Extend), ('\u{bbf}', '\u{bbf}', GC_SpacingMark), ('\u{bc0}', '\u{bc0}', GC_Extend), - ('\u{bc1}', '\u{bc2}', GC_SpacingMark), ('\u{bc6}', '\u{bc8}', GC_SpacingMark), ('\u{bca}', - '\u{bcc}', GC_SpacingMark), ('\u{bcd}', '\u{bcd}', GC_Extend), ('\u{bd7}', '\u{bd7}', - GC_Extend), ('\u{c00}', '\u{c00}', GC_Extend), ('\u{c01}', '\u{c03}', GC_SpacingMark), - ('\u{c04}', '\u{c04}', GC_Extend), ('\u{c15}', '\u{c28}', GC_InCB_Consonant), ('\u{c2a}', - '\u{c39}', GC_InCB_Consonant), ('\u{c3c}', '\u{c3c}', GC_Extend), ('\u{c3e}', '\u{c40}', - GC_Extend), ('\u{c41}', '\u{c44}', GC_SpacingMark), ('\u{c46}', '\u{c48}', GC_Extend), - ('\u{c4a}', '\u{c4d}', GC_Extend), ('\u{c55}', '\u{c56}', GC_Extend), ('\u{c58}', '\u{c5a}', - GC_InCB_Consonant), ('\u{c62}', '\u{c63}', GC_Extend), ('\u{c81}', '\u{c81}', GC_Extend), - ('\u{c82}', '\u{c83}', GC_SpacingMark), ('\u{cbc}', '\u{cbc}', GC_Extend), ('\u{cbe}', - '\u{cbe}', GC_SpacingMark), ('\u{cbf}', '\u{cc0}', GC_Extend), ('\u{cc1}', '\u{cc1}', - GC_SpacingMark), ('\u{cc2}', '\u{cc2}', GC_Extend), ('\u{cc3}', '\u{cc4}', GC_SpacingMark), - ('\u{cc6}', '\u{cc8}', GC_Extend), ('\u{cca}', '\u{ccd}', GC_Extend), ('\u{cd5}', '\u{cd6}', - GC_Extend), ('\u{ce2}', '\u{ce3}', GC_Extend), ('\u{cf3}', '\u{cf3}', GC_SpacingMark), - ('\u{d00}', '\u{d01}', GC_Extend), ('\u{d02}', '\u{d03}', GC_SpacingMark), ('\u{d15}', - '\u{d3a}', GC_InCB_Consonant), ('\u{d3b}', '\u{d3c}', GC_Extend), ('\u{d3e}', '\u{d3e}', - GC_Extend), ('\u{d3f}', '\u{d40}', GC_SpacingMark), ('\u{d41}', '\u{d44}', GC_Extend), - ('\u{d46}', '\u{d48}', GC_SpacingMark), ('\u{d4a}', '\u{d4c}', GC_SpacingMark), ('\u{d4d}', - '\u{d4d}', GC_Extend), ('\u{d4e}', '\u{d4e}', GC_Prepend), ('\u{d57}', '\u{d57}', - GC_Extend), ('\u{d62}', '\u{d63}', GC_Extend), ('\u{d81}', '\u{d81}', GC_Extend), - ('\u{d82}', '\u{d83}', GC_SpacingMark), ('\u{dca}', '\u{dca}', GC_Extend), ('\u{dcf}', - '\u{dcf}', GC_Extend), ('\u{dd0}', '\u{dd1}', GC_SpacingMark), ('\u{dd2}', '\u{dd4}', - GC_Extend), ('\u{dd6}', '\u{dd6}', GC_Extend), ('\u{dd8}', '\u{dde}', GC_SpacingMark), - ('\u{ddf}', '\u{ddf}', GC_Extend), ('\u{df2}', '\u{df3}', GC_SpacingMark), ('\u{e31}', - '\u{e31}', GC_Extend), ('\u{e33}', '\u{e33}', GC_SpacingMark), ('\u{e34}', '\u{e3a}', - GC_Extend), ('\u{e47}', '\u{e4e}', GC_Extend), ('\u{eb1}', '\u{eb1}', GC_Extend), - ('\u{eb3}', '\u{eb3}', GC_SpacingMark), ('\u{eb4}', '\u{ebc}', GC_Extend), ('\u{ec8}', - '\u{ece}', GC_Extend), ('\u{f18}', '\u{f19}', GC_Extend), ('\u{f35}', '\u{f35}', GC_Extend), - ('\u{f37}', '\u{f37}', GC_Extend), ('\u{f39}', '\u{f39}', GC_Extend), ('\u{f3e}', '\u{f3f}', - GC_SpacingMark), ('\u{f71}', '\u{f7e}', GC_Extend), ('\u{f7f}', '\u{f7f}', GC_SpacingMark), - ('\u{f80}', '\u{f84}', GC_Extend), ('\u{f86}', '\u{f87}', GC_Extend), ('\u{f8d}', '\u{f97}', - GC_Extend), ('\u{f99}', '\u{fbc}', GC_Extend), ('\u{fc6}', '\u{fc6}', GC_Extend), - ('\u{1000}', '\u{102a}', GC_InCB_Consonant), ('\u{102d}', '\u{1030}', GC_Extend), - ('\u{1031}', '\u{1031}', GC_SpacingMark), ('\u{1032}', '\u{1037}', GC_Extend), ('\u{1039}', - '\u{103a}', GC_Extend), ('\u{103b}', '\u{103c}', GC_SpacingMark), ('\u{103d}', '\u{103e}', - GC_Extend), ('\u{103f}', '\u{103f}', GC_InCB_Consonant), ('\u{1050}', '\u{1055}', - GC_InCB_Consonant), ('\u{1056}', '\u{1057}', GC_SpacingMark), ('\u{1058}', '\u{1059}', - GC_Extend), ('\u{105a}', '\u{105d}', GC_InCB_Consonant), ('\u{105e}', '\u{1060}', - GC_Extend), ('\u{1061}', '\u{1061}', GC_InCB_Consonant), ('\u{1065}', '\u{1066}', - GC_InCB_Consonant), ('\u{106e}', '\u{1070}', GC_InCB_Consonant), ('\u{1071}', '\u{1074}', - GC_Extend), ('\u{1075}', '\u{1081}', GC_InCB_Consonant), ('\u{1082}', '\u{1082}', - GC_Extend), ('\u{1084}', '\u{1084}', GC_SpacingMark), ('\u{1085}', '\u{1086}', GC_Extend), - ('\u{108d}', '\u{108d}', GC_Extend), ('\u{108e}', '\u{108e}', GC_InCB_Consonant), - ('\u{109d}', '\u{109d}', GC_Extend), ('\u{1100}', '\u{115f}', GC_L), ('\u{1160}', - '\u{11a7}', GC_V), ('\u{11a8}', '\u{11ff}', GC_T), ('\u{135d}', '\u{135f}', GC_Extend), - ('\u{1712}', '\u{1715}', GC_Extend), ('\u{1732}', '\u{1734}', GC_Extend), ('\u{1752}', - '\u{1753}', GC_Extend), ('\u{1772}', '\u{1773}', GC_Extend), ('\u{1780}', '\u{17b3}', - GC_InCB_Consonant), ('\u{17b4}', '\u{17b5}', GC_Extend), ('\u{17b6}', '\u{17b6}', - GC_SpacingMark), ('\u{17b7}', '\u{17bd}', GC_Extend), ('\u{17be}', '\u{17c5}', - GC_SpacingMark), ('\u{17c6}', '\u{17c6}', GC_Extend), ('\u{17c7}', '\u{17c8}', - GC_SpacingMark), ('\u{17c9}', '\u{17d3}', GC_Extend), ('\u{17dd}', '\u{17dd}', GC_Extend), - ('\u{180b}', '\u{180d}', GC_Extend), ('\u{180e}', '\u{180e}', GC_Control), ('\u{180f}', - '\u{180f}', GC_Extend), ('\u{1885}', '\u{1886}', GC_Extend), ('\u{18a9}', '\u{18a9}', - GC_Extend), ('\u{1920}', '\u{1922}', GC_Extend), ('\u{1923}', '\u{1926}', GC_SpacingMark), - ('\u{1927}', '\u{1928}', GC_Extend), ('\u{1929}', '\u{192b}', GC_SpacingMark), ('\u{1930}', - '\u{1931}', GC_SpacingMark), ('\u{1932}', '\u{1932}', GC_Extend), ('\u{1933}', '\u{1938}', - GC_SpacingMark), ('\u{1939}', '\u{193b}', GC_Extend), ('\u{1a17}', '\u{1a18}', GC_Extend), - ('\u{1a19}', '\u{1a1a}', GC_SpacingMark), ('\u{1a1b}', '\u{1a1b}', GC_Extend), ('\u{1a20}', - '\u{1a54}', GC_InCB_Consonant), ('\u{1a55}', '\u{1a55}', GC_SpacingMark), ('\u{1a56}', - '\u{1a56}', GC_Extend), ('\u{1a57}', '\u{1a57}', GC_SpacingMark), ('\u{1a58}', '\u{1a5e}', - GC_Extend), ('\u{1a60}', '\u{1a60}', GC_Extend), ('\u{1a62}', '\u{1a62}', GC_Extend), - ('\u{1a65}', '\u{1a6c}', GC_Extend), ('\u{1a6d}', '\u{1a72}', GC_SpacingMark), ('\u{1a73}', - '\u{1a7c}', GC_Extend), ('\u{1a7f}', '\u{1a7f}', GC_Extend), ('\u{1ab0}', '\u{1add}', - GC_Extend), ('\u{1ae0}', '\u{1aeb}', GC_Extend), ('\u{1b00}', '\u{1b03}', GC_Extend), - ('\u{1b04}', '\u{1b04}', GC_SpacingMark), ('\u{1b0b}', '\u{1b0c}', GC_InCB_Consonant), - ('\u{1b13}', '\u{1b33}', GC_InCB_Consonant), ('\u{1b34}', '\u{1b3d}', GC_Extend), - ('\u{1b3e}', '\u{1b41}', GC_SpacingMark), ('\u{1b42}', '\u{1b44}', GC_Extend), ('\u{1b45}', - '\u{1b4c}', GC_InCB_Consonant), ('\u{1b6b}', '\u{1b73}', GC_Extend), ('\u{1b80}', - '\u{1b81}', GC_Extend), ('\u{1b82}', '\u{1b82}', GC_SpacingMark), ('\u{1b83}', '\u{1ba0}', - GC_InCB_Consonant), ('\u{1ba1}', '\u{1ba1}', GC_SpacingMark), ('\u{1ba2}', '\u{1ba5}', - GC_Extend), ('\u{1ba6}', '\u{1ba7}', GC_SpacingMark), ('\u{1ba8}', '\u{1bad}', GC_Extend), - ('\u{1bae}', '\u{1baf}', GC_InCB_Consonant), ('\u{1bbb}', '\u{1bbd}', GC_InCB_Consonant), - ('\u{1be6}', '\u{1be6}', GC_Extend), ('\u{1be7}', '\u{1be7}', GC_SpacingMark), ('\u{1be8}', - '\u{1be9}', GC_Extend), ('\u{1bea}', '\u{1bec}', GC_SpacingMark), ('\u{1bed}', '\u{1bed}', - GC_Extend), ('\u{1bee}', '\u{1bee}', GC_SpacingMark), ('\u{1bef}', '\u{1bf3}', GC_Extend), - ('\u{1c24}', '\u{1c2b}', GC_SpacingMark), ('\u{1c2c}', '\u{1c33}', GC_Extend), ('\u{1c34}', - '\u{1c35}', GC_SpacingMark), ('\u{1c36}', '\u{1c37}', GC_Extend), ('\u{1cd0}', '\u{1cd2}', - GC_Extend), ('\u{1cd4}', '\u{1ce0}', GC_Extend), ('\u{1ce1}', '\u{1ce1}', GC_SpacingMark), - ('\u{1ce2}', '\u{1ce8}', GC_Extend), ('\u{1ced}', '\u{1ced}', GC_Extend), ('\u{1cf4}', - '\u{1cf4}', GC_Extend), ('\u{1cf7}', '\u{1cf7}', GC_SpacingMark), ('\u{1cf8}', '\u{1cf9}', - GC_Extend), ('\u{1dc0}', '\u{1dff}', GC_Extend), ('\u{200b}', '\u{200b}', GC_Control), - ('\u{200c}', '\u{200c}', GC_Extend), ('\u{200d}', '\u{200d}', GC_ZWJ), ('\u{200e}', - '\u{200f}', GC_Control), ('\u{2028}', '\u{202e}', GC_Control), ('\u{203c}', '\u{203c}', - GC_Extended_Pictographic), ('\u{2049}', '\u{2049}', GC_Extended_Pictographic), ('\u{2060}', - '\u{206f}', GC_Control), ('\u{20d0}', '\u{20f0}', GC_Extend), ('\u{2122}', '\u{2122}', - GC_Extended_Pictographic), ('\u{2139}', '\u{2139}', GC_Extended_Pictographic), ('\u{2194}', - '\u{2199}', GC_Extended_Pictographic), ('\u{21a9}', '\u{21aa}', GC_Extended_Pictographic), - ('\u{231a}', '\u{231b}', GC_Extended_Pictographic), ('\u{2328}', '\u{2328}', - GC_Extended_Pictographic), ('\u{23cf}', '\u{23cf}', GC_Extended_Pictographic), ('\u{23e9}', - '\u{23f3}', GC_Extended_Pictographic), ('\u{23f8}', '\u{23fa}', GC_Extended_Pictographic), - ('\u{24c2}', '\u{24c2}', GC_Extended_Pictographic), ('\u{25aa}', '\u{25ab}', - GC_Extended_Pictographic), ('\u{25b6}', '\u{25b6}', GC_Extended_Pictographic), ('\u{25c0}', - '\u{25c0}', GC_Extended_Pictographic), ('\u{25fb}', '\u{25fe}', GC_Extended_Pictographic), - ('\u{2600}', '\u{2604}', GC_Extended_Pictographic), ('\u{260e}', '\u{260e}', - GC_Extended_Pictographic), ('\u{2611}', '\u{2611}', GC_Extended_Pictographic), ('\u{2614}', - '\u{2615}', GC_Extended_Pictographic), ('\u{2618}', '\u{2618}', GC_Extended_Pictographic), - ('\u{261d}', '\u{261d}', GC_Extended_Pictographic), ('\u{2620}', '\u{2620}', - GC_Extended_Pictographic), ('\u{2622}', '\u{2623}', GC_Extended_Pictographic), ('\u{2626}', - '\u{2626}', GC_Extended_Pictographic), ('\u{262a}', '\u{262a}', GC_Extended_Pictographic), - ('\u{262e}', '\u{262f}', GC_Extended_Pictographic), ('\u{2638}', '\u{263a}', - GC_Extended_Pictographic), ('\u{2640}', '\u{2640}', GC_Extended_Pictographic), ('\u{2642}', - '\u{2642}', GC_Extended_Pictographic), ('\u{2648}', '\u{2653}', GC_Extended_Pictographic), - ('\u{265f}', '\u{2660}', GC_Extended_Pictographic), ('\u{2663}', '\u{2663}', - GC_Extended_Pictographic), ('\u{2665}', '\u{2666}', GC_Extended_Pictographic), ('\u{2668}', - '\u{2668}', GC_Extended_Pictographic), ('\u{267b}', '\u{267b}', GC_Extended_Pictographic), - ('\u{267e}', '\u{267f}', GC_Extended_Pictographic), ('\u{2692}', '\u{2697}', - GC_Extended_Pictographic), ('\u{2699}', '\u{2699}', GC_Extended_Pictographic), ('\u{269b}', - '\u{269c}', GC_Extended_Pictographic), ('\u{26a0}', '\u{26a1}', GC_Extended_Pictographic), - ('\u{26a7}', '\u{26a7}', GC_Extended_Pictographic), ('\u{26aa}', '\u{26ab}', - GC_Extended_Pictographic), ('\u{26b0}', '\u{26b1}', GC_Extended_Pictographic), ('\u{26bd}', - '\u{26be}', GC_Extended_Pictographic), ('\u{26c4}', '\u{26c5}', GC_Extended_Pictographic), - ('\u{26c8}', '\u{26c8}', GC_Extended_Pictographic), ('\u{26ce}', '\u{26cf}', - GC_Extended_Pictographic), ('\u{26d1}', '\u{26d1}', GC_Extended_Pictographic), ('\u{26d3}', - '\u{26d4}', GC_Extended_Pictographic), ('\u{26e9}', '\u{26ea}', GC_Extended_Pictographic), - ('\u{26f0}', '\u{26f5}', GC_Extended_Pictographic), ('\u{26f7}', '\u{26fa}', - GC_Extended_Pictographic), ('\u{26fd}', '\u{26fd}', GC_Extended_Pictographic), ('\u{2702}', - '\u{2702}', GC_Extended_Pictographic), ('\u{2705}', '\u{2705}', GC_Extended_Pictographic), - ('\u{2708}', '\u{270d}', GC_Extended_Pictographic), ('\u{270f}', '\u{270f}', - GC_Extended_Pictographic), ('\u{2712}', '\u{2712}', GC_Extended_Pictographic), ('\u{2714}', - '\u{2714}', GC_Extended_Pictographic), ('\u{2716}', '\u{2716}', GC_Extended_Pictographic), - ('\u{271d}', '\u{271d}', GC_Extended_Pictographic), ('\u{2721}', '\u{2721}', - GC_Extended_Pictographic), ('\u{2728}', '\u{2728}', GC_Extended_Pictographic), ('\u{2733}', - '\u{2734}', GC_Extended_Pictographic), ('\u{2744}', '\u{2744}', GC_Extended_Pictographic), - ('\u{2747}', '\u{2747}', GC_Extended_Pictographic), ('\u{274c}', '\u{274c}', - GC_Extended_Pictographic), ('\u{274e}', '\u{274e}', GC_Extended_Pictographic), ('\u{2753}', - '\u{2755}', GC_Extended_Pictographic), ('\u{2757}', '\u{2757}', GC_Extended_Pictographic), - ('\u{2763}', '\u{2764}', GC_Extended_Pictographic), ('\u{2795}', '\u{2797}', - GC_Extended_Pictographic), ('\u{27a1}', '\u{27a1}', GC_Extended_Pictographic), ('\u{27b0}', - '\u{27b0}', GC_Extended_Pictographic), ('\u{27bf}', '\u{27bf}', GC_Extended_Pictographic), - ('\u{2934}', '\u{2935}', GC_Extended_Pictographic), ('\u{2b05}', '\u{2b07}', - GC_Extended_Pictographic), ('\u{2b1b}', '\u{2b1c}', GC_Extended_Pictographic), ('\u{2b50}', - '\u{2b50}', GC_Extended_Pictographic), ('\u{2b55}', '\u{2b55}', GC_Extended_Pictographic), - ('\u{2cef}', '\u{2cf1}', GC_Extend), ('\u{2d7f}', '\u{2d7f}', GC_Extend), ('\u{2de0}', - '\u{2dff}', GC_Extend), ('\u{302a}', '\u{302f}', GC_Extend), ('\u{3030}', '\u{3030}', - GC_Extended_Pictographic), ('\u{303d}', '\u{303d}', GC_Extended_Pictographic), ('\u{3099}', - '\u{309a}', GC_Extend), ('\u{3297}', '\u{3297}', GC_Extended_Pictographic), ('\u{3299}', - '\u{3299}', GC_Extended_Pictographic), ('\u{a66f}', '\u{a672}', GC_Extend), ('\u{a674}', - '\u{a67d}', GC_Extend), ('\u{a69e}', '\u{a69f}', GC_Extend), ('\u{a6f0}', '\u{a6f1}', - GC_Extend), ('\u{a802}', '\u{a802}', GC_Extend), ('\u{a806}', '\u{a806}', GC_Extend), - ('\u{a80b}', '\u{a80b}', GC_Extend), ('\u{a823}', '\u{a824}', GC_SpacingMark), ('\u{a825}', - '\u{a826}', GC_Extend), ('\u{a827}', '\u{a827}', GC_SpacingMark), ('\u{a82c}', '\u{a82c}', - GC_Extend), ('\u{a880}', '\u{a881}', GC_SpacingMark), ('\u{a8b4}', '\u{a8c3}', - GC_SpacingMark), ('\u{a8c4}', '\u{a8c5}', GC_Extend), ('\u{a8e0}', '\u{a8f1}', GC_Extend), - ('\u{a8ff}', '\u{a8ff}', GC_Extend), ('\u{a926}', '\u{a92d}', GC_Extend), ('\u{a947}', - '\u{a951}', GC_Extend), ('\u{a952}', '\u{a952}', GC_SpacingMark), ('\u{a953}', '\u{a953}', - GC_Extend), ('\u{a960}', '\u{a97c}', GC_L), ('\u{a980}', '\u{a982}', GC_Extend), - ('\u{a983}', '\u{a983}', GC_SpacingMark), ('\u{a989}', '\u{a98b}', GC_InCB_Consonant), - ('\u{a98f}', '\u{a9b2}', GC_InCB_Consonant), ('\u{a9b3}', '\u{a9b3}', GC_Extend), - ('\u{a9b4}', '\u{a9b5}', GC_SpacingMark), ('\u{a9b6}', '\u{a9b9}', GC_Extend), ('\u{a9ba}', - '\u{a9bb}', GC_SpacingMark), ('\u{a9bc}', '\u{a9bd}', GC_Extend), ('\u{a9be}', '\u{a9bf}', - GC_SpacingMark), ('\u{a9c0}', '\u{a9c0}', GC_Extend), ('\u{a9e0}', '\u{a9e4}', - GC_InCB_Consonant), ('\u{a9e5}', '\u{a9e5}', GC_Extend), ('\u{a9e7}', '\u{a9ef}', - GC_InCB_Consonant), ('\u{a9fa}', '\u{a9fe}', GC_InCB_Consonant), ('\u{aa29}', '\u{aa2e}', - GC_Extend), ('\u{aa2f}', '\u{aa30}', GC_SpacingMark), ('\u{aa31}', '\u{aa32}', GC_Extend), - ('\u{aa33}', '\u{aa34}', GC_SpacingMark), ('\u{aa35}', '\u{aa36}', GC_Extend), ('\u{aa43}', - '\u{aa43}', GC_Extend), ('\u{aa4c}', '\u{aa4c}', GC_Extend), ('\u{aa4d}', '\u{aa4d}', - GC_SpacingMark), ('\u{aa60}', '\u{aa6f}', GC_InCB_Consonant), ('\u{aa71}', '\u{aa73}', - GC_InCB_Consonant), ('\u{aa7a}', '\u{aa7a}', GC_InCB_Consonant), ('\u{aa7c}', '\u{aa7c}', - GC_Extend), ('\u{aa7e}', '\u{aa7f}', GC_InCB_Consonant), ('\u{aab0}', '\u{aab0}', - GC_Extend), ('\u{aab2}', '\u{aab4}', GC_Extend), ('\u{aab7}', '\u{aab8}', GC_Extend), - ('\u{aabe}', '\u{aabf}', GC_Extend), ('\u{aac1}', '\u{aac1}', GC_Extend), ('\u{aae0}', - '\u{aaea}', GC_InCB_Consonant), ('\u{aaeb}', '\u{aaeb}', GC_SpacingMark), ('\u{aaec}', - '\u{aaed}', GC_Extend), ('\u{aaee}', '\u{aaef}', GC_SpacingMark), ('\u{aaf5}', '\u{aaf5}', - GC_SpacingMark), ('\u{aaf6}', '\u{aaf6}', GC_Extend), ('\u{abc0}', '\u{abda}', - GC_InCB_Consonant), ('\u{abe3}', '\u{abe4}', GC_SpacingMark), ('\u{abe5}', '\u{abe5}', - GC_Extend), ('\u{abe6}', '\u{abe7}', GC_SpacingMark), ('\u{abe8}', '\u{abe8}', GC_Extend), - ('\u{abe9}', '\u{abea}', GC_SpacingMark), ('\u{abec}', '\u{abec}', GC_SpacingMark), - ('\u{abed}', '\u{abed}', GC_Extend), ('\u{ac00}', '\u{ac00}', GC_LV), ('\u{ac01}', - '\u{ac1b}', GC_LVT), ('\u{ac1c}', '\u{ac1c}', GC_LV), ('\u{ac1d}', '\u{ac37}', GC_LVT), - ('\u{ac38}', '\u{ac38}', GC_LV), ('\u{ac39}', '\u{ac53}', GC_LVT), ('\u{ac54}', '\u{ac54}', - GC_LV), ('\u{ac55}', '\u{ac6f}', GC_LVT), ('\u{ac70}', '\u{ac70}', GC_LV), ('\u{ac71}', - '\u{ac8b}', GC_LVT), ('\u{ac8c}', '\u{ac8c}', GC_LV), ('\u{ac8d}', '\u{aca7}', GC_LVT), - ('\u{aca8}', '\u{aca8}', GC_LV), ('\u{aca9}', '\u{acc3}', GC_LVT), ('\u{acc4}', '\u{acc4}', - GC_LV), ('\u{acc5}', '\u{acdf}', GC_LVT), ('\u{ace0}', '\u{ace0}', GC_LV), ('\u{ace1}', - '\u{acfb}', GC_LVT), ('\u{acfc}', '\u{acfc}', GC_LV), ('\u{acfd}', '\u{ad17}', GC_LVT), - ('\u{ad18}', '\u{ad18}', GC_LV), ('\u{ad19}', '\u{ad33}', GC_LVT), ('\u{ad34}', '\u{ad34}', - GC_LV), ('\u{ad35}', '\u{ad4f}', GC_LVT), ('\u{ad50}', '\u{ad50}', GC_LV), ('\u{ad51}', - '\u{ad6b}', GC_LVT), ('\u{ad6c}', '\u{ad6c}', GC_LV), ('\u{ad6d}', '\u{ad87}', GC_LVT), - ('\u{ad88}', '\u{ad88}', GC_LV), ('\u{ad89}', '\u{ada3}', GC_LVT), ('\u{ada4}', '\u{ada4}', - GC_LV), ('\u{ada5}', '\u{adbf}', GC_LVT), ('\u{adc0}', '\u{adc0}', GC_LV), ('\u{adc1}', - '\u{addb}', GC_LVT), ('\u{addc}', '\u{addc}', GC_LV), ('\u{addd}', '\u{adf7}', GC_LVT), - ('\u{adf8}', '\u{adf8}', GC_LV), ('\u{adf9}', '\u{ae13}', GC_LVT), ('\u{ae14}', '\u{ae14}', - GC_LV), ('\u{ae15}', '\u{ae2f}', GC_LVT), ('\u{ae30}', '\u{ae30}', GC_LV), ('\u{ae31}', - '\u{ae4b}', GC_LVT), ('\u{ae4c}', '\u{ae4c}', GC_LV), ('\u{ae4d}', '\u{ae67}', GC_LVT), - ('\u{ae68}', '\u{ae68}', GC_LV), ('\u{ae69}', '\u{ae83}', GC_LVT), ('\u{ae84}', '\u{ae84}', - GC_LV), ('\u{ae85}', '\u{ae9f}', GC_LVT), ('\u{aea0}', '\u{aea0}', GC_LV), ('\u{aea1}', - '\u{aebb}', GC_LVT), ('\u{aebc}', '\u{aebc}', GC_LV), ('\u{aebd}', '\u{aed7}', GC_LVT), - ('\u{aed8}', '\u{aed8}', GC_LV), ('\u{aed9}', '\u{aef3}', GC_LVT), ('\u{aef4}', '\u{aef4}', - GC_LV), ('\u{aef5}', '\u{af0f}', GC_LVT), ('\u{af10}', '\u{af10}', GC_LV), ('\u{af11}', - '\u{af2b}', GC_LVT), ('\u{af2c}', '\u{af2c}', GC_LV), ('\u{af2d}', '\u{af47}', GC_LVT), - ('\u{af48}', '\u{af48}', GC_LV), ('\u{af49}', '\u{af63}', GC_LVT), ('\u{af64}', '\u{af64}', - GC_LV), ('\u{af65}', '\u{af7f}', GC_LVT), ('\u{af80}', '\u{af80}', GC_LV), ('\u{af81}', - '\u{af9b}', GC_LVT), ('\u{af9c}', '\u{af9c}', GC_LV), ('\u{af9d}', '\u{afb7}', GC_LVT), - ('\u{afb8}', '\u{afb8}', GC_LV), ('\u{afb9}', '\u{afd3}', GC_LVT), ('\u{afd4}', '\u{afd4}', - GC_LV), ('\u{afd5}', '\u{afef}', GC_LVT), ('\u{aff0}', '\u{aff0}', GC_LV), ('\u{aff1}', - '\u{b00b}', GC_LVT), ('\u{b00c}', '\u{b00c}', GC_LV), ('\u{b00d}', '\u{b027}', GC_LVT), - ('\u{b028}', '\u{b028}', GC_LV), ('\u{b029}', '\u{b043}', GC_LVT), ('\u{b044}', '\u{b044}', - GC_LV), ('\u{b045}', '\u{b05f}', GC_LVT), ('\u{b060}', '\u{b060}', GC_LV), ('\u{b061}', - '\u{b07b}', GC_LVT), ('\u{b07c}', '\u{b07c}', GC_LV), ('\u{b07d}', '\u{b097}', GC_LVT), - ('\u{b098}', '\u{b098}', GC_LV), ('\u{b099}', '\u{b0b3}', GC_LVT), ('\u{b0b4}', '\u{b0b4}', - GC_LV), ('\u{b0b5}', '\u{b0cf}', GC_LVT), ('\u{b0d0}', '\u{b0d0}', GC_LV), ('\u{b0d1}', - '\u{b0eb}', GC_LVT), ('\u{b0ec}', '\u{b0ec}', GC_LV), ('\u{b0ed}', '\u{b107}', GC_LVT), - ('\u{b108}', '\u{b108}', GC_LV), ('\u{b109}', '\u{b123}', GC_LVT), ('\u{b124}', '\u{b124}', - GC_LV), ('\u{b125}', '\u{b13f}', GC_LVT), ('\u{b140}', '\u{b140}', GC_LV), ('\u{b141}', - '\u{b15b}', GC_LVT), ('\u{b15c}', '\u{b15c}', GC_LV), ('\u{b15d}', '\u{b177}', GC_LVT), - ('\u{b178}', '\u{b178}', GC_LV), ('\u{b179}', '\u{b193}', GC_LVT), ('\u{b194}', '\u{b194}', - GC_LV), ('\u{b195}', '\u{b1af}', GC_LVT), ('\u{b1b0}', '\u{b1b0}', GC_LV), ('\u{b1b1}', - '\u{b1cb}', GC_LVT), ('\u{b1cc}', '\u{b1cc}', GC_LV), ('\u{b1cd}', '\u{b1e7}', GC_LVT), - ('\u{b1e8}', '\u{b1e8}', GC_LV), ('\u{b1e9}', '\u{b203}', GC_LVT), ('\u{b204}', '\u{b204}', - GC_LV), ('\u{b205}', '\u{b21f}', GC_LVT), ('\u{b220}', '\u{b220}', GC_LV), ('\u{b221}', - '\u{b23b}', GC_LVT), ('\u{b23c}', '\u{b23c}', GC_LV), ('\u{b23d}', '\u{b257}', GC_LVT), - ('\u{b258}', '\u{b258}', GC_LV), ('\u{b259}', '\u{b273}', GC_LVT), ('\u{b274}', '\u{b274}', - GC_LV), ('\u{b275}', '\u{b28f}', GC_LVT), ('\u{b290}', '\u{b290}', GC_LV), ('\u{b291}', - '\u{b2ab}', GC_LVT), ('\u{b2ac}', '\u{b2ac}', GC_LV), ('\u{b2ad}', '\u{b2c7}', GC_LVT), - ('\u{b2c8}', '\u{b2c8}', GC_LV), ('\u{b2c9}', '\u{b2e3}', GC_LVT), ('\u{b2e4}', '\u{b2e4}', - GC_LV), ('\u{b2e5}', '\u{b2ff}', GC_LVT), ('\u{b300}', '\u{b300}', GC_LV), ('\u{b301}', - '\u{b31b}', GC_LVT), ('\u{b31c}', '\u{b31c}', GC_LV), ('\u{b31d}', '\u{b337}', GC_LVT), - ('\u{b338}', '\u{b338}', GC_LV), ('\u{b339}', '\u{b353}', GC_LVT), ('\u{b354}', '\u{b354}', - GC_LV), ('\u{b355}', '\u{b36f}', GC_LVT), ('\u{b370}', '\u{b370}', GC_LV), ('\u{b371}', - '\u{b38b}', GC_LVT), ('\u{b38c}', '\u{b38c}', GC_LV), ('\u{b38d}', '\u{b3a7}', GC_LVT), - ('\u{b3a8}', '\u{b3a8}', GC_LV), ('\u{b3a9}', '\u{b3c3}', GC_LVT), ('\u{b3c4}', '\u{b3c4}', - GC_LV), ('\u{b3c5}', '\u{b3df}', GC_LVT), ('\u{b3e0}', '\u{b3e0}', GC_LV), ('\u{b3e1}', - '\u{b3fb}', GC_LVT), ('\u{b3fc}', '\u{b3fc}', GC_LV), ('\u{b3fd}', '\u{b417}', GC_LVT), - ('\u{b418}', '\u{b418}', GC_LV), ('\u{b419}', '\u{b433}', GC_LVT), ('\u{b434}', '\u{b434}', - GC_LV), ('\u{b435}', '\u{b44f}', GC_LVT), ('\u{b450}', '\u{b450}', GC_LV), ('\u{b451}', - '\u{b46b}', GC_LVT), ('\u{b46c}', '\u{b46c}', GC_LV), ('\u{b46d}', '\u{b487}', GC_LVT), - ('\u{b488}', '\u{b488}', GC_LV), ('\u{b489}', '\u{b4a3}', GC_LVT), ('\u{b4a4}', '\u{b4a4}', - GC_LV), ('\u{b4a5}', '\u{b4bf}', GC_LVT), ('\u{b4c0}', '\u{b4c0}', GC_LV), ('\u{b4c1}', - '\u{b4db}', GC_LVT), ('\u{b4dc}', '\u{b4dc}', GC_LV), ('\u{b4dd}', '\u{b4f7}', GC_LVT), - ('\u{b4f8}', '\u{b4f8}', GC_LV), ('\u{b4f9}', '\u{b513}', GC_LVT), ('\u{b514}', '\u{b514}', - GC_LV), ('\u{b515}', '\u{b52f}', GC_LVT), ('\u{b530}', '\u{b530}', GC_LV), ('\u{b531}', - '\u{b54b}', GC_LVT), ('\u{b54c}', '\u{b54c}', GC_LV), ('\u{b54d}', '\u{b567}', GC_LVT), - ('\u{b568}', '\u{b568}', GC_LV), ('\u{b569}', '\u{b583}', GC_LVT), ('\u{b584}', '\u{b584}', - GC_LV), ('\u{b585}', '\u{b59f}', GC_LVT), ('\u{b5a0}', '\u{b5a0}', GC_LV), ('\u{b5a1}', - '\u{b5bb}', GC_LVT), ('\u{b5bc}', '\u{b5bc}', GC_LV), ('\u{b5bd}', '\u{b5d7}', GC_LVT), - ('\u{b5d8}', '\u{b5d8}', GC_LV), ('\u{b5d9}', '\u{b5f3}', GC_LVT), ('\u{b5f4}', '\u{b5f4}', - GC_LV), ('\u{b5f5}', '\u{b60f}', GC_LVT), ('\u{b610}', '\u{b610}', GC_LV), ('\u{b611}', - '\u{b62b}', GC_LVT), ('\u{b62c}', '\u{b62c}', GC_LV), ('\u{b62d}', '\u{b647}', GC_LVT), - ('\u{b648}', '\u{b648}', GC_LV), ('\u{b649}', '\u{b663}', GC_LVT), ('\u{b664}', '\u{b664}', - GC_LV), ('\u{b665}', '\u{b67f}', GC_LVT), ('\u{b680}', '\u{b680}', GC_LV), ('\u{b681}', - '\u{b69b}', GC_LVT), ('\u{b69c}', '\u{b69c}', GC_LV), ('\u{b69d}', '\u{b6b7}', GC_LVT), - ('\u{b6b8}', '\u{b6b8}', GC_LV), ('\u{b6b9}', '\u{b6d3}', GC_LVT), ('\u{b6d4}', '\u{b6d4}', - GC_LV), ('\u{b6d5}', '\u{b6ef}', GC_LVT), ('\u{b6f0}', '\u{b6f0}', GC_LV), ('\u{b6f1}', - '\u{b70b}', GC_LVT), ('\u{b70c}', '\u{b70c}', GC_LV), ('\u{b70d}', '\u{b727}', GC_LVT), - ('\u{b728}', '\u{b728}', GC_LV), ('\u{b729}', '\u{b743}', GC_LVT), ('\u{b744}', '\u{b744}', - GC_LV), ('\u{b745}', '\u{b75f}', GC_LVT), ('\u{b760}', '\u{b760}', GC_LV), ('\u{b761}', - '\u{b77b}', GC_LVT), ('\u{b77c}', '\u{b77c}', GC_LV), ('\u{b77d}', '\u{b797}', GC_LVT), - ('\u{b798}', '\u{b798}', GC_LV), ('\u{b799}', '\u{b7b3}', GC_LVT), ('\u{b7b4}', '\u{b7b4}', - GC_LV), ('\u{b7b5}', '\u{b7cf}', GC_LVT), ('\u{b7d0}', '\u{b7d0}', GC_LV), ('\u{b7d1}', - '\u{b7eb}', GC_LVT), ('\u{b7ec}', '\u{b7ec}', GC_LV), ('\u{b7ed}', '\u{b807}', GC_LVT), - ('\u{b808}', '\u{b808}', GC_LV), ('\u{b809}', '\u{b823}', GC_LVT), ('\u{b824}', '\u{b824}', - GC_LV), ('\u{b825}', '\u{b83f}', GC_LVT), ('\u{b840}', '\u{b840}', GC_LV), ('\u{b841}', - '\u{b85b}', GC_LVT), ('\u{b85c}', '\u{b85c}', GC_LV), ('\u{b85d}', '\u{b877}', GC_LVT), - ('\u{b878}', '\u{b878}', GC_LV), ('\u{b879}', '\u{b893}', GC_LVT), ('\u{b894}', '\u{b894}', - GC_LV), ('\u{b895}', '\u{b8af}', GC_LVT), ('\u{b8b0}', '\u{b8b0}', GC_LV), ('\u{b8b1}', - '\u{b8cb}', GC_LVT), ('\u{b8cc}', '\u{b8cc}', GC_LV), ('\u{b8cd}', '\u{b8e7}', GC_LVT), - ('\u{b8e8}', '\u{b8e8}', GC_LV), ('\u{b8e9}', '\u{b903}', GC_LVT), ('\u{b904}', '\u{b904}', - GC_LV), ('\u{b905}', '\u{b91f}', GC_LVT), ('\u{b920}', '\u{b920}', GC_LV), ('\u{b921}', - '\u{b93b}', GC_LVT), ('\u{b93c}', '\u{b93c}', GC_LV), ('\u{b93d}', '\u{b957}', GC_LVT), - ('\u{b958}', '\u{b958}', GC_LV), ('\u{b959}', '\u{b973}', GC_LVT), ('\u{b974}', '\u{b974}', - GC_LV), ('\u{b975}', '\u{b98f}', GC_LVT), ('\u{b990}', '\u{b990}', GC_LV), ('\u{b991}', - '\u{b9ab}', GC_LVT), ('\u{b9ac}', '\u{b9ac}', GC_LV), ('\u{b9ad}', '\u{b9c7}', GC_LVT), - ('\u{b9c8}', '\u{b9c8}', GC_LV), ('\u{b9c9}', '\u{b9e3}', GC_LVT), ('\u{b9e4}', '\u{b9e4}', - GC_LV), ('\u{b9e5}', '\u{b9ff}', GC_LVT), ('\u{ba00}', '\u{ba00}', GC_LV), ('\u{ba01}', - '\u{ba1b}', GC_LVT), ('\u{ba1c}', '\u{ba1c}', GC_LV), ('\u{ba1d}', '\u{ba37}', GC_LVT), - ('\u{ba38}', '\u{ba38}', GC_LV), ('\u{ba39}', '\u{ba53}', GC_LVT), ('\u{ba54}', '\u{ba54}', - GC_LV), ('\u{ba55}', '\u{ba6f}', GC_LVT), ('\u{ba70}', '\u{ba70}', GC_LV), ('\u{ba71}', - '\u{ba8b}', GC_LVT), ('\u{ba8c}', '\u{ba8c}', GC_LV), ('\u{ba8d}', '\u{baa7}', GC_LVT), - ('\u{baa8}', '\u{baa8}', GC_LV), ('\u{baa9}', '\u{bac3}', GC_LVT), ('\u{bac4}', '\u{bac4}', - GC_LV), ('\u{bac5}', '\u{badf}', GC_LVT), ('\u{bae0}', '\u{bae0}', GC_LV), ('\u{bae1}', - '\u{bafb}', GC_LVT), ('\u{bafc}', '\u{bafc}', GC_LV), ('\u{bafd}', '\u{bb17}', GC_LVT), - ('\u{bb18}', '\u{bb18}', GC_LV), ('\u{bb19}', '\u{bb33}', GC_LVT), ('\u{bb34}', '\u{bb34}', - GC_LV), ('\u{bb35}', '\u{bb4f}', GC_LVT), ('\u{bb50}', '\u{bb50}', GC_LV), ('\u{bb51}', - '\u{bb6b}', GC_LVT), ('\u{bb6c}', '\u{bb6c}', GC_LV), ('\u{bb6d}', '\u{bb87}', GC_LVT), - ('\u{bb88}', '\u{bb88}', GC_LV), ('\u{bb89}', '\u{bba3}', GC_LVT), ('\u{bba4}', '\u{bba4}', - GC_LV), ('\u{bba5}', '\u{bbbf}', GC_LVT), ('\u{bbc0}', '\u{bbc0}', GC_LV), ('\u{bbc1}', - '\u{bbdb}', GC_LVT), ('\u{bbdc}', '\u{bbdc}', GC_LV), ('\u{bbdd}', '\u{bbf7}', GC_LVT), - ('\u{bbf8}', '\u{bbf8}', GC_LV), ('\u{bbf9}', '\u{bc13}', GC_LVT), ('\u{bc14}', '\u{bc14}', - GC_LV), ('\u{bc15}', '\u{bc2f}', GC_LVT), ('\u{bc30}', '\u{bc30}', GC_LV), ('\u{bc31}', - '\u{bc4b}', GC_LVT), ('\u{bc4c}', '\u{bc4c}', GC_LV), ('\u{bc4d}', '\u{bc67}', GC_LVT), - ('\u{bc68}', '\u{bc68}', GC_LV), ('\u{bc69}', '\u{bc83}', GC_LVT), ('\u{bc84}', '\u{bc84}', - GC_LV), ('\u{bc85}', '\u{bc9f}', GC_LVT), ('\u{bca0}', '\u{bca0}', GC_LV), ('\u{bca1}', - '\u{bcbb}', GC_LVT), ('\u{bcbc}', '\u{bcbc}', GC_LV), ('\u{bcbd}', '\u{bcd7}', GC_LVT), - ('\u{bcd8}', '\u{bcd8}', GC_LV), ('\u{bcd9}', '\u{bcf3}', GC_LVT), ('\u{bcf4}', '\u{bcf4}', - GC_LV), ('\u{bcf5}', '\u{bd0f}', GC_LVT), ('\u{bd10}', '\u{bd10}', GC_LV), ('\u{bd11}', - '\u{bd2b}', GC_LVT), ('\u{bd2c}', '\u{bd2c}', GC_LV), ('\u{bd2d}', '\u{bd47}', GC_LVT), - ('\u{bd48}', '\u{bd48}', GC_LV), ('\u{bd49}', '\u{bd63}', GC_LVT), ('\u{bd64}', '\u{bd64}', - GC_LV), ('\u{bd65}', '\u{bd7f}', GC_LVT), ('\u{bd80}', '\u{bd80}', GC_LV), ('\u{bd81}', - '\u{bd9b}', GC_LVT), ('\u{bd9c}', '\u{bd9c}', GC_LV), ('\u{bd9d}', '\u{bdb7}', GC_LVT), - ('\u{bdb8}', '\u{bdb8}', GC_LV), ('\u{bdb9}', '\u{bdd3}', GC_LVT), ('\u{bdd4}', '\u{bdd4}', - GC_LV), ('\u{bdd5}', '\u{bdef}', GC_LVT), ('\u{bdf0}', '\u{bdf0}', GC_LV), ('\u{bdf1}', - '\u{be0b}', GC_LVT), ('\u{be0c}', '\u{be0c}', GC_LV), ('\u{be0d}', '\u{be27}', GC_LVT), - ('\u{be28}', '\u{be28}', GC_LV), ('\u{be29}', '\u{be43}', GC_LVT), ('\u{be44}', '\u{be44}', - GC_LV), ('\u{be45}', '\u{be5f}', GC_LVT), ('\u{be60}', '\u{be60}', GC_LV), ('\u{be61}', - '\u{be7b}', GC_LVT), ('\u{be7c}', '\u{be7c}', GC_LV), ('\u{be7d}', '\u{be97}', GC_LVT), - ('\u{be98}', '\u{be98}', GC_LV), ('\u{be99}', '\u{beb3}', GC_LVT), ('\u{beb4}', '\u{beb4}', - GC_LV), ('\u{beb5}', '\u{becf}', GC_LVT), ('\u{bed0}', '\u{bed0}', GC_LV), ('\u{bed1}', - '\u{beeb}', GC_LVT), ('\u{beec}', '\u{beec}', GC_LV), ('\u{beed}', '\u{bf07}', GC_LVT), - ('\u{bf08}', '\u{bf08}', GC_LV), ('\u{bf09}', '\u{bf23}', GC_LVT), ('\u{bf24}', '\u{bf24}', - GC_LV), ('\u{bf25}', '\u{bf3f}', GC_LVT), ('\u{bf40}', '\u{bf40}', GC_LV), ('\u{bf41}', - '\u{bf5b}', GC_LVT), ('\u{bf5c}', '\u{bf5c}', GC_LV), ('\u{bf5d}', '\u{bf77}', GC_LVT), - ('\u{bf78}', '\u{bf78}', GC_LV), ('\u{bf79}', '\u{bf93}', GC_LVT), ('\u{bf94}', '\u{bf94}', - GC_LV), ('\u{bf95}', '\u{bfaf}', GC_LVT), ('\u{bfb0}', '\u{bfb0}', GC_LV), ('\u{bfb1}', - '\u{bfcb}', GC_LVT), ('\u{bfcc}', '\u{bfcc}', GC_LV), ('\u{bfcd}', '\u{bfe7}', GC_LVT), - ('\u{bfe8}', '\u{bfe8}', GC_LV), ('\u{bfe9}', '\u{c003}', GC_LVT), ('\u{c004}', '\u{c004}', - GC_LV), ('\u{c005}', '\u{c01f}', GC_LVT), ('\u{c020}', '\u{c020}', GC_LV), ('\u{c021}', - '\u{c03b}', GC_LVT), ('\u{c03c}', '\u{c03c}', GC_LV), ('\u{c03d}', '\u{c057}', GC_LVT), - ('\u{c058}', '\u{c058}', GC_LV), ('\u{c059}', '\u{c073}', GC_LVT), ('\u{c074}', '\u{c074}', - GC_LV), ('\u{c075}', '\u{c08f}', GC_LVT), ('\u{c090}', '\u{c090}', GC_LV), ('\u{c091}', - '\u{c0ab}', GC_LVT), ('\u{c0ac}', '\u{c0ac}', GC_LV), ('\u{c0ad}', '\u{c0c7}', GC_LVT), - ('\u{c0c8}', '\u{c0c8}', GC_LV), ('\u{c0c9}', '\u{c0e3}', GC_LVT), ('\u{c0e4}', '\u{c0e4}', - GC_LV), ('\u{c0e5}', '\u{c0ff}', GC_LVT), ('\u{c100}', '\u{c100}', GC_LV), ('\u{c101}', - '\u{c11b}', GC_LVT), ('\u{c11c}', '\u{c11c}', GC_LV), ('\u{c11d}', '\u{c137}', GC_LVT), - ('\u{c138}', '\u{c138}', GC_LV), ('\u{c139}', '\u{c153}', GC_LVT), ('\u{c154}', '\u{c154}', - GC_LV), ('\u{c155}', '\u{c16f}', GC_LVT), ('\u{c170}', '\u{c170}', GC_LV), ('\u{c171}', - '\u{c18b}', GC_LVT), ('\u{c18c}', '\u{c18c}', GC_LV), ('\u{c18d}', '\u{c1a7}', GC_LVT), - ('\u{c1a8}', '\u{c1a8}', GC_LV), ('\u{c1a9}', '\u{c1c3}', GC_LVT), ('\u{c1c4}', '\u{c1c4}', - GC_LV), ('\u{c1c5}', '\u{c1df}', GC_LVT), ('\u{c1e0}', '\u{c1e0}', GC_LV), ('\u{c1e1}', - '\u{c1fb}', GC_LVT), ('\u{c1fc}', '\u{c1fc}', GC_LV), ('\u{c1fd}', '\u{c217}', GC_LVT), - ('\u{c218}', '\u{c218}', GC_LV), ('\u{c219}', '\u{c233}', GC_LVT), ('\u{c234}', '\u{c234}', - GC_LV), ('\u{c235}', '\u{c24f}', GC_LVT), ('\u{c250}', '\u{c250}', GC_LV), ('\u{c251}', - '\u{c26b}', GC_LVT), ('\u{c26c}', '\u{c26c}', GC_LV), ('\u{c26d}', '\u{c287}', GC_LVT), - ('\u{c288}', '\u{c288}', GC_LV), ('\u{c289}', '\u{c2a3}', GC_LVT), ('\u{c2a4}', '\u{c2a4}', - GC_LV), ('\u{c2a5}', '\u{c2bf}', GC_LVT), ('\u{c2c0}', '\u{c2c0}', GC_LV), ('\u{c2c1}', - '\u{c2db}', GC_LVT), ('\u{c2dc}', '\u{c2dc}', GC_LV), ('\u{c2dd}', '\u{c2f7}', GC_LVT), - ('\u{c2f8}', '\u{c2f8}', GC_LV), ('\u{c2f9}', '\u{c313}', GC_LVT), ('\u{c314}', '\u{c314}', - GC_LV), ('\u{c315}', '\u{c32f}', GC_LVT), ('\u{c330}', '\u{c330}', GC_LV), ('\u{c331}', - '\u{c34b}', GC_LVT), ('\u{c34c}', '\u{c34c}', GC_LV), ('\u{c34d}', '\u{c367}', GC_LVT), - ('\u{c368}', '\u{c368}', GC_LV), ('\u{c369}', '\u{c383}', GC_LVT), ('\u{c384}', '\u{c384}', - GC_LV), ('\u{c385}', '\u{c39f}', GC_LVT), ('\u{c3a0}', '\u{c3a0}', GC_LV), ('\u{c3a1}', - '\u{c3bb}', GC_LVT), ('\u{c3bc}', '\u{c3bc}', GC_LV), ('\u{c3bd}', '\u{c3d7}', GC_LVT), - ('\u{c3d8}', '\u{c3d8}', GC_LV), ('\u{c3d9}', '\u{c3f3}', GC_LVT), ('\u{c3f4}', '\u{c3f4}', - GC_LV), ('\u{c3f5}', '\u{c40f}', GC_LVT), ('\u{c410}', '\u{c410}', GC_LV), ('\u{c411}', - '\u{c42b}', GC_LVT), ('\u{c42c}', '\u{c42c}', GC_LV), ('\u{c42d}', '\u{c447}', GC_LVT), - ('\u{c448}', '\u{c448}', GC_LV), ('\u{c449}', '\u{c463}', GC_LVT), ('\u{c464}', '\u{c464}', - GC_LV), ('\u{c465}', '\u{c47f}', GC_LVT), ('\u{c480}', '\u{c480}', GC_LV), ('\u{c481}', - '\u{c49b}', GC_LVT), ('\u{c49c}', '\u{c49c}', GC_LV), ('\u{c49d}', '\u{c4b7}', GC_LVT), - ('\u{c4b8}', '\u{c4b8}', GC_LV), ('\u{c4b9}', '\u{c4d3}', GC_LVT), ('\u{c4d4}', '\u{c4d4}', - GC_LV), ('\u{c4d5}', '\u{c4ef}', GC_LVT), ('\u{c4f0}', '\u{c4f0}', GC_LV), ('\u{c4f1}', - '\u{c50b}', GC_LVT), ('\u{c50c}', '\u{c50c}', GC_LV), ('\u{c50d}', '\u{c527}', GC_LVT), - ('\u{c528}', '\u{c528}', GC_LV), ('\u{c529}', '\u{c543}', GC_LVT), ('\u{c544}', '\u{c544}', - GC_LV), ('\u{c545}', '\u{c55f}', GC_LVT), ('\u{c560}', '\u{c560}', GC_LV), ('\u{c561}', - '\u{c57b}', GC_LVT), ('\u{c57c}', '\u{c57c}', GC_LV), ('\u{c57d}', '\u{c597}', GC_LVT), - ('\u{c598}', '\u{c598}', GC_LV), ('\u{c599}', '\u{c5b3}', GC_LVT), ('\u{c5b4}', '\u{c5b4}', - GC_LV), ('\u{c5b5}', '\u{c5cf}', GC_LVT), ('\u{c5d0}', '\u{c5d0}', GC_LV), ('\u{c5d1}', - '\u{c5eb}', GC_LVT), ('\u{c5ec}', '\u{c5ec}', GC_LV), ('\u{c5ed}', '\u{c607}', GC_LVT), - ('\u{c608}', '\u{c608}', GC_LV), ('\u{c609}', '\u{c623}', GC_LVT), ('\u{c624}', '\u{c624}', - GC_LV), ('\u{c625}', '\u{c63f}', GC_LVT), ('\u{c640}', '\u{c640}', GC_LV), ('\u{c641}', - '\u{c65b}', GC_LVT), ('\u{c65c}', '\u{c65c}', GC_LV), ('\u{c65d}', '\u{c677}', GC_LVT), - ('\u{c678}', '\u{c678}', GC_LV), ('\u{c679}', '\u{c693}', GC_LVT), ('\u{c694}', '\u{c694}', - GC_LV), ('\u{c695}', '\u{c6af}', GC_LVT), ('\u{c6b0}', '\u{c6b0}', GC_LV), ('\u{c6b1}', - '\u{c6cb}', GC_LVT), ('\u{c6cc}', '\u{c6cc}', GC_LV), ('\u{c6cd}', '\u{c6e7}', GC_LVT), - ('\u{c6e8}', '\u{c6e8}', GC_LV), ('\u{c6e9}', '\u{c703}', GC_LVT), ('\u{c704}', '\u{c704}', - GC_LV), ('\u{c705}', '\u{c71f}', GC_LVT), ('\u{c720}', '\u{c720}', GC_LV), ('\u{c721}', - '\u{c73b}', GC_LVT), ('\u{c73c}', '\u{c73c}', GC_LV), ('\u{c73d}', '\u{c757}', GC_LVT), - ('\u{c758}', '\u{c758}', GC_LV), ('\u{c759}', '\u{c773}', GC_LVT), ('\u{c774}', '\u{c774}', - GC_LV), ('\u{c775}', '\u{c78f}', GC_LVT), ('\u{c790}', '\u{c790}', GC_LV), ('\u{c791}', - '\u{c7ab}', GC_LVT), ('\u{c7ac}', '\u{c7ac}', GC_LV), ('\u{c7ad}', '\u{c7c7}', GC_LVT), - ('\u{c7c8}', '\u{c7c8}', GC_LV), ('\u{c7c9}', '\u{c7e3}', GC_LVT), ('\u{c7e4}', '\u{c7e4}', - GC_LV), ('\u{c7e5}', '\u{c7ff}', GC_LVT), ('\u{c800}', '\u{c800}', GC_LV), ('\u{c801}', - '\u{c81b}', GC_LVT), ('\u{c81c}', '\u{c81c}', GC_LV), ('\u{c81d}', '\u{c837}', GC_LVT), - ('\u{c838}', '\u{c838}', GC_LV), ('\u{c839}', '\u{c853}', GC_LVT), ('\u{c854}', '\u{c854}', - GC_LV), ('\u{c855}', '\u{c86f}', GC_LVT), ('\u{c870}', '\u{c870}', GC_LV), ('\u{c871}', - '\u{c88b}', GC_LVT), ('\u{c88c}', '\u{c88c}', GC_LV), ('\u{c88d}', '\u{c8a7}', GC_LVT), - ('\u{c8a8}', '\u{c8a8}', GC_LV), ('\u{c8a9}', '\u{c8c3}', GC_LVT), ('\u{c8c4}', '\u{c8c4}', - GC_LV), ('\u{c8c5}', '\u{c8df}', GC_LVT), ('\u{c8e0}', '\u{c8e0}', GC_LV), ('\u{c8e1}', - '\u{c8fb}', GC_LVT), ('\u{c8fc}', '\u{c8fc}', GC_LV), ('\u{c8fd}', '\u{c917}', GC_LVT), - ('\u{c918}', '\u{c918}', GC_LV), ('\u{c919}', '\u{c933}', GC_LVT), ('\u{c934}', '\u{c934}', - GC_LV), ('\u{c935}', '\u{c94f}', GC_LVT), ('\u{c950}', '\u{c950}', GC_LV), ('\u{c951}', - '\u{c96b}', GC_LVT), ('\u{c96c}', '\u{c96c}', GC_LV), ('\u{c96d}', '\u{c987}', GC_LVT), - ('\u{c988}', '\u{c988}', GC_LV), ('\u{c989}', '\u{c9a3}', GC_LVT), ('\u{c9a4}', '\u{c9a4}', - GC_LV), ('\u{c9a5}', '\u{c9bf}', GC_LVT), ('\u{c9c0}', '\u{c9c0}', GC_LV), ('\u{c9c1}', - '\u{c9db}', GC_LVT), ('\u{c9dc}', '\u{c9dc}', GC_LV), ('\u{c9dd}', '\u{c9f7}', GC_LVT), - ('\u{c9f8}', '\u{c9f8}', GC_LV), ('\u{c9f9}', '\u{ca13}', GC_LVT), ('\u{ca14}', '\u{ca14}', - GC_LV), ('\u{ca15}', '\u{ca2f}', GC_LVT), ('\u{ca30}', '\u{ca30}', GC_LV), ('\u{ca31}', - '\u{ca4b}', GC_LVT), ('\u{ca4c}', '\u{ca4c}', GC_LV), ('\u{ca4d}', '\u{ca67}', GC_LVT), - ('\u{ca68}', '\u{ca68}', GC_LV), ('\u{ca69}', '\u{ca83}', GC_LVT), ('\u{ca84}', '\u{ca84}', - GC_LV), ('\u{ca85}', '\u{ca9f}', GC_LVT), ('\u{caa0}', '\u{caa0}', GC_LV), ('\u{caa1}', - '\u{cabb}', GC_LVT), ('\u{cabc}', '\u{cabc}', GC_LV), ('\u{cabd}', '\u{cad7}', GC_LVT), - ('\u{cad8}', '\u{cad8}', GC_LV), ('\u{cad9}', '\u{caf3}', GC_LVT), ('\u{caf4}', '\u{caf4}', - GC_LV), ('\u{caf5}', '\u{cb0f}', GC_LVT), ('\u{cb10}', '\u{cb10}', GC_LV), ('\u{cb11}', - '\u{cb2b}', GC_LVT), ('\u{cb2c}', '\u{cb2c}', GC_LV), ('\u{cb2d}', '\u{cb47}', GC_LVT), - ('\u{cb48}', '\u{cb48}', GC_LV), ('\u{cb49}', '\u{cb63}', GC_LVT), ('\u{cb64}', '\u{cb64}', - GC_LV), ('\u{cb65}', '\u{cb7f}', GC_LVT), ('\u{cb80}', '\u{cb80}', GC_LV), ('\u{cb81}', - '\u{cb9b}', GC_LVT), ('\u{cb9c}', '\u{cb9c}', GC_LV), ('\u{cb9d}', '\u{cbb7}', GC_LVT), - ('\u{cbb8}', '\u{cbb8}', GC_LV), ('\u{cbb9}', '\u{cbd3}', GC_LVT), ('\u{cbd4}', '\u{cbd4}', - GC_LV), ('\u{cbd5}', '\u{cbef}', GC_LVT), ('\u{cbf0}', '\u{cbf0}', GC_LV), ('\u{cbf1}', - '\u{cc0b}', GC_LVT), ('\u{cc0c}', '\u{cc0c}', GC_LV), ('\u{cc0d}', '\u{cc27}', GC_LVT), - ('\u{cc28}', '\u{cc28}', GC_LV), ('\u{cc29}', '\u{cc43}', GC_LVT), ('\u{cc44}', '\u{cc44}', - GC_LV), ('\u{cc45}', '\u{cc5f}', GC_LVT), ('\u{cc60}', '\u{cc60}', GC_LV), ('\u{cc61}', - '\u{cc7b}', GC_LVT), ('\u{cc7c}', '\u{cc7c}', GC_LV), ('\u{cc7d}', '\u{cc97}', GC_LVT), - ('\u{cc98}', '\u{cc98}', GC_LV), ('\u{cc99}', '\u{ccb3}', GC_LVT), ('\u{ccb4}', '\u{ccb4}', - GC_LV), ('\u{ccb5}', '\u{cccf}', GC_LVT), ('\u{ccd0}', '\u{ccd0}', GC_LV), ('\u{ccd1}', - '\u{cceb}', GC_LVT), ('\u{ccec}', '\u{ccec}', GC_LV), ('\u{cced}', '\u{cd07}', GC_LVT), - ('\u{cd08}', '\u{cd08}', GC_LV), ('\u{cd09}', '\u{cd23}', GC_LVT), ('\u{cd24}', '\u{cd24}', - GC_LV), ('\u{cd25}', '\u{cd3f}', GC_LVT), ('\u{cd40}', '\u{cd40}', GC_LV), ('\u{cd41}', - '\u{cd5b}', GC_LVT), ('\u{cd5c}', '\u{cd5c}', GC_LV), ('\u{cd5d}', '\u{cd77}', GC_LVT), - ('\u{cd78}', '\u{cd78}', GC_LV), ('\u{cd79}', '\u{cd93}', GC_LVT), ('\u{cd94}', '\u{cd94}', - GC_LV), ('\u{cd95}', '\u{cdaf}', GC_LVT), ('\u{cdb0}', '\u{cdb0}', GC_LV), ('\u{cdb1}', - '\u{cdcb}', GC_LVT), ('\u{cdcc}', '\u{cdcc}', GC_LV), ('\u{cdcd}', '\u{cde7}', GC_LVT), - ('\u{cde8}', '\u{cde8}', GC_LV), ('\u{cde9}', '\u{ce03}', GC_LVT), ('\u{ce04}', '\u{ce04}', - GC_LV), ('\u{ce05}', '\u{ce1f}', GC_LVT), ('\u{ce20}', '\u{ce20}', GC_LV), ('\u{ce21}', - '\u{ce3b}', GC_LVT), ('\u{ce3c}', '\u{ce3c}', GC_LV), ('\u{ce3d}', '\u{ce57}', GC_LVT), - ('\u{ce58}', '\u{ce58}', GC_LV), ('\u{ce59}', '\u{ce73}', GC_LVT), ('\u{ce74}', '\u{ce74}', - GC_LV), ('\u{ce75}', '\u{ce8f}', GC_LVT), ('\u{ce90}', '\u{ce90}', GC_LV), ('\u{ce91}', - '\u{ceab}', GC_LVT), ('\u{ceac}', '\u{ceac}', GC_LV), ('\u{cead}', '\u{cec7}', GC_LVT), - ('\u{cec8}', '\u{cec8}', GC_LV), ('\u{cec9}', '\u{cee3}', GC_LVT), ('\u{cee4}', '\u{cee4}', - GC_LV), ('\u{cee5}', '\u{ceff}', GC_LVT), ('\u{cf00}', '\u{cf00}', GC_LV), ('\u{cf01}', - '\u{cf1b}', GC_LVT), ('\u{cf1c}', '\u{cf1c}', GC_LV), ('\u{cf1d}', '\u{cf37}', GC_LVT), - ('\u{cf38}', '\u{cf38}', GC_LV), ('\u{cf39}', '\u{cf53}', GC_LVT), ('\u{cf54}', '\u{cf54}', - GC_LV), ('\u{cf55}', '\u{cf6f}', GC_LVT), ('\u{cf70}', '\u{cf70}', GC_LV), ('\u{cf71}', - '\u{cf8b}', GC_LVT), ('\u{cf8c}', '\u{cf8c}', GC_LV), ('\u{cf8d}', '\u{cfa7}', GC_LVT), - ('\u{cfa8}', '\u{cfa8}', GC_LV), ('\u{cfa9}', '\u{cfc3}', GC_LVT), ('\u{cfc4}', '\u{cfc4}', - GC_LV), ('\u{cfc5}', '\u{cfdf}', GC_LVT), ('\u{cfe0}', '\u{cfe0}', GC_LV), ('\u{cfe1}', - '\u{cffb}', GC_LVT), ('\u{cffc}', '\u{cffc}', GC_LV), ('\u{cffd}', '\u{d017}', GC_LVT), - ('\u{d018}', '\u{d018}', GC_LV), ('\u{d019}', '\u{d033}', GC_LVT), ('\u{d034}', '\u{d034}', - GC_LV), ('\u{d035}', '\u{d04f}', GC_LVT), ('\u{d050}', '\u{d050}', GC_LV), ('\u{d051}', - '\u{d06b}', GC_LVT), ('\u{d06c}', '\u{d06c}', GC_LV), ('\u{d06d}', '\u{d087}', GC_LVT), - ('\u{d088}', '\u{d088}', GC_LV), ('\u{d089}', '\u{d0a3}', GC_LVT), ('\u{d0a4}', '\u{d0a4}', - GC_LV), ('\u{d0a5}', '\u{d0bf}', GC_LVT), ('\u{d0c0}', '\u{d0c0}', GC_LV), ('\u{d0c1}', - '\u{d0db}', GC_LVT), ('\u{d0dc}', '\u{d0dc}', GC_LV), ('\u{d0dd}', '\u{d0f7}', GC_LVT), - ('\u{d0f8}', '\u{d0f8}', GC_LV), ('\u{d0f9}', '\u{d113}', GC_LVT), ('\u{d114}', '\u{d114}', - GC_LV), ('\u{d115}', '\u{d12f}', GC_LVT), ('\u{d130}', '\u{d130}', GC_LV), ('\u{d131}', - '\u{d14b}', GC_LVT), ('\u{d14c}', '\u{d14c}', GC_LV), ('\u{d14d}', '\u{d167}', GC_LVT), - ('\u{d168}', '\u{d168}', GC_LV), ('\u{d169}', '\u{d183}', GC_LVT), ('\u{d184}', '\u{d184}', - GC_LV), ('\u{d185}', '\u{d19f}', GC_LVT), ('\u{d1a0}', '\u{d1a0}', GC_LV), ('\u{d1a1}', - '\u{d1bb}', GC_LVT), ('\u{d1bc}', '\u{d1bc}', GC_LV), ('\u{d1bd}', '\u{d1d7}', GC_LVT), - ('\u{d1d8}', '\u{d1d8}', GC_LV), ('\u{d1d9}', '\u{d1f3}', GC_LVT), ('\u{d1f4}', '\u{d1f4}', - GC_LV), ('\u{d1f5}', '\u{d20f}', GC_LVT), ('\u{d210}', '\u{d210}', GC_LV), ('\u{d211}', - '\u{d22b}', GC_LVT), ('\u{d22c}', '\u{d22c}', GC_LV), ('\u{d22d}', '\u{d247}', GC_LVT), - ('\u{d248}', '\u{d248}', GC_LV), ('\u{d249}', '\u{d263}', GC_LVT), ('\u{d264}', '\u{d264}', - GC_LV), ('\u{d265}', '\u{d27f}', GC_LVT), ('\u{d280}', '\u{d280}', GC_LV), ('\u{d281}', - '\u{d29b}', GC_LVT), ('\u{d29c}', '\u{d29c}', GC_LV), ('\u{d29d}', '\u{d2b7}', GC_LVT), - ('\u{d2b8}', '\u{d2b8}', GC_LV), ('\u{d2b9}', '\u{d2d3}', GC_LVT), ('\u{d2d4}', '\u{d2d4}', - GC_LV), ('\u{d2d5}', '\u{d2ef}', GC_LVT), ('\u{d2f0}', '\u{d2f0}', GC_LV), ('\u{d2f1}', - '\u{d30b}', GC_LVT), ('\u{d30c}', '\u{d30c}', GC_LV), ('\u{d30d}', '\u{d327}', GC_LVT), - ('\u{d328}', '\u{d328}', GC_LV), ('\u{d329}', '\u{d343}', GC_LVT), ('\u{d344}', '\u{d344}', - GC_LV), ('\u{d345}', '\u{d35f}', GC_LVT), ('\u{d360}', '\u{d360}', GC_LV), ('\u{d361}', - '\u{d37b}', GC_LVT), ('\u{d37c}', '\u{d37c}', GC_LV), ('\u{d37d}', '\u{d397}', GC_LVT), - ('\u{d398}', '\u{d398}', GC_LV), ('\u{d399}', '\u{d3b3}', GC_LVT), ('\u{d3b4}', '\u{d3b4}', - GC_LV), ('\u{d3b5}', '\u{d3cf}', GC_LVT), ('\u{d3d0}', '\u{d3d0}', GC_LV), ('\u{d3d1}', - '\u{d3eb}', GC_LVT), ('\u{d3ec}', '\u{d3ec}', GC_LV), ('\u{d3ed}', '\u{d407}', GC_LVT), - ('\u{d408}', '\u{d408}', GC_LV), ('\u{d409}', '\u{d423}', GC_LVT), ('\u{d424}', '\u{d424}', - GC_LV), ('\u{d425}', '\u{d43f}', GC_LVT), ('\u{d440}', '\u{d440}', GC_LV), ('\u{d441}', - '\u{d45b}', GC_LVT), ('\u{d45c}', '\u{d45c}', GC_LV), ('\u{d45d}', '\u{d477}', GC_LVT), - ('\u{d478}', '\u{d478}', GC_LV), ('\u{d479}', '\u{d493}', GC_LVT), ('\u{d494}', '\u{d494}', - GC_LV), ('\u{d495}', '\u{d4af}', GC_LVT), ('\u{d4b0}', '\u{d4b0}', GC_LV), ('\u{d4b1}', - '\u{d4cb}', GC_LVT), ('\u{d4cc}', '\u{d4cc}', GC_LV), ('\u{d4cd}', '\u{d4e7}', GC_LVT), - ('\u{d4e8}', '\u{d4e8}', GC_LV), ('\u{d4e9}', '\u{d503}', GC_LVT), ('\u{d504}', '\u{d504}', - GC_LV), ('\u{d505}', '\u{d51f}', GC_LVT), ('\u{d520}', '\u{d520}', GC_LV), ('\u{d521}', - '\u{d53b}', GC_LVT), ('\u{d53c}', '\u{d53c}', GC_LV), ('\u{d53d}', '\u{d557}', GC_LVT), - ('\u{d558}', '\u{d558}', GC_LV), ('\u{d559}', '\u{d573}', GC_LVT), ('\u{d574}', '\u{d574}', - GC_LV), ('\u{d575}', '\u{d58f}', GC_LVT), ('\u{d590}', '\u{d590}', GC_LV), ('\u{d591}', - '\u{d5ab}', GC_LVT), ('\u{d5ac}', '\u{d5ac}', GC_LV), ('\u{d5ad}', '\u{d5c7}', GC_LVT), - ('\u{d5c8}', '\u{d5c8}', GC_LV), ('\u{d5c9}', '\u{d5e3}', GC_LVT), ('\u{d5e4}', '\u{d5e4}', - GC_LV), ('\u{d5e5}', '\u{d5ff}', GC_LVT), ('\u{d600}', '\u{d600}', GC_LV), ('\u{d601}', - '\u{d61b}', GC_LVT), ('\u{d61c}', '\u{d61c}', GC_LV), ('\u{d61d}', '\u{d637}', GC_LVT), - ('\u{d638}', '\u{d638}', GC_LV), ('\u{d639}', '\u{d653}', GC_LVT), ('\u{d654}', '\u{d654}', - GC_LV), ('\u{d655}', '\u{d66f}', GC_LVT), ('\u{d670}', '\u{d670}', GC_LV), ('\u{d671}', - '\u{d68b}', GC_LVT), ('\u{d68c}', '\u{d68c}', GC_LV), ('\u{d68d}', '\u{d6a7}', GC_LVT), - ('\u{d6a8}', '\u{d6a8}', GC_LV), ('\u{d6a9}', '\u{d6c3}', GC_LVT), ('\u{d6c4}', '\u{d6c4}', - GC_LV), ('\u{d6c5}', '\u{d6df}', GC_LVT), ('\u{d6e0}', '\u{d6e0}', GC_LV), ('\u{d6e1}', - '\u{d6fb}', GC_LVT), ('\u{d6fc}', '\u{d6fc}', GC_LV), ('\u{d6fd}', '\u{d717}', GC_LVT), - ('\u{d718}', '\u{d718}', GC_LV), ('\u{d719}', '\u{d733}', GC_LVT), ('\u{d734}', '\u{d734}', - GC_LV), ('\u{d735}', '\u{d74f}', GC_LVT), ('\u{d750}', '\u{d750}', GC_LV), ('\u{d751}', - '\u{d76b}', GC_LVT), ('\u{d76c}', '\u{d76c}', GC_LV), ('\u{d76d}', '\u{d787}', GC_LVT), - ('\u{d788}', '\u{d788}', GC_LV), ('\u{d789}', '\u{d7a3}', GC_LVT), ('\u{d7b0}', '\u{d7c6}', - GC_V), ('\u{d7cb}', '\u{d7fb}', GC_T), ('\u{fb1e}', '\u{fb1e}', GC_Extend), ('\u{fe00}', - '\u{fe0f}', GC_Extend), ('\u{fe20}', '\u{fe2f}', GC_Extend), ('\u{feff}', '\u{feff}', - GC_Control), ('\u{ff9e}', '\u{ff9f}', GC_Extend), ('\u{fff0}', '\u{fffb}', GC_Control), - ('\u{101fd}', '\u{101fd}', GC_Extend), ('\u{102e0}', '\u{102e0}', GC_Extend), ('\u{10376}', - '\u{1037a}', GC_Extend), ('\u{10a00}', '\u{10a00}', GC_InCB_Consonant), ('\u{10a01}', - '\u{10a03}', GC_Extend), ('\u{10a05}', '\u{10a06}', GC_Extend), ('\u{10a0c}', '\u{10a0f}', - GC_Extend), ('\u{10a10}', '\u{10a13}', GC_InCB_Consonant), ('\u{10a15}', '\u{10a17}', - GC_InCB_Consonant), ('\u{10a19}', '\u{10a35}', GC_InCB_Consonant), ('\u{10a38}', - '\u{10a3a}', GC_Extend), ('\u{10a3f}', '\u{10a3f}', GC_Extend), ('\u{10ae5}', '\u{10ae6}', - GC_Extend), ('\u{10d24}', '\u{10d27}', GC_Extend), ('\u{10d69}', '\u{10d6d}', GC_Extend), - ('\u{10eab}', '\u{10eac}', GC_Extend), ('\u{10efa}', '\u{10eff}', GC_Extend), ('\u{10f46}', - '\u{10f50}', GC_Extend), ('\u{10f82}', '\u{10f85}', GC_Extend), ('\u{11000}', '\u{11000}', - GC_SpacingMark), ('\u{11001}', '\u{11001}', GC_Extend), ('\u{11002}', '\u{11002}', - GC_SpacingMark), ('\u{11038}', '\u{11046}', GC_Extend), ('\u{11070}', '\u{11070}', - GC_Extend), ('\u{11073}', '\u{11074}', GC_Extend), ('\u{1107f}', '\u{11081}', GC_Extend), - ('\u{11082}', '\u{11082}', GC_SpacingMark), ('\u{110b0}', '\u{110b2}', GC_SpacingMark), - ('\u{110b3}', '\u{110b6}', GC_Extend), ('\u{110b7}', '\u{110b8}', GC_SpacingMark), - ('\u{110b9}', '\u{110ba}', GC_Extend), ('\u{110bd}', '\u{110bd}', GC_Prepend), ('\u{110c2}', - '\u{110c2}', GC_Extend), ('\u{110cd}', '\u{110cd}', GC_Prepend), ('\u{11100}', '\u{11102}', - GC_Extend), ('\u{11103}', '\u{11126}', GC_InCB_Consonant), ('\u{11127}', '\u{1112b}', - GC_Extend), ('\u{1112c}', '\u{1112c}', GC_SpacingMark), ('\u{1112d}', '\u{11134}', - GC_Extend), ('\u{11144}', '\u{11144}', GC_InCB_Consonant), ('\u{11145}', '\u{11146}', - GC_SpacingMark), ('\u{11147}', '\u{11147}', GC_InCB_Consonant), ('\u{11173}', '\u{11173}', - GC_Extend), ('\u{11180}', '\u{11181}', GC_Extend), ('\u{11182}', '\u{11182}', - GC_SpacingMark), ('\u{111b3}', '\u{111b5}', GC_SpacingMark), ('\u{111b6}', '\u{111be}', - GC_Extend), ('\u{111bf}', '\u{111bf}', GC_SpacingMark), ('\u{111c0}', '\u{111c0}', - GC_Extend), ('\u{111c2}', '\u{111c3}', GC_Prepend), ('\u{111c9}', '\u{111cc}', GC_Extend), - ('\u{111ce}', '\u{111ce}', GC_SpacingMark), ('\u{111cf}', '\u{111cf}', GC_Extend), - ('\u{1122c}', '\u{1122e}', GC_SpacingMark), ('\u{1122f}', '\u{11231}', GC_Extend), - ('\u{11232}', '\u{11233}', GC_SpacingMark), ('\u{11234}', '\u{11237}', GC_Extend), - ('\u{1123e}', '\u{1123e}', GC_Extend), ('\u{11241}', '\u{11241}', GC_Extend), ('\u{112df}', - '\u{112df}', GC_Extend), ('\u{112e0}', '\u{112e2}', GC_SpacingMark), ('\u{112e3}', - '\u{112ea}', GC_Extend), ('\u{11300}', '\u{11301}', GC_Extend), ('\u{11302}', '\u{11303}', - GC_SpacingMark), ('\u{1133b}', '\u{1133c}', GC_Extend), ('\u{1133e}', '\u{1133e}', - GC_Extend), ('\u{1133f}', '\u{1133f}', GC_SpacingMark), ('\u{11340}', '\u{11340}', - GC_Extend), ('\u{11341}', '\u{11344}', GC_SpacingMark), ('\u{11347}', '\u{11348}', - GC_SpacingMark), ('\u{1134b}', '\u{1134c}', GC_SpacingMark), ('\u{1134d}', '\u{1134d}', - GC_Extend), ('\u{11357}', '\u{11357}', GC_Extend), ('\u{11362}', '\u{11363}', - GC_SpacingMark), ('\u{11366}', '\u{1136c}', GC_Extend), ('\u{11370}', '\u{11374}', - GC_Extend), ('\u{11380}', '\u{11389}', GC_InCB_Consonant), ('\u{1138b}', '\u{1138b}', - GC_InCB_Consonant), ('\u{1138e}', '\u{1138e}', GC_InCB_Consonant), ('\u{11390}', - '\u{113b5}', GC_InCB_Consonant), ('\u{113b8}', '\u{113b8}', GC_Extend), ('\u{113b9}', - '\u{113ba}', GC_SpacingMark), ('\u{113bb}', '\u{113c0}', GC_Extend), ('\u{113c2}', - '\u{113c2}', GC_Extend), ('\u{113c5}', '\u{113c5}', GC_Extend), ('\u{113c7}', '\u{113c9}', - GC_Extend), ('\u{113ca}', '\u{113ca}', GC_SpacingMark), ('\u{113cc}', '\u{113cd}', - GC_SpacingMark), ('\u{113ce}', '\u{113d0}', GC_Extend), ('\u{113d1}', '\u{113d1}', - GC_Prepend), ('\u{113d2}', '\u{113d2}', GC_Extend), ('\u{113e1}', '\u{113e2}', GC_Extend), - ('\u{11435}', '\u{11437}', GC_SpacingMark), ('\u{11438}', '\u{1143f}', GC_Extend), - ('\u{11440}', '\u{11441}', GC_SpacingMark), ('\u{11442}', '\u{11444}', GC_Extend), - ('\u{11445}', '\u{11445}', GC_SpacingMark), ('\u{11446}', '\u{11446}', GC_Extend), - ('\u{1145e}', '\u{1145e}', GC_Extend), ('\u{114b0}', '\u{114b0}', GC_Extend), ('\u{114b1}', - '\u{114b2}', GC_SpacingMark), ('\u{114b3}', '\u{114b8}', GC_Extend), ('\u{114b9}', - '\u{114b9}', GC_SpacingMark), ('\u{114ba}', '\u{114ba}', GC_Extend), ('\u{114bb}', - '\u{114bc}', GC_SpacingMark), ('\u{114bd}', '\u{114bd}', GC_Extend), ('\u{114be}', - '\u{114be}', GC_SpacingMark), ('\u{114bf}', '\u{114c0}', GC_Extend), ('\u{114c1}', - '\u{114c1}', GC_SpacingMark), ('\u{114c2}', '\u{114c3}', GC_Extend), ('\u{115af}', - '\u{115af}', GC_Extend), ('\u{115b0}', '\u{115b1}', GC_SpacingMark), ('\u{115b2}', - '\u{115b5}', GC_Extend), ('\u{115b8}', '\u{115bb}', GC_SpacingMark), ('\u{115bc}', - '\u{115bd}', GC_Extend), ('\u{115be}', '\u{115be}', GC_SpacingMark), ('\u{115bf}', - '\u{115c0}', GC_Extend), ('\u{115dc}', '\u{115dd}', GC_Extend), ('\u{11630}', '\u{11632}', - GC_SpacingMark), ('\u{11633}', '\u{1163a}', GC_Extend), ('\u{1163b}', '\u{1163c}', - GC_SpacingMark), ('\u{1163d}', '\u{1163d}', GC_Extend), ('\u{1163e}', '\u{1163e}', - GC_SpacingMark), ('\u{1163f}', '\u{11640}', GC_Extend), ('\u{116ab}', '\u{116ab}', - GC_Extend), ('\u{116ac}', '\u{116ac}', GC_SpacingMark), ('\u{116ad}', '\u{116ad}', - GC_Extend), ('\u{116ae}', '\u{116af}', GC_SpacingMark), ('\u{116b0}', '\u{116b7}', - GC_Extend), ('\u{1171d}', '\u{1171d}', GC_Extend), ('\u{1171e}', '\u{1171e}', - GC_SpacingMark), ('\u{1171f}', '\u{1171f}', GC_Extend), ('\u{11722}', '\u{11725}', - GC_Extend), ('\u{11726}', '\u{11726}', GC_SpacingMark), ('\u{11727}', '\u{1172b}', - GC_Extend), ('\u{1182c}', '\u{1182e}', GC_SpacingMark), ('\u{1182f}', '\u{11837}', - GC_Extend), ('\u{11838}', '\u{11838}', GC_SpacingMark), ('\u{11839}', '\u{1183a}', - GC_Extend), ('\u{11900}', '\u{11906}', GC_InCB_Consonant), ('\u{11909}', '\u{11909}', - GC_InCB_Consonant), ('\u{1190c}', '\u{11913}', GC_InCB_Consonant), ('\u{11915}', - '\u{11916}', GC_InCB_Consonant), ('\u{11918}', '\u{1192f}', GC_InCB_Consonant), - ('\u{11930}', '\u{11930}', GC_Extend), ('\u{11931}', '\u{11935}', GC_SpacingMark), - ('\u{11937}', '\u{11938}', GC_SpacingMark), ('\u{1193b}', '\u{1193e}', GC_Extend), - ('\u{1193f}', '\u{1193f}', GC_Prepend), ('\u{11940}', '\u{11940}', GC_SpacingMark), - ('\u{11941}', '\u{11941}', GC_Prepend), ('\u{11942}', '\u{11942}', GC_SpacingMark), - ('\u{11943}', '\u{11943}', GC_Extend), ('\u{119d1}', '\u{119d3}', GC_SpacingMark), - ('\u{119d4}', '\u{119d7}', GC_Extend), ('\u{119da}', '\u{119db}', GC_Extend), ('\u{119dc}', - '\u{119df}', GC_SpacingMark), ('\u{119e0}', '\u{119e0}', GC_Extend), ('\u{119e4}', - '\u{119e4}', GC_SpacingMark), ('\u{11a00}', '\u{11a00}', GC_InCB_Consonant), ('\u{11a01}', - '\u{11a0a}', GC_Extend), ('\u{11a0b}', '\u{11a32}', GC_InCB_Consonant), ('\u{11a33}', - '\u{11a38}', GC_Extend), ('\u{11a39}', '\u{11a39}', GC_SpacingMark), ('\u{11a3b}', - '\u{11a3e}', GC_Extend), ('\u{11a47}', '\u{11a47}', GC_Extend), ('\u{11a50}', '\u{11a50}', - GC_InCB_Consonant), ('\u{11a51}', '\u{11a56}', GC_Extend), ('\u{11a57}', '\u{11a58}', - GC_SpacingMark), ('\u{11a59}', '\u{11a5b}', GC_Extend), ('\u{11a5c}', '\u{11a83}', - GC_InCB_Consonant), ('\u{11a84}', '\u{11a89}', GC_Prepend), ('\u{11a8a}', '\u{11a96}', - GC_Extend), ('\u{11a97}', '\u{11a97}', GC_SpacingMark), ('\u{11a98}', '\u{11a99}', - GC_Extend), ('\u{11b60}', '\u{11b60}', GC_Extend), ('\u{11b61}', '\u{11b61}', - GC_SpacingMark), ('\u{11b62}', '\u{11b64}', GC_Extend), ('\u{11b65}', '\u{11b65}', - GC_SpacingMark), ('\u{11b66}', '\u{11b66}', GC_Extend), ('\u{11b67}', '\u{11b67}', - GC_SpacingMark), ('\u{11c2f}', '\u{11c2f}', GC_SpacingMark), ('\u{11c30}', '\u{11c36}', - GC_Extend), ('\u{11c38}', '\u{11c3d}', GC_Extend), ('\u{11c3e}', '\u{11c3e}', - GC_SpacingMark), ('\u{11c3f}', '\u{11c3f}', GC_Extend), ('\u{11c92}', '\u{11ca7}', - GC_Extend), ('\u{11ca9}', '\u{11ca9}', GC_SpacingMark), ('\u{11caa}', '\u{11cb0}', - GC_Extend), ('\u{11cb1}', '\u{11cb1}', GC_SpacingMark), ('\u{11cb2}', '\u{11cb3}', - GC_Extend), ('\u{11cb4}', '\u{11cb4}', GC_SpacingMark), ('\u{11cb5}', '\u{11cb6}', - GC_Extend), ('\u{11d31}', '\u{11d36}', GC_Extend), ('\u{11d3a}', '\u{11d3a}', GC_Extend), - ('\u{11d3c}', '\u{11d3d}', GC_Extend), ('\u{11d3f}', '\u{11d45}', GC_Extend), ('\u{11d46}', - '\u{11d46}', GC_Prepend), ('\u{11d47}', '\u{11d47}', GC_Extend), ('\u{11d8a}', '\u{11d8e}', - GC_SpacingMark), ('\u{11d90}', '\u{11d91}', GC_Extend), ('\u{11d93}', '\u{11d94}', - GC_SpacingMark), ('\u{11d95}', '\u{11d95}', GC_Extend), ('\u{11d96}', '\u{11d96}', - GC_SpacingMark), ('\u{11d97}', '\u{11d97}', GC_Extend), ('\u{11ef3}', '\u{11ef4}', - GC_Extend), ('\u{11ef5}', '\u{11ef6}', GC_SpacingMark), ('\u{11f00}', '\u{11f01}', - GC_Extend), ('\u{11f02}', '\u{11f02}', GC_Prepend), ('\u{11f03}', '\u{11f03}', - GC_SpacingMark), ('\u{11f04}', '\u{11f10}', GC_InCB_Consonant), ('\u{11f12}', '\u{11f33}', - GC_InCB_Consonant), ('\u{11f34}', '\u{11f35}', GC_SpacingMark), ('\u{11f36}', '\u{11f3a}', - GC_Extend), ('\u{11f3e}', '\u{11f3f}', GC_SpacingMark), ('\u{11f40}', '\u{11f42}', - GC_Extend), ('\u{11f5a}', '\u{11f5a}', GC_Extend), ('\u{13430}', '\u{1343f}', GC_Control), - ('\u{13440}', '\u{13440}', GC_Extend), ('\u{13447}', '\u{13455}', GC_Extend), ('\u{1611e}', - '\u{16129}', GC_Extend), ('\u{1612a}', '\u{1612c}', GC_SpacingMark), ('\u{1612d}', - '\u{1612f}', GC_Extend), ('\u{16af0}', '\u{16af4}', GC_Extend), ('\u{16b30}', '\u{16b36}', - GC_Extend), ('\u{16d63}', '\u{16d63}', GC_V), ('\u{16d67}', '\u{16d6a}', GC_V), - ('\u{16f4f}', '\u{16f4f}', GC_Extend), ('\u{16f51}', '\u{16f87}', GC_SpacingMark), - ('\u{16f8f}', '\u{16f92}', GC_Extend), ('\u{16fe4}', '\u{16fe4}', GC_Extend), ('\u{16ff0}', - '\u{16ff1}', GC_Extend), ('\u{1bc9d}', '\u{1bc9e}', GC_Extend), ('\u{1bca0}', '\u{1bca3}', - GC_Control), ('\u{1cf00}', '\u{1cf2d}', GC_Extend), ('\u{1cf30}', '\u{1cf46}', GC_Extend), - ('\u{1d165}', '\u{1d169}', GC_Extend), ('\u{1d16d}', '\u{1d172}', GC_Extend), ('\u{1d173}', - '\u{1d17a}', GC_Control), ('\u{1d17b}', '\u{1d182}', GC_Extend), ('\u{1d185}', '\u{1d18b}', - GC_Extend), ('\u{1d1aa}', '\u{1d1ad}', GC_Extend), ('\u{1d242}', '\u{1d244}', GC_Extend), - ('\u{1da00}', '\u{1da36}', GC_Extend), ('\u{1da3b}', '\u{1da6c}', GC_Extend), ('\u{1da75}', - '\u{1da75}', GC_Extend), ('\u{1da84}', '\u{1da84}', GC_Extend), ('\u{1da9b}', '\u{1da9f}', - GC_Extend), ('\u{1daa1}', '\u{1daaf}', GC_Extend), ('\u{1e000}', '\u{1e006}', GC_Extend), - ('\u{1e008}', '\u{1e018}', GC_Extend), ('\u{1e01b}', '\u{1e021}', GC_Extend), ('\u{1e023}', - '\u{1e024}', GC_Extend), ('\u{1e026}', '\u{1e02a}', GC_Extend), ('\u{1e08f}', '\u{1e08f}', - GC_Extend), ('\u{1e130}', '\u{1e136}', GC_Extend), ('\u{1e2ae}', '\u{1e2ae}', GC_Extend), - ('\u{1e2ec}', '\u{1e2ef}', GC_Extend), ('\u{1e4ec}', '\u{1e4ef}', GC_Extend), ('\u{1e5ee}', - '\u{1e5ef}', GC_Extend), ('\u{1e6e3}', '\u{1e6e3}', GC_Extend), ('\u{1e6e6}', '\u{1e6e6}', - GC_Extend), ('\u{1e6ee}', '\u{1e6ef}', GC_Extend), ('\u{1e6f5}', '\u{1e6f5}', GC_Extend), - ('\u{1e8d0}', '\u{1e8d6}', GC_Extend), ('\u{1e944}', '\u{1e94a}', GC_Extend), ('\u{1f004}', - '\u{1f004}', GC_Extended_Pictographic), ('\u{1f02c}', '\u{1f02f}', - GC_Extended_Pictographic), ('\u{1f094}', '\u{1f09f}', GC_Extended_Pictographic), - ('\u{1f0af}', '\u{1f0b0}', GC_Extended_Pictographic), ('\u{1f0c0}', '\u{1f0c0}', - GC_Extended_Pictographic), ('\u{1f0cf}', '\u{1f0d0}', GC_Extended_Pictographic), - ('\u{1f0f6}', '\u{1f0ff}', GC_Extended_Pictographic), ('\u{1f170}', '\u{1f171}', - GC_Extended_Pictographic), ('\u{1f17e}', '\u{1f17f}', GC_Extended_Pictographic), - ('\u{1f18e}', '\u{1f18e}', GC_Extended_Pictographic), ('\u{1f191}', '\u{1f19a}', - GC_Extended_Pictographic), ('\u{1f1ae}', '\u{1f1e5}', GC_Extended_Pictographic), - ('\u{1f1e6}', '\u{1f1ff}', GC_Regional_Indicator), ('\u{1f201}', '\u{1f20f}', - GC_Extended_Pictographic), ('\u{1f21a}', '\u{1f21a}', GC_Extended_Pictographic), - ('\u{1f22f}', '\u{1f22f}', GC_Extended_Pictographic), ('\u{1f232}', '\u{1f23a}', - GC_Extended_Pictographic), ('\u{1f23c}', '\u{1f23f}', GC_Extended_Pictographic), - ('\u{1f249}', '\u{1f25f}', GC_Extended_Pictographic), ('\u{1f266}', '\u{1f321}', - GC_Extended_Pictographic), ('\u{1f324}', '\u{1f393}', GC_Extended_Pictographic), - ('\u{1f396}', '\u{1f397}', GC_Extended_Pictographic), ('\u{1f399}', '\u{1f39b}', - GC_Extended_Pictographic), ('\u{1f39e}', '\u{1f3f0}', GC_Extended_Pictographic), - ('\u{1f3f3}', '\u{1f3f5}', GC_Extended_Pictographic), ('\u{1f3f7}', '\u{1f3fa}', - GC_Extended_Pictographic), ('\u{1f3fb}', '\u{1f3ff}', GC_Extend), ('\u{1f400}', '\u{1f4fd}', - GC_Extended_Pictographic), ('\u{1f4ff}', '\u{1f53d}', GC_Extended_Pictographic), - ('\u{1f549}', '\u{1f54e}', GC_Extended_Pictographic), ('\u{1f550}', '\u{1f567}', - GC_Extended_Pictographic), ('\u{1f56f}', '\u{1f570}', GC_Extended_Pictographic), - ('\u{1f573}', '\u{1f57a}', GC_Extended_Pictographic), ('\u{1f587}', '\u{1f587}', - GC_Extended_Pictographic), ('\u{1f58a}', '\u{1f58d}', GC_Extended_Pictographic), - ('\u{1f590}', '\u{1f590}', GC_Extended_Pictographic), ('\u{1f595}', '\u{1f596}', - GC_Extended_Pictographic), ('\u{1f5a4}', '\u{1f5a5}', GC_Extended_Pictographic), - ('\u{1f5a8}', '\u{1f5a8}', GC_Extended_Pictographic), ('\u{1f5b1}', '\u{1f5b2}', - GC_Extended_Pictographic), ('\u{1f5bc}', '\u{1f5bc}', GC_Extended_Pictographic), - ('\u{1f5c2}', '\u{1f5c4}', GC_Extended_Pictographic), ('\u{1f5d1}', '\u{1f5d3}', - GC_Extended_Pictographic), ('\u{1f5dc}', '\u{1f5de}', GC_Extended_Pictographic), - ('\u{1f5e1}', '\u{1f5e1}', GC_Extended_Pictographic), ('\u{1f5e3}', '\u{1f5e3}', - GC_Extended_Pictographic), ('\u{1f5e8}', '\u{1f5e8}', GC_Extended_Pictographic), - ('\u{1f5ef}', '\u{1f5ef}', GC_Extended_Pictographic), ('\u{1f5f3}', '\u{1f5f3}', - GC_Extended_Pictographic), ('\u{1f5fa}', '\u{1f64f}', GC_Extended_Pictographic), - ('\u{1f680}', '\u{1f6c5}', GC_Extended_Pictographic), ('\u{1f6cb}', '\u{1f6d2}', - GC_Extended_Pictographic), ('\u{1f6d5}', '\u{1f6e5}', GC_Extended_Pictographic), - ('\u{1f6e9}', '\u{1f6e9}', GC_Extended_Pictographic), ('\u{1f6eb}', '\u{1f6f0}', - GC_Extended_Pictographic), ('\u{1f6f3}', '\u{1f6ff}', GC_Extended_Pictographic), - ('\u{1f7da}', '\u{1f7ff}', GC_Extended_Pictographic), ('\u{1f80c}', '\u{1f80f}', - GC_Extended_Pictographic), ('\u{1f848}', '\u{1f84f}', GC_Extended_Pictographic), - ('\u{1f85a}', '\u{1f85f}', GC_Extended_Pictographic), ('\u{1f888}', '\u{1f88f}', - GC_Extended_Pictographic), ('\u{1f8ae}', '\u{1f8af}', GC_Extended_Pictographic), - ('\u{1f8bc}', '\u{1f8bf}', GC_Extended_Pictographic), ('\u{1f8c2}', '\u{1f8cf}', - GC_Extended_Pictographic), ('\u{1f8d9}', '\u{1f8ff}', GC_Extended_Pictographic), - ('\u{1f90c}', '\u{1f93a}', GC_Extended_Pictographic), ('\u{1f93c}', '\u{1f945}', - GC_Extended_Pictographic), ('\u{1f947}', '\u{1f9ff}', GC_Extended_Pictographic), - ('\u{1fa58}', '\u{1fa5f}', GC_Extended_Pictographic), ('\u{1fa6e}', '\u{1faff}', - GC_Extended_Pictographic), ('\u{1fc00}', '\u{1fffd}', GC_Extended_Pictographic), - ('\u{e0000}', '\u{e001f}', GC_Control), ('\u{e0020}', '\u{e007f}', GC_Extend), ('\u{e0080}', - '\u{e00ff}', GC_Control), ('\u{e0100}', '\u{e01ef}', GC_Extend), ('\u{e01f0}', '\u{e0fff}', - GC_Control) + const grapheme_cat_t1: &[u8; 720] = b"\x00\x00\x00\x00\x00\x00\x00\x30\x33\x03\x33\x33\x33\x33\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x30\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x3c\xc3\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\xcc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcc\xcc\xcc\xcc\xcc\xcc\xcc\xcc\x33\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x33\x33\x33\x33\x33\x33\x33\x33\x33\x00\x00\x00\x00\x00\x00\x30\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x33\x33\x33\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x33\x33\x33\x33\x33\x3c\x00\x00\x00\x00\x00\x00\ + \x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\x66\x06\x00\x33\xc3\x00\x00\x50\x55\x00\x50\ + \x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x35\xcc\x33\x33\xcc\x33\xcc\ + \x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x55\x35\x50\x55\x55\x55\x55\ + \x00\x00\x00\x00\x00\x55\x55\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x30\x33\x33\xc3\x3c\xc3\x3c\x03\x00\x00\x00\x00\x00\x30\x00\x00\x00\x00\xc3\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x55\x55\x55\x55\x55\x55\x55\x55\x50\x55\x00\x00\x00\x05\x03\x55\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x03\x33\x03\x30\x03\x00\x00\x33\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x55\x55\x55\x55\x55\xc5\x33\xcc\x00\x00\xc0\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x55\x55\x55\x55\x55\x55\x55\ + \x55\x55\x55\x55\x55\x05\x00\x00\x00\xc0\x3c\xcc\xc3\x0c\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00"; + + const grapheme_cat_t2: &[u8; 1408] = b"\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x44\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x44\x44\x44\x44\x44\x44\x00\x00\x00\x00\x00\x00\x00\x40\x04\x00\x00\x00\x00\x00\x00\x00\ + \x04\x00\x00\x00\x00\x00\x00\x40\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x44\x44\x44\x44\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x44\ + \x00\x00\x00\x00\x00\x00\x00\x04\x40\x44\x44\x44\x44\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\ + \x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\ + \x44\x44\x44\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\xbb\x40\x44\x44\x44\x44\x44\x44\x44\ + \x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x44\x44\x44\x44\x04\x44\x44\ + \x00\x00\x00\x00\x40\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x00\x00\x00\x44\x44\x44\x44\x44\ + \x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\ + \x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\ + \x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\ + \x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x00\x44\x44\x44\x44\x44\x44\ + \x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\ + \x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\ + \x44\x44\x00\x44\x40\x44\x00\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\ + \x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\ + \x04\x40\x44\x40\x44\x34\x33\x33\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\ + \x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\ + \x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\ + \x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\ + \x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\ + \x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x40\x44\x44\x44\x44\x44\x44\x44\x44\ + \x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x00\ + \x00\x00\x00\x00\x40\x44\x44\x04\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x00\x00\x00\x40\ + \x04\x40\x44\x44\x44\x04\x00\x00\x00\x00\x00\x40\x00\x44\x44\x00\x04\x00\x40\x04\x00\x00\x00\x00\ + \x00\x00\x44\x00\x04\x00\x00\x00\x40\x04\x00\x00\x00\x00\x04\x00\x00\x44\x04\x00\x00\x00\x00\x00\ + \x40\x44\x00\x00\x00\x00\x44\x04\x40\x40\x00\x00\x04\x00\x00\x40\x00\x40\x00\x00\x00\x44\x44\x44\ + \x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\ + \x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x44\x44\x44\x44\x44\x44\x44\ + \x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\ + \x44\x44\x44\x00\x00\x40\x44\x44\x44\x04\x40\x44\x44\x44\x44\x44\x44\x44\x44\x00\x40\x40\x44\x44\ + \x04\x40\x44\x44\x44\x44\x44\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x44\x44\ + \x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x00\x00\x00\x00\x00\x00\x44\x44\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x44\x44\x44\x44\x00\x00\x00\x00\x00\x44\x44\x44\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x44\x44\x44\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x44\x00\x00\x00\x00\x00\x00\x44\x44\x00\x44\x44\x44\x44\x44\x44\x44\ + \x00\x00\x00\x00\x40\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\ + \x00\x00\x00\x00\x00\x00\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\ + \x44\x44\x44\x44\x44\x04\x44\x44\x44\x44\x44\x40\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\ + \x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\ + \x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\ + \x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\ + \x44\x44\x44\x44\x44\x44\x44\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ + \x00\x00\x00\x00\x44\x44\x44\x44\x00\x00\x00\x00\x00\x00\x00\x44\x44\x44\x44\x44\x44\x44\x44\x44\ + \x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\ + \x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\ + \x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44\x44"; + + /// Ranges outside the direct windows, as `(start, end << 5 | category)`. + const grapheme_cat_residual: &[(u32, u32)] = &[ + (0xd7b0, 0x1af8ce), (0xd7cb, 0x1aff6d), (0xfb1e, 0x1f63c3), (0xfe20, 0x1fc5e3), (0xfeff, + 0x1fdfe2), (0xff9e, 0x1ff3e3), (0xfff0, 0x1fff62), (0x101fd, 0x203fa3), (0x102e0, 0x205c03), + (0x10376, 0x206f43), (0x10a00, 0x214005), (0x10a01, 0x214063), (0x10a05, 0x2140c3), + (0x10a0c, 0x2141e3), (0x10a10, 0x214265), (0x10a15, 0x2142e5), (0x10a19, 0x2146a5), + (0x10a38, 0x214743), (0x10a3f, 0x2147e3), (0x10ae5, 0x215cc3), (0x10d24, 0x21a4e3), + (0x10d69, 0x21ada3), (0x10eab, 0x21d583), (0x10efa, 0x21dfe3), (0x10f46, 0x21ea03), + (0x10f82, 0x21f0a3), (0x11000, 0x22000c), (0x11001, 0x220023), (0x11002, 0x22004c), + (0x11038, 0x2208c3), (0x11070, 0x220e03), (0x11073, 0x220e83), (0x1107f, 0x221023), + (0x11082, 0x22104c), (0x110b0, 0x22164c), (0x110b3, 0x2216c3), (0x110b7, 0x22170c), + (0x110b9, 0x221743), (0x110bd, 0x2217aa), (0x110c2, 0x221843), (0x110cd, 0x2219aa), + (0x11100, 0x222043), (0x11103, 0x2224c5), (0x11127, 0x222563), (0x1112c, 0x22258c), + (0x1112d, 0x222683), (0x11144, 0x222885), (0x11145, 0x2228cc), (0x11147, 0x2228e5), + (0x11173, 0x222e63), (0x11180, 0x223023), (0x11182, 0x22304c), (0x111b3, 0x2236ac), + (0x111b6, 0x2237c3), (0x111bf, 0x2237ec), (0x111c0, 0x223803), (0x111c2, 0x22386a), + (0x111c9, 0x223983), (0x111ce, 0x2239cc), (0x111cf, 0x2239e3), (0x1122c, 0x2245cc), + (0x1122f, 0x224623), (0x11232, 0x22466c), (0x11234, 0x2246e3), (0x1123e, 0x2247c3), + (0x11241, 0x224823), (0x112df, 0x225be3), (0x112e0, 0x225c4c), (0x112e3, 0x225d43), + (0x11300, 0x226023), (0x11302, 0x22606c), (0x1133b, 0x226783), (0x1133e, 0x2267c3), + (0x1133f, 0x2267ec), (0x11340, 0x226803), (0x11341, 0x22688c), (0x11347, 0x22690c), + (0x1134b, 0x22698c), (0x1134d, 0x2269a3), (0x11357, 0x226ae3), (0x11362, 0x226c6c), + (0x11366, 0x226d83), (0x11370, 0x226e83), (0x11380, 0x227125), (0x1138b, 0x227165), + (0x1138e, 0x2271c5), (0x11390, 0x2276a5), (0x113b8, 0x227703), (0x113b9, 0x22774c), + (0x113bb, 0x227803), (0x113c2, 0x227843), (0x113c5, 0x2278a3), (0x113c7, 0x227923), + (0x113ca, 0x22794c), (0x113cc, 0x2279ac), (0x113ce, 0x227a03), (0x113d1, 0x227a2a), + (0x113d2, 0x227a43), (0x113e1, 0x227c43), (0x11435, 0x2286ec), (0x11438, 0x2287e3), + (0x11440, 0x22882c), (0x11442, 0x228883), (0x11445, 0x2288ac), (0x11446, 0x2288c3), + (0x1145e, 0x228bc3), (0x114b0, 0x229603), (0x114b1, 0x22964c), (0x114b3, 0x229703), + (0x114b9, 0x22972c), (0x114ba, 0x229743), (0x114bb, 0x22978c), (0x114bd, 0x2297a3), + (0x114be, 0x2297cc), (0x114bf, 0x229803), (0x114c1, 0x22982c), (0x114c2, 0x229863), + (0x115af, 0x22b5e3), (0x115b0, 0x22b62c), (0x115b2, 0x22b6a3), (0x115b8, 0x22b76c), + (0x115bc, 0x22b7a3), (0x115be, 0x22b7cc), (0x115bf, 0x22b803), (0x115dc, 0x22bba3), + (0x11630, 0x22c64c), (0x11633, 0x22c743), (0x1163b, 0x22c78c), (0x1163d, 0x22c7a3), + (0x1163e, 0x22c7cc), (0x1163f, 0x22c803), (0x116ab, 0x22d563), (0x116ac, 0x22d58c), + (0x116ad, 0x22d5a3), (0x116ae, 0x22d5ec), (0x116b0, 0x22d6e3), (0x1171d, 0x22e3a3), + (0x1171e, 0x22e3cc), (0x1171f, 0x22e3e3), (0x11722, 0x22e4a3), (0x11726, 0x22e4cc), + (0x11727, 0x22e563), (0x1182c, 0x2305cc), (0x1182f, 0x2306e3), (0x11838, 0x23070c), + (0x11839, 0x230743), (0x11900, 0x2320c5), (0x11909, 0x232125), (0x1190c, 0x232265), + (0x11915, 0x2322c5), (0x11918, 0x2325e5), (0x11930, 0x232603), (0x11931, 0x2326ac), + (0x11937, 0x23270c), (0x1193b, 0x2327c3), (0x1193f, 0x2327ea), (0x11940, 0x23280c), + (0x11941, 0x23282a), (0x11942, 0x23284c), (0x11943, 0x232863), (0x119d1, 0x233a6c), + (0x119d4, 0x233ae3), (0x119da, 0x233b63), (0x119dc, 0x233bec), (0x119e0, 0x233c03), + (0x119e4, 0x233c8c), (0x11a00, 0x234005), (0x11a01, 0x234143), (0x11a0b, 0x234645), + (0x11a33, 0x234703), (0x11a39, 0x23472c), (0x11a3b, 0x2347c3), (0x11a47, 0x2348e3), + (0x11a50, 0x234a05), (0x11a51, 0x234ac3), (0x11a57, 0x234b0c), (0x11a59, 0x234b63), + (0x11a5c, 0x235065), (0x11a84, 0x23512a), (0x11a8a, 0x2352c3), (0x11a97, 0x2352ec), + (0x11a98, 0x235323), (0x11b60, 0x236c03), (0x11b61, 0x236c2c), (0x11b62, 0x236c83), + (0x11b65, 0x236cac), (0x11b66, 0x236cc3), (0x11b67, 0x236cec), (0x11c2f, 0x2385ec), + (0x11c30, 0x2386c3), (0x11c38, 0x2387a3), (0x11c3e, 0x2387cc), (0x11c3f, 0x2387e3), + (0x11c92, 0x2394e3), (0x11ca9, 0x23952c), (0x11caa, 0x239603), (0x11cb1, 0x23962c), + (0x11cb2, 0x239663), (0x11cb4, 0x23968c), (0x11cb5, 0x2396c3), (0x11d31, 0x23a6c3), + (0x11d3a, 0x23a743), (0x11d3c, 0x23a7a3), (0x11d3f, 0x23a8a3), (0x11d46, 0x23a8ca), + (0x11d47, 0x23a8e3), (0x11d8a, 0x23b1cc), (0x11d90, 0x23b223), (0x11d93, 0x23b28c), + (0x11d95, 0x23b2a3), (0x11d96, 0x23b2cc), (0x11d97, 0x23b2e3), (0x11ef3, 0x23de83), + (0x11ef5, 0x23decc), (0x11f00, 0x23e023), (0x11f02, 0x23e04a), (0x11f03, 0x23e06c), + (0x11f04, 0x23e205), (0x11f12, 0x23e665), (0x11f34, 0x23e6ac), (0x11f36, 0x23e743), + (0x11f3e, 0x23e7ec), (0x11f40, 0x23e843), (0x11f5a, 0x23eb43), (0x13430, 0x2687e2), + (0x13440, 0x268803), (0x13447, 0x268aa3), (0x1611e, 0x2c2523), (0x1612a, 0x2c258c), + (0x1612d, 0x2c25e3), (0x16af0, 0x2d5e83), (0x16b30, 0x2d66c3), (0x16d63, 0x2dac6e), + (0x16d67, 0x2dad4e), (0x16f4f, 0x2de9e3), (0x16f51, 0x2df0ec), (0x16f8f, 0x2df243), + (0x16fe4, 0x2dfc83), (0x16ff0, 0x2dfe23), (0x1bc9d, 0x3793c3), (0x1bca0, 0x379462), + (0x1cf00, 0x39e5a3), (0x1cf30, 0x39e8c3), (0x1d165, 0x3a2d23), (0x1d16d, 0x3a2e43), + (0x1d173, 0x3a2f42), (0x1d17b, 0x3a3043), (0x1d185, 0x3a3163), (0x1d1aa, 0x3a35a3), + (0x1d242, 0x3a4883), (0x1da00, 0x3b46c3), (0x1da3b, 0x3b4d83), (0x1da75, 0x3b4ea3), + (0x1da84, 0x3b5083), (0x1da9b, 0x3b53e3), (0x1daa1, 0x3b55e3), (0x1e000, 0x3c00c3), + (0x1e008, 0x3c0303), (0x1e01b, 0x3c0423), (0x1e023, 0x3c0483), (0x1e026, 0x3c0543), + (0x1e08f, 0x3c11e3), (0x1e130, 0x3c26c3), (0x1e2ae, 0x3c55c3), (0x1e2ec, 0x3c5de3), + (0x1e4ec, 0x3c9de3), (0x1e5ee, 0x3cbde3), (0x1e6e3, 0x3cdc63), (0x1e6e6, 0x3cdcc3), + (0x1e6ee, 0x3cdde3), (0x1e6f5, 0x3cdea3), (0x1e8d0, 0x3d1ac3), (0x1e944, 0x3d2943), + (0x1fc00, 0x3fffa4), (0xe0000, 0x1c003e2), (0xe0020, 0x1c00fe3), (0xe0080, 0x1c01fe2), + (0xe0100, 0x1c03de3), (0xe01f0, 0x1c1ffe2) ]; } pub mod word { - use core::result::Result::{Ok, Err}; - pub use self::WordCat::*; #[allow(non_camel_case_types)] @@ -1359,598 +936,351 @@ pub mod word { WC_ZWJ, } - fn bsearch_range_value_table(c: char, r: &[(char, char, WordCat)], default_lower: u32, default_upper: u32) -> (u32, u32, WordCat) { - use core::cmp::Ordering::{Equal, Less, Greater}; - match r.binary_search_by(|&(lo, hi, _)| { - if lo <= c && c <= hi { Equal } - else if hi < c { Less } - else { Greater } - }) { - Ok(idx) => { - let (lower, upper, cat) = r[idx]; - (lower as u32, upper as u32, cat) - } - Err(idx) => { - ( - if idx > 0 { r[idx-1].1 as u32 + 1 } else { default_lower }, - r.get(idx).map(|c|c.0 as u32 - 1).unwrap_or(default_upper), - WC_Any, - ) - } - } - } + /// Bits reserved for the category in each `word_cat_table` entry. + const CAT_BITS: u32 = 5; + + /// Category of a `word_cat_table` entry, indexed by its low `CAT_BITS` bits. + /// + /// Padded out to `1 << CAT_BITS` entries so that masking an entry proves the index in bounds. + /// `CATS[i] as usize == i`, so it doubles as an enumeration of every category. + pub const CATS: [WordCat; 1 << CAT_BITS] = [ + WC_ALetter, + WC_Any, + WC_CR, + WC_Double_Quote, + WC_Extend, + WC_ExtendNumLet, + WC_Format, + WC_Hebrew_Letter, + WC_Katakana, + WC_LF, + WC_MidLetter, + WC_MidNum, + WC_MidNumLet, + WC_Newline, + WC_Numeric, + WC_Regional_Indicator, + WC_Single_Quote, + WC_WSegSpace, + WC_ZWJ, + WC_Any, + WC_Any, + WC_Any, + WC_Any, + WC_Any, + WC_Any, + WC_Any, + WC_Any, + WC_Any, + WC_Any, + WC_Any, + WC_Any, + WC_Any, + ]; pub fn word_category(c: char) -> (u32, u32, WordCat) { - // Perform a quick O(1) lookup in a precomputed table to determine - // the slice of the range table to search in. + let c = c as u32; + + // Perform a quick O(1) lookup in a precomputed table + // to determine the slice of the range table to search in. let lookup_interval = 0x80; - let idx = (c as u32 / lookup_interval) as usize; - let range = word_cat_lookup.get(idx..(idx + 2)).map_or( - // If the `idx` is outside of the precomputed table - use the slice - // starting from the last covered index in the precomputed table and - // ending with the length of the range table. - 1097..1100, - |r| (r[0] as usize)..((r[1] + 1) as usize) - ); + let idx = (c / lookup_interval) as usize; + let (lo, hi) = match word_cat_lookup.get(idx..(idx + 2)) { + Some(r) => (r[0] as usize, r[1] as usize + 1), + // If the `idx` is outside of the precomputed table - use the slice + // starting from the last covered index in the precomputed table and + // ending with the length of the range table. + None => (1902, word_cat_table.len()), + }; - // Compute pessimistic default lower and upper bounds on the category. - // If character doesn't map to any range and there is no adjacent range - // in the table slice - these bounds has to apply. - let lower = idx as u32 * lookup_interval; - let upper = lower + lookup_interval - 1; - bsearch_range_value_table(c, &word_cat_table[range], lower, upper) + // The ranges tile the codepoint space, + // so the entry covering `c` is the last one that starts at or before it. + // `word_cat_lookup` guarantees that the entry at `lo` starts at or before `c`, so the offset is never zero. + let i = lo + word_cat_table[lo..hi].partition_point(|&e| (e >> CAT_BITS) <= c) - 1; + let entry = word_cat_table[i]; + let upper = match word_cat_table.get(i + 1) { + Some(&next) => (next >> CAT_BITS) - 1, + None => 0x10FFFF, + }; + ( + entry >> CAT_BITS, + upper, + CATS[(entry & ((1 << CAT_BITS) - 1)) as usize], + ) } const word_cat_lookup: &[u16] = &[ - 0, 14, 23, 23, 23, 23, 25, 31, 37, 37, 39, 44, 56, 67, 79, 83, 93, 104, 111, 121, 143, 162, - 180, 198, 215, 231, 250, 266, 278, 282, 286, 295, 301, 308, 316, 316, 316, 321, 329, 333, - 336, 336, 336, 336, 336, 338, 342, 351, 354, 359, 365, 369, 370, 375, 379, 385, 392, 398, - 410, 410, 412, 412, 412, 421, 431, 450, 452, 465, 466, 466, 466, 466, 466, 466, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 471, 477, 487, 488, - 488, 488, 488, 493, 497, 498, 501, 501, 502, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 505, 505, 505, 512, 516, 516, 517, 527, 536, 542, 549, 557, 566, 572, 576, 576, - 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, - 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, - 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, - 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, - 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 579, 579, 579, 579, - 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, - 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, - 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, - 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, 590, 591, 591, 591, 592, - 595, 605, 607, 616, 624, 630, 631, 632, 633, 633, 636, 640, 644, 644, 648, 651, 659, 659, - 659, 662, 665, 672, 675, 678, 680, 690, 694, 697, 698, 699, 701, 707, 708, 708, 713, 717, - 721, 729, 737, 747, 756, 762, 770, 788, 802, 808, 813, 813, 818, 822, 827, 829, 829, 831, - 833, 846, 853, 862, 866, 867, 869, 875, 878, 890, 898, 898, 900, 909, 910, 910, 910, 910, - 910, 910, 910, 910, 911, 912, 912, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, - 913, 913, 913, 913, 913, 913, 913, 913, 913, 913, 914, 914, 914, 914, 914, 914, 914, 914, - 914, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, - 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 919, 920, 920, 920, 920, - 920, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, - 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, - 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, - 921, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, 924, - 924, 927, 931, 936, 937, 937, 937, 939, 939, 940, 942, 945, 952, 952, 952, 952, 952, 952, - 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, - 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, - 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, - 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, - 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, - 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, - 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, 955, 956, 956, 959, - 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, 959, - 959, 959, 959, 961, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, - 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, 965, - 966, 966, 966, 966, 966, 968, 968, 968, 968, 971, 974, 975, 975, 975, 975, 976, 984, 993, - 993, 993, 997, 1001, 1006, 1006, 1006, 1006, 1006, 1009, 1012, 1012, 1012, 1012, 1012, 1012, - 1012, 1012, 1012, 1014, 1014, 1020, 1021, 1026, 1026, 1026, 1031, 1031, 1031, 1031, 1034, - 1034, 1038, 1038, 1048, 1048, 1052, 1052, 1054, 1058, 1058, 1058, 1058, 1058, 1058, 1058, - 1058, 1058, 1058, 1086, 1091, 1091, 1091, 1091, 1091, 1093, 1095, 1095, 1095, 1095, 1096, - 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, - 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097 + 0, 24, 42, 42, 42, 42, 45, 53, 64, 64, 67, 75, 95, 112, 128, 134, 149, 163, 172, 184, 221, + 256, 288, 321, 355, 383, 416, 440, 464, 472, 481, 498, 507, 521, 536, 536, 536, 546, 562, + 570, 575, 576, 576, 576, 576, 579, 586, 600, 606, 614, 622, 629, 632, 640, 648, 657, 665, + 674, 691, 691, 693, 693, 693, 711, 731, 762, 766, 793, 794, 794, 794, 794, 794, 794, 796, + 796, 796, 796, 796, 796, 796, 796, 796, 796, 796, 796, 796, 796, 797, 797, 803, 814, 833, + 835, 835, 835, 836, 845, 852, 855, 860, 860, 863, 864, 864, 864, 864, 864, 864, 864, 864, + 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, + 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, + 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, + 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, + 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, + 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, + 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, + 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, + 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, + 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, + 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, + 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, 865, 865, 865, 865, 865, 865, 865, + 865, 865, 865, 869, 869, 869, 880, 884, 885, 887, 900, 913, 922, 933, 944, 960, 973, 980, + 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, + 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, + 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, + 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, + 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 980, 985, 985, 985, + 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, + 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, + 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, + 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 985, 986, 1005, 1007, 1007, + 1007, 1009, 1015, 1033, 1036, 1053, 1067, 1079, 1080, 1082, 1084, 1085, 1091, 1098, 1106, + 1106, 1114, 1120, 1136, 1136, 1136, 1142, 1148, 1162, 1168, 1174, 1178, 1196, 1203, 1209, + 1211, 1213, 1217, 1227, 1228, 1229, 1238, 1245, 1252, 1262, 1276, 1291, 1304, 1313, 1328, + 1361, 1385, 1394, 1401, 1402, 1410, 1417, 1424, 1428, 1429, 1431, 1435, 1455, 1467, 1478, + 1484, 1486, 1491, 1501, 1507, 1528, 1541, 1541, 1545, 1557, 1560, 1560, 1560, 1560, 1560, + 1560, 1560, 1560, 1562, 1564, 1564, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, + 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1565, 1568, 1568, 1568, + 1568, 1568, 1568, 1568, 1568, 1568, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, + 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1574, + 1574, 1574, 1574, 1574, 1574, 1574, 1574, 1576, 1576, 1576, 1576, 1576, 1577, 1577, 1577, + 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, + 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, + 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, + 1577, 1577, 1577, 1577, 1577, 1578, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, + 1581, 1581, 1581, 1581, 1582, 1582, 1582, 1582, 1582, 1588, 1596, 1605, 1606, 1606, 1606, + 1610, 1610, 1612, 1617, 1621, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1639, 1640, + 1640, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1646, + 1646, 1646, 1646, 1646, 1646, 1646, 1646, 1647, 1651, 1658, 1658, 1658, 1658, 1658, 1658, + 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, + 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1660, 1660, 1660, 1660, + 1661, 1664, 1664, 1664, 1664, 1669, 1674, 1676, 1676, 1676, 1677, 1679, 1695, 1713, 1713, + 1713, 1721, 1729, 1738, 1738, 1738, 1738, 1739, 1744, 1750, 1750, 1750, 1750, 1750, 1750, + 1750, 1750, 1751, 1754, 1755, 1766, 1769, 1777, 1777, 1777, 1784, 1784, 1784, 1784, 1788, + 1788, 1793, 1793, 1806, 1806, 1815, 1815, 1819, 1824, 1824, 1824, 1824, 1824, 1824, 1824, + 1824, 1824, 1825, 1881, 1890, 1890, 1890, 1890, 1890, 1895, 1898, 1898, 1898, 1898, 1900, + 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, 1900, + 1902, 1902, 1902, 1902, 1902, 1902, 1902, 1902 ]; - const word_cat_table: &[(char, char, WordCat)] = &[ - ('\u{a}', '\u{a}', WC_LF), ('\u{b}', '\u{c}', WC_Newline), ('\u{d}', '\u{d}', WC_CR), - ('\u{20}', '\u{20}', WC_WSegSpace), ('\u{22}', '\u{22}', WC_Double_Quote), ('\u{27}', - '\u{27}', WC_Single_Quote), ('\u{2c}', '\u{2c}', WC_MidNum), ('\u{2e}', '\u{2e}', - WC_MidNumLet), ('\u{30}', '\u{39}', WC_Numeric), ('\u{3a}', '\u{3a}', WC_MidLetter), - ('\u{3b}', '\u{3b}', WC_MidNum), ('\u{41}', '\u{5a}', WC_ALetter), ('\u{5f}', '\u{5f}', - WC_ExtendNumLet), ('\u{61}', '\u{7a}', WC_ALetter), ('\u{85}', '\u{85}', WC_Newline), - ('\u{aa}', '\u{aa}', WC_ALetter), ('\u{ad}', '\u{ad}', WC_Format), ('\u{b5}', '\u{b5}', - WC_ALetter), ('\u{b7}', '\u{b7}', WC_MidLetter), ('\u{b8}', '\u{b8}', WC_ALetter), - ('\u{ba}', '\u{ba}', WC_ALetter), ('\u{c0}', '\u{d6}', WC_ALetter), ('\u{d8}', '\u{f6}', - WC_ALetter), ('\u{f8}', '\u{2d7}', WC_ALetter), ('\u{2de}', '\u{2ff}', WC_ALetter), - ('\u{300}', '\u{36f}', WC_Extend), ('\u{370}', '\u{374}', WC_ALetter), ('\u{376}', - '\u{377}', WC_ALetter), ('\u{37a}', '\u{37d}', WC_ALetter), ('\u{37e}', '\u{37e}', - WC_MidNum), ('\u{37f}', '\u{37f}', WC_ALetter), ('\u{386}', '\u{386}', WC_ALetter), - ('\u{387}', '\u{387}', WC_MidLetter), ('\u{388}', '\u{38a}', WC_ALetter), ('\u{38c}', - '\u{38c}', WC_ALetter), ('\u{38e}', '\u{3a1}', WC_ALetter), ('\u{3a3}', '\u{3f5}', - WC_ALetter), ('\u{3f7}', '\u{481}', WC_ALetter), ('\u{483}', '\u{489}', WC_Extend), - ('\u{48a}', '\u{52f}', WC_ALetter), ('\u{531}', '\u{556}', WC_ALetter), ('\u{559}', - '\u{55c}', WC_ALetter), ('\u{55e}', '\u{55e}', WC_ALetter), ('\u{55f}', '\u{55f}', - WC_MidLetter), ('\u{560}', '\u{588}', WC_ALetter), ('\u{589}', '\u{589}', WC_MidNum), - ('\u{58a}', '\u{58a}', WC_ALetter), ('\u{591}', '\u{5bd}', WC_Extend), ('\u{5bf}', - '\u{5bf}', WC_Extend), ('\u{5c1}', '\u{5c2}', WC_Extend), ('\u{5c4}', '\u{5c5}', WC_Extend), - ('\u{5c7}', '\u{5c7}', WC_Extend), ('\u{5d0}', '\u{5ea}', WC_Hebrew_Letter), ('\u{5ef}', - '\u{5f2}', WC_Hebrew_Letter), ('\u{5f3}', '\u{5f3}', WC_ALetter), ('\u{5f4}', '\u{5f4}', - WC_MidLetter), ('\u{600}', '\u{605}', WC_Numeric), ('\u{60c}', '\u{60d}', WC_MidNum), - ('\u{610}', '\u{61a}', WC_Extend), ('\u{61c}', '\u{61c}', WC_Format), ('\u{620}', '\u{64a}', - WC_ALetter), ('\u{64b}', '\u{65f}', WC_Extend), ('\u{660}', '\u{669}', WC_Numeric), - ('\u{66b}', '\u{66b}', WC_Numeric), ('\u{66c}', '\u{66c}', WC_MidNum), ('\u{66e}', - '\u{66f}', WC_ALetter), ('\u{670}', '\u{670}', WC_Extend), ('\u{671}', '\u{6d3}', - WC_ALetter), ('\u{6d5}', '\u{6d5}', WC_ALetter), ('\u{6d6}', '\u{6dc}', WC_Extend), - ('\u{6dd}', '\u{6dd}', WC_Numeric), ('\u{6df}', '\u{6e4}', WC_Extend), ('\u{6e5}', - '\u{6e6}', WC_ALetter), ('\u{6e7}', '\u{6e8}', WC_Extend), ('\u{6ea}', '\u{6ed}', - WC_Extend), ('\u{6ee}', '\u{6ef}', WC_ALetter), ('\u{6f0}', '\u{6f9}', WC_Numeric), - ('\u{6fa}', '\u{6fc}', WC_ALetter), ('\u{6ff}', '\u{6ff}', WC_ALetter), ('\u{70f}', - '\u{710}', WC_ALetter), ('\u{711}', '\u{711}', WC_Extend), ('\u{712}', '\u{72f}', - WC_ALetter), ('\u{730}', '\u{74a}', WC_Extend), ('\u{74d}', '\u{7a5}', WC_ALetter), - ('\u{7a6}', '\u{7b0}', WC_Extend), ('\u{7b1}', '\u{7b1}', WC_ALetter), ('\u{7c0}', - '\u{7c9}', WC_Numeric), ('\u{7ca}', '\u{7ea}', WC_ALetter), ('\u{7eb}', '\u{7f3}', - WC_Extend), ('\u{7f4}', '\u{7f5}', WC_ALetter), ('\u{7f8}', '\u{7f8}', WC_MidNum), - ('\u{7fa}', '\u{7fa}', WC_ALetter), ('\u{7fd}', '\u{7fd}', WC_Extend), ('\u{800}', - '\u{815}', WC_ALetter), ('\u{816}', '\u{819}', WC_Extend), ('\u{81a}', '\u{81a}', - WC_ALetter), ('\u{81b}', '\u{823}', WC_Extend), ('\u{824}', '\u{824}', WC_ALetter), - ('\u{825}', '\u{827}', WC_Extend), ('\u{828}', '\u{828}', WC_ALetter), ('\u{829}', - '\u{82d}', WC_Extend), ('\u{840}', '\u{858}', WC_ALetter), ('\u{859}', '\u{85b}', - WC_Extend), ('\u{860}', '\u{86a}', WC_ALetter), ('\u{870}', '\u{887}', WC_ALetter), - ('\u{889}', '\u{88f}', WC_ALetter), ('\u{890}', '\u{891}', WC_Numeric), ('\u{897}', - '\u{89f}', WC_Extend), ('\u{8a0}', '\u{8c9}', WC_ALetter), ('\u{8ca}', '\u{8e1}', - WC_Extend), ('\u{8e2}', '\u{8e2}', WC_Numeric), ('\u{8e3}', '\u{903}', WC_Extend), - ('\u{904}', '\u{939}', WC_ALetter), ('\u{93a}', '\u{93c}', WC_Extend), ('\u{93d}', - '\u{93d}', WC_ALetter), ('\u{93e}', '\u{94f}', WC_Extend), ('\u{950}', '\u{950}', - WC_ALetter), ('\u{951}', '\u{957}', WC_Extend), ('\u{958}', '\u{961}', WC_ALetter), - ('\u{962}', '\u{963}', WC_Extend), ('\u{966}', '\u{96f}', WC_Numeric), ('\u{971}', - '\u{980}', WC_ALetter), ('\u{981}', '\u{983}', WC_Extend), ('\u{985}', '\u{98c}', - WC_ALetter), ('\u{98f}', '\u{990}', WC_ALetter), ('\u{993}', '\u{9a8}', WC_ALetter), - ('\u{9aa}', '\u{9b0}', WC_ALetter), ('\u{9b2}', '\u{9b2}', WC_ALetter), ('\u{9b6}', - '\u{9b9}', WC_ALetter), ('\u{9bc}', '\u{9bc}', WC_Extend), ('\u{9bd}', '\u{9bd}', - WC_ALetter), ('\u{9be}', '\u{9c4}', WC_Extend), ('\u{9c7}', '\u{9c8}', WC_Extend), - ('\u{9cb}', '\u{9cd}', WC_Extend), ('\u{9ce}', '\u{9ce}', WC_ALetter), ('\u{9d7}', - '\u{9d7}', WC_Extend), ('\u{9dc}', '\u{9dd}', WC_ALetter), ('\u{9df}', '\u{9e1}', - WC_ALetter), ('\u{9e2}', '\u{9e3}', WC_Extend), ('\u{9e6}', '\u{9ef}', WC_Numeric), - ('\u{9f0}', '\u{9f1}', WC_ALetter), ('\u{9fc}', '\u{9fc}', WC_ALetter), ('\u{9fe}', - '\u{9fe}', WC_Extend), ('\u{a01}', '\u{a03}', WC_Extend), ('\u{a05}', '\u{a0a}', - WC_ALetter), ('\u{a0f}', '\u{a10}', WC_ALetter), ('\u{a13}', '\u{a28}', WC_ALetter), - ('\u{a2a}', '\u{a30}', WC_ALetter), ('\u{a32}', '\u{a33}', WC_ALetter), ('\u{a35}', - '\u{a36}', WC_ALetter), ('\u{a38}', '\u{a39}', WC_ALetter), ('\u{a3c}', '\u{a3c}', - WC_Extend), ('\u{a3e}', '\u{a42}', WC_Extend), ('\u{a47}', '\u{a48}', WC_Extend), - ('\u{a4b}', '\u{a4d}', WC_Extend), ('\u{a51}', '\u{a51}', WC_Extend), ('\u{a59}', '\u{a5c}', - WC_ALetter), ('\u{a5e}', '\u{a5e}', WC_ALetter), ('\u{a66}', '\u{a6f}', WC_Numeric), - ('\u{a70}', '\u{a71}', WC_Extend), ('\u{a72}', '\u{a74}', WC_ALetter), ('\u{a75}', - '\u{a75}', WC_Extend), ('\u{a81}', '\u{a83}', WC_Extend), ('\u{a85}', '\u{a8d}', - WC_ALetter), ('\u{a8f}', '\u{a91}', WC_ALetter), ('\u{a93}', '\u{aa8}', WC_ALetter), - ('\u{aaa}', '\u{ab0}', WC_ALetter), ('\u{ab2}', '\u{ab3}', WC_ALetter), ('\u{ab5}', - '\u{ab9}', WC_ALetter), ('\u{abc}', '\u{abc}', WC_Extend), ('\u{abd}', '\u{abd}', - WC_ALetter), ('\u{abe}', '\u{ac5}', WC_Extend), ('\u{ac7}', '\u{ac9}', WC_Extend), - ('\u{acb}', '\u{acd}', WC_Extend), ('\u{ad0}', '\u{ad0}', WC_ALetter), ('\u{ae0}', - '\u{ae1}', WC_ALetter), ('\u{ae2}', '\u{ae3}', WC_Extend), ('\u{ae6}', '\u{aef}', - WC_Numeric), ('\u{af9}', '\u{af9}', WC_ALetter), ('\u{afa}', '\u{aff}', WC_Extend), - ('\u{b01}', '\u{b03}', WC_Extend), ('\u{b05}', '\u{b0c}', WC_ALetter), ('\u{b0f}', - '\u{b10}', WC_ALetter), ('\u{b13}', '\u{b28}', WC_ALetter), ('\u{b2a}', '\u{b30}', - WC_ALetter), ('\u{b32}', '\u{b33}', WC_ALetter), ('\u{b35}', '\u{b39}', WC_ALetter), - ('\u{b3c}', '\u{b3c}', WC_Extend), ('\u{b3d}', '\u{b3d}', WC_ALetter), ('\u{b3e}', - '\u{b44}', WC_Extend), ('\u{b47}', '\u{b48}', WC_Extend), ('\u{b4b}', '\u{b4d}', WC_Extend), - ('\u{b55}', '\u{b57}', WC_Extend), ('\u{b5c}', '\u{b5d}', WC_ALetter), ('\u{b5f}', - '\u{b61}', WC_ALetter), ('\u{b62}', '\u{b63}', WC_Extend), ('\u{b66}', '\u{b6f}', - WC_Numeric), ('\u{b71}', '\u{b71}', WC_ALetter), ('\u{b82}', '\u{b82}', WC_Extend), - ('\u{b83}', '\u{b83}', WC_ALetter), ('\u{b85}', '\u{b8a}', WC_ALetter), ('\u{b8e}', - '\u{b90}', WC_ALetter), ('\u{b92}', '\u{b95}', WC_ALetter), ('\u{b99}', '\u{b9a}', - WC_ALetter), ('\u{b9c}', '\u{b9c}', WC_ALetter), ('\u{b9e}', '\u{b9f}', WC_ALetter), - ('\u{ba3}', '\u{ba4}', WC_ALetter), ('\u{ba8}', '\u{baa}', WC_ALetter), ('\u{bae}', - '\u{bb9}', WC_ALetter), ('\u{bbe}', '\u{bc2}', WC_Extend), ('\u{bc6}', '\u{bc8}', - WC_Extend), ('\u{bca}', '\u{bcd}', WC_Extend), ('\u{bd0}', '\u{bd0}', WC_ALetter), - ('\u{bd7}', '\u{bd7}', WC_Extend), ('\u{be6}', '\u{bef}', WC_Numeric), ('\u{c00}', - '\u{c04}', WC_Extend), ('\u{c05}', '\u{c0c}', WC_ALetter), ('\u{c0e}', '\u{c10}', - WC_ALetter), ('\u{c12}', '\u{c28}', WC_ALetter), ('\u{c2a}', '\u{c39}', WC_ALetter), - ('\u{c3c}', '\u{c3c}', WC_Extend), ('\u{c3d}', '\u{c3d}', WC_ALetter), ('\u{c3e}', - '\u{c44}', WC_Extend), ('\u{c46}', '\u{c48}', WC_Extend), ('\u{c4a}', '\u{c4d}', WC_Extend), - ('\u{c55}', '\u{c56}', WC_Extend), ('\u{c58}', '\u{c5a}', WC_ALetter), ('\u{c5c}', - '\u{c5d}', WC_ALetter), ('\u{c60}', '\u{c61}', WC_ALetter), ('\u{c62}', '\u{c63}', - WC_Extend), ('\u{c66}', '\u{c6f}', WC_Numeric), ('\u{c80}', '\u{c80}', WC_ALetter), - ('\u{c81}', '\u{c83}', WC_Extend), ('\u{c85}', '\u{c8c}', WC_ALetter), ('\u{c8e}', - '\u{c90}', WC_ALetter), ('\u{c92}', '\u{ca8}', WC_ALetter), ('\u{caa}', '\u{cb3}', - WC_ALetter), ('\u{cb5}', '\u{cb9}', WC_ALetter), ('\u{cbc}', '\u{cbc}', WC_Extend), - ('\u{cbd}', '\u{cbd}', WC_ALetter), ('\u{cbe}', '\u{cc4}', WC_Extend), ('\u{cc6}', - '\u{cc8}', WC_Extend), ('\u{cca}', '\u{ccd}', WC_Extend), ('\u{cd5}', '\u{cd6}', WC_Extend), - ('\u{cdc}', '\u{cde}', WC_ALetter), ('\u{ce0}', '\u{ce1}', WC_ALetter), ('\u{ce2}', - '\u{ce3}', WC_Extend), ('\u{ce6}', '\u{cef}', WC_Numeric), ('\u{cf1}', '\u{cf2}', - WC_ALetter), ('\u{cf3}', '\u{cf3}', WC_Extend), ('\u{d00}', '\u{d03}', WC_Extend), - ('\u{d04}', '\u{d0c}', WC_ALetter), ('\u{d0e}', '\u{d10}', WC_ALetter), ('\u{d12}', - '\u{d3a}', WC_ALetter), ('\u{d3b}', '\u{d3c}', WC_Extend), ('\u{d3d}', '\u{d3d}', - WC_ALetter), ('\u{d3e}', '\u{d44}', WC_Extend), ('\u{d46}', '\u{d48}', WC_Extend), - ('\u{d4a}', '\u{d4d}', WC_Extend), ('\u{d4e}', '\u{d4e}', WC_ALetter), ('\u{d54}', - '\u{d56}', WC_ALetter), ('\u{d57}', '\u{d57}', WC_Extend), ('\u{d5f}', '\u{d61}', - WC_ALetter), ('\u{d62}', '\u{d63}', WC_Extend), ('\u{d66}', '\u{d6f}', WC_Numeric), - ('\u{d7a}', '\u{d7f}', WC_ALetter), ('\u{d81}', '\u{d83}', WC_Extend), ('\u{d85}', - '\u{d96}', WC_ALetter), ('\u{d9a}', '\u{db1}', WC_ALetter), ('\u{db3}', '\u{dbb}', - WC_ALetter), ('\u{dbd}', '\u{dbd}', WC_ALetter), ('\u{dc0}', '\u{dc6}', WC_ALetter), - ('\u{dca}', '\u{dca}', WC_Extend), ('\u{dcf}', '\u{dd4}', WC_Extend), ('\u{dd6}', '\u{dd6}', - WC_Extend), ('\u{dd8}', '\u{ddf}', WC_Extend), ('\u{de6}', '\u{def}', WC_Numeric), - ('\u{df2}', '\u{df3}', WC_Extend), ('\u{e31}', '\u{e31}', WC_Extend), ('\u{e34}', '\u{e3a}', - WC_Extend), ('\u{e47}', '\u{e4e}', WC_Extend), ('\u{e50}', '\u{e59}', WC_Numeric), - ('\u{eb1}', '\u{eb1}', WC_Extend), ('\u{eb4}', '\u{ebc}', WC_Extend), ('\u{ec8}', '\u{ece}', - WC_Extend), ('\u{ed0}', '\u{ed9}', WC_Numeric), ('\u{f00}', '\u{f00}', WC_ALetter), - ('\u{f18}', '\u{f19}', WC_Extend), ('\u{f20}', '\u{f29}', WC_Numeric), ('\u{f35}', - '\u{f35}', WC_Extend), ('\u{f37}', '\u{f37}', WC_Extend), ('\u{f39}', '\u{f39}', WC_Extend), - ('\u{f3e}', '\u{f3f}', WC_Extend), ('\u{f40}', '\u{f47}', WC_ALetter), ('\u{f49}', - '\u{f6c}', WC_ALetter), ('\u{f71}', '\u{f84}', WC_Extend), ('\u{f86}', '\u{f87}', - WC_Extend), ('\u{f88}', '\u{f8c}', WC_ALetter), ('\u{f8d}', '\u{f97}', WC_Extend), - ('\u{f99}', '\u{fbc}', WC_Extend), ('\u{fc6}', '\u{fc6}', WC_Extend), ('\u{102b}', - '\u{103e}', WC_Extend), ('\u{1040}', '\u{1049}', WC_Numeric), ('\u{1056}', '\u{1059}', - WC_Extend), ('\u{105e}', '\u{1060}', WC_Extend), ('\u{1062}', '\u{1064}', WC_Extend), - ('\u{1067}', '\u{106d}', WC_Extend), ('\u{1071}', '\u{1074}', WC_Extend), ('\u{1082}', - '\u{108d}', WC_Extend), ('\u{108f}', '\u{108f}', WC_Extend), ('\u{1090}', '\u{1099}', - WC_Numeric), ('\u{109a}', '\u{109d}', WC_Extend), ('\u{10a0}', '\u{10c5}', WC_ALetter), - ('\u{10c7}', '\u{10c7}', WC_ALetter), ('\u{10cd}', '\u{10cd}', WC_ALetter), ('\u{10d0}', - '\u{10fa}', WC_ALetter), ('\u{10fc}', '\u{1248}', WC_ALetter), ('\u{124a}', '\u{124d}', - WC_ALetter), ('\u{1250}', '\u{1256}', WC_ALetter), ('\u{1258}', '\u{1258}', WC_ALetter), - ('\u{125a}', '\u{125d}', WC_ALetter), ('\u{1260}', '\u{1288}', WC_ALetter), ('\u{128a}', - '\u{128d}', WC_ALetter), ('\u{1290}', '\u{12b0}', WC_ALetter), ('\u{12b2}', '\u{12b5}', - WC_ALetter), ('\u{12b8}', '\u{12be}', WC_ALetter), ('\u{12c0}', '\u{12c0}', WC_ALetter), - ('\u{12c2}', '\u{12c5}', WC_ALetter), ('\u{12c8}', '\u{12d6}', WC_ALetter), ('\u{12d8}', - '\u{1310}', WC_ALetter), ('\u{1312}', '\u{1315}', WC_ALetter), ('\u{1318}', '\u{135a}', - WC_ALetter), ('\u{135d}', '\u{135f}', WC_Extend), ('\u{1380}', '\u{138f}', WC_ALetter), - ('\u{13a0}', '\u{13f5}', WC_ALetter), ('\u{13f8}', '\u{13fd}', WC_ALetter), ('\u{1401}', - '\u{166c}', WC_ALetter), ('\u{166f}', '\u{167f}', WC_ALetter), ('\u{1680}', '\u{1680}', - WC_WSegSpace), ('\u{1681}', '\u{169a}', WC_ALetter), ('\u{16a0}', '\u{16ea}', WC_ALetter), - ('\u{16ee}', '\u{16f8}', WC_ALetter), ('\u{1700}', '\u{1711}', WC_ALetter), ('\u{1712}', - '\u{1715}', WC_Extend), ('\u{171f}', '\u{1731}', WC_ALetter), ('\u{1732}', '\u{1734}', - WC_Extend), ('\u{1740}', '\u{1751}', WC_ALetter), ('\u{1752}', '\u{1753}', WC_Extend), - ('\u{1760}', '\u{176c}', WC_ALetter), ('\u{176e}', '\u{1770}', WC_ALetter), ('\u{1772}', - '\u{1773}', WC_Extend), ('\u{17b4}', '\u{17d3}', WC_Extend), ('\u{17dd}', '\u{17dd}', - WC_Extend), ('\u{17e0}', '\u{17e9}', WC_Numeric), ('\u{180b}', '\u{180d}', WC_Extend), - ('\u{180e}', '\u{180e}', WC_Format), ('\u{180f}', '\u{180f}', WC_Extend), ('\u{1810}', - '\u{1819}', WC_Numeric), ('\u{1820}', '\u{1878}', WC_ALetter), ('\u{1880}', '\u{1884}', - WC_ALetter), ('\u{1885}', '\u{1886}', WC_Extend), ('\u{1887}', '\u{18a8}', WC_ALetter), - ('\u{18a9}', '\u{18a9}', WC_Extend), ('\u{18aa}', '\u{18aa}', WC_ALetter), ('\u{18b0}', - '\u{18f5}', WC_ALetter), ('\u{1900}', '\u{191e}', WC_ALetter), ('\u{1920}', '\u{192b}', - WC_Extend), ('\u{1930}', '\u{193b}', WC_Extend), ('\u{1946}', '\u{194f}', WC_Numeric), - ('\u{19d0}', '\u{19da}', WC_Numeric), ('\u{1a00}', '\u{1a16}', WC_ALetter), ('\u{1a17}', - '\u{1a1b}', WC_Extend), ('\u{1a55}', '\u{1a5e}', WC_Extend), ('\u{1a60}', '\u{1a7c}', - WC_Extend), ('\u{1a7f}', '\u{1a7f}', WC_Extend), ('\u{1a80}', '\u{1a89}', WC_Numeric), - ('\u{1a90}', '\u{1a99}', WC_Numeric), ('\u{1ab0}', '\u{1add}', WC_Extend), ('\u{1ae0}', - '\u{1aeb}', WC_Extend), ('\u{1b00}', '\u{1b04}', WC_Extend), ('\u{1b05}', '\u{1b33}', - WC_ALetter), ('\u{1b34}', '\u{1b44}', WC_Extend), ('\u{1b45}', '\u{1b4c}', WC_ALetter), - ('\u{1b50}', '\u{1b59}', WC_Numeric), ('\u{1b6b}', '\u{1b73}', WC_Extend), ('\u{1b80}', - '\u{1b82}', WC_Extend), ('\u{1b83}', '\u{1ba0}', WC_ALetter), ('\u{1ba1}', '\u{1bad}', - WC_Extend), ('\u{1bae}', '\u{1baf}', WC_ALetter), ('\u{1bb0}', '\u{1bb9}', WC_Numeric), - ('\u{1bba}', '\u{1be5}', WC_ALetter), ('\u{1be6}', '\u{1bf3}', WC_Extend), ('\u{1c00}', - '\u{1c23}', WC_ALetter), ('\u{1c24}', '\u{1c37}', WC_Extend), ('\u{1c40}', '\u{1c49}', - WC_Numeric), ('\u{1c4d}', '\u{1c4f}', WC_ALetter), ('\u{1c50}', '\u{1c59}', WC_Numeric), - ('\u{1c5a}', '\u{1c7d}', WC_ALetter), ('\u{1c80}', '\u{1c8a}', WC_ALetter), ('\u{1c90}', - '\u{1cba}', WC_ALetter), ('\u{1cbd}', '\u{1cbf}', WC_ALetter), ('\u{1cd0}', '\u{1cd2}', - WC_Extend), ('\u{1cd4}', '\u{1ce8}', WC_Extend), ('\u{1ce9}', '\u{1cec}', WC_ALetter), - ('\u{1ced}', '\u{1ced}', WC_Extend), ('\u{1cee}', '\u{1cf3}', WC_ALetter), ('\u{1cf4}', - '\u{1cf4}', WC_Extend), ('\u{1cf5}', '\u{1cf6}', WC_ALetter), ('\u{1cf7}', '\u{1cf9}', - WC_Extend), ('\u{1cfa}', '\u{1cfa}', WC_ALetter), ('\u{1d00}', '\u{1dbf}', WC_ALetter), - ('\u{1dc0}', '\u{1dff}', WC_Extend), ('\u{1e00}', '\u{1f15}', WC_ALetter), ('\u{1f18}', - '\u{1f1d}', WC_ALetter), ('\u{1f20}', '\u{1f45}', WC_ALetter), ('\u{1f48}', '\u{1f4d}', - WC_ALetter), ('\u{1f50}', '\u{1f57}', WC_ALetter), ('\u{1f59}', '\u{1f59}', WC_ALetter), - ('\u{1f5b}', '\u{1f5b}', WC_ALetter), ('\u{1f5d}', '\u{1f5d}', WC_ALetter), ('\u{1f5f}', - '\u{1f7d}', WC_ALetter), ('\u{1f80}', '\u{1fb4}', WC_ALetter), ('\u{1fb6}', '\u{1fbc}', - WC_ALetter), ('\u{1fbe}', '\u{1fbe}', WC_ALetter), ('\u{1fc2}', '\u{1fc4}', WC_ALetter), - ('\u{1fc6}', '\u{1fcc}', WC_ALetter), ('\u{1fd0}', '\u{1fd3}', WC_ALetter), ('\u{1fd6}', - '\u{1fdb}', WC_ALetter), ('\u{1fe0}', '\u{1fec}', WC_ALetter), ('\u{1ff2}', '\u{1ff4}', - WC_ALetter), ('\u{1ff6}', '\u{1ffc}', WC_ALetter), ('\u{2000}', '\u{2006}', WC_WSegSpace), - ('\u{2008}', '\u{200a}', WC_WSegSpace), ('\u{200c}', '\u{200c}', WC_Extend), ('\u{200d}', - '\u{200d}', WC_ZWJ), ('\u{200e}', '\u{200f}', WC_Format), ('\u{2018}', '\u{2019}', - WC_MidNumLet), ('\u{2024}', '\u{2024}', WC_MidNumLet), ('\u{2027}', '\u{2027}', - WC_MidLetter), ('\u{2028}', '\u{2029}', WC_Newline), ('\u{202a}', '\u{202e}', WC_Format), - ('\u{202f}', '\u{202f}', WC_ExtendNumLet), ('\u{203f}', '\u{2040}', WC_ExtendNumLet), - ('\u{2044}', '\u{2044}', WC_MidNum), ('\u{2054}', '\u{2054}', WC_ExtendNumLet), ('\u{205f}', - '\u{205f}', WC_WSegSpace), ('\u{2060}', '\u{2064}', WC_Format), ('\u{2066}', '\u{206f}', - WC_Format), ('\u{2071}', '\u{2071}', WC_ALetter), ('\u{207f}', '\u{207f}', WC_ALetter), - ('\u{2090}', '\u{209c}', WC_ALetter), ('\u{20d0}', '\u{20f0}', WC_Extend), ('\u{2102}', - '\u{2102}', WC_ALetter), ('\u{2107}', '\u{2107}', WC_ALetter), ('\u{210a}', '\u{2113}', - WC_ALetter), ('\u{2115}', '\u{2115}', WC_ALetter), ('\u{2119}', '\u{211d}', WC_ALetter), - ('\u{2124}', '\u{2124}', WC_ALetter), ('\u{2126}', '\u{2126}', WC_ALetter), ('\u{2128}', - '\u{2128}', WC_ALetter), ('\u{212a}', '\u{212d}', WC_ALetter), ('\u{212f}', '\u{2139}', - WC_ALetter), ('\u{213c}', '\u{213f}', WC_ALetter), ('\u{2145}', '\u{2149}', WC_ALetter), - ('\u{214e}', '\u{214e}', WC_ALetter), ('\u{2160}', '\u{2188}', WC_ALetter), ('\u{24b6}', - '\u{24e9}', WC_ALetter), ('\u{2c00}', '\u{2ce4}', WC_ALetter), ('\u{2ceb}', '\u{2cee}', - WC_ALetter), ('\u{2cef}', '\u{2cf1}', WC_Extend), ('\u{2cf2}', '\u{2cf3}', WC_ALetter), - ('\u{2d00}', '\u{2d25}', WC_ALetter), ('\u{2d27}', '\u{2d27}', WC_ALetter), ('\u{2d2d}', - '\u{2d2d}', WC_ALetter), ('\u{2d30}', '\u{2d67}', WC_ALetter), ('\u{2d6f}', '\u{2d6f}', - WC_ALetter), ('\u{2d7f}', '\u{2d7f}', WC_Extend), ('\u{2d80}', '\u{2d96}', WC_ALetter), - ('\u{2da0}', '\u{2da6}', WC_ALetter), ('\u{2da8}', '\u{2dae}', WC_ALetter), ('\u{2db0}', - '\u{2db6}', WC_ALetter), ('\u{2db8}', '\u{2dbe}', WC_ALetter), ('\u{2dc0}', '\u{2dc6}', - WC_ALetter), ('\u{2dc8}', '\u{2dce}', WC_ALetter), ('\u{2dd0}', '\u{2dd6}', WC_ALetter), - ('\u{2dd8}', '\u{2dde}', WC_ALetter), ('\u{2de0}', '\u{2dff}', WC_Extend), ('\u{2e2f}', - '\u{2e2f}', WC_ALetter), ('\u{3000}', '\u{3000}', WC_WSegSpace), ('\u{3005}', '\u{3005}', - WC_ALetter), ('\u{302a}', '\u{302f}', WC_Extend), ('\u{3031}', '\u{3035}', WC_Katakana), - ('\u{303b}', '\u{303c}', WC_ALetter), ('\u{3099}', '\u{309a}', WC_Extend), ('\u{309b}', - '\u{309c}', WC_Katakana), ('\u{30a0}', '\u{30fa}', WC_Katakana), ('\u{30fc}', '\u{30ff}', - WC_Katakana), ('\u{3105}', '\u{312f}', WC_ALetter), ('\u{3131}', '\u{318e}', WC_ALetter), - ('\u{31a0}', '\u{31bf}', WC_ALetter), ('\u{31f0}', '\u{31ff}', WC_Katakana), ('\u{32d0}', - '\u{32fe}', WC_Katakana), ('\u{3300}', '\u{3357}', WC_Katakana), ('\u{a000}', '\u{a48c}', - WC_ALetter), ('\u{a4d0}', '\u{a4fd}', WC_ALetter), ('\u{a500}', '\u{a60c}', WC_ALetter), - ('\u{a610}', '\u{a61f}', WC_ALetter), ('\u{a620}', '\u{a629}', WC_Numeric), ('\u{a62a}', - '\u{a62b}', WC_ALetter), ('\u{a640}', '\u{a66e}', WC_ALetter), ('\u{a66f}', '\u{a672}', - WC_Extend), ('\u{a674}', '\u{a67d}', WC_Extend), ('\u{a67f}', '\u{a69d}', WC_ALetter), - ('\u{a69e}', '\u{a69f}', WC_Extend), ('\u{a6a0}', '\u{a6ef}', WC_ALetter), ('\u{a6f0}', - '\u{a6f1}', WC_Extend), ('\u{a708}', '\u{a7dc}', WC_ALetter), ('\u{a7f1}', '\u{a801}', - WC_ALetter), ('\u{a802}', '\u{a802}', WC_Extend), ('\u{a803}', '\u{a805}', WC_ALetter), - ('\u{a806}', '\u{a806}', WC_Extend), ('\u{a807}', '\u{a80a}', WC_ALetter), ('\u{a80b}', - '\u{a80b}', WC_Extend), ('\u{a80c}', '\u{a822}', WC_ALetter), ('\u{a823}', '\u{a827}', - WC_Extend), ('\u{a82c}', '\u{a82c}', WC_Extend), ('\u{a840}', '\u{a873}', WC_ALetter), - ('\u{a880}', '\u{a881}', WC_Extend), ('\u{a882}', '\u{a8b3}', WC_ALetter), ('\u{a8b4}', - '\u{a8c5}', WC_Extend), ('\u{a8d0}', '\u{a8d9}', WC_Numeric), ('\u{a8e0}', '\u{a8f1}', - WC_Extend), ('\u{a8f2}', '\u{a8f7}', WC_ALetter), ('\u{a8fb}', '\u{a8fb}', WC_ALetter), - ('\u{a8fd}', '\u{a8fe}', WC_ALetter), ('\u{a8ff}', '\u{a8ff}', WC_Extend), ('\u{a900}', - '\u{a909}', WC_Numeric), ('\u{a90a}', '\u{a925}', WC_ALetter), ('\u{a926}', '\u{a92d}', - WC_Extend), ('\u{a930}', '\u{a946}', WC_ALetter), ('\u{a947}', '\u{a953}', WC_Extend), - ('\u{a960}', '\u{a97c}', WC_ALetter), ('\u{a980}', '\u{a983}', WC_Extend), ('\u{a984}', - '\u{a9b2}', WC_ALetter), ('\u{a9b3}', '\u{a9c0}', WC_Extend), ('\u{a9cf}', '\u{a9cf}', - WC_ALetter), ('\u{a9d0}', '\u{a9d9}', WC_Numeric), ('\u{a9e5}', '\u{a9e5}', WC_Extend), - ('\u{a9f0}', '\u{a9f9}', WC_Numeric), ('\u{aa00}', '\u{aa28}', WC_ALetter), ('\u{aa29}', - '\u{aa36}', WC_Extend), ('\u{aa40}', '\u{aa42}', WC_ALetter), ('\u{aa43}', '\u{aa43}', - WC_Extend), ('\u{aa44}', '\u{aa4b}', WC_ALetter), ('\u{aa4c}', '\u{aa4d}', WC_Extend), - ('\u{aa50}', '\u{aa59}', WC_Numeric), ('\u{aa7b}', '\u{aa7d}', WC_Extend), ('\u{aab0}', - '\u{aab0}', WC_Extend), ('\u{aab2}', '\u{aab4}', WC_Extend), ('\u{aab7}', '\u{aab8}', - WC_Extend), ('\u{aabe}', '\u{aabf}', WC_Extend), ('\u{aac1}', '\u{aac1}', WC_Extend), - ('\u{aae0}', '\u{aaea}', WC_ALetter), ('\u{aaeb}', '\u{aaef}', WC_Extend), ('\u{aaf2}', - '\u{aaf4}', WC_ALetter), ('\u{aaf5}', '\u{aaf6}', WC_Extend), ('\u{ab01}', '\u{ab06}', - WC_ALetter), ('\u{ab09}', '\u{ab0e}', WC_ALetter), ('\u{ab11}', '\u{ab16}', WC_ALetter), - ('\u{ab20}', '\u{ab26}', WC_ALetter), ('\u{ab28}', '\u{ab2e}', WC_ALetter), ('\u{ab30}', - '\u{ab69}', WC_ALetter), ('\u{ab70}', '\u{abe2}', WC_ALetter), ('\u{abe3}', '\u{abea}', - WC_Extend), ('\u{abec}', '\u{abed}', WC_Extend), ('\u{abf0}', '\u{abf9}', WC_Numeric), - ('\u{ac00}', '\u{d7a3}', WC_ALetter), ('\u{d7b0}', '\u{d7c6}', WC_ALetter), ('\u{d7cb}', - '\u{d7fb}', WC_ALetter), ('\u{fb00}', '\u{fb06}', WC_ALetter), ('\u{fb13}', '\u{fb17}', - WC_ALetter), ('\u{fb1d}', '\u{fb1d}', WC_Hebrew_Letter), ('\u{fb1e}', '\u{fb1e}', - WC_Extend), ('\u{fb1f}', '\u{fb28}', WC_Hebrew_Letter), ('\u{fb2a}', '\u{fb36}', - WC_Hebrew_Letter), ('\u{fb38}', '\u{fb3c}', WC_Hebrew_Letter), ('\u{fb3e}', '\u{fb3e}', - WC_Hebrew_Letter), ('\u{fb40}', '\u{fb41}', WC_Hebrew_Letter), ('\u{fb43}', '\u{fb44}', - WC_Hebrew_Letter), ('\u{fb46}', '\u{fb4f}', WC_Hebrew_Letter), ('\u{fb50}', '\u{fbb1}', - WC_ALetter), ('\u{fbd3}', '\u{fd3d}', WC_ALetter), ('\u{fd50}', '\u{fd8f}', WC_ALetter), - ('\u{fd92}', '\u{fdc7}', WC_ALetter), ('\u{fdf0}', '\u{fdfb}', WC_ALetter), ('\u{fe00}', - '\u{fe0f}', WC_Extend), ('\u{fe13}', '\u{fe13}', WC_MidLetter), ('\u{fe20}', '\u{fe2f}', - WC_Extend), ('\u{fe33}', '\u{fe34}', WC_ExtendNumLet), ('\u{fe4d}', '\u{fe4f}', - WC_ExtendNumLet), ('\u{fe50}', '\u{fe50}', WC_MidNum), ('\u{fe52}', '\u{fe52}', - WC_MidNumLet), ('\u{fe54}', '\u{fe54}', WC_MidNum), ('\u{fe55}', '\u{fe55}', WC_MidLetter), - ('\u{fe70}', '\u{fe74}', WC_ALetter), ('\u{fe76}', '\u{fefc}', WC_ALetter), ('\u{feff}', - '\u{feff}', WC_Format), ('\u{ff07}', '\u{ff07}', WC_MidNumLet), ('\u{ff0c}', '\u{ff0c}', - WC_MidNum), ('\u{ff0e}', '\u{ff0e}', WC_MidNumLet), ('\u{ff10}', '\u{ff19}', WC_Numeric), - ('\u{ff1a}', '\u{ff1a}', WC_MidLetter), ('\u{ff1b}', '\u{ff1b}', WC_MidNum), ('\u{ff21}', - '\u{ff3a}', WC_ALetter), ('\u{ff3f}', '\u{ff3f}', WC_ExtendNumLet), ('\u{ff41}', '\u{ff5a}', - WC_ALetter), ('\u{ff66}', '\u{ff9d}', WC_Katakana), ('\u{ff9e}', '\u{ff9f}', WC_Extend), - ('\u{ffa0}', '\u{ffbe}', WC_ALetter), ('\u{ffc2}', '\u{ffc7}', WC_ALetter), ('\u{ffca}', - '\u{ffcf}', WC_ALetter), ('\u{ffd2}', '\u{ffd7}', WC_ALetter), ('\u{ffda}', '\u{ffdc}', - WC_ALetter), ('\u{fff9}', '\u{fffb}', WC_Format), ('\u{10000}', '\u{1000b}', WC_ALetter), - ('\u{1000d}', '\u{10026}', WC_ALetter), ('\u{10028}', '\u{1003a}', WC_ALetter), - ('\u{1003c}', '\u{1003d}', WC_ALetter), ('\u{1003f}', '\u{1004d}', WC_ALetter), - ('\u{10050}', '\u{1005d}', WC_ALetter), ('\u{10080}', '\u{100fa}', WC_ALetter), - ('\u{10140}', '\u{10174}', WC_ALetter), ('\u{101fd}', '\u{101fd}', WC_Extend), ('\u{10280}', - '\u{1029c}', WC_ALetter), ('\u{102a0}', '\u{102d0}', WC_ALetter), ('\u{102e0}', '\u{102e0}', - WC_Extend), ('\u{10300}', '\u{1031f}', WC_ALetter), ('\u{1032d}', '\u{1034a}', WC_ALetter), - ('\u{10350}', '\u{10375}', WC_ALetter), ('\u{10376}', '\u{1037a}', WC_Extend), ('\u{10380}', - '\u{1039d}', WC_ALetter), ('\u{103a0}', '\u{103c3}', WC_ALetter), ('\u{103c8}', '\u{103cf}', - WC_ALetter), ('\u{103d1}', '\u{103d5}', WC_ALetter), ('\u{10400}', '\u{1049d}', WC_ALetter), - ('\u{104a0}', '\u{104a9}', WC_Numeric), ('\u{104b0}', '\u{104d3}', WC_ALetter), - ('\u{104d8}', '\u{104fb}', WC_ALetter), ('\u{10500}', '\u{10527}', WC_ALetter), - ('\u{10530}', '\u{10563}', WC_ALetter), ('\u{10570}', '\u{1057a}', WC_ALetter), - ('\u{1057c}', '\u{1058a}', WC_ALetter), ('\u{1058c}', '\u{10592}', WC_ALetter), - ('\u{10594}', '\u{10595}', WC_ALetter), ('\u{10597}', '\u{105a1}', WC_ALetter), - ('\u{105a3}', '\u{105b1}', WC_ALetter), ('\u{105b3}', '\u{105b9}', WC_ALetter), - ('\u{105bb}', '\u{105bc}', WC_ALetter), ('\u{105c0}', '\u{105f3}', WC_ALetter), - ('\u{10600}', '\u{10736}', WC_ALetter), ('\u{10740}', '\u{10755}', WC_ALetter), - ('\u{10760}', '\u{10767}', WC_ALetter), ('\u{10780}', '\u{10785}', WC_ALetter), - ('\u{10787}', '\u{107b0}', WC_ALetter), ('\u{107b2}', '\u{107ba}', WC_ALetter), - ('\u{10800}', '\u{10805}', WC_ALetter), ('\u{10808}', '\u{10808}', WC_ALetter), - ('\u{1080a}', '\u{10835}', WC_ALetter), ('\u{10837}', '\u{10838}', WC_ALetter), - ('\u{1083c}', '\u{1083c}', WC_ALetter), ('\u{1083f}', '\u{10855}', WC_ALetter), - ('\u{10860}', '\u{10876}', WC_ALetter), ('\u{10880}', '\u{1089e}', WC_ALetter), - ('\u{108e0}', '\u{108f2}', WC_ALetter), ('\u{108f4}', '\u{108f5}', WC_ALetter), - ('\u{10900}', '\u{10915}', WC_ALetter), ('\u{10920}', '\u{10939}', WC_ALetter), - ('\u{10940}', '\u{10959}', WC_ALetter), ('\u{10980}', '\u{109b7}', WC_ALetter), - ('\u{109be}', '\u{109bf}', WC_ALetter), ('\u{10a00}', '\u{10a00}', WC_ALetter), - ('\u{10a01}', '\u{10a03}', WC_Extend), ('\u{10a05}', '\u{10a06}', WC_Extend), ('\u{10a0c}', - '\u{10a0f}', WC_Extend), ('\u{10a10}', '\u{10a13}', WC_ALetter), ('\u{10a15}', '\u{10a17}', - WC_ALetter), ('\u{10a19}', '\u{10a35}', WC_ALetter), ('\u{10a38}', '\u{10a3a}', WC_Extend), - ('\u{10a3f}', '\u{10a3f}', WC_Extend), ('\u{10a60}', '\u{10a7c}', WC_ALetter), ('\u{10a80}', - '\u{10a9c}', WC_ALetter), ('\u{10ac0}', '\u{10ac7}', WC_ALetter), ('\u{10ac9}', '\u{10ae4}', - WC_ALetter), ('\u{10ae5}', '\u{10ae6}', WC_Extend), ('\u{10b00}', '\u{10b35}', WC_ALetter), - ('\u{10b40}', '\u{10b55}', WC_ALetter), ('\u{10b60}', '\u{10b72}', WC_ALetter), - ('\u{10b80}', '\u{10b91}', WC_ALetter), ('\u{10c00}', '\u{10c48}', WC_ALetter), - ('\u{10c80}', '\u{10cb2}', WC_ALetter), ('\u{10cc0}', '\u{10cf2}', WC_ALetter), - ('\u{10d00}', '\u{10d23}', WC_ALetter), ('\u{10d24}', '\u{10d27}', WC_Extend), ('\u{10d30}', - '\u{10d39}', WC_Numeric), ('\u{10d40}', '\u{10d49}', WC_Numeric), ('\u{10d4a}', '\u{10d65}', - WC_ALetter), ('\u{10d69}', '\u{10d6d}', WC_Extend), ('\u{10d6f}', '\u{10d85}', WC_ALetter), - ('\u{10e80}', '\u{10ea9}', WC_ALetter), ('\u{10eab}', '\u{10eac}', WC_Extend), ('\u{10eb0}', - '\u{10eb1}', WC_ALetter), ('\u{10ec2}', '\u{10ec7}', WC_ALetter), ('\u{10efa}', '\u{10eff}', - WC_Extend), ('\u{10f00}', '\u{10f1c}', WC_ALetter), ('\u{10f27}', '\u{10f27}', WC_ALetter), - ('\u{10f30}', '\u{10f45}', WC_ALetter), ('\u{10f46}', '\u{10f50}', WC_Extend), ('\u{10f70}', - '\u{10f81}', WC_ALetter), ('\u{10f82}', '\u{10f85}', WC_Extend), ('\u{10fb0}', '\u{10fc4}', - WC_ALetter), ('\u{10fe0}', '\u{10ff6}', WC_ALetter), ('\u{11000}', '\u{11002}', WC_Extend), - ('\u{11003}', '\u{11037}', WC_ALetter), ('\u{11038}', '\u{11046}', WC_Extend), ('\u{11066}', - '\u{1106f}', WC_Numeric), ('\u{11070}', '\u{11070}', WC_Extend), ('\u{11071}', '\u{11072}', - WC_ALetter), ('\u{11073}', '\u{11074}', WC_Extend), ('\u{11075}', '\u{11075}', WC_ALetter), - ('\u{1107f}', '\u{11082}', WC_Extend), ('\u{11083}', '\u{110af}', WC_ALetter), ('\u{110b0}', - '\u{110ba}', WC_Extend), ('\u{110bd}', '\u{110bd}', WC_Numeric), ('\u{110c2}', '\u{110c2}', - WC_Extend), ('\u{110cd}', '\u{110cd}', WC_Numeric), ('\u{110d0}', '\u{110e8}', WC_ALetter), - ('\u{110f0}', '\u{110f9}', WC_Numeric), ('\u{11100}', '\u{11102}', WC_Extend), ('\u{11103}', - '\u{11126}', WC_ALetter), ('\u{11127}', '\u{11134}', WC_Extend), ('\u{11136}', '\u{1113f}', - WC_Numeric), ('\u{11144}', '\u{11144}', WC_ALetter), ('\u{11145}', '\u{11146}', WC_Extend), - ('\u{11147}', '\u{11147}', WC_ALetter), ('\u{11150}', '\u{11172}', WC_ALetter), - ('\u{11173}', '\u{11173}', WC_Extend), ('\u{11176}', '\u{11176}', WC_ALetter), ('\u{11180}', - '\u{11182}', WC_Extend), ('\u{11183}', '\u{111b2}', WC_ALetter), ('\u{111b3}', '\u{111c0}', - WC_Extend), ('\u{111c1}', '\u{111c4}', WC_ALetter), ('\u{111c9}', '\u{111cc}', WC_Extend), - ('\u{111ce}', '\u{111cf}', WC_Extend), ('\u{111d0}', '\u{111d9}', WC_Numeric), ('\u{111da}', - '\u{111da}', WC_ALetter), ('\u{111dc}', '\u{111dc}', WC_ALetter), ('\u{11200}', '\u{11211}', - WC_ALetter), ('\u{11213}', '\u{1122b}', WC_ALetter), ('\u{1122c}', '\u{11237}', WC_Extend), - ('\u{1123e}', '\u{1123e}', WC_Extend), ('\u{1123f}', '\u{11240}', WC_ALetter), ('\u{11241}', - '\u{11241}', WC_Extend), ('\u{11280}', '\u{11286}', WC_ALetter), ('\u{11288}', '\u{11288}', - WC_ALetter), ('\u{1128a}', '\u{1128d}', WC_ALetter), ('\u{1128f}', '\u{1129d}', WC_ALetter), - ('\u{1129f}', '\u{112a8}', WC_ALetter), ('\u{112b0}', '\u{112de}', WC_ALetter), - ('\u{112df}', '\u{112ea}', WC_Extend), ('\u{112f0}', '\u{112f9}', WC_Numeric), ('\u{11300}', - '\u{11303}', WC_Extend), ('\u{11305}', '\u{1130c}', WC_ALetter), ('\u{1130f}', '\u{11310}', - WC_ALetter), ('\u{11313}', '\u{11328}', WC_ALetter), ('\u{1132a}', '\u{11330}', WC_ALetter), - ('\u{11332}', '\u{11333}', WC_ALetter), ('\u{11335}', '\u{11339}', WC_ALetter), - ('\u{1133b}', '\u{1133c}', WC_Extend), ('\u{1133d}', '\u{1133d}', WC_ALetter), ('\u{1133e}', - '\u{11344}', WC_Extend), ('\u{11347}', '\u{11348}', WC_Extend), ('\u{1134b}', '\u{1134d}', - WC_Extend), ('\u{11350}', '\u{11350}', WC_ALetter), ('\u{11357}', '\u{11357}', WC_Extend), - ('\u{1135d}', '\u{11361}', WC_ALetter), ('\u{11362}', '\u{11363}', WC_Extend), ('\u{11366}', - '\u{1136c}', WC_Extend), ('\u{11370}', '\u{11374}', WC_Extend), ('\u{11380}', '\u{11389}', - WC_ALetter), ('\u{1138b}', '\u{1138b}', WC_ALetter), ('\u{1138e}', '\u{1138e}', WC_ALetter), - ('\u{11390}', '\u{113b5}', WC_ALetter), ('\u{113b7}', '\u{113b7}', WC_ALetter), - ('\u{113b8}', '\u{113c0}', WC_Extend), ('\u{113c2}', '\u{113c2}', WC_Extend), ('\u{113c5}', - '\u{113c5}', WC_Extend), ('\u{113c7}', '\u{113ca}', WC_Extend), ('\u{113cc}', '\u{113d0}', - WC_Extend), ('\u{113d1}', '\u{113d1}', WC_ALetter), ('\u{113d2}', '\u{113d2}', WC_Extend), - ('\u{113d3}', '\u{113d3}', WC_ALetter), ('\u{113e1}', '\u{113e2}', WC_Extend), ('\u{11400}', - '\u{11434}', WC_ALetter), ('\u{11435}', '\u{11446}', WC_Extend), ('\u{11447}', '\u{1144a}', - WC_ALetter), ('\u{11450}', '\u{11459}', WC_Numeric), ('\u{1145e}', '\u{1145e}', WC_Extend), - ('\u{1145f}', '\u{11461}', WC_ALetter), ('\u{11480}', '\u{114af}', WC_ALetter), - ('\u{114b0}', '\u{114c3}', WC_Extend), ('\u{114c4}', '\u{114c5}', WC_ALetter), ('\u{114c7}', - '\u{114c7}', WC_ALetter), ('\u{114d0}', '\u{114d9}', WC_Numeric), ('\u{11580}', '\u{115ae}', - WC_ALetter), ('\u{115af}', '\u{115b5}', WC_Extend), ('\u{115b8}', '\u{115c0}', WC_Extend), - ('\u{115d8}', '\u{115db}', WC_ALetter), ('\u{115dc}', '\u{115dd}', WC_Extend), ('\u{11600}', - '\u{1162f}', WC_ALetter), ('\u{11630}', '\u{11640}', WC_Extend), ('\u{11644}', '\u{11644}', - WC_ALetter), ('\u{11650}', '\u{11659}', WC_Numeric), ('\u{11680}', '\u{116aa}', WC_ALetter), - ('\u{116ab}', '\u{116b7}', WC_Extend), ('\u{116b8}', '\u{116b8}', WC_ALetter), ('\u{116c0}', - '\u{116c9}', WC_Numeric), ('\u{116d0}', '\u{116e3}', WC_Numeric), ('\u{1171d}', '\u{1172b}', - WC_Extend), ('\u{11730}', '\u{11739}', WC_Numeric), ('\u{11800}', '\u{1182b}', WC_ALetter), - ('\u{1182c}', '\u{1183a}', WC_Extend), ('\u{118a0}', '\u{118df}', WC_ALetter), ('\u{118e0}', - '\u{118e9}', WC_Numeric), ('\u{118ff}', '\u{11906}', WC_ALetter), ('\u{11909}', '\u{11909}', - WC_ALetter), ('\u{1190c}', '\u{11913}', WC_ALetter), ('\u{11915}', '\u{11916}', WC_ALetter), - ('\u{11918}', '\u{1192f}', WC_ALetter), ('\u{11930}', '\u{11935}', WC_Extend), ('\u{11937}', - '\u{11938}', WC_Extend), ('\u{1193b}', '\u{1193e}', WC_Extend), ('\u{1193f}', '\u{1193f}', - WC_ALetter), ('\u{11940}', '\u{11940}', WC_Extend), ('\u{11941}', '\u{11941}', WC_ALetter), - ('\u{11942}', '\u{11943}', WC_Extend), ('\u{11950}', '\u{11959}', WC_Numeric), ('\u{119a0}', - '\u{119a7}', WC_ALetter), ('\u{119aa}', '\u{119d0}', WC_ALetter), ('\u{119d1}', '\u{119d7}', - WC_Extend), ('\u{119da}', '\u{119e0}', WC_Extend), ('\u{119e1}', '\u{119e1}', WC_ALetter), - ('\u{119e3}', '\u{119e3}', WC_ALetter), ('\u{119e4}', '\u{119e4}', WC_Extend), ('\u{11a00}', - '\u{11a00}', WC_ALetter), ('\u{11a01}', '\u{11a0a}', WC_Extend), ('\u{11a0b}', '\u{11a32}', - WC_ALetter), ('\u{11a33}', '\u{11a39}', WC_Extend), ('\u{11a3a}', '\u{11a3a}', WC_ALetter), - ('\u{11a3b}', '\u{11a3e}', WC_Extend), ('\u{11a47}', '\u{11a47}', WC_Extend), ('\u{11a50}', - '\u{11a50}', WC_ALetter), ('\u{11a51}', '\u{11a5b}', WC_Extend), ('\u{11a5c}', '\u{11a89}', - WC_ALetter), ('\u{11a8a}', '\u{11a99}', WC_Extend), ('\u{11a9d}', '\u{11a9d}', WC_ALetter), - ('\u{11ab0}', '\u{11af8}', WC_ALetter), ('\u{11b60}', '\u{11b67}', WC_Extend), ('\u{11bc0}', - '\u{11be0}', WC_ALetter), ('\u{11bf0}', '\u{11bf9}', WC_Numeric), ('\u{11c00}', '\u{11c08}', - WC_ALetter), ('\u{11c0a}', '\u{11c2e}', WC_ALetter), ('\u{11c2f}', '\u{11c36}', WC_Extend), - ('\u{11c38}', '\u{11c3f}', WC_Extend), ('\u{11c40}', '\u{11c40}', WC_ALetter), ('\u{11c50}', - '\u{11c59}', WC_Numeric), ('\u{11c72}', '\u{11c8f}', WC_ALetter), ('\u{11c92}', '\u{11ca7}', - WC_Extend), ('\u{11ca9}', '\u{11cb6}', WC_Extend), ('\u{11d00}', '\u{11d06}', WC_ALetter), - ('\u{11d08}', '\u{11d09}', WC_ALetter), ('\u{11d0b}', '\u{11d30}', WC_ALetter), - ('\u{11d31}', '\u{11d36}', WC_Extend), ('\u{11d3a}', '\u{11d3a}', WC_Extend), ('\u{11d3c}', - '\u{11d3d}', WC_Extend), ('\u{11d3f}', '\u{11d45}', WC_Extend), ('\u{11d46}', '\u{11d46}', - WC_ALetter), ('\u{11d47}', '\u{11d47}', WC_Extend), ('\u{11d50}', '\u{11d59}', WC_Numeric), - ('\u{11d60}', '\u{11d65}', WC_ALetter), ('\u{11d67}', '\u{11d68}', WC_ALetter), - ('\u{11d6a}', '\u{11d89}', WC_ALetter), ('\u{11d8a}', '\u{11d8e}', WC_Extend), ('\u{11d90}', - '\u{11d91}', WC_Extend), ('\u{11d93}', '\u{11d97}', WC_Extend), ('\u{11d98}', '\u{11d98}', - WC_ALetter), ('\u{11da0}', '\u{11da9}', WC_Numeric), ('\u{11db0}', '\u{11ddb}', WC_ALetter), - ('\u{11de0}', '\u{11de9}', WC_Numeric), ('\u{11ee0}', '\u{11ef2}', WC_ALetter), - ('\u{11ef3}', '\u{11ef6}', WC_Extend), ('\u{11f00}', '\u{11f01}', WC_Extend), ('\u{11f02}', - '\u{11f02}', WC_ALetter), ('\u{11f03}', '\u{11f03}', WC_Extend), ('\u{11f04}', '\u{11f10}', - WC_ALetter), ('\u{11f12}', '\u{11f33}', WC_ALetter), ('\u{11f34}', '\u{11f3a}', WC_Extend), - ('\u{11f3e}', '\u{11f42}', WC_Extend), ('\u{11f50}', '\u{11f59}', WC_Numeric), ('\u{11f5a}', - '\u{11f5a}', WC_Extend), ('\u{11fb0}', '\u{11fb0}', WC_ALetter), ('\u{12000}', '\u{12399}', - WC_ALetter), ('\u{12400}', '\u{1246e}', WC_ALetter), ('\u{12480}', '\u{12543}', WC_ALetter), - ('\u{12f90}', '\u{12ff0}', WC_ALetter), ('\u{13000}', '\u{1342f}', WC_ALetter), - ('\u{13430}', '\u{1343f}', WC_Format), ('\u{13440}', '\u{13440}', WC_Extend), ('\u{13441}', - '\u{13446}', WC_ALetter), ('\u{13447}', '\u{13455}', WC_Extend), ('\u{13460}', '\u{143fa}', - WC_ALetter), ('\u{14400}', '\u{14646}', WC_ALetter), ('\u{16100}', '\u{1611d}', WC_ALetter), - ('\u{1611e}', '\u{1612f}', WC_Extend), ('\u{16130}', '\u{16139}', WC_Numeric), ('\u{16800}', - '\u{16a38}', WC_ALetter), ('\u{16a40}', '\u{16a5e}', WC_ALetter), ('\u{16a60}', '\u{16a69}', - WC_Numeric), ('\u{16a70}', '\u{16abe}', WC_ALetter), ('\u{16ac0}', '\u{16ac9}', WC_Numeric), - ('\u{16ad0}', '\u{16aed}', WC_ALetter), ('\u{16af0}', '\u{16af4}', WC_Extend), ('\u{16b00}', - '\u{16b2f}', WC_ALetter), ('\u{16b30}', '\u{16b36}', WC_Extend), ('\u{16b40}', '\u{16b43}', - WC_ALetter), ('\u{16b50}', '\u{16b59}', WC_Numeric), ('\u{16b63}', '\u{16b77}', WC_ALetter), - ('\u{16b7d}', '\u{16b8f}', WC_ALetter), ('\u{16d40}', '\u{16d6c}', WC_ALetter), - ('\u{16d70}', '\u{16d79}', WC_Numeric), ('\u{16e40}', '\u{16e7f}', WC_ALetter), - ('\u{16ea0}', '\u{16eb8}', WC_ALetter), ('\u{16ebb}', '\u{16ed3}', WC_ALetter), - ('\u{16f00}', '\u{16f4a}', WC_ALetter), ('\u{16f4f}', '\u{16f4f}', WC_Extend), ('\u{16f50}', - '\u{16f50}', WC_ALetter), ('\u{16f51}', '\u{16f87}', WC_Extend), ('\u{16f8f}', '\u{16f92}', - WC_Extend), ('\u{16f93}', '\u{16f9f}', WC_ALetter), ('\u{16fe0}', '\u{16fe1}', WC_ALetter), - ('\u{16fe3}', '\u{16fe3}', WC_ALetter), ('\u{16fe4}', '\u{16fe4}', WC_Extend), ('\u{16ff0}', - '\u{16ff1}', WC_Extend), ('\u{1aff0}', '\u{1aff3}', WC_Katakana), ('\u{1aff5}', '\u{1affb}', - WC_Katakana), ('\u{1affd}', '\u{1affe}', WC_Katakana), ('\u{1b000}', '\u{1b000}', - WC_Katakana), ('\u{1b120}', '\u{1b122}', WC_Katakana), ('\u{1b155}', '\u{1b155}', - WC_Katakana), ('\u{1b164}', '\u{1b167}', WC_Katakana), ('\u{1bc00}', '\u{1bc6a}', - WC_ALetter), ('\u{1bc70}', '\u{1bc7c}', WC_ALetter), ('\u{1bc80}', '\u{1bc88}', WC_ALetter), - ('\u{1bc90}', '\u{1bc99}', WC_ALetter), ('\u{1bc9d}', '\u{1bc9e}', WC_Extend), ('\u{1bca0}', - '\u{1bca3}', WC_Format), ('\u{1ccf0}', '\u{1ccf9}', WC_Numeric), ('\u{1cf00}', '\u{1cf2d}', - WC_Extend), ('\u{1cf30}', '\u{1cf46}', WC_Extend), ('\u{1d165}', '\u{1d169}', WC_Extend), - ('\u{1d16d}', '\u{1d172}', WC_Extend), ('\u{1d173}', '\u{1d17a}', WC_Format), ('\u{1d17b}', - '\u{1d182}', WC_Extend), ('\u{1d185}', '\u{1d18b}', WC_Extend), ('\u{1d1aa}', '\u{1d1ad}', - WC_Extend), ('\u{1d242}', '\u{1d244}', WC_Extend), ('\u{1d400}', '\u{1d454}', WC_ALetter), - ('\u{1d456}', '\u{1d49c}', WC_ALetter), ('\u{1d49e}', '\u{1d49f}', WC_ALetter), - ('\u{1d4a2}', '\u{1d4a2}', WC_ALetter), ('\u{1d4a5}', '\u{1d4a6}', WC_ALetter), - ('\u{1d4a9}', '\u{1d4ac}', WC_ALetter), ('\u{1d4ae}', '\u{1d4b9}', WC_ALetter), - ('\u{1d4bb}', '\u{1d4bb}', WC_ALetter), ('\u{1d4bd}', '\u{1d4c3}', WC_ALetter), - ('\u{1d4c5}', '\u{1d505}', WC_ALetter), ('\u{1d507}', '\u{1d50a}', WC_ALetter), - ('\u{1d50d}', '\u{1d514}', WC_ALetter), ('\u{1d516}', '\u{1d51c}', WC_ALetter), - ('\u{1d51e}', '\u{1d539}', WC_ALetter), ('\u{1d53b}', '\u{1d53e}', WC_ALetter), - ('\u{1d540}', '\u{1d544}', WC_ALetter), ('\u{1d546}', '\u{1d546}', WC_ALetter), - ('\u{1d54a}', '\u{1d550}', WC_ALetter), ('\u{1d552}', '\u{1d6a5}', WC_ALetter), - ('\u{1d6a8}', '\u{1d6c0}', WC_ALetter), ('\u{1d6c2}', '\u{1d6da}', WC_ALetter), - ('\u{1d6dc}', '\u{1d6fa}', WC_ALetter), ('\u{1d6fc}', '\u{1d714}', WC_ALetter), - ('\u{1d716}', '\u{1d734}', WC_ALetter), ('\u{1d736}', '\u{1d74e}', WC_ALetter), - ('\u{1d750}', '\u{1d76e}', WC_ALetter), ('\u{1d770}', '\u{1d788}', WC_ALetter), - ('\u{1d78a}', '\u{1d7a8}', WC_ALetter), ('\u{1d7aa}', '\u{1d7c2}', WC_ALetter), - ('\u{1d7c4}', '\u{1d7cb}', WC_ALetter), ('\u{1d7ce}', '\u{1d7ff}', WC_Numeric), - ('\u{1da00}', '\u{1da36}', WC_Extend), ('\u{1da3b}', '\u{1da6c}', WC_Extend), ('\u{1da75}', - '\u{1da75}', WC_Extend), ('\u{1da84}', '\u{1da84}', WC_Extend), ('\u{1da9b}', '\u{1da9f}', - WC_Extend), ('\u{1daa1}', '\u{1daaf}', WC_Extend), ('\u{1df00}', '\u{1df1e}', WC_ALetter), - ('\u{1df25}', '\u{1df2a}', WC_ALetter), ('\u{1e000}', '\u{1e006}', WC_Extend), ('\u{1e008}', - '\u{1e018}', WC_Extend), ('\u{1e01b}', '\u{1e021}', WC_Extend), ('\u{1e023}', '\u{1e024}', - WC_Extend), ('\u{1e026}', '\u{1e02a}', WC_Extend), ('\u{1e030}', '\u{1e06d}', WC_ALetter), - ('\u{1e08f}', '\u{1e08f}', WC_Extend), ('\u{1e100}', '\u{1e12c}', WC_ALetter), ('\u{1e130}', - '\u{1e136}', WC_Extend), ('\u{1e137}', '\u{1e13d}', WC_ALetter), ('\u{1e140}', '\u{1e149}', - WC_Numeric), ('\u{1e14e}', '\u{1e14e}', WC_ALetter), ('\u{1e290}', '\u{1e2ad}', WC_ALetter), - ('\u{1e2ae}', '\u{1e2ae}', WC_Extend), ('\u{1e2c0}', '\u{1e2eb}', WC_ALetter), ('\u{1e2ec}', - '\u{1e2ef}', WC_Extend), ('\u{1e2f0}', '\u{1e2f9}', WC_Numeric), ('\u{1e4d0}', '\u{1e4eb}', - WC_ALetter), ('\u{1e4ec}', '\u{1e4ef}', WC_Extend), ('\u{1e4f0}', '\u{1e4f9}', WC_Numeric), - ('\u{1e5d0}', '\u{1e5ed}', WC_ALetter), ('\u{1e5ee}', '\u{1e5ef}', WC_Extend), ('\u{1e5f0}', - '\u{1e5f0}', WC_ALetter), ('\u{1e5f1}', '\u{1e5fa}', WC_Numeric), ('\u{1e6c0}', '\u{1e6de}', - WC_ALetter), ('\u{1e6e0}', '\u{1e6e2}', WC_ALetter), ('\u{1e6e3}', '\u{1e6e3}', WC_Extend), - ('\u{1e6e4}', '\u{1e6e5}', WC_ALetter), ('\u{1e6e6}', '\u{1e6e6}', WC_Extend), ('\u{1e6e7}', - '\u{1e6ed}', WC_ALetter), ('\u{1e6ee}', '\u{1e6ef}', WC_Extend), ('\u{1e6f0}', '\u{1e6f4}', - WC_ALetter), ('\u{1e6f5}', '\u{1e6f5}', WC_Extend), ('\u{1e6fe}', '\u{1e6ff}', WC_ALetter), - ('\u{1e7e0}', '\u{1e7e6}', WC_ALetter), ('\u{1e7e8}', '\u{1e7eb}', WC_ALetter), - ('\u{1e7ed}', '\u{1e7ee}', WC_ALetter), ('\u{1e7f0}', '\u{1e7fe}', WC_ALetter), - ('\u{1e800}', '\u{1e8c4}', WC_ALetter), ('\u{1e8d0}', '\u{1e8d6}', WC_Extend), ('\u{1e900}', - '\u{1e943}', WC_ALetter), ('\u{1e944}', '\u{1e94a}', WC_Extend), ('\u{1e94b}', '\u{1e94b}', - WC_ALetter), ('\u{1e950}', '\u{1e959}', WC_Numeric), ('\u{1ee00}', '\u{1ee03}', WC_ALetter), - ('\u{1ee05}', '\u{1ee1f}', WC_ALetter), ('\u{1ee21}', '\u{1ee22}', WC_ALetter), - ('\u{1ee24}', '\u{1ee24}', WC_ALetter), ('\u{1ee27}', '\u{1ee27}', WC_ALetter), - ('\u{1ee29}', '\u{1ee32}', WC_ALetter), ('\u{1ee34}', '\u{1ee37}', WC_ALetter), - ('\u{1ee39}', '\u{1ee39}', WC_ALetter), ('\u{1ee3b}', '\u{1ee3b}', WC_ALetter), - ('\u{1ee42}', '\u{1ee42}', WC_ALetter), ('\u{1ee47}', '\u{1ee47}', WC_ALetter), - ('\u{1ee49}', '\u{1ee49}', WC_ALetter), ('\u{1ee4b}', '\u{1ee4b}', WC_ALetter), - ('\u{1ee4d}', '\u{1ee4f}', WC_ALetter), ('\u{1ee51}', '\u{1ee52}', WC_ALetter), - ('\u{1ee54}', '\u{1ee54}', WC_ALetter), ('\u{1ee57}', '\u{1ee57}', WC_ALetter), - ('\u{1ee59}', '\u{1ee59}', WC_ALetter), ('\u{1ee5b}', '\u{1ee5b}', WC_ALetter), - ('\u{1ee5d}', '\u{1ee5d}', WC_ALetter), ('\u{1ee5f}', '\u{1ee5f}', WC_ALetter), - ('\u{1ee61}', '\u{1ee62}', WC_ALetter), ('\u{1ee64}', '\u{1ee64}', WC_ALetter), - ('\u{1ee67}', '\u{1ee6a}', WC_ALetter), ('\u{1ee6c}', '\u{1ee72}', WC_ALetter), - ('\u{1ee74}', '\u{1ee77}', WC_ALetter), ('\u{1ee79}', '\u{1ee7c}', WC_ALetter), - ('\u{1ee7e}', '\u{1ee7e}', WC_ALetter), ('\u{1ee80}', '\u{1ee89}', WC_ALetter), - ('\u{1ee8b}', '\u{1ee9b}', WC_ALetter), ('\u{1eea1}', '\u{1eea3}', WC_ALetter), - ('\u{1eea5}', '\u{1eea9}', WC_ALetter), ('\u{1eeab}', '\u{1eebb}', WC_ALetter), - ('\u{1f130}', '\u{1f149}', WC_ALetter), ('\u{1f150}', '\u{1f169}', WC_ALetter), - ('\u{1f170}', '\u{1f189}', WC_ALetter), ('\u{1f1e6}', '\u{1f1ff}', WC_Regional_Indicator), - ('\u{1f3fb}', '\u{1f3ff}', WC_Extend), ('\u{1fbf0}', '\u{1fbf9}', WC_Numeric), ('\u{e0001}', - '\u{e0001}', WC_Format), ('\u{e0020}', '\u{e007f}', WC_Extend), ('\u{e0100}', '\u{e01ef}', - WC_Extend) + const word_cat_table: &[u32] = &[ + 0x1, 0x149, 0x16D, 0x1A2, 0x1C1, 0x411, 0x421, 0x443, 0x461, 0x4F0, 0x501, 0x58B, 0x5A1, + 0x5CC, 0x5E1, 0x60E, 0x74A, 0x76B, 0x781, 0x820, 0xB61, 0xBE5, 0xC01, 0xC20, 0xF61, 0x10AD, + 0x10C1, 0x1540, 0x1561, 0x15A6, 0x15C1, 0x16A0, 0x16C1, 0x16EA, 0x1700, 0x1721, 0x1740, + 0x1761, 0x1800, 0x1AE1, 0x1B00, 0x1EE1, 0x1F00, 0x5B01, 0x5BC0, 0x6004, 0x6E00, 0x6EA1, + 0x6EC0, 0x6F01, 0x6F40, 0x6FCB, 0x6FE0, 0x7001, 0x70C0, 0x70EA, 0x7100, 0x7161, 0x7180, + 0x71A1, 0x71C0, 0x7441, 0x7460, 0x7EC1, 0x7EE0, 0x9041, 0x9064, 0x9140, 0xA601, 0xA620, + 0xAAE1, 0xAB20, 0xABA1, 0xABC0, 0xABEA, 0xAC00, 0xB12B, 0xB140, 0xB161, 0xB224, 0xB7C1, + 0xB7E4, 0xB801, 0xB824, 0xB861, 0xB884, 0xB8C1, 0xB8E4, 0xB901, 0xBA07, 0xBD61, 0xBDE7, + 0xBE60, 0xBE8A, 0xBEA1, 0xC00E, 0xC0C1, 0xC18B, 0xC1C1, 0xC204, 0xC361, 0xC386, 0xC3A1, + 0xC400, 0xC964, 0xCC0E, 0xCD41, 0xCD6E, 0xCD8B, 0xCDA1, 0xCDC0, 0xCE04, 0xCE20, 0xDA81, + 0xDAA0, 0xDAC4, 0xDBAE, 0xDBC1, 0xDBE4, 0xDCA0, 0xDCE4, 0xDD21, 0xDD44, 0xDDC0, 0xDE0E, + 0xDF40, 0xDFA1, 0xDFE0, 0xE001, 0xE1E0, 0xE224, 0xE240, 0xE604, 0xE961, 0xE9A0, 0xF4C4, + 0xF620, 0xF641, 0xF80E, 0xF940, 0xFD64, 0xFE80, 0xFEC1, 0xFF0B, 0xFF21, 0xFF40, 0xFF61, + 0xFFA4, 0xFFC1, 0x10000, 0x102C4, 0x10340, 0x10364, 0x10480, 0x104A4, 0x10500, 0x10524, + 0x105C1, 0x10800, 0x10B24, 0x10B81, 0x10C00, 0x10D61, 0x10E00, 0x11101, 0x11120, 0x1120E, + 0x11241, 0x112E4, 0x11400, 0x11944, 0x11C4E, 0x11C64, 0x12080, 0x12744, 0x127A0, 0x127C4, + 0x12A00, 0x12A24, 0x12B00, 0x12C44, 0x12C81, 0x12CCE, 0x12E01, 0x12E20, 0x13024, 0x13081, + 0x130A0, 0x131A1, 0x131E0, 0x13221, 0x13260, 0x13521, 0x13540, 0x13621, 0x13640, 0x13661, + 0x136C0, 0x13741, 0x13784, 0x137A0, 0x137C4, 0x138A1, 0x138E4, 0x13921, 0x13964, 0x139C0, + 0x139E1, 0x13AE4, 0x13B01, 0x13B80, 0x13BC1, 0x13BE0, 0x13C44, 0x13C81, 0x13CCE, 0x13E00, + 0x13E41, 0x13F80, 0x13FA1, 0x13FC4, 0x13FE1, 0x14024, 0x14081, 0x140A0, 0x14161, 0x141E0, + 0x14221, 0x14260, 0x14521, 0x14540, 0x14621, 0x14640, 0x14681, 0x146A0, 0x146E1, 0x14700, + 0x14741, 0x14784, 0x147A1, 0x147C4, 0x14861, 0x148E4, 0x14921, 0x14964, 0x149C1, 0x14A24, + 0x14A41, 0x14B20, 0x14BA1, 0x14BC0, 0x14BE1, 0x14CCE, 0x14E04, 0x14E40, 0x14EA4, 0x14EC1, + 0x15024, 0x15081, 0x150A0, 0x151C1, 0x151E0, 0x15241, 0x15260, 0x15521, 0x15540, 0x15621, + 0x15640, 0x15681, 0x156A0, 0x15741, 0x15784, 0x157A0, 0x157C4, 0x158C1, 0x158E4, 0x15941, + 0x15964, 0x159C1, 0x15A00, 0x15A21, 0x15C00, 0x15C44, 0x15C81, 0x15CCE, 0x15E01, 0x15F20, + 0x15F44, 0x16001, 0x16024, 0x16081, 0x160A0, 0x161A1, 0x161E0, 0x16221, 0x16260, 0x16521, + 0x16540, 0x16621, 0x16640, 0x16681, 0x166A0, 0x16741, 0x16784, 0x167A0, 0x167C4, 0x168A1, + 0x168E4, 0x16921, 0x16964, 0x169C1, 0x16AA4, 0x16B01, 0x16B80, 0x16BC1, 0x16BE0, 0x16C44, + 0x16C81, 0x16CCE, 0x16E01, 0x16E20, 0x16E41, 0x17044, 0x17060, 0x17081, 0x170A0, 0x17161, + 0x171C0, 0x17221, 0x17240, 0x172C1, 0x17320, 0x17361, 0x17380, 0x173A1, 0x173C0, 0x17401, + 0x17460, 0x174A1, 0x17500, 0x17561, 0x175C0, 0x17741, 0x177C4, 0x17861, 0x178C4, 0x17921, + 0x17944, 0x179C1, 0x17A00, 0x17A21, 0x17AE4, 0x17B01, 0x17CCE, 0x17E01, 0x18004, 0x180A0, + 0x181A1, 0x181C0, 0x18221, 0x18240, 0x18521, 0x18540, 0x18741, 0x18784, 0x187A0, 0x187C4, + 0x188A1, 0x188C4, 0x18921, 0x18944, 0x189C1, 0x18AA4, 0x18AE1, 0x18B00, 0x18B61, 0x18B80, + 0x18BC1, 0x18C00, 0x18C44, 0x18C81, 0x18CCE, 0x18E01, 0x19000, 0x19024, 0x19081, 0x190A0, + 0x191A1, 0x191C0, 0x19221, 0x19240, 0x19521, 0x19540, 0x19681, 0x196A0, 0x19741, 0x19784, + 0x197A0, 0x197C4, 0x198A1, 0x198C4, 0x19921, 0x19944, 0x199C1, 0x19AA4, 0x19AE1, 0x19B80, + 0x19BE1, 0x19C00, 0x19C44, 0x19C81, 0x19CCE, 0x19E01, 0x19E20, 0x19E64, 0x19E81, 0x1A004, + 0x1A080, 0x1A1A1, 0x1A1C0, 0x1A221, 0x1A240, 0x1A764, 0x1A7A0, 0x1A7C4, 0x1A8A1, 0x1A8C4, + 0x1A921, 0x1A944, 0x1A9C0, 0x1A9E1, 0x1AA80, 0x1AAE4, 0x1AB01, 0x1ABE0, 0x1AC44, 0x1AC81, + 0x1ACCE, 0x1AE01, 0x1AF40, 0x1B001, 0x1B024, 0x1B081, 0x1B0A0, 0x1B2E1, 0x1B340, 0x1B641, + 0x1B660, 0x1B781, 0x1B7A0, 0x1B7C1, 0x1B800, 0x1B8E1, 0x1B944, 0x1B961, 0x1B9E4, 0x1BAA1, + 0x1BAC4, 0x1BAE1, 0x1BB04, 0x1BC01, 0x1BCCE, 0x1BE01, 0x1BE44, 0x1BE81, 0x1C624, 0x1C641, + 0x1C684, 0x1C761, 0x1C8E4, 0x1C9E1, 0x1CA0E, 0x1CB41, 0x1D624, 0x1D641, 0x1D684, 0x1D7A1, + 0x1D904, 0x1D9E1, 0x1DA0E, 0x1DB41, 0x1E000, 0x1E021, 0x1E304, 0x1E341, 0x1E40E, 0x1E541, + 0x1E6A4, 0x1E6C1, 0x1E6E4, 0x1E701, 0x1E724, 0x1E741, 0x1E7C4, 0x1E800, 0x1E901, 0x1E920, + 0x1EDA1, 0x1EE24, 0x1F0A1, 0x1F0C4, 0x1F100, 0x1F1A4, 0x1F301, 0x1F324, 0x1F7A1, 0x1F8C4, + 0x1F8E1, 0x20564, 0x207E1, 0x2080E, 0x20941, 0x20AC4, 0x20B41, 0x20BC4, 0x20C21, 0x20C44, + 0x20CA1, 0x20CE4, 0x20DC1, 0x20E24, 0x20EA1, 0x21044, 0x211C1, 0x211E4, 0x2120E, 0x21344, + 0x213C1, 0x21400, 0x218C1, 0x218E0, 0x21901, 0x219A0, 0x219C1, 0x21A00, 0x21F61, 0x21F80, + 0x24921, 0x24940, 0x249C1, 0x24A00, 0x24AE1, 0x24B00, 0x24B21, 0x24B40, 0x24BC1, 0x24C00, + 0x25121, 0x25140, 0x251C1, 0x25200, 0x25621, 0x25640, 0x256C1, 0x25700, 0x257E1, 0x25800, + 0x25821, 0x25840, 0x258C1, 0x25900, 0x25AE1, 0x25B00, 0x26221, 0x26240, 0x262C1, 0x26300, + 0x26B61, 0x26BA4, 0x26C01, 0x27000, 0x27201, 0x27400, 0x27EC1, 0x27F00, 0x27FC1, 0x28020, + 0x2CDA1, 0x2CDE0, 0x2D011, 0x2D020, 0x2D361, 0x2D400, 0x2DD61, 0x2DDC0, 0x2DF21, 0x2E000, + 0x2E244, 0x2E2C1, 0x2E3E0, 0x2E644, 0x2E6A1, 0x2E800, 0x2EA44, 0x2EA81, 0x2EC00, 0x2EDA1, + 0x2EDC0, 0x2EE21, 0x2EE44, 0x2EE81, 0x2F684, 0x2FA81, 0x2FBA4, 0x2FBC1, 0x2FC0E, 0x2FD41, + 0x30164, 0x301C6, 0x301E4, 0x3020E, 0x30341, 0x30400, 0x30F21, 0x31000, 0x310A4, 0x310E0, + 0x31524, 0x31540, 0x31561, 0x31600, 0x31EC1, 0x32000, 0x323E1, 0x32404, 0x32581, 0x32604, + 0x32781, 0x328CE, 0x32A01, 0x33A0E, 0x33B61, 0x34000, 0x342E4, 0x34381, 0x34AA4, 0x34BE1, + 0x34C04, 0x34FA1, 0x34FE4, 0x3500E, 0x35141, 0x3520E, 0x35341, 0x35604, 0x35BC1, 0x35C04, + 0x35D81, 0x36004, 0x360A0, 0x36684, 0x368A0, 0x369A1, 0x36A0E, 0x36B41, 0x36D64, 0x36E81, + 0x37004, 0x37060, 0x37424, 0x375C0, 0x3760E, 0x37740, 0x37CC4, 0x37E81, 0x38000, 0x38484, + 0x38701, 0x3880E, 0x38941, 0x389A0, 0x38A0E, 0x38B40, 0x38FC1, 0x39000, 0x39161, 0x39200, + 0x39761, 0x397A0, 0x39801, 0x39A04, 0x39A61, 0x39A84, 0x39D20, 0x39DA4, 0x39DC0, 0x39E84, + 0x39EA0, 0x39EE4, 0x39F40, 0x39F61, 0x3A000, 0x3B804, 0x3C000, 0x3E2C1, 0x3E300, 0x3E3C1, + 0x3E400, 0x3E8C1, 0x3E900, 0x3E9C1, 0x3EA00, 0x3EB01, 0x3EB20, 0x3EB41, 0x3EB60, 0x3EB81, + 0x3EBA0, 0x3EBC1, 0x3EBE0, 0x3EFC1, 0x3F000, 0x3F6A1, 0x3F6C0, 0x3F7A1, 0x3F7C0, 0x3F7E1, + 0x3F840, 0x3F8A1, 0x3F8C0, 0x3F9A1, 0x3FA00, 0x3FA81, 0x3FAC0, 0x3FB81, 0x3FC00, 0x3FDA1, + 0x3FE40, 0x3FEA1, 0x3FEC0, 0x3FFA1, 0x40011, 0x400E1, 0x40111, 0x40161, 0x40184, 0x401B2, + 0x401C6, 0x40201, 0x4030C, 0x40341, 0x4048C, 0x404A1, 0x404EA, 0x4050D, 0x40546, 0x405E5, + 0x40601, 0x407E5, 0x40821, 0x4088B, 0x408A1, 0x40A85, 0x40AA1, 0x40BF1, 0x40C06, 0x40CA1, + 0x40CC6, 0x40E01, 0x40E20, 0x40E41, 0x40FE0, 0x41001, 0x41200, 0x413A1, 0x41A04, 0x41E21, + 0x42040, 0x42061, 0x420E0, 0x42101, 0x42140, 0x42281, 0x422A0, 0x422C1, 0x42320, 0x423C1, + 0x42480, 0x424A1, 0x424C0, 0x424E1, 0x42500, 0x42521, 0x42540, 0x425C1, 0x425E0, 0x42741, + 0x42780, 0x42801, 0x428A0, 0x42941, 0x429C0, 0x429E1, 0x42C00, 0x43121, 0x496C0, 0x49D41, + 0x58000, 0x59CA1, 0x59D60, 0x59DE4, 0x59E40, 0x59E81, 0x5A000, 0x5A4C1, 0x5A4E0, 0x5A501, + 0x5A5A0, 0x5A5C1, 0x5A600, 0x5AD01, 0x5ADE0, 0x5AE01, 0x5AFE4, 0x5B000, 0x5B2E1, 0x5B400, + 0x5B4E1, 0x5B500, 0x5B5E1, 0x5B600, 0x5B6E1, 0x5B700, 0x5B7E1, 0x5B800, 0x5B8E1, 0x5B900, + 0x5B9E1, 0x5BA00, 0x5BAE1, 0x5BB00, 0x5BBE1, 0x5BC04, 0x5C001, 0x5C5E0, 0x5C601, 0x60011, + 0x60021, 0x600A0, 0x600C1, 0x60544, 0x60601, 0x60628, 0x606C1, 0x60760, 0x607A1, 0x61324, + 0x61368, 0x613A1, 0x61408, 0x61F61, 0x61F88, 0x62001, 0x620A0, 0x62601, 0x62620, 0x631E1, + 0x63400, 0x63801, 0x63E08, 0x64001, 0x65A08, 0x65FE1, 0x66008, 0x66B01, 0x140000, 0x1491A1, + 0x149A00, 0x149FC1, 0x14A000, 0x14C1A1, 0x14C200, 0x14C40E, 0x14C540, 0x14C581, 0x14C800, + 0x14CDE4, 0x14CE61, 0x14CE84, 0x14CFC1, 0x14CFE0, 0x14D3C4, 0x14D400, 0x14DE04, 0x14DE41, + 0x14E100, 0x14FBA1, 0x14FE20, 0x150044, 0x150060, 0x1500C4, 0x1500E0, 0x150164, 0x150180, + 0x150464, 0x150501, 0x150584, 0x1505A1, 0x150800, 0x150E81, 0x151004, 0x151040, 0x151684, + 0x1518C1, 0x151A0E, 0x151B41, 0x151C04, 0x151E40, 0x151F01, 0x151F60, 0x151F81, 0x151FA0, + 0x151FE4, 0x15200E, 0x152140, 0x1524C4, 0x1525C1, 0x152600, 0x1528E4, 0x152A81, 0x152C00, + 0x152FA1, 0x153004, 0x153080, 0x153664, 0x153821, 0x1539E0, 0x153A0E, 0x153B41, 0x153CA4, + 0x153CC1, 0x153E0E, 0x153F41, 0x154000, 0x154524, 0x1546E1, 0x154800, 0x154864, 0x154880, + 0x154984, 0x1549C1, 0x154A0E, 0x154B41, 0x154F64, 0x154FC1, 0x155604, 0x155621, 0x155644, + 0x1556A1, 0x1556E4, 0x155721, 0x1557C4, 0x155801, 0x155824, 0x155841, 0x155C00, 0x155D64, + 0x155E01, 0x155E40, 0x155EA4, 0x155EE1, 0x156020, 0x1560E1, 0x156120, 0x1561E1, 0x156220, + 0x1562E1, 0x156400, 0x1564E1, 0x156500, 0x1565E1, 0x156600, 0x156D41, 0x156E00, 0x157C64, + 0x157D61, 0x157D84, 0x157DC1, 0x157E0E, 0x157F41, 0x158000, 0x1AF481, 0x1AF600, 0x1AF8E1, + 0x1AF960, 0x1AFF81, 0x1F6000, 0x1F60E1, 0x1F6260, 0x1F6301, 0x1F63A7, 0x1F63C4, 0x1F63E7, + 0x1F6521, 0x1F6547, 0x1F66E1, 0x1F6707, 0x1F67A1, 0x1F67C7, 0x1F67E1, 0x1F6807, 0x1F6841, + 0x1F6867, 0x1F68A1, 0x1F68C7, 0x1F6A00, 0x1F7641, 0x1F7A60, 0x1FA7C1, 0x1FAA00, 0x1FB201, + 0x1FB240, 0x1FB901, 0x1FBE00, 0x1FBF81, 0x1FC004, 0x1FC201, 0x1FC26A, 0x1FC281, 0x1FC404, + 0x1FC601, 0x1FC665, 0x1FC6A1, 0x1FC9A5, 0x1FCA0B, 0x1FCA21, 0x1FCA4C, 0x1FCA61, 0x1FCA8B, + 0x1FCAAA, 0x1FCAC1, 0x1FCE00, 0x1FCEA1, 0x1FCEC0, 0x1FDFA1, 0x1FDFE6, 0x1FE001, 0x1FE0EC, + 0x1FE101, 0x1FE18B, 0x1FE1A1, 0x1FE1CC, 0x1FE1E1, 0x1FE20E, 0x1FE34A, 0x1FE36B, 0x1FE381, + 0x1FE420, 0x1FE761, 0x1FE7E5, 0x1FE801, 0x1FE820, 0x1FEB61, 0x1FECC8, 0x1FF3C4, 0x1FF400, + 0x1FF7E1, 0x1FF840, 0x1FF901, 0x1FF940, 0x1FFA01, 0x1FFA40, 0x1FFB01, 0x1FFB40, 0x1FFBA1, + 0x1FFF26, 0x1FFF81, 0x200000, 0x200181, 0x2001A0, 0x2004E1, 0x200500, 0x200761, 0x200780, + 0x2007C1, 0x2007E0, 0x2009C1, 0x200A00, 0x200BC1, 0x201000, 0x201F61, 0x202800, 0x202EA1, + 0x203FA4, 0x203FC1, 0x205000, 0x2053A1, 0x205400, 0x205A21, 0x205C04, 0x205C21, 0x206000, + 0x206401, 0x2065A0, 0x206961, 0x206A00, 0x206EC4, 0x206F61, 0x207000, 0x2073C1, 0x207400, + 0x207881, 0x207900, 0x207A01, 0x207A20, 0x207AC1, 0x208000, 0x2093C1, 0x20940E, 0x209541, + 0x209600, 0x209A81, 0x209B00, 0x209F81, 0x20A000, 0x20A501, 0x20A600, 0x20AC81, 0x20AE00, + 0x20AF61, 0x20AF80, 0x20B161, 0x20B180, 0x20B261, 0x20B280, 0x20B2C1, 0x20B2E0, 0x20B441, + 0x20B460, 0x20B641, 0x20B660, 0x20B741, 0x20B760, 0x20B7A1, 0x20B800, 0x20BE81, 0x20C000, + 0x20E6E1, 0x20E800, 0x20EAC1, 0x20EC00, 0x20ED01, 0x20F000, 0x20F0C1, 0x20F0E0, 0x20F621, + 0x20F640, 0x20F761, 0x210000, 0x2100C1, 0x210100, 0x210121, 0x210140, 0x2106C1, 0x2106E0, + 0x210721, 0x210780, 0x2107A1, 0x2107E0, 0x210AC1, 0x210C00, 0x210EE1, 0x211000, 0x2113E1, + 0x211C00, 0x211E61, 0x211E80, 0x211EC1, 0x212000, 0x2122C1, 0x212400, 0x212741, 0x212800, + 0x212B41, 0x213000, 0x213701, 0x2137C0, 0x213801, 0x214000, 0x214024, 0x214081, 0x2140A4, + 0x2140E1, 0x214184, 0x214200, 0x214281, 0x2142A0, 0x214301, 0x214320, 0x2146C1, 0x214704, + 0x214761, 0x2147E4, 0x214801, 0x214C00, 0x214FA1, 0x215000, 0x2153A1, 0x215800, 0x215901, + 0x215920, 0x215CA4, 0x215CE1, 0x216000, 0x2166C1, 0x216800, 0x216AC1, 0x216C00, 0x216E61, + 0x217000, 0x217241, 0x218000, 0x218921, 0x219000, 0x219661, 0x219800, 0x219E61, 0x21A000, + 0x21A484, 0x21A501, 0x21A60E, 0x21A741, 0x21A80E, 0x21A940, 0x21ACC1, 0x21AD24, 0x21ADC1, + 0x21ADE0, 0x21B0C1, 0x21D000, 0x21D541, 0x21D564, 0x21D5A1, 0x21D600, 0x21D641, 0x21D840, + 0x21D901, 0x21DF44, 0x21E000, 0x21E3A1, 0x21E4E0, 0x21E501, 0x21E600, 0x21E8C4, 0x21EA21, + 0x21EE00, 0x21F044, 0x21F0C1, 0x21F600, 0x21F8A1, 0x21FC00, 0x21FEE1, 0x220004, 0x220060, + 0x220704, 0x2208E1, 0x220CCE, 0x220E04, 0x220E20, 0x220E64, 0x220EA0, 0x220EC1, 0x220FE4, + 0x221060, 0x221604, 0x221761, 0x2217AE, 0x2217C1, 0x221844, 0x221861, 0x2219AE, 0x2219C1, + 0x221A00, 0x221D21, 0x221E0E, 0x221F41, 0x222004, 0x222060, 0x2224E4, 0x2226A1, 0x2226CE, + 0x222801, 0x222880, 0x2228A4, 0x2228E0, 0x222901, 0x222A00, 0x222E64, 0x222E81, 0x222EC0, + 0x222EE1, 0x223004, 0x223060, 0x223664, 0x223820, 0x2238A1, 0x223924, 0x2239A1, 0x2239C4, + 0x223A0E, 0x223B40, 0x223B61, 0x223B80, 0x223BA1, 0x224000, 0x224241, 0x224260, 0x224584, + 0x224701, 0x2247C4, 0x2247E0, 0x224824, 0x224841, 0x225000, 0x2250E1, 0x225100, 0x225121, + 0x225140, 0x2251C1, 0x2251E0, 0x2253C1, 0x2253E0, 0x225521, 0x225600, 0x225BE4, 0x225D61, + 0x225E0E, 0x225F41, 0x226004, 0x226081, 0x2260A0, 0x2261A1, 0x2261E0, 0x226221, 0x226260, + 0x226521, 0x226540, 0x226621, 0x226640, 0x226681, 0x2266A0, 0x226741, 0x226764, 0x2267A0, + 0x2267C4, 0x2268A1, 0x2268E4, 0x226921, 0x226964, 0x2269C1, 0x226A00, 0x226A21, 0x226AE4, + 0x226B01, 0x226BA0, 0x226C44, 0x226C81, 0x226CC4, 0x226DA1, 0x226E04, 0x226EA1, 0x227000, + 0x227141, 0x227160, 0x227181, 0x2271C0, 0x2271E1, 0x227200, 0x2276C1, 0x2276E0, 0x227704, + 0x227821, 0x227844, 0x227861, 0x2278A4, 0x2278C1, 0x2278E4, 0x227961, 0x227984, 0x227A20, + 0x227A44, 0x227A60, 0x227A81, 0x227C24, 0x227C61, 0x228000, 0x2286A4, 0x2288E0, 0x228961, + 0x228A0E, 0x228B41, 0x228BC4, 0x228BE0, 0x228C41, 0x229000, 0x229604, 0x229880, 0x2298C1, + 0x2298E0, 0x229901, 0x229A0E, 0x229B41, 0x22B000, 0x22B5E4, 0x22B6C1, 0x22B704, 0x22B821, + 0x22BB00, 0x22BB84, 0x22BBC1, 0x22C000, 0x22C604, 0x22C821, 0x22C880, 0x22C8A1, 0x22CA0E, + 0x22CB41, 0x22D000, 0x22D564, 0x22D700, 0x22D721, 0x22D80E, 0x22D941, 0x22DA0E, 0x22DC81, + 0x22E3A4, 0x22E581, 0x22E60E, 0x22E741, 0x230000, 0x230584, 0x230761, 0x231400, 0x231C0E, + 0x231D41, 0x231FE0, 0x2320E1, 0x232120, 0x232141, 0x232180, 0x232281, 0x2322A0, 0x2322E1, + 0x232300, 0x232604, 0x2326C1, 0x2326E4, 0x232721, 0x232764, 0x2327E0, 0x232804, 0x232820, + 0x232844, 0x232881, 0x232A0E, 0x232B41, 0x233400, 0x233501, 0x233540, 0x233A24, 0x233B01, + 0x233B44, 0x233C20, 0x233C41, 0x233C60, 0x233C84, 0x233CA1, 0x234000, 0x234024, 0x234160, + 0x234664, 0x234740, 0x234764, 0x2347E1, 0x2348E4, 0x234901, 0x234A00, 0x234A24, 0x234B80, + 0x235144, 0x235341, 0x2353A0, 0x2353C1, 0x235600, 0x235F21, 0x236C04, 0x236D01, 0x237800, + 0x237C21, 0x237E0E, 0x237F41, 0x238000, 0x238121, 0x238140, 0x2385E4, 0x2386E1, 0x238704, + 0x238800, 0x238821, 0x238A0E, 0x238B41, 0x238E40, 0x239201, 0x239244, 0x239501, 0x239524, + 0x2396E1, 0x23A000, 0x23A0E1, 0x23A100, 0x23A141, 0x23A160, 0x23A624, 0x23A6E1, 0x23A744, + 0x23A761, 0x23A784, 0x23A7C1, 0x23A7E4, 0x23A8C0, 0x23A8E4, 0x23A901, 0x23AA0E, 0x23AB41, + 0x23AC00, 0x23ACC1, 0x23ACE0, 0x23AD21, 0x23AD40, 0x23B144, 0x23B1E1, 0x23B204, 0x23B241, + 0x23B264, 0x23B300, 0x23B321, 0x23B40E, 0x23B541, 0x23B600, 0x23BB81, 0x23BC0E, 0x23BD41, + 0x23DC00, 0x23DE64, 0x23DEE1, 0x23E004, 0x23E040, 0x23E064, 0x23E080, 0x23E221, 0x23E240, + 0x23E684, 0x23E761, 0x23E7C4, 0x23E861, 0x23EA0E, 0x23EB44, 0x23EB61, 0x23F600, 0x23F621, + 0x240000, 0x247341, 0x248000, 0x248DE1, 0x249000, 0x24A881, 0x25F200, 0x25FE21, 0x260000, + 0x268606, 0x268804, 0x268820, 0x2688E4, 0x268AC1, 0x268C00, 0x287F61, 0x288000, 0x28C8E1, + 0x2C2000, 0x2C23C4, 0x2C260E, 0x2C2741, 0x2D0000, 0x2D4721, 0x2D4800, 0x2D4BE1, 0x2D4C0E, + 0x2D4D41, 0x2D4E00, 0x2D57E1, 0x2D580E, 0x2D5941, 0x2D5A00, 0x2D5DC1, 0x2D5E04, 0x2D5EA1, + 0x2D6000, 0x2D6604, 0x2D66E1, 0x2D6800, 0x2D6881, 0x2D6A0E, 0x2D6B41, 0x2D6C60, 0x2D6F01, + 0x2D6FA0, 0x2D7201, 0x2DA800, 0x2DADA1, 0x2DAE0E, 0x2DAF41, 0x2DC800, 0x2DD001, 0x2DD400, + 0x2DD721, 0x2DD760, 0x2DDA81, 0x2DE000, 0x2DE961, 0x2DE9E4, 0x2DEA00, 0x2DEA24, 0x2DF101, + 0x2DF1E4, 0x2DF260, 0x2DF401, 0x2DFC00, 0x2DFC41, 0x2DFC60, 0x2DFC84, 0x2DFCA1, 0x2DFE04, + 0x2DFE41, 0x35FE08, 0x35FE81, 0x35FEA8, 0x35FF81, 0x35FFA8, 0x35FFE1, 0x360008, 0x360021, + 0x362408, 0x362461, 0x362AA8, 0x362AC1, 0x362C88, 0x362D01, 0x378000, 0x378D61, 0x378E00, + 0x378FA1, 0x379000, 0x379121, 0x379200, 0x379341, 0x3793A4, 0x3793E1, 0x379406, 0x379481, + 0x399E0E, 0x399F41, 0x39E004, 0x39E5C1, 0x39E604, 0x39E8E1, 0x3A2CA4, 0x3A2D41, 0x3A2DA4, + 0x3A2E66, 0x3A2F64, 0x3A3061, 0x3A30A4, 0x3A3181, 0x3A3544, 0x3A35C1, 0x3A4844, 0x3A48A1, + 0x3A8000, 0x3A8AA1, 0x3A8AC0, 0x3A93A1, 0x3A93C0, 0x3A9401, 0x3A9440, 0x3A9461, 0x3A94A0, + 0x3A94E1, 0x3A9520, 0x3A95A1, 0x3A95C0, 0x3A9741, 0x3A9760, 0x3A9781, 0x3A97A0, 0x3A9881, + 0x3A98A0, 0x3AA0C1, 0x3AA0E0, 0x3AA161, 0x3AA1A0, 0x3AA2A1, 0x3AA2C0, 0x3AA3A1, 0x3AA3C0, + 0x3AA741, 0x3AA760, 0x3AA7E1, 0x3AA800, 0x3AA8A1, 0x3AA8C0, 0x3AA8E1, 0x3AA940, 0x3AAA21, + 0x3AAA40, 0x3AD4C1, 0x3AD500, 0x3AD821, 0x3AD840, 0x3ADB61, 0x3ADB80, 0x3ADF61, 0x3ADF80, + 0x3AE2A1, 0x3AE2C0, 0x3AE6A1, 0x3AE6C0, 0x3AE9E1, 0x3AEA00, 0x3AEDE1, 0x3AEE00, 0x3AF121, + 0x3AF140, 0x3AF521, 0x3AF540, 0x3AF861, 0x3AF880, 0x3AF981, 0x3AF9CE, 0x3B0001, 0x3B4004, + 0x3B46E1, 0x3B4764, 0x3B4DA1, 0x3B4EA4, 0x3B4EC1, 0x3B5084, 0x3B50A1, 0x3B5364, 0x3B5401, + 0x3B5424, 0x3B5601, 0x3BE000, 0x3BE3E1, 0x3BE4A0, 0x3BE561, 0x3C0004, 0x3C00E1, 0x3C0104, + 0x3C0321, 0x3C0364, 0x3C0441, 0x3C0464, 0x3C04A1, 0x3C04C4, 0x3C0561, 0x3C0600, 0x3C0DC1, + 0x3C11E4, 0x3C1201, 0x3C2000, 0x3C25A1, 0x3C2604, 0x3C26E0, 0x3C27C1, 0x3C280E, 0x3C2941, + 0x3C29C0, 0x3C29E1, 0x3C5200, 0x3C55C4, 0x3C55E1, 0x3C5800, 0x3C5D84, 0x3C5E0E, 0x3C5F41, + 0x3C9A00, 0x3C9D84, 0x3C9E0E, 0x3C9F41, 0x3CBA00, 0x3CBDC4, 0x3CBE00, 0x3CBE2E, 0x3CBF61, + 0x3CD800, 0x3CDBE1, 0x3CDC00, 0x3CDC64, 0x3CDC80, 0x3CDCC4, 0x3CDCE0, 0x3CDDC4, 0x3CDE00, + 0x3CDEA4, 0x3CDEC1, 0x3CDFC0, 0x3CE001, 0x3CFC00, 0x3CFCE1, 0x3CFD00, 0x3CFD81, 0x3CFDA0, + 0x3CFDE1, 0x3CFE00, 0x3CFFE1, 0x3D0000, 0x3D18A1, 0x3D1A04, 0x3D1AE1, 0x3D2000, 0x3D2884, + 0x3D2960, 0x3D2981, 0x3D2A0E, 0x3D2B41, 0x3DC000, 0x3DC081, 0x3DC0A0, 0x3DC401, 0x3DC420, + 0x3DC461, 0x3DC480, 0x3DC4A1, 0x3DC4E0, 0x3DC501, 0x3DC520, 0x3DC661, 0x3DC680, 0x3DC701, + 0x3DC720, 0x3DC741, 0x3DC760, 0x3DC781, 0x3DC840, 0x3DC861, 0x3DC8E0, 0x3DC901, 0x3DC920, + 0x3DC941, 0x3DC960, 0x3DC981, 0x3DC9A0, 0x3DCA01, 0x3DCA20, 0x3DCA61, 0x3DCA80, 0x3DCAA1, + 0x3DCAE0, 0x3DCB01, 0x3DCB20, 0x3DCB41, 0x3DCB60, 0x3DCB81, 0x3DCBA0, 0x3DCBC1, 0x3DCBE0, + 0x3DCC01, 0x3DCC20, 0x3DCC61, 0x3DCC80, 0x3DCCA1, 0x3DCCE0, 0x3DCD61, 0x3DCD80, 0x3DCE61, + 0x3DCE80, 0x3DCF01, 0x3DCF20, 0x3DCFA1, 0x3DCFC0, 0x3DCFE1, 0x3DD000, 0x3DD141, 0x3DD160, + 0x3DD381, 0x3DD420, 0x3DD481, 0x3DD4A0, 0x3DD541, 0x3DD560, 0x3DD781, 0x3E2600, 0x3E2941, + 0x3E2A00, 0x3E2D41, 0x3E2E00, 0x3E3141, 0x3E3CCF, 0x3E4001, 0x3E7F64, 0x3E8001, 0x3F7E0E, + 0x3F7F41, 0x1C00026, 0x1C00041, 0x1C00404, 0x1C01001, 0x1C02004, 0x1C03E01 ]; } pub mod emoji { - use core::result::Result::{Ok, Err}; - pub use self::EmojiCat::*; #[allow(non_camel_case_types)] @@ -1960,202 +1290,143 @@ pub mod emoji { EC_Extended_Pictographic, } - fn bsearch_range_value_table(c: char, r: &[(char, char, EmojiCat)], default_lower: u32, default_upper: u32) -> (u32, u32, EmojiCat) { - use core::cmp::Ordering::{Equal, Less, Greater}; - match r.binary_search_by(|&(lo, hi, _)| { - if lo <= c && c <= hi { Equal } - else if hi < c { Less } - else { Greater } - }) { - Ok(idx) => { - let (lower, upper, cat) = r[idx]; - (lower as u32, upper as u32, cat) - } - Err(idx) => { - ( - if idx > 0 { r[idx-1].1 as u32 + 1 } else { default_lower }, - r.get(idx).map(|c|c.0 as u32 - 1).unwrap_or(default_upper), - EC_Any, - ) - } - } - } + /// Bits reserved for the category in each `emoji_cat_table` entry. + const CAT_BITS: u32 = 1; + + /// Category of a `emoji_cat_table` entry, indexed by its low `CAT_BITS` bits. + /// + /// Padded out to `1 << CAT_BITS` entries so that masking an entry proves the index in bounds. + /// `CATS[i] as usize == i`, so it doubles as an enumeration of every category. + pub const CATS: [EmojiCat; 1 << CAT_BITS] = [ + EC_Any, + EC_Extended_Pictographic, + ]; pub fn emoji_category(c: char) -> (u32, u32, EmojiCat) { - // Perform a quick O(1) lookup in a precomputed table to determine - // the slice of the range table to search in. + let c = c as u32; + + // Perform a quick O(1) lookup in a precomputed table + // to determine the slice of the range table to search in. let lookup_interval = 0x80; - let idx = (c as u32 / lookup_interval) as usize; - let range = emoji_cat_lookup.get(idx..(idx + 2)).map_or( - // If the `idx` is outside of the precomputed table - use the slice - // starting from the last covered index in the precomputed table and - // ending with the length of the range table. - 155..156, - |r| (r[0] as usize)..((r[1] + 1) as usize) - ); + let idx = (c / lookup_interval) as usize; + let (lo, hi) = match emoji_cat_lookup.get(idx..(idx + 2)) { + Some(r) => (r[0] as usize, r[1] as usize + 1), + // If the `idx` is outside of the precomputed table - use the slice + // starting from the last covered index in the precomputed table and + // ending with the length of the range table. + None => (311, emoji_cat_table.len()), + }; - // Compute pessimistic default lower and upper bounds on the category. - // If character doesn't map to any range and there is no adjacent range - // in the table slice - these bounds has to apply. - let lower = idx as u32 * lookup_interval; - let upper = lower + lookup_interval - 1; - bsearch_range_value_table(c, &emoji_cat_table[range], lower, upper) + // The ranges tile the codepoint space, + // so the entry covering `c` is the last one that starts at or before it. + // `emoji_cat_lookup` guarantees that the entry at `lo` starts at or before `c`, so the offset is never zero. + let i = lo + emoji_cat_table[lo..hi].partition_point(|&e| (e >> CAT_BITS) <= c) - 1; + let entry = emoji_cat_table[i]; + let upper = match emoji_cat_table.get(i + 1) { + Some(&next) => (next >> CAT_BITS) - 1, + None => 0x10FFFF, + }; + ( + entry >> CAT_BITS, + upper, + CATS[(entry & ((1 << CAT_BITS) - 1)) as usize], + ) } - const emoji_cat_lookup: &[u8] = &[ - 0, 0, 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, 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, 4, 4, 6, 8, 8, 8, 10, 13, 13, 14, 14, 18, 39, 56, 74, 78, 78, 78, 79, 79, 79, 79, - 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 85, 85, 85, 85, 85, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 89, 94, 96, 99, 105, 105, 106, 112, 112, 113, 118, 134, - 135, 141, 141, 142, 145, 150, 152, 153, 154, 155, 155, 155, 155, 155, 155, 155, 155, 155, - 155 + const emoji_cat_lookup: &[u16] = &[ + 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 8, 8, 12, 16, 16, 16, 20, 26, 26, 28, 28, 37, 78, 112, 148, 156, 156, 156, 158, + 158, 158, 158, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 170, 170, 170, 170, 170, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, + 174, 174, 174, 174, 174, 174, 174, 174, 174, 178, 188, 192, 198, 211, 211, 213, 225, 225, + 227, 236, 269, 271, 282, 282, 284, 290, 300, 305, 306, 309, 310, 310, 311, 311, 311, 311, + 311, 311, 311, 311 ]; - const emoji_cat_table: &[(char, char, EmojiCat)] = &[ - ('\u{a9}', '\u{a9}', EC_Extended_Pictographic), ('\u{ae}', '\u{ae}', - EC_Extended_Pictographic), ('\u{203c}', '\u{203c}', EC_Extended_Pictographic), ('\u{2049}', - '\u{2049}', EC_Extended_Pictographic), ('\u{2122}', '\u{2122}', EC_Extended_Pictographic), - ('\u{2139}', '\u{2139}', EC_Extended_Pictographic), ('\u{2194}', '\u{2199}', - EC_Extended_Pictographic), ('\u{21a9}', '\u{21aa}', EC_Extended_Pictographic), ('\u{231a}', - '\u{231b}', EC_Extended_Pictographic), ('\u{2328}', '\u{2328}', EC_Extended_Pictographic), - ('\u{23cf}', '\u{23cf}', EC_Extended_Pictographic), ('\u{23e9}', '\u{23f3}', - EC_Extended_Pictographic), ('\u{23f8}', '\u{23fa}', EC_Extended_Pictographic), ('\u{24c2}', - '\u{24c2}', EC_Extended_Pictographic), ('\u{25aa}', '\u{25ab}', EC_Extended_Pictographic), - ('\u{25b6}', '\u{25b6}', EC_Extended_Pictographic), ('\u{25c0}', '\u{25c0}', - EC_Extended_Pictographic), ('\u{25fb}', '\u{25fe}', EC_Extended_Pictographic), ('\u{2600}', - '\u{2604}', EC_Extended_Pictographic), ('\u{260e}', '\u{260e}', EC_Extended_Pictographic), - ('\u{2611}', '\u{2611}', EC_Extended_Pictographic), ('\u{2614}', '\u{2615}', - EC_Extended_Pictographic), ('\u{2618}', '\u{2618}', EC_Extended_Pictographic), ('\u{261d}', - '\u{261d}', EC_Extended_Pictographic), ('\u{2620}', '\u{2620}', EC_Extended_Pictographic), - ('\u{2622}', '\u{2623}', EC_Extended_Pictographic), ('\u{2626}', '\u{2626}', - EC_Extended_Pictographic), ('\u{262a}', '\u{262a}', EC_Extended_Pictographic), ('\u{262e}', - '\u{262f}', EC_Extended_Pictographic), ('\u{2638}', '\u{263a}', EC_Extended_Pictographic), - ('\u{2640}', '\u{2640}', EC_Extended_Pictographic), ('\u{2642}', '\u{2642}', - EC_Extended_Pictographic), ('\u{2648}', '\u{2653}', EC_Extended_Pictographic), ('\u{265f}', - '\u{2660}', EC_Extended_Pictographic), ('\u{2663}', '\u{2663}', EC_Extended_Pictographic), - ('\u{2665}', '\u{2666}', EC_Extended_Pictographic), ('\u{2668}', '\u{2668}', - EC_Extended_Pictographic), ('\u{267b}', '\u{267b}', EC_Extended_Pictographic), ('\u{267e}', - '\u{267f}', EC_Extended_Pictographic), ('\u{2692}', '\u{2697}', EC_Extended_Pictographic), - ('\u{2699}', '\u{2699}', EC_Extended_Pictographic), ('\u{269b}', '\u{269c}', - EC_Extended_Pictographic), ('\u{26a0}', '\u{26a1}', EC_Extended_Pictographic), ('\u{26a7}', - '\u{26a7}', EC_Extended_Pictographic), ('\u{26aa}', '\u{26ab}', EC_Extended_Pictographic), - ('\u{26b0}', '\u{26b1}', EC_Extended_Pictographic), ('\u{26bd}', '\u{26be}', - EC_Extended_Pictographic), ('\u{26c4}', '\u{26c5}', EC_Extended_Pictographic), ('\u{26c8}', - '\u{26c8}', EC_Extended_Pictographic), ('\u{26ce}', '\u{26cf}', EC_Extended_Pictographic), - ('\u{26d1}', '\u{26d1}', EC_Extended_Pictographic), ('\u{26d3}', '\u{26d4}', - EC_Extended_Pictographic), ('\u{26e9}', '\u{26ea}', EC_Extended_Pictographic), ('\u{26f0}', - '\u{26f5}', EC_Extended_Pictographic), ('\u{26f7}', '\u{26fa}', EC_Extended_Pictographic), - ('\u{26fd}', '\u{26fd}', EC_Extended_Pictographic), ('\u{2702}', '\u{2702}', - EC_Extended_Pictographic), ('\u{2705}', '\u{2705}', EC_Extended_Pictographic), ('\u{2708}', - '\u{270d}', EC_Extended_Pictographic), ('\u{270f}', '\u{270f}', EC_Extended_Pictographic), - ('\u{2712}', '\u{2712}', EC_Extended_Pictographic), ('\u{2714}', '\u{2714}', - EC_Extended_Pictographic), ('\u{2716}', '\u{2716}', EC_Extended_Pictographic), ('\u{271d}', - '\u{271d}', EC_Extended_Pictographic), ('\u{2721}', '\u{2721}', EC_Extended_Pictographic), - ('\u{2728}', '\u{2728}', EC_Extended_Pictographic), ('\u{2733}', '\u{2734}', - EC_Extended_Pictographic), ('\u{2744}', '\u{2744}', EC_Extended_Pictographic), ('\u{2747}', - '\u{2747}', EC_Extended_Pictographic), ('\u{274c}', '\u{274c}', EC_Extended_Pictographic), - ('\u{274e}', '\u{274e}', EC_Extended_Pictographic), ('\u{2753}', '\u{2755}', - EC_Extended_Pictographic), ('\u{2757}', '\u{2757}', EC_Extended_Pictographic), ('\u{2763}', - '\u{2764}', EC_Extended_Pictographic), ('\u{2795}', '\u{2797}', EC_Extended_Pictographic), - ('\u{27a1}', '\u{27a1}', EC_Extended_Pictographic), ('\u{27b0}', '\u{27b0}', - EC_Extended_Pictographic), ('\u{27bf}', '\u{27bf}', EC_Extended_Pictographic), ('\u{2934}', - '\u{2935}', EC_Extended_Pictographic), ('\u{2b05}', '\u{2b07}', EC_Extended_Pictographic), - ('\u{2b1b}', '\u{2b1c}', EC_Extended_Pictographic), ('\u{2b50}', '\u{2b50}', - EC_Extended_Pictographic), ('\u{2b55}', '\u{2b55}', EC_Extended_Pictographic), ('\u{3030}', - '\u{3030}', EC_Extended_Pictographic), ('\u{303d}', '\u{303d}', EC_Extended_Pictographic), - ('\u{3297}', '\u{3297}', EC_Extended_Pictographic), ('\u{3299}', '\u{3299}', - EC_Extended_Pictographic), ('\u{1f004}', '\u{1f004}', EC_Extended_Pictographic), - ('\u{1f02c}', '\u{1f02f}', EC_Extended_Pictographic), ('\u{1f094}', '\u{1f09f}', - EC_Extended_Pictographic), ('\u{1f0af}', '\u{1f0b0}', EC_Extended_Pictographic), - ('\u{1f0c0}', '\u{1f0c0}', EC_Extended_Pictographic), ('\u{1f0cf}', '\u{1f0d0}', - EC_Extended_Pictographic), ('\u{1f0f6}', '\u{1f0ff}', EC_Extended_Pictographic), - ('\u{1f170}', '\u{1f171}', EC_Extended_Pictographic), ('\u{1f17e}', '\u{1f17f}', - EC_Extended_Pictographic), ('\u{1f18e}', '\u{1f18e}', EC_Extended_Pictographic), - ('\u{1f191}', '\u{1f19a}', EC_Extended_Pictographic), ('\u{1f1ae}', '\u{1f1e5}', - EC_Extended_Pictographic), ('\u{1f201}', '\u{1f20f}', EC_Extended_Pictographic), - ('\u{1f21a}', '\u{1f21a}', EC_Extended_Pictographic), ('\u{1f22f}', '\u{1f22f}', - EC_Extended_Pictographic), ('\u{1f232}', '\u{1f23a}', EC_Extended_Pictographic), - ('\u{1f23c}', '\u{1f23f}', EC_Extended_Pictographic), ('\u{1f249}', '\u{1f25f}', - EC_Extended_Pictographic), ('\u{1f266}', '\u{1f321}', EC_Extended_Pictographic), - ('\u{1f324}', '\u{1f393}', EC_Extended_Pictographic), ('\u{1f396}', '\u{1f397}', - EC_Extended_Pictographic), ('\u{1f399}', '\u{1f39b}', EC_Extended_Pictographic), - ('\u{1f39e}', '\u{1f3f0}', EC_Extended_Pictographic), ('\u{1f3f3}', '\u{1f3f5}', - EC_Extended_Pictographic), ('\u{1f3f7}', '\u{1f3fa}', EC_Extended_Pictographic), - ('\u{1f400}', '\u{1f4fd}', EC_Extended_Pictographic), ('\u{1f4ff}', '\u{1f53d}', - EC_Extended_Pictographic), ('\u{1f549}', '\u{1f54e}', EC_Extended_Pictographic), - ('\u{1f550}', '\u{1f567}', EC_Extended_Pictographic), ('\u{1f56f}', '\u{1f570}', - EC_Extended_Pictographic), ('\u{1f573}', '\u{1f57a}', EC_Extended_Pictographic), - ('\u{1f587}', '\u{1f587}', EC_Extended_Pictographic), ('\u{1f58a}', '\u{1f58d}', - EC_Extended_Pictographic), ('\u{1f590}', '\u{1f590}', EC_Extended_Pictographic), - ('\u{1f595}', '\u{1f596}', EC_Extended_Pictographic), ('\u{1f5a4}', '\u{1f5a5}', - EC_Extended_Pictographic), ('\u{1f5a8}', '\u{1f5a8}', EC_Extended_Pictographic), - ('\u{1f5b1}', '\u{1f5b2}', EC_Extended_Pictographic), ('\u{1f5bc}', '\u{1f5bc}', - EC_Extended_Pictographic), ('\u{1f5c2}', '\u{1f5c4}', EC_Extended_Pictographic), - ('\u{1f5d1}', '\u{1f5d3}', EC_Extended_Pictographic), ('\u{1f5dc}', '\u{1f5de}', - EC_Extended_Pictographic), ('\u{1f5e1}', '\u{1f5e1}', EC_Extended_Pictographic), - ('\u{1f5e3}', '\u{1f5e3}', EC_Extended_Pictographic), ('\u{1f5e8}', '\u{1f5e8}', - EC_Extended_Pictographic), ('\u{1f5ef}', '\u{1f5ef}', EC_Extended_Pictographic), - ('\u{1f5f3}', '\u{1f5f3}', EC_Extended_Pictographic), ('\u{1f5fa}', '\u{1f64f}', - EC_Extended_Pictographic), ('\u{1f680}', '\u{1f6c5}', EC_Extended_Pictographic), - ('\u{1f6cb}', '\u{1f6d2}', EC_Extended_Pictographic), ('\u{1f6d5}', '\u{1f6e5}', - EC_Extended_Pictographic), ('\u{1f6e9}', '\u{1f6e9}', EC_Extended_Pictographic), - ('\u{1f6eb}', '\u{1f6f0}', EC_Extended_Pictographic), ('\u{1f6f3}', '\u{1f6ff}', - EC_Extended_Pictographic), ('\u{1f7da}', '\u{1f7ff}', EC_Extended_Pictographic), - ('\u{1f80c}', '\u{1f80f}', EC_Extended_Pictographic), ('\u{1f848}', '\u{1f84f}', - EC_Extended_Pictographic), ('\u{1f85a}', '\u{1f85f}', EC_Extended_Pictographic), - ('\u{1f888}', '\u{1f88f}', EC_Extended_Pictographic), ('\u{1f8ae}', '\u{1f8af}', - EC_Extended_Pictographic), ('\u{1f8bc}', '\u{1f8bf}', EC_Extended_Pictographic), - ('\u{1f8c2}', '\u{1f8cf}', EC_Extended_Pictographic), ('\u{1f8d9}', '\u{1f8ff}', - EC_Extended_Pictographic), ('\u{1f90c}', '\u{1f93a}', EC_Extended_Pictographic), - ('\u{1f93c}', '\u{1f945}', EC_Extended_Pictographic), ('\u{1f947}', '\u{1f9ff}', - EC_Extended_Pictographic), ('\u{1fa58}', '\u{1fa5f}', EC_Extended_Pictographic), - ('\u{1fa6e}', '\u{1faff}', EC_Extended_Pictographic), ('\u{1fc00}', '\u{1fffd}', - EC_Extended_Pictographic) + const emoji_cat_table: &[u32] = &[ + 0x0, 0x153, 0x154, 0x15D, 0x15E, 0x4079, 0x407A, 0x4093, 0x4094, 0x4245, 0x4246, 0x4273, + 0x4274, 0x4329, 0x4334, 0x4353, 0x4356, 0x4635, 0x4638, 0x4651, 0x4652, 0x479F, 0x47A0, + 0x47D3, 0x47E8, 0x47F1, 0x47F6, 0x4985, 0x4986, 0x4B55, 0x4B58, 0x4B6D, 0x4B6E, 0x4B81, + 0x4B82, 0x4BF7, 0x4BFE, 0x4C01, 0x4C0A, 0x4C1D, 0x4C1E, 0x4C23, 0x4C24, 0x4C29, 0x4C2C, + 0x4C31, 0x4C32, 0x4C3B, 0x4C3C, 0x4C41, 0x4C42, 0x4C45, 0x4C48, 0x4C4D, 0x4C4E, 0x4C55, + 0x4C56, 0x4C5D, 0x4C60, 0x4C71, 0x4C76, 0x4C81, 0x4C82, 0x4C85, 0x4C86, 0x4C91, 0x4CA8, + 0x4CBF, 0x4CC2, 0x4CC7, 0x4CC8, 0x4CCB, 0x4CCE, 0x4CD1, 0x4CD2, 0x4CF7, 0x4CF8, 0x4CFD, + 0x4D00, 0x4D25, 0x4D30, 0x4D33, 0x4D34, 0x4D37, 0x4D3A, 0x4D41, 0x4D44, 0x4D4F, 0x4D50, + 0x4D55, 0x4D58, 0x4D61, 0x4D64, 0x4D7B, 0x4D7E, 0x4D89, 0x4D8C, 0x4D91, 0x4D92, 0x4D9D, + 0x4DA0, 0x4DA3, 0x4DA4, 0x4DA7, 0x4DAA, 0x4DD3, 0x4DD6, 0x4DE1, 0x4DEC, 0x4DEF, 0x4DF6, + 0x4DFB, 0x4DFC, 0x4E05, 0x4E06, 0x4E0B, 0x4E0C, 0x4E11, 0x4E1C, 0x4E1F, 0x4E20, 0x4E25, + 0x4E26, 0x4E29, 0x4E2A, 0x4E2D, 0x4E2E, 0x4E3B, 0x4E3C, 0x4E43, 0x4E44, 0x4E51, 0x4E52, + 0x4E67, 0x4E6A, 0x4E89, 0x4E8A, 0x4E8F, 0x4E90, 0x4E99, 0x4E9A, 0x4E9D, 0x4E9E, 0x4EA7, + 0x4EAC, 0x4EAF, 0x4EB0, 0x4EC7, 0x4ECA, 0x4F2B, 0x4F30, 0x4F43, 0x4F44, 0x4F61, 0x4F62, + 0x4F7F, 0x4F80, 0x5269, 0x526C, 0x560B, 0x5610, 0x5637, 0x563A, 0x56A1, 0x56A2, 0x56AB, + 0x56AC, 0x6061, 0x6062, 0x607B, 0x607C, 0x652F, 0x6530, 0x6533, 0x6534, 0x3E009, 0x3E00A, + 0x3E059, 0x3E060, 0x3E129, 0x3E140, 0x3E15F, 0x3E162, 0x3E181, 0x3E182, 0x3E19F, 0x3E1A2, + 0x3E1ED, 0x3E200, 0x3E2E1, 0x3E2E4, 0x3E2FD, 0x3E300, 0x3E31D, 0x3E31E, 0x3E323, 0x3E336, + 0x3E35D, 0x3E3CC, 0x3E403, 0x3E420, 0x3E435, 0x3E436, 0x3E45F, 0x3E460, 0x3E465, 0x3E476, + 0x3E479, 0x3E480, 0x3E493, 0x3E4C0, 0x3E4CD, 0x3E644, 0x3E649, 0x3E728, 0x3E72D, 0x3E730, + 0x3E733, 0x3E738, 0x3E73D, 0x3E7E2, 0x3E7E7, 0x3E7EC, 0x3E7EF, 0x3E7F6, 0x3E801, 0x3E9FC, + 0x3E9FF, 0x3EA7C, 0x3EA93, 0x3EA9E, 0x3EAA1, 0x3EAD0, 0x3EADF, 0x3EAE2, 0x3EAE7, 0x3EAF6, + 0x3EB0F, 0x3EB10, 0x3EB15, 0x3EB1C, 0x3EB21, 0x3EB22, 0x3EB2B, 0x3EB2E, 0x3EB49, 0x3EB4C, + 0x3EB51, 0x3EB52, 0x3EB63, 0x3EB66, 0x3EB79, 0x3EB7A, 0x3EB85, 0x3EB8A, 0x3EBA3, 0x3EBA8, + 0x3EBB9, 0x3EBBE, 0x3EBC3, 0x3EBC4, 0x3EBC7, 0x3EBC8, 0x3EBD1, 0x3EBD2, 0x3EBDF, 0x3EBE0, + 0x3EBE7, 0x3EBE8, 0x3EBF5, 0x3ECA0, 0x3ED01, 0x3ED8C, 0x3ED97, 0x3EDA6, 0x3EDAB, 0x3EDCC, + 0x3EDD3, 0x3EDD4, 0x3EDD7, 0x3EDE2, 0x3EDE7, 0x3EE00, 0x3EFB5, 0x3F000, 0x3F019, 0x3F020, + 0x3F091, 0x3F0A0, 0x3F0B5, 0x3F0C0, 0x3F111, 0x3F120, 0x3F15D, 0x3F160, 0x3F179, 0x3F180, + 0x3F185, 0x3F1A0, 0x3F1B3, 0x3F200, 0x3F219, 0x3F276, 0x3F279, 0x3F28C, 0x3F28F, 0x3F400, + 0x3F4B1, 0x3F4C0, 0x3F4DD, 0x3F600, 0x3F801, 0x3FFFC ]; } pub mod sentence { - use core::result::Result::{Ok, Err}; - pub use self::SentenceCat::*; #[allow(non_camel_case_types)] @@ -2178,1164 +1449,472 @@ pub mod sentence { SC_Upper, } - fn bsearch_range_value_table(c: char, r: &[(char, char, SentenceCat)], default_lower: u32, default_upper: u32) -> (u32, u32, SentenceCat) { - use core::cmp::Ordering::{Equal, Less, Greater}; - match r.binary_search_by(|&(lo, hi, _)| { - if lo <= c && c <= hi { Equal } - else if hi < c { Less } - else { Greater } - }) { - Ok(idx) => { - let (lower, upper, cat) = r[idx]; - (lower as u32, upper as u32, cat) - } - Err(idx) => { - ( - if idx > 0 { r[idx-1].1 as u32 + 1 } else { default_lower }, - r.get(idx).map(|c|c.0 as u32 - 1).unwrap_or(default_upper), - SC_Any, - ) - } - } - } + /// Bits reserved for the category in each `sentence_cat_table` entry. + const CAT_BITS: u32 = 4; + + /// Category of a `sentence_cat_table` entry, indexed by its low `CAT_BITS` bits. + /// + /// Padded out to `1 << CAT_BITS` entries so that masking an entry proves the index in bounds. + /// `CATS[i] as usize == i`, so it doubles as an enumeration of every category. + pub const CATS: [SentenceCat; 1 << CAT_BITS] = [ + SC_ATerm, + SC_Any, + SC_CR, + SC_Close, + SC_Extend, + SC_Format, + SC_LF, + SC_Lower, + SC_Numeric, + SC_OLetter, + SC_SContinue, + SC_STerm, + SC_Sep, + SC_Sp, + SC_Upper, + SC_Any, + ]; pub fn sentence_category(c: char) -> (u32, u32, SentenceCat) { - // Perform a quick O(1) lookup in a precomputed table to determine - // the slice of the range table to search in. + let c = c as u32; + + // Perform a quick O(1) lookup in a precomputed table + // to determine the slice of the range table to search in. let lookup_interval = 0x80; - let idx = (c as u32 / lookup_interval) as usize; - let range = sentence_cat_lookup.get(idx..(idx + 2)).map_or( - // If the `idx` is outside of the precomputed table - use the slice - // starting from the last covered index in the precomputed table and - // ending with the length of the range table. - 2484..2495, - |r| (r[0] as usize)..((r[1] + 1) as usize) - ); + let idx = (c / lookup_interval) as usize; + let (lo, hi) = match sentence_cat_lookup.get(idx..(idx + 2)) { + Some(r) => (r[0] as usize, r[1] as usize + 1), + // If the `idx` is outside of the precomputed table - use the slice + // starting from the last covered index in the precomputed table and + // ending with the length of the range table. + None => (3340, sentence_cat_table.len()), + }; - // Compute pessimistic default lower and upper bounds on the category. - // If character doesn't map to any range and there is no adjacent range - // in the table slice - these bounds has to apply. - let lower = idx as u32 * lookup_interval; - let upper = lower + lookup_interval - 1; - bsearch_range_value_table(c, &sentence_cat_table[range], lower, upper) + // The ranges tile the codepoint space, + // so the entry covering `c` is the last one that starts at or before it. + // `sentence_cat_lookup` guarantees that the entry at `lo` starts at or before `c`, so the offset is never zero. + let i = lo + sentence_cat_table[lo..hi].partition_point(|&e| (e >> CAT_BITS) <= c) - 1; + let entry = sentence_cat_table[i]; + let upper = match sentence_cat_table.get(i + 1) { + Some(&next) => (next >> CAT_BITS) - 1, + None => 0x10FFFF, + }; + ( + entry >> CAT_BITS, + upper, + CATS[(entry & ((1 << CAT_BITS) - 1)) as usize], + ) } const sentence_cat_lookup: &[u16] = &[ - 0, 19, 31, 154, 247, 314, 323, 334, 376, 410, 529, 580, 589, 600, 613, 619, 630, 644, 651, - 662, 684, 703, 721, 739, 756, 772, 791, 807, 819, 826, 841, 851, 857, 872, 883, 883, 883, - 888, 896, 902, 905, 905, 905, 905, 905, 908, 913, 923, 930, 939, 945, 952, 955, 961, 967, - 977, 984, 992, 1006, 1006, 1008, 1136, 1255, 1273, 1294, 1314, 1317, 1342, 1346, 1346, 1346, - 1348, 1348, 1348, 1350, 1350, 1350, 1350, 1350, 1352, 1354, 1354, 1354, 1354, 1357, 1357, - 1357, 1357, 1357, 1375, 1483, 1489, 1499, 1508, 1508, 1508, 1508, 1519, 1524, 1525, 1528, - 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, - 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, - 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, - 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1529, 1529, 1529, 1529, 1529, - 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, - 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, - 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, - 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, - 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, - 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, - 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, - 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, - 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, - 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, - 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, - 1529, 1529, 1529, 1529, 1532, 1532, 1532, 1587, 1620, 1703, 1785, 1796, 1806, 1813, 1824, - 1835, 1852, 1859, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, - 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, - 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, - 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, - 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, - 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, - 1865, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, - 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, - 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, - 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, - 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1868, 1869, 1870, 1880, 1881, 1881, - 1881, 1883, 1886, 1904, 1906, 1923, 1931, 1937, 1938, 1939, 1940, 1940, 1943, 1947, 1951, - 1953, 1957, 1960, 1968, 1968, 1968, 1971, 1976, 1983, 1986, 1989, 1991, 2002, 2006, 2009, - 2010, 2011, 2013, 2021, 2022, 2022, 2027, 2032, 2037, 2046, 2055, 2066, 2078, 2086, 2095, - 2113, 2128, 2135, 2140, 2140, 2147, 2152, 2157, 2162, 2162, 2164, 2167, 2182, 2189, 2199, - 2204, 2205, 2207, 2214, 2217, 2229, 2237, 2237, 2240, 2250, 2251, 2251, 2251, 2251, 2251, - 2251, 2251, 2251, 2252, 2253, 2253, 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254, - 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2254, 2255, 2255, 2255, - 2255, 2255, 2255, 2255, 2255, 2255, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, - 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2260, - 2260, 2260, 2260, 2260, 2260, 2260, 2260, 2261, 2261, 2261, 2261, 2261, 2262, 2262, 2262, - 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, - 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, - 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, 2262, - 2262, 2262, 2262, 2262, 2262, 2262, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, - 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2265, 2269, 2274, 2281, 2282, 2282, 2282, - 2285, 2285, 2287, 2290, 2293, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, + 0, 29, 50, 173, 266, 333, 347, 360, 408, 442, 562, 617, 634, 650, 666, 674, 689, 709, 718, + 730, 767, 802, 834, 867, 901, 929, 962, 986, 1010, 1020, 1047, 1064, 1074, 1090, 1106, 1106, + 1106, 1116, 1132, 1144, 1149, 1150, 1150, 1150, 1150, 1154, 1162, 1178, 1188, 1202, 1210, + 1222, 1228, 1237, 1248, 1262, 1270, 1281, 1300, 1300, 1302, 1430, 1549, 1576, 1607, 1638, + 1644, 1683, 1687, 1687, 1687, 1691, 1691, 1691, 1694, 1694, 1694, 1694, 1694, 1698, 1702, + 1702, 1702, 1702, 1708, 1708, 1708, 1708, 1709, 1727, 1838, 1849, 1868, 1883, 1883, 1883, + 1884, 1902, 1911, 1914, 1919, 1919, 1919, 1919, 1920, 1920, 1920, 1920, 1920, 1920, 1920, + 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, + 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, + 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, 1920, + 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, + 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, + 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, + 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, + 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, + 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, + 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, + 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, + 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, + 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, + 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, + 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1922, 1927, 1927, 1927, 1986, 2021, 2106, + 2190, 2205, 2219, 2229, 2244, 2259, 2278, 2293, 2301, 2301, 2301, 2301, 2301, 2301, 2301, + 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, + 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, 2301, - 2301, 2301, 2301, 2302, 2303, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, - 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, - 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, - 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, - 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2304, 2307, 2307, - 2307, 2312, 2312, 2312, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, - 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2313, 2315, 2320, 2320, 2320, 2320, 2320, 2320, - 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, - 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2320, 2321, 2321, 2321, 2321, - 2321, 2323, 2323, 2323, 2323, 2326, 2329, 2330, 2330, 2330, 2330, 2335, 2348, 2360, 2365, - 2370, 2376, 2382, 2390, 2390, 2390, 2390, 2390, 2393, 2397, 2397, 2397, 2397, 2397, 2397, - 2397, 2397, 2397, 2401, 2401, 2407, 2408, 2413, 2413, 2413, 2418, 2418, 2418, 2418, 2421, - 2421, 2425, 2425, 2435, 2435, 2439, 2439, 2441, 2446, 2446, 2446, 2446, 2446, 2446, 2446, - 2446, 2446, 2446, 2474, 2479, 2479, 2479, 2479, 2479, 2481, 2482, 2482, 2482, 2482, 2482, - 2482, 2482, 2482, 2482, 2483, 2483, 2483, 2483, 2483, 2483, 2483, 2483, 2483, 2483, 2483, - 2484, 2484, 2484, 2484, 2484, 2484, 2484, 2484 + 2301, 2301, 2301, 2301, 2301, 2301, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, + 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, + 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, + 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, + 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2306, 2307, 2307, 2307, + 2309, 2311, 2329, 2331, 2331, 2331, 2334, 2340, 2367, 2370, 2398, 2412, 2424, 2425, 2427, + 2429, 2430, 2436, 2443, 2451, 2453, 2461, 2467, 2483, 2483, 2483, 2489, 2497, 2511, 2517, + 2523, 2527, 2547, 2554, 2560, 2562, 2564, 2568, 2580, 2581, 2582, 2591, 2600, 2608, 2619, + 2633, 2649, 2665, 2677, 2693, 2726, 2751, 2761, 2768, 2769, 2780, 2788, 2796, 2805, 2806, + 2808, 2813, 2836, 2848, 2861, 2868, 2870, 2875, 2886, 2892, 2913, 2926, 2926, 2931, 2944, + 2947, 2947, 2947, 2947, 2947, 2947, 2947, 2947, 2949, 2951, 2951, 2952, 2952, 2952, 2952, + 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, 2952, + 2952, 2952, 2955, 2955, 2955, 2955, 2955, 2955, 2955, 2955, 2955, 2961, 2961, 2961, 2961, + 2961, 2961, 2961, 2961, 2961, 2961, 2961, 2961, 2961, 2961, 2961, 2961, 2961, 2961, 2961, + 2961, 2961, 2961, 2961, 2961, 2961, 2961, 2961, 2961, 2961, 2961, 2961, 2963, 2963, 2963, + 2963, 2963, 2964, 2964, 2964, 2964, 2964, 2964, 2964, 2964, 2964, 2964, 2964, 2964, 2964, + 2964, 2964, 2964, 2964, 2964, 2964, 2964, 2964, 2964, 2964, 2964, 2964, 2964, 2964, 2964, + 2964, 2964, 2964, 2964, 2964, 2964, 2964, 2964, 2964, 2964, 2964, 2964, 2964, 2964, 2964, + 2964, 2964, 2964, 2964, 2964, 2964, 2964, 2964, 2964, 2964, 2965, 2968, 2968, 2968, 2968, + 2968, 2968, 2968, 2968, 2968, 2968, 2968, 2968, 2968, 2969, 2969, 2969, 2969, 2969, 2976, + 2985, 2996, 2997, 2997, 2997, 3002, 3002, 3005, 3012, 3016, 3029, 3029, 3029, 3029, 3029, + 3029, 3029, 3029, 3029, 3029, 3029, 3029, 3029, 3029, 3029, 3029, 3029, 3029, 3029, 3029, + 3029, 3029, 3029, 3029, 3029, 3029, 3029, 3029, 3029, 3029, 3029, 3029, 3029, 3029, 3029, + 3029, 3029, 3029, 3029, 3029, 3029, 3029, 3029, 3029, 3029, 3029, 3029, 3029, 3029, 3029, + 3029, 3029, 3029, 3029, 3029, 3029, 3029, 3029, 3031, 3033, 3034, 3034, 3034, 3034, 3034, + 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, + 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, + 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, + 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, 3034, + 3034, 3034, 3034, 3041, 3041, 3041, 3051, 3051, 3051, 3052, 3052, 3052, 3052, 3052, 3052, + 3052, 3052, 3052, 3052, 3052, 3052, 3052, 3052, 3052, 3052, 3052, 3052, 3053, 3057, 3064, + 3064, 3064, 3064, 3064, 3064, 3064, 3064, 3064, 3064, 3064, 3064, 3064, 3064, 3064, 3064, + 3064, 3064, 3064, 3064, 3064, 3064, 3064, 3064, 3064, 3064, 3064, 3064, 3064, 3064, 3064, + 3064, 3066, 3066, 3066, 3066, 3067, 3070, 3070, 3070, 3070, 3075, 3080, 3082, 3082, 3082, + 3083, 3089, 3110, 3131, 3136, 3141, 3151, 3161, 3173, 3173, 3173, 3173, 3174, 3179, 3187, + 3187, 3187, 3187, 3187, 3187, 3187, 3187, 3188, 3193, 3194, 3205, 3208, 3216, 3216, 3216, + 3223, 3223, 3223, 3223, 3227, 3227, 3232, 3232, 3245, 3245, 3254, 3254, 3258, 3264, 3264, + 3264, 3264, 3264, 3264, 3264, 3264, 3264, 3265, 3321, 3330, 3330, 3330, 3330, 3330, 3335, + 3336, 3336, 3336, 3336, 3336, 3336, 3336, 3336, 3336, 3338, 3338, 3338, 3338, 3338, 3338, + 3338, 3338, 3338, 3338, 3338, 3340, 3340, 3340, 3340, 3340, 3340, 3340, 3340 ]; - const sentence_cat_table: &[(char, char, SentenceCat)] = &[ - ('\u{9}', '\u{9}', SC_Sp), ('\u{a}', '\u{a}', SC_LF), ('\u{b}', '\u{c}', SC_Sp), ('\u{d}', - '\u{d}', SC_CR), ('\u{20}', '\u{20}', SC_Sp), ('\u{21}', '\u{21}', SC_STerm), ('\u{22}', - '\u{22}', SC_Close), ('\u{27}', '\u{29}', SC_Close), ('\u{2c}', '\u{2d}', SC_SContinue), - ('\u{2e}', '\u{2e}', SC_ATerm), ('\u{30}', '\u{39}', SC_Numeric), ('\u{3a}', '\u{3b}', - SC_SContinue), ('\u{3f}', '\u{3f}', SC_STerm), ('\u{41}', '\u{5a}', SC_Upper), ('\u{5b}', - '\u{5b}', SC_Close), ('\u{5d}', '\u{5d}', SC_Close), ('\u{61}', '\u{7a}', SC_Lower), - ('\u{7b}', '\u{7b}', SC_Close), ('\u{7d}', '\u{7d}', SC_Close), ('\u{85}', '\u{85}', - SC_Sep), ('\u{a0}', '\u{a0}', SC_Sp), ('\u{aa}', '\u{aa}', SC_Lower), ('\u{ab}', '\u{ab}', - SC_Close), ('\u{ad}', '\u{ad}', SC_Format), ('\u{b5}', '\u{b5}', SC_Lower), ('\u{ba}', - '\u{ba}', SC_Lower), ('\u{bb}', '\u{bb}', SC_Close), ('\u{c0}', '\u{d6}', SC_Upper), - ('\u{d8}', '\u{de}', SC_Upper), ('\u{df}', '\u{f6}', SC_Lower), ('\u{f8}', '\u{ff}', - SC_Lower), ('\u{100}', '\u{100}', SC_Upper), ('\u{101}', '\u{101}', SC_Lower), ('\u{102}', - '\u{102}', SC_Upper), ('\u{103}', '\u{103}', SC_Lower), ('\u{104}', '\u{104}', SC_Upper), - ('\u{105}', '\u{105}', SC_Lower), ('\u{106}', '\u{106}', SC_Upper), ('\u{107}', '\u{107}', - SC_Lower), ('\u{108}', '\u{108}', SC_Upper), ('\u{109}', '\u{109}', SC_Lower), ('\u{10a}', - '\u{10a}', SC_Upper), ('\u{10b}', '\u{10b}', SC_Lower), ('\u{10c}', '\u{10c}', SC_Upper), - ('\u{10d}', '\u{10d}', SC_Lower), ('\u{10e}', '\u{10e}', SC_Upper), ('\u{10f}', '\u{10f}', - SC_Lower), ('\u{110}', '\u{110}', SC_Upper), ('\u{111}', '\u{111}', SC_Lower), ('\u{112}', - '\u{112}', SC_Upper), ('\u{113}', '\u{113}', SC_Lower), ('\u{114}', '\u{114}', SC_Upper), - ('\u{115}', '\u{115}', SC_Lower), ('\u{116}', '\u{116}', SC_Upper), ('\u{117}', '\u{117}', - SC_Lower), ('\u{118}', '\u{118}', SC_Upper), ('\u{119}', '\u{119}', SC_Lower), ('\u{11a}', - '\u{11a}', SC_Upper), ('\u{11b}', '\u{11b}', SC_Lower), ('\u{11c}', '\u{11c}', SC_Upper), - ('\u{11d}', '\u{11d}', SC_Lower), ('\u{11e}', '\u{11e}', SC_Upper), ('\u{11f}', '\u{11f}', - SC_Lower), ('\u{120}', '\u{120}', SC_Upper), ('\u{121}', '\u{121}', SC_Lower), ('\u{122}', - '\u{122}', SC_Upper), ('\u{123}', '\u{123}', SC_Lower), ('\u{124}', '\u{124}', SC_Upper), - ('\u{125}', '\u{125}', SC_Lower), ('\u{126}', '\u{126}', SC_Upper), ('\u{127}', '\u{127}', - SC_Lower), ('\u{128}', '\u{128}', SC_Upper), ('\u{129}', '\u{129}', SC_Lower), ('\u{12a}', - '\u{12a}', SC_Upper), ('\u{12b}', '\u{12b}', SC_Lower), ('\u{12c}', '\u{12c}', SC_Upper), - ('\u{12d}', '\u{12d}', SC_Lower), ('\u{12e}', '\u{12e}', SC_Upper), ('\u{12f}', '\u{12f}', - SC_Lower), ('\u{130}', '\u{130}', SC_Upper), ('\u{131}', '\u{131}', SC_Lower), ('\u{132}', - '\u{132}', SC_Upper), ('\u{133}', '\u{133}', SC_Lower), ('\u{134}', '\u{134}', SC_Upper), - ('\u{135}', '\u{135}', SC_Lower), ('\u{136}', '\u{136}', SC_Upper), ('\u{137}', '\u{138}', - SC_Lower), ('\u{139}', '\u{139}', SC_Upper), ('\u{13a}', '\u{13a}', SC_Lower), ('\u{13b}', - '\u{13b}', SC_Upper), ('\u{13c}', '\u{13c}', SC_Lower), ('\u{13d}', '\u{13d}', SC_Upper), - ('\u{13e}', '\u{13e}', SC_Lower), ('\u{13f}', '\u{13f}', SC_Upper), ('\u{140}', '\u{140}', - SC_Lower), ('\u{141}', '\u{141}', SC_Upper), ('\u{142}', '\u{142}', SC_Lower), ('\u{143}', - '\u{143}', SC_Upper), ('\u{144}', '\u{144}', SC_Lower), ('\u{145}', '\u{145}', SC_Upper), - ('\u{146}', '\u{146}', SC_Lower), ('\u{147}', '\u{147}', SC_Upper), ('\u{148}', '\u{149}', - SC_Lower), ('\u{14a}', '\u{14a}', SC_Upper), ('\u{14b}', '\u{14b}', SC_Lower), ('\u{14c}', - '\u{14c}', SC_Upper), ('\u{14d}', '\u{14d}', SC_Lower), ('\u{14e}', '\u{14e}', SC_Upper), - ('\u{14f}', '\u{14f}', SC_Lower), ('\u{150}', '\u{150}', SC_Upper), ('\u{151}', '\u{151}', - SC_Lower), ('\u{152}', '\u{152}', SC_Upper), ('\u{153}', '\u{153}', SC_Lower), ('\u{154}', - '\u{154}', SC_Upper), ('\u{155}', '\u{155}', SC_Lower), ('\u{156}', '\u{156}', SC_Upper), - ('\u{157}', '\u{157}', SC_Lower), ('\u{158}', '\u{158}', SC_Upper), ('\u{159}', '\u{159}', - SC_Lower), ('\u{15a}', '\u{15a}', SC_Upper), ('\u{15b}', '\u{15b}', SC_Lower), ('\u{15c}', - '\u{15c}', SC_Upper), ('\u{15d}', '\u{15d}', SC_Lower), ('\u{15e}', '\u{15e}', SC_Upper), - ('\u{15f}', '\u{15f}', SC_Lower), ('\u{160}', '\u{160}', SC_Upper), ('\u{161}', '\u{161}', - SC_Lower), ('\u{162}', '\u{162}', SC_Upper), ('\u{163}', '\u{163}', SC_Lower), ('\u{164}', - '\u{164}', SC_Upper), ('\u{165}', '\u{165}', SC_Lower), ('\u{166}', '\u{166}', SC_Upper), - ('\u{167}', '\u{167}', SC_Lower), ('\u{168}', '\u{168}', SC_Upper), ('\u{169}', '\u{169}', - SC_Lower), ('\u{16a}', '\u{16a}', SC_Upper), ('\u{16b}', '\u{16b}', SC_Lower), ('\u{16c}', - '\u{16c}', SC_Upper), ('\u{16d}', '\u{16d}', SC_Lower), ('\u{16e}', '\u{16e}', SC_Upper), - ('\u{16f}', '\u{16f}', SC_Lower), ('\u{170}', '\u{170}', SC_Upper), ('\u{171}', '\u{171}', - SC_Lower), ('\u{172}', '\u{172}', SC_Upper), ('\u{173}', '\u{173}', SC_Lower), ('\u{174}', - '\u{174}', SC_Upper), ('\u{175}', '\u{175}', SC_Lower), ('\u{176}', '\u{176}', SC_Upper), - ('\u{177}', '\u{177}', SC_Lower), ('\u{178}', '\u{179}', SC_Upper), ('\u{17a}', '\u{17a}', - SC_Lower), ('\u{17b}', '\u{17b}', SC_Upper), ('\u{17c}', '\u{17c}', SC_Lower), ('\u{17d}', - '\u{17d}', SC_Upper), ('\u{17e}', '\u{180}', SC_Lower), ('\u{181}', '\u{182}', SC_Upper), - ('\u{183}', '\u{183}', SC_Lower), ('\u{184}', '\u{184}', SC_Upper), ('\u{185}', '\u{185}', - SC_Lower), ('\u{186}', '\u{187}', SC_Upper), ('\u{188}', '\u{188}', SC_Lower), ('\u{189}', - '\u{18b}', SC_Upper), ('\u{18c}', '\u{18d}', SC_Lower), ('\u{18e}', '\u{191}', SC_Upper), - ('\u{192}', '\u{192}', SC_Lower), ('\u{193}', '\u{194}', SC_Upper), ('\u{195}', '\u{195}', - SC_Lower), ('\u{196}', '\u{198}', SC_Upper), ('\u{199}', '\u{19b}', SC_Lower), ('\u{19c}', - '\u{19d}', SC_Upper), ('\u{19e}', '\u{19e}', SC_Lower), ('\u{19f}', '\u{1a0}', SC_Upper), - ('\u{1a1}', '\u{1a1}', SC_Lower), ('\u{1a2}', '\u{1a2}', SC_Upper), ('\u{1a3}', '\u{1a3}', - SC_Lower), ('\u{1a4}', '\u{1a4}', SC_Upper), ('\u{1a5}', '\u{1a5}', SC_Lower), ('\u{1a6}', - '\u{1a7}', SC_Upper), ('\u{1a8}', '\u{1a8}', SC_Lower), ('\u{1a9}', '\u{1a9}', SC_Upper), - ('\u{1aa}', '\u{1ab}', SC_Lower), ('\u{1ac}', '\u{1ac}', SC_Upper), ('\u{1ad}', '\u{1ad}', - SC_Lower), ('\u{1ae}', '\u{1af}', SC_Upper), ('\u{1b0}', '\u{1b0}', SC_Lower), ('\u{1b1}', - '\u{1b3}', SC_Upper), ('\u{1b4}', '\u{1b4}', SC_Lower), ('\u{1b5}', '\u{1b5}', SC_Upper), - ('\u{1b6}', '\u{1b6}', SC_Lower), ('\u{1b7}', '\u{1b8}', SC_Upper), ('\u{1b9}', '\u{1ba}', - SC_Lower), ('\u{1bb}', '\u{1bb}', SC_OLetter), ('\u{1bc}', '\u{1bc}', SC_Upper), ('\u{1bd}', - '\u{1bf}', SC_Lower), ('\u{1c0}', '\u{1c3}', SC_OLetter), ('\u{1c4}', '\u{1c5}', SC_Upper), - ('\u{1c6}', '\u{1c6}', SC_Lower), ('\u{1c7}', '\u{1c8}', SC_Upper), ('\u{1c9}', '\u{1c9}', - SC_Lower), ('\u{1ca}', '\u{1cb}', SC_Upper), ('\u{1cc}', '\u{1cc}', SC_Lower), ('\u{1cd}', - '\u{1cd}', SC_Upper), ('\u{1ce}', '\u{1ce}', SC_Lower), ('\u{1cf}', '\u{1cf}', SC_Upper), - ('\u{1d0}', '\u{1d0}', SC_Lower), ('\u{1d1}', '\u{1d1}', SC_Upper), ('\u{1d2}', '\u{1d2}', - SC_Lower), ('\u{1d3}', '\u{1d3}', SC_Upper), ('\u{1d4}', '\u{1d4}', SC_Lower), ('\u{1d5}', - '\u{1d5}', SC_Upper), ('\u{1d6}', '\u{1d6}', SC_Lower), ('\u{1d7}', '\u{1d7}', SC_Upper), - ('\u{1d8}', '\u{1d8}', SC_Lower), ('\u{1d9}', '\u{1d9}', SC_Upper), ('\u{1da}', '\u{1da}', - SC_Lower), ('\u{1db}', '\u{1db}', SC_Upper), ('\u{1dc}', '\u{1dd}', SC_Lower), ('\u{1de}', - '\u{1de}', SC_Upper), ('\u{1df}', '\u{1df}', SC_Lower), ('\u{1e0}', '\u{1e0}', SC_Upper), - ('\u{1e1}', '\u{1e1}', SC_Lower), ('\u{1e2}', '\u{1e2}', SC_Upper), ('\u{1e3}', '\u{1e3}', - SC_Lower), ('\u{1e4}', '\u{1e4}', SC_Upper), ('\u{1e5}', '\u{1e5}', SC_Lower), ('\u{1e6}', - '\u{1e6}', SC_Upper), ('\u{1e7}', '\u{1e7}', SC_Lower), ('\u{1e8}', '\u{1e8}', SC_Upper), - ('\u{1e9}', '\u{1e9}', SC_Lower), ('\u{1ea}', '\u{1ea}', SC_Upper), ('\u{1eb}', '\u{1eb}', - SC_Lower), ('\u{1ec}', '\u{1ec}', SC_Upper), ('\u{1ed}', '\u{1ed}', SC_Lower), ('\u{1ee}', - '\u{1ee}', SC_Upper), ('\u{1ef}', '\u{1f0}', SC_Lower), ('\u{1f1}', '\u{1f2}', SC_Upper), - ('\u{1f3}', '\u{1f3}', SC_Lower), ('\u{1f4}', '\u{1f4}', SC_Upper), ('\u{1f5}', '\u{1f5}', - SC_Lower), ('\u{1f6}', '\u{1f8}', SC_Upper), ('\u{1f9}', '\u{1f9}', SC_Lower), ('\u{1fa}', - '\u{1fa}', SC_Upper), ('\u{1fb}', '\u{1fb}', SC_Lower), ('\u{1fc}', '\u{1fc}', SC_Upper), - ('\u{1fd}', '\u{1fd}', SC_Lower), ('\u{1fe}', '\u{1fe}', SC_Upper), ('\u{1ff}', '\u{1ff}', - SC_Lower), ('\u{200}', '\u{200}', SC_Upper), ('\u{201}', '\u{201}', SC_Lower), ('\u{202}', - '\u{202}', SC_Upper), ('\u{203}', '\u{203}', SC_Lower), ('\u{204}', '\u{204}', SC_Upper), - ('\u{205}', '\u{205}', SC_Lower), ('\u{206}', '\u{206}', SC_Upper), ('\u{207}', '\u{207}', - SC_Lower), ('\u{208}', '\u{208}', SC_Upper), ('\u{209}', '\u{209}', SC_Lower), ('\u{20a}', - '\u{20a}', SC_Upper), ('\u{20b}', '\u{20b}', SC_Lower), ('\u{20c}', '\u{20c}', SC_Upper), - ('\u{20d}', '\u{20d}', SC_Lower), ('\u{20e}', '\u{20e}', SC_Upper), ('\u{20f}', '\u{20f}', - SC_Lower), ('\u{210}', '\u{210}', SC_Upper), ('\u{211}', '\u{211}', SC_Lower), ('\u{212}', - '\u{212}', SC_Upper), ('\u{213}', '\u{213}', SC_Lower), ('\u{214}', '\u{214}', SC_Upper), - ('\u{215}', '\u{215}', SC_Lower), ('\u{216}', '\u{216}', SC_Upper), ('\u{217}', '\u{217}', - SC_Lower), ('\u{218}', '\u{218}', SC_Upper), ('\u{219}', '\u{219}', SC_Lower), ('\u{21a}', - '\u{21a}', SC_Upper), ('\u{21b}', '\u{21b}', SC_Lower), ('\u{21c}', '\u{21c}', SC_Upper), - ('\u{21d}', '\u{21d}', SC_Lower), ('\u{21e}', '\u{21e}', SC_Upper), ('\u{21f}', '\u{21f}', - SC_Lower), ('\u{220}', '\u{220}', SC_Upper), ('\u{221}', '\u{221}', SC_Lower), ('\u{222}', - '\u{222}', SC_Upper), ('\u{223}', '\u{223}', SC_Lower), ('\u{224}', '\u{224}', SC_Upper), - ('\u{225}', '\u{225}', SC_Lower), ('\u{226}', '\u{226}', SC_Upper), ('\u{227}', '\u{227}', - SC_Lower), ('\u{228}', '\u{228}', SC_Upper), ('\u{229}', '\u{229}', SC_Lower), ('\u{22a}', - '\u{22a}', SC_Upper), ('\u{22b}', '\u{22b}', SC_Lower), ('\u{22c}', '\u{22c}', SC_Upper), - ('\u{22d}', '\u{22d}', SC_Lower), ('\u{22e}', '\u{22e}', SC_Upper), ('\u{22f}', '\u{22f}', - SC_Lower), ('\u{230}', '\u{230}', SC_Upper), ('\u{231}', '\u{231}', SC_Lower), ('\u{232}', - '\u{232}', SC_Upper), ('\u{233}', '\u{239}', SC_Lower), ('\u{23a}', '\u{23b}', SC_Upper), - ('\u{23c}', '\u{23c}', SC_Lower), ('\u{23d}', '\u{23e}', SC_Upper), ('\u{23f}', '\u{240}', - SC_Lower), ('\u{241}', '\u{241}', SC_Upper), ('\u{242}', '\u{242}', SC_Lower), ('\u{243}', - '\u{246}', SC_Upper), ('\u{247}', '\u{247}', SC_Lower), ('\u{248}', '\u{248}', SC_Upper), - ('\u{249}', '\u{249}', SC_Lower), ('\u{24a}', '\u{24a}', SC_Upper), ('\u{24b}', '\u{24b}', - SC_Lower), ('\u{24c}', '\u{24c}', SC_Upper), ('\u{24d}', '\u{24d}', SC_Lower), ('\u{24e}', - '\u{24e}', SC_Upper), ('\u{24f}', '\u{293}', SC_Lower), ('\u{294}', '\u{295}', SC_OLetter), - ('\u{296}', '\u{2b8}', SC_Lower), ('\u{2b9}', '\u{2bf}', SC_OLetter), ('\u{2c0}', '\u{2c1}', - SC_Lower), ('\u{2c6}', '\u{2d1}', SC_OLetter), ('\u{2e0}', '\u{2e4}', SC_Lower), ('\u{2ec}', - '\u{2ec}', SC_OLetter), ('\u{2ee}', '\u{2ee}', SC_OLetter), ('\u{300}', '\u{36f}', - SC_Extend), ('\u{370}', '\u{370}', SC_Upper), ('\u{371}', '\u{371}', SC_Lower), ('\u{372}', - '\u{372}', SC_Upper), ('\u{373}', '\u{373}', SC_Lower), ('\u{374}', '\u{374}', SC_OLetter), - ('\u{376}', '\u{376}', SC_Upper), ('\u{377}', '\u{377}', SC_Lower), ('\u{37a}', '\u{37d}', - SC_Lower), ('\u{37e}', '\u{37e}', SC_SContinue), ('\u{37f}', '\u{37f}', SC_Upper), - ('\u{386}', '\u{386}', SC_Upper), ('\u{388}', '\u{38a}', SC_Upper), ('\u{38c}', '\u{38c}', - SC_Upper), ('\u{38e}', '\u{38f}', SC_Upper), ('\u{390}', '\u{390}', SC_Lower), ('\u{391}', - '\u{3a1}', SC_Upper), ('\u{3a3}', '\u{3ab}', SC_Upper), ('\u{3ac}', '\u{3ce}', SC_Lower), - ('\u{3cf}', '\u{3cf}', SC_Upper), ('\u{3d0}', '\u{3d1}', SC_Lower), ('\u{3d2}', '\u{3d4}', - SC_Upper), ('\u{3d5}', '\u{3d7}', SC_Lower), ('\u{3d8}', '\u{3d8}', SC_Upper), ('\u{3d9}', - '\u{3d9}', SC_Lower), ('\u{3da}', '\u{3da}', SC_Upper), ('\u{3db}', '\u{3db}', SC_Lower), - ('\u{3dc}', '\u{3dc}', SC_Upper), ('\u{3dd}', '\u{3dd}', SC_Lower), ('\u{3de}', '\u{3de}', - SC_Upper), ('\u{3df}', '\u{3df}', SC_Lower), ('\u{3e0}', '\u{3e0}', SC_Upper), ('\u{3e1}', - '\u{3e1}', SC_Lower), ('\u{3e2}', '\u{3e2}', SC_Upper), ('\u{3e3}', '\u{3e3}', SC_Lower), - ('\u{3e4}', '\u{3e4}', SC_Upper), ('\u{3e5}', '\u{3e5}', SC_Lower), ('\u{3e6}', '\u{3e6}', - SC_Upper), ('\u{3e7}', '\u{3e7}', SC_Lower), ('\u{3e8}', '\u{3e8}', SC_Upper), ('\u{3e9}', - '\u{3e9}', SC_Lower), ('\u{3ea}', '\u{3ea}', SC_Upper), ('\u{3eb}', '\u{3eb}', SC_Lower), - ('\u{3ec}', '\u{3ec}', SC_Upper), ('\u{3ed}', '\u{3ed}', SC_Lower), ('\u{3ee}', '\u{3ee}', - SC_Upper), ('\u{3ef}', '\u{3f3}', SC_Lower), ('\u{3f4}', '\u{3f4}', SC_Upper), ('\u{3f5}', - '\u{3f5}', SC_Lower), ('\u{3f7}', '\u{3f7}', SC_Upper), ('\u{3f8}', '\u{3f8}', SC_Lower), - ('\u{3f9}', '\u{3fa}', SC_Upper), ('\u{3fb}', '\u{3fc}', SC_Lower), ('\u{3fd}', '\u{42f}', - SC_Upper), ('\u{430}', '\u{45f}', SC_Lower), ('\u{460}', '\u{460}', SC_Upper), ('\u{461}', - '\u{461}', SC_Lower), ('\u{462}', '\u{462}', SC_Upper), ('\u{463}', '\u{463}', SC_Lower), - ('\u{464}', '\u{464}', SC_Upper), ('\u{465}', '\u{465}', SC_Lower), ('\u{466}', '\u{466}', - SC_Upper), ('\u{467}', '\u{467}', SC_Lower), ('\u{468}', '\u{468}', SC_Upper), ('\u{469}', - '\u{469}', SC_Lower), ('\u{46a}', '\u{46a}', SC_Upper), ('\u{46b}', '\u{46b}', SC_Lower), - ('\u{46c}', '\u{46c}', SC_Upper), ('\u{46d}', '\u{46d}', SC_Lower), ('\u{46e}', '\u{46e}', - SC_Upper), ('\u{46f}', '\u{46f}', SC_Lower), ('\u{470}', '\u{470}', SC_Upper), ('\u{471}', - '\u{471}', SC_Lower), ('\u{472}', '\u{472}', SC_Upper), ('\u{473}', '\u{473}', SC_Lower), - ('\u{474}', '\u{474}', SC_Upper), ('\u{475}', '\u{475}', SC_Lower), ('\u{476}', '\u{476}', - SC_Upper), ('\u{477}', '\u{477}', SC_Lower), ('\u{478}', '\u{478}', SC_Upper), ('\u{479}', - '\u{479}', SC_Lower), ('\u{47a}', '\u{47a}', SC_Upper), ('\u{47b}', '\u{47b}', SC_Lower), - ('\u{47c}', '\u{47c}', SC_Upper), ('\u{47d}', '\u{47d}', SC_Lower), ('\u{47e}', '\u{47e}', - SC_Upper), ('\u{47f}', '\u{47f}', SC_Lower), ('\u{480}', '\u{480}', SC_Upper), ('\u{481}', - '\u{481}', SC_Lower), ('\u{483}', '\u{489}', SC_Extend), ('\u{48a}', '\u{48a}', SC_Upper), - ('\u{48b}', '\u{48b}', SC_Lower), ('\u{48c}', '\u{48c}', SC_Upper), ('\u{48d}', '\u{48d}', - SC_Lower), ('\u{48e}', '\u{48e}', SC_Upper), ('\u{48f}', '\u{48f}', SC_Lower), ('\u{490}', - '\u{490}', SC_Upper), ('\u{491}', '\u{491}', SC_Lower), ('\u{492}', '\u{492}', SC_Upper), - ('\u{493}', '\u{493}', SC_Lower), ('\u{494}', '\u{494}', SC_Upper), ('\u{495}', '\u{495}', - SC_Lower), ('\u{496}', '\u{496}', SC_Upper), ('\u{497}', '\u{497}', SC_Lower), ('\u{498}', - '\u{498}', SC_Upper), ('\u{499}', '\u{499}', SC_Lower), ('\u{49a}', '\u{49a}', SC_Upper), - ('\u{49b}', '\u{49b}', SC_Lower), ('\u{49c}', '\u{49c}', SC_Upper), ('\u{49d}', '\u{49d}', - SC_Lower), ('\u{49e}', '\u{49e}', SC_Upper), ('\u{49f}', '\u{49f}', SC_Lower), ('\u{4a0}', - '\u{4a0}', SC_Upper), ('\u{4a1}', '\u{4a1}', SC_Lower), ('\u{4a2}', '\u{4a2}', SC_Upper), - ('\u{4a3}', '\u{4a3}', SC_Lower), ('\u{4a4}', '\u{4a4}', SC_Upper), ('\u{4a5}', '\u{4a5}', - SC_Lower), ('\u{4a6}', '\u{4a6}', SC_Upper), ('\u{4a7}', '\u{4a7}', SC_Lower), ('\u{4a8}', - '\u{4a8}', SC_Upper), ('\u{4a9}', '\u{4a9}', SC_Lower), ('\u{4aa}', '\u{4aa}', SC_Upper), - ('\u{4ab}', '\u{4ab}', SC_Lower), ('\u{4ac}', '\u{4ac}', SC_Upper), ('\u{4ad}', '\u{4ad}', - SC_Lower), ('\u{4ae}', '\u{4ae}', SC_Upper), ('\u{4af}', '\u{4af}', SC_Lower), ('\u{4b0}', - '\u{4b0}', SC_Upper), ('\u{4b1}', '\u{4b1}', SC_Lower), ('\u{4b2}', '\u{4b2}', SC_Upper), - ('\u{4b3}', '\u{4b3}', SC_Lower), ('\u{4b4}', '\u{4b4}', SC_Upper), ('\u{4b5}', '\u{4b5}', - SC_Lower), ('\u{4b6}', '\u{4b6}', SC_Upper), ('\u{4b7}', '\u{4b7}', SC_Lower), ('\u{4b8}', - '\u{4b8}', SC_Upper), ('\u{4b9}', '\u{4b9}', SC_Lower), ('\u{4ba}', '\u{4ba}', SC_Upper), - ('\u{4bb}', '\u{4bb}', SC_Lower), ('\u{4bc}', '\u{4bc}', SC_Upper), ('\u{4bd}', '\u{4bd}', - SC_Lower), ('\u{4be}', '\u{4be}', SC_Upper), ('\u{4bf}', '\u{4bf}', SC_Lower), ('\u{4c0}', - '\u{4c1}', SC_Upper), ('\u{4c2}', '\u{4c2}', SC_Lower), ('\u{4c3}', '\u{4c3}', SC_Upper), - ('\u{4c4}', '\u{4c4}', SC_Lower), ('\u{4c5}', '\u{4c5}', SC_Upper), ('\u{4c6}', '\u{4c6}', - SC_Lower), ('\u{4c7}', '\u{4c7}', SC_Upper), ('\u{4c8}', '\u{4c8}', SC_Lower), ('\u{4c9}', - '\u{4c9}', SC_Upper), ('\u{4ca}', '\u{4ca}', SC_Lower), ('\u{4cb}', '\u{4cb}', SC_Upper), - ('\u{4cc}', '\u{4cc}', SC_Lower), ('\u{4cd}', '\u{4cd}', SC_Upper), ('\u{4ce}', '\u{4cf}', - SC_Lower), ('\u{4d0}', '\u{4d0}', SC_Upper), ('\u{4d1}', '\u{4d1}', SC_Lower), ('\u{4d2}', - '\u{4d2}', SC_Upper), ('\u{4d3}', '\u{4d3}', SC_Lower), ('\u{4d4}', '\u{4d4}', SC_Upper), - ('\u{4d5}', '\u{4d5}', SC_Lower), ('\u{4d6}', '\u{4d6}', SC_Upper), ('\u{4d7}', '\u{4d7}', - SC_Lower), ('\u{4d8}', '\u{4d8}', SC_Upper), ('\u{4d9}', '\u{4d9}', SC_Lower), ('\u{4da}', - '\u{4da}', SC_Upper), ('\u{4db}', '\u{4db}', SC_Lower), ('\u{4dc}', '\u{4dc}', SC_Upper), - ('\u{4dd}', '\u{4dd}', SC_Lower), ('\u{4de}', '\u{4de}', SC_Upper), ('\u{4df}', '\u{4df}', - SC_Lower), ('\u{4e0}', '\u{4e0}', SC_Upper), ('\u{4e1}', '\u{4e1}', SC_Lower), ('\u{4e2}', - '\u{4e2}', SC_Upper), ('\u{4e3}', '\u{4e3}', SC_Lower), ('\u{4e4}', '\u{4e4}', SC_Upper), - ('\u{4e5}', '\u{4e5}', SC_Lower), ('\u{4e6}', '\u{4e6}', SC_Upper), ('\u{4e7}', '\u{4e7}', - SC_Lower), ('\u{4e8}', '\u{4e8}', SC_Upper), ('\u{4e9}', '\u{4e9}', SC_Lower), ('\u{4ea}', - '\u{4ea}', SC_Upper), ('\u{4eb}', '\u{4eb}', SC_Lower), ('\u{4ec}', '\u{4ec}', SC_Upper), - ('\u{4ed}', '\u{4ed}', SC_Lower), ('\u{4ee}', '\u{4ee}', SC_Upper), ('\u{4ef}', '\u{4ef}', - SC_Lower), ('\u{4f0}', '\u{4f0}', SC_Upper), ('\u{4f1}', '\u{4f1}', SC_Lower), ('\u{4f2}', - '\u{4f2}', SC_Upper), ('\u{4f3}', '\u{4f3}', SC_Lower), ('\u{4f4}', '\u{4f4}', SC_Upper), - ('\u{4f5}', '\u{4f5}', SC_Lower), ('\u{4f6}', '\u{4f6}', SC_Upper), ('\u{4f7}', '\u{4f7}', - SC_Lower), ('\u{4f8}', '\u{4f8}', SC_Upper), ('\u{4f9}', '\u{4f9}', SC_Lower), ('\u{4fa}', - '\u{4fa}', SC_Upper), ('\u{4fb}', '\u{4fb}', SC_Lower), ('\u{4fc}', '\u{4fc}', SC_Upper), - ('\u{4fd}', '\u{4fd}', SC_Lower), ('\u{4fe}', '\u{4fe}', SC_Upper), ('\u{4ff}', '\u{4ff}', - SC_Lower), ('\u{500}', '\u{500}', SC_Upper), ('\u{501}', '\u{501}', SC_Lower), ('\u{502}', - '\u{502}', SC_Upper), ('\u{503}', '\u{503}', SC_Lower), ('\u{504}', '\u{504}', SC_Upper), - ('\u{505}', '\u{505}', SC_Lower), ('\u{506}', '\u{506}', SC_Upper), ('\u{507}', '\u{507}', - SC_Lower), ('\u{508}', '\u{508}', SC_Upper), ('\u{509}', '\u{509}', SC_Lower), ('\u{50a}', - '\u{50a}', SC_Upper), ('\u{50b}', '\u{50b}', SC_Lower), ('\u{50c}', '\u{50c}', SC_Upper), - ('\u{50d}', '\u{50d}', SC_Lower), ('\u{50e}', '\u{50e}', SC_Upper), ('\u{50f}', '\u{50f}', - SC_Lower), ('\u{510}', '\u{510}', SC_Upper), ('\u{511}', '\u{511}', SC_Lower), ('\u{512}', - '\u{512}', SC_Upper), ('\u{513}', '\u{513}', SC_Lower), ('\u{514}', '\u{514}', SC_Upper), - ('\u{515}', '\u{515}', SC_Lower), ('\u{516}', '\u{516}', SC_Upper), ('\u{517}', '\u{517}', - SC_Lower), ('\u{518}', '\u{518}', SC_Upper), ('\u{519}', '\u{519}', SC_Lower), ('\u{51a}', - '\u{51a}', SC_Upper), ('\u{51b}', '\u{51b}', SC_Lower), ('\u{51c}', '\u{51c}', SC_Upper), - ('\u{51d}', '\u{51d}', SC_Lower), ('\u{51e}', '\u{51e}', SC_Upper), ('\u{51f}', '\u{51f}', - SC_Lower), ('\u{520}', '\u{520}', SC_Upper), ('\u{521}', '\u{521}', SC_Lower), ('\u{522}', - '\u{522}', SC_Upper), ('\u{523}', '\u{523}', SC_Lower), ('\u{524}', '\u{524}', SC_Upper), - ('\u{525}', '\u{525}', SC_Lower), ('\u{526}', '\u{526}', SC_Upper), ('\u{527}', '\u{527}', - SC_Lower), ('\u{528}', '\u{528}', SC_Upper), ('\u{529}', '\u{529}', SC_Lower), ('\u{52a}', - '\u{52a}', SC_Upper), ('\u{52b}', '\u{52b}', SC_Lower), ('\u{52c}', '\u{52c}', SC_Upper), - ('\u{52d}', '\u{52d}', SC_Lower), ('\u{52e}', '\u{52e}', SC_Upper), ('\u{52f}', '\u{52f}', - SC_Lower), ('\u{531}', '\u{556}', SC_Upper), ('\u{559}', '\u{559}', SC_OLetter), ('\u{55d}', - '\u{55d}', SC_SContinue), ('\u{560}', '\u{588}', SC_Lower), ('\u{589}', '\u{589}', - SC_STerm), ('\u{591}', '\u{5bd}', SC_Extend), ('\u{5bf}', '\u{5bf}', SC_Extend), ('\u{5c1}', - '\u{5c2}', SC_Extend), ('\u{5c4}', '\u{5c5}', SC_Extend), ('\u{5c7}', '\u{5c7}', SC_Extend), - ('\u{5d0}', '\u{5ea}', SC_OLetter), ('\u{5ef}', '\u{5f3}', SC_OLetter), ('\u{600}', - '\u{605}', SC_Numeric), ('\u{60c}', '\u{60d}', SC_SContinue), ('\u{610}', '\u{61a}', - SC_Extend), ('\u{61c}', '\u{61c}', SC_Format), ('\u{61d}', '\u{61f}', SC_STerm), ('\u{620}', - '\u{64a}', SC_OLetter), ('\u{64b}', '\u{65f}', SC_Extend), ('\u{660}', '\u{669}', - SC_Numeric), ('\u{66b}', '\u{66c}', SC_Numeric), ('\u{66e}', '\u{66f}', SC_OLetter), - ('\u{670}', '\u{670}', SC_Extend), ('\u{671}', '\u{6d3}', SC_OLetter), ('\u{6d4}', - '\u{6d4}', SC_STerm), ('\u{6d5}', '\u{6d5}', SC_OLetter), ('\u{6d6}', '\u{6dc}', SC_Extend), - ('\u{6dd}', '\u{6dd}', SC_Numeric), ('\u{6df}', '\u{6e4}', SC_Extend), ('\u{6e5}', - '\u{6e6}', SC_OLetter), ('\u{6e7}', '\u{6e8}', SC_Extend), ('\u{6ea}', '\u{6ed}', - SC_Extend), ('\u{6ee}', '\u{6ef}', SC_OLetter), ('\u{6f0}', '\u{6f9}', SC_Numeric), - ('\u{6fa}', '\u{6fc}', SC_OLetter), ('\u{6ff}', '\u{6ff}', SC_OLetter), ('\u{700}', - '\u{702}', SC_STerm), ('\u{70f}', '\u{70f}', SC_Format), ('\u{710}', '\u{710}', SC_OLetter), - ('\u{711}', '\u{711}', SC_Extend), ('\u{712}', '\u{72f}', SC_OLetter), ('\u{730}', - '\u{74a}', SC_Extend), ('\u{74d}', '\u{7a5}', SC_OLetter), ('\u{7a6}', '\u{7b0}', - SC_Extend), ('\u{7b1}', '\u{7b1}', SC_OLetter), ('\u{7c0}', '\u{7c9}', SC_Numeric), - ('\u{7ca}', '\u{7ea}', SC_OLetter), ('\u{7eb}', '\u{7f3}', SC_Extend), ('\u{7f4}', - '\u{7f5}', SC_OLetter), ('\u{7f8}', '\u{7f8}', SC_SContinue), ('\u{7f9}', '\u{7f9}', - SC_STerm), ('\u{7fa}', '\u{7fa}', SC_OLetter), ('\u{7fd}', '\u{7fd}', SC_Extend), - ('\u{800}', '\u{815}', SC_OLetter), ('\u{816}', '\u{819}', SC_Extend), ('\u{81a}', - '\u{81a}', SC_OLetter), ('\u{81b}', '\u{823}', SC_Extend), ('\u{824}', '\u{824}', - SC_OLetter), ('\u{825}', '\u{827}', SC_Extend), ('\u{828}', '\u{828}', SC_OLetter), - ('\u{829}', '\u{82d}', SC_Extend), ('\u{837}', '\u{837}', SC_STerm), ('\u{839}', '\u{839}', - SC_STerm), ('\u{83d}', '\u{83e}', SC_STerm), ('\u{840}', '\u{858}', SC_OLetter), ('\u{859}', - '\u{85b}', SC_Extend), ('\u{860}', '\u{86a}', SC_OLetter), ('\u{870}', '\u{887}', - SC_OLetter), ('\u{889}', '\u{88f}', SC_OLetter), ('\u{890}', '\u{891}', SC_Numeric), - ('\u{897}', '\u{89f}', SC_Extend), ('\u{8a0}', '\u{8c9}', SC_OLetter), ('\u{8ca}', - '\u{8e1}', SC_Extend), ('\u{8e2}', '\u{8e2}', SC_Numeric), ('\u{8e3}', '\u{903}', - SC_Extend), ('\u{904}', '\u{939}', SC_OLetter), ('\u{93a}', '\u{93c}', SC_Extend), - ('\u{93d}', '\u{93d}', SC_OLetter), ('\u{93e}', '\u{94f}', SC_Extend), ('\u{950}', - '\u{950}', SC_OLetter), ('\u{951}', '\u{957}', SC_Extend), ('\u{958}', '\u{961}', - SC_OLetter), ('\u{962}', '\u{963}', SC_Extend), ('\u{964}', '\u{965}', SC_STerm), - ('\u{966}', '\u{96f}', SC_Numeric), ('\u{971}', '\u{980}', SC_OLetter), ('\u{981}', - '\u{983}', SC_Extend), ('\u{985}', '\u{98c}', SC_OLetter), ('\u{98f}', '\u{990}', - SC_OLetter), ('\u{993}', '\u{9a8}', SC_OLetter), ('\u{9aa}', '\u{9b0}', SC_OLetter), - ('\u{9b2}', '\u{9b2}', SC_OLetter), ('\u{9b6}', '\u{9b9}', SC_OLetter), ('\u{9bc}', - '\u{9bc}', SC_Extend), ('\u{9bd}', '\u{9bd}', SC_OLetter), ('\u{9be}', '\u{9c4}', - SC_Extend), ('\u{9c7}', '\u{9c8}', SC_Extend), ('\u{9cb}', '\u{9cd}', SC_Extend), - ('\u{9ce}', '\u{9ce}', SC_OLetter), ('\u{9d7}', '\u{9d7}', SC_Extend), ('\u{9dc}', - '\u{9dd}', SC_OLetter), ('\u{9df}', '\u{9e1}', SC_OLetter), ('\u{9e2}', '\u{9e3}', - SC_Extend), ('\u{9e6}', '\u{9ef}', SC_Numeric), ('\u{9f0}', '\u{9f1}', SC_OLetter), - ('\u{9fc}', '\u{9fc}', SC_OLetter), ('\u{9fe}', '\u{9fe}', SC_Extend), ('\u{a01}', - '\u{a03}', SC_Extend), ('\u{a05}', '\u{a0a}', SC_OLetter), ('\u{a0f}', '\u{a10}', - SC_OLetter), ('\u{a13}', '\u{a28}', SC_OLetter), ('\u{a2a}', '\u{a30}', SC_OLetter), - ('\u{a32}', '\u{a33}', SC_OLetter), ('\u{a35}', '\u{a36}', SC_OLetter), ('\u{a38}', - '\u{a39}', SC_OLetter), ('\u{a3c}', '\u{a3c}', SC_Extend), ('\u{a3e}', '\u{a42}', - SC_Extend), ('\u{a47}', '\u{a48}', SC_Extend), ('\u{a4b}', '\u{a4d}', SC_Extend), - ('\u{a51}', '\u{a51}', SC_Extend), ('\u{a59}', '\u{a5c}', SC_OLetter), ('\u{a5e}', - '\u{a5e}', SC_OLetter), ('\u{a66}', '\u{a6f}', SC_Numeric), ('\u{a70}', '\u{a71}', - SC_Extend), ('\u{a72}', '\u{a74}', SC_OLetter), ('\u{a75}', '\u{a75}', SC_Extend), - ('\u{a81}', '\u{a83}', SC_Extend), ('\u{a85}', '\u{a8d}', SC_OLetter), ('\u{a8f}', - '\u{a91}', SC_OLetter), ('\u{a93}', '\u{aa8}', SC_OLetter), ('\u{aaa}', '\u{ab0}', - SC_OLetter), ('\u{ab2}', '\u{ab3}', SC_OLetter), ('\u{ab5}', '\u{ab9}', SC_OLetter), - ('\u{abc}', '\u{abc}', SC_Extend), ('\u{abd}', '\u{abd}', SC_OLetter), ('\u{abe}', - '\u{ac5}', SC_Extend), ('\u{ac7}', '\u{ac9}', SC_Extend), ('\u{acb}', '\u{acd}', SC_Extend), - ('\u{ad0}', '\u{ad0}', SC_OLetter), ('\u{ae0}', '\u{ae1}', SC_OLetter), ('\u{ae2}', - '\u{ae3}', SC_Extend), ('\u{ae6}', '\u{aef}', SC_Numeric), ('\u{af9}', '\u{af9}', - SC_OLetter), ('\u{afa}', '\u{aff}', SC_Extend), ('\u{b01}', '\u{b03}', SC_Extend), - ('\u{b05}', '\u{b0c}', SC_OLetter), ('\u{b0f}', '\u{b10}', SC_OLetter), ('\u{b13}', - '\u{b28}', SC_OLetter), ('\u{b2a}', '\u{b30}', SC_OLetter), ('\u{b32}', '\u{b33}', - SC_OLetter), ('\u{b35}', '\u{b39}', SC_OLetter), ('\u{b3c}', '\u{b3c}', SC_Extend), - ('\u{b3d}', '\u{b3d}', SC_OLetter), ('\u{b3e}', '\u{b44}', SC_Extend), ('\u{b47}', - '\u{b48}', SC_Extend), ('\u{b4b}', '\u{b4d}', SC_Extend), ('\u{b55}', '\u{b57}', SC_Extend), - ('\u{b5c}', '\u{b5d}', SC_OLetter), ('\u{b5f}', '\u{b61}', SC_OLetter), ('\u{b62}', - '\u{b63}', SC_Extend), ('\u{b66}', '\u{b6f}', SC_Numeric), ('\u{b71}', '\u{b71}', - SC_OLetter), ('\u{b82}', '\u{b82}', SC_Extend), ('\u{b83}', '\u{b83}', SC_OLetter), - ('\u{b85}', '\u{b8a}', SC_OLetter), ('\u{b8e}', '\u{b90}', SC_OLetter), ('\u{b92}', - '\u{b95}', SC_OLetter), ('\u{b99}', '\u{b9a}', SC_OLetter), ('\u{b9c}', '\u{b9c}', - SC_OLetter), ('\u{b9e}', '\u{b9f}', SC_OLetter), ('\u{ba3}', '\u{ba4}', SC_OLetter), - ('\u{ba8}', '\u{baa}', SC_OLetter), ('\u{bae}', '\u{bb9}', SC_OLetter), ('\u{bbe}', - '\u{bc2}', SC_Extend), ('\u{bc6}', '\u{bc8}', SC_Extend), ('\u{bca}', '\u{bcd}', SC_Extend), - ('\u{bd0}', '\u{bd0}', SC_OLetter), ('\u{bd7}', '\u{bd7}', SC_Extend), ('\u{be6}', - '\u{bef}', SC_Numeric), ('\u{c00}', '\u{c04}', SC_Extend), ('\u{c05}', '\u{c0c}', - SC_OLetter), ('\u{c0e}', '\u{c10}', SC_OLetter), ('\u{c12}', '\u{c28}', SC_OLetter), - ('\u{c2a}', '\u{c39}', SC_OLetter), ('\u{c3c}', '\u{c3c}', SC_Extend), ('\u{c3d}', - '\u{c3d}', SC_OLetter), ('\u{c3e}', '\u{c44}', SC_Extend), ('\u{c46}', '\u{c48}', - SC_Extend), ('\u{c4a}', '\u{c4d}', SC_Extend), ('\u{c55}', '\u{c56}', SC_Extend), - ('\u{c58}', '\u{c5a}', SC_OLetter), ('\u{c5c}', '\u{c5d}', SC_OLetter), ('\u{c60}', - '\u{c61}', SC_OLetter), ('\u{c62}', '\u{c63}', SC_Extend), ('\u{c66}', '\u{c6f}', - SC_Numeric), ('\u{c80}', '\u{c80}', SC_OLetter), ('\u{c81}', '\u{c83}', SC_Extend), - ('\u{c85}', '\u{c8c}', SC_OLetter), ('\u{c8e}', '\u{c90}', SC_OLetter), ('\u{c92}', - '\u{ca8}', SC_OLetter), ('\u{caa}', '\u{cb3}', SC_OLetter), ('\u{cb5}', '\u{cb9}', - SC_OLetter), ('\u{cbc}', '\u{cbc}', SC_Extend), ('\u{cbd}', '\u{cbd}', SC_OLetter), - ('\u{cbe}', '\u{cc4}', SC_Extend), ('\u{cc6}', '\u{cc8}', SC_Extend), ('\u{cca}', '\u{ccd}', - SC_Extend), ('\u{cd5}', '\u{cd6}', SC_Extend), ('\u{cdc}', '\u{cde}', SC_OLetter), - ('\u{ce0}', '\u{ce1}', SC_OLetter), ('\u{ce2}', '\u{ce3}', SC_Extend), ('\u{ce6}', - '\u{cef}', SC_Numeric), ('\u{cf1}', '\u{cf2}', SC_OLetter), ('\u{cf3}', '\u{cf3}', - SC_Extend), ('\u{d00}', '\u{d03}', SC_Extend), ('\u{d04}', '\u{d0c}', SC_OLetter), - ('\u{d0e}', '\u{d10}', SC_OLetter), ('\u{d12}', '\u{d3a}', SC_OLetter), ('\u{d3b}', - '\u{d3c}', SC_Extend), ('\u{d3d}', '\u{d3d}', SC_OLetter), ('\u{d3e}', '\u{d44}', - SC_Extend), ('\u{d46}', '\u{d48}', SC_Extend), ('\u{d4a}', '\u{d4d}', SC_Extend), - ('\u{d4e}', '\u{d4e}', SC_OLetter), ('\u{d54}', '\u{d56}', SC_OLetter), ('\u{d57}', - '\u{d57}', SC_Extend), ('\u{d5f}', '\u{d61}', SC_OLetter), ('\u{d62}', '\u{d63}', - SC_Extend), ('\u{d66}', '\u{d6f}', SC_Numeric), ('\u{d7a}', '\u{d7f}', SC_OLetter), - ('\u{d81}', '\u{d83}', SC_Extend), ('\u{d85}', '\u{d96}', SC_OLetter), ('\u{d9a}', - '\u{db1}', SC_OLetter), ('\u{db3}', '\u{dbb}', SC_OLetter), ('\u{dbd}', '\u{dbd}', - SC_OLetter), ('\u{dc0}', '\u{dc6}', SC_OLetter), ('\u{dca}', '\u{dca}', SC_Extend), - ('\u{dcf}', '\u{dd4}', SC_Extend), ('\u{dd6}', '\u{dd6}', SC_Extend), ('\u{dd8}', '\u{ddf}', - SC_Extend), ('\u{de6}', '\u{def}', SC_Numeric), ('\u{df2}', '\u{df3}', SC_Extend), - ('\u{e01}', '\u{e30}', SC_OLetter), ('\u{e31}', '\u{e31}', SC_Extend), ('\u{e32}', - '\u{e33}', SC_OLetter), ('\u{e34}', '\u{e3a}', SC_Extend), ('\u{e40}', '\u{e46}', - SC_OLetter), ('\u{e47}', '\u{e4e}', SC_Extend), ('\u{e50}', '\u{e59}', SC_Numeric), - ('\u{e81}', '\u{e82}', SC_OLetter), ('\u{e84}', '\u{e84}', SC_OLetter), ('\u{e86}', - '\u{e8a}', SC_OLetter), ('\u{e8c}', '\u{ea3}', SC_OLetter), ('\u{ea5}', '\u{ea5}', - SC_OLetter), ('\u{ea7}', '\u{eb0}', SC_OLetter), ('\u{eb1}', '\u{eb1}', SC_Extend), - ('\u{eb2}', '\u{eb3}', SC_OLetter), ('\u{eb4}', '\u{ebc}', SC_Extend), ('\u{ebd}', - '\u{ebd}', SC_OLetter), ('\u{ec0}', '\u{ec4}', SC_OLetter), ('\u{ec6}', '\u{ec6}', - SC_OLetter), ('\u{ec8}', '\u{ece}', SC_Extend), ('\u{ed0}', '\u{ed9}', SC_Numeric), - ('\u{edc}', '\u{edf}', SC_OLetter), ('\u{f00}', '\u{f00}', SC_OLetter), ('\u{f18}', - '\u{f19}', SC_Extend), ('\u{f20}', '\u{f29}', SC_Numeric), ('\u{f35}', '\u{f35}', - SC_Extend), ('\u{f37}', '\u{f37}', SC_Extend), ('\u{f39}', '\u{f39}', SC_Extend), - ('\u{f3a}', '\u{f3d}', SC_Close), ('\u{f3e}', '\u{f3f}', SC_Extend), ('\u{f40}', '\u{f47}', - SC_OLetter), ('\u{f49}', '\u{f6c}', SC_OLetter), ('\u{f71}', '\u{f84}', SC_Extend), - ('\u{f86}', '\u{f87}', SC_Extend), ('\u{f88}', '\u{f8c}', SC_OLetter), ('\u{f8d}', - '\u{f97}', SC_Extend), ('\u{f99}', '\u{fbc}', SC_Extend), ('\u{fc6}', '\u{fc6}', SC_Extend), - ('\u{1000}', '\u{102a}', SC_OLetter), ('\u{102b}', '\u{103e}', SC_Extend), ('\u{103f}', - '\u{103f}', SC_OLetter), ('\u{1040}', '\u{1049}', SC_Numeric), ('\u{104a}', '\u{104b}', - SC_STerm), ('\u{1050}', '\u{1055}', SC_OLetter), ('\u{1056}', '\u{1059}', SC_Extend), - ('\u{105a}', '\u{105d}', SC_OLetter), ('\u{105e}', '\u{1060}', SC_Extend), ('\u{1061}', - '\u{1061}', SC_OLetter), ('\u{1062}', '\u{1064}', SC_Extend), ('\u{1065}', '\u{1066}', - SC_OLetter), ('\u{1067}', '\u{106d}', SC_Extend), ('\u{106e}', '\u{1070}', SC_OLetter), - ('\u{1071}', '\u{1074}', SC_Extend), ('\u{1075}', '\u{1081}', SC_OLetter), ('\u{1082}', - '\u{108d}', SC_Extend), ('\u{108e}', '\u{108e}', SC_OLetter), ('\u{108f}', '\u{108f}', - SC_Extend), ('\u{1090}', '\u{1099}', SC_Numeric), ('\u{109a}', '\u{109d}', SC_Extend), - ('\u{10a0}', '\u{10c5}', SC_Upper), ('\u{10c7}', '\u{10c7}', SC_Upper), ('\u{10cd}', - '\u{10cd}', SC_Upper), ('\u{10d0}', '\u{10fa}', SC_OLetter), ('\u{10fc}', '\u{10fc}', - SC_Lower), ('\u{10fd}', '\u{1248}', SC_OLetter), ('\u{124a}', '\u{124d}', SC_OLetter), - ('\u{1250}', '\u{1256}', SC_OLetter), ('\u{1258}', '\u{1258}', SC_OLetter), ('\u{125a}', - '\u{125d}', SC_OLetter), ('\u{1260}', '\u{1288}', SC_OLetter), ('\u{128a}', '\u{128d}', - SC_OLetter), ('\u{1290}', '\u{12b0}', SC_OLetter), ('\u{12b2}', '\u{12b5}', SC_OLetter), - ('\u{12b8}', '\u{12be}', SC_OLetter), ('\u{12c0}', '\u{12c0}', SC_OLetter), ('\u{12c2}', - '\u{12c5}', SC_OLetter), ('\u{12c8}', '\u{12d6}', SC_OLetter), ('\u{12d8}', '\u{1310}', - SC_OLetter), ('\u{1312}', '\u{1315}', SC_OLetter), ('\u{1318}', '\u{135a}', SC_OLetter), - ('\u{135d}', '\u{135f}', SC_Extend), ('\u{1362}', '\u{1362}', SC_STerm), ('\u{1367}', - '\u{1368}', SC_STerm), ('\u{1380}', '\u{138f}', SC_OLetter), ('\u{13a0}', '\u{13f5}', - SC_Upper), ('\u{13f8}', '\u{13fd}', SC_Lower), ('\u{1401}', '\u{166c}', SC_OLetter), - ('\u{166e}', '\u{166e}', SC_STerm), ('\u{166f}', '\u{167f}', SC_OLetter), ('\u{1680}', - '\u{1680}', SC_Sp), ('\u{1681}', '\u{169a}', SC_OLetter), ('\u{169b}', '\u{169c}', - SC_Close), ('\u{16a0}', '\u{16ea}', SC_OLetter), ('\u{16ee}', '\u{16f8}', SC_OLetter), - ('\u{1700}', '\u{1711}', SC_OLetter), ('\u{1712}', '\u{1715}', SC_Extend), ('\u{171f}', - '\u{1731}', SC_OLetter), ('\u{1732}', '\u{1734}', SC_Extend), ('\u{1735}', '\u{1736}', - SC_STerm), ('\u{1740}', '\u{1751}', SC_OLetter), ('\u{1752}', '\u{1753}', SC_Extend), - ('\u{1760}', '\u{176c}', SC_OLetter), ('\u{176e}', '\u{1770}', SC_OLetter), ('\u{1772}', - '\u{1773}', SC_Extend), ('\u{1780}', '\u{17b3}', SC_OLetter), ('\u{17b4}', '\u{17d3}', - SC_Extend), ('\u{17d4}', '\u{17d5}', SC_STerm), ('\u{17d7}', '\u{17d7}', SC_OLetter), - ('\u{17dc}', '\u{17dc}', SC_OLetter), ('\u{17dd}', '\u{17dd}', SC_Extend), ('\u{17e0}', - '\u{17e9}', SC_Numeric), ('\u{1802}', '\u{1802}', SC_SContinue), ('\u{1803}', '\u{1803}', - SC_STerm), ('\u{1808}', '\u{1808}', SC_SContinue), ('\u{1809}', '\u{1809}', SC_STerm), - ('\u{180b}', '\u{180d}', SC_Extend), ('\u{180e}', '\u{180e}', SC_Format), ('\u{180f}', - '\u{180f}', SC_Extend), ('\u{1810}', '\u{1819}', SC_Numeric), ('\u{1820}', '\u{1878}', - SC_OLetter), ('\u{1880}', '\u{1884}', SC_OLetter), ('\u{1885}', '\u{1886}', SC_Extend), - ('\u{1887}', '\u{18a8}', SC_OLetter), ('\u{18a9}', '\u{18a9}', SC_Extend), ('\u{18aa}', - '\u{18aa}', SC_OLetter), ('\u{18b0}', '\u{18f5}', SC_OLetter), ('\u{1900}', '\u{191e}', - SC_OLetter), ('\u{1920}', '\u{192b}', SC_Extend), ('\u{1930}', '\u{193b}', SC_Extend), - ('\u{1944}', '\u{1945}', SC_STerm), ('\u{1946}', '\u{194f}', SC_Numeric), ('\u{1950}', - '\u{196d}', SC_OLetter), ('\u{1970}', '\u{1974}', SC_OLetter), ('\u{1980}', '\u{19ab}', - SC_OLetter), ('\u{19b0}', '\u{19c9}', SC_OLetter), ('\u{19d0}', '\u{19da}', SC_Numeric), - ('\u{1a00}', '\u{1a16}', SC_OLetter), ('\u{1a17}', '\u{1a1b}', SC_Extend), ('\u{1a20}', - '\u{1a54}', SC_OLetter), ('\u{1a55}', '\u{1a5e}', SC_Extend), ('\u{1a60}', '\u{1a7c}', - SC_Extend), ('\u{1a7f}', '\u{1a7f}', SC_Extend), ('\u{1a80}', '\u{1a89}', SC_Numeric), - ('\u{1a90}', '\u{1a99}', SC_Numeric), ('\u{1aa7}', '\u{1aa7}', SC_OLetter), ('\u{1aa8}', - '\u{1aab}', SC_STerm), ('\u{1ab0}', '\u{1add}', SC_Extend), ('\u{1ae0}', '\u{1aeb}', - SC_Extend), ('\u{1b00}', '\u{1b04}', SC_Extend), ('\u{1b05}', '\u{1b33}', SC_OLetter), - ('\u{1b34}', '\u{1b44}', SC_Extend), ('\u{1b45}', '\u{1b4c}', SC_OLetter), ('\u{1b4e}', - '\u{1b4f}', SC_STerm), ('\u{1b50}', '\u{1b59}', SC_Numeric), ('\u{1b5a}', '\u{1b5b}', - SC_STerm), ('\u{1b5e}', '\u{1b5f}', SC_STerm), ('\u{1b6b}', '\u{1b73}', SC_Extend), - ('\u{1b7d}', '\u{1b7f}', SC_STerm), ('\u{1b80}', '\u{1b82}', SC_Extend), ('\u{1b83}', - '\u{1ba0}', SC_OLetter), ('\u{1ba1}', '\u{1bad}', SC_Extend), ('\u{1bae}', '\u{1baf}', - SC_OLetter), ('\u{1bb0}', '\u{1bb9}', SC_Numeric), ('\u{1bba}', '\u{1be5}', SC_OLetter), - ('\u{1be6}', '\u{1bf3}', SC_Extend), ('\u{1c00}', '\u{1c23}', SC_OLetter), ('\u{1c24}', - '\u{1c37}', SC_Extend), ('\u{1c3b}', '\u{1c3c}', SC_STerm), ('\u{1c40}', '\u{1c49}', - SC_Numeric), ('\u{1c4d}', '\u{1c4f}', SC_OLetter), ('\u{1c50}', '\u{1c59}', SC_Numeric), - ('\u{1c5a}', '\u{1c7d}', SC_OLetter), ('\u{1c7e}', '\u{1c7f}', SC_STerm), ('\u{1c80}', - '\u{1c88}', SC_Lower), ('\u{1c89}', '\u{1c89}', SC_Upper), ('\u{1c8a}', '\u{1c8a}', - SC_Lower), ('\u{1c90}', '\u{1cba}', SC_OLetter), ('\u{1cbd}', '\u{1cbf}', SC_OLetter), - ('\u{1cd0}', '\u{1cd2}', SC_Extend), ('\u{1cd4}', '\u{1ce8}', SC_Extend), ('\u{1ce9}', - '\u{1cec}', SC_OLetter), ('\u{1ced}', '\u{1ced}', SC_Extend), ('\u{1cee}', '\u{1cf3}', - SC_OLetter), ('\u{1cf4}', '\u{1cf4}', SC_Extend), ('\u{1cf5}', '\u{1cf6}', SC_OLetter), - ('\u{1cf7}', '\u{1cf9}', SC_Extend), ('\u{1cfa}', '\u{1cfa}', SC_OLetter), ('\u{1d00}', - '\u{1dbf}', SC_Lower), ('\u{1dc0}', '\u{1dff}', SC_Extend), ('\u{1e00}', '\u{1e00}', - SC_Upper), ('\u{1e01}', '\u{1e01}', SC_Lower), ('\u{1e02}', '\u{1e02}', SC_Upper), - ('\u{1e03}', '\u{1e03}', SC_Lower), ('\u{1e04}', '\u{1e04}', SC_Upper), ('\u{1e05}', - '\u{1e05}', SC_Lower), ('\u{1e06}', '\u{1e06}', SC_Upper), ('\u{1e07}', '\u{1e07}', - SC_Lower), ('\u{1e08}', '\u{1e08}', SC_Upper), ('\u{1e09}', '\u{1e09}', SC_Lower), - ('\u{1e0a}', '\u{1e0a}', SC_Upper), ('\u{1e0b}', '\u{1e0b}', SC_Lower), ('\u{1e0c}', - '\u{1e0c}', SC_Upper), ('\u{1e0d}', '\u{1e0d}', SC_Lower), ('\u{1e0e}', '\u{1e0e}', - SC_Upper), ('\u{1e0f}', '\u{1e0f}', SC_Lower), ('\u{1e10}', '\u{1e10}', SC_Upper), - ('\u{1e11}', '\u{1e11}', SC_Lower), ('\u{1e12}', '\u{1e12}', SC_Upper), ('\u{1e13}', - '\u{1e13}', SC_Lower), ('\u{1e14}', '\u{1e14}', SC_Upper), ('\u{1e15}', '\u{1e15}', - SC_Lower), ('\u{1e16}', '\u{1e16}', SC_Upper), ('\u{1e17}', '\u{1e17}', SC_Lower), - ('\u{1e18}', '\u{1e18}', SC_Upper), ('\u{1e19}', '\u{1e19}', SC_Lower), ('\u{1e1a}', - '\u{1e1a}', SC_Upper), ('\u{1e1b}', '\u{1e1b}', SC_Lower), ('\u{1e1c}', '\u{1e1c}', - SC_Upper), ('\u{1e1d}', '\u{1e1d}', SC_Lower), ('\u{1e1e}', '\u{1e1e}', SC_Upper), - ('\u{1e1f}', '\u{1e1f}', SC_Lower), ('\u{1e20}', '\u{1e20}', SC_Upper), ('\u{1e21}', - '\u{1e21}', SC_Lower), ('\u{1e22}', '\u{1e22}', SC_Upper), ('\u{1e23}', '\u{1e23}', - SC_Lower), ('\u{1e24}', '\u{1e24}', SC_Upper), ('\u{1e25}', '\u{1e25}', SC_Lower), - ('\u{1e26}', '\u{1e26}', SC_Upper), ('\u{1e27}', '\u{1e27}', SC_Lower), ('\u{1e28}', - '\u{1e28}', SC_Upper), ('\u{1e29}', '\u{1e29}', SC_Lower), ('\u{1e2a}', '\u{1e2a}', - SC_Upper), ('\u{1e2b}', '\u{1e2b}', SC_Lower), ('\u{1e2c}', '\u{1e2c}', SC_Upper), - ('\u{1e2d}', '\u{1e2d}', SC_Lower), ('\u{1e2e}', '\u{1e2e}', SC_Upper), ('\u{1e2f}', - '\u{1e2f}', SC_Lower), ('\u{1e30}', '\u{1e30}', SC_Upper), ('\u{1e31}', '\u{1e31}', - SC_Lower), ('\u{1e32}', '\u{1e32}', SC_Upper), ('\u{1e33}', '\u{1e33}', SC_Lower), - ('\u{1e34}', '\u{1e34}', SC_Upper), ('\u{1e35}', '\u{1e35}', SC_Lower), ('\u{1e36}', - '\u{1e36}', SC_Upper), ('\u{1e37}', '\u{1e37}', SC_Lower), ('\u{1e38}', '\u{1e38}', - SC_Upper), ('\u{1e39}', '\u{1e39}', SC_Lower), ('\u{1e3a}', '\u{1e3a}', SC_Upper), - ('\u{1e3b}', '\u{1e3b}', SC_Lower), ('\u{1e3c}', '\u{1e3c}', SC_Upper), ('\u{1e3d}', - '\u{1e3d}', SC_Lower), ('\u{1e3e}', '\u{1e3e}', SC_Upper), ('\u{1e3f}', '\u{1e3f}', - SC_Lower), ('\u{1e40}', '\u{1e40}', SC_Upper), ('\u{1e41}', '\u{1e41}', SC_Lower), - ('\u{1e42}', '\u{1e42}', SC_Upper), ('\u{1e43}', '\u{1e43}', SC_Lower), ('\u{1e44}', - '\u{1e44}', SC_Upper), ('\u{1e45}', '\u{1e45}', SC_Lower), ('\u{1e46}', '\u{1e46}', - SC_Upper), ('\u{1e47}', '\u{1e47}', SC_Lower), ('\u{1e48}', '\u{1e48}', SC_Upper), - ('\u{1e49}', '\u{1e49}', SC_Lower), ('\u{1e4a}', '\u{1e4a}', SC_Upper), ('\u{1e4b}', - '\u{1e4b}', SC_Lower), ('\u{1e4c}', '\u{1e4c}', SC_Upper), ('\u{1e4d}', '\u{1e4d}', - SC_Lower), ('\u{1e4e}', '\u{1e4e}', SC_Upper), ('\u{1e4f}', '\u{1e4f}', SC_Lower), - ('\u{1e50}', '\u{1e50}', SC_Upper), ('\u{1e51}', '\u{1e51}', SC_Lower), ('\u{1e52}', - '\u{1e52}', SC_Upper), ('\u{1e53}', '\u{1e53}', SC_Lower), ('\u{1e54}', '\u{1e54}', - SC_Upper), ('\u{1e55}', '\u{1e55}', SC_Lower), ('\u{1e56}', '\u{1e56}', SC_Upper), - ('\u{1e57}', '\u{1e57}', SC_Lower), ('\u{1e58}', '\u{1e58}', SC_Upper), ('\u{1e59}', - '\u{1e59}', SC_Lower), ('\u{1e5a}', '\u{1e5a}', SC_Upper), ('\u{1e5b}', '\u{1e5b}', - SC_Lower), ('\u{1e5c}', '\u{1e5c}', SC_Upper), ('\u{1e5d}', '\u{1e5d}', SC_Lower), - ('\u{1e5e}', '\u{1e5e}', SC_Upper), ('\u{1e5f}', '\u{1e5f}', SC_Lower), ('\u{1e60}', - '\u{1e60}', SC_Upper), ('\u{1e61}', '\u{1e61}', SC_Lower), ('\u{1e62}', '\u{1e62}', - SC_Upper), ('\u{1e63}', '\u{1e63}', SC_Lower), ('\u{1e64}', '\u{1e64}', SC_Upper), - ('\u{1e65}', '\u{1e65}', SC_Lower), ('\u{1e66}', '\u{1e66}', SC_Upper), ('\u{1e67}', - '\u{1e67}', SC_Lower), ('\u{1e68}', '\u{1e68}', SC_Upper), ('\u{1e69}', '\u{1e69}', - SC_Lower), ('\u{1e6a}', '\u{1e6a}', SC_Upper), ('\u{1e6b}', '\u{1e6b}', SC_Lower), - ('\u{1e6c}', '\u{1e6c}', SC_Upper), ('\u{1e6d}', '\u{1e6d}', SC_Lower), ('\u{1e6e}', - '\u{1e6e}', SC_Upper), ('\u{1e6f}', '\u{1e6f}', SC_Lower), ('\u{1e70}', '\u{1e70}', - SC_Upper), ('\u{1e71}', '\u{1e71}', SC_Lower), ('\u{1e72}', '\u{1e72}', SC_Upper), - ('\u{1e73}', '\u{1e73}', SC_Lower), ('\u{1e74}', '\u{1e74}', SC_Upper), ('\u{1e75}', - '\u{1e75}', SC_Lower), ('\u{1e76}', '\u{1e76}', SC_Upper), ('\u{1e77}', '\u{1e77}', - SC_Lower), ('\u{1e78}', '\u{1e78}', SC_Upper), ('\u{1e79}', '\u{1e79}', SC_Lower), - ('\u{1e7a}', '\u{1e7a}', SC_Upper), ('\u{1e7b}', '\u{1e7b}', SC_Lower), ('\u{1e7c}', - '\u{1e7c}', SC_Upper), ('\u{1e7d}', '\u{1e7d}', SC_Lower), ('\u{1e7e}', '\u{1e7e}', - SC_Upper), ('\u{1e7f}', '\u{1e7f}', SC_Lower), ('\u{1e80}', '\u{1e80}', SC_Upper), - ('\u{1e81}', '\u{1e81}', SC_Lower), ('\u{1e82}', '\u{1e82}', SC_Upper), ('\u{1e83}', - '\u{1e83}', SC_Lower), ('\u{1e84}', '\u{1e84}', SC_Upper), ('\u{1e85}', '\u{1e85}', - SC_Lower), ('\u{1e86}', '\u{1e86}', SC_Upper), ('\u{1e87}', '\u{1e87}', SC_Lower), - ('\u{1e88}', '\u{1e88}', SC_Upper), ('\u{1e89}', '\u{1e89}', SC_Lower), ('\u{1e8a}', - '\u{1e8a}', SC_Upper), ('\u{1e8b}', '\u{1e8b}', SC_Lower), ('\u{1e8c}', '\u{1e8c}', - SC_Upper), ('\u{1e8d}', '\u{1e8d}', SC_Lower), ('\u{1e8e}', '\u{1e8e}', SC_Upper), - ('\u{1e8f}', '\u{1e8f}', SC_Lower), ('\u{1e90}', '\u{1e90}', SC_Upper), ('\u{1e91}', - '\u{1e91}', SC_Lower), ('\u{1e92}', '\u{1e92}', SC_Upper), ('\u{1e93}', '\u{1e93}', - SC_Lower), ('\u{1e94}', '\u{1e94}', SC_Upper), ('\u{1e95}', '\u{1e9d}', SC_Lower), - ('\u{1e9e}', '\u{1e9e}', SC_Upper), ('\u{1e9f}', '\u{1e9f}', SC_Lower), ('\u{1ea0}', - '\u{1ea0}', SC_Upper), ('\u{1ea1}', '\u{1ea1}', SC_Lower), ('\u{1ea2}', '\u{1ea2}', - SC_Upper), ('\u{1ea3}', '\u{1ea3}', SC_Lower), ('\u{1ea4}', '\u{1ea4}', SC_Upper), - ('\u{1ea5}', '\u{1ea5}', SC_Lower), ('\u{1ea6}', '\u{1ea6}', SC_Upper), ('\u{1ea7}', - '\u{1ea7}', SC_Lower), ('\u{1ea8}', '\u{1ea8}', SC_Upper), ('\u{1ea9}', '\u{1ea9}', - SC_Lower), ('\u{1eaa}', '\u{1eaa}', SC_Upper), ('\u{1eab}', '\u{1eab}', SC_Lower), - ('\u{1eac}', '\u{1eac}', SC_Upper), ('\u{1ead}', '\u{1ead}', SC_Lower), ('\u{1eae}', - '\u{1eae}', SC_Upper), ('\u{1eaf}', '\u{1eaf}', SC_Lower), ('\u{1eb0}', '\u{1eb0}', - SC_Upper), ('\u{1eb1}', '\u{1eb1}', SC_Lower), ('\u{1eb2}', '\u{1eb2}', SC_Upper), - ('\u{1eb3}', '\u{1eb3}', SC_Lower), ('\u{1eb4}', '\u{1eb4}', SC_Upper), ('\u{1eb5}', - '\u{1eb5}', SC_Lower), ('\u{1eb6}', '\u{1eb6}', SC_Upper), ('\u{1eb7}', '\u{1eb7}', - SC_Lower), ('\u{1eb8}', '\u{1eb8}', SC_Upper), ('\u{1eb9}', '\u{1eb9}', SC_Lower), - ('\u{1eba}', '\u{1eba}', SC_Upper), ('\u{1ebb}', '\u{1ebb}', SC_Lower), ('\u{1ebc}', - '\u{1ebc}', SC_Upper), ('\u{1ebd}', '\u{1ebd}', SC_Lower), ('\u{1ebe}', '\u{1ebe}', - SC_Upper), ('\u{1ebf}', '\u{1ebf}', SC_Lower), ('\u{1ec0}', '\u{1ec0}', SC_Upper), - ('\u{1ec1}', '\u{1ec1}', SC_Lower), ('\u{1ec2}', '\u{1ec2}', SC_Upper), ('\u{1ec3}', - '\u{1ec3}', SC_Lower), ('\u{1ec4}', '\u{1ec4}', SC_Upper), ('\u{1ec5}', '\u{1ec5}', - SC_Lower), ('\u{1ec6}', '\u{1ec6}', SC_Upper), ('\u{1ec7}', '\u{1ec7}', SC_Lower), - ('\u{1ec8}', '\u{1ec8}', SC_Upper), ('\u{1ec9}', '\u{1ec9}', SC_Lower), ('\u{1eca}', - '\u{1eca}', SC_Upper), ('\u{1ecb}', '\u{1ecb}', SC_Lower), ('\u{1ecc}', '\u{1ecc}', - SC_Upper), ('\u{1ecd}', '\u{1ecd}', SC_Lower), ('\u{1ece}', '\u{1ece}', SC_Upper), - ('\u{1ecf}', '\u{1ecf}', SC_Lower), ('\u{1ed0}', '\u{1ed0}', SC_Upper), ('\u{1ed1}', - '\u{1ed1}', SC_Lower), ('\u{1ed2}', '\u{1ed2}', SC_Upper), ('\u{1ed3}', '\u{1ed3}', - SC_Lower), ('\u{1ed4}', '\u{1ed4}', SC_Upper), ('\u{1ed5}', '\u{1ed5}', SC_Lower), - ('\u{1ed6}', '\u{1ed6}', SC_Upper), ('\u{1ed7}', '\u{1ed7}', SC_Lower), ('\u{1ed8}', - '\u{1ed8}', SC_Upper), ('\u{1ed9}', '\u{1ed9}', SC_Lower), ('\u{1eda}', '\u{1eda}', - SC_Upper), ('\u{1edb}', '\u{1edb}', SC_Lower), ('\u{1edc}', '\u{1edc}', SC_Upper), - ('\u{1edd}', '\u{1edd}', SC_Lower), ('\u{1ede}', '\u{1ede}', SC_Upper), ('\u{1edf}', - '\u{1edf}', SC_Lower), ('\u{1ee0}', '\u{1ee0}', SC_Upper), ('\u{1ee1}', '\u{1ee1}', - SC_Lower), ('\u{1ee2}', '\u{1ee2}', SC_Upper), ('\u{1ee3}', '\u{1ee3}', SC_Lower), - ('\u{1ee4}', '\u{1ee4}', SC_Upper), ('\u{1ee5}', '\u{1ee5}', SC_Lower), ('\u{1ee6}', - '\u{1ee6}', SC_Upper), ('\u{1ee7}', '\u{1ee7}', SC_Lower), ('\u{1ee8}', '\u{1ee8}', - SC_Upper), ('\u{1ee9}', '\u{1ee9}', SC_Lower), ('\u{1eea}', '\u{1eea}', SC_Upper), - ('\u{1eeb}', '\u{1eeb}', SC_Lower), ('\u{1eec}', '\u{1eec}', SC_Upper), ('\u{1eed}', - '\u{1eed}', SC_Lower), ('\u{1eee}', '\u{1eee}', SC_Upper), ('\u{1eef}', '\u{1eef}', - SC_Lower), ('\u{1ef0}', '\u{1ef0}', SC_Upper), ('\u{1ef1}', '\u{1ef1}', SC_Lower), - ('\u{1ef2}', '\u{1ef2}', SC_Upper), ('\u{1ef3}', '\u{1ef3}', SC_Lower), ('\u{1ef4}', - '\u{1ef4}', SC_Upper), ('\u{1ef5}', '\u{1ef5}', SC_Lower), ('\u{1ef6}', '\u{1ef6}', - SC_Upper), ('\u{1ef7}', '\u{1ef7}', SC_Lower), ('\u{1ef8}', '\u{1ef8}', SC_Upper), - ('\u{1ef9}', '\u{1ef9}', SC_Lower), ('\u{1efa}', '\u{1efa}', SC_Upper), ('\u{1efb}', - '\u{1efb}', SC_Lower), ('\u{1efc}', '\u{1efc}', SC_Upper), ('\u{1efd}', '\u{1efd}', - SC_Lower), ('\u{1efe}', '\u{1efe}', SC_Upper), ('\u{1eff}', '\u{1f07}', SC_Lower), - ('\u{1f08}', '\u{1f0f}', SC_Upper), ('\u{1f10}', '\u{1f15}', SC_Lower), ('\u{1f18}', - '\u{1f1d}', SC_Upper), ('\u{1f20}', '\u{1f27}', SC_Lower), ('\u{1f28}', '\u{1f2f}', - SC_Upper), ('\u{1f30}', '\u{1f37}', SC_Lower), ('\u{1f38}', '\u{1f3f}', SC_Upper), - ('\u{1f40}', '\u{1f45}', SC_Lower), ('\u{1f48}', '\u{1f4d}', SC_Upper), ('\u{1f50}', - '\u{1f57}', SC_Lower), ('\u{1f59}', '\u{1f59}', SC_Upper), ('\u{1f5b}', '\u{1f5b}', - SC_Upper), ('\u{1f5d}', '\u{1f5d}', SC_Upper), ('\u{1f5f}', '\u{1f5f}', SC_Upper), - ('\u{1f60}', '\u{1f67}', SC_Lower), ('\u{1f68}', '\u{1f6f}', SC_Upper), ('\u{1f70}', - '\u{1f7d}', SC_Lower), ('\u{1f80}', '\u{1f87}', SC_Lower), ('\u{1f88}', '\u{1f8f}', - SC_Upper), ('\u{1f90}', '\u{1f97}', SC_Lower), ('\u{1f98}', '\u{1f9f}', SC_Upper), - ('\u{1fa0}', '\u{1fa7}', SC_Lower), ('\u{1fa8}', '\u{1faf}', SC_Upper), ('\u{1fb0}', - '\u{1fb4}', SC_Lower), ('\u{1fb6}', '\u{1fb7}', SC_Lower), ('\u{1fb8}', '\u{1fbc}', - SC_Upper), ('\u{1fbe}', '\u{1fbe}', SC_Lower), ('\u{1fc2}', '\u{1fc4}', SC_Lower), - ('\u{1fc6}', '\u{1fc7}', SC_Lower), ('\u{1fc8}', '\u{1fcc}', SC_Upper), ('\u{1fd0}', - '\u{1fd3}', SC_Lower), ('\u{1fd6}', '\u{1fd7}', SC_Lower), ('\u{1fd8}', '\u{1fdb}', - SC_Upper), ('\u{1fe0}', '\u{1fe7}', SC_Lower), ('\u{1fe8}', '\u{1fec}', SC_Upper), - ('\u{1ff2}', '\u{1ff4}', SC_Lower), ('\u{1ff6}', '\u{1ff7}', SC_Lower), ('\u{1ff8}', - '\u{1ffc}', SC_Upper), ('\u{2000}', '\u{200a}', SC_Sp), ('\u{200b}', '\u{200b}', SC_Format), - ('\u{200c}', '\u{200d}', SC_Extend), ('\u{200e}', '\u{200f}', SC_Format), ('\u{2013}', - '\u{2014}', SC_SContinue), ('\u{2018}', '\u{201f}', SC_Close), ('\u{2024}', '\u{2024}', - SC_ATerm), ('\u{2028}', '\u{2029}', SC_Sep), ('\u{202a}', '\u{202e}', SC_Format), - ('\u{202f}', '\u{202f}', SC_Sp), ('\u{2039}', '\u{203a}', SC_Close), ('\u{203c}', - '\u{203d}', SC_STerm), ('\u{2045}', '\u{2046}', SC_Close), ('\u{2047}', '\u{2049}', - SC_STerm), ('\u{205f}', '\u{205f}', SC_Sp), ('\u{2060}', '\u{2064}', SC_Format), - ('\u{2066}', '\u{206f}', SC_Format), ('\u{2071}', '\u{2071}', SC_Lower), ('\u{207d}', - '\u{207e}', SC_Close), ('\u{207f}', '\u{207f}', SC_Lower), ('\u{208d}', '\u{208e}', - SC_Close), ('\u{2090}', '\u{209c}', SC_Lower), ('\u{20d0}', '\u{20f0}', SC_Extend), - ('\u{2102}', '\u{2102}', SC_Upper), ('\u{2107}', '\u{2107}', SC_Upper), ('\u{210a}', - '\u{210a}', SC_Lower), ('\u{210b}', '\u{210d}', SC_Upper), ('\u{210e}', '\u{210f}', - SC_Lower), ('\u{2110}', '\u{2112}', SC_Upper), ('\u{2113}', '\u{2113}', SC_Lower), - ('\u{2115}', '\u{2115}', SC_Upper), ('\u{2119}', '\u{211d}', SC_Upper), ('\u{2124}', - '\u{2124}', SC_Upper), ('\u{2126}', '\u{2126}', SC_Upper), ('\u{2128}', '\u{2128}', - SC_Upper), ('\u{212a}', '\u{212d}', SC_Upper), ('\u{212f}', '\u{212f}', SC_Lower), - ('\u{2130}', '\u{2133}', SC_Upper), ('\u{2134}', '\u{2134}', SC_Lower), ('\u{2135}', - '\u{2138}', SC_OLetter), ('\u{2139}', '\u{2139}', SC_Lower), ('\u{213c}', '\u{213d}', - SC_Lower), ('\u{213e}', '\u{213f}', SC_Upper), ('\u{2145}', '\u{2145}', SC_Upper), - ('\u{2146}', '\u{2149}', SC_Lower), ('\u{214e}', '\u{214e}', SC_Lower), ('\u{2160}', - '\u{216f}', SC_Upper), ('\u{2170}', '\u{217f}', SC_Lower), ('\u{2180}', '\u{2182}', - SC_OLetter), ('\u{2183}', '\u{2183}', SC_Upper), ('\u{2184}', '\u{2184}', SC_Lower), - ('\u{2185}', '\u{2188}', SC_OLetter), ('\u{2308}', '\u{230b}', SC_Close), ('\u{2329}', - '\u{232a}', SC_Close), ('\u{24b6}', '\u{24cf}', SC_Upper), ('\u{24d0}', '\u{24e9}', - SC_Lower), ('\u{275b}', '\u{2760}', SC_Close), ('\u{2768}', '\u{2775}', SC_Close), - ('\u{27c5}', '\u{27c6}', SC_Close), ('\u{27e6}', '\u{27ef}', SC_Close), ('\u{2983}', - '\u{2998}', SC_Close), ('\u{29d8}', '\u{29db}', SC_Close), ('\u{29fc}', '\u{29fd}', - SC_Close), ('\u{2c00}', '\u{2c2f}', SC_Upper), ('\u{2c30}', '\u{2c5f}', SC_Lower), - ('\u{2c60}', '\u{2c60}', SC_Upper), ('\u{2c61}', '\u{2c61}', SC_Lower), ('\u{2c62}', - '\u{2c64}', SC_Upper), ('\u{2c65}', '\u{2c66}', SC_Lower), ('\u{2c67}', '\u{2c67}', - SC_Upper), ('\u{2c68}', '\u{2c68}', SC_Lower), ('\u{2c69}', '\u{2c69}', SC_Upper), - ('\u{2c6a}', '\u{2c6a}', SC_Lower), ('\u{2c6b}', '\u{2c6b}', SC_Upper), ('\u{2c6c}', - '\u{2c6c}', SC_Lower), ('\u{2c6d}', '\u{2c70}', SC_Upper), ('\u{2c71}', '\u{2c71}', - SC_Lower), ('\u{2c72}', '\u{2c72}', SC_Upper), ('\u{2c73}', '\u{2c74}', SC_Lower), - ('\u{2c75}', '\u{2c75}', SC_Upper), ('\u{2c76}', '\u{2c7d}', SC_Lower), ('\u{2c7e}', - '\u{2c80}', SC_Upper), ('\u{2c81}', '\u{2c81}', SC_Lower), ('\u{2c82}', '\u{2c82}', - SC_Upper), ('\u{2c83}', '\u{2c83}', SC_Lower), ('\u{2c84}', '\u{2c84}', SC_Upper), - ('\u{2c85}', '\u{2c85}', SC_Lower), ('\u{2c86}', '\u{2c86}', SC_Upper), ('\u{2c87}', - '\u{2c87}', SC_Lower), ('\u{2c88}', '\u{2c88}', SC_Upper), ('\u{2c89}', '\u{2c89}', - SC_Lower), ('\u{2c8a}', '\u{2c8a}', SC_Upper), ('\u{2c8b}', '\u{2c8b}', SC_Lower), - ('\u{2c8c}', '\u{2c8c}', SC_Upper), ('\u{2c8d}', '\u{2c8d}', SC_Lower), ('\u{2c8e}', - '\u{2c8e}', SC_Upper), ('\u{2c8f}', '\u{2c8f}', SC_Lower), ('\u{2c90}', '\u{2c90}', - SC_Upper), ('\u{2c91}', '\u{2c91}', SC_Lower), ('\u{2c92}', '\u{2c92}', SC_Upper), - ('\u{2c93}', '\u{2c93}', SC_Lower), ('\u{2c94}', '\u{2c94}', SC_Upper), ('\u{2c95}', - '\u{2c95}', SC_Lower), ('\u{2c96}', '\u{2c96}', SC_Upper), ('\u{2c97}', '\u{2c97}', - SC_Lower), ('\u{2c98}', '\u{2c98}', SC_Upper), ('\u{2c99}', '\u{2c99}', SC_Lower), - ('\u{2c9a}', '\u{2c9a}', SC_Upper), ('\u{2c9b}', '\u{2c9b}', SC_Lower), ('\u{2c9c}', - '\u{2c9c}', SC_Upper), ('\u{2c9d}', '\u{2c9d}', SC_Lower), ('\u{2c9e}', '\u{2c9e}', - SC_Upper), ('\u{2c9f}', '\u{2c9f}', SC_Lower), ('\u{2ca0}', '\u{2ca0}', SC_Upper), - ('\u{2ca1}', '\u{2ca1}', SC_Lower), ('\u{2ca2}', '\u{2ca2}', SC_Upper), ('\u{2ca3}', - '\u{2ca3}', SC_Lower), ('\u{2ca4}', '\u{2ca4}', SC_Upper), ('\u{2ca5}', '\u{2ca5}', - SC_Lower), ('\u{2ca6}', '\u{2ca6}', SC_Upper), ('\u{2ca7}', '\u{2ca7}', SC_Lower), - ('\u{2ca8}', '\u{2ca8}', SC_Upper), ('\u{2ca9}', '\u{2ca9}', SC_Lower), ('\u{2caa}', - '\u{2caa}', SC_Upper), ('\u{2cab}', '\u{2cab}', SC_Lower), ('\u{2cac}', '\u{2cac}', - SC_Upper), ('\u{2cad}', '\u{2cad}', SC_Lower), ('\u{2cae}', '\u{2cae}', SC_Upper), - ('\u{2caf}', '\u{2caf}', SC_Lower), ('\u{2cb0}', '\u{2cb0}', SC_Upper), ('\u{2cb1}', - '\u{2cb1}', SC_Lower), ('\u{2cb2}', '\u{2cb2}', SC_Upper), ('\u{2cb3}', '\u{2cb3}', - SC_Lower), ('\u{2cb4}', '\u{2cb4}', SC_Upper), ('\u{2cb5}', '\u{2cb5}', SC_Lower), - ('\u{2cb6}', '\u{2cb6}', SC_Upper), ('\u{2cb7}', '\u{2cb7}', SC_Lower), ('\u{2cb8}', - '\u{2cb8}', SC_Upper), ('\u{2cb9}', '\u{2cb9}', SC_Lower), ('\u{2cba}', '\u{2cba}', - SC_Upper), ('\u{2cbb}', '\u{2cbb}', SC_Lower), ('\u{2cbc}', '\u{2cbc}', SC_Upper), - ('\u{2cbd}', '\u{2cbd}', SC_Lower), ('\u{2cbe}', '\u{2cbe}', SC_Upper), ('\u{2cbf}', - '\u{2cbf}', SC_Lower), ('\u{2cc0}', '\u{2cc0}', SC_Upper), ('\u{2cc1}', '\u{2cc1}', - SC_Lower), ('\u{2cc2}', '\u{2cc2}', SC_Upper), ('\u{2cc3}', '\u{2cc3}', SC_Lower), - ('\u{2cc4}', '\u{2cc4}', SC_Upper), ('\u{2cc5}', '\u{2cc5}', SC_Lower), ('\u{2cc6}', - '\u{2cc6}', SC_Upper), ('\u{2cc7}', '\u{2cc7}', SC_Lower), ('\u{2cc8}', '\u{2cc8}', - SC_Upper), ('\u{2cc9}', '\u{2cc9}', SC_Lower), ('\u{2cca}', '\u{2cca}', SC_Upper), - ('\u{2ccb}', '\u{2ccb}', SC_Lower), ('\u{2ccc}', '\u{2ccc}', SC_Upper), ('\u{2ccd}', - '\u{2ccd}', SC_Lower), ('\u{2cce}', '\u{2cce}', SC_Upper), ('\u{2ccf}', '\u{2ccf}', - SC_Lower), ('\u{2cd0}', '\u{2cd0}', SC_Upper), ('\u{2cd1}', '\u{2cd1}', SC_Lower), - ('\u{2cd2}', '\u{2cd2}', SC_Upper), ('\u{2cd3}', '\u{2cd3}', SC_Lower), ('\u{2cd4}', - '\u{2cd4}', SC_Upper), ('\u{2cd5}', '\u{2cd5}', SC_Lower), ('\u{2cd6}', '\u{2cd6}', - SC_Upper), ('\u{2cd7}', '\u{2cd7}', SC_Lower), ('\u{2cd8}', '\u{2cd8}', SC_Upper), - ('\u{2cd9}', '\u{2cd9}', SC_Lower), ('\u{2cda}', '\u{2cda}', SC_Upper), ('\u{2cdb}', - '\u{2cdb}', SC_Lower), ('\u{2cdc}', '\u{2cdc}', SC_Upper), ('\u{2cdd}', '\u{2cdd}', - SC_Lower), ('\u{2cde}', '\u{2cde}', SC_Upper), ('\u{2cdf}', '\u{2cdf}', SC_Lower), - ('\u{2ce0}', '\u{2ce0}', SC_Upper), ('\u{2ce1}', '\u{2ce1}', SC_Lower), ('\u{2ce2}', - '\u{2ce2}', SC_Upper), ('\u{2ce3}', '\u{2ce4}', SC_Lower), ('\u{2ceb}', '\u{2ceb}', - SC_Upper), ('\u{2cec}', '\u{2cec}', SC_Lower), ('\u{2ced}', '\u{2ced}', SC_Upper), - ('\u{2cee}', '\u{2cee}', SC_Lower), ('\u{2cef}', '\u{2cf1}', SC_Extend), ('\u{2cf2}', - '\u{2cf2}', SC_Upper), ('\u{2cf3}', '\u{2cf3}', SC_Lower), ('\u{2cf9}', '\u{2cfb}', - SC_STerm), ('\u{2d00}', '\u{2d25}', SC_Lower), ('\u{2d27}', '\u{2d27}', SC_Lower), - ('\u{2d2d}', '\u{2d2d}', SC_Lower), ('\u{2d30}', '\u{2d67}', SC_OLetter), ('\u{2d6f}', - '\u{2d6f}', SC_OLetter), ('\u{2d7f}', '\u{2d7f}', SC_Extend), ('\u{2d80}', '\u{2d96}', - SC_OLetter), ('\u{2da0}', '\u{2da6}', SC_OLetter), ('\u{2da8}', '\u{2dae}', SC_OLetter), - ('\u{2db0}', '\u{2db6}', SC_OLetter), ('\u{2db8}', '\u{2dbe}', SC_OLetter), ('\u{2dc0}', - '\u{2dc6}', SC_OLetter), ('\u{2dc8}', '\u{2dce}', SC_OLetter), ('\u{2dd0}', '\u{2dd6}', - SC_OLetter), ('\u{2dd8}', '\u{2dde}', SC_OLetter), ('\u{2de0}', '\u{2dff}', SC_Extend), - ('\u{2e00}', '\u{2e0d}', SC_Close), ('\u{2e1c}', '\u{2e1d}', SC_Close), ('\u{2e20}', - '\u{2e29}', SC_Close), ('\u{2e2e}', '\u{2e2e}', SC_STerm), ('\u{2e2f}', '\u{2e2f}', - SC_OLetter), ('\u{2e3c}', '\u{2e3c}', SC_STerm), ('\u{2e42}', '\u{2e42}', SC_Close), - ('\u{2e53}', '\u{2e54}', SC_STerm), ('\u{2e55}', '\u{2e5c}', SC_Close), ('\u{3000}', - '\u{3000}', SC_Sp), ('\u{3001}', '\u{3001}', SC_SContinue), ('\u{3002}', '\u{3002}', - SC_STerm), ('\u{3005}', '\u{3007}', SC_OLetter), ('\u{3008}', '\u{3011}', SC_Close), - ('\u{3014}', '\u{301b}', SC_Close), ('\u{301d}', '\u{301f}', SC_Close), ('\u{3021}', - '\u{3029}', SC_OLetter), ('\u{302a}', '\u{302f}', SC_Extend), ('\u{3031}', '\u{3035}', - SC_OLetter), ('\u{3038}', '\u{303c}', SC_OLetter), ('\u{3041}', '\u{3096}', SC_OLetter), - ('\u{3099}', '\u{309a}', SC_Extend), ('\u{309d}', '\u{309f}', SC_OLetter), ('\u{30a1}', - '\u{30fa}', SC_OLetter), ('\u{30fc}', '\u{30ff}', SC_OLetter), ('\u{3105}', '\u{312f}', - SC_OLetter), ('\u{3131}', '\u{318e}', SC_OLetter), ('\u{31a0}', '\u{31bf}', SC_OLetter), - ('\u{31f0}', '\u{31ff}', SC_OLetter), ('\u{3400}', '\u{4dbf}', SC_OLetter), ('\u{4e00}', - '\u{a48c}', SC_OLetter), ('\u{a4d0}', '\u{a4fd}', SC_OLetter), ('\u{a4ff}', '\u{a4ff}', - SC_STerm), ('\u{a500}', '\u{a60c}', SC_OLetter), ('\u{a60e}', '\u{a60f}', SC_STerm), - ('\u{a610}', '\u{a61f}', SC_OLetter), ('\u{a620}', '\u{a629}', SC_Numeric), ('\u{a62a}', - '\u{a62b}', SC_OLetter), ('\u{a640}', '\u{a640}', SC_Upper), ('\u{a641}', '\u{a641}', - SC_Lower), ('\u{a642}', '\u{a642}', SC_Upper), ('\u{a643}', '\u{a643}', SC_Lower), - ('\u{a644}', '\u{a644}', SC_Upper), ('\u{a645}', '\u{a645}', SC_Lower), ('\u{a646}', - '\u{a646}', SC_Upper), ('\u{a647}', '\u{a647}', SC_Lower), ('\u{a648}', '\u{a648}', - SC_Upper), ('\u{a649}', '\u{a649}', SC_Lower), ('\u{a64a}', '\u{a64a}', SC_Upper), - ('\u{a64b}', '\u{a64b}', SC_Lower), ('\u{a64c}', '\u{a64c}', SC_Upper), ('\u{a64d}', - '\u{a64d}', SC_Lower), ('\u{a64e}', '\u{a64e}', SC_Upper), ('\u{a64f}', '\u{a64f}', - SC_Lower), ('\u{a650}', '\u{a650}', SC_Upper), ('\u{a651}', '\u{a651}', SC_Lower), - ('\u{a652}', '\u{a652}', SC_Upper), ('\u{a653}', '\u{a653}', SC_Lower), ('\u{a654}', - '\u{a654}', SC_Upper), ('\u{a655}', '\u{a655}', SC_Lower), ('\u{a656}', '\u{a656}', - SC_Upper), ('\u{a657}', '\u{a657}', SC_Lower), ('\u{a658}', '\u{a658}', SC_Upper), - ('\u{a659}', '\u{a659}', SC_Lower), ('\u{a65a}', '\u{a65a}', SC_Upper), ('\u{a65b}', - '\u{a65b}', SC_Lower), ('\u{a65c}', '\u{a65c}', SC_Upper), ('\u{a65d}', '\u{a65d}', - SC_Lower), ('\u{a65e}', '\u{a65e}', SC_Upper), ('\u{a65f}', '\u{a65f}', SC_Lower), - ('\u{a660}', '\u{a660}', SC_Upper), ('\u{a661}', '\u{a661}', SC_Lower), ('\u{a662}', - '\u{a662}', SC_Upper), ('\u{a663}', '\u{a663}', SC_Lower), ('\u{a664}', '\u{a664}', - SC_Upper), ('\u{a665}', '\u{a665}', SC_Lower), ('\u{a666}', '\u{a666}', SC_Upper), - ('\u{a667}', '\u{a667}', SC_Lower), ('\u{a668}', '\u{a668}', SC_Upper), ('\u{a669}', - '\u{a669}', SC_Lower), ('\u{a66a}', '\u{a66a}', SC_Upper), ('\u{a66b}', '\u{a66b}', - SC_Lower), ('\u{a66c}', '\u{a66c}', SC_Upper), ('\u{a66d}', '\u{a66d}', SC_Lower), - ('\u{a66e}', '\u{a66e}', SC_OLetter), ('\u{a66f}', '\u{a672}', SC_Extend), ('\u{a674}', - '\u{a67d}', SC_Extend), ('\u{a67f}', '\u{a67f}', SC_OLetter), ('\u{a680}', '\u{a680}', - SC_Upper), ('\u{a681}', '\u{a681}', SC_Lower), ('\u{a682}', '\u{a682}', SC_Upper), - ('\u{a683}', '\u{a683}', SC_Lower), ('\u{a684}', '\u{a684}', SC_Upper), ('\u{a685}', - '\u{a685}', SC_Lower), ('\u{a686}', '\u{a686}', SC_Upper), ('\u{a687}', '\u{a687}', - SC_Lower), ('\u{a688}', '\u{a688}', SC_Upper), ('\u{a689}', '\u{a689}', SC_Lower), - ('\u{a68a}', '\u{a68a}', SC_Upper), ('\u{a68b}', '\u{a68b}', SC_Lower), ('\u{a68c}', - '\u{a68c}', SC_Upper), ('\u{a68d}', '\u{a68d}', SC_Lower), ('\u{a68e}', '\u{a68e}', - SC_Upper), ('\u{a68f}', '\u{a68f}', SC_Lower), ('\u{a690}', '\u{a690}', SC_Upper), - ('\u{a691}', '\u{a691}', SC_Lower), ('\u{a692}', '\u{a692}', SC_Upper), ('\u{a693}', - '\u{a693}', SC_Lower), ('\u{a694}', '\u{a694}', SC_Upper), ('\u{a695}', '\u{a695}', - SC_Lower), ('\u{a696}', '\u{a696}', SC_Upper), ('\u{a697}', '\u{a697}', SC_Lower), - ('\u{a698}', '\u{a698}', SC_Upper), ('\u{a699}', '\u{a699}', SC_Lower), ('\u{a69a}', - '\u{a69a}', SC_Upper), ('\u{a69b}', '\u{a69d}', SC_Lower), ('\u{a69e}', '\u{a69f}', - SC_Extend), ('\u{a6a0}', '\u{a6ef}', SC_OLetter), ('\u{a6f0}', '\u{a6f1}', SC_Extend), - ('\u{a6f3}', '\u{a6f3}', SC_STerm), ('\u{a6f7}', '\u{a6f7}', SC_STerm), ('\u{a717}', - '\u{a71f}', SC_OLetter), ('\u{a722}', '\u{a722}', SC_Upper), ('\u{a723}', '\u{a723}', - SC_Lower), ('\u{a724}', '\u{a724}', SC_Upper), ('\u{a725}', '\u{a725}', SC_Lower), - ('\u{a726}', '\u{a726}', SC_Upper), ('\u{a727}', '\u{a727}', SC_Lower), ('\u{a728}', - '\u{a728}', SC_Upper), ('\u{a729}', '\u{a729}', SC_Lower), ('\u{a72a}', '\u{a72a}', - SC_Upper), ('\u{a72b}', '\u{a72b}', SC_Lower), ('\u{a72c}', '\u{a72c}', SC_Upper), - ('\u{a72d}', '\u{a72d}', SC_Lower), ('\u{a72e}', '\u{a72e}', SC_Upper), ('\u{a72f}', - '\u{a731}', SC_Lower), ('\u{a732}', '\u{a732}', SC_Upper), ('\u{a733}', '\u{a733}', - SC_Lower), ('\u{a734}', '\u{a734}', SC_Upper), ('\u{a735}', '\u{a735}', SC_Lower), - ('\u{a736}', '\u{a736}', SC_Upper), ('\u{a737}', '\u{a737}', SC_Lower), ('\u{a738}', - '\u{a738}', SC_Upper), ('\u{a739}', '\u{a739}', SC_Lower), ('\u{a73a}', '\u{a73a}', - SC_Upper), ('\u{a73b}', '\u{a73b}', SC_Lower), ('\u{a73c}', '\u{a73c}', SC_Upper), - ('\u{a73d}', '\u{a73d}', SC_Lower), ('\u{a73e}', '\u{a73e}', SC_Upper), ('\u{a73f}', - '\u{a73f}', SC_Lower), ('\u{a740}', '\u{a740}', SC_Upper), ('\u{a741}', '\u{a741}', - SC_Lower), ('\u{a742}', '\u{a742}', SC_Upper), ('\u{a743}', '\u{a743}', SC_Lower), - ('\u{a744}', '\u{a744}', SC_Upper), ('\u{a745}', '\u{a745}', SC_Lower), ('\u{a746}', - '\u{a746}', SC_Upper), ('\u{a747}', '\u{a747}', SC_Lower), ('\u{a748}', '\u{a748}', - SC_Upper), ('\u{a749}', '\u{a749}', SC_Lower), ('\u{a74a}', '\u{a74a}', SC_Upper), - ('\u{a74b}', '\u{a74b}', SC_Lower), ('\u{a74c}', '\u{a74c}', SC_Upper), ('\u{a74d}', - '\u{a74d}', SC_Lower), ('\u{a74e}', '\u{a74e}', SC_Upper), ('\u{a74f}', '\u{a74f}', - SC_Lower), ('\u{a750}', '\u{a750}', SC_Upper), ('\u{a751}', '\u{a751}', SC_Lower), - ('\u{a752}', '\u{a752}', SC_Upper), ('\u{a753}', '\u{a753}', SC_Lower), ('\u{a754}', - '\u{a754}', SC_Upper), ('\u{a755}', '\u{a755}', SC_Lower), ('\u{a756}', '\u{a756}', - SC_Upper), ('\u{a757}', '\u{a757}', SC_Lower), ('\u{a758}', '\u{a758}', SC_Upper), - ('\u{a759}', '\u{a759}', SC_Lower), ('\u{a75a}', '\u{a75a}', SC_Upper), ('\u{a75b}', - '\u{a75b}', SC_Lower), ('\u{a75c}', '\u{a75c}', SC_Upper), ('\u{a75d}', '\u{a75d}', - SC_Lower), ('\u{a75e}', '\u{a75e}', SC_Upper), ('\u{a75f}', '\u{a75f}', SC_Lower), - ('\u{a760}', '\u{a760}', SC_Upper), ('\u{a761}', '\u{a761}', SC_Lower), ('\u{a762}', - '\u{a762}', SC_Upper), ('\u{a763}', '\u{a763}', SC_Lower), ('\u{a764}', '\u{a764}', - SC_Upper), ('\u{a765}', '\u{a765}', SC_Lower), ('\u{a766}', '\u{a766}', SC_Upper), - ('\u{a767}', '\u{a767}', SC_Lower), ('\u{a768}', '\u{a768}', SC_Upper), ('\u{a769}', - '\u{a769}', SC_Lower), ('\u{a76a}', '\u{a76a}', SC_Upper), ('\u{a76b}', '\u{a76b}', - SC_Lower), ('\u{a76c}', '\u{a76c}', SC_Upper), ('\u{a76d}', '\u{a76d}', SC_Lower), - ('\u{a76e}', '\u{a76e}', SC_Upper), ('\u{a76f}', '\u{a778}', SC_Lower), ('\u{a779}', - '\u{a779}', SC_Upper), ('\u{a77a}', '\u{a77a}', SC_Lower), ('\u{a77b}', '\u{a77b}', - SC_Upper), ('\u{a77c}', '\u{a77c}', SC_Lower), ('\u{a77d}', '\u{a77e}', SC_Upper), - ('\u{a77f}', '\u{a77f}', SC_Lower), ('\u{a780}', '\u{a780}', SC_Upper), ('\u{a781}', - '\u{a781}', SC_Lower), ('\u{a782}', '\u{a782}', SC_Upper), ('\u{a783}', '\u{a783}', - SC_Lower), ('\u{a784}', '\u{a784}', SC_Upper), ('\u{a785}', '\u{a785}', SC_Lower), - ('\u{a786}', '\u{a786}', SC_Upper), ('\u{a787}', '\u{a787}', SC_Lower), ('\u{a788}', - '\u{a788}', SC_OLetter), ('\u{a78b}', '\u{a78b}', SC_Upper), ('\u{a78c}', '\u{a78c}', - SC_Lower), ('\u{a78d}', '\u{a78d}', SC_Upper), ('\u{a78e}', '\u{a78e}', SC_Lower), - ('\u{a78f}', '\u{a78f}', SC_OLetter), ('\u{a790}', '\u{a790}', SC_Upper), ('\u{a791}', - '\u{a791}', SC_Lower), ('\u{a792}', '\u{a792}', SC_Upper), ('\u{a793}', '\u{a795}', - SC_Lower), ('\u{a796}', '\u{a796}', SC_Upper), ('\u{a797}', '\u{a797}', SC_Lower), - ('\u{a798}', '\u{a798}', SC_Upper), ('\u{a799}', '\u{a799}', SC_Lower), ('\u{a79a}', - '\u{a79a}', SC_Upper), ('\u{a79b}', '\u{a79b}', SC_Lower), ('\u{a79c}', '\u{a79c}', - SC_Upper), ('\u{a79d}', '\u{a79d}', SC_Lower), ('\u{a79e}', '\u{a79e}', SC_Upper), - ('\u{a79f}', '\u{a79f}', SC_Lower), ('\u{a7a0}', '\u{a7a0}', SC_Upper), ('\u{a7a1}', - '\u{a7a1}', SC_Lower), ('\u{a7a2}', '\u{a7a2}', SC_Upper), ('\u{a7a3}', '\u{a7a3}', - SC_Lower), ('\u{a7a4}', '\u{a7a4}', SC_Upper), ('\u{a7a5}', '\u{a7a5}', SC_Lower), - ('\u{a7a6}', '\u{a7a6}', SC_Upper), ('\u{a7a7}', '\u{a7a7}', SC_Lower), ('\u{a7a8}', - '\u{a7a8}', SC_Upper), ('\u{a7a9}', '\u{a7a9}', SC_Lower), ('\u{a7aa}', '\u{a7ae}', - SC_Upper), ('\u{a7af}', '\u{a7af}', SC_Lower), ('\u{a7b0}', '\u{a7b4}', SC_Upper), - ('\u{a7b5}', '\u{a7b5}', SC_Lower), ('\u{a7b6}', '\u{a7b6}', SC_Upper), ('\u{a7b7}', - '\u{a7b7}', SC_Lower), ('\u{a7b8}', '\u{a7b8}', SC_Upper), ('\u{a7b9}', '\u{a7b9}', - SC_Lower), ('\u{a7ba}', '\u{a7ba}', SC_Upper), ('\u{a7bb}', '\u{a7bb}', SC_Lower), - ('\u{a7bc}', '\u{a7bc}', SC_Upper), ('\u{a7bd}', '\u{a7bd}', SC_Lower), ('\u{a7be}', - '\u{a7be}', SC_Upper), ('\u{a7bf}', '\u{a7bf}', SC_Lower), ('\u{a7c0}', '\u{a7c0}', - SC_Upper), ('\u{a7c1}', '\u{a7c1}', SC_Lower), ('\u{a7c2}', '\u{a7c2}', SC_Upper), - ('\u{a7c3}', '\u{a7c3}', SC_Lower), ('\u{a7c4}', '\u{a7c7}', SC_Upper), ('\u{a7c8}', - '\u{a7c8}', SC_Lower), ('\u{a7c9}', '\u{a7c9}', SC_Upper), ('\u{a7ca}', '\u{a7ca}', - SC_Lower), ('\u{a7cb}', '\u{a7cc}', SC_Upper), ('\u{a7cd}', '\u{a7cd}', SC_Lower), - ('\u{a7ce}', '\u{a7ce}', SC_Upper), ('\u{a7cf}', '\u{a7cf}', SC_Lower), ('\u{a7d0}', - '\u{a7d0}', SC_Upper), ('\u{a7d1}', '\u{a7d1}', SC_Lower), ('\u{a7d2}', '\u{a7d2}', - SC_Upper), ('\u{a7d3}', '\u{a7d3}', SC_Lower), ('\u{a7d4}', '\u{a7d4}', SC_Upper), - ('\u{a7d5}', '\u{a7d5}', SC_Lower), ('\u{a7d6}', '\u{a7d6}', SC_Upper), ('\u{a7d7}', - '\u{a7d7}', SC_Lower), ('\u{a7d8}', '\u{a7d8}', SC_Upper), ('\u{a7d9}', '\u{a7d9}', - SC_Lower), ('\u{a7da}', '\u{a7da}', SC_Upper), ('\u{a7db}', '\u{a7db}', SC_Lower), - ('\u{a7dc}', '\u{a7dc}', SC_Upper), ('\u{a7f1}', '\u{a7f4}', SC_Lower), ('\u{a7f5}', - '\u{a7f5}', SC_Upper), ('\u{a7f6}', '\u{a7f6}', SC_Lower), ('\u{a7f7}', '\u{a7f7}', - SC_OLetter), ('\u{a7f8}', '\u{a7fa}', SC_Lower), ('\u{a7fb}', '\u{a801}', SC_OLetter), - ('\u{a802}', '\u{a802}', SC_Extend), ('\u{a803}', '\u{a805}', SC_OLetter), ('\u{a806}', - '\u{a806}', SC_Extend), ('\u{a807}', '\u{a80a}', SC_OLetter), ('\u{a80b}', '\u{a80b}', - SC_Extend), ('\u{a80c}', '\u{a822}', SC_OLetter), ('\u{a823}', '\u{a827}', SC_Extend), - ('\u{a82c}', '\u{a82c}', SC_Extend), ('\u{a840}', '\u{a873}', SC_OLetter), ('\u{a876}', - '\u{a877}', SC_STerm), ('\u{a880}', '\u{a881}', SC_Extend), ('\u{a882}', '\u{a8b3}', - SC_OLetter), ('\u{a8b4}', '\u{a8c5}', SC_Extend), ('\u{a8ce}', '\u{a8cf}', SC_STerm), - ('\u{a8d0}', '\u{a8d9}', SC_Numeric), ('\u{a8e0}', '\u{a8f1}', SC_Extend), ('\u{a8f2}', - '\u{a8f7}', SC_OLetter), ('\u{a8fb}', '\u{a8fb}', SC_OLetter), ('\u{a8fd}', '\u{a8fe}', - SC_OLetter), ('\u{a8ff}', '\u{a8ff}', SC_Extend), ('\u{a900}', '\u{a909}', SC_Numeric), - ('\u{a90a}', '\u{a925}', SC_OLetter), ('\u{a926}', '\u{a92d}', SC_Extend), ('\u{a92f}', - '\u{a92f}', SC_STerm), ('\u{a930}', '\u{a946}', SC_OLetter), ('\u{a947}', '\u{a953}', - SC_Extend), ('\u{a960}', '\u{a97c}', SC_OLetter), ('\u{a980}', '\u{a983}', SC_Extend), - ('\u{a984}', '\u{a9b2}', SC_OLetter), ('\u{a9b3}', '\u{a9c0}', SC_Extend), ('\u{a9c8}', - '\u{a9c9}', SC_STerm), ('\u{a9cf}', '\u{a9cf}', SC_OLetter), ('\u{a9d0}', '\u{a9d9}', - SC_Numeric), ('\u{a9e0}', '\u{a9e4}', SC_OLetter), ('\u{a9e5}', '\u{a9e5}', SC_Extend), - ('\u{a9e6}', '\u{a9ef}', SC_OLetter), ('\u{a9f0}', '\u{a9f9}', SC_Numeric), ('\u{a9fa}', - '\u{a9fe}', SC_OLetter), ('\u{aa00}', '\u{aa28}', SC_OLetter), ('\u{aa29}', '\u{aa36}', - SC_Extend), ('\u{aa40}', '\u{aa42}', SC_OLetter), ('\u{aa43}', '\u{aa43}', SC_Extend), - ('\u{aa44}', '\u{aa4b}', SC_OLetter), ('\u{aa4c}', '\u{aa4d}', SC_Extend), ('\u{aa50}', - '\u{aa59}', SC_Numeric), ('\u{aa5d}', '\u{aa5f}', SC_STerm), ('\u{aa60}', '\u{aa76}', - SC_OLetter), ('\u{aa7a}', '\u{aa7a}', SC_OLetter), ('\u{aa7b}', '\u{aa7d}', SC_Extend), - ('\u{aa7e}', '\u{aaaf}', SC_OLetter), ('\u{aab0}', '\u{aab0}', SC_Extend), ('\u{aab1}', - '\u{aab1}', SC_OLetter), ('\u{aab2}', '\u{aab4}', SC_Extend), ('\u{aab5}', '\u{aab6}', - SC_OLetter), ('\u{aab7}', '\u{aab8}', SC_Extend), ('\u{aab9}', '\u{aabd}', SC_OLetter), - ('\u{aabe}', '\u{aabf}', SC_Extend), ('\u{aac0}', '\u{aac0}', SC_OLetter), ('\u{aac1}', - '\u{aac1}', SC_Extend), ('\u{aac2}', '\u{aac2}', SC_OLetter), ('\u{aadb}', '\u{aadd}', - SC_OLetter), ('\u{aae0}', '\u{aaea}', SC_OLetter), ('\u{aaeb}', '\u{aaef}', SC_Extend), - ('\u{aaf0}', '\u{aaf1}', SC_STerm), ('\u{aaf2}', '\u{aaf4}', SC_OLetter), ('\u{aaf5}', - '\u{aaf6}', SC_Extend), ('\u{ab01}', '\u{ab06}', SC_OLetter), ('\u{ab09}', '\u{ab0e}', - SC_OLetter), ('\u{ab11}', '\u{ab16}', SC_OLetter), ('\u{ab20}', '\u{ab26}', SC_OLetter), - ('\u{ab28}', '\u{ab2e}', SC_OLetter), ('\u{ab30}', '\u{ab5a}', SC_Lower), ('\u{ab5c}', - '\u{ab69}', SC_Lower), ('\u{ab70}', '\u{abbf}', SC_Lower), ('\u{abc0}', '\u{abe2}', - SC_OLetter), ('\u{abe3}', '\u{abea}', SC_Extend), ('\u{abeb}', '\u{abeb}', SC_STerm), - ('\u{abec}', '\u{abed}', SC_Extend), ('\u{abf0}', '\u{abf9}', SC_Numeric), ('\u{ac00}', - '\u{d7a3}', SC_OLetter), ('\u{d7b0}', '\u{d7c6}', SC_OLetter), ('\u{d7cb}', '\u{d7fb}', - SC_OLetter), ('\u{f900}', '\u{fa6d}', SC_OLetter), ('\u{fa70}', '\u{fad9}', SC_OLetter), - ('\u{fb00}', '\u{fb06}', SC_Lower), ('\u{fb13}', '\u{fb17}', SC_Lower), ('\u{fb1d}', - '\u{fb1d}', SC_OLetter), ('\u{fb1e}', '\u{fb1e}', SC_Extend), ('\u{fb1f}', '\u{fb28}', - SC_OLetter), ('\u{fb2a}', '\u{fb36}', SC_OLetter), ('\u{fb38}', '\u{fb3c}', SC_OLetter), - ('\u{fb3e}', '\u{fb3e}', SC_OLetter), ('\u{fb40}', '\u{fb41}', SC_OLetter), ('\u{fb43}', - '\u{fb44}', SC_OLetter), ('\u{fb46}', '\u{fbb1}', SC_OLetter), ('\u{fbd3}', '\u{fd3d}', - SC_OLetter), ('\u{fd3e}', '\u{fd3f}', SC_Close), ('\u{fd50}', '\u{fd8f}', SC_OLetter), - ('\u{fd92}', '\u{fdc7}', SC_OLetter), ('\u{fdf0}', '\u{fdfb}', SC_OLetter), ('\u{fe00}', - '\u{fe0f}', SC_Extend), ('\u{fe10}', '\u{fe11}', SC_SContinue), ('\u{fe12}', '\u{fe12}', - SC_STerm), ('\u{fe13}', '\u{fe14}', SC_SContinue), ('\u{fe15}', '\u{fe16}', SC_STerm), - ('\u{fe17}', '\u{fe18}', SC_Close), ('\u{fe20}', '\u{fe2f}', SC_Extend), ('\u{fe31}', - '\u{fe32}', SC_SContinue), ('\u{fe35}', '\u{fe44}', SC_Close), ('\u{fe47}', '\u{fe48}', - SC_Close), ('\u{fe50}', '\u{fe51}', SC_SContinue), ('\u{fe52}', '\u{fe52}', SC_ATerm), - ('\u{fe54}', '\u{fe55}', SC_SContinue), ('\u{fe56}', '\u{fe57}', SC_STerm), ('\u{fe58}', - '\u{fe58}', SC_SContinue), ('\u{fe59}', '\u{fe5e}', SC_Close), ('\u{fe63}', '\u{fe63}', - SC_SContinue), ('\u{fe70}', '\u{fe74}', SC_OLetter), ('\u{fe76}', '\u{fefc}', SC_OLetter), - ('\u{feff}', '\u{feff}', SC_Format), ('\u{ff01}', '\u{ff01}', SC_STerm), ('\u{ff08}', - '\u{ff09}', SC_Close), ('\u{ff0c}', '\u{ff0d}', SC_SContinue), ('\u{ff0e}', '\u{ff0e}', - SC_ATerm), ('\u{ff10}', '\u{ff19}', SC_Numeric), ('\u{ff1a}', '\u{ff1b}', SC_SContinue), - ('\u{ff1f}', '\u{ff1f}', SC_STerm), ('\u{ff21}', '\u{ff3a}', SC_Upper), ('\u{ff3b}', - '\u{ff3b}', SC_Close), ('\u{ff3d}', '\u{ff3d}', SC_Close), ('\u{ff41}', '\u{ff5a}', - SC_Lower), ('\u{ff5b}', '\u{ff5b}', SC_Close), ('\u{ff5d}', '\u{ff5d}', SC_Close), - ('\u{ff5f}', '\u{ff60}', SC_Close), ('\u{ff61}', '\u{ff61}', SC_STerm), ('\u{ff62}', - '\u{ff63}', SC_Close), ('\u{ff64}', '\u{ff64}', SC_SContinue), ('\u{ff66}', '\u{ff9d}', - SC_OLetter), ('\u{ff9e}', '\u{ff9f}', SC_Extend), ('\u{ffa0}', '\u{ffbe}', SC_OLetter), - ('\u{ffc2}', '\u{ffc7}', SC_OLetter), ('\u{ffca}', '\u{ffcf}', SC_OLetter), ('\u{ffd2}', - '\u{ffd7}', SC_OLetter), ('\u{ffda}', '\u{ffdc}', SC_OLetter), ('\u{fff9}', '\u{fffb}', - SC_Format), ('\u{10000}', '\u{1000b}', SC_OLetter), ('\u{1000d}', '\u{10026}', SC_OLetter), - ('\u{10028}', '\u{1003a}', SC_OLetter), ('\u{1003c}', '\u{1003d}', SC_OLetter), - ('\u{1003f}', '\u{1004d}', SC_OLetter), ('\u{10050}', '\u{1005d}', SC_OLetter), - ('\u{10080}', '\u{100fa}', SC_OLetter), ('\u{10140}', '\u{10174}', SC_OLetter), - ('\u{101fd}', '\u{101fd}', SC_Extend), ('\u{10280}', '\u{1029c}', SC_OLetter), ('\u{102a0}', - '\u{102d0}', SC_OLetter), ('\u{102e0}', '\u{102e0}', SC_Extend), ('\u{10300}', '\u{1031f}', - SC_OLetter), ('\u{1032d}', '\u{1034a}', SC_OLetter), ('\u{10350}', '\u{10375}', SC_OLetter), - ('\u{10376}', '\u{1037a}', SC_Extend), ('\u{10380}', '\u{1039d}', SC_OLetter), ('\u{103a0}', - '\u{103c3}', SC_OLetter), ('\u{103c8}', '\u{103cf}', SC_OLetter), ('\u{103d1}', '\u{103d5}', - SC_OLetter), ('\u{10400}', '\u{10427}', SC_Upper), ('\u{10428}', '\u{1044f}', SC_Lower), - ('\u{10450}', '\u{1049d}', SC_OLetter), ('\u{104a0}', '\u{104a9}', SC_Numeric), - ('\u{104b0}', '\u{104d3}', SC_Upper), ('\u{104d8}', '\u{104fb}', SC_Lower), ('\u{10500}', - '\u{10527}', SC_OLetter), ('\u{10530}', '\u{10563}', SC_OLetter), ('\u{10570}', '\u{1057a}', - SC_Upper), ('\u{1057c}', '\u{1058a}', SC_Upper), ('\u{1058c}', '\u{10592}', SC_Upper), - ('\u{10594}', '\u{10595}', SC_Upper), ('\u{10597}', '\u{105a1}', SC_Lower), ('\u{105a3}', - '\u{105b1}', SC_Lower), ('\u{105b3}', '\u{105b9}', SC_Lower), ('\u{105bb}', '\u{105bc}', - SC_Lower), ('\u{105c0}', '\u{105f3}', SC_OLetter), ('\u{10600}', '\u{10736}', SC_OLetter), - ('\u{10740}', '\u{10755}', SC_OLetter), ('\u{10760}', '\u{10767}', SC_OLetter), - ('\u{10780}', '\u{10780}', SC_Lower), ('\u{10781}', '\u{10782}', SC_OLetter), ('\u{10783}', - '\u{10785}', SC_Lower), ('\u{10787}', '\u{107b0}', SC_Lower), ('\u{107b2}', '\u{107ba}', - SC_Lower), ('\u{10800}', '\u{10805}', SC_OLetter), ('\u{10808}', '\u{10808}', SC_OLetter), - ('\u{1080a}', '\u{10835}', SC_OLetter), ('\u{10837}', '\u{10838}', SC_OLetter), - ('\u{1083c}', '\u{1083c}', SC_OLetter), ('\u{1083f}', '\u{10855}', SC_OLetter), - ('\u{10860}', '\u{10876}', SC_OLetter), ('\u{10880}', '\u{1089e}', SC_OLetter), - ('\u{108e0}', '\u{108f2}', SC_OLetter), ('\u{108f4}', '\u{108f5}', SC_OLetter), - ('\u{10900}', '\u{10915}', SC_OLetter), ('\u{10920}', '\u{10939}', SC_OLetter), - ('\u{10940}', '\u{10959}', SC_OLetter), ('\u{10980}', '\u{109b7}', SC_OLetter), - ('\u{109be}', '\u{109bf}', SC_OLetter), ('\u{10a00}', '\u{10a00}', SC_OLetter), - ('\u{10a01}', '\u{10a03}', SC_Extend), ('\u{10a05}', '\u{10a06}', SC_Extend), ('\u{10a0c}', - '\u{10a0f}', SC_Extend), ('\u{10a10}', '\u{10a13}', SC_OLetter), ('\u{10a15}', '\u{10a17}', - SC_OLetter), ('\u{10a19}', '\u{10a35}', SC_OLetter), ('\u{10a38}', '\u{10a3a}', SC_Extend), - ('\u{10a3f}', '\u{10a3f}', SC_Extend), ('\u{10a56}', '\u{10a57}', SC_STerm), ('\u{10a60}', - '\u{10a7c}', SC_OLetter), ('\u{10a80}', '\u{10a9c}', SC_OLetter), ('\u{10ac0}', '\u{10ac7}', - SC_OLetter), ('\u{10ac9}', '\u{10ae4}', SC_OLetter), ('\u{10ae5}', '\u{10ae6}', SC_Extend), - ('\u{10b00}', '\u{10b35}', SC_OLetter), ('\u{10b40}', '\u{10b55}', SC_OLetter), - ('\u{10b60}', '\u{10b72}', SC_OLetter), ('\u{10b80}', '\u{10b91}', SC_OLetter), - ('\u{10c00}', '\u{10c48}', SC_OLetter), ('\u{10c80}', '\u{10cb2}', SC_Upper), ('\u{10cc0}', - '\u{10cf2}', SC_Lower), ('\u{10d00}', '\u{10d23}', SC_OLetter), ('\u{10d24}', '\u{10d27}', - SC_Extend), ('\u{10d30}', '\u{10d39}', SC_Numeric), ('\u{10d40}', '\u{10d49}', SC_Numeric), - ('\u{10d4a}', '\u{10d4f}', SC_OLetter), ('\u{10d50}', '\u{10d65}', SC_Upper), ('\u{10d69}', - '\u{10d6d}', SC_Extend), ('\u{10d6f}', '\u{10d6f}', SC_OLetter), ('\u{10d70}', '\u{10d85}', - SC_Lower), ('\u{10e80}', '\u{10ea9}', SC_OLetter), ('\u{10eab}', '\u{10eac}', SC_Extend), - ('\u{10eb0}', '\u{10eb1}', SC_OLetter), ('\u{10ec2}', '\u{10ec7}', SC_OLetter), - ('\u{10efa}', '\u{10eff}', SC_Extend), ('\u{10f00}', '\u{10f1c}', SC_OLetter), ('\u{10f27}', - '\u{10f27}', SC_OLetter), ('\u{10f30}', '\u{10f45}', SC_OLetter), ('\u{10f46}', '\u{10f50}', - SC_Extend), ('\u{10f55}', '\u{10f59}', SC_STerm), ('\u{10f70}', '\u{10f81}', SC_OLetter), - ('\u{10f82}', '\u{10f85}', SC_Extend), ('\u{10f86}', '\u{10f89}', SC_STerm), ('\u{10fb0}', - '\u{10fc4}', SC_OLetter), ('\u{10fe0}', '\u{10ff6}', SC_OLetter), ('\u{11000}', '\u{11002}', - SC_Extend), ('\u{11003}', '\u{11037}', SC_OLetter), ('\u{11038}', '\u{11046}', SC_Extend), - ('\u{11047}', '\u{11048}', SC_STerm), ('\u{11066}', '\u{1106f}', SC_Numeric), ('\u{11070}', - '\u{11070}', SC_Extend), ('\u{11071}', '\u{11072}', SC_OLetter), ('\u{11073}', '\u{11074}', - SC_Extend), ('\u{11075}', '\u{11075}', SC_OLetter), ('\u{1107f}', '\u{11082}', SC_Extend), - ('\u{11083}', '\u{110af}', SC_OLetter), ('\u{110b0}', '\u{110ba}', SC_Extend), ('\u{110bd}', - '\u{110bd}', SC_Numeric), ('\u{110be}', '\u{110c1}', SC_STerm), ('\u{110c2}', '\u{110c2}', - SC_Extend), ('\u{110cd}', '\u{110cd}', SC_Numeric), ('\u{110d0}', '\u{110e8}', SC_OLetter), - ('\u{110f0}', '\u{110f9}', SC_Numeric), ('\u{11100}', '\u{11102}', SC_Extend), ('\u{11103}', - '\u{11126}', SC_OLetter), ('\u{11127}', '\u{11134}', SC_Extend), ('\u{11136}', '\u{1113f}', - SC_Numeric), ('\u{11141}', '\u{11143}', SC_STerm), ('\u{11144}', '\u{11144}', SC_OLetter), - ('\u{11145}', '\u{11146}', SC_Extend), ('\u{11147}', '\u{11147}', SC_OLetter), ('\u{11150}', - '\u{11172}', SC_OLetter), ('\u{11173}', '\u{11173}', SC_Extend), ('\u{11176}', '\u{11176}', - SC_OLetter), ('\u{11180}', '\u{11182}', SC_Extend), ('\u{11183}', '\u{111b2}', SC_OLetter), - ('\u{111b3}', '\u{111c0}', SC_Extend), ('\u{111c1}', '\u{111c4}', SC_OLetter), ('\u{111c5}', - '\u{111c6}', SC_STerm), ('\u{111c9}', '\u{111cc}', SC_Extend), ('\u{111cd}', '\u{111cd}', - SC_STerm), ('\u{111ce}', '\u{111cf}', SC_Extend), ('\u{111d0}', '\u{111d9}', SC_Numeric), - ('\u{111da}', '\u{111da}', SC_OLetter), ('\u{111dc}', '\u{111dc}', SC_OLetter), - ('\u{111de}', '\u{111df}', SC_STerm), ('\u{11200}', '\u{11211}', SC_OLetter), ('\u{11213}', - '\u{1122b}', SC_OLetter), ('\u{1122c}', '\u{11237}', SC_Extend), ('\u{11238}', '\u{11239}', - SC_STerm), ('\u{1123b}', '\u{1123c}', SC_STerm), ('\u{1123e}', '\u{1123e}', SC_Extend), - ('\u{1123f}', '\u{11240}', SC_OLetter), ('\u{11241}', '\u{11241}', SC_Extend), ('\u{11280}', - '\u{11286}', SC_OLetter), ('\u{11288}', '\u{11288}', SC_OLetter), ('\u{1128a}', '\u{1128d}', - SC_OLetter), ('\u{1128f}', '\u{1129d}', SC_OLetter), ('\u{1129f}', '\u{112a8}', SC_OLetter), - ('\u{112a9}', '\u{112a9}', SC_STerm), ('\u{112b0}', '\u{112de}', SC_OLetter), ('\u{112df}', - '\u{112ea}', SC_Extend), ('\u{112f0}', '\u{112f9}', SC_Numeric), ('\u{11300}', '\u{11303}', - SC_Extend), ('\u{11305}', '\u{1130c}', SC_OLetter), ('\u{1130f}', '\u{11310}', SC_OLetter), - ('\u{11313}', '\u{11328}', SC_OLetter), ('\u{1132a}', '\u{11330}', SC_OLetter), - ('\u{11332}', '\u{11333}', SC_OLetter), ('\u{11335}', '\u{11339}', SC_OLetter), - ('\u{1133b}', '\u{1133c}', SC_Extend), ('\u{1133d}', '\u{1133d}', SC_OLetter), ('\u{1133e}', - '\u{11344}', SC_Extend), ('\u{11347}', '\u{11348}', SC_Extend), ('\u{1134b}', '\u{1134d}', - SC_Extend), ('\u{11350}', '\u{11350}', SC_OLetter), ('\u{11357}', '\u{11357}', SC_Extend), - ('\u{1135d}', '\u{11361}', SC_OLetter), ('\u{11362}', '\u{11363}', SC_Extend), ('\u{11366}', - '\u{1136c}', SC_Extend), ('\u{11370}', '\u{11374}', SC_Extend), ('\u{11380}', '\u{11389}', - SC_OLetter), ('\u{1138b}', '\u{1138b}', SC_OLetter), ('\u{1138e}', '\u{1138e}', SC_OLetter), - ('\u{11390}', '\u{113b5}', SC_OLetter), ('\u{113b7}', '\u{113b7}', SC_OLetter), - ('\u{113b8}', '\u{113c0}', SC_Extend), ('\u{113c2}', '\u{113c2}', SC_Extend), ('\u{113c5}', - '\u{113c5}', SC_Extend), ('\u{113c7}', '\u{113ca}', SC_Extend), ('\u{113cc}', '\u{113d0}', - SC_Extend), ('\u{113d1}', '\u{113d1}', SC_OLetter), ('\u{113d2}', '\u{113d2}', SC_Extend), - ('\u{113d3}', '\u{113d3}', SC_OLetter), ('\u{113d4}', '\u{113d5}', SC_STerm), ('\u{113e1}', - '\u{113e2}', SC_Extend), ('\u{11400}', '\u{11434}', SC_OLetter), ('\u{11435}', '\u{11446}', - SC_Extend), ('\u{11447}', '\u{1144a}', SC_OLetter), ('\u{1144b}', '\u{1144c}', SC_STerm), - ('\u{11450}', '\u{11459}', SC_Numeric), ('\u{1145e}', '\u{1145e}', SC_Extend), ('\u{1145f}', - '\u{11461}', SC_OLetter), ('\u{11480}', '\u{114af}', SC_OLetter), ('\u{114b0}', '\u{114c3}', - SC_Extend), ('\u{114c4}', '\u{114c5}', SC_OLetter), ('\u{114c7}', '\u{114c7}', SC_OLetter), - ('\u{114d0}', '\u{114d9}', SC_Numeric), ('\u{11580}', '\u{115ae}', SC_OLetter), - ('\u{115af}', '\u{115b5}', SC_Extend), ('\u{115b8}', '\u{115c0}', SC_Extend), ('\u{115c2}', - '\u{115c3}', SC_STerm), ('\u{115c9}', '\u{115d7}', SC_STerm), ('\u{115d8}', '\u{115db}', - SC_OLetter), ('\u{115dc}', '\u{115dd}', SC_Extend), ('\u{11600}', '\u{1162f}', SC_OLetter), - ('\u{11630}', '\u{11640}', SC_Extend), ('\u{11641}', '\u{11642}', SC_STerm), ('\u{11644}', - '\u{11644}', SC_OLetter), ('\u{11650}', '\u{11659}', SC_Numeric), ('\u{11680}', '\u{116aa}', - SC_OLetter), ('\u{116ab}', '\u{116b7}', SC_Extend), ('\u{116b8}', '\u{116b8}', SC_OLetter), - ('\u{116c0}', '\u{116c9}', SC_Numeric), ('\u{116d0}', '\u{116e3}', SC_Numeric), - ('\u{11700}', '\u{1171a}', SC_OLetter), ('\u{1171d}', '\u{1172b}', SC_Extend), ('\u{11730}', - '\u{11739}', SC_Numeric), ('\u{1173c}', '\u{1173e}', SC_STerm), ('\u{11740}', '\u{11746}', - SC_OLetter), ('\u{11800}', '\u{1182b}', SC_OLetter), ('\u{1182c}', '\u{1183a}', SC_Extend), - ('\u{118a0}', '\u{118bf}', SC_Upper), ('\u{118c0}', '\u{118df}', SC_Lower), ('\u{118e0}', - '\u{118e9}', SC_Numeric), ('\u{118ff}', '\u{11906}', SC_OLetter), ('\u{11909}', '\u{11909}', - SC_OLetter), ('\u{1190c}', '\u{11913}', SC_OLetter), ('\u{11915}', '\u{11916}', SC_OLetter), - ('\u{11918}', '\u{1192f}', SC_OLetter), ('\u{11930}', '\u{11935}', SC_Extend), ('\u{11937}', - '\u{11938}', SC_Extend), ('\u{1193b}', '\u{1193e}', SC_Extend), ('\u{1193f}', '\u{1193f}', - SC_OLetter), ('\u{11940}', '\u{11940}', SC_Extend), ('\u{11941}', '\u{11941}', SC_OLetter), - ('\u{11942}', '\u{11943}', SC_Extend), ('\u{11944}', '\u{11944}', SC_STerm), ('\u{11946}', - '\u{11946}', SC_STerm), ('\u{11950}', '\u{11959}', SC_Numeric), ('\u{119a0}', '\u{119a7}', - SC_OLetter), ('\u{119aa}', '\u{119d0}', SC_OLetter), ('\u{119d1}', '\u{119d7}', SC_Extend), - ('\u{119da}', '\u{119e0}', SC_Extend), ('\u{119e1}', '\u{119e1}', SC_OLetter), ('\u{119e3}', - '\u{119e3}', SC_OLetter), ('\u{119e4}', '\u{119e4}', SC_Extend), ('\u{11a00}', '\u{11a00}', - SC_OLetter), ('\u{11a01}', '\u{11a0a}', SC_Extend), ('\u{11a0b}', '\u{11a32}', SC_OLetter), - ('\u{11a33}', '\u{11a39}', SC_Extend), ('\u{11a3a}', '\u{11a3a}', SC_OLetter), ('\u{11a3b}', - '\u{11a3e}', SC_Extend), ('\u{11a42}', '\u{11a43}', SC_STerm), ('\u{11a47}', '\u{11a47}', - SC_Extend), ('\u{11a50}', '\u{11a50}', SC_OLetter), ('\u{11a51}', '\u{11a5b}', SC_Extend), - ('\u{11a5c}', '\u{11a89}', SC_OLetter), ('\u{11a8a}', '\u{11a99}', SC_Extend), ('\u{11a9b}', - '\u{11a9c}', SC_STerm), ('\u{11a9d}', '\u{11a9d}', SC_OLetter), ('\u{11ab0}', '\u{11af8}', - SC_OLetter), ('\u{11b60}', '\u{11b67}', SC_Extend), ('\u{11bc0}', '\u{11be0}', SC_OLetter), - ('\u{11bf0}', '\u{11bf9}', SC_Numeric), ('\u{11c00}', '\u{11c08}', SC_OLetter), - ('\u{11c0a}', '\u{11c2e}', SC_OLetter), ('\u{11c2f}', '\u{11c36}', SC_Extend), ('\u{11c38}', - '\u{11c3f}', SC_Extend), ('\u{11c40}', '\u{11c40}', SC_OLetter), ('\u{11c41}', '\u{11c42}', - SC_STerm), ('\u{11c50}', '\u{11c59}', SC_Numeric), ('\u{11c72}', '\u{11c8f}', SC_OLetter), - ('\u{11c92}', '\u{11ca7}', SC_Extend), ('\u{11ca9}', '\u{11cb6}', SC_Extend), ('\u{11d00}', - '\u{11d06}', SC_OLetter), ('\u{11d08}', '\u{11d09}', SC_OLetter), ('\u{11d0b}', '\u{11d30}', - SC_OLetter), ('\u{11d31}', '\u{11d36}', SC_Extend), ('\u{11d3a}', '\u{11d3a}', SC_Extend), - ('\u{11d3c}', '\u{11d3d}', SC_Extend), ('\u{11d3f}', '\u{11d45}', SC_Extend), ('\u{11d46}', - '\u{11d46}', SC_OLetter), ('\u{11d47}', '\u{11d47}', SC_Extend), ('\u{11d50}', '\u{11d59}', - SC_Numeric), ('\u{11d60}', '\u{11d65}', SC_OLetter), ('\u{11d67}', '\u{11d68}', SC_OLetter), - ('\u{11d6a}', '\u{11d89}', SC_OLetter), ('\u{11d8a}', '\u{11d8e}', SC_Extend), ('\u{11d90}', - '\u{11d91}', SC_Extend), ('\u{11d93}', '\u{11d97}', SC_Extend), ('\u{11d98}', '\u{11d98}', - SC_OLetter), ('\u{11da0}', '\u{11da9}', SC_Numeric), ('\u{11db0}', '\u{11ddb}', SC_OLetter), - ('\u{11de0}', '\u{11de9}', SC_Numeric), ('\u{11ee0}', '\u{11ef2}', SC_OLetter), - ('\u{11ef3}', '\u{11ef6}', SC_Extend), ('\u{11ef7}', '\u{11ef8}', SC_STerm), ('\u{11f00}', - '\u{11f01}', SC_Extend), ('\u{11f02}', '\u{11f02}', SC_OLetter), ('\u{11f03}', '\u{11f03}', - SC_Extend), ('\u{11f04}', '\u{11f10}', SC_OLetter), ('\u{11f12}', '\u{11f33}', SC_OLetter), - ('\u{11f34}', '\u{11f3a}', SC_Extend), ('\u{11f3e}', '\u{11f42}', SC_Extend), ('\u{11f43}', - '\u{11f44}', SC_STerm), ('\u{11f50}', '\u{11f59}', SC_Numeric), ('\u{11f5a}', '\u{11f5a}', - SC_Extend), ('\u{11fb0}', '\u{11fb0}', SC_OLetter), ('\u{12000}', '\u{12399}', SC_OLetter), - ('\u{12400}', '\u{1246e}', SC_OLetter), ('\u{12480}', '\u{12543}', SC_OLetter), - ('\u{12f90}', '\u{12ff0}', SC_OLetter), ('\u{13000}', '\u{1342f}', SC_OLetter), - ('\u{13430}', '\u{1343f}', SC_Format), ('\u{13440}', '\u{13440}', SC_Extend), ('\u{13441}', - '\u{13446}', SC_OLetter), ('\u{13447}', '\u{13455}', SC_Extend), ('\u{13460}', '\u{143fa}', - SC_OLetter), ('\u{14400}', '\u{14646}', SC_OLetter), ('\u{16100}', '\u{1611d}', SC_OLetter), - ('\u{1611e}', '\u{1612f}', SC_Extend), ('\u{16130}', '\u{16139}', SC_Numeric), ('\u{16800}', - '\u{16a38}', SC_OLetter), ('\u{16a40}', '\u{16a5e}', SC_OLetter), ('\u{16a60}', '\u{16a69}', - SC_Numeric), ('\u{16a6e}', '\u{16a6f}', SC_STerm), ('\u{16a70}', '\u{16abe}', SC_OLetter), - ('\u{16ac0}', '\u{16ac9}', SC_Numeric), ('\u{16ad0}', '\u{16aed}', SC_OLetter), - ('\u{16af0}', '\u{16af4}', SC_Extend), ('\u{16af5}', '\u{16af5}', SC_STerm), ('\u{16b00}', - '\u{16b2f}', SC_OLetter), ('\u{16b30}', '\u{16b36}', SC_Extend), ('\u{16b37}', '\u{16b38}', - SC_STerm), ('\u{16b40}', '\u{16b43}', SC_OLetter), ('\u{16b44}', '\u{16b44}', SC_STerm), - ('\u{16b50}', '\u{16b59}', SC_Numeric), ('\u{16b63}', '\u{16b77}', SC_OLetter), - ('\u{16b7d}', '\u{16b8f}', SC_OLetter), ('\u{16d40}', '\u{16d6c}', SC_OLetter), - ('\u{16d6e}', '\u{16d6f}', SC_STerm), ('\u{16d70}', '\u{16d79}', SC_Numeric), ('\u{16e40}', - '\u{16e5f}', SC_Upper), ('\u{16e60}', '\u{16e7f}', SC_Lower), ('\u{16e98}', '\u{16e98}', - SC_STerm), ('\u{16ea0}', '\u{16eb8}', SC_Upper), ('\u{16ebb}', '\u{16ed3}', SC_Lower), - ('\u{16f00}', '\u{16f4a}', SC_OLetter), ('\u{16f4f}', '\u{16f4f}', SC_Extend), ('\u{16f50}', - '\u{16f50}', SC_OLetter), ('\u{16f51}', '\u{16f87}', SC_Extend), ('\u{16f8f}', '\u{16f92}', - SC_Extend), ('\u{16f93}', '\u{16f9f}', SC_OLetter), ('\u{16fe0}', '\u{16fe1}', SC_OLetter), - ('\u{16fe3}', '\u{16fe3}', SC_OLetter), ('\u{16fe4}', '\u{16fe4}', SC_Extend), ('\u{16ff0}', - '\u{16ff1}', SC_Extend), ('\u{16ff2}', '\u{16ff6}', SC_OLetter), ('\u{17000}', '\u{18cd5}', - SC_OLetter), ('\u{18cff}', '\u{18d1e}', SC_OLetter), ('\u{18d80}', '\u{18df2}', SC_OLetter), - ('\u{1aff0}', '\u{1aff3}', SC_OLetter), ('\u{1aff5}', '\u{1affb}', SC_OLetter), - ('\u{1affd}', '\u{1affe}', SC_OLetter), ('\u{1b000}', '\u{1b122}', SC_OLetter), - ('\u{1b132}', '\u{1b132}', SC_OLetter), ('\u{1b150}', '\u{1b152}', SC_OLetter), - ('\u{1b155}', '\u{1b155}', SC_OLetter), ('\u{1b164}', '\u{1b167}', SC_OLetter), - ('\u{1b170}', '\u{1b2fb}', SC_OLetter), ('\u{1bc00}', '\u{1bc6a}', SC_OLetter), - ('\u{1bc70}', '\u{1bc7c}', SC_OLetter), ('\u{1bc80}', '\u{1bc88}', SC_OLetter), - ('\u{1bc90}', '\u{1bc99}', SC_OLetter), ('\u{1bc9d}', '\u{1bc9e}', SC_Extend), ('\u{1bc9f}', - '\u{1bc9f}', SC_STerm), ('\u{1bca0}', '\u{1bca3}', SC_Format), ('\u{1ccf0}', '\u{1ccf9}', - SC_Numeric), ('\u{1cf00}', '\u{1cf2d}', SC_Extend), ('\u{1cf30}', '\u{1cf46}', SC_Extend), - ('\u{1d165}', '\u{1d169}', SC_Extend), ('\u{1d16d}', '\u{1d172}', SC_Extend), ('\u{1d173}', - '\u{1d17a}', SC_Format), ('\u{1d17b}', '\u{1d182}', SC_Extend), ('\u{1d185}', '\u{1d18b}', - SC_Extend), ('\u{1d1aa}', '\u{1d1ad}', SC_Extend), ('\u{1d242}', '\u{1d244}', SC_Extend), - ('\u{1d400}', '\u{1d419}', SC_Upper), ('\u{1d41a}', '\u{1d433}', SC_Lower), ('\u{1d434}', - '\u{1d44d}', SC_Upper), ('\u{1d44e}', '\u{1d454}', SC_Lower), ('\u{1d456}', '\u{1d467}', - SC_Lower), ('\u{1d468}', '\u{1d481}', SC_Upper), ('\u{1d482}', '\u{1d49b}', SC_Lower), - ('\u{1d49c}', '\u{1d49c}', SC_Upper), ('\u{1d49e}', '\u{1d49f}', SC_Upper), ('\u{1d4a2}', - '\u{1d4a2}', SC_Upper), ('\u{1d4a5}', '\u{1d4a6}', SC_Upper), ('\u{1d4a9}', '\u{1d4ac}', - SC_Upper), ('\u{1d4ae}', '\u{1d4b5}', SC_Upper), ('\u{1d4b6}', '\u{1d4b9}', SC_Lower), - ('\u{1d4bb}', '\u{1d4bb}', SC_Lower), ('\u{1d4bd}', '\u{1d4c3}', SC_Lower), ('\u{1d4c5}', - '\u{1d4cf}', SC_Lower), ('\u{1d4d0}', '\u{1d4e9}', SC_Upper), ('\u{1d4ea}', '\u{1d503}', - SC_Lower), ('\u{1d504}', '\u{1d505}', SC_Upper), ('\u{1d507}', '\u{1d50a}', SC_Upper), - ('\u{1d50d}', '\u{1d514}', SC_Upper), ('\u{1d516}', '\u{1d51c}', SC_Upper), ('\u{1d51e}', - '\u{1d537}', SC_Lower), ('\u{1d538}', '\u{1d539}', SC_Upper), ('\u{1d53b}', '\u{1d53e}', - SC_Upper), ('\u{1d540}', '\u{1d544}', SC_Upper), ('\u{1d546}', '\u{1d546}', SC_Upper), - ('\u{1d54a}', '\u{1d550}', SC_Upper), ('\u{1d552}', '\u{1d56b}', SC_Lower), ('\u{1d56c}', - '\u{1d585}', SC_Upper), ('\u{1d586}', '\u{1d59f}', SC_Lower), ('\u{1d5a0}', '\u{1d5b9}', - SC_Upper), ('\u{1d5ba}', '\u{1d5d3}', SC_Lower), ('\u{1d5d4}', '\u{1d5ed}', SC_Upper), - ('\u{1d5ee}', '\u{1d607}', SC_Lower), ('\u{1d608}', '\u{1d621}', SC_Upper), ('\u{1d622}', - '\u{1d63b}', SC_Lower), ('\u{1d63c}', '\u{1d655}', SC_Upper), ('\u{1d656}', '\u{1d66f}', - SC_Lower), ('\u{1d670}', '\u{1d689}', SC_Upper), ('\u{1d68a}', '\u{1d6a5}', SC_Lower), - ('\u{1d6a8}', '\u{1d6c0}', SC_Upper), ('\u{1d6c2}', '\u{1d6da}', SC_Lower), ('\u{1d6dc}', - '\u{1d6e1}', SC_Lower), ('\u{1d6e2}', '\u{1d6fa}', SC_Upper), ('\u{1d6fc}', '\u{1d714}', - SC_Lower), ('\u{1d716}', '\u{1d71b}', SC_Lower), ('\u{1d71c}', '\u{1d734}', SC_Upper), - ('\u{1d736}', '\u{1d74e}', SC_Lower), ('\u{1d750}', '\u{1d755}', SC_Lower), ('\u{1d756}', - '\u{1d76e}', SC_Upper), ('\u{1d770}', '\u{1d788}', SC_Lower), ('\u{1d78a}', '\u{1d78f}', - SC_Lower), ('\u{1d790}', '\u{1d7a8}', SC_Upper), ('\u{1d7aa}', '\u{1d7c2}', SC_Lower), - ('\u{1d7c4}', '\u{1d7c9}', SC_Lower), ('\u{1d7ca}', '\u{1d7ca}', SC_Upper), ('\u{1d7cb}', - '\u{1d7cb}', SC_Lower), ('\u{1d7ce}', '\u{1d7ff}', SC_Numeric), ('\u{1da00}', '\u{1da36}', - SC_Extend), ('\u{1da3b}', '\u{1da6c}', SC_Extend), ('\u{1da75}', '\u{1da75}', SC_Extend), - ('\u{1da84}', '\u{1da84}', SC_Extend), ('\u{1da88}', '\u{1da88}', SC_STerm), ('\u{1da9b}', - '\u{1da9f}', SC_Extend), ('\u{1daa1}', '\u{1daaf}', SC_Extend), ('\u{1df00}', '\u{1df09}', - SC_Lower), ('\u{1df0a}', '\u{1df0a}', SC_OLetter), ('\u{1df0b}', '\u{1df1e}', SC_Lower), - ('\u{1df25}', '\u{1df2a}', SC_Lower), ('\u{1e000}', '\u{1e006}', SC_Extend), ('\u{1e008}', - '\u{1e018}', SC_Extend), ('\u{1e01b}', '\u{1e021}', SC_Extend), ('\u{1e023}', '\u{1e024}', - SC_Extend), ('\u{1e026}', '\u{1e02a}', SC_Extend), ('\u{1e030}', '\u{1e06d}', SC_Lower), - ('\u{1e08f}', '\u{1e08f}', SC_Extend), ('\u{1e100}', '\u{1e12c}', SC_OLetter), ('\u{1e130}', - '\u{1e136}', SC_Extend), ('\u{1e137}', '\u{1e13d}', SC_OLetter), ('\u{1e140}', '\u{1e149}', - SC_Numeric), ('\u{1e14e}', '\u{1e14e}', SC_OLetter), ('\u{1e290}', '\u{1e2ad}', SC_OLetter), - ('\u{1e2ae}', '\u{1e2ae}', SC_Extend), ('\u{1e2c0}', '\u{1e2eb}', SC_OLetter), ('\u{1e2ec}', - '\u{1e2ef}', SC_Extend), ('\u{1e2f0}', '\u{1e2f9}', SC_Numeric), ('\u{1e4d0}', '\u{1e4eb}', - SC_OLetter), ('\u{1e4ec}', '\u{1e4ef}', SC_Extend), ('\u{1e4f0}', '\u{1e4f9}', SC_Numeric), - ('\u{1e5d0}', '\u{1e5ed}', SC_OLetter), ('\u{1e5ee}', '\u{1e5ef}', SC_Extend), ('\u{1e5f0}', - '\u{1e5f0}', SC_OLetter), ('\u{1e5f1}', '\u{1e5fa}', SC_Numeric), ('\u{1e6c0}', '\u{1e6de}', - SC_OLetter), ('\u{1e6e0}', '\u{1e6e2}', SC_OLetter), ('\u{1e6e3}', '\u{1e6e3}', SC_Extend), - ('\u{1e6e4}', '\u{1e6e5}', SC_OLetter), ('\u{1e6e6}', '\u{1e6e6}', SC_Extend), ('\u{1e6e7}', - '\u{1e6ed}', SC_OLetter), ('\u{1e6ee}', '\u{1e6ef}', SC_Extend), ('\u{1e6f0}', '\u{1e6f4}', - SC_OLetter), ('\u{1e6f5}', '\u{1e6f5}', SC_Extend), ('\u{1e6fe}', '\u{1e6ff}', SC_OLetter), - ('\u{1e7e0}', '\u{1e7e6}', SC_OLetter), ('\u{1e7e8}', '\u{1e7eb}', SC_OLetter), - ('\u{1e7ed}', '\u{1e7ee}', SC_OLetter), ('\u{1e7f0}', '\u{1e7fe}', SC_OLetter), - ('\u{1e800}', '\u{1e8c4}', SC_OLetter), ('\u{1e8d0}', '\u{1e8d6}', SC_Extend), ('\u{1e900}', - '\u{1e921}', SC_Upper), ('\u{1e922}', '\u{1e943}', SC_Lower), ('\u{1e944}', '\u{1e94a}', - SC_Extend), ('\u{1e94b}', '\u{1e94b}', SC_OLetter), ('\u{1e950}', '\u{1e959}', SC_Numeric), - ('\u{1ee00}', '\u{1ee03}', SC_OLetter), ('\u{1ee05}', '\u{1ee1f}', SC_OLetter), - ('\u{1ee21}', '\u{1ee22}', SC_OLetter), ('\u{1ee24}', '\u{1ee24}', SC_OLetter), - ('\u{1ee27}', '\u{1ee27}', SC_OLetter), ('\u{1ee29}', '\u{1ee32}', SC_OLetter), - ('\u{1ee34}', '\u{1ee37}', SC_OLetter), ('\u{1ee39}', '\u{1ee39}', SC_OLetter), - ('\u{1ee3b}', '\u{1ee3b}', SC_OLetter), ('\u{1ee42}', '\u{1ee42}', SC_OLetter), - ('\u{1ee47}', '\u{1ee47}', SC_OLetter), ('\u{1ee49}', '\u{1ee49}', SC_OLetter), - ('\u{1ee4b}', '\u{1ee4b}', SC_OLetter), ('\u{1ee4d}', '\u{1ee4f}', SC_OLetter), - ('\u{1ee51}', '\u{1ee52}', SC_OLetter), ('\u{1ee54}', '\u{1ee54}', SC_OLetter), - ('\u{1ee57}', '\u{1ee57}', SC_OLetter), ('\u{1ee59}', '\u{1ee59}', SC_OLetter), - ('\u{1ee5b}', '\u{1ee5b}', SC_OLetter), ('\u{1ee5d}', '\u{1ee5d}', SC_OLetter), - ('\u{1ee5f}', '\u{1ee5f}', SC_OLetter), ('\u{1ee61}', '\u{1ee62}', SC_OLetter), - ('\u{1ee64}', '\u{1ee64}', SC_OLetter), ('\u{1ee67}', '\u{1ee6a}', SC_OLetter), - ('\u{1ee6c}', '\u{1ee72}', SC_OLetter), ('\u{1ee74}', '\u{1ee77}', SC_OLetter), - ('\u{1ee79}', '\u{1ee7c}', SC_OLetter), ('\u{1ee7e}', '\u{1ee7e}', SC_OLetter), - ('\u{1ee80}', '\u{1ee89}', SC_OLetter), ('\u{1ee8b}', '\u{1ee9b}', SC_OLetter), - ('\u{1eea1}', '\u{1eea3}', SC_OLetter), ('\u{1eea5}', '\u{1eea9}', SC_OLetter), - ('\u{1eeab}', '\u{1eebb}', SC_OLetter), ('\u{1f130}', '\u{1f149}', SC_Upper), ('\u{1f150}', - '\u{1f169}', SC_Upper), ('\u{1f170}', '\u{1f189}', SC_Upper), ('\u{1f676}', '\u{1f678}', - SC_Close), ('\u{1fbf0}', '\u{1fbf9}', SC_Numeric), ('\u{20000}', '\u{2a6df}', SC_OLetter), - ('\u{2a700}', '\u{2b81d}', SC_OLetter), ('\u{2b820}', '\u{2cead}', SC_OLetter), - ('\u{2ceb0}', '\u{2ebe0}', SC_OLetter), ('\u{2ebf0}', '\u{2ee5d}', SC_OLetter), - ('\u{2f800}', '\u{2fa1d}', SC_OLetter), ('\u{30000}', '\u{3134a}', SC_OLetter), - ('\u{31350}', '\u{33479}', SC_OLetter), ('\u{e0001}', '\u{e0001}', SC_Format), ('\u{e0020}', - '\u{e007f}', SC_Extend), ('\u{e0100}', '\u{e01ef}', SC_Extend) + const sentence_cat_table: &[u32] = &[ + 0x1, 0x9D, 0xA6, 0xBD, 0xD2, 0xE1, 0x20D, 0x21B, 0x223, 0x231, 0x273, 0x2A1, 0x2CA, 0x2E0, + 0x2F1, 0x308, 0x3AA, 0x3C1, 0x3FB, 0x401, 0x41E, 0x5B3, 0x5C1, 0x5D3, 0x5E1, 0x617, 0x7B3, + 0x7C1, 0x7D3, 0x7E1, 0x85C, 0x861, 0xA0D, 0xA11, 0xAA7, 0xAB3, 0xAC1, 0xAD5, 0xAE1, 0xB57, + 0xB61, 0xBA7, 0xBB3, 0xBC1, 0xC0E, 0xD71, 0xD8E, 0xDF7, 0xF71, 0xF87, 0x100E, 0x1017, + 0x102E, 0x1037, 0x104E, 0x1057, 0x106E, 0x1077, 0x108E, 0x1097, 0x10AE, 0x10B7, 0x10CE, + 0x10D7, 0x10EE, 0x10F7, 0x110E, 0x1117, 0x112E, 0x1137, 0x114E, 0x1157, 0x116E, 0x1177, + 0x118E, 0x1197, 0x11AE, 0x11B7, 0x11CE, 0x11D7, 0x11EE, 0x11F7, 0x120E, 0x1217, 0x122E, + 0x1237, 0x124E, 0x1257, 0x126E, 0x1277, 0x128E, 0x1297, 0x12AE, 0x12B7, 0x12CE, 0x12D7, + 0x12EE, 0x12F7, 0x130E, 0x1317, 0x132E, 0x1337, 0x134E, 0x1357, 0x136E, 0x1377, 0x139E, + 0x13A7, 0x13BE, 0x13C7, 0x13DE, 0x13E7, 0x13FE, 0x1407, 0x141E, 0x1427, 0x143E, 0x1447, + 0x145E, 0x1467, 0x147E, 0x1487, 0x14AE, 0x14B7, 0x14CE, 0x14D7, 0x14EE, 0x14F7, 0x150E, + 0x1517, 0x152E, 0x1537, 0x154E, 0x1557, 0x156E, 0x1577, 0x158E, 0x1597, 0x15AE, 0x15B7, + 0x15CE, 0x15D7, 0x15EE, 0x15F7, 0x160E, 0x1617, 0x162E, 0x1637, 0x164E, 0x1657, 0x166E, + 0x1677, 0x168E, 0x1697, 0x16AE, 0x16B7, 0x16CE, 0x16D7, 0x16EE, 0x16F7, 0x170E, 0x1717, + 0x172E, 0x1737, 0x174E, 0x1757, 0x176E, 0x1777, 0x178E, 0x17A7, 0x17BE, 0x17C7, 0x17DE, + 0x17E7, 0x181E, 0x1837, 0x184E, 0x1857, 0x186E, 0x1887, 0x189E, 0x18C7, 0x18EE, 0x1927, + 0x193E, 0x1957, 0x196E, 0x1997, 0x19CE, 0x19E7, 0x19FE, 0x1A17, 0x1A2E, 0x1A37, 0x1A4E, + 0x1A57, 0x1A6E, 0x1A87, 0x1A9E, 0x1AA7, 0x1ACE, 0x1AD7, 0x1AEE, 0x1B07, 0x1B1E, 0x1B47, + 0x1B5E, 0x1B67, 0x1B7E, 0x1B97, 0x1BB9, 0x1BCE, 0x1BD7, 0x1C09, 0x1C4E, 0x1C67, 0x1C7E, + 0x1C97, 0x1CAE, 0x1CC7, 0x1CDE, 0x1CE7, 0x1CFE, 0x1D07, 0x1D1E, 0x1D27, 0x1D3E, 0x1D47, + 0x1D5E, 0x1D67, 0x1D7E, 0x1D87, 0x1D9E, 0x1DA7, 0x1DBE, 0x1DC7, 0x1DEE, 0x1DF7, 0x1E0E, + 0x1E17, 0x1E2E, 0x1E37, 0x1E4E, 0x1E57, 0x1E6E, 0x1E77, 0x1E8E, 0x1E97, 0x1EAE, 0x1EB7, + 0x1ECE, 0x1ED7, 0x1EEE, 0x1EF7, 0x1F1E, 0x1F37, 0x1F4E, 0x1F57, 0x1F6E, 0x1F97, 0x1FAE, + 0x1FB7, 0x1FCE, 0x1FD7, 0x1FEE, 0x1FF7, 0x200E, 0x2017, 0x202E, 0x2037, 0x204E, 0x2057, + 0x206E, 0x2077, 0x208E, 0x2097, 0x20AE, 0x20B7, 0x20CE, 0x20D7, 0x20EE, 0x20F7, 0x210E, + 0x2117, 0x212E, 0x2137, 0x214E, 0x2157, 0x216E, 0x2177, 0x218E, 0x2197, 0x21AE, 0x21B7, + 0x21CE, 0x21D7, 0x21EE, 0x21F7, 0x220E, 0x2217, 0x222E, 0x2237, 0x224E, 0x2257, 0x226E, + 0x2277, 0x228E, 0x2297, 0x22AE, 0x22B7, 0x22CE, 0x22D7, 0x22EE, 0x22F7, 0x230E, 0x2317, + 0x232E, 0x2337, 0x23AE, 0x23C7, 0x23DE, 0x23F7, 0x241E, 0x2427, 0x243E, 0x2477, 0x248E, + 0x2497, 0x24AE, 0x24B7, 0x24CE, 0x24D7, 0x24EE, 0x24F7, 0x2949, 0x2967, 0x2B99, 0x2C07, + 0x2C21, 0x2C69, 0x2D21, 0x2E07, 0x2E51, 0x2EC9, 0x2ED1, 0x2EE9, 0x2EF1, 0x3004, 0x370E, + 0x3717, 0x372E, 0x3737, 0x3749, 0x3751, 0x376E, 0x3777, 0x3781, 0x37A7, 0x37EA, 0x37FE, + 0x3801, 0x386E, 0x3871, 0x388E, 0x38B1, 0x38CE, 0x38D1, 0x38EE, 0x3907, 0x391E, 0x3A21, + 0x3A3E, 0x3AC7, 0x3CFE, 0x3D07, 0x3D2E, 0x3D57, 0x3D8E, 0x3D97, 0x3DAE, 0x3DB7, 0x3DCE, + 0x3DD7, 0x3DEE, 0x3DF7, 0x3E0E, 0x3E17, 0x3E2E, 0x3E37, 0x3E4E, 0x3E57, 0x3E6E, 0x3E77, + 0x3E8E, 0x3E97, 0x3EAE, 0x3EB7, 0x3ECE, 0x3ED7, 0x3EEE, 0x3EF7, 0x3F4E, 0x3F57, 0x3F61, + 0x3F7E, 0x3F87, 0x3F9E, 0x3FB7, 0x3FDE, 0x4307, 0x460E, 0x4617, 0x462E, 0x4637, 0x464E, + 0x4657, 0x466E, 0x4677, 0x468E, 0x4697, 0x46AE, 0x46B7, 0x46CE, 0x46D7, 0x46EE, 0x46F7, + 0x470E, 0x4717, 0x472E, 0x4737, 0x474E, 0x4757, 0x476E, 0x4777, 0x478E, 0x4797, 0x47AE, + 0x47B7, 0x47CE, 0x47D7, 0x47EE, 0x47F7, 0x480E, 0x4817, 0x4821, 0x4834, 0x48AE, 0x48B7, + 0x48CE, 0x48D7, 0x48EE, 0x48F7, 0x490E, 0x4917, 0x492E, 0x4937, 0x494E, 0x4957, 0x496E, + 0x4977, 0x498E, 0x4997, 0x49AE, 0x49B7, 0x49CE, 0x49D7, 0x49EE, 0x49F7, 0x4A0E, 0x4A17, + 0x4A2E, 0x4A37, 0x4A4E, 0x4A57, 0x4A6E, 0x4A77, 0x4A8E, 0x4A97, 0x4AAE, 0x4AB7, 0x4ACE, + 0x4AD7, 0x4AEE, 0x4AF7, 0x4B0E, 0x4B17, 0x4B2E, 0x4B37, 0x4B4E, 0x4B57, 0x4B6E, 0x4B77, + 0x4B8E, 0x4B97, 0x4BAE, 0x4BB7, 0x4BCE, 0x4BD7, 0x4BEE, 0x4BF7, 0x4C0E, 0x4C27, 0x4C3E, + 0x4C47, 0x4C5E, 0x4C67, 0x4C7E, 0x4C87, 0x4C9E, 0x4CA7, 0x4CBE, 0x4CC7, 0x4CDE, 0x4CE7, + 0x4D0E, 0x4D17, 0x4D2E, 0x4D37, 0x4D4E, 0x4D57, 0x4D6E, 0x4D77, 0x4D8E, 0x4D97, 0x4DAE, + 0x4DB7, 0x4DCE, 0x4DD7, 0x4DEE, 0x4DF7, 0x4E0E, 0x4E17, 0x4E2E, 0x4E37, 0x4E4E, 0x4E57, + 0x4E6E, 0x4E77, 0x4E8E, 0x4E97, 0x4EAE, 0x4EB7, 0x4ECE, 0x4ED7, 0x4EEE, 0x4EF7, 0x4F0E, + 0x4F17, 0x4F2E, 0x4F37, 0x4F4E, 0x4F57, 0x4F6E, 0x4F77, 0x4F8E, 0x4F97, 0x4FAE, 0x4FB7, + 0x4FCE, 0x4FD7, 0x4FEE, 0x4FF7, 0x500E, 0x5017, 0x502E, 0x5037, 0x504E, 0x5057, 0x506E, + 0x5077, 0x508E, 0x5097, 0x50AE, 0x50B7, 0x50CE, 0x50D7, 0x50EE, 0x50F7, 0x510E, 0x5117, + 0x512E, 0x5137, 0x514E, 0x5157, 0x516E, 0x5177, 0x518E, 0x5197, 0x51AE, 0x51B7, 0x51CE, + 0x51D7, 0x51EE, 0x51F7, 0x520E, 0x5217, 0x522E, 0x5237, 0x524E, 0x5257, 0x526E, 0x5277, + 0x528E, 0x5297, 0x52AE, 0x52B7, 0x52CE, 0x52D7, 0x52EE, 0x52F7, 0x5301, 0x531E, 0x5571, + 0x5599, 0x55A1, 0x55DA, 0x55E1, 0x5607, 0x589B, 0x58A1, 0x5914, 0x5BE1, 0x5BF4, 0x5C01, + 0x5C14, 0x5C31, 0x5C44, 0x5C61, 0x5C74, 0x5C81, 0x5D09, 0x5EB1, 0x5EF9, 0x5F41, 0x6008, + 0x6061, 0x60CA, 0x60E1, 0x6104, 0x61B1, 0x61C5, 0x61DB, 0x6209, 0x64B4, 0x6608, 0x66A1, + 0x66B8, 0x66D1, 0x66E9, 0x6704, 0x6719, 0x6D4B, 0x6D59, 0x6D64, 0x6DD8, 0x6DE1, 0x6DF4, + 0x6E59, 0x6E74, 0x6E91, 0x6EA4, 0x6EE9, 0x6F08, 0x6FA9, 0x6FD1, 0x6FF9, 0x700B, 0x7031, + 0x70F5, 0x7109, 0x7114, 0x7129, 0x7304, 0x74B1, 0x74D9, 0x7A64, 0x7B19, 0x7B21, 0x7C08, + 0x7CA9, 0x7EB4, 0x7F49, 0x7F61, 0x7F8A, 0x7F9B, 0x7FA9, 0x7FB1, 0x7FD4, 0x7FE1, 0x8009, + 0x8164, 0x81A9, 0x81B4, 0x8249, 0x8254, 0x8289, 0x8294, 0x82E1, 0x837B, 0x8381, 0x839B, + 0x83A1, 0x83DB, 0x83F1, 0x8409, 0x8594, 0x85C1, 0x8609, 0x86B1, 0x8709, 0x8881, 0x8899, + 0x8908, 0x8921, 0x8974, 0x8A09, 0x8CA4, 0x8E28, 0x8E34, 0x9049, 0x93A4, 0x93D9, 0x93E4, + 0x9509, 0x9514, 0x9589, 0x9624, 0x964B, 0x9668, 0x9701, 0x9719, 0x9814, 0x9841, 0x9859, + 0x98D1, 0x98F9, 0x9911, 0x9939, 0x9A91, 0x9AA9, 0x9B11, 0x9B29, 0x9B31, 0x9B69, 0x9BA1, + 0x9BC4, 0x9BD9, 0x9BE4, 0x9C51, 0x9C74, 0x9C91, 0x9CB4, 0x9CE9, 0x9CF1, 0x9D74, 0x9D81, + 0x9DC9, 0x9DE1, 0x9DF9, 0x9E24, 0x9E41, 0x9E68, 0x9F09, 0x9F21, 0x9FC9, 0x9FD1, 0x9FE4, + 0x9FF1, 0xA014, 0xA041, 0xA059, 0xA0B1, 0xA0F9, 0xA111, 0xA139, 0xA291, 0xA2A9, 0xA311, + 0xA329, 0xA341, 0xA359, 0xA371, 0xA389, 0xA3A1, 0xA3C4, 0xA3D1, 0xA3E4, 0xA431, 0xA474, + 0xA491, 0xA4B4, 0xA4E1, 0xA514, 0xA521, 0xA599, 0xA5D1, 0xA5E9, 0xA5F1, 0xA668, 0xA704, + 0xA729, 0xA754, 0xA761, 0xA814, 0xA841, 0xA859, 0xA8E1, 0xA8F9, 0xA921, 0xA939, 0xAA91, + 0xAAA9, 0xAB11, 0xAB29, 0xAB41, 0xAB59, 0xABA1, 0xABC4, 0xABD9, 0xABE4, 0xAC61, 0xAC74, + 0xACA1, 0xACB4, 0xACE1, 0xAD09, 0xAD11, 0xAE09, 0xAE24, 0xAE41, 0xAE68, 0xAF01, 0xAF99, + 0xAFA4, 0xB001, 0xB014, 0xB041, 0xB059, 0xB0D1, 0xB0F9, 0xB111, 0xB139, 0xB291, 0xB2A9, + 0xB311, 0xB329, 0xB341, 0xB359, 0xB3A1, 0xB3C4, 0xB3D9, 0xB3E4, 0xB451, 0xB474, 0xB491, + 0xB4B4, 0xB4E1, 0xB554, 0xB581, 0xB5C9, 0xB5E1, 0xB5F9, 0xB624, 0xB641, 0xB668, 0xB701, + 0xB719, 0xB721, 0xB824, 0xB839, 0xB841, 0xB859, 0xB8B1, 0xB8E9, 0xB911, 0xB929, 0xB961, + 0xB999, 0xB9B1, 0xB9C9, 0xB9D1, 0xB9E9, 0xBA01, 0xBA39, 0xBA51, 0xBA89, 0xBAB1, 0xBAE9, + 0xBBA1, 0xBBE4, 0xBC31, 0xBC64, 0xBC91, 0xBCA4, 0xBCE1, 0xBD09, 0xBD11, 0xBD74, 0xBD81, + 0xBE68, 0xBF01, 0xC004, 0xC059, 0xC0D1, 0xC0E9, 0xC111, 0xC129, 0xC291, 0xC2A9, 0xC3A1, + 0xC3C4, 0xC3D9, 0xC3E4, 0xC451, 0xC464, 0xC491, 0xC4A4, 0xC4E1, 0xC554, 0xC571, 0xC589, + 0xC5B1, 0xC5C9, 0xC5E1, 0xC609, 0xC624, 0xC641, 0xC668, 0xC701, 0xC809, 0xC814, 0xC841, + 0xC859, 0xC8D1, 0xC8E9, 0xC911, 0xC929, 0xCA91, 0xCAA9, 0xCB41, 0xCB59, 0xCBA1, 0xCBC4, + 0xCBD9, 0xCBE4, 0xCC51, 0xCC64, 0xCC91, 0xCCA4, 0xCCE1, 0xCD54, 0xCD71, 0xCDC9, 0xCDF1, + 0xCE09, 0xCE24, 0xCE41, 0xCE68, 0xCF01, 0xCF19, 0xCF34, 0xCF41, 0xD004, 0xD049, 0xD0D1, + 0xD0E9, 0xD111, 0xD129, 0xD3B4, 0xD3D9, 0xD3E4, 0xD451, 0xD464, 0xD491, 0xD4A4, 0xD4E9, + 0xD4F1, 0xD549, 0xD574, 0xD581, 0xD5F9, 0xD624, 0xD641, 0xD668, 0xD701, 0xD7A9, 0xD801, + 0xD814, 0xD841, 0xD859, 0xD971, 0xD9A9, 0xDB21, 0xDB39, 0xDBC1, 0xDBD9, 0xDBE1, 0xDC09, + 0xDC71, 0xDCA4, 0xDCB1, 0xDCF4, 0xDD51, 0xDD64, 0xDD71, 0xDD84, 0xDE01, 0xDE68, 0xDF01, + 0xDF24, 0xDF41, 0xE019, 0xE314, 0xE329, 0xE344, 0xE3B1, 0xE409, 0xE474, 0xE4F1, 0xE508, + 0xE5A1, 0xE819, 0xE831, 0xE849, 0xE851, 0xE869, 0xE8B1, 0xE8C9, 0xEA41, 0xEA59, 0xEA61, + 0xEA79, 0xEB14, 0xEB29, 0xEB44, 0xEBD9, 0xEBE1, 0xEC09, 0xEC51, 0xEC69, 0xEC71, 0xEC84, + 0xECF1, 0xED08, 0xEDA1, 0xEDC9, 0xEE01, 0xF009, 0xF011, 0xF184, 0xF1A1, 0xF208, 0xF2A1, + 0xF354, 0xF361, 0xF374, 0xF381, 0xF394, 0xF3A3, 0xF3E4, 0xF409, 0xF481, 0xF499, 0xF6D1, + 0xF714, 0xF851, 0xF864, 0xF889, 0xF8D4, 0xF981, 0xF994, 0xFBD1, 0xFC64, 0xFC71, 0x10009, + 0x102B4, 0x103F9, 0x10408, 0x104AB, 0x104C1, 0x10509, 0x10564, 0x105A9, 0x105E4, 0x10619, + 0x10624, 0x10659, 0x10674, 0x106E9, 0x10714, 0x10759, 0x10824, 0x108E9, 0x108F4, 0x10908, + 0x109A4, 0x109E1, 0x10A0E, 0x10C61, 0x10C7E, 0x10C81, 0x10CDE, 0x10CE1, 0x10D09, 0x10FB1, + 0x10FC7, 0x10FD9, 0x12491, 0x124A9, 0x124E1, 0x12509, 0x12571, 0x12589, 0x12591, 0x125A9, + 0x125E1, 0x12609, 0x12891, 0x128A9, 0x128E1, 0x12909, 0x12B11, 0x12B29, 0x12B61, 0x12B89, + 0x12BF1, 0x12C09, 0x12C11, 0x12C29, 0x12C61, 0x12C89, 0x12D71, 0x12D89, 0x13111, 0x13129, + 0x13161, 0x13189, 0x135B1, 0x135D4, 0x13601, 0x1362B, 0x13631, 0x1367B, 0x13691, 0x13809, + 0x13901, 0x13A0E, 0x13F61, 0x13F87, 0x13FE1, 0x14019, 0x166D1, 0x166EB, 0x166F9, 0x1680D, + 0x16819, 0x169B3, 0x169D1, 0x16A09, 0x16EB1, 0x16EE9, 0x16F91, 0x17009, 0x17124, 0x17161, + 0x171F9, 0x17324, 0x1735B, 0x17371, 0x17409, 0x17524, 0x17541, 0x17609, 0x176D1, 0x176E9, + 0x17711, 0x17724, 0x17741, 0x17809, 0x17B44, 0x17D4B, 0x17D61, 0x17D79, 0x17D81, 0x17DC9, + 0x17DD4, 0x17DE1, 0x17E08, 0x17EA1, 0x1802A, 0x1803B, 0x18041, 0x1808A, 0x1809B, 0x180A1, + 0x180B4, 0x180E5, 0x180F4, 0x18108, 0x181A1, 0x18209, 0x18791, 0x18809, 0x18854, 0x18879, + 0x18A94, 0x18AA9, 0x18AB1, 0x18B09, 0x18F61, 0x19009, 0x191F1, 0x19204, 0x192C1, 0x19304, + 0x193C1, 0x1944B, 0x19468, 0x19509, 0x196E1, 0x19709, 0x19751, 0x19809, 0x19AC1, 0x19B09, + 0x19CA1, 0x19D08, 0x19DB1, 0x1A009, 0x1A174, 0x1A1C1, 0x1A209, 0x1A554, 0x1A5F1, 0x1A604, + 0x1A7D1, 0x1A7F4, 0x1A808, 0x1A8A1, 0x1A908, 0x1A9A1, 0x1AA79, 0x1AA8B, 0x1AAC1, 0x1AB04, + 0x1ADE1, 0x1AE04, 0x1AEC1, 0x1B004, 0x1B059, 0x1B344, 0x1B459, 0x1B4D1, 0x1B4EB, 0x1B508, + 0x1B5AB, 0x1B5C1, 0x1B5EB, 0x1B601, 0x1B6B4, 0x1B741, 0x1B7DB, 0x1B804, 0x1B839, 0x1BA14, + 0x1BAE9, 0x1BB08, 0x1BBA9, 0x1BE64, 0x1BF41, 0x1C009, 0x1C244, 0x1C381, 0x1C3BB, 0x1C3D1, + 0x1C408, 0x1C4A1, 0x1C4D9, 0x1C508, 0x1C5A9, 0x1C7EB, 0x1C807, 0x1C89E, 0x1C8A7, 0x1C8B1, + 0x1C909, 0x1CBB1, 0x1CBD9, 0x1CC01, 0x1CD04, 0x1CD31, 0x1CD44, 0x1CE99, 0x1CED4, 0x1CEE9, + 0x1CF44, 0x1CF59, 0x1CF74, 0x1CFA9, 0x1CFB1, 0x1D007, 0x1DC04, 0x1E00E, 0x1E017, 0x1E02E, + 0x1E037, 0x1E04E, 0x1E057, 0x1E06E, 0x1E077, 0x1E08E, 0x1E097, 0x1E0AE, 0x1E0B7, 0x1E0CE, + 0x1E0D7, 0x1E0EE, 0x1E0F7, 0x1E10E, 0x1E117, 0x1E12E, 0x1E137, 0x1E14E, 0x1E157, 0x1E16E, + 0x1E177, 0x1E18E, 0x1E197, 0x1E1AE, 0x1E1B7, 0x1E1CE, 0x1E1D7, 0x1E1EE, 0x1E1F7, 0x1E20E, + 0x1E217, 0x1E22E, 0x1E237, 0x1E24E, 0x1E257, 0x1E26E, 0x1E277, 0x1E28E, 0x1E297, 0x1E2AE, + 0x1E2B7, 0x1E2CE, 0x1E2D7, 0x1E2EE, 0x1E2F7, 0x1E30E, 0x1E317, 0x1E32E, 0x1E337, 0x1E34E, + 0x1E357, 0x1E36E, 0x1E377, 0x1E38E, 0x1E397, 0x1E3AE, 0x1E3B7, 0x1E3CE, 0x1E3D7, 0x1E3EE, + 0x1E3F7, 0x1E40E, 0x1E417, 0x1E42E, 0x1E437, 0x1E44E, 0x1E457, 0x1E46E, 0x1E477, 0x1E48E, + 0x1E497, 0x1E4AE, 0x1E4B7, 0x1E4CE, 0x1E4D7, 0x1E4EE, 0x1E4F7, 0x1E50E, 0x1E517, 0x1E52E, + 0x1E537, 0x1E54E, 0x1E557, 0x1E56E, 0x1E577, 0x1E58E, 0x1E597, 0x1E5AE, 0x1E5B7, 0x1E5CE, + 0x1E5D7, 0x1E5EE, 0x1E5F7, 0x1E60E, 0x1E617, 0x1E62E, 0x1E637, 0x1E64E, 0x1E657, 0x1E66E, + 0x1E677, 0x1E68E, 0x1E697, 0x1E6AE, 0x1E6B7, 0x1E6CE, 0x1E6D7, 0x1E6EE, 0x1E6F7, 0x1E70E, + 0x1E717, 0x1E72E, 0x1E737, 0x1E74E, 0x1E757, 0x1E76E, 0x1E777, 0x1E78E, 0x1E797, 0x1E7AE, + 0x1E7B7, 0x1E7CE, 0x1E7D7, 0x1E7EE, 0x1E7F7, 0x1E80E, 0x1E817, 0x1E82E, 0x1E837, 0x1E84E, + 0x1E857, 0x1E86E, 0x1E877, 0x1E88E, 0x1E897, 0x1E8AE, 0x1E8B7, 0x1E8CE, 0x1E8D7, 0x1E8EE, + 0x1E8F7, 0x1E90E, 0x1E917, 0x1E92E, 0x1E937, 0x1E94E, 0x1E957, 0x1E9EE, 0x1E9F7, 0x1EA0E, + 0x1EA17, 0x1EA2E, 0x1EA37, 0x1EA4E, 0x1EA57, 0x1EA6E, 0x1EA77, 0x1EA8E, 0x1EA97, 0x1EAAE, + 0x1EAB7, 0x1EACE, 0x1EAD7, 0x1EAEE, 0x1EAF7, 0x1EB0E, 0x1EB17, 0x1EB2E, 0x1EB37, 0x1EB4E, + 0x1EB57, 0x1EB6E, 0x1EB77, 0x1EB8E, 0x1EB97, 0x1EBAE, 0x1EBB7, 0x1EBCE, 0x1EBD7, 0x1EBEE, + 0x1EBF7, 0x1EC0E, 0x1EC17, 0x1EC2E, 0x1EC37, 0x1EC4E, 0x1EC57, 0x1EC6E, 0x1EC77, 0x1EC8E, + 0x1EC97, 0x1ECAE, 0x1ECB7, 0x1ECCE, 0x1ECD7, 0x1ECEE, 0x1ECF7, 0x1ED0E, 0x1ED17, 0x1ED2E, + 0x1ED37, 0x1ED4E, 0x1ED57, 0x1ED6E, 0x1ED77, 0x1ED8E, 0x1ED97, 0x1EDAE, 0x1EDB7, 0x1EDCE, + 0x1EDD7, 0x1EDEE, 0x1EDF7, 0x1EE0E, 0x1EE17, 0x1EE2E, 0x1EE37, 0x1EE4E, 0x1EE57, 0x1EE6E, + 0x1EE77, 0x1EE8E, 0x1EE97, 0x1EEAE, 0x1EEB7, 0x1EECE, 0x1EED7, 0x1EEEE, 0x1EEF7, 0x1EF0E, + 0x1EF17, 0x1EF2E, 0x1EF37, 0x1EF4E, 0x1EF57, 0x1EF6E, 0x1EF77, 0x1EF8E, 0x1EF97, 0x1EFAE, + 0x1EFB7, 0x1EFCE, 0x1EFD7, 0x1EFEE, 0x1EFF7, 0x1F08E, 0x1F107, 0x1F161, 0x1F18E, 0x1F1E1, + 0x1F207, 0x1F28E, 0x1F307, 0x1F38E, 0x1F407, 0x1F461, 0x1F48E, 0x1F4E1, 0x1F507, 0x1F581, + 0x1F59E, 0x1F5A1, 0x1F5BE, 0x1F5C1, 0x1F5DE, 0x1F5E1, 0x1F5FE, 0x1F607, 0x1F68E, 0x1F707, + 0x1F7E1, 0x1F807, 0x1F88E, 0x1F907, 0x1F98E, 0x1FA07, 0x1FA8E, 0x1FB07, 0x1FB51, 0x1FB67, + 0x1FB8E, 0x1FBD1, 0x1FBE7, 0x1FBF1, 0x1FC27, 0x1FC51, 0x1FC67, 0x1FC8E, 0x1FCD1, 0x1FD07, + 0x1FD41, 0x1FD67, 0x1FD8E, 0x1FDC1, 0x1FE07, 0x1FE8E, 0x1FED1, 0x1FF27, 0x1FF51, 0x1FF67, + 0x1FF8E, 0x1FFD1, 0x2000D, 0x200B5, 0x200C4, 0x200E5, 0x20101, 0x2013A, 0x20151, 0x20183, + 0x20201, 0x20240, 0x20251, 0x2028C, 0x202A5, 0x202FD, 0x20301, 0x20393, 0x203B1, 0x203CB, + 0x203E1, 0x20453, 0x2047B, 0x204A1, 0x205FD, 0x20605, 0x20651, 0x20665, 0x20701, 0x20717, + 0x20721, 0x207D3, 0x207F7, 0x20801, 0x208D3, 0x208F1, 0x20907, 0x209D1, 0x20D04, 0x20F11, + 0x2102E, 0x21031, 0x2107E, 0x21081, 0x210A7, 0x210BE, 0x210E7, 0x2110E, 0x21137, 0x21141, + 0x2115E, 0x21161, 0x2119E, 0x211E1, 0x2124E, 0x21251, 0x2126E, 0x21271, 0x2128E, 0x21291, + 0x212AE, 0x212E1, 0x212F7, 0x2130E, 0x21347, 0x21359, 0x21397, 0x213A1, 0x213C7, 0x213EE, + 0x21401, 0x2145E, 0x21467, 0x214A1, 0x214E7, 0x214F1, 0x2160E, 0x21707, 0x21809, 0x2183E, + 0x21847, 0x21859, 0x21891, 0x23083, 0x230C1, 0x23293, 0x232B1, 0x24B6E, 0x24D07, 0x24EA1, + 0x275B3, 0x27611, 0x27683, 0x27761, 0x27C53, 0x27C71, 0x27E63, 0x27F01, 0x29833, 0x29991, + 0x29D83, 0x29DC1, 0x29FC3, 0x29FE1, 0x2C00E, 0x2C307, 0x2C60E, 0x2C617, 0x2C62E, 0x2C657, + 0x2C67E, 0x2C687, 0x2C69E, 0x2C6A7, 0x2C6BE, 0x2C6C7, 0x2C6DE, 0x2C717, 0x2C72E, 0x2C737, + 0x2C75E, 0x2C767, 0x2C7EE, 0x2C817, 0x2C82E, 0x2C837, 0x2C84E, 0x2C857, 0x2C86E, 0x2C877, + 0x2C88E, 0x2C897, 0x2C8AE, 0x2C8B7, 0x2C8CE, 0x2C8D7, 0x2C8EE, 0x2C8F7, 0x2C90E, 0x2C917, + 0x2C92E, 0x2C937, 0x2C94E, 0x2C957, 0x2C96E, 0x2C977, 0x2C98E, 0x2C997, 0x2C9AE, 0x2C9B7, + 0x2C9CE, 0x2C9D7, 0x2C9EE, 0x2C9F7, 0x2CA0E, 0x2CA17, 0x2CA2E, 0x2CA37, 0x2CA4E, 0x2CA57, + 0x2CA6E, 0x2CA77, 0x2CA8E, 0x2CA97, 0x2CAAE, 0x2CAB7, 0x2CACE, 0x2CAD7, 0x2CAEE, 0x2CAF7, + 0x2CB0E, 0x2CB17, 0x2CB2E, 0x2CB37, 0x2CB4E, 0x2CB57, 0x2CB6E, 0x2CB77, 0x2CB8E, 0x2CB97, + 0x2CBAE, 0x2CBB7, 0x2CBCE, 0x2CBD7, 0x2CBEE, 0x2CBF7, 0x2CC0E, 0x2CC17, 0x2CC2E, 0x2CC37, + 0x2CC4E, 0x2CC57, 0x2CC6E, 0x2CC77, 0x2CC8E, 0x2CC97, 0x2CCAE, 0x2CCB7, 0x2CCCE, 0x2CCD7, + 0x2CCEE, 0x2CCF7, 0x2CD0E, 0x2CD17, 0x2CD2E, 0x2CD37, 0x2CD4E, 0x2CD57, 0x2CD6E, 0x2CD77, + 0x2CD8E, 0x2CD97, 0x2CDAE, 0x2CDB7, 0x2CDCE, 0x2CDD7, 0x2CDEE, 0x2CDF7, 0x2CE0E, 0x2CE17, + 0x2CE2E, 0x2CE37, 0x2CE51, 0x2CEBE, 0x2CEC7, 0x2CEDE, 0x2CEE7, 0x2CEF4, 0x2CF2E, 0x2CF37, + 0x2CF41, 0x2CF9B, 0x2CFC1, 0x2D007, 0x2D261, 0x2D277, 0x2D281, 0x2D2D7, 0x2D2E1, 0x2D309, + 0x2D681, 0x2D6F9, 0x2D701, 0x2D7F4, 0x2D809, 0x2D971, 0x2DA09, 0x2DA71, 0x2DA89, 0x2DAF1, + 0x2DB09, 0x2DB71, 0x2DB89, 0x2DBF1, 0x2DC09, 0x2DC71, 0x2DC89, 0x2DCF1, 0x2DD09, 0x2DD71, + 0x2DD89, 0x2DDF1, 0x2DE04, 0x2E003, 0x2E0E1, 0x2E1C3, 0x2E1E1, 0x2E203, 0x2E2A1, 0x2E2EB, + 0x2E2F9, 0x2E301, 0x2E3CB, 0x2E3D1, 0x2E423, 0x2E431, 0x2E53B, 0x2E553, 0x2E5D1, 0x3000D, + 0x3001A, 0x3002B, 0x30031, 0x30059, 0x30083, 0x30121, 0x30143, 0x301C1, 0x301D3, 0x30201, + 0x30219, 0x302A4, 0x30301, 0x30319, 0x30361, 0x30389, 0x303D1, 0x30419, 0x30971, 0x30994, + 0x309B1, 0x309D9, 0x30A01, 0x30A19, 0x30FB1, 0x30FC9, 0x31001, 0x31059, 0x31301, 0x31319, + 0x318F1, 0x31A09, 0x31C01, 0x31F09, 0x32001, 0x34009, 0x4DC01, 0x4E009, 0xA48D1, 0xA4D09, + 0xA4FE1, 0xA4FFB, 0xA5009, 0xA60D1, 0xA60EB, 0xA6109, 0xA6208, 0xA62A9, 0xA62C1, 0xA640E, + 0xA6417, 0xA642E, 0xA6437, 0xA644E, 0xA6457, 0xA646E, 0xA6477, 0xA648E, 0xA6497, 0xA64AE, + 0xA64B7, 0xA64CE, 0xA64D7, 0xA64EE, 0xA64F7, 0xA650E, 0xA6517, 0xA652E, 0xA6537, 0xA654E, + 0xA6557, 0xA656E, 0xA6577, 0xA658E, 0xA6597, 0xA65AE, 0xA65B7, 0xA65CE, 0xA65D7, 0xA65EE, + 0xA65F7, 0xA660E, 0xA6617, 0xA662E, 0xA6637, 0xA664E, 0xA6657, 0xA666E, 0xA6677, 0xA668E, + 0xA6697, 0xA66AE, 0xA66B7, 0xA66CE, 0xA66D7, 0xA66E9, 0xA66F4, 0xA6731, 0xA6744, 0xA67E1, + 0xA67F9, 0xA680E, 0xA6817, 0xA682E, 0xA6837, 0xA684E, 0xA6857, 0xA686E, 0xA6877, 0xA688E, + 0xA6897, 0xA68AE, 0xA68B7, 0xA68CE, 0xA68D7, 0xA68EE, 0xA68F7, 0xA690E, 0xA6917, 0xA692E, + 0xA6937, 0xA694E, 0xA6957, 0xA696E, 0xA6977, 0xA698E, 0xA6997, 0xA69AE, 0xA69B7, 0xA69E4, + 0xA6A09, 0xA6F04, 0xA6F21, 0xA6F3B, 0xA6F41, 0xA6F7B, 0xA6F81, 0xA7179, 0xA7201, 0xA722E, + 0xA7237, 0xA724E, 0xA7257, 0xA726E, 0xA7277, 0xA728E, 0xA7297, 0xA72AE, 0xA72B7, 0xA72CE, + 0xA72D7, 0xA72EE, 0xA72F7, 0xA732E, 0xA7337, 0xA734E, 0xA7357, 0xA736E, 0xA7377, 0xA738E, + 0xA7397, 0xA73AE, 0xA73B7, 0xA73CE, 0xA73D7, 0xA73EE, 0xA73F7, 0xA740E, 0xA7417, 0xA742E, + 0xA7437, 0xA744E, 0xA7457, 0xA746E, 0xA7477, 0xA748E, 0xA7497, 0xA74AE, 0xA74B7, 0xA74CE, + 0xA74D7, 0xA74EE, 0xA74F7, 0xA750E, 0xA7517, 0xA752E, 0xA7537, 0xA754E, 0xA7557, 0xA756E, + 0xA7577, 0xA758E, 0xA7597, 0xA75AE, 0xA75B7, 0xA75CE, 0xA75D7, 0xA75EE, 0xA75F7, 0xA760E, + 0xA7617, 0xA762E, 0xA7637, 0xA764E, 0xA7657, 0xA766E, 0xA7677, 0xA768E, 0xA7697, 0xA76AE, + 0xA76B7, 0xA76CE, 0xA76D7, 0xA76EE, 0xA76F7, 0xA779E, 0xA77A7, 0xA77BE, 0xA77C7, 0xA77DE, + 0xA77F7, 0xA780E, 0xA7817, 0xA782E, 0xA7837, 0xA784E, 0xA7857, 0xA786E, 0xA7877, 0xA7889, + 0xA7891, 0xA78BE, 0xA78C7, 0xA78DE, 0xA78E7, 0xA78F9, 0xA790E, 0xA7917, 0xA792E, 0xA7937, + 0xA796E, 0xA7977, 0xA798E, 0xA7997, 0xA79AE, 0xA79B7, 0xA79CE, 0xA79D7, 0xA79EE, 0xA79F7, + 0xA7A0E, 0xA7A17, 0xA7A2E, 0xA7A37, 0xA7A4E, 0xA7A57, 0xA7A6E, 0xA7A77, 0xA7A8E, 0xA7A97, + 0xA7AAE, 0xA7AF7, 0xA7B0E, 0xA7B57, 0xA7B6E, 0xA7B77, 0xA7B8E, 0xA7B97, 0xA7BAE, 0xA7BB7, + 0xA7BCE, 0xA7BD7, 0xA7BEE, 0xA7BF7, 0xA7C0E, 0xA7C17, 0xA7C2E, 0xA7C37, 0xA7C4E, 0xA7C87, + 0xA7C9E, 0xA7CA7, 0xA7CBE, 0xA7CD7, 0xA7CEE, 0xA7CF7, 0xA7D0E, 0xA7D17, 0xA7D2E, 0xA7D37, + 0xA7D4E, 0xA7D57, 0xA7D6E, 0xA7D77, 0xA7D8E, 0xA7D97, 0xA7DAE, 0xA7DB7, 0xA7DCE, 0xA7DD1, + 0xA7F17, 0xA7F5E, 0xA7F67, 0xA7F79, 0xA7F87, 0xA7FB9, 0xA8024, 0xA8039, 0xA8064, 0xA8079, + 0xA80B4, 0xA80C9, 0xA8234, 0xA8281, 0xA82C4, 0xA82D1, 0xA8409, 0xA8741, 0xA876B, 0xA8781, + 0xA8804, 0xA8829, 0xA8B44, 0xA8C61, 0xA8CEB, 0xA8D08, 0xA8DA1, 0xA8E04, 0xA8F29, 0xA8F81, + 0xA8FB9, 0xA8FC1, 0xA8FD9, 0xA8FF4, 0xA9008, 0xA90A9, 0xA9264, 0xA92E1, 0xA92FB, 0xA9309, + 0xA9474, 0xA9541, 0xA9609, 0xA97D1, 0xA9804, 0xA9849, 0xA9B34, 0xA9C11, 0xA9C8B, 0xA9CA1, + 0xA9CF9, 0xA9D08, 0xA9DA1, 0xA9E09, 0xA9E54, 0xA9E69, 0xA9F08, 0xA9FA9, 0xA9FF1, 0xAA009, + 0xAA294, 0xAA371, 0xAA409, 0xAA434, 0xAA449, 0xAA4C4, 0xAA4E1, 0xAA508, 0xAA5A1, 0xAA5DB, + 0xAA609, 0xAA771, 0xAA7A9, 0xAA7B4, 0xAA7E9, 0xAAB04, 0xAAB19, 0xAAB24, 0xAAB59, 0xAAB74, + 0xAAB99, 0xAABE4, 0xAAC09, 0xAAC14, 0xAAC29, 0xAAC31, 0xAADB9, 0xAADE1, 0xAAE09, 0xAAEB4, + 0xAAF0B, 0xAAF29, 0xAAF54, 0xAAF71, 0xAB019, 0xAB071, 0xAB099, 0xAB0F1, 0xAB119, 0xAB171, + 0xAB209, 0xAB271, 0xAB289, 0xAB2F1, 0xAB307, 0xAB5B1, 0xAB5C7, 0xAB6A1, 0xAB707, 0xABC09, + 0xABE34, 0xABEBB, 0xABEC4, 0xABEE1, 0xABF08, 0xABFA1, 0xAC009, 0xD7A41, 0xD7B09, 0xD7C71, + 0xD7CB9, 0xD7FC1, 0xF9009, 0xFA6E1, 0xFA709, 0xFADA1, 0xFB007, 0xFB071, 0xFB137, 0xFB181, + 0xFB1D9, 0xFB1E4, 0xFB1F9, 0xFB291, 0xFB2A9, 0xFB371, 0xFB389, 0xFB3D1, 0xFB3E9, 0xFB3F1, + 0xFB409, 0xFB421, 0xFB439, 0xFB451, 0xFB469, 0xFBB21, 0xFBD39, 0xFD3E3, 0xFD401, 0xFD509, + 0xFD901, 0xFD929, 0xFDC81, 0xFDF09, 0xFDFC1, 0xFE004, 0xFE10A, 0xFE12B, 0xFE13A, 0xFE15B, + 0xFE173, 0xFE191, 0xFE204, 0xFE301, 0xFE31A, 0xFE331, 0xFE353, 0xFE451, 0xFE473, 0xFE491, + 0xFE50A, 0xFE520, 0xFE531, 0xFE54A, 0xFE56B, 0xFE58A, 0xFE593, 0xFE5F1, 0xFE63A, 0xFE641, + 0xFE709, 0xFE751, 0xFE769, 0xFEFD1, 0xFEFF5, 0xFF001, 0xFF01B, 0xFF021, 0xFF083, 0xFF0A1, + 0xFF0CA, 0xFF0E0, 0xFF0F1, 0xFF108, 0xFF1AA, 0xFF1C1, 0xFF1FB, 0xFF201, 0xFF21E, 0xFF3B3, + 0xFF3C1, 0xFF3D3, 0xFF3E1, 0xFF417, 0xFF5B3, 0xFF5C1, 0xFF5D3, 0xFF5E1, 0xFF5F3, 0xFF61B, + 0xFF623, 0xFF64A, 0xFF651, 0xFF669, 0xFF9E4, 0xFFA09, 0xFFBF1, 0xFFC29, 0xFFC81, 0xFFCA9, + 0xFFD01, 0xFFD29, 0xFFD81, 0xFFDA9, 0xFFDD1, 0xFFF95, 0xFFFC1, 0x100009, 0x1000C1, 0x1000D9, + 0x100271, 0x100289, 0x1003B1, 0x1003C9, 0x1003E1, 0x1003F9, 0x1004E1, 0x100509, 0x1005E1, + 0x100809, 0x100FB1, 0x101409, 0x101751, 0x101FD4, 0x101FE1, 0x102809, 0x1029D1, 0x102A09, + 0x102D11, 0x102E04, 0x102E11, 0x103009, 0x103201, 0x1032D9, 0x1034B1, 0x103509, 0x103764, + 0x1037B1, 0x103809, 0x1039E1, 0x103A09, 0x103C41, 0x103C89, 0x103D01, 0x103D19, 0x103D61, + 0x10400E, 0x104287, 0x104509, 0x1049E1, 0x104A08, 0x104AA1, 0x104B0E, 0x104D41, 0x104D87, + 0x104FC1, 0x105009, 0x105281, 0x105309, 0x105641, 0x10570E, 0x1057B1, 0x1057CE, 0x1058B1, + 0x1058CE, 0x105931, 0x10594E, 0x105961, 0x105977, 0x105A21, 0x105A37, 0x105B21, 0x105B37, + 0x105BA1, 0x105BB7, 0x105BD1, 0x105C09, 0x105F41, 0x106009, 0x107371, 0x107409, 0x107561, + 0x107609, 0x107681, 0x107807, 0x107819, 0x107837, 0x107861, 0x107877, 0x107B11, 0x107B27, + 0x107BB1, 0x108009, 0x108061, 0x108089, 0x108091, 0x1080A9, 0x108361, 0x108379, 0x108391, + 0x1083C9, 0x1083D1, 0x1083F9, 0x108561, 0x108609, 0x108771, 0x108809, 0x1089F1, 0x108E09, + 0x108F31, 0x108F49, 0x108F61, 0x109009, 0x109161, 0x109209, 0x1093A1, 0x109409, 0x1095A1, + 0x109809, 0x109B81, 0x109BE9, 0x109C01, 0x10A009, 0x10A014, 0x10A041, 0x10A054, 0x10A071, + 0x10A0C4, 0x10A109, 0x10A141, 0x10A159, 0x10A181, 0x10A199, 0x10A361, 0x10A384, 0x10A3B1, + 0x10A3F4, 0x10A401, 0x10A56B, 0x10A581, 0x10A609, 0x10A7D1, 0x10A809, 0x10A9D1, 0x10AC09, + 0x10AC81, 0x10AC99, 0x10AE54, 0x10AE71, 0x10B009, 0x10B361, 0x10B409, 0x10B561, 0x10B609, + 0x10B731, 0x10B809, 0x10B921, 0x10C009, 0x10C491, 0x10C80E, 0x10CB31, 0x10CC07, 0x10CF31, + 0x10D009, 0x10D244, 0x10D281, 0x10D308, 0x10D3A1, 0x10D408, 0x10D4A9, 0x10D50E, 0x10D661, + 0x10D694, 0x10D6E1, 0x10D6F9, 0x10D707, 0x10D861, 0x10E809, 0x10EAA1, 0x10EAB4, 0x10EAD1, + 0x10EB09, 0x10EB21, 0x10EC29, 0x10EC81, 0x10EFA4, 0x10F009, 0x10F1D1, 0x10F279, 0x10F281, + 0x10F309, 0x10F464, 0x10F511, 0x10F55B, 0x10F5A1, 0x10F709, 0x10F824, 0x10F86B, 0x10F8A1, + 0x10FB09, 0x10FC51, 0x10FE09, 0x10FF71, 0x110004, 0x110039, 0x110384, 0x11047B, 0x110491, + 0x110668, 0x110704, 0x110719, 0x110734, 0x110759, 0x110761, 0x1107F4, 0x110839, 0x110B04, + 0x110BB1, 0x110BD8, 0x110BEB, 0x110C24, 0x110C31, 0x110CD8, 0x110CE1, 0x110D09, 0x110E91, + 0x110F08, 0x110FA1, 0x111004, 0x111039, 0x111274, 0x111351, 0x111368, 0x111401, 0x11141B, + 0x111449, 0x111454, 0x111479, 0x111481, 0x111509, 0x111734, 0x111741, 0x111769, 0x111771, + 0x111804, 0x111839, 0x111B34, 0x111C19, 0x111C5B, 0x111C71, 0x111C94, 0x111CDB, 0x111CE4, + 0x111D08, 0x111DA9, 0x111DB1, 0x111DC9, 0x111DD1, 0x111DEB, 0x111E01, 0x112009, 0x112121, + 0x112139, 0x1122C4, 0x11238B, 0x1123A1, 0x1123BB, 0x1123D1, 0x1123E4, 0x1123F9, 0x112414, + 0x112421, 0x112809, 0x112871, 0x112889, 0x112891, 0x1128A9, 0x1128E1, 0x1128F9, 0x1129E1, + 0x1129F9, 0x112A9B, 0x112AA1, 0x112B09, 0x112DF4, 0x112EB1, 0x112F08, 0x112FA1, 0x113004, + 0x113041, 0x113059, 0x1130D1, 0x1130F9, 0x113111, 0x113139, 0x113291, 0x1132A9, 0x113311, + 0x113329, 0x113341, 0x113359, 0x1133A1, 0x1133B4, 0x1133D9, 0x1133E4, 0x113451, 0x113474, + 0x113491, 0x1134B4, 0x1134E1, 0x113509, 0x113511, 0x113574, 0x113581, 0x1135D9, 0x113624, + 0x113641, 0x113664, 0x1136D1, 0x113704, 0x113751, 0x113809, 0x1138A1, 0x1138B9, 0x1138C1, + 0x1138E9, 0x1138F1, 0x113909, 0x113B61, 0x113B79, 0x113B84, 0x113C11, 0x113C24, 0x113C31, + 0x113C54, 0x113C61, 0x113C74, 0x113CB1, 0x113CC4, 0x113D19, 0x113D24, 0x113D39, 0x113D4B, + 0x113D61, 0x113E14, 0x113E31, 0x114009, 0x114354, 0x114479, 0x1144BB, 0x1144D1, 0x114508, + 0x1145A1, 0x1145E4, 0x1145F9, 0x114621, 0x114809, 0x114B04, 0x114C49, 0x114C61, 0x114C79, + 0x114C81, 0x114D08, 0x114DA1, 0x115809, 0x115AF4, 0x115B61, 0x115B84, 0x115C11, 0x115C2B, + 0x115C41, 0x115C9B, 0x115D89, 0x115DC4, 0x115DE1, 0x116009, 0x116304, 0x11641B, 0x116431, + 0x116449, 0x116451, 0x116508, 0x1165A1, 0x116809, 0x116AB4, 0x116B89, 0x116B91, 0x116C08, + 0x116CA1, 0x116D08, 0x116E41, 0x117009, 0x1171B1, 0x1171D4, 0x1172C1, 0x117308, 0x1173A1, + 0x1173CB, 0x1173F1, 0x117409, 0x117471, 0x118009, 0x1182C4, 0x1183B1, 0x118A0E, 0x118C07, + 0x118E08, 0x118EA1, 0x118FF9, 0x119071, 0x119099, 0x1190A1, 0x1190C9, 0x119141, 0x119159, + 0x119171, 0x119189, 0x119304, 0x119361, 0x119374, 0x119391, 0x1193B4, 0x1193F9, 0x119404, + 0x119419, 0x119424, 0x11944B, 0x119451, 0x11946B, 0x119471, 0x119508, 0x1195A1, 0x119A09, + 0x119A81, 0x119AA9, 0x119D14, 0x119D81, 0x119DA4, 0x119E19, 0x119E21, 0x119E39, 0x119E44, + 0x119E51, 0x11A009, 0x11A014, 0x11A0B9, 0x11A334, 0x11A3A9, 0x11A3B4, 0x11A3F1, 0x11A42B, + 0x11A441, 0x11A474, 0x11A481, 0x11A509, 0x11A514, 0x11A5C9, 0x11A8A4, 0x11A9A1, 0x11A9BB, + 0x11A9D9, 0x11A9E1, 0x11AB09, 0x11AF91, 0x11B604, 0x11B681, 0x11BC09, 0x11BE11, 0x11BF08, + 0x11BFA1, 0x11C009, 0x11C091, 0x11C0A9, 0x11C2F4, 0x11C371, 0x11C384, 0x11C409, 0x11C41B, + 0x11C431, 0x11C508, 0x11C5A1, 0x11C729, 0x11C901, 0x11C924, 0x11CA81, 0x11CA94, 0x11CB71, + 0x11D009, 0x11D071, 0x11D089, 0x11D0A1, 0x11D0B9, 0x11D314, 0x11D371, 0x11D3A4, 0x11D3B1, + 0x11D3C4, 0x11D3E1, 0x11D3F4, 0x11D469, 0x11D474, 0x11D481, 0x11D508, 0x11D5A1, 0x11D609, + 0x11D661, 0x11D679, 0x11D691, 0x11D6A9, 0x11D8A4, 0x11D8F1, 0x11D904, 0x11D921, 0x11D934, + 0x11D989, 0x11D991, 0x11DA08, 0x11DAA1, 0x11DB09, 0x11DDC1, 0x11DE08, 0x11DEA1, 0x11EE09, + 0x11EF34, 0x11EF7B, 0x11EF91, 0x11F004, 0x11F029, 0x11F034, 0x11F049, 0x11F111, 0x11F129, + 0x11F344, 0x11F3B1, 0x11F3E4, 0x11F43B, 0x11F451, 0x11F508, 0x11F5A4, 0x11F5B1, 0x11FB09, + 0x11FB11, 0x120009, 0x1239A1, 0x124009, 0x1246F1, 0x124809, 0x125441, 0x12F909, 0x12FF11, + 0x130009, 0x134305, 0x134404, 0x134419, 0x134474, 0x134561, 0x134609, 0x143FB1, 0x144009, + 0x146471, 0x161009, 0x1611E4, 0x161308, 0x1613A1, 0x168009, 0x16A391, 0x16A409, 0x16A5F1, + 0x16A608, 0x16A6A1, 0x16A6EB, 0x16A709, 0x16ABF1, 0x16AC08, 0x16ACA1, 0x16AD09, 0x16AEE1, + 0x16AF04, 0x16AF5B, 0x16AF61, 0x16B009, 0x16B304, 0x16B37B, 0x16B391, 0x16B409, 0x16B44B, + 0x16B451, 0x16B508, 0x16B5A1, 0x16B639, 0x16B781, 0x16B7D9, 0x16B901, 0x16D409, 0x16D6D1, + 0x16D6EB, 0x16D708, 0x16D7A1, 0x16E40E, 0x16E607, 0x16E801, 0x16E98B, 0x16E991, 0x16EA0E, + 0x16EB91, 0x16EBB7, 0x16ED41, 0x16F009, 0x16F4B1, 0x16F4F4, 0x16F509, 0x16F514, 0x16F881, + 0x16F8F4, 0x16F939, 0x16FA01, 0x16FE09, 0x16FE21, 0x16FE39, 0x16FE44, 0x16FE51, 0x16FF04, + 0x16FF29, 0x16FF71, 0x170009, 0x18CD61, 0x18CFF9, 0x18D1F1, 0x18D809, 0x18DF31, 0x1AFF09, + 0x1AFF41, 0x1AFF59, 0x1AFFC1, 0x1AFFD9, 0x1AFFF1, 0x1B0009, 0x1B1231, 0x1B1329, 0x1B1331, + 0x1B1509, 0x1B1531, 0x1B1559, 0x1B1561, 0x1B1649, 0x1B1681, 0x1B1709, 0x1B2FC1, 0x1BC009, + 0x1BC6B1, 0x1BC709, 0x1BC7D1, 0x1BC809, 0x1BC891, 0x1BC909, 0x1BC9A1, 0x1BC9D4, 0x1BC9FB, + 0x1BCA05, 0x1BCA41, 0x1CCF08, 0x1CCFA1, 0x1CF004, 0x1CF2E1, 0x1CF304, 0x1CF471, 0x1D1654, + 0x1D16A1, 0x1D16D4, 0x1D1735, 0x1D17B4, 0x1D1831, 0x1D1854, 0x1D18C1, 0x1D1AA4, 0x1D1AE1, + 0x1D2424, 0x1D2451, 0x1D400E, 0x1D41A7, 0x1D434E, 0x1D44E7, 0x1D4551, 0x1D4567, 0x1D468E, + 0x1D4827, 0x1D49CE, 0x1D49D1, 0x1D49EE, 0x1D4A01, 0x1D4A2E, 0x1D4A31, 0x1D4A5E, 0x1D4A71, + 0x1D4A9E, 0x1D4AD1, 0x1D4AEE, 0x1D4B67, 0x1D4BA1, 0x1D4BB7, 0x1D4BC1, 0x1D4BD7, 0x1D4C41, + 0x1D4C57, 0x1D4D0E, 0x1D4EA7, 0x1D504E, 0x1D5061, 0x1D507E, 0x1D50B1, 0x1D50DE, 0x1D5151, + 0x1D516E, 0x1D51D1, 0x1D51E7, 0x1D538E, 0x1D53A1, 0x1D53BE, 0x1D53F1, 0x1D540E, 0x1D5451, + 0x1D546E, 0x1D5471, 0x1D54AE, 0x1D5511, 0x1D5527, 0x1D56CE, 0x1D5867, 0x1D5A0E, 0x1D5BA7, + 0x1D5D4E, 0x1D5EE7, 0x1D608E, 0x1D6227, 0x1D63CE, 0x1D6567, 0x1D670E, 0x1D68A7, 0x1D6A61, + 0x1D6A8E, 0x1D6C11, 0x1D6C27, 0x1D6DB1, 0x1D6DC7, 0x1D6E2E, 0x1D6FB1, 0x1D6FC7, 0x1D7151, + 0x1D7167, 0x1D71CE, 0x1D7351, 0x1D7367, 0x1D74F1, 0x1D7507, 0x1D756E, 0x1D76F1, 0x1D7707, + 0x1D7891, 0x1D78A7, 0x1D790E, 0x1D7A91, 0x1D7AA7, 0x1D7C31, 0x1D7C47, 0x1D7CAE, 0x1D7CB7, + 0x1D7CC1, 0x1D7CE8, 0x1D8001, 0x1DA004, 0x1DA371, 0x1DA3B4, 0x1DA6D1, 0x1DA754, 0x1DA761, + 0x1DA844, 0x1DA851, 0x1DA88B, 0x1DA891, 0x1DA9B4, 0x1DAA01, 0x1DAA14, 0x1DAB01, 0x1DF007, + 0x1DF0A9, 0x1DF0B7, 0x1DF1F1, 0x1DF257, 0x1DF2B1, 0x1E0004, 0x1E0071, 0x1E0084, 0x1E0191, + 0x1E01B4, 0x1E0221, 0x1E0234, 0x1E0251, 0x1E0264, 0x1E02B1, 0x1E0307, 0x1E06E1, 0x1E08F4, + 0x1E0901, 0x1E1009, 0x1E12D1, 0x1E1304, 0x1E1379, 0x1E13E1, 0x1E1408, 0x1E14A1, 0x1E14E9, + 0x1E14F1, 0x1E2909, 0x1E2AE4, 0x1E2AF1, 0x1E2C09, 0x1E2EC4, 0x1E2F08, 0x1E2FA1, 0x1E4D09, + 0x1E4EC4, 0x1E4F08, 0x1E4FA1, 0x1E5D09, 0x1E5EE4, 0x1E5F09, 0x1E5F18, 0x1E5FB1, 0x1E6C09, + 0x1E6DF1, 0x1E6E09, 0x1E6E34, 0x1E6E49, 0x1E6E64, 0x1E6E79, 0x1E6EE4, 0x1E6F09, 0x1E6F54, + 0x1E6F61, 0x1E6FE9, 0x1E7001, 0x1E7E09, 0x1E7E71, 0x1E7E89, 0x1E7EC1, 0x1E7ED9, 0x1E7EF1, + 0x1E7F09, 0x1E7FF1, 0x1E8009, 0x1E8C51, 0x1E8D04, 0x1E8D71, 0x1E900E, 0x1E9227, 0x1E9444, + 0x1E94B9, 0x1E94C1, 0x1E9508, 0x1E95A1, 0x1EE009, 0x1EE041, 0x1EE059, 0x1EE201, 0x1EE219, + 0x1EE231, 0x1EE249, 0x1EE251, 0x1EE279, 0x1EE281, 0x1EE299, 0x1EE331, 0x1EE349, 0x1EE381, + 0x1EE399, 0x1EE3A1, 0x1EE3B9, 0x1EE3C1, 0x1EE429, 0x1EE431, 0x1EE479, 0x1EE481, 0x1EE499, + 0x1EE4A1, 0x1EE4B9, 0x1EE4C1, 0x1EE4D9, 0x1EE501, 0x1EE519, 0x1EE531, 0x1EE549, 0x1EE551, + 0x1EE579, 0x1EE581, 0x1EE599, 0x1EE5A1, 0x1EE5B9, 0x1EE5C1, 0x1EE5D9, 0x1EE5E1, 0x1EE5F9, + 0x1EE601, 0x1EE619, 0x1EE631, 0x1EE649, 0x1EE651, 0x1EE679, 0x1EE6B1, 0x1EE6C9, 0x1EE731, + 0x1EE749, 0x1EE781, 0x1EE799, 0x1EE7D1, 0x1EE7E9, 0x1EE7F1, 0x1EE809, 0x1EE8A1, 0x1EE8B9, + 0x1EE9C1, 0x1EEA19, 0x1EEA41, 0x1EEA59, 0x1EEAA1, 0x1EEAB9, 0x1EEBC1, 0x1F130E, 0x1F14A1, + 0x1F150E, 0x1F16A1, 0x1F170E, 0x1F18A1, 0x1F6763, 0x1F6791, 0x1FBF08, 0x1FBFA1, 0x200009, + 0x2A6E01, 0x2A7009, 0x2B81E1, 0x2B8209, 0x2CEAE1, 0x2CEB09, 0x2EBE11, 0x2EBF09, 0x2EE5E1, + 0x2F8009, 0x2FA1E1, 0x300009, 0x3134B1, 0x313509, 0x3347A1, 0xE00015, 0xE00021, 0xE00204, + 0xE00801, 0xE01004, 0xE01F01 ]; }