diff --git a/CMakeLists.txt b/CMakeLists.txt index f48c5052b81..0189618f5ba 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -274,6 +274,9 @@ set(EMSCRIPTEN_FASTCOMP OFF CACHE BOOL set(HERMES_ENABLE_INTL OFF CACHE BOOL "Enable JS Intl support (WIP)") +set(HERMES_ENABLE_UNICODE_REGEXP_PROPERTY_ESCAPES ON CACHE BOOL + "Enable RegExp Unicode Property Escapes support") + set(HERMES_ENABLE_TEST_SUITE ON CACHE BOOL "Enable the test suite") @@ -490,6 +493,10 @@ if (HERMES_ENABLE_INTL) add_definitions(-DHERMES_ENABLE_INTL) endif() +if (HERMES_ENABLE_UNICODE_REGEXP_PROPERTY_ESCAPES) + add_definitions(-DHERMES_ENABLE_UNICODE_REGEXP_PROPERTY_ESCAPES) +endif() + if (HERMES_ENABLE_WERROR) # Turn all warnings into errors on GCC-compatible compilers. if (GCC_COMPATIBLE) @@ -745,6 +752,7 @@ if(HERMES_ENABLE_TEST_SUITE) unittests_dir=${CMAKE_CURRENT_BINARY_DIR}/unittests debugger_enabled=${HERMES_ENABLE_DEBUGGER} intl_enabled=${HERMES_ENABLE_INTL} + regexp_unicode_properties_enabled=${HERMES_ENABLE_UNICODE_REGEXP_PROPERTY_ESCAPES} hbc_deltaprep=${HERMES_TOOLS_OUTPUT_DIR}/hbc-deltaprep dependency_extractor=${HERMES_TOOLS_OUTPUT_DIR}/dependency-extractor FileCheck=${HERMES_TOOLS_OUTPUT_DIR}/FileCheck diff --git a/doc/RegExp.md b/doc/RegExp.md index b1147e53da7..dae8d503b89 100644 --- a/doc/RegExp.md +++ b/doc/RegExp.md @@ -21,7 +21,4 @@ As of this writing, Hermes regexp supports 1. All of ES6, including global, case-insensitive, multiline, sticky, and Unicode (and legacy). 1. ES9 lookbehinds. 1. Named capture groups. - -Missing features from ES9 include: - 1. Unicode property escapes. diff --git a/include/hermes/Platform/Unicode/CharacterProperties.h b/include/hermes/Platform/Unicode/CharacterProperties.h index 074b6c52514..e503383263c 100644 --- a/include/hermes/Platform/Unicode/CharacterProperties.h +++ b/include/hermes/Platform/Unicode/CharacterProperties.h @@ -10,6 +10,9 @@ #include #include +#include + +#include "llvh/ADT/ArrayRef.h" namespace hermes { @@ -100,6 +103,16 @@ inline bool isUnicodeIDContinue(uint32_t cp) { cp == UNICODE_ZWNJ || cp == UNICODE_ZWJ; } +/// \return true if the codepoint is valid in a unicode property name +inline bool isUnicodePropertyName(uint32_t ch) { + return ch == '_' || ((ch | 32) >= 'a' && (ch | 32) <= 'z'); +} + +/// \return true if the codepoint is valid in a unicode property value +inline bool isUnicodePropertyValue(uint32_t ch) { + return isUnicodePropertyName(ch) || isUnicodeDigit(ch); +} + /// \return the canonicalized value of \p cp, following ES9 21.2.2.8.2. uint32_t canonicalize(uint32_t cp, bool unicode); @@ -108,6 +121,21 @@ class CodePointSet; /// any character in \p set, following ES9 21.2.2.8.2. CodePointSet makeCanonicallyEquivalent(const CodePointSet &set, bool unicode); +struct UnicodeRangePoolRef; + +// Create a codepoint range array from a Unicode \p propertyName and \p +// propertyValue. +llvh::ArrayRef unicodePropertyRanges( + std::string_view propertyName, + std::string_view propertyValue); + +/// Add a codepoint range array of codepoints to \p receiver, typically used in +/// conjuction with unicodePropertyRanges. +void addRangeArrayPoolToBracket( + CodePointSet *receiver, + const llvh::ArrayRef rangeArrayPool, + bool inverted); + } // namespace hermes #endif // HERMES_PLATFORMUNICODE_CHARACTERPROPERTIES_H diff --git a/include/hermes/Regex/RegexNode.h b/include/hermes/Regex/RegexNode.h index a75ad521c30..9b95f917143 100644 --- a/include/hermes/Regex/RegexNode.h +++ b/include/hermes/Regex/RegexNode.h @@ -827,6 +827,12 @@ class BracketNode : public Node { classes_.push_back(cls); } + void addCodePointRanges( + llvh::ArrayRef rangeArray, + bool inverted = false) { + addRangeArrayPoolToBracket(&codePointSet_, rangeArray, inverted); + } + virtual MatchConstraintSet matchConstraints() const override { MatchConstraintSet result = 0; if (!canMatchASCII()) diff --git a/include/hermes/Regex/RegexTypes.h b/include/hermes/Regex/RegexTypes.h index 109cc86a20a..23df2adf484 100644 --- a/include/hermes/Regex/RegexTypes.h +++ b/include/hermes/Regex/RegexTypes.h @@ -22,6 +22,9 @@ #include "llvh/ADT/SmallString.h" namespace hermes { + +struct UnicodeRangePoolRef; + namespace regex { namespace constants { @@ -122,7 +125,10 @@ enum class ErrorType { InvalidNamedReference, /// Reference to nonexistent capture group. - NonexistentNamedCaptureReference + NonexistentNamedCaptureReference, + + /// Invalid Unicode property name or value + InvalidPropertyName, }; /// \return an error message for the given \p error. @@ -158,6 +164,8 @@ inline const char *messageForError(ErrorType error) { return "Invalid named reference"; case ErrorType::NonexistentNamedCaptureReference: return "Nonexistent named capture reference"; + case ErrorType::InvalidPropertyName: + return "Invalid property name"; case ErrorType::None: return "No error"; } @@ -209,6 +217,19 @@ struct CharacterClass { CharacterClass(Type type, bool invert) : type_(type), inverted_(invert) {} }; +// Type wrapping up a Unicode codepoint range array. +struct CharacterClassCodepointRanges { + llvh::ArrayRef rangeArray; + + // Whether the class is inverted (\P instead of \p). + bool inverted_; + + CharacterClassCodepointRanges( + llvh::ArrayRef rangeArray, + bool inverted) + : rangeArray(rangeArray), inverted_(inverted) {} +}; + // Struct representing flags which may be used when constructing the RegExp class SyntaxFlags { private: diff --git a/lib/CompilerDriver/CompilerDriver.cpp b/lib/CompilerDriver/CompilerDriver.cpp index abe9d882e88..5326b838c1b 100644 --- a/lib/CompilerDriver/CompilerDriver.cpp +++ b/lib/CompilerDriver/CompilerDriver.cpp @@ -2083,6 +2083,9 @@ void printHermesVersion( #endif #ifdef HERMESVM_CONTIGUOUS_HEAP << " Contiguous Heap\n" +#endif +#ifdef HERMES_ENABLE_UNICODE_REGEXP_PROPERTY_ESCAPES + << " Unicode RegExp Property Escapes\n" #endif << " Zip file input\n"; } diff --git a/lib/Platform/Unicode/CharacterProperties.cpp b/lib/Platform/Unicode/CharacterProperties.cpp index 1b296c9100c..8cb554c084e 100644 --- a/lib/Platform/Unicode/CharacterProperties.cpp +++ b/lib/Platform/Unicode/CharacterProperties.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include namespace hermes { @@ -210,4 +211,129 @@ uint32_t canonicalize(uint32_t cp, bool unicode) { } } +#ifdef HERMES_ENABLE_UNICODE_REGEXP_PROPERTY_ESCAPES + +/// Find a matching entry (such as \p NameMapEntry or \p RangeMapEntry) by +/// matching a string \p name against the entry's \p name field. +template +static const T *findMapEntry( + const llvh::ArrayRef &arrayRef, + const std::string_view name) { + auto it = std::lower_bound( + std::begin(arrayRef), + std::end(arrayRef), + name, + [](const T &a, std::string_view b) { + return UNICODE_DATA_STRING_POOL.compare(a.name.offset, a.name.size, b) < + 0; + }); + if (it == std::end(arrayRef) || + UNICODE_DATA_STRING_POOL.compare(it->name.offset, it->name.size, name) != + 0) { + return nullptr; + } + return it; +} + +llvh::ArrayRef unicodePropertyRanges( + std::string_view propertyName, + std::string_view propertyValue) { + const NameMapEntry *canonicalNameEntry; + llvh::ArrayRef rangeMap; + + if (propertyValue.empty()) { + // There was no property value, this is either a binary property or a value + // from General_Category, as per `LoneUnicodePropertyNameOrValue`. + if ((canonicalNameEntry = findMapEntry( + llvh::ArrayRef(canonicalPropertyNameMap_BinaryProperty), + propertyName))) { + rangeMap = unicodePropertyRangeMap_BinaryProperty; + } else if ((canonicalNameEntry = findMapEntry( + llvh::ArrayRef(canonicalPropertyNameMap_GeneralCategory), + propertyName))) { + rangeMap = unicodePropertyRangeMap_GeneralCategory; + } + } else { + // There was a property value, assume the name is a category. + if ((propertyName == "General_Category" || propertyName == "gc") && + (canonicalNameEntry = findMapEntry( + llvh::ArrayRef(canonicalPropertyNameMap_GeneralCategory), + propertyValue))) { + rangeMap = unicodePropertyRangeMap_GeneralCategory; + } else if ( + (propertyName == "Script" || propertyName == "sc") && + (canonicalNameEntry = findMapEntry( + llvh::ArrayRef(canonicalPropertyNameMap_Script), propertyValue))) { + rangeMap = unicodePropertyRangeMap_Script; + } else if ( + (propertyName == "Script_Extensions" || propertyName == "scx") && + // Since Script_Extensions is a superset of Script, they share + // a name map. + (canonicalNameEntry = findMapEntry( + llvh::ArrayRef(canonicalPropertyNameMap_Script), propertyValue))) { + rangeMap = unicodePropertyRangeMap_ScriptExtensions; + } else { + return llvh::ArrayRef(); + } + } + + if (canonicalNameEntry == nullptr) { + return llvh::ArrayRef(); + } + + // Look up the range arrays for the property. + auto rangeMapEntry = findMapEntry( + rangeMap, + UNICODE_DATA_STRING_POOL.substr( + canonicalNameEntry->canonical.offset, + canonicalNameEntry->canonical.size)); + if (rangeMapEntry == nullptr) { + return llvh::ArrayRef(); + } + + return llvh::ArrayRef{ + &UNICODE_RANGE_ARRAY_POOL[rangeMapEntry->rangeArrayPoolOffset], + rangeMapEntry->rangeArraySize}; +} + +void addRangeArrayPoolToBracket( + CodePointSet *receiver, + const llvh::ArrayRef rangeArrayPool, + bool inverted) { + for (auto rangePoolRef : rangeArrayPool) { + auto rangePool = llvh::ArrayRef{ + &UNICODE_RANGE_POOL[rangePoolRef.offset], rangePoolRef.size}; + + if (inverted) { + uint32_t last = 0; + for (auto range : rangePool) { + receiver->add(CodePointRange{last, range.first - last}); + last = range.second + 1; + } + // Add the final range. + receiver->add(CodePointRange{last, UNICODE_MAX_VALUE - last}); + } else { + for (auto range : rangePool) { + const uint32_t length = range.second - range.first + 1; + receiver->add(CodePointRange{range.first, length}); + } + } + } +} + +#else + +llvh::ArrayRef unicodePropertyRanges( + std::string_view propertyName, + std::string_view propertyValue) { + return llvh::ArrayRef(); +} + +void addRangeArrayPoolToBracket( + CodePointSet *receiver, + const llvh::ArrayRef rangeArrayPool, + bool inverted) {} + +#endif + } // namespace hermes diff --git a/lib/Platform/Unicode/UnicodeData.inc b/lib/Platform/Unicode/UnicodeData.inc index fa3b60c69e3..13c5398b60e 100644 --- a/lib/Platform/Unicode/UnicodeData.inc +++ b/lib/Platform/Unicode/UnicodeData.inc @@ -1,9 +1,20 @@ // // File generated by genUnicodeTable.py -// using Unicode data files downloaded on 2021-11-06 -// UnicodeData.txt SHA1: 8a5c26bfb27df8cfab23cf2c34c62d8d3075ae4d -// SpecialCasing.txt SHA1: 8e833ca67591ccbb90bf766465996109fc8c7bc9 -// CaseFolding.txt SHA1: f9e6b159bedc727b96e39978235943bc5a460355 +// using Unicode data files downloaded on 2024-04-03 +// for Unicode version 15.1.0 +// UnicodeData.txt SHA1: 16b6bb82e32df6eae1e80d8069b197f57c474176 +// SpecialCasing.txt SHA1: 79f98f7a19255aadf101b34e7e4df64f9d65acfb +// CaseFolding.txt SHA1: 058acae8ab3376e04b1f1a7885e9eb4915db29bd +// DerivedGeneralCategory.txt SHA1: ac907718096e8f00578a6003d5c8ab8734da0ba2 +// Scripts.txt SHA1: 292596d837e670a374163302f96216a95d056bea +// ScriptExtensions.txt SHA1: bca6fde485b578a6ddf5e742ac26a400b442dc5b +// DerivedCoreProperties.txt SHA1: c43e23f8cf646eff1d73298d51742b59f82d4e1b +// DerivedNormalizationProps.txt SHA1: c328673c190fee88357c9e255587974c10c40ae1 +// DerivedBinaryProperties.txt SHA1: 9888b13923e524f1ab61a2ceab4515b000a30b49 +// PropertyValueAliases.txt SHA1: 14a11c86223f2c6f0d01b0dd476550b797d2f372 +// PropertyAliases.txt SHA1: d6539eef9093c6484cba63412c6cc888156055c2 +// PropList.txt SHA1: 3a1bfd31537e161f70266870a78c92f43b02837f +// emoji-data.txt SHA1: 04b4989813f50206602d37a685135b3465a7e551 // *** DO NOT EDIT BY HAND *** /// An inclusive range of Unicode characters. @@ -28,8 +39,34 @@ struct UnicodeTransformRange { unsigned modulo : 8; }; +/// A reference to a string pool entry. +struct StringPoolRef { + unsigned offset : 16; + unsigned size : 16; +}; + +/// A reference to a UnicodeRange pool entry. +struct UnicodeRangePoolRef { + unsigned offset : 16; + unsigned size : 16; +}; + +/// A reference to a string pool name that maps to a string pool canonical name. +struct NameMapEntry { + StringPoolRef name; + StringPoolRef canonical; +}; + +/// A reference to a string pool name that maps to a range array pool offset +/// and size. +struct RangeMapEntry { + StringPoolRef name; + unsigned rangeArrayPoolOffset : 16; + unsigned rangeArraySize : 16; +}; + // UNICODE_LETTERS Lu Ll Lt Lm Lo Nl -// static constexpr uint32_t UNICODE_LETTERS_SIZE = 354; +// static constexpr uint32_t UNICODE_LETTERS_SIZE = 362; static constexpr UnicodeRange UNICODE_LETTERS[] = { {0x41, 0x5a}, {0x61, 0x7a}, {0xaa, 0xaa}, {0xb5, 0xb5}, {0xba, 0xba}, {0xc0, 0xd6}, @@ -117,27 +154,29 @@ static constexpr UnicodeRange UNICODE_LETTERS[] = { {0x10ac0, 0x10ac7}, {0x10ac9, 0x10ae4}, {0x10b00, 0x10b35}, {0x10b40, 0x10b55}, {0x10b60, 0x10b72}, {0x10b80, 0x10b91}, {0x10c00, 0x10cf2}, {0x10d00, 0x10d23}, {0x10e80, 0x10ea9}, - {0x10eb0, 0x10f1c}, {0x10f27, 0x10f45}, {0x10f70, 0x10f81}, - {0x10fb0, 0x10fc4}, {0x10fe0, 0x10ff6}, {0x11003, 0x11037}, - {0x11071, 0x11072}, {0x11075, 0x11075}, {0x11083, 0x110af}, - {0x110d0, 0x110e8}, {0x11103, 0x11126}, {0x11144, 0x11144}, - {0x11147, 0x11172}, {0x11176, 0x11176}, {0x11183, 0x111b2}, - {0x111c1, 0x111c4}, {0x111da, 0x111da}, {0x111dc, 0x111dc}, - {0x11200, 0x1122b}, {0x11280, 0x112a8}, {0x112b0, 0x112de}, - {0x11305, 0x11339}, {0x1133d, 0x1133d}, {0x11350, 0x11350}, - {0x1135d, 0x11361}, {0x11400, 0x11434}, {0x11447, 0x1144a}, - {0x1145f, 0x114af}, {0x114c4, 0x114c5}, {0x114c7, 0x114c7}, - {0x11580, 0x115ae}, {0x115d8, 0x115db}, {0x11600, 0x1162f}, - {0x11644, 0x11644}, {0x11680, 0x116aa}, {0x116b8, 0x116b8}, - {0x11700, 0x1171a}, {0x11740, 0x1182b}, {0x118a0, 0x118df}, - {0x118ff, 0x1192f}, {0x1193f, 0x1193f}, {0x11941, 0x11941}, - {0x119a0, 0x119d0}, {0x119e1, 0x119e1}, {0x119e3, 0x119e3}, - {0x11a00, 0x11a00}, {0x11a0b, 0x11a32}, {0x11a3a, 0x11a3a}, - {0x11a50, 0x11a50}, {0x11a5c, 0x11a89}, {0x11a9d, 0x11a9d}, - {0x11ab0, 0x11c2e}, {0x11c40, 0x11c40}, {0x11c72, 0x11c8f}, + {0x10eb0, 0x10eb1}, {0x10f00, 0x10f1c}, {0x10f27, 0x10f45}, + {0x10f70, 0x10f81}, {0x10fb0, 0x10fc4}, {0x10fe0, 0x10ff6}, + {0x11003, 0x11037}, {0x11071, 0x11072}, {0x11075, 0x11075}, + {0x11083, 0x110af}, {0x110d0, 0x110e8}, {0x11103, 0x11126}, + {0x11144, 0x11144}, {0x11147, 0x11172}, {0x11176, 0x11176}, + {0x11183, 0x111b2}, {0x111c1, 0x111c4}, {0x111da, 0x111da}, + {0x111dc, 0x111dc}, {0x11200, 0x1122b}, {0x1123f, 0x11240}, + {0x11280, 0x112a8}, {0x112b0, 0x112de}, {0x11305, 0x11339}, + {0x1133d, 0x1133d}, {0x11350, 0x11350}, {0x1135d, 0x11361}, + {0x11400, 0x11434}, {0x11447, 0x1144a}, {0x1145f, 0x114af}, + {0x114c4, 0x114c5}, {0x114c7, 0x114c7}, {0x11580, 0x115ae}, + {0x115d8, 0x115db}, {0x11600, 0x1162f}, {0x11644, 0x11644}, + {0x11680, 0x116aa}, {0x116b8, 0x116b8}, {0x11700, 0x1171a}, + {0x11740, 0x1182b}, {0x118a0, 0x118df}, {0x118ff, 0x1192f}, + {0x1193f, 0x1193f}, {0x11941, 0x11941}, {0x119a0, 0x119d0}, + {0x119e1, 0x119e1}, {0x119e3, 0x119e3}, {0x11a00, 0x11a00}, + {0x11a0b, 0x11a32}, {0x11a3a, 0x11a3a}, {0x11a50, 0x11a50}, + {0x11a5c, 0x11a89}, {0x11a9d, 0x11a9d}, {0x11ab0, 0x11af8}, + {0x11c00, 0x11c2e}, {0x11c40, 0x11c40}, {0x11c72, 0x11c8f}, {0x11d00, 0x11d30}, {0x11d46, 0x11d46}, {0x11d60, 0x11d89}, - {0x11d98, 0x11d98}, {0x11ee0, 0x11ef2}, {0x11fb0, 0x11fb0}, - {0x12000, 0x1246e}, {0x12480, 0x12ff0}, {0x13000, 0x1342e}, + {0x11d98, 0x11d98}, {0x11ee0, 0x11ef2}, {0x11f02, 0x11f02}, + {0x11f04, 0x11f33}, {0x11fb0, 0x11fb0}, {0x12000, 0x1246e}, + {0x12480, 0x12ff0}, {0x13000, 0x1342f}, {0x13441, 0x13446}, {0x14400, 0x16a5e}, {0x16a70, 0x16abe}, {0x16ad0, 0x16aed}, {0x16b00, 0x16b2f}, {0x16b40, 0x16b43}, {0x16b63, 0x16e7f}, {0x16f00, 0x16f4a}, {0x16f50, 0x16f50}, {0x16f93, 0x16fe1}, @@ -145,14 +184,15 @@ static constexpr UnicodeRange UNICODE_LETTERS[] = { {0x1d6c2, 0x1d6da}, {0x1d6dc, 0x1d6fa}, {0x1d6fc, 0x1d714}, {0x1d716, 0x1d734}, {0x1d736, 0x1d74e}, {0x1d750, 0x1d76e}, {0x1d770, 0x1d788}, {0x1d78a, 0x1d7a8}, {0x1d7aa, 0x1d7c2}, - {0x1d7c4, 0x1d7cb}, {0x1df00, 0x1df1e}, {0x1e100, 0x1e12c}, - {0x1e137, 0x1e13d}, {0x1e14e, 0x1e14e}, {0x1e290, 0x1e2ad}, - {0x1e2c0, 0x1e2eb}, {0x1e7e0, 0x1e8c4}, {0x1e900, 0x1e943}, - {0x1e94b, 0x1e94b}, {0x1ee00, 0x1eebb}, {0x20000, 0x3134a}, + {0x1d7c4, 0x1d7cb}, {0x1df00, 0x1df2a}, {0x1e030, 0x1e06d}, + {0x1e100, 0x1e12c}, {0x1e137, 0x1e13d}, {0x1e14e, 0x1e14e}, + {0x1e290, 0x1e2ad}, {0x1e2c0, 0x1e2eb}, {0x1e4d0, 0x1e4eb}, + {0x1e7e0, 0x1e8c4}, {0x1e900, 0x1e943}, {0x1e94b, 0x1e94b}, + {0x1ee00, 0x1eebb}, {0x20000, 0x323af}, }; // UNICODE_COMBINING_MARK Mn Mc -// static constexpr uint32_t UNICODE_COMBINING_MARK_SIZE = 245; +// static constexpr uint32_t UNICODE_COMBINING_MARK_SIZE = 254; static constexpr UnicodeRange UNICODE_COMBINING_MARK[] = { {0x300, 0x36f}, {0x483, 0x487}, {0x591, 0x5bd}, {0x5bf, 0x5bf}, {0x5c1, 0x5c2}, {0x5c4, 0x5c5}, @@ -173,12 +213,12 @@ static constexpr UnicodeRange UNICODE_COMBINING_MARK[] = { {0xb82, 0xb82}, {0xbbe, 0xbcd}, {0xbd7, 0xbd7}, {0xc00, 0xc04}, {0xc3c, 0xc3c}, {0xc3e, 0xc56}, {0xc62, 0xc63}, {0xc81, 0xc83}, {0xcbc, 0xcbc}, - {0xcbe, 0xcd6}, {0xce2, 0xce3}, {0xd00, 0xd03}, + {0xcbe, 0xcd6}, {0xce2, 0xce3}, {0xcf3, 0xd03}, {0xd3b, 0xd3c}, {0xd3e, 0xd4d}, {0xd57, 0xd57}, {0xd62, 0xd63}, {0xd81, 0xd83}, {0xdca, 0xddf}, {0xdf2, 0xdf3}, {0xe31, 0xe31}, {0xe34, 0xe3a}, {0xe47, 0xe4e}, {0xeb1, 0xeb1}, {0xeb4, 0xebc}, - {0xec8, 0xecd}, {0xf18, 0xf19}, {0xf35, 0xf35}, + {0xec8, 0xece}, {0xf18, 0xf19}, {0xf35, 0xf35}, {0xf37, 0xf37}, {0xf39, 0xf39}, {0xf3e, 0xf3f}, {0xf71, 0xf84}, {0xf86, 0xf87}, {0xf8d, 0xfbc}, {0xfc6, 0xfc6}, {0x102b, 0x103e}, {0x1056, 0x1059}, @@ -210,36 +250,39 @@ static constexpr UnicodeRange UNICODE_COMBINING_MARK[] = { {0xfe00, 0xfe0f}, {0xfe20, 0xfe2f}, {0x101fd, 0x101fd}, {0x102e0, 0x102e0}, {0x10376, 0x1037a}, {0x10a01, 0x10a0f}, {0x10a38, 0x10a3f}, {0x10ae5, 0x10ae6}, {0x10d24, 0x10d27}, - {0x10eab, 0x10eac}, {0x10f46, 0x10f50}, {0x10f82, 0x10f85}, - {0x11000, 0x11002}, {0x11038, 0x11046}, {0x11070, 0x11070}, - {0x11073, 0x11074}, {0x1107f, 0x11082}, {0x110b0, 0x110ba}, - {0x110c2, 0x110c2}, {0x11100, 0x11102}, {0x11127, 0x11134}, - {0x11145, 0x11146}, {0x11173, 0x11173}, {0x11180, 0x11182}, - {0x111b3, 0x111c0}, {0x111c9, 0x111cc}, {0x111ce, 0x111cf}, - {0x1122c, 0x11237}, {0x1123e, 0x1123e}, {0x112df, 0x112ea}, - {0x11300, 0x11303}, {0x1133b, 0x1133c}, {0x1133e, 0x1134d}, - {0x11357, 0x11357}, {0x11362, 0x11374}, {0x11435, 0x11446}, - {0x1145e, 0x1145e}, {0x114b0, 0x114c3}, {0x115af, 0x115c0}, - {0x115dc, 0x115dd}, {0x11630, 0x11640}, {0x116ab, 0x116b7}, - {0x1171d, 0x1172b}, {0x1182c, 0x1183a}, {0x11930, 0x1193e}, - {0x11940, 0x11940}, {0x11942, 0x11943}, {0x119d1, 0x119e0}, - {0x119e4, 0x119e4}, {0x11a01, 0x11a0a}, {0x11a33, 0x11a39}, - {0x11a3b, 0x11a3e}, {0x11a47, 0x11a47}, {0x11a51, 0x11a5b}, - {0x11a8a, 0x11a99}, {0x11c2f, 0x11c3f}, {0x11c92, 0x11cb6}, - {0x11d31, 0x11d45}, {0x11d47, 0x11d47}, {0x11d8a, 0x11d97}, - {0x11ef3, 0x11ef6}, {0x16af0, 0x16af4}, {0x16b30, 0x16b36}, - {0x16f4f, 0x16f4f}, {0x16f51, 0x16f92}, {0x16fe4, 0x16ff1}, - {0x1bc9d, 0x1bc9e}, {0x1cf00, 0x1cf46}, {0x1d165, 0x1d169}, - {0x1d16d, 0x1d172}, {0x1d17b, 0x1d182}, {0x1d185, 0x1d18b}, - {0x1d1aa, 0x1d1ad}, {0x1d242, 0x1d244}, {0x1da00, 0x1da36}, - {0x1da3b, 0x1da6c}, {0x1da75, 0x1da75}, {0x1da84, 0x1da84}, - {0x1da9b, 0x1daaf}, {0x1e000, 0x1e02a}, {0x1e130, 0x1e136}, - {0x1e2ae, 0x1e2ae}, {0x1e2ec, 0x1e2ef}, {0x1e8d0, 0x1e8d6}, + {0x10eab, 0x10eac}, {0x10efd, 0x10eff}, {0x10f46, 0x10f50}, + {0x10f82, 0x10f85}, {0x11000, 0x11002}, {0x11038, 0x11046}, + {0x11070, 0x11070}, {0x11073, 0x11074}, {0x1107f, 0x11082}, + {0x110b0, 0x110ba}, {0x110c2, 0x110c2}, {0x11100, 0x11102}, + {0x11127, 0x11134}, {0x11145, 0x11146}, {0x11173, 0x11173}, + {0x11180, 0x11182}, {0x111b3, 0x111c0}, {0x111c9, 0x111cc}, + {0x111ce, 0x111cf}, {0x1122c, 0x11237}, {0x1123e, 0x1123e}, + {0x11241, 0x11241}, {0x112df, 0x112ea}, {0x11300, 0x11303}, + {0x1133b, 0x1133c}, {0x1133e, 0x1134d}, {0x11357, 0x11357}, + {0x11362, 0x11374}, {0x11435, 0x11446}, {0x1145e, 0x1145e}, + {0x114b0, 0x114c3}, {0x115af, 0x115c0}, {0x115dc, 0x115dd}, + {0x11630, 0x11640}, {0x116ab, 0x116b7}, {0x1171d, 0x1172b}, + {0x1182c, 0x1183a}, {0x11930, 0x1193e}, {0x11940, 0x11940}, + {0x11942, 0x11943}, {0x119d1, 0x119e0}, {0x119e4, 0x119e4}, + {0x11a01, 0x11a0a}, {0x11a33, 0x11a39}, {0x11a3b, 0x11a3e}, + {0x11a47, 0x11a47}, {0x11a51, 0x11a5b}, {0x11a8a, 0x11a99}, + {0x11c2f, 0x11c3f}, {0x11c92, 0x11cb6}, {0x11d31, 0x11d45}, + {0x11d47, 0x11d47}, {0x11d8a, 0x11d97}, {0x11ef3, 0x11ef6}, + {0x11f00, 0x11f01}, {0x11f03, 0x11f03}, {0x11f34, 0x11f42}, + {0x13440, 0x13440}, {0x13447, 0x13455}, {0x16af0, 0x16af4}, + {0x16b30, 0x16b36}, {0x16f4f, 0x16f4f}, {0x16f51, 0x16f92}, + {0x16fe4, 0x16ff1}, {0x1bc9d, 0x1bc9e}, {0x1cf00, 0x1cf46}, + {0x1d165, 0x1d169}, {0x1d16d, 0x1d172}, {0x1d17b, 0x1d182}, + {0x1d185, 0x1d18b}, {0x1d1aa, 0x1d1ad}, {0x1d242, 0x1d244}, + {0x1da00, 0x1da36}, {0x1da3b, 0x1da6c}, {0x1da75, 0x1da75}, + {0x1da84, 0x1da84}, {0x1da9b, 0x1daaf}, {0x1e000, 0x1e02a}, + {0x1e08f, 0x1e08f}, {0x1e130, 0x1e136}, {0x1e2ae, 0x1e2ae}, + {0x1e2ec, 0x1e2ef}, {0x1e4ec, 0x1e4ef}, {0x1e8d0, 0x1e8d6}, {0x1e944, 0x1e94a}, {0xe0100, 0xe01ef}, }; // UNICODE_DIGIT Nd -// static constexpr uint32_t UNICODE_DIGIT_SIZE = 61; +// static constexpr uint32_t UNICODE_DIGIT_SIZE = 63; static constexpr UnicodeRange UNICODE_DIGIT[] = { {0x30, 0x39}, {0x660, 0x669}, {0x6f0, 0x6f9}, {0x7c0, 0x7c9}, {0x966, 0x96f}, {0x9e6, 0x9ef}, @@ -258,10 +301,10 @@ static constexpr UnicodeRange UNICODE_DIGIT[] = { {0x112f0, 0x112f9}, {0x11450, 0x11459}, {0x114d0, 0x114d9}, {0x11650, 0x11659}, {0x116c0, 0x116c9}, {0x11730, 0x11739}, {0x118e0, 0x118e9}, {0x11950, 0x11959}, {0x11c50, 0x11c59}, - {0x11d50, 0x11d59}, {0x11da0, 0x11da9}, {0x16a60, 0x16a69}, - {0x16ac0, 0x16ac9}, {0x16b50, 0x16b59}, {0x1d7ce, 0x1d7ff}, - {0x1e140, 0x1e149}, {0x1e2f0, 0x1e2f9}, {0x1e950, 0x1e959}, - {0x1fbf0, 0x1fbf9}, + {0x11d50, 0x11d59}, {0x11da0, 0x11da9}, {0x11f50, 0x11f59}, + {0x16a60, 0x16a69}, {0x16ac0, 0x16ac9}, {0x16b50, 0x16b59}, + {0x1d7ce, 0x1d7ff}, {0x1e140, 0x1e149}, {0x1e2f0, 0x1e2f9}, + {0x1e4f0, 0x1e4f9}, {0x1e950, 0x1e959}, {0x1fbf0, 0x1fbf9}, }; // UNICODE_CONNECTOR_PUNCTUATION Pc @@ -275,74 +318,8695 @@ static constexpr UnicodeRange UNICODE_CONNECTOR_PUNCTUATION[] = { {0xff3f, 0xff3f}, }; -// static constexpr uint32_t UNICODE_FOLDS_SIZE = 198; +#ifdef HERMES_ENABLE_UNICODE_REGEXP_PROPERTY_ESCAPES + +static constexpr std::string_view UNICODE_DATA_STRING_POOL = + "Default_Ignorable_Code_PointChanges_When_NFKC_CasefoldedNoncharacter_Code_PointLogical_Order_ExceptionChanges_When_UppercasedChanges_When_TitlecasedChanges_When_LowercasedChanges_When_CasemappedChanges_When_CasefoldedNyiakeng_Puachue_HmongInscriptional_ParthianInscriptional_PahlaviExtended_PictographicConnector_PunctuationAnatolian_HieroglyphsTerminal_PunctuationMeroitic_HieroglyphsIDS_Trinary_OperatorEgyptian_HieroglyphsPattern_White_SpaceParagraph_SeparatorKhitan_Small_ScriptInitial_PunctuationIDS_Binary_OperatorEmoji_Modifier_BaseCanadian_AboriginalVariation_SelectorRegional_IndicatorEmoji_PresentationCaucasian_AlbanianUnified_IdeographSentence_TerminalOther_PunctuationOld_South_ArabianOld_North_ArabianFinal_PunctuationClose_PunctuationZanabazar_SquareUppercase_LetterTitlecase_LetterOpen_PunctuationMeroitic_CursiveLowercase_LetterImperial_AramaicDash_PunctuationSpace_SeparatorPsalter_PahlaviNonspacing_MarkModifier_SymbolModifier_LetterHanifi_RohingyaGrapheme_ExtendEmoji_ComponentCurrency_SymbolASCII_Hex_DigitQuotation_MarkPattern_SyntaxLine_SeparatorEnclosing_MarkDecimal_NumberCombining_MarkCase_IgnorableOld_HungarianMende_KikakuiMasaram_GondiLetter_NumberGunjala_GondiGrapheme_BaseBidi_MirroredXID_ContinueSyloti_NagriSpacing_MarkSora_SompengPahawh_HmongOther_SymbolOther_NumberOther_LetterMeetei_MayekJoin_ControlCypro_MinoanCased_LetterBidi_ControlWarang_CitiSoft_DottedSignWritingPrivate_UsePau_Cin_HauOld_SogdianOld_PersianNew_Tai_LueNandinagariNag_MundariMedefaidrinMath_SymbolIdeographicDives_AkuruUnassignedSaurashtraPhoenicianOld_UyghurOld_TurkicOld_PermicOld_ItalicManichaeanKharoshthiGlagoliticDevanagariDeprecatedChorasmianAlphabeticXID_StartSurrogateSundaneseSamaritanPalmyreneNabataeanMongolianMalayalamKhudawadiInheritedDiacriticCuneiformBhaiksukiBassa_VahVithkuqiUgariticTifinaghTai_VietTai_ThamTagbanwaPhags_PaOl_ChikiMahajaniLinear_BLinear_AKayah_LiKatakanaJavaneseHiraganaGurmukhiGujaratiGeorgianExtenderEthiopicDuployanCyrillicCherokeeBugineseBopomofoBalineseAssignedArmenianUnknownTirhutaTibetanTagalogSoyomboSinhalaSiddhamShavianSharadaRadicalPat_SynOsmanyaMyanmarMultaniMarchenMandaicMakasarKannadaHanunooGranthaGr_BaseExtPictElymaicElbasanDeseretCypriotBrailleBengaliAvestanYezidiWanchoWSpaceThaanaTeluguTangutTangsaTai_LeSyriacRejangPat_WSLydianLycianLepchaKhojkiKaithiHebrewHatranHangulGr_ExtGothicFormatCopticCommonChakmaCarianBrahmiArabicspacepunctdigitcntrlUIdeoTamilTakriSTermRunicQMarkOsageOriyaOghamNushuNCharLimbuLatinKhmerGreekEPresECompEBaseDograCWKCFBuhidBatakBamumAdlamZzzzZyyyZinhZanbYiiiXsuxXpeoXIDSXIDCWchoVaiiTotoTnsaTibtThaiTglgTfngTavtTamlTaluTaleSyrcSogoSindShrdShawSgnwSarbSamrRunrRohgRjngQaaiQaacPrtiPlrdPhnxPhlpPhliPaucOugrOsgeOryaOrkhOlckOgamNshuNkooNewaNbatNarbNagmMymrMteiMrooMlymMiaoMercMedfMahjLisuLinbLinaLatnLaooLanaKthiKndaKitsKhmrKawiKanaKaliIDSTIDSBHmnpHmngHluwHanoGuruGujrGrekGonmGongEModDsrtDiakCyrlCprtCpmnChrsChamCansCakmCWCMCWCFBuhdBhksBatkAvstArmnArmiAhomAghbAdlmAHexLOECWUCWTCWLAnyZsZpZlVSSkSDRIPfPdPcNlNdMnMcLtLmLlLCDICsCnCfCc"; + +// clang-format off +static constexpr UnicodeRange UNICODE_RANGE_POOL[] = { + // General_Category: C + // General_Category: Cc + {0x0000, 0x001F}, {0x007F, 0x009F}, + // General_Category: Cf + {0x00AD, 0x00AD}, {0x0600, 0x0605}, {0x061C, 0x061C}, + {0x06DD, 0x06DD}, {0x070F, 0x070F}, {0x0890, 0x0891}, + {0x08E2, 0x08E2}, {0x180E, 0x180E}, {0x200B, 0x200F}, + {0x202A, 0x202E}, {0x2060, 0x2064}, {0x2066, 0x206F}, + {0xFEFF, 0xFEFF}, {0xFFF9, 0xFFFB}, {0x110BD, 0x110BD}, + {0x110CD, 0x110CD}, {0x13430, 0x1343F}, {0x1BCA0, 0x1BCA3}, + {0x1D173, 0x1D17A}, {0xE0001, 0xE0001}, {0xE0020, 0xE007F}, + // General_Category: Cn + {0x0378, 0x0379}, {0x0380, 0x0383}, {0x038B, 0x038B}, + {0x038D, 0x038D}, {0x03A2, 0x03A2}, {0x0530, 0x0530}, + {0x0557, 0x0558}, {0x058B, 0x058C}, {0x0590, 0x0590}, + {0x05C8, 0x05CF}, {0x05EB, 0x05EE}, {0x05F5, 0x05FF}, + {0x070E, 0x070E}, {0x074B, 0x074C}, {0x07B2, 0x07BF}, + {0x07FB, 0x07FC}, {0x082E, 0x082F}, {0x083F, 0x083F}, + {0x085C, 0x085D}, {0x085F, 0x085F}, {0x086B, 0x086F}, + {0x088F, 0x088F}, {0x0892, 0x0897}, {0x0984, 0x0984}, + {0x098D, 0x098E}, {0x0991, 0x0992}, {0x09A9, 0x09A9}, + {0x09B1, 0x09B1}, {0x09B3, 0x09B5}, {0x09BA, 0x09BB}, + {0x09C5, 0x09C6}, {0x09C9, 0x09CA}, {0x09CF, 0x09D6}, + {0x09D8, 0x09DB}, {0x09DE, 0x09DE}, {0x09E4, 0x09E5}, + {0x09FF, 0x0A00}, {0x0A04, 0x0A04}, {0x0A0B, 0x0A0E}, + {0x0A11, 0x0A12}, {0x0A29, 0x0A29}, {0x0A31, 0x0A31}, + {0x0A34, 0x0A34}, {0x0A37, 0x0A37}, {0x0A3A, 0x0A3B}, + {0x0A3D, 0x0A3D}, {0x0A43, 0x0A46}, {0x0A49, 0x0A4A}, + {0x0A4E, 0x0A50}, {0x0A52, 0x0A58}, {0x0A5D, 0x0A5D}, + {0x0A5F, 0x0A65}, {0x0A77, 0x0A80}, {0x0A84, 0x0A84}, + {0x0A8E, 0x0A8E}, {0x0A92, 0x0A92}, {0x0AA9, 0x0AA9}, + {0x0AB1, 0x0AB1}, {0x0AB4, 0x0AB4}, {0x0ABA, 0x0ABB}, + {0x0AC6, 0x0AC6}, {0x0ACA, 0x0ACA}, {0x0ACE, 0x0ACF}, + {0x0AD1, 0x0ADF}, {0x0AE4, 0x0AE5}, {0x0AF2, 0x0AF8}, + {0x0B00, 0x0B00}, {0x0B04, 0x0B04}, {0x0B0D, 0x0B0E}, + {0x0B11, 0x0B12}, {0x0B29, 0x0B29}, {0x0B31, 0x0B31}, + {0x0B34, 0x0B34}, {0x0B3A, 0x0B3B}, {0x0B45, 0x0B46}, + {0x0B49, 0x0B4A}, {0x0B4E, 0x0B54}, {0x0B58, 0x0B5B}, + {0x0B5E, 0x0B5E}, {0x0B64, 0x0B65}, {0x0B78, 0x0B81}, + {0x0B84, 0x0B84}, {0x0B8B, 0x0B8D}, {0x0B91, 0x0B91}, + {0x0B96, 0x0B98}, {0x0B9B, 0x0B9B}, {0x0B9D, 0x0B9D}, + {0x0BA0, 0x0BA2}, {0x0BA5, 0x0BA7}, {0x0BAB, 0x0BAD}, + {0x0BBA, 0x0BBD}, {0x0BC3, 0x0BC5}, {0x0BC9, 0x0BC9}, + {0x0BCE, 0x0BCF}, {0x0BD1, 0x0BD6}, {0x0BD8, 0x0BE5}, + {0x0BFB, 0x0BFF}, {0x0C0D, 0x0C0D}, {0x0C11, 0x0C11}, + {0x0C29, 0x0C29}, {0x0C3A, 0x0C3B}, {0x0C45, 0x0C45}, + {0x0C49, 0x0C49}, {0x0C4E, 0x0C54}, {0x0C57, 0x0C57}, + {0x0C5B, 0x0C5C}, {0x0C5E, 0x0C5F}, {0x0C64, 0x0C65}, + {0x0C70, 0x0C76}, {0x0C8D, 0x0C8D}, {0x0C91, 0x0C91}, + {0x0CA9, 0x0CA9}, {0x0CB4, 0x0CB4}, {0x0CBA, 0x0CBB}, + {0x0CC5, 0x0CC5}, {0x0CC9, 0x0CC9}, {0x0CCE, 0x0CD4}, + {0x0CD7, 0x0CDC}, {0x0CDF, 0x0CDF}, {0x0CE4, 0x0CE5}, + {0x0CF0, 0x0CF0}, {0x0CF4, 0x0CFF}, {0x0D0D, 0x0D0D}, + {0x0D11, 0x0D11}, {0x0D45, 0x0D45}, {0x0D49, 0x0D49}, + {0x0D50, 0x0D53}, {0x0D64, 0x0D65}, {0x0D80, 0x0D80}, + {0x0D84, 0x0D84}, {0x0D97, 0x0D99}, {0x0DB2, 0x0DB2}, + {0x0DBC, 0x0DBC}, {0x0DBE, 0x0DBF}, {0x0DC7, 0x0DC9}, + {0x0DCB, 0x0DCE}, {0x0DD5, 0x0DD5}, {0x0DD7, 0x0DD7}, + {0x0DE0, 0x0DE5}, {0x0DF0, 0x0DF1}, {0x0DF5, 0x0E00}, + {0x0E3B, 0x0E3E}, {0x0E5C, 0x0E80}, {0x0E83, 0x0E83}, + {0x0E85, 0x0E85}, {0x0E8B, 0x0E8B}, {0x0EA4, 0x0EA4}, + {0x0EA6, 0x0EA6}, {0x0EBE, 0x0EBF}, {0x0EC5, 0x0EC5}, + {0x0EC7, 0x0EC7}, {0x0ECF, 0x0ECF}, {0x0EDA, 0x0EDB}, + {0x0EE0, 0x0EFF}, {0x0F48, 0x0F48}, {0x0F6D, 0x0F70}, + {0x0F98, 0x0F98}, {0x0FBD, 0x0FBD}, {0x0FCD, 0x0FCD}, + {0x0FDB, 0x0FFF}, {0x10C6, 0x10C6}, {0x10C8, 0x10CC}, + {0x10CE, 0x10CF}, {0x1249, 0x1249}, {0x124E, 0x124F}, + {0x1257, 0x1257}, {0x1259, 0x1259}, {0x125E, 0x125F}, + {0x1289, 0x1289}, {0x128E, 0x128F}, {0x12B1, 0x12B1}, + {0x12B6, 0x12B7}, {0x12BF, 0x12BF}, {0x12C1, 0x12C1}, + {0x12C6, 0x12C7}, {0x12D7, 0x12D7}, {0x1311, 0x1311}, + {0x1316, 0x1317}, {0x135B, 0x135C}, {0x137D, 0x137F}, + {0x139A, 0x139F}, {0x13F6, 0x13F7}, {0x13FE, 0x13FF}, + {0x169D, 0x169F}, {0x16F9, 0x16FF}, {0x1716, 0x171E}, + {0x1737, 0x173F}, {0x1754, 0x175F}, {0x176D, 0x176D}, + {0x1771, 0x1771}, {0x1774, 0x177F}, {0x17DE, 0x17DF}, + {0x17EA, 0x17EF}, {0x17FA, 0x17FF}, {0x181A, 0x181F}, + {0x1879, 0x187F}, {0x18AB, 0x18AF}, {0x18F6, 0x18FF}, + {0x191F, 0x191F}, {0x192C, 0x192F}, {0x193C, 0x193F}, + {0x1941, 0x1943}, {0x196E, 0x196F}, {0x1975, 0x197F}, + {0x19AC, 0x19AF}, {0x19CA, 0x19CF}, {0x19DB, 0x19DD}, + {0x1A1C, 0x1A1D}, {0x1A5F, 0x1A5F}, {0x1A7D, 0x1A7E}, + {0x1A8A, 0x1A8F}, {0x1A9A, 0x1A9F}, {0x1AAE, 0x1AAF}, + {0x1ACF, 0x1AFF}, {0x1B4D, 0x1B4F}, {0x1B7F, 0x1B7F}, + {0x1BF4, 0x1BFB}, {0x1C38, 0x1C3A}, {0x1C4A, 0x1C4C}, + {0x1C89, 0x1C8F}, {0x1CBB, 0x1CBC}, {0x1CC8, 0x1CCF}, + {0x1CFB, 0x1CFF}, {0x1F16, 0x1F17}, {0x1F1E, 0x1F1F}, + {0x1F46, 0x1F47}, {0x1F4E, 0x1F4F}, {0x1F58, 0x1F58}, + {0x1F5A, 0x1F5A}, {0x1F5C, 0x1F5C}, {0x1F5E, 0x1F5E}, + {0x1F7E, 0x1F7F}, {0x1FB5, 0x1FB5}, {0x1FC5, 0x1FC5}, + {0x1FD4, 0x1FD5}, {0x1FDC, 0x1FDC}, {0x1FF0, 0x1FF1}, + {0x1FF5, 0x1FF5}, {0x1FFF, 0x1FFF}, {0x2065, 0x2065}, + {0x2072, 0x2073}, {0x208F, 0x208F}, {0x209D, 0x209F}, + {0x20C1, 0x20CF}, {0x20F1, 0x20FF}, {0x218C, 0x218F}, + {0x2427, 0x243F}, {0x244B, 0x245F}, {0x2B74, 0x2B75}, + {0x2B96, 0x2B96}, {0x2CF4, 0x2CF8}, {0x2D26, 0x2D26}, + {0x2D28, 0x2D2C}, {0x2D2E, 0x2D2F}, {0x2D68, 0x2D6E}, + {0x2D71, 0x2D7E}, {0x2D97, 0x2D9F}, {0x2DA7, 0x2DA7}, + {0x2DAF, 0x2DAF}, {0x2DB7, 0x2DB7}, {0x2DBF, 0x2DBF}, + {0x2DC7, 0x2DC7}, {0x2DCF, 0x2DCF}, {0x2DD7, 0x2DD7}, + {0x2DDF, 0x2DDF}, {0x2E5E, 0x2E7F}, {0x2E9A, 0x2E9A}, + {0x2EF4, 0x2EFF}, {0x2FD6, 0x2FEF}, {0x3040, 0x3040}, + {0x3097, 0x3098}, {0x3100, 0x3104}, {0x3130, 0x3130}, + {0x318F, 0x318F}, {0x31E4, 0x31EE}, {0x321F, 0x321F}, + {0xA48D, 0xA48F}, {0xA4C7, 0xA4CF}, {0xA62C, 0xA63F}, + {0xA6F8, 0xA6FF}, {0xA7CB, 0xA7CF}, {0xA7D2, 0xA7D2}, + {0xA7D4, 0xA7D4}, {0xA7DA, 0xA7F1}, {0xA82D, 0xA82F}, + {0xA83A, 0xA83F}, {0xA878, 0xA87F}, {0xA8C6, 0xA8CD}, + {0xA8DA, 0xA8DF}, {0xA954, 0xA95E}, {0xA97D, 0xA97F}, + {0xA9CE, 0xA9CE}, {0xA9DA, 0xA9DD}, {0xA9FF, 0xA9FF}, + {0xAA37, 0xAA3F}, {0xAA4E, 0xAA4F}, {0xAA5A, 0xAA5B}, + {0xAAC3, 0xAADA}, {0xAAF7, 0xAB00}, {0xAB07, 0xAB08}, + {0xAB0F, 0xAB10}, {0xAB17, 0xAB1F}, {0xAB27, 0xAB27}, + {0xAB2F, 0xAB2F}, {0xAB6C, 0xAB6F}, {0xABEE, 0xABEF}, + {0xABFA, 0xABFF}, {0xD7A4, 0xD7AF}, {0xD7C7, 0xD7CA}, + {0xD7FC, 0xD7FF}, {0xFA6E, 0xFA6F}, {0xFADA, 0xFAFF}, + {0xFB07, 0xFB12}, {0xFB18, 0xFB1C}, {0xFB37, 0xFB37}, + {0xFB3D, 0xFB3D}, {0xFB3F, 0xFB3F}, {0xFB42, 0xFB42}, + {0xFB45, 0xFB45}, {0xFBC3, 0xFBD2}, {0xFD90, 0xFD91}, + {0xFDC8, 0xFDCE}, {0xFDD0, 0xFDEF}, {0xFE1A, 0xFE1F}, + {0xFE53, 0xFE53}, {0xFE67, 0xFE67}, {0xFE6C, 0xFE6F}, + {0xFE75, 0xFE75}, {0xFEFD, 0xFEFE}, {0xFF00, 0xFF00}, + {0xFFBF, 0xFFC1}, {0xFFC8, 0xFFC9}, {0xFFD0, 0xFFD1}, + {0xFFD8, 0xFFD9}, {0xFFDD, 0xFFDF}, {0xFFE7, 0xFFE7}, + {0xFFEF, 0xFFF8}, {0xFFFE, 0xFFFF}, {0x1000C, 0x1000C}, + {0x10027, 0x10027}, {0x1003B, 0x1003B}, {0x1003E, 0x1003E}, + {0x1004E, 0x1004F}, {0x1005E, 0x1007F}, {0x100FB, 0x100FF}, + {0x10103, 0x10106}, {0x10134, 0x10136}, {0x1018F, 0x1018F}, + {0x1019D, 0x1019F}, {0x101A1, 0x101CF}, {0x101FE, 0x1027F}, + {0x1029D, 0x1029F}, {0x102D1, 0x102DF}, {0x102FC, 0x102FF}, + {0x10324, 0x1032C}, {0x1034B, 0x1034F}, {0x1037B, 0x1037F}, + {0x1039E, 0x1039E}, {0x103C4, 0x103C7}, {0x103D6, 0x103FF}, + {0x1049E, 0x1049F}, {0x104AA, 0x104AF}, {0x104D4, 0x104D7}, + {0x104FC, 0x104FF}, {0x10528, 0x1052F}, {0x10564, 0x1056E}, + {0x1057B, 0x1057B}, {0x1058B, 0x1058B}, {0x10593, 0x10593}, + {0x10596, 0x10596}, {0x105A2, 0x105A2}, {0x105B2, 0x105B2}, + {0x105BA, 0x105BA}, {0x105BD, 0x105FF}, {0x10737, 0x1073F}, + {0x10756, 0x1075F}, {0x10768, 0x1077F}, {0x10786, 0x10786}, + {0x107B1, 0x107B1}, {0x107BB, 0x107FF}, {0x10806, 0x10807}, + {0x10809, 0x10809}, {0x10836, 0x10836}, {0x10839, 0x1083B}, + {0x1083D, 0x1083E}, {0x10856, 0x10856}, {0x1089F, 0x108A6}, + {0x108B0, 0x108DF}, {0x108F3, 0x108F3}, {0x108F6, 0x108FA}, + {0x1091C, 0x1091E}, {0x1093A, 0x1093E}, {0x10940, 0x1097F}, + {0x109B8, 0x109BB}, {0x109D0, 0x109D1}, {0x10A04, 0x10A04}, + {0x10A07, 0x10A0B}, {0x10A14, 0x10A14}, {0x10A18, 0x10A18}, + {0x10A36, 0x10A37}, {0x10A3B, 0x10A3E}, {0x10A49, 0x10A4F}, + {0x10A59, 0x10A5F}, {0x10AA0, 0x10ABF}, {0x10AE7, 0x10AEA}, + {0x10AF7, 0x10AFF}, {0x10B36, 0x10B38}, {0x10B56, 0x10B57}, + {0x10B73, 0x10B77}, {0x10B92, 0x10B98}, {0x10B9D, 0x10BA8}, + {0x10BB0, 0x10BFF}, {0x10C49, 0x10C7F}, {0x10CB3, 0x10CBF}, + {0x10CF3, 0x10CF9}, {0x10D28, 0x10D2F}, {0x10D3A, 0x10E5F}, + {0x10E7F, 0x10E7F}, {0x10EAA, 0x10EAA}, {0x10EAE, 0x10EAF}, + {0x10EB2, 0x10EFC}, {0x10F28, 0x10F2F}, {0x10F5A, 0x10F6F}, + {0x10F8A, 0x10FAF}, {0x10FCC, 0x10FDF}, {0x10FF7, 0x10FFF}, + {0x1104E, 0x11051}, {0x11076, 0x1107E}, {0x110C3, 0x110CC}, + {0x110CE, 0x110CF}, {0x110E9, 0x110EF}, {0x110FA, 0x110FF}, + {0x11135, 0x11135}, {0x11148, 0x1114F}, {0x11177, 0x1117F}, + {0x111E0, 0x111E0}, {0x111F5, 0x111FF}, {0x11212, 0x11212}, + {0x11242, 0x1127F}, {0x11287, 0x11287}, {0x11289, 0x11289}, + {0x1128E, 0x1128E}, {0x1129E, 0x1129E}, {0x112AA, 0x112AF}, + {0x112EB, 0x112EF}, {0x112FA, 0x112FF}, {0x11304, 0x11304}, + {0x1130D, 0x1130E}, {0x11311, 0x11312}, {0x11329, 0x11329}, + {0x11331, 0x11331}, {0x11334, 0x11334}, {0x1133A, 0x1133A}, + {0x11345, 0x11346}, {0x11349, 0x1134A}, {0x1134E, 0x1134F}, + {0x11351, 0x11356}, {0x11358, 0x1135C}, {0x11364, 0x11365}, + {0x1136D, 0x1136F}, {0x11375, 0x113FF}, {0x1145C, 0x1145C}, + {0x11462, 0x1147F}, {0x114C8, 0x114CF}, {0x114DA, 0x1157F}, + {0x115B6, 0x115B7}, {0x115DE, 0x115FF}, {0x11645, 0x1164F}, + {0x1165A, 0x1165F}, {0x1166D, 0x1167F}, {0x116BA, 0x116BF}, + {0x116CA, 0x116FF}, {0x1171B, 0x1171C}, {0x1172C, 0x1172F}, + {0x11747, 0x117FF}, {0x1183C, 0x1189F}, {0x118F3, 0x118FE}, + {0x11907, 0x11908}, {0x1190A, 0x1190B}, {0x11914, 0x11914}, + {0x11917, 0x11917}, {0x11936, 0x11936}, {0x11939, 0x1193A}, + {0x11947, 0x1194F}, {0x1195A, 0x1199F}, {0x119A8, 0x119A9}, + {0x119D8, 0x119D9}, {0x119E5, 0x119FF}, {0x11A48, 0x11A4F}, + {0x11AA3, 0x11AAF}, {0x11AF9, 0x11AFF}, {0x11B0A, 0x11BFF}, + {0x11C09, 0x11C09}, {0x11C37, 0x11C37}, {0x11C46, 0x11C4F}, + {0x11C6D, 0x11C6F}, {0x11C90, 0x11C91}, {0x11CA8, 0x11CA8}, + {0x11CB7, 0x11CFF}, {0x11D07, 0x11D07}, {0x11D0A, 0x11D0A}, + {0x11D37, 0x11D39}, {0x11D3B, 0x11D3B}, {0x11D3E, 0x11D3E}, + {0x11D48, 0x11D4F}, {0x11D5A, 0x11D5F}, {0x11D66, 0x11D66}, + {0x11D69, 0x11D69}, {0x11D8F, 0x11D8F}, {0x11D92, 0x11D92}, + {0x11D99, 0x11D9F}, {0x11DAA, 0x11EDF}, {0x11EF9, 0x11EFF}, + {0x11F11, 0x11F11}, {0x11F3B, 0x11F3D}, {0x11F5A, 0x11FAF}, + {0x11FB1, 0x11FBF}, {0x11FF2, 0x11FFE}, {0x1239A, 0x123FF}, + {0x1246F, 0x1246F}, {0x12475, 0x1247F}, {0x12544, 0x12F8F}, + {0x12FF3, 0x12FFF}, {0x13456, 0x143FF}, {0x14647, 0x167FF}, + {0x16A39, 0x16A3F}, {0x16A5F, 0x16A5F}, {0x16A6A, 0x16A6D}, + {0x16ABF, 0x16ABF}, {0x16ACA, 0x16ACF}, {0x16AEE, 0x16AEF}, + {0x16AF6, 0x16AFF}, {0x16B46, 0x16B4F}, {0x16B5A, 0x16B5A}, + {0x16B62, 0x16B62}, {0x16B78, 0x16B7C}, {0x16B90, 0x16E3F}, + {0x16E9B, 0x16EFF}, {0x16F4B, 0x16F4E}, {0x16F88, 0x16F8E}, + {0x16FA0, 0x16FDF}, {0x16FE5, 0x16FEF}, {0x16FF2, 0x16FFF}, + {0x187F8, 0x187FF}, {0x18CD6, 0x18CFF}, {0x18D09, 0x1AFEF}, + {0x1AFF4, 0x1AFF4}, {0x1AFFC, 0x1AFFC}, {0x1AFFF, 0x1AFFF}, + {0x1B123, 0x1B131}, {0x1B133, 0x1B14F}, {0x1B153, 0x1B154}, + {0x1B156, 0x1B163}, {0x1B168, 0x1B16F}, {0x1B2FC, 0x1BBFF}, + {0x1BC6B, 0x1BC6F}, {0x1BC7D, 0x1BC7F}, {0x1BC89, 0x1BC8F}, + {0x1BC9A, 0x1BC9B}, {0x1BCA4, 0x1CEFF}, {0x1CF2E, 0x1CF2F}, + {0x1CF47, 0x1CF4F}, {0x1CFC4, 0x1CFFF}, {0x1D0F6, 0x1D0FF}, + {0x1D127, 0x1D128}, {0x1D1EB, 0x1D1FF}, {0x1D246, 0x1D2BF}, + {0x1D2D4, 0x1D2DF}, {0x1D2F4, 0x1D2FF}, {0x1D357, 0x1D35F}, + {0x1D379, 0x1D3FF}, {0x1D455, 0x1D455}, {0x1D49D, 0x1D49D}, + {0x1D4A0, 0x1D4A1}, {0x1D4A3, 0x1D4A4}, {0x1D4A7, 0x1D4A8}, + {0x1D4AD, 0x1D4AD}, {0x1D4BA, 0x1D4BA}, {0x1D4BC, 0x1D4BC}, + {0x1D4C4, 0x1D4C4}, {0x1D506, 0x1D506}, {0x1D50B, 0x1D50C}, + {0x1D515, 0x1D515}, {0x1D51D, 0x1D51D}, {0x1D53A, 0x1D53A}, + {0x1D53F, 0x1D53F}, {0x1D545, 0x1D545}, {0x1D547, 0x1D549}, + {0x1D551, 0x1D551}, {0x1D6A6, 0x1D6A7}, {0x1D7CC, 0x1D7CD}, + {0x1DA8C, 0x1DA9A}, {0x1DAA0, 0x1DAA0}, {0x1DAB0, 0x1DEFF}, + {0x1DF1F, 0x1DF24}, {0x1DF2B, 0x1DFFF}, {0x1E007, 0x1E007}, + {0x1E019, 0x1E01A}, {0x1E022, 0x1E022}, {0x1E025, 0x1E025}, + {0x1E02B, 0x1E02F}, {0x1E06E, 0x1E08E}, {0x1E090, 0x1E0FF}, + {0x1E12D, 0x1E12F}, {0x1E13E, 0x1E13F}, {0x1E14A, 0x1E14D}, + {0x1E150, 0x1E28F}, {0x1E2AF, 0x1E2BF}, {0x1E2FA, 0x1E2FE}, + {0x1E300, 0x1E4CF}, {0x1E4FA, 0x1E7DF}, {0x1E7E7, 0x1E7E7}, + {0x1E7EC, 0x1E7EC}, {0x1E7EF, 0x1E7EF}, {0x1E7FF, 0x1E7FF}, + {0x1E8C5, 0x1E8C6}, {0x1E8D7, 0x1E8FF}, {0x1E94C, 0x1E94F}, + {0x1E95A, 0x1E95D}, {0x1E960, 0x1EC70}, {0x1ECB5, 0x1ED00}, + {0x1ED3E, 0x1EDFF}, {0x1EE04, 0x1EE04}, {0x1EE20, 0x1EE20}, + {0x1EE23, 0x1EE23}, {0x1EE25, 0x1EE26}, {0x1EE28, 0x1EE28}, + {0x1EE33, 0x1EE33}, {0x1EE38, 0x1EE38}, {0x1EE3A, 0x1EE3A}, + {0x1EE3C, 0x1EE41}, {0x1EE43, 0x1EE46}, {0x1EE48, 0x1EE48}, + {0x1EE4A, 0x1EE4A}, {0x1EE4C, 0x1EE4C}, {0x1EE50, 0x1EE50}, + {0x1EE53, 0x1EE53}, {0x1EE55, 0x1EE56}, {0x1EE58, 0x1EE58}, + {0x1EE5A, 0x1EE5A}, {0x1EE5C, 0x1EE5C}, {0x1EE5E, 0x1EE5E}, + {0x1EE60, 0x1EE60}, {0x1EE63, 0x1EE63}, {0x1EE65, 0x1EE66}, + {0x1EE6B, 0x1EE6B}, {0x1EE73, 0x1EE73}, {0x1EE78, 0x1EE78}, + {0x1EE7D, 0x1EE7D}, {0x1EE7F, 0x1EE7F}, {0x1EE8A, 0x1EE8A}, + {0x1EE9C, 0x1EEA0}, {0x1EEA4, 0x1EEA4}, {0x1EEAA, 0x1EEAA}, + {0x1EEBC, 0x1EEEF}, {0x1EEF2, 0x1EFFF}, {0x1F02C, 0x1F02F}, + {0x1F094, 0x1F09F}, {0x1F0AF, 0x1F0B0}, {0x1F0C0, 0x1F0C0}, + {0x1F0D0, 0x1F0D0}, {0x1F0F6, 0x1F0FF}, {0x1F1AE, 0x1F1E5}, + {0x1F203, 0x1F20F}, {0x1F23C, 0x1F23F}, {0x1F249, 0x1F24F}, + {0x1F252, 0x1F25F}, {0x1F266, 0x1F2FF}, {0x1F6D8, 0x1F6DB}, + {0x1F6ED, 0x1F6EF}, {0x1F6FD, 0x1F6FF}, {0x1F777, 0x1F77A}, + {0x1F7DA, 0x1F7DF}, {0x1F7EC, 0x1F7EF}, {0x1F7F1, 0x1F7FF}, + {0x1F80C, 0x1F80F}, {0x1F848, 0x1F84F}, {0x1F85A, 0x1F85F}, + {0x1F888, 0x1F88F}, {0x1F8AE, 0x1F8AF}, {0x1F8B2, 0x1F8FF}, + {0x1FA54, 0x1FA5F}, {0x1FA6E, 0x1FA6F}, {0x1FA7D, 0x1FA7F}, + {0x1FA89, 0x1FA8F}, {0x1FABE, 0x1FABE}, {0x1FAC6, 0x1FACD}, + {0x1FADC, 0x1FADF}, {0x1FAE9, 0x1FAEF}, {0x1FAF9, 0x1FAFF}, + {0x1FB93, 0x1FB93}, {0x1FBCB, 0x1FBEF}, {0x1FBFA, 0x1FFFF}, + {0x2A6E0, 0x2A6FF}, {0x2B73A, 0x2B73F}, {0x2B81E, 0x2B81F}, + {0x2CEA2, 0x2CEAF}, {0x2EBE1, 0x2EBEF}, {0x2EE5E, 0x2F7FF}, + {0x2FA1E, 0x2FFFF}, {0x3134B, 0x3134F}, {0x323B0, 0xE0000}, + {0xE0002, 0xE001F}, {0xE0080, 0xE00FF}, {0xE01F0, 0xEFFFF}, + {0xFFFFE, 0xFFFFF}, {0x10FFFE, 0x10FFFF}, + // General_Category: Co + {0xE000, 0xF8FF}, {0xF0000, 0xFFFFD}, {0x100000, 0x10FFFD}, + // General_Category: Cs + {0xD800, 0xDFFF}, + // General_Category: L + // General_Category: Ll + {0x0061, 0x007A}, {0x00B5, 0x00B5}, {0x00DF, 0x00F6}, + {0x00F8, 0x00FF}, {0x0101, 0x0101}, {0x0103, 0x0103}, + {0x0105, 0x0105}, {0x0107, 0x0107}, {0x0109, 0x0109}, + {0x010B, 0x010B}, {0x010D, 0x010D}, {0x010F, 0x010F}, + {0x0111, 0x0111}, {0x0113, 0x0113}, {0x0115, 0x0115}, + {0x0117, 0x0117}, {0x0119, 0x0119}, {0x011B, 0x011B}, + {0x011D, 0x011D}, {0x011F, 0x011F}, {0x0121, 0x0121}, + {0x0123, 0x0123}, {0x0125, 0x0125}, {0x0127, 0x0127}, + {0x0129, 0x0129}, {0x012B, 0x012B}, {0x012D, 0x012D}, + {0x012F, 0x012F}, {0x0131, 0x0131}, {0x0133, 0x0133}, + {0x0135, 0x0135}, {0x0137, 0x0138}, {0x013A, 0x013A}, + {0x013C, 0x013C}, {0x013E, 0x013E}, {0x0140, 0x0140}, + {0x0142, 0x0142}, {0x0144, 0x0144}, {0x0146, 0x0146}, + {0x0148, 0x0149}, {0x014B, 0x014B}, {0x014D, 0x014D}, + {0x014F, 0x014F}, {0x0151, 0x0151}, {0x0153, 0x0153}, + {0x0155, 0x0155}, {0x0157, 0x0157}, {0x0159, 0x0159}, + {0x015B, 0x015B}, {0x015D, 0x015D}, {0x015F, 0x015F}, + {0x0161, 0x0161}, {0x0163, 0x0163}, {0x0165, 0x0165}, + {0x0167, 0x0167}, {0x0169, 0x0169}, {0x016B, 0x016B}, + {0x016D, 0x016D}, {0x016F, 0x016F}, {0x0171, 0x0171}, + {0x0173, 0x0173}, {0x0175, 0x0175}, {0x0177, 0x0177}, + {0x017A, 0x017A}, {0x017C, 0x017C}, {0x017E, 0x0180}, + {0x0183, 0x0183}, {0x0185, 0x0185}, {0x0188, 0x0188}, + {0x018C, 0x018D}, {0x0192, 0x0192}, {0x0195, 0x0195}, + {0x0199, 0x019B}, {0x019E, 0x019E}, {0x01A1, 0x01A1}, + {0x01A3, 0x01A3}, {0x01A5, 0x01A5}, {0x01A8, 0x01A8}, + {0x01AA, 0x01AB}, {0x01AD, 0x01AD}, {0x01B0, 0x01B0}, + {0x01B4, 0x01B4}, {0x01B6, 0x01B6}, {0x01B9, 0x01BA}, + {0x01BD, 0x01BF}, {0x01C6, 0x01C6}, {0x01C9, 0x01C9}, + {0x01CC, 0x01CC}, {0x01CE, 0x01CE}, {0x01D0, 0x01D0}, + {0x01D2, 0x01D2}, {0x01D4, 0x01D4}, {0x01D6, 0x01D6}, + {0x01D8, 0x01D8}, {0x01DA, 0x01DA}, {0x01DC, 0x01DD}, + {0x01DF, 0x01DF}, {0x01E1, 0x01E1}, {0x01E3, 0x01E3}, + {0x01E5, 0x01E5}, {0x01E7, 0x01E7}, {0x01E9, 0x01E9}, + {0x01EB, 0x01EB}, {0x01ED, 0x01ED}, {0x01EF, 0x01F0}, + {0x01F3, 0x01F3}, {0x01F5, 0x01F5}, {0x01F9, 0x01F9}, + {0x01FB, 0x01FB}, {0x01FD, 0x01FD}, {0x01FF, 0x01FF}, + {0x0201, 0x0201}, {0x0203, 0x0203}, {0x0205, 0x0205}, + {0x0207, 0x0207}, {0x0209, 0x0209}, {0x020B, 0x020B}, + {0x020D, 0x020D}, {0x020F, 0x020F}, {0x0211, 0x0211}, + {0x0213, 0x0213}, {0x0215, 0x0215}, {0x0217, 0x0217}, + {0x0219, 0x0219}, {0x021B, 0x021B}, {0x021D, 0x021D}, + {0x021F, 0x021F}, {0x0221, 0x0221}, {0x0223, 0x0223}, + {0x0225, 0x0225}, {0x0227, 0x0227}, {0x0229, 0x0229}, + {0x022B, 0x022B}, {0x022D, 0x022D}, {0x022F, 0x022F}, + {0x0231, 0x0231}, {0x0233, 0x0239}, {0x023C, 0x023C}, + {0x023F, 0x0240}, {0x0242, 0x0242}, {0x0247, 0x0247}, + {0x0249, 0x0249}, {0x024B, 0x024B}, {0x024D, 0x024D}, + {0x024F, 0x0293}, {0x0295, 0x02AF}, {0x0371, 0x0371}, + {0x0373, 0x0373}, {0x0377, 0x0377}, {0x037B, 0x037D}, + {0x0390, 0x0390}, {0x03AC, 0x03CE}, {0x03D0, 0x03D1}, + {0x03D5, 0x03D7}, {0x03D9, 0x03D9}, {0x03DB, 0x03DB}, + {0x03DD, 0x03DD}, {0x03DF, 0x03DF}, {0x03E1, 0x03E1}, + {0x03E3, 0x03E3}, {0x03E5, 0x03E5}, {0x03E7, 0x03E7}, + {0x03E9, 0x03E9}, {0x03EB, 0x03EB}, {0x03ED, 0x03ED}, + {0x03EF, 0x03F3}, {0x03F5, 0x03F5}, {0x03F8, 0x03F8}, + {0x03FB, 0x03FC}, {0x0430, 0x045F}, {0x0461, 0x0461}, + {0x0463, 0x0463}, {0x0465, 0x0465}, {0x0467, 0x0467}, + {0x0469, 0x0469}, {0x046B, 0x046B}, {0x046D, 0x046D}, + {0x046F, 0x046F}, {0x0471, 0x0471}, {0x0473, 0x0473}, + {0x0475, 0x0475}, {0x0477, 0x0477}, {0x0479, 0x0479}, + {0x047B, 0x047B}, {0x047D, 0x047D}, {0x047F, 0x047F}, + {0x0481, 0x0481}, {0x048B, 0x048B}, {0x048D, 0x048D}, + {0x048F, 0x048F}, {0x0491, 0x0491}, {0x0493, 0x0493}, + {0x0495, 0x0495}, {0x0497, 0x0497}, {0x0499, 0x0499}, + {0x049B, 0x049B}, {0x049D, 0x049D}, {0x049F, 0x049F}, + {0x04A1, 0x04A1}, {0x04A3, 0x04A3}, {0x04A5, 0x04A5}, + {0x04A7, 0x04A7}, {0x04A9, 0x04A9}, {0x04AB, 0x04AB}, + {0x04AD, 0x04AD}, {0x04AF, 0x04AF}, {0x04B1, 0x04B1}, + {0x04B3, 0x04B3}, {0x04B5, 0x04B5}, {0x04B7, 0x04B7}, + {0x04B9, 0x04B9}, {0x04BB, 0x04BB}, {0x04BD, 0x04BD}, + {0x04BF, 0x04BF}, {0x04C2, 0x04C2}, {0x04C4, 0x04C4}, + {0x04C6, 0x04C6}, {0x04C8, 0x04C8}, {0x04CA, 0x04CA}, + {0x04CC, 0x04CC}, {0x04CE, 0x04CF}, {0x04D1, 0x04D1}, + {0x04D3, 0x04D3}, {0x04D5, 0x04D5}, {0x04D7, 0x04D7}, + {0x04D9, 0x04D9}, {0x04DB, 0x04DB}, {0x04DD, 0x04DD}, + {0x04DF, 0x04DF}, {0x04E1, 0x04E1}, {0x04E3, 0x04E3}, + {0x04E5, 0x04E5}, {0x04E7, 0x04E7}, {0x04E9, 0x04E9}, + {0x04EB, 0x04EB}, {0x04ED, 0x04ED}, {0x04EF, 0x04EF}, + {0x04F1, 0x04F1}, {0x04F3, 0x04F3}, {0x04F5, 0x04F5}, + {0x04F7, 0x04F7}, {0x04F9, 0x04F9}, {0x04FB, 0x04FB}, + {0x04FD, 0x04FD}, {0x04FF, 0x04FF}, {0x0501, 0x0501}, + {0x0503, 0x0503}, {0x0505, 0x0505}, {0x0507, 0x0507}, + {0x0509, 0x0509}, {0x050B, 0x050B}, {0x050D, 0x050D}, + {0x050F, 0x050F}, {0x0511, 0x0511}, {0x0513, 0x0513}, + {0x0515, 0x0515}, {0x0517, 0x0517}, {0x0519, 0x0519}, + {0x051B, 0x051B}, {0x051D, 0x051D}, {0x051F, 0x051F}, + {0x0521, 0x0521}, {0x0523, 0x0523}, {0x0525, 0x0525}, + {0x0527, 0x0527}, {0x0529, 0x0529}, {0x052B, 0x052B}, + {0x052D, 0x052D}, {0x052F, 0x052F}, {0x0560, 0x0588}, + {0x10D0, 0x10FA}, {0x10FD, 0x10FF}, {0x13F8, 0x13FD}, + {0x1C80, 0x1C88}, {0x1D00, 0x1D2B}, {0x1D6B, 0x1D77}, + {0x1D79, 0x1D9A}, {0x1E01, 0x1E01}, {0x1E03, 0x1E03}, + {0x1E05, 0x1E05}, {0x1E07, 0x1E07}, {0x1E09, 0x1E09}, + {0x1E0B, 0x1E0B}, {0x1E0D, 0x1E0D}, {0x1E0F, 0x1E0F}, + {0x1E11, 0x1E11}, {0x1E13, 0x1E13}, {0x1E15, 0x1E15}, + {0x1E17, 0x1E17}, {0x1E19, 0x1E19}, {0x1E1B, 0x1E1B}, + {0x1E1D, 0x1E1D}, {0x1E1F, 0x1E1F}, {0x1E21, 0x1E21}, + {0x1E23, 0x1E23}, {0x1E25, 0x1E25}, {0x1E27, 0x1E27}, + {0x1E29, 0x1E29}, {0x1E2B, 0x1E2B}, {0x1E2D, 0x1E2D}, + {0x1E2F, 0x1E2F}, {0x1E31, 0x1E31}, {0x1E33, 0x1E33}, + {0x1E35, 0x1E35}, {0x1E37, 0x1E37}, {0x1E39, 0x1E39}, + {0x1E3B, 0x1E3B}, {0x1E3D, 0x1E3D}, {0x1E3F, 0x1E3F}, + {0x1E41, 0x1E41}, {0x1E43, 0x1E43}, {0x1E45, 0x1E45}, + {0x1E47, 0x1E47}, {0x1E49, 0x1E49}, {0x1E4B, 0x1E4B}, + {0x1E4D, 0x1E4D}, {0x1E4F, 0x1E4F}, {0x1E51, 0x1E51}, + {0x1E53, 0x1E53}, {0x1E55, 0x1E55}, {0x1E57, 0x1E57}, + {0x1E59, 0x1E59}, {0x1E5B, 0x1E5B}, {0x1E5D, 0x1E5D}, + {0x1E5F, 0x1E5F}, {0x1E61, 0x1E61}, {0x1E63, 0x1E63}, + {0x1E65, 0x1E65}, {0x1E67, 0x1E67}, {0x1E69, 0x1E69}, + {0x1E6B, 0x1E6B}, {0x1E6D, 0x1E6D}, {0x1E6F, 0x1E6F}, + {0x1E71, 0x1E71}, {0x1E73, 0x1E73}, {0x1E75, 0x1E75}, + {0x1E77, 0x1E77}, {0x1E79, 0x1E79}, {0x1E7B, 0x1E7B}, + {0x1E7D, 0x1E7D}, {0x1E7F, 0x1E7F}, {0x1E81, 0x1E81}, + {0x1E83, 0x1E83}, {0x1E85, 0x1E85}, {0x1E87, 0x1E87}, + {0x1E89, 0x1E89}, {0x1E8B, 0x1E8B}, {0x1E8D, 0x1E8D}, + {0x1E8F, 0x1E8F}, {0x1E91, 0x1E91}, {0x1E93, 0x1E93}, + {0x1E95, 0x1E9D}, {0x1E9F, 0x1E9F}, {0x1EA1, 0x1EA1}, + {0x1EA3, 0x1EA3}, {0x1EA5, 0x1EA5}, {0x1EA7, 0x1EA7}, + {0x1EA9, 0x1EA9}, {0x1EAB, 0x1EAB}, {0x1EAD, 0x1EAD}, + {0x1EAF, 0x1EAF}, {0x1EB1, 0x1EB1}, {0x1EB3, 0x1EB3}, + {0x1EB5, 0x1EB5}, {0x1EB7, 0x1EB7}, {0x1EB9, 0x1EB9}, + {0x1EBB, 0x1EBB}, {0x1EBD, 0x1EBD}, {0x1EBF, 0x1EBF}, + {0x1EC1, 0x1EC1}, {0x1EC3, 0x1EC3}, {0x1EC5, 0x1EC5}, + {0x1EC7, 0x1EC7}, {0x1EC9, 0x1EC9}, {0x1ECB, 0x1ECB}, + {0x1ECD, 0x1ECD}, {0x1ECF, 0x1ECF}, {0x1ED1, 0x1ED1}, + {0x1ED3, 0x1ED3}, {0x1ED5, 0x1ED5}, {0x1ED7, 0x1ED7}, + {0x1ED9, 0x1ED9}, {0x1EDB, 0x1EDB}, {0x1EDD, 0x1EDD}, + {0x1EDF, 0x1EDF}, {0x1EE1, 0x1EE1}, {0x1EE3, 0x1EE3}, + {0x1EE5, 0x1EE5}, {0x1EE7, 0x1EE7}, {0x1EE9, 0x1EE9}, + {0x1EEB, 0x1EEB}, {0x1EED, 0x1EED}, {0x1EEF, 0x1EEF}, + {0x1EF1, 0x1EF1}, {0x1EF3, 0x1EF3}, {0x1EF5, 0x1EF5}, + {0x1EF7, 0x1EF7}, {0x1EF9, 0x1EF9}, {0x1EFB, 0x1EFB}, + {0x1EFD, 0x1EFD}, {0x1EFF, 0x1F07}, {0x1F10, 0x1F15}, + {0x1F20, 0x1F27}, {0x1F30, 0x1F37}, {0x1F40, 0x1F45}, + {0x1F50, 0x1F57}, {0x1F60, 0x1F67}, {0x1F70, 0x1F7D}, + {0x1F80, 0x1F87}, {0x1F90, 0x1F97}, {0x1FA0, 0x1FA7}, + {0x1FB0, 0x1FB4}, {0x1FB6, 0x1FB7}, {0x1FBE, 0x1FBE}, + {0x1FC2, 0x1FC4}, {0x1FC6, 0x1FC7}, {0x1FD0, 0x1FD3}, + {0x1FD6, 0x1FD7}, {0x1FE0, 0x1FE7}, {0x1FF2, 0x1FF4}, + {0x1FF6, 0x1FF7}, {0x210A, 0x210A}, {0x210E, 0x210F}, + {0x2113, 0x2113}, {0x212F, 0x212F}, {0x2134, 0x2134}, + {0x2139, 0x2139}, {0x213C, 0x213D}, {0x2146, 0x2149}, + {0x214E, 0x214E}, {0x2184, 0x2184}, {0x2C30, 0x2C5F}, + {0x2C61, 0x2C61}, {0x2C65, 0x2C66}, {0x2C68, 0x2C68}, + {0x2C6A, 0x2C6A}, {0x2C6C, 0x2C6C}, {0x2C71, 0x2C71}, + {0x2C73, 0x2C74}, {0x2C76, 0x2C7B}, {0x2C81, 0x2C81}, + {0x2C83, 0x2C83}, {0x2C85, 0x2C85}, {0x2C87, 0x2C87}, + {0x2C89, 0x2C89}, {0x2C8B, 0x2C8B}, {0x2C8D, 0x2C8D}, + {0x2C8F, 0x2C8F}, {0x2C91, 0x2C91}, {0x2C93, 0x2C93}, + {0x2C95, 0x2C95}, {0x2C97, 0x2C97}, {0x2C99, 0x2C99}, + {0x2C9B, 0x2C9B}, {0x2C9D, 0x2C9D}, {0x2C9F, 0x2C9F}, + {0x2CA1, 0x2CA1}, {0x2CA3, 0x2CA3}, {0x2CA5, 0x2CA5}, + {0x2CA7, 0x2CA7}, {0x2CA9, 0x2CA9}, {0x2CAB, 0x2CAB}, + {0x2CAD, 0x2CAD}, {0x2CAF, 0x2CAF}, {0x2CB1, 0x2CB1}, + {0x2CB3, 0x2CB3}, {0x2CB5, 0x2CB5}, {0x2CB7, 0x2CB7}, + {0x2CB9, 0x2CB9}, {0x2CBB, 0x2CBB}, {0x2CBD, 0x2CBD}, + {0x2CBF, 0x2CBF}, {0x2CC1, 0x2CC1}, {0x2CC3, 0x2CC3}, + {0x2CC5, 0x2CC5}, {0x2CC7, 0x2CC7}, {0x2CC9, 0x2CC9}, + {0x2CCB, 0x2CCB}, {0x2CCD, 0x2CCD}, {0x2CCF, 0x2CCF}, + {0x2CD1, 0x2CD1}, {0x2CD3, 0x2CD3}, {0x2CD5, 0x2CD5}, + {0x2CD7, 0x2CD7}, {0x2CD9, 0x2CD9}, {0x2CDB, 0x2CDB}, + {0x2CDD, 0x2CDD}, {0x2CDF, 0x2CDF}, {0x2CE1, 0x2CE1}, + {0x2CE3, 0x2CE4}, {0x2CEC, 0x2CEC}, {0x2CEE, 0x2CEE}, + {0x2CF3, 0x2CF3}, {0x2D00, 0x2D25}, {0x2D27, 0x2D27}, + {0x2D2D, 0x2D2D}, {0xA641, 0xA641}, {0xA643, 0xA643}, + {0xA645, 0xA645}, {0xA647, 0xA647}, {0xA649, 0xA649}, + {0xA64B, 0xA64B}, {0xA64D, 0xA64D}, {0xA64F, 0xA64F}, + {0xA651, 0xA651}, {0xA653, 0xA653}, {0xA655, 0xA655}, + {0xA657, 0xA657}, {0xA659, 0xA659}, {0xA65B, 0xA65B}, + {0xA65D, 0xA65D}, {0xA65F, 0xA65F}, {0xA661, 0xA661}, + {0xA663, 0xA663}, {0xA665, 0xA665}, {0xA667, 0xA667}, + {0xA669, 0xA669}, {0xA66B, 0xA66B}, {0xA66D, 0xA66D}, + {0xA681, 0xA681}, {0xA683, 0xA683}, {0xA685, 0xA685}, + {0xA687, 0xA687}, {0xA689, 0xA689}, {0xA68B, 0xA68B}, + {0xA68D, 0xA68D}, {0xA68F, 0xA68F}, {0xA691, 0xA691}, + {0xA693, 0xA693}, {0xA695, 0xA695}, {0xA697, 0xA697}, + {0xA699, 0xA699}, {0xA69B, 0xA69B}, {0xA723, 0xA723}, + {0xA725, 0xA725}, {0xA727, 0xA727}, {0xA729, 0xA729}, + {0xA72B, 0xA72B}, {0xA72D, 0xA72D}, {0xA72F, 0xA731}, + {0xA733, 0xA733}, {0xA735, 0xA735}, {0xA737, 0xA737}, + {0xA739, 0xA739}, {0xA73B, 0xA73B}, {0xA73D, 0xA73D}, + {0xA73F, 0xA73F}, {0xA741, 0xA741}, {0xA743, 0xA743}, + {0xA745, 0xA745}, {0xA747, 0xA747}, {0xA749, 0xA749}, + {0xA74B, 0xA74B}, {0xA74D, 0xA74D}, {0xA74F, 0xA74F}, + {0xA751, 0xA751}, {0xA753, 0xA753}, {0xA755, 0xA755}, + {0xA757, 0xA757}, {0xA759, 0xA759}, {0xA75B, 0xA75B}, + {0xA75D, 0xA75D}, {0xA75F, 0xA75F}, {0xA761, 0xA761}, + {0xA763, 0xA763}, {0xA765, 0xA765}, {0xA767, 0xA767}, + {0xA769, 0xA769}, {0xA76B, 0xA76B}, {0xA76D, 0xA76D}, + {0xA76F, 0xA76F}, {0xA771, 0xA778}, {0xA77A, 0xA77A}, + {0xA77C, 0xA77C}, {0xA77F, 0xA77F}, {0xA781, 0xA781}, + {0xA783, 0xA783}, {0xA785, 0xA785}, {0xA787, 0xA787}, + {0xA78C, 0xA78C}, {0xA78E, 0xA78E}, {0xA791, 0xA791}, + {0xA793, 0xA795}, {0xA797, 0xA797}, {0xA799, 0xA799}, + {0xA79B, 0xA79B}, {0xA79D, 0xA79D}, {0xA79F, 0xA79F}, + {0xA7A1, 0xA7A1}, {0xA7A3, 0xA7A3}, {0xA7A5, 0xA7A5}, + {0xA7A7, 0xA7A7}, {0xA7A9, 0xA7A9}, {0xA7AF, 0xA7AF}, + {0xA7B5, 0xA7B5}, {0xA7B7, 0xA7B7}, {0xA7B9, 0xA7B9}, + {0xA7BB, 0xA7BB}, {0xA7BD, 0xA7BD}, {0xA7BF, 0xA7BF}, + {0xA7C1, 0xA7C1}, {0xA7C3, 0xA7C3}, {0xA7C8, 0xA7C8}, + {0xA7CA, 0xA7CA}, {0xA7D1, 0xA7D1}, {0xA7D3, 0xA7D3}, + {0xA7D5, 0xA7D5}, {0xA7D7, 0xA7D7}, {0xA7D9, 0xA7D9}, + {0xA7F6, 0xA7F6}, {0xA7FA, 0xA7FA}, {0xAB30, 0xAB5A}, + {0xAB60, 0xAB68}, {0xAB70, 0xABBF}, {0xFB00, 0xFB06}, + {0xFB13, 0xFB17}, {0xFF41, 0xFF5A}, {0x10428, 0x1044F}, + {0x104D8, 0x104FB}, {0x10597, 0x105A1}, {0x105A3, 0x105B1}, + {0x105B3, 0x105B9}, {0x105BB, 0x105BC}, {0x10CC0, 0x10CF2}, + {0x118C0, 0x118DF}, {0x16E60, 0x16E7F}, {0x1D41A, 0x1D433}, + {0x1D44E, 0x1D454}, {0x1D456, 0x1D467}, {0x1D482, 0x1D49B}, + {0x1D4B6, 0x1D4B9}, {0x1D4BB, 0x1D4BB}, {0x1D4BD, 0x1D4C3}, + {0x1D4C5, 0x1D4CF}, {0x1D4EA, 0x1D503}, {0x1D51E, 0x1D537}, + {0x1D552, 0x1D56B}, {0x1D586, 0x1D59F}, {0x1D5BA, 0x1D5D3}, + {0x1D5EE, 0x1D607}, {0x1D622, 0x1D63B}, {0x1D656, 0x1D66F}, + {0x1D68A, 0x1D6A5}, {0x1D6C2, 0x1D6DA}, {0x1D6DC, 0x1D6E1}, + {0x1D6FC, 0x1D714}, {0x1D716, 0x1D71B}, {0x1D736, 0x1D74E}, + {0x1D750, 0x1D755}, {0x1D770, 0x1D788}, {0x1D78A, 0x1D78F}, + {0x1D7AA, 0x1D7C2}, {0x1D7C4, 0x1D7C9}, {0x1D7CB, 0x1D7CB}, + {0x1DF00, 0x1DF09}, {0x1DF0B, 0x1DF1E}, {0x1DF25, 0x1DF2A}, + {0x1E922, 0x1E943}, + // General_Category: Lt + {0x01C5, 0x01C5}, {0x01C8, 0x01C8}, {0x01CB, 0x01CB}, + {0x01F2, 0x01F2}, {0x1F88, 0x1F8F}, {0x1F98, 0x1F9F}, + {0x1FA8, 0x1FAF}, {0x1FBC, 0x1FBC}, {0x1FCC, 0x1FCC}, + {0x1FFC, 0x1FFC}, + // General_Category: Lu + {0x0041, 0x005A}, {0x00C0, 0x00D6}, {0x00D8, 0x00DE}, + {0x0100, 0x0100}, {0x0102, 0x0102}, {0x0104, 0x0104}, + {0x0106, 0x0106}, {0x0108, 0x0108}, {0x010A, 0x010A}, + {0x010C, 0x010C}, {0x010E, 0x010E}, {0x0110, 0x0110}, + {0x0112, 0x0112}, {0x0114, 0x0114}, {0x0116, 0x0116}, + {0x0118, 0x0118}, {0x011A, 0x011A}, {0x011C, 0x011C}, + {0x011E, 0x011E}, {0x0120, 0x0120}, {0x0122, 0x0122}, + {0x0124, 0x0124}, {0x0126, 0x0126}, {0x0128, 0x0128}, + {0x012A, 0x012A}, {0x012C, 0x012C}, {0x012E, 0x012E}, + {0x0130, 0x0130}, {0x0132, 0x0132}, {0x0134, 0x0134}, + {0x0136, 0x0136}, {0x0139, 0x0139}, {0x013B, 0x013B}, + {0x013D, 0x013D}, {0x013F, 0x013F}, {0x0141, 0x0141}, + {0x0143, 0x0143}, {0x0145, 0x0145}, {0x0147, 0x0147}, + {0x014A, 0x014A}, {0x014C, 0x014C}, {0x014E, 0x014E}, + {0x0150, 0x0150}, {0x0152, 0x0152}, {0x0154, 0x0154}, + {0x0156, 0x0156}, {0x0158, 0x0158}, {0x015A, 0x015A}, + {0x015C, 0x015C}, {0x015E, 0x015E}, {0x0160, 0x0160}, + {0x0162, 0x0162}, {0x0164, 0x0164}, {0x0166, 0x0166}, + {0x0168, 0x0168}, {0x016A, 0x016A}, {0x016C, 0x016C}, + {0x016E, 0x016E}, {0x0170, 0x0170}, {0x0172, 0x0172}, + {0x0174, 0x0174}, {0x0176, 0x0176}, {0x0178, 0x0179}, + {0x017B, 0x017B}, {0x017D, 0x017D}, {0x0181, 0x0182}, + {0x0184, 0x0184}, {0x0186, 0x0187}, {0x0189, 0x018B}, + {0x018E, 0x0191}, {0x0193, 0x0194}, {0x0196, 0x0198}, + {0x019C, 0x019D}, {0x019F, 0x01A0}, {0x01A2, 0x01A2}, + {0x01A4, 0x01A4}, {0x01A6, 0x01A7}, {0x01A9, 0x01A9}, + {0x01AC, 0x01AC}, {0x01AE, 0x01AF}, {0x01B1, 0x01B3}, + {0x01B5, 0x01B5}, {0x01B7, 0x01B8}, {0x01BC, 0x01BC}, + {0x01C4, 0x01C4}, {0x01C7, 0x01C7}, {0x01CA, 0x01CA}, + {0x01CD, 0x01CD}, {0x01CF, 0x01CF}, {0x01D1, 0x01D1}, + {0x01D3, 0x01D3}, {0x01D5, 0x01D5}, {0x01D7, 0x01D7}, + {0x01D9, 0x01D9}, {0x01DB, 0x01DB}, {0x01DE, 0x01DE}, + {0x01E0, 0x01E0}, {0x01E2, 0x01E2}, {0x01E4, 0x01E4}, + {0x01E6, 0x01E6}, {0x01E8, 0x01E8}, {0x01EA, 0x01EA}, + {0x01EC, 0x01EC}, {0x01EE, 0x01EE}, {0x01F1, 0x01F1}, + {0x01F4, 0x01F4}, {0x01F6, 0x01F8}, {0x01FA, 0x01FA}, + {0x01FC, 0x01FC}, {0x01FE, 0x01FE}, {0x0200, 0x0200}, + {0x0202, 0x0202}, {0x0204, 0x0204}, {0x0206, 0x0206}, + {0x0208, 0x0208}, {0x020A, 0x020A}, {0x020C, 0x020C}, + {0x020E, 0x020E}, {0x0210, 0x0210}, {0x0212, 0x0212}, + {0x0214, 0x0214}, {0x0216, 0x0216}, {0x0218, 0x0218}, + {0x021A, 0x021A}, {0x021C, 0x021C}, {0x021E, 0x021E}, + {0x0220, 0x0220}, {0x0222, 0x0222}, {0x0224, 0x0224}, + {0x0226, 0x0226}, {0x0228, 0x0228}, {0x022A, 0x022A}, + {0x022C, 0x022C}, {0x022E, 0x022E}, {0x0230, 0x0230}, + {0x0232, 0x0232}, {0x023A, 0x023B}, {0x023D, 0x023E}, + {0x0241, 0x0241}, {0x0243, 0x0246}, {0x0248, 0x0248}, + {0x024A, 0x024A}, {0x024C, 0x024C}, {0x024E, 0x024E}, + {0x0370, 0x0370}, {0x0372, 0x0372}, {0x0376, 0x0376}, + {0x037F, 0x037F}, {0x0386, 0x0386}, {0x0388, 0x038A}, + {0x038C, 0x038C}, {0x038E, 0x038F}, {0x0391, 0x03A1}, + {0x03A3, 0x03AB}, {0x03CF, 0x03CF}, {0x03D2, 0x03D4}, + {0x03D8, 0x03D8}, {0x03DA, 0x03DA}, {0x03DC, 0x03DC}, + {0x03DE, 0x03DE}, {0x03E0, 0x03E0}, {0x03E2, 0x03E2}, + {0x03E4, 0x03E4}, {0x03E6, 0x03E6}, {0x03E8, 0x03E8}, + {0x03EA, 0x03EA}, {0x03EC, 0x03EC}, {0x03EE, 0x03EE}, + {0x03F4, 0x03F4}, {0x03F7, 0x03F7}, {0x03F9, 0x03FA}, + {0x03FD, 0x042F}, {0x0460, 0x0460}, {0x0462, 0x0462}, + {0x0464, 0x0464}, {0x0466, 0x0466}, {0x0468, 0x0468}, + {0x046A, 0x046A}, {0x046C, 0x046C}, {0x046E, 0x046E}, + {0x0470, 0x0470}, {0x0472, 0x0472}, {0x0474, 0x0474}, + {0x0476, 0x0476}, {0x0478, 0x0478}, {0x047A, 0x047A}, + {0x047C, 0x047C}, {0x047E, 0x047E}, {0x0480, 0x0480}, + {0x048A, 0x048A}, {0x048C, 0x048C}, {0x048E, 0x048E}, + {0x0490, 0x0490}, {0x0492, 0x0492}, {0x0494, 0x0494}, + {0x0496, 0x0496}, {0x0498, 0x0498}, {0x049A, 0x049A}, + {0x049C, 0x049C}, {0x049E, 0x049E}, {0x04A0, 0x04A0}, + {0x04A2, 0x04A2}, {0x04A4, 0x04A4}, {0x04A6, 0x04A6}, + {0x04A8, 0x04A8}, {0x04AA, 0x04AA}, {0x04AC, 0x04AC}, + {0x04AE, 0x04AE}, {0x04B0, 0x04B0}, {0x04B2, 0x04B2}, + {0x04B4, 0x04B4}, {0x04B6, 0x04B6}, {0x04B8, 0x04B8}, + {0x04BA, 0x04BA}, {0x04BC, 0x04BC}, {0x04BE, 0x04BE}, + {0x04C0, 0x04C1}, {0x04C3, 0x04C3}, {0x04C5, 0x04C5}, + {0x04C7, 0x04C7}, {0x04C9, 0x04C9}, {0x04CB, 0x04CB}, + {0x04CD, 0x04CD}, {0x04D0, 0x04D0}, {0x04D2, 0x04D2}, + {0x04D4, 0x04D4}, {0x04D6, 0x04D6}, {0x04D8, 0x04D8}, + {0x04DA, 0x04DA}, {0x04DC, 0x04DC}, {0x04DE, 0x04DE}, + {0x04E0, 0x04E0}, {0x04E2, 0x04E2}, {0x04E4, 0x04E4}, + {0x04E6, 0x04E6}, {0x04E8, 0x04E8}, {0x04EA, 0x04EA}, + {0x04EC, 0x04EC}, {0x04EE, 0x04EE}, {0x04F0, 0x04F0}, + {0x04F2, 0x04F2}, {0x04F4, 0x04F4}, {0x04F6, 0x04F6}, + {0x04F8, 0x04F8}, {0x04FA, 0x04FA}, {0x04FC, 0x04FC}, + {0x04FE, 0x04FE}, {0x0500, 0x0500}, {0x0502, 0x0502}, + {0x0504, 0x0504}, {0x0506, 0x0506}, {0x0508, 0x0508}, + {0x050A, 0x050A}, {0x050C, 0x050C}, {0x050E, 0x050E}, + {0x0510, 0x0510}, {0x0512, 0x0512}, {0x0514, 0x0514}, + {0x0516, 0x0516}, {0x0518, 0x0518}, {0x051A, 0x051A}, + {0x051C, 0x051C}, {0x051E, 0x051E}, {0x0520, 0x0520}, + {0x0522, 0x0522}, {0x0524, 0x0524}, {0x0526, 0x0526}, + {0x0528, 0x0528}, {0x052A, 0x052A}, {0x052C, 0x052C}, + {0x052E, 0x052E}, {0x0531, 0x0556}, {0x10A0, 0x10C5}, + {0x10C7, 0x10C7}, {0x10CD, 0x10CD}, {0x13A0, 0x13F5}, + {0x1C90, 0x1CBA}, {0x1CBD, 0x1CBF}, {0x1E00, 0x1E00}, + {0x1E02, 0x1E02}, {0x1E04, 0x1E04}, {0x1E06, 0x1E06}, + {0x1E08, 0x1E08}, {0x1E0A, 0x1E0A}, {0x1E0C, 0x1E0C}, + {0x1E0E, 0x1E0E}, {0x1E10, 0x1E10}, {0x1E12, 0x1E12}, + {0x1E14, 0x1E14}, {0x1E16, 0x1E16}, {0x1E18, 0x1E18}, + {0x1E1A, 0x1E1A}, {0x1E1C, 0x1E1C}, {0x1E1E, 0x1E1E}, + {0x1E20, 0x1E20}, {0x1E22, 0x1E22}, {0x1E24, 0x1E24}, + {0x1E26, 0x1E26}, {0x1E28, 0x1E28}, {0x1E2A, 0x1E2A}, + {0x1E2C, 0x1E2C}, {0x1E2E, 0x1E2E}, {0x1E30, 0x1E30}, + {0x1E32, 0x1E32}, {0x1E34, 0x1E34}, {0x1E36, 0x1E36}, + {0x1E38, 0x1E38}, {0x1E3A, 0x1E3A}, {0x1E3C, 0x1E3C}, + {0x1E3E, 0x1E3E}, {0x1E40, 0x1E40}, {0x1E42, 0x1E42}, + {0x1E44, 0x1E44}, {0x1E46, 0x1E46}, {0x1E48, 0x1E48}, + {0x1E4A, 0x1E4A}, {0x1E4C, 0x1E4C}, {0x1E4E, 0x1E4E}, + {0x1E50, 0x1E50}, {0x1E52, 0x1E52}, {0x1E54, 0x1E54}, + {0x1E56, 0x1E56}, {0x1E58, 0x1E58}, {0x1E5A, 0x1E5A}, + {0x1E5C, 0x1E5C}, {0x1E5E, 0x1E5E}, {0x1E60, 0x1E60}, + {0x1E62, 0x1E62}, {0x1E64, 0x1E64}, {0x1E66, 0x1E66}, + {0x1E68, 0x1E68}, {0x1E6A, 0x1E6A}, {0x1E6C, 0x1E6C}, + {0x1E6E, 0x1E6E}, {0x1E70, 0x1E70}, {0x1E72, 0x1E72}, + {0x1E74, 0x1E74}, {0x1E76, 0x1E76}, {0x1E78, 0x1E78}, + {0x1E7A, 0x1E7A}, {0x1E7C, 0x1E7C}, {0x1E7E, 0x1E7E}, + {0x1E80, 0x1E80}, {0x1E82, 0x1E82}, {0x1E84, 0x1E84}, + {0x1E86, 0x1E86}, {0x1E88, 0x1E88}, {0x1E8A, 0x1E8A}, + {0x1E8C, 0x1E8C}, {0x1E8E, 0x1E8E}, {0x1E90, 0x1E90}, + {0x1E92, 0x1E92}, {0x1E94, 0x1E94}, {0x1E9E, 0x1E9E}, + {0x1EA0, 0x1EA0}, {0x1EA2, 0x1EA2}, {0x1EA4, 0x1EA4}, + {0x1EA6, 0x1EA6}, {0x1EA8, 0x1EA8}, {0x1EAA, 0x1EAA}, + {0x1EAC, 0x1EAC}, {0x1EAE, 0x1EAE}, {0x1EB0, 0x1EB0}, + {0x1EB2, 0x1EB2}, {0x1EB4, 0x1EB4}, {0x1EB6, 0x1EB6}, + {0x1EB8, 0x1EB8}, {0x1EBA, 0x1EBA}, {0x1EBC, 0x1EBC}, + {0x1EBE, 0x1EBE}, {0x1EC0, 0x1EC0}, {0x1EC2, 0x1EC2}, + {0x1EC4, 0x1EC4}, {0x1EC6, 0x1EC6}, {0x1EC8, 0x1EC8}, + {0x1ECA, 0x1ECA}, {0x1ECC, 0x1ECC}, {0x1ECE, 0x1ECE}, + {0x1ED0, 0x1ED0}, {0x1ED2, 0x1ED2}, {0x1ED4, 0x1ED4}, + {0x1ED6, 0x1ED6}, {0x1ED8, 0x1ED8}, {0x1EDA, 0x1EDA}, + {0x1EDC, 0x1EDC}, {0x1EDE, 0x1EDE}, {0x1EE0, 0x1EE0}, + {0x1EE2, 0x1EE2}, {0x1EE4, 0x1EE4}, {0x1EE6, 0x1EE6}, + {0x1EE8, 0x1EE8}, {0x1EEA, 0x1EEA}, {0x1EEC, 0x1EEC}, + {0x1EEE, 0x1EEE}, {0x1EF0, 0x1EF0}, {0x1EF2, 0x1EF2}, + {0x1EF4, 0x1EF4}, {0x1EF6, 0x1EF6}, {0x1EF8, 0x1EF8}, + {0x1EFA, 0x1EFA}, {0x1EFC, 0x1EFC}, {0x1EFE, 0x1EFE}, + {0x1F08, 0x1F0F}, {0x1F18, 0x1F1D}, {0x1F28, 0x1F2F}, + {0x1F38, 0x1F3F}, {0x1F48, 0x1F4D}, {0x1F59, 0x1F59}, + {0x1F5B, 0x1F5B}, {0x1F5D, 0x1F5D}, {0x1F5F, 0x1F5F}, + {0x1F68, 0x1F6F}, {0x1FB8, 0x1FBB}, {0x1FC8, 0x1FCB}, + {0x1FD8, 0x1FDB}, {0x1FE8, 0x1FEC}, {0x1FF8, 0x1FFB}, + {0x2102, 0x2102}, {0x2107, 0x2107}, {0x210B, 0x210D}, + {0x2110, 0x2112}, {0x2115, 0x2115}, {0x2119, 0x211D}, + {0x2124, 0x2124}, {0x2126, 0x2126}, {0x2128, 0x2128}, + {0x212A, 0x212D}, {0x2130, 0x2133}, {0x213E, 0x213F}, + {0x2145, 0x2145}, {0x2183, 0x2183}, {0x2C00, 0x2C2F}, + {0x2C60, 0x2C60}, {0x2C62, 0x2C64}, {0x2C67, 0x2C67}, + {0x2C69, 0x2C69}, {0x2C6B, 0x2C6B}, {0x2C6D, 0x2C70}, + {0x2C72, 0x2C72}, {0x2C75, 0x2C75}, {0x2C7E, 0x2C80}, + {0x2C82, 0x2C82}, {0x2C84, 0x2C84}, {0x2C86, 0x2C86}, + {0x2C88, 0x2C88}, {0x2C8A, 0x2C8A}, {0x2C8C, 0x2C8C}, + {0x2C8E, 0x2C8E}, {0x2C90, 0x2C90}, {0x2C92, 0x2C92}, + {0x2C94, 0x2C94}, {0x2C96, 0x2C96}, {0x2C98, 0x2C98}, + {0x2C9A, 0x2C9A}, {0x2C9C, 0x2C9C}, {0x2C9E, 0x2C9E}, + {0x2CA0, 0x2CA0}, {0x2CA2, 0x2CA2}, {0x2CA4, 0x2CA4}, + {0x2CA6, 0x2CA6}, {0x2CA8, 0x2CA8}, {0x2CAA, 0x2CAA}, + {0x2CAC, 0x2CAC}, {0x2CAE, 0x2CAE}, {0x2CB0, 0x2CB0}, + {0x2CB2, 0x2CB2}, {0x2CB4, 0x2CB4}, {0x2CB6, 0x2CB6}, + {0x2CB8, 0x2CB8}, {0x2CBA, 0x2CBA}, {0x2CBC, 0x2CBC}, + {0x2CBE, 0x2CBE}, {0x2CC0, 0x2CC0}, {0x2CC2, 0x2CC2}, + {0x2CC4, 0x2CC4}, {0x2CC6, 0x2CC6}, {0x2CC8, 0x2CC8}, + {0x2CCA, 0x2CCA}, {0x2CCC, 0x2CCC}, {0x2CCE, 0x2CCE}, + {0x2CD0, 0x2CD0}, {0x2CD2, 0x2CD2}, {0x2CD4, 0x2CD4}, + {0x2CD6, 0x2CD6}, {0x2CD8, 0x2CD8}, {0x2CDA, 0x2CDA}, + {0x2CDC, 0x2CDC}, {0x2CDE, 0x2CDE}, {0x2CE0, 0x2CE0}, + {0x2CE2, 0x2CE2}, {0x2CEB, 0x2CEB}, {0x2CED, 0x2CED}, + {0x2CF2, 0x2CF2}, {0xA640, 0xA640}, {0xA642, 0xA642}, + {0xA644, 0xA644}, {0xA646, 0xA646}, {0xA648, 0xA648}, + {0xA64A, 0xA64A}, {0xA64C, 0xA64C}, {0xA64E, 0xA64E}, + {0xA650, 0xA650}, {0xA652, 0xA652}, {0xA654, 0xA654}, + {0xA656, 0xA656}, {0xA658, 0xA658}, {0xA65A, 0xA65A}, + {0xA65C, 0xA65C}, {0xA65E, 0xA65E}, {0xA660, 0xA660}, + {0xA662, 0xA662}, {0xA664, 0xA664}, {0xA666, 0xA666}, + {0xA668, 0xA668}, {0xA66A, 0xA66A}, {0xA66C, 0xA66C}, + {0xA680, 0xA680}, {0xA682, 0xA682}, {0xA684, 0xA684}, + {0xA686, 0xA686}, {0xA688, 0xA688}, {0xA68A, 0xA68A}, + {0xA68C, 0xA68C}, {0xA68E, 0xA68E}, {0xA690, 0xA690}, + {0xA692, 0xA692}, {0xA694, 0xA694}, {0xA696, 0xA696}, + {0xA698, 0xA698}, {0xA69A, 0xA69A}, {0xA722, 0xA722}, + {0xA724, 0xA724}, {0xA726, 0xA726}, {0xA728, 0xA728}, + {0xA72A, 0xA72A}, {0xA72C, 0xA72C}, {0xA72E, 0xA72E}, + {0xA732, 0xA732}, {0xA734, 0xA734}, {0xA736, 0xA736}, + {0xA738, 0xA738}, {0xA73A, 0xA73A}, {0xA73C, 0xA73C}, + {0xA73E, 0xA73E}, {0xA740, 0xA740}, {0xA742, 0xA742}, + {0xA744, 0xA744}, {0xA746, 0xA746}, {0xA748, 0xA748}, + {0xA74A, 0xA74A}, {0xA74C, 0xA74C}, {0xA74E, 0xA74E}, + {0xA750, 0xA750}, {0xA752, 0xA752}, {0xA754, 0xA754}, + {0xA756, 0xA756}, {0xA758, 0xA758}, {0xA75A, 0xA75A}, + {0xA75C, 0xA75C}, {0xA75E, 0xA75E}, {0xA760, 0xA760}, + {0xA762, 0xA762}, {0xA764, 0xA764}, {0xA766, 0xA766}, + {0xA768, 0xA768}, {0xA76A, 0xA76A}, {0xA76C, 0xA76C}, + {0xA76E, 0xA76E}, {0xA779, 0xA779}, {0xA77B, 0xA77B}, + {0xA77D, 0xA77E}, {0xA780, 0xA780}, {0xA782, 0xA782}, + {0xA784, 0xA784}, {0xA786, 0xA786}, {0xA78B, 0xA78B}, + {0xA78D, 0xA78D}, {0xA790, 0xA790}, {0xA792, 0xA792}, + {0xA796, 0xA796}, {0xA798, 0xA798}, {0xA79A, 0xA79A}, + {0xA79C, 0xA79C}, {0xA79E, 0xA79E}, {0xA7A0, 0xA7A0}, + {0xA7A2, 0xA7A2}, {0xA7A4, 0xA7A4}, {0xA7A6, 0xA7A6}, + {0xA7A8, 0xA7A8}, {0xA7AA, 0xA7AE}, {0xA7B0, 0xA7B4}, + {0xA7B6, 0xA7B6}, {0xA7B8, 0xA7B8}, {0xA7BA, 0xA7BA}, + {0xA7BC, 0xA7BC}, {0xA7BE, 0xA7BE}, {0xA7C0, 0xA7C0}, + {0xA7C2, 0xA7C2}, {0xA7C4, 0xA7C7}, {0xA7C9, 0xA7C9}, + {0xA7D0, 0xA7D0}, {0xA7D6, 0xA7D6}, {0xA7D8, 0xA7D8}, + {0xA7F5, 0xA7F5}, {0xFF21, 0xFF3A}, {0x10400, 0x10427}, + {0x104B0, 0x104D3}, {0x10570, 0x1057A}, {0x1057C, 0x1058A}, + {0x1058C, 0x10592}, {0x10594, 0x10595}, {0x10C80, 0x10CB2}, + {0x118A0, 0x118BF}, {0x16E40, 0x16E5F}, {0x1D400, 0x1D419}, + {0x1D434, 0x1D44D}, {0x1D468, 0x1D481}, {0x1D49C, 0x1D49C}, + {0x1D49E, 0x1D49F}, {0x1D4A2, 0x1D4A2}, {0x1D4A5, 0x1D4A6}, + {0x1D4A9, 0x1D4AC}, {0x1D4AE, 0x1D4B5}, {0x1D4D0, 0x1D4E9}, + {0x1D504, 0x1D505}, {0x1D507, 0x1D50A}, {0x1D50D, 0x1D514}, + {0x1D516, 0x1D51C}, {0x1D538, 0x1D539}, {0x1D53B, 0x1D53E}, + {0x1D540, 0x1D544}, {0x1D546, 0x1D546}, {0x1D54A, 0x1D550}, + {0x1D56C, 0x1D585}, {0x1D5A0, 0x1D5B9}, {0x1D5D4, 0x1D5ED}, + {0x1D608, 0x1D621}, {0x1D63C, 0x1D655}, {0x1D670, 0x1D689}, + {0x1D6A8, 0x1D6C0}, {0x1D6E2, 0x1D6FA}, {0x1D71C, 0x1D734}, + {0x1D756, 0x1D76E}, {0x1D790, 0x1D7A8}, {0x1D7CA, 0x1D7CA}, + {0x1E900, 0x1E921}, + // General_Category: Lm + {0x02B0, 0x02C1}, {0x02C6, 0x02D1}, {0x02E0, 0x02E4}, + {0x02EC, 0x02EC}, {0x02EE, 0x02EE}, {0x0374, 0x0374}, + {0x037A, 0x037A}, {0x0559, 0x0559}, {0x0640, 0x0640}, + {0x06E5, 0x06E6}, {0x07F4, 0x07F5}, {0x07FA, 0x07FA}, + {0x081A, 0x081A}, {0x0824, 0x0824}, {0x0828, 0x0828}, + {0x08C9, 0x08C9}, {0x0971, 0x0971}, {0x0E46, 0x0E46}, + {0x0EC6, 0x0EC6}, {0x10FC, 0x10FC}, {0x17D7, 0x17D7}, + {0x1843, 0x1843}, {0x1AA7, 0x1AA7}, {0x1C78, 0x1C7D}, + {0x1D2C, 0x1D6A}, {0x1D78, 0x1D78}, {0x1D9B, 0x1DBF}, + {0x2071, 0x2071}, {0x207F, 0x207F}, {0x2090, 0x209C}, + {0x2C7C, 0x2C7D}, {0x2D6F, 0x2D6F}, {0x2E2F, 0x2E2F}, + {0x3005, 0x3005}, {0x3031, 0x3035}, {0x303B, 0x303B}, + {0x309D, 0x309E}, {0x30FC, 0x30FE}, {0xA015, 0xA015}, + {0xA4F8, 0xA4FD}, {0xA60C, 0xA60C}, {0xA67F, 0xA67F}, + {0xA69C, 0xA69D}, {0xA717, 0xA71F}, {0xA770, 0xA770}, + {0xA788, 0xA788}, {0xA7F2, 0xA7F4}, {0xA7F8, 0xA7F9}, + {0xA9CF, 0xA9CF}, {0xA9E6, 0xA9E6}, {0xAA70, 0xAA70}, + {0xAADD, 0xAADD}, {0xAAF3, 0xAAF4}, {0xAB5C, 0xAB5F}, + {0xAB69, 0xAB69}, {0xFF70, 0xFF70}, {0xFF9E, 0xFF9F}, + {0x10780, 0x10785}, {0x10787, 0x107B0}, {0x107B2, 0x107BA}, + {0x16B40, 0x16B43}, {0x16F93, 0x16F9F}, {0x16FE0, 0x16FE1}, + {0x16FE3, 0x16FE3}, {0x1AFF0, 0x1AFF3}, {0x1AFF5, 0x1AFFB}, + {0x1AFFD, 0x1AFFE}, {0x1E030, 0x1E06D}, {0x1E137, 0x1E13D}, + {0x1E4EB, 0x1E4EB}, {0x1E94B, 0x1E94B}, + // General_Category: Lo + {0x00AA, 0x00AA}, {0x00BA, 0x00BA}, {0x01BB, 0x01BB}, + {0x01C0, 0x01C3}, {0x0294, 0x0294}, {0x05D0, 0x05EA}, + {0x05EF, 0x05F2}, {0x0620, 0x063F}, {0x0641, 0x064A}, + {0x066E, 0x066F}, {0x0671, 0x06D3}, {0x06D5, 0x06D5}, + {0x06EE, 0x06EF}, {0x06FA, 0x06FC}, {0x06FF, 0x06FF}, + {0x0710, 0x0710}, {0x0712, 0x072F}, {0x074D, 0x07A5}, + {0x07B1, 0x07B1}, {0x07CA, 0x07EA}, {0x0800, 0x0815}, + {0x0840, 0x0858}, {0x0860, 0x086A}, {0x0870, 0x0887}, + {0x0889, 0x088E}, {0x08A0, 0x08C8}, {0x0904, 0x0939}, + {0x093D, 0x093D}, {0x0950, 0x0950}, {0x0958, 0x0961}, + {0x0972, 0x0980}, {0x0985, 0x098C}, {0x098F, 0x0990}, + {0x0993, 0x09A8}, {0x09AA, 0x09B0}, {0x09B2, 0x09B2}, + {0x09B6, 0x09B9}, {0x09BD, 0x09BD}, {0x09CE, 0x09CE}, + {0x09DC, 0x09DD}, {0x09DF, 0x09E1}, {0x09F0, 0x09F1}, + {0x09FC, 0x09FC}, {0x0A05, 0x0A0A}, {0x0A0F, 0x0A10}, + {0x0A13, 0x0A28}, {0x0A2A, 0x0A30}, {0x0A32, 0x0A33}, + {0x0A35, 0x0A36}, {0x0A38, 0x0A39}, {0x0A59, 0x0A5C}, + {0x0A5E, 0x0A5E}, {0x0A72, 0x0A74}, {0x0A85, 0x0A8D}, + {0x0A8F, 0x0A91}, {0x0A93, 0x0AA8}, {0x0AAA, 0x0AB0}, + {0x0AB2, 0x0AB3}, {0x0AB5, 0x0AB9}, {0x0ABD, 0x0ABD}, + {0x0AD0, 0x0AD0}, {0x0AE0, 0x0AE1}, {0x0AF9, 0x0AF9}, + {0x0B05, 0x0B0C}, {0x0B0F, 0x0B10}, {0x0B13, 0x0B28}, + {0x0B2A, 0x0B30}, {0x0B32, 0x0B33}, {0x0B35, 0x0B39}, + {0x0B3D, 0x0B3D}, {0x0B5C, 0x0B5D}, {0x0B5F, 0x0B61}, + {0x0B71, 0x0B71}, {0x0B83, 0x0B83}, {0x0B85, 0x0B8A}, + {0x0B8E, 0x0B90}, {0x0B92, 0x0B95}, {0x0B99, 0x0B9A}, + {0x0B9C, 0x0B9C}, {0x0B9E, 0x0B9F}, {0x0BA3, 0x0BA4}, + {0x0BA8, 0x0BAA}, {0x0BAE, 0x0BB9}, {0x0BD0, 0x0BD0}, + {0x0C05, 0x0C0C}, {0x0C0E, 0x0C10}, {0x0C12, 0x0C28}, + {0x0C2A, 0x0C39}, {0x0C3D, 0x0C3D}, {0x0C58, 0x0C5A}, + {0x0C5D, 0x0C5D}, {0x0C60, 0x0C61}, {0x0C80, 0x0C80}, + {0x0C85, 0x0C8C}, {0x0C8E, 0x0C90}, {0x0C92, 0x0CA8}, + {0x0CAA, 0x0CB3}, {0x0CB5, 0x0CB9}, {0x0CBD, 0x0CBD}, + {0x0CDD, 0x0CDE}, {0x0CE0, 0x0CE1}, {0x0CF1, 0x0CF2}, + {0x0D04, 0x0D0C}, {0x0D0E, 0x0D10}, {0x0D12, 0x0D3A}, + {0x0D3D, 0x0D3D}, {0x0D4E, 0x0D4E}, {0x0D54, 0x0D56}, + {0x0D5F, 0x0D61}, {0x0D7A, 0x0D7F}, {0x0D85, 0x0D96}, + {0x0D9A, 0x0DB1}, {0x0DB3, 0x0DBB}, {0x0DBD, 0x0DBD}, + {0x0DC0, 0x0DC6}, {0x0E01, 0x0E30}, {0x0E32, 0x0E33}, + {0x0E40, 0x0E45}, {0x0E81, 0x0E82}, {0x0E84, 0x0E84}, + {0x0E86, 0x0E8A}, {0x0E8C, 0x0EA3}, {0x0EA5, 0x0EA5}, + {0x0EA7, 0x0EB0}, {0x0EB2, 0x0EB3}, {0x0EBD, 0x0EBD}, + {0x0EC0, 0x0EC4}, {0x0EDC, 0x0EDF}, {0x0F00, 0x0F00}, + {0x0F40, 0x0F47}, {0x0F49, 0x0F6C}, {0x0F88, 0x0F8C}, + {0x1000, 0x102A}, {0x103F, 0x103F}, {0x1050, 0x1055}, + {0x105A, 0x105D}, {0x1061, 0x1061}, {0x1065, 0x1066}, + {0x106E, 0x1070}, {0x1075, 0x1081}, {0x108E, 0x108E}, + {0x1100, 0x1248}, {0x124A, 0x124D}, {0x1250, 0x1256}, + {0x1258, 0x1258}, {0x125A, 0x125D}, {0x1260, 0x1288}, + {0x128A, 0x128D}, {0x1290, 0x12B0}, {0x12B2, 0x12B5}, + {0x12B8, 0x12BE}, {0x12C0, 0x12C0}, {0x12C2, 0x12C5}, + {0x12C8, 0x12D6}, {0x12D8, 0x1310}, {0x1312, 0x1315}, + {0x1318, 0x135A}, {0x1380, 0x138F}, {0x1401, 0x166C}, + {0x166F, 0x167F}, {0x1681, 0x169A}, {0x16A0, 0x16EA}, + {0x16F1, 0x16F8}, {0x1700, 0x1711}, {0x171F, 0x1731}, + {0x1740, 0x1751}, {0x1760, 0x176C}, {0x176E, 0x1770}, + {0x1780, 0x17B3}, {0x17DC, 0x17DC}, {0x1820, 0x1842}, + {0x1844, 0x1878}, {0x1880, 0x1884}, {0x1887, 0x18A8}, + {0x18AA, 0x18AA}, {0x18B0, 0x18F5}, {0x1900, 0x191E}, + {0x1950, 0x196D}, {0x1970, 0x1974}, {0x1980, 0x19AB}, + {0x19B0, 0x19C9}, {0x1A00, 0x1A16}, {0x1A20, 0x1A54}, + {0x1B05, 0x1B33}, {0x1B45, 0x1B4C}, {0x1B83, 0x1BA0}, + {0x1BAE, 0x1BAF}, {0x1BBA, 0x1BE5}, {0x1C00, 0x1C23}, + {0x1C4D, 0x1C4F}, {0x1C5A, 0x1C77}, {0x1CE9, 0x1CEC}, + {0x1CEE, 0x1CF3}, {0x1CF5, 0x1CF6}, {0x1CFA, 0x1CFA}, + {0x2135, 0x2138}, {0x2D30, 0x2D67}, {0x2D80, 0x2D96}, + {0x2DA0, 0x2DA6}, {0x2DA8, 0x2DAE}, {0x2DB0, 0x2DB6}, + {0x2DB8, 0x2DBE}, {0x2DC0, 0x2DC6}, {0x2DC8, 0x2DCE}, + {0x2DD0, 0x2DD6}, {0x2DD8, 0x2DDE}, {0x3006, 0x3006}, + {0x303C, 0x303C}, {0x3041, 0x3096}, {0x309F, 0x309F}, + {0x30A1, 0x30FA}, {0x30FF, 0x30FF}, {0x3105, 0x312F}, + {0x3131, 0x318E}, {0x31A0, 0x31BF}, {0x31F0, 0x31FF}, + {0x3400, 0x4DBF}, {0x4E00, 0xA014}, {0xA016, 0xA48C}, + {0xA4D0, 0xA4F7}, {0xA500, 0xA60B}, {0xA610, 0xA61F}, + {0xA62A, 0xA62B}, {0xA66E, 0xA66E}, {0xA6A0, 0xA6E5}, + {0xA78F, 0xA78F}, {0xA7F7, 0xA7F7}, {0xA7FB, 0xA801}, + {0xA803, 0xA805}, {0xA807, 0xA80A}, {0xA80C, 0xA822}, + {0xA840, 0xA873}, {0xA882, 0xA8B3}, {0xA8F2, 0xA8F7}, + {0xA8FB, 0xA8FB}, {0xA8FD, 0xA8FE}, {0xA90A, 0xA925}, + {0xA930, 0xA946}, {0xA960, 0xA97C}, {0xA984, 0xA9B2}, + {0xA9E0, 0xA9E4}, {0xA9E7, 0xA9EF}, {0xA9FA, 0xA9FE}, + {0xAA00, 0xAA28}, {0xAA40, 0xAA42}, {0xAA44, 0xAA4B}, + {0xAA60, 0xAA6F}, {0xAA71, 0xAA76}, {0xAA7A, 0xAA7A}, + {0xAA7E, 0xAAAF}, {0xAAB1, 0xAAB1}, {0xAAB5, 0xAAB6}, + {0xAAB9, 0xAABD}, {0xAAC0, 0xAAC0}, {0xAAC2, 0xAAC2}, + {0xAADB, 0xAADC}, {0xAAE0, 0xAAEA}, {0xAAF2, 0xAAF2}, + {0xAB01, 0xAB06}, {0xAB09, 0xAB0E}, {0xAB11, 0xAB16}, + {0xAB20, 0xAB26}, {0xAB28, 0xAB2E}, {0xABC0, 0xABE2}, + {0xAC00, 0xD7A3}, {0xD7B0, 0xD7C6}, {0xD7CB, 0xD7FB}, + {0xF900, 0xFA6D}, {0xFA70, 0xFAD9}, {0xFB1D, 0xFB1D}, + {0xFB1F, 0xFB28}, {0xFB2A, 0xFB36}, {0xFB38, 0xFB3C}, + {0xFB3E, 0xFB3E}, {0xFB40, 0xFB41}, {0xFB43, 0xFB44}, + {0xFB46, 0xFBB1}, {0xFBD3, 0xFD3D}, {0xFD50, 0xFD8F}, + {0xFD92, 0xFDC7}, {0xFDF0, 0xFDFB}, {0xFE70, 0xFE74}, + {0xFE76, 0xFEFC}, {0xFF66, 0xFF6F}, {0xFF71, 0xFF9D}, + {0xFFA0, 0xFFBE}, {0xFFC2, 0xFFC7}, {0xFFCA, 0xFFCF}, + {0xFFD2, 0xFFD7}, {0xFFDA, 0xFFDC}, {0x10000, 0x1000B}, + {0x1000D, 0x10026}, {0x10028, 0x1003A}, {0x1003C, 0x1003D}, + {0x1003F, 0x1004D}, {0x10050, 0x1005D}, {0x10080, 0x100FA}, + {0x10280, 0x1029C}, {0x102A0, 0x102D0}, {0x10300, 0x1031F}, + {0x1032D, 0x10340}, {0x10342, 0x10349}, {0x10350, 0x10375}, + {0x10380, 0x1039D}, {0x103A0, 0x103C3}, {0x103C8, 0x103CF}, + {0x10450, 0x1049D}, {0x10500, 0x10527}, {0x10530, 0x10563}, + {0x10600, 0x10736}, {0x10740, 0x10755}, {0x10760, 0x10767}, + {0x10800, 0x10805}, {0x10808, 0x10808}, {0x1080A, 0x10835}, + {0x10837, 0x10838}, {0x1083C, 0x1083C}, {0x1083F, 0x10855}, + {0x10860, 0x10876}, {0x10880, 0x1089E}, {0x108E0, 0x108F2}, + {0x108F4, 0x108F5}, {0x10900, 0x10915}, {0x10920, 0x10939}, + {0x10980, 0x109B7}, {0x109BE, 0x109BF}, {0x10A00, 0x10A00}, + {0x10A10, 0x10A13}, {0x10A15, 0x10A17}, {0x10A19, 0x10A35}, + {0x10A60, 0x10A7C}, {0x10A80, 0x10A9C}, {0x10AC0, 0x10AC7}, + {0x10AC9, 0x10AE4}, {0x10B00, 0x10B35}, {0x10B40, 0x10B55}, + {0x10B60, 0x10B72}, {0x10B80, 0x10B91}, {0x10C00, 0x10C48}, + {0x10D00, 0x10D23}, {0x10E80, 0x10EA9}, {0x10EB0, 0x10EB1}, + {0x10F00, 0x10F1C}, {0x10F27, 0x10F27}, {0x10F30, 0x10F45}, + {0x10F70, 0x10F81}, {0x10FB0, 0x10FC4}, {0x10FE0, 0x10FF6}, + {0x11003, 0x11037}, {0x11071, 0x11072}, {0x11075, 0x11075}, + {0x11083, 0x110AF}, {0x110D0, 0x110E8}, {0x11103, 0x11126}, + {0x11144, 0x11144}, {0x11147, 0x11147}, {0x11150, 0x11172}, + {0x11176, 0x11176}, {0x11183, 0x111B2}, {0x111C1, 0x111C4}, + {0x111DA, 0x111DA}, {0x111DC, 0x111DC}, {0x11200, 0x11211}, + {0x11213, 0x1122B}, {0x1123F, 0x11240}, {0x11280, 0x11286}, + {0x11288, 0x11288}, {0x1128A, 0x1128D}, {0x1128F, 0x1129D}, + {0x1129F, 0x112A8}, {0x112B0, 0x112DE}, {0x11305, 0x1130C}, + {0x1130F, 0x11310}, {0x11313, 0x11328}, {0x1132A, 0x11330}, + {0x11332, 0x11333}, {0x11335, 0x11339}, {0x1133D, 0x1133D}, + {0x11350, 0x11350}, {0x1135D, 0x11361}, {0x11400, 0x11434}, + {0x11447, 0x1144A}, {0x1145F, 0x11461}, {0x11480, 0x114AF}, + {0x114C4, 0x114C5}, {0x114C7, 0x114C7}, {0x11580, 0x115AE}, + {0x115D8, 0x115DB}, {0x11600, 0x1162F}, {0x11644, 0x11644}, + {0x11680, 0x116AA}, {0x116B8, 0x116B8}, {0x11700, 0x1171A}, + {0x11740, 0x11746}, {0x11800, 0x1182B}, {0x118FF, 0x11906}, + {0x11909, 0x11909}, {0x1190C, 0x11913}, {0x11915, 0x11916}, + {0x11918, 0x1192F}, {0x1193F, 0x1193F}, {0x11941, 0x11941}, + {0x119A0, 0x119A7}, {0x119AA, 0x119D0}, {0x119E1, 0x119E1}, + {0x119E3, 0x119E3}, {0x11A00, 0x11A00}, {0x11A0B, 0x11A32}, + {0x11A3A, 0x11A3A}, {0x11A50, 0x11A50}, {0x11A5C, 0x11A89}, + {0x11A9D, 0x11A9D}, {0x11AB0, 0x11AF8}, {0x11C00, 0x11C08}, + {0x11C0A, 0x11C2E}, {0x11C40, 0x11C40}, {0x11C72, 0x11C8F}, + {0x11D00, 0x11D06}, {0x11D08, 0x11D09}, {0x11D0B, 0x11D30}, + {0x11D46, 0x11D46}, {0x11D60, 0x11D65}, {0x11D67, 0x11D68}, + {0x11D6A, 0x11D89}, {0x11D98, 0x11D98}, {0x11EE0, 0x11EF2}, + {0x11F02, 0x11F02}, {0x11F04, 0x11F10}, {0x11F12, 0x11F33}, + {0x11FB0, 0x11FB0}, {0x12000, 0x12399}, {0x12480, 0x12543}, + {0x12F90, 0x12FF0}, {0x13000, 0x1342F}, {0x13441, 0x13446}, + {0x14400, 0x14646}, {0x16800, 0x16A38}, {0x16A40, 0x16A5E}, + {0x16A70, 0x16ABE}, {0x16AD0, 0x16AED}, {0x16B00, 0x16B2F}, + {0x16B63, 0x16B77}, {0x16B7D, 0x16B8F}, {0x16F00, 0x16F4A}, + {0x16F50, 0x16F50}, {0x17000, 0x187F7}, {0x18800, 0x18CD5}, + {0x18D00, 0x18D08}, {0x1B000, 0x1B122}, {0x1B132, 0x1B132}, + {0x1B150, 0x1B152}, {0x1B155, 0x1B155}, {0x1B164, 0x1B167}, + {0x1B170, 0x1B2FB}, {0x1BC00, 0x1BC6A}, {0x1BC70, 0x1BC7C}, + {0x1BC80, 0x1BC88}, {0x1BC90, 0x1BC99}, {0x1DF0A, 0x1DF0A}, + {0x1E100, 0x1E12C}, {0x1E14E, 0x1E14E}, {0x1E290, 0x1E2AD}, + {0x1E2C0, 0x1E2EB}, {0x1E4D0, 0x1E4EA}, {0x1E7E0, 0x1E7E6}, + {0x1E7E8, 0x1E7EB}, {0x1E7ED, 0x1E7EE}, {0x1E7F0, 0x1E7FE}, + {0x1E800, 0x1E8C4}, {0x1EE00, 0x1EE03}, {0x1EE05, 0x1EE1F}, + {0x1EE21, 0x1EE22}, {0x1EE24, 0x1EE24}, {0x1EE27, 0x1EE27}, + {0x1EE29, 0x1EE32}, {0x1EE34, 0x1EE37}, {0x1EE39, 0x1EE39}, + {0x1EE3B, 0x1EE3B}, {0x1EE42, 0x1EE42}, {0x1EE47, 0x1EE47}, + {0x1EE49, 0x1EE49}, {0x1EE4B, 0x1EE4B}, {0x1EE4D, 0x1EE4F}, + {0x1EE51, 0x1EE52}, {0x1EE54, 0x1EE54}, {0x1EE57, 0x1EE57}, + {0x1EE59, 0x1EE59}, {0x1EE5B, 0x1EE5B}, {0x1EE5D, 0x1EE5D}, + {0x1EE5F, 0x1EE5F}, {0x1EE61, 0x1EE62}, {0x1EE64, 0x1EE64}, + {0x1EE67, 0x1EE6A}, {0x1EE6C, 0x1EE72}, {0x1EE74, 0x1EE77}, + {0x1EE79, 0x1EE7C}, {0x1EE7E, 0x1EE7E}, {0x1EE80, 0x1EE89}, + {0x1EE8B, 0x1EE9B}, {0x1EEA1, 0x1EEA3}, {0x1EEA5, 0x1EEA9}, + {0x1EEAB, 0x1EEBB}, {0x20000, 0x2A6DF}, {0x2A700, 0x2B739}, + {0x2B740, 0x2B81D}, {0x2B820, 0x2CEA1}, {0x2CEB0, 0x2EBE0}, + {0x2EBF0, 0x2EE5D}, {0x2F800, 0x2FA1D}, {0x30000, 0x3134A}, + {0x31350, 0x323AF}, + // General_Category: LC + // General_Category: M + // General_Category: Mc + {0x0903, 0x0903}, {0x093B, 0x093B}, {0x093E, 0x0940}, + {0x0949, 0x094C}, {0x094E, 0x094F}, {0x0982, 0x0983}, + {0x09BE, 0x09C0}, {0x09C7, 0x09C8}, {0x09CB, 0x09CC}, + {0x09D7, 0x09D7}, {0x0A03, 0x0A03}, {0x0A3E, 0x0A40}, + {0x0A83, 0x0A83}, {0x0ABE, 0x0AC0}, {0x0AC9, 0x0AC9}, + {0x0ACB, 0x0ACC}, {0x0B02, 0x0B03}, {0x0B3E, 0x0B3E}, + {0x0B40, 0x0B40}, {0x0B47, 0x0B48}, {0x0B4B, 0x0B4C}, + {0x0B57, 0x0B57}, {0x0BBE, 0x0BBF}, {0x0BC1, 0x0BC2}, + {0x0BC6, 0x0BC8}, {0x0BCA, 0x0BCC}, {0x0BD7, 0x0BD7}, + {0x0C01, 0x0C03}, {0x0C41, 0x0C44}, {0x0C82, 0x0C83}, + {0x0CBE, 0x0CBE}, {0x0CC0, 0x0CC4}, {0x0CC7, 0x0CC8}, + {0x0CCA, 0x0CCB}, {0x0CD5, 0x0CD6}, {0x0CF3, 0x0CF3}, + {0x0D02, 0x0D03}, {0x0D3E, 0x0D40}, {0x0D46, 0x0D48}, + {0x0D4A, 0x0D4C}, {0x0D57, 0x0D57}, {0x0D82, 0x0D83}, + {0x0DCF, 0x0DD1}, {0x0DD8, 0x0DDF}, {0x0DF2, 0x0DF3}, + {0x0F3E, 0x0F3F}, {0x0F7F, 0x0F7F}, {0x102B, 0x102C}, + {0x1031, 0x1031}, {0x1038, 0x1038}, {0x103B, 0x103C}, + {0x1056, 0x1057}, {0x1062, 0x1064}, {0x1067, 0x106D}, + {0x1083, 0x1084}, {0x1087, 0x108C}, {0x108F, 0x108F}, + {0x109A, 0x109C}, {0x1715, 0x1715}, {0x1734, 0x1734}, + {0x17B6, 0x17B6}, {0x17BE, 0x17C5}, {0x17C7, 0x17C8}, + {0x1923, 0x1926}, {0x1929, 0x192B}, {0x1930, 0x1931}, + {0x1933, 0x1938}, {0x1A19, 0x1A1A}, {0x1A55, 0x1A55}, + {0x1A57, 0x1A57}, {0x1A61, 0x1A61}, {0x1A63, 0x1A64}, + {0x1A6D, 0x1A72}, {0x1B04, 0x1B04}, {0x1B35, 0x1B35}, + {0x1B3B, 0x1B3B}, {0x1B3D, 0x1B41}, {0x1B43, 0x1B44}, + {0x1B82, 0x1B82}, {0x1BA1, 0x1BA1}, {0x1BA6, 0x1BA7}, + {0x1BAA, 0x1BAA}, {0x1BE7, 0x1BE7}, {0x1BEA, 0x1BEC}, + {0x1BEE, 0x1BEE}, {0x1BF2, 0x1BF3}, {0x1C24, 0x1C2B}, + {0x1C34, 0x1C35}, {0x1CE1, 0x1CE1}, {0x1CF7, 0x1CF7}, + {0x302E, 0x302F}, {0xA823, 0xA824}, {0xA827, 0xA827}, + {0xA880, 0xA881}, {0xA8B4, 0xA8C3}, {0xA952, 0xA953}, + {0xA983, 0xA983}, {0xA9B4, 0xA9B5}, {0xA9BA, 0xA9BB}, + {0xA9BE, 0xA9C0}, {0xAA2F, 0xAA30}, {0xAA33, 0xAA34}, + {0xAA4D, 0xAA4D}, {0xAA7B, 0xAA7B}, {0xAA7D, 0xAA7D}, + {0xAAEB, 0xAAEB}, {0xAAEE, 0xAAEF}, {0xAAF5, 0xAAF5}, + {0xABE3, 0xABE4}, {0xABE6, 0xABE7}, {0xABE9, 0xABEA}, + {0xABEC, 0xABEC}, {0x11000, 0x11000}, {0x11002, 0x11002}, + {0x11082, 0x11082}, {0x110B0, 0x110B2}, {0x110B7, 0x110B8}, + {0x1112C, 0x1112C}, {0x11145, 0x11146}, {0x11182, 0x11182}, + {0x111B3, 0x111B5}, {0x111BF, 0x111C0}, {0x111CE, 0x111CE}, + {0x1122C, 0x1122E}, {0x11232, 0x11233}, {0x11235, 0x11235}, + {0x112E0, 0x112E2}, {0x11302, 0x11303}, {0x1133E, 0x1133F}, + {0x11341, 0x11344}, {0x11347, 0x11348}, {0x1134B, 0x1134D}, + {0x11357, 0x11357}, {0x11362, 0x11363}, {0x11435, 0x11437}, + {0x11440, 0x11441}, {0x11445, 0x11445}, {0x114B0, 0x114B2}, + {0x114B9, 0x114B9}, {0x114BB, 0x114BE}, {0x114C1, 0x114C1}, + {0x115AF, 0x115B1}, {0x115B8, 0x115BB}, {0x115BE, 0x115BE}, + {0x11630, 0x11632}, {0x1163B, 0x1163C}, {0x1163E, 0x1163E}, + {0x116AC, 0x116AC}, {0x116AE, 0x116AF}, {0x116B6, 0x116B6}, + {0x11720, 0x11721}, {0x11726, 0x11726}, {0x1182C, 0x1182E}, + {0x11838, 0x11838}, {0x11930, 0x11935}, {0x11937, 0x11938}, + {0x1193D, 0x1193D}, {0x11940, 0x11940}, {0x11942, 0x11942}, + {0x119D1, 0x119D3}, {0x119DC, 0x119DF}, {0x119E4, 0x119E4}, + {0x11A39, 0x11A39}, {0x11A57, 0x11A58}, {0x11A97, 0x11A97}, + {0x11C2F, 0x11C2F}, {0x11C3E, 0x11C3E}, {0x11CA9, 0x11CA9}, + {0x11CB1, 0x11CB1}, {0x11CB4, 0x11CB4}, {0x11D8A, 0x11D8E}, + {0x11D93, 0x11D94}, {0x11D96, 0x11D96}, {0x11EF5, 0x11EF6}, + {0x11F03, 0x11F03}, {0x11F34, 0x11F35}, {0x11F3E, 0x11F3F}, + {0x11F41, 0x11F41}, {0x16F51, 0x16F87}, {0x16FF0, 0x16FF1}, + {0x1D165, 0x1D166}, {0x1D16D, 0x1D172}, + // General_Category: Me + {0x0488, 0x0489}, {0x1ABE, 0x1ABE}, {0x20DD, 0x20E0}, + {0x20E2, 0x20E4}, {0xA670, 0xA672}, + // General_Category: Mn + {0x0300, 0x036F}, {0x0483, 0x0487}, {0x0591, 0x05BD}, + {0x05BF, 0x05BF}, {0x05C1, 0x05C2}, {0x05C4, 0x05C5}, + {0x05C7, 0x05C7}, {0x0610, 0x061A}, {0x064B, 0x065F}, + {0x0670, 0x0670}, {0x06D6, 0x06DC}, {0x06DF, 0x06E4}, + {0x06E7, 0x06E8}, {0x06EA, 0x06ED}, {0x0711, 0x0711}, + {0x0730, 0x074A}, {0x07A6, 0x07B0}, {0x07EB, 0x07F3}, + {0x07FD, 0x07FD}, {0x0816, 0x0819}, {0x081B, 0x0823}, + {0x0825, 0x0827}, {0x0829, 0x082D}, {0x0859, 0x085B}, + {0x0898, 0x089F}, {0x08CA, 0x08E1}, {0x08E3, 0x0902}, + {0x093A, 0x093A}, {0x093C, 0x093C}, {0x0941, 0x0948}, + {0x094D, 0x094D}, {0x0951, 0x0957}, {0x0962, 0x0963}, + {0x0981, 0x0981}, {0x09BC, 0x09BC}, {0x09C1, 0x09C4}, + {0x09CD, 0x09CD}, {0x09E2, 0x09E3}, {0x09FE, 0x09FE}, + {0x0A01, 0x0A02}, {0x0A3C, 0x0A3C}, {0x0A41, 0x0A42}, + {0x0A47, 0x0A48}, {0x0A4B, 0x0A4D}, {0x0A51, 0x0A51}, + {0x0A70, 0x0A71}, {0x0A75, 0x0A75}, {0x0A81, 0x0A82}, + {0x0ABC, 0x0ABC}, {0x0AC1, 0x0AC5}, {0x0AC7, 0x0AC8}, + {0x0ACD, 0x0ACD}, {0x0AE2, 0x0AE3}, {0x0AFA, 0x0AFF}, + {0x0B01, 0x0B01}, {0x0B3C, 0x0B3C}, {0x0B3F, 0x0B3F}, + {0x0B41, 0x0B44}, {0x0B4D, 0x0B4D}, {0x0B55, 0x0B56}, + {0x0B62, 0x0B63}, {0x0B82, 0x0B82}, {0x0BC0, 0x0BC0}, + {0x0BCD, 0x0BCD}, {0x0C00, 0x0C00}, {0x0C04, 0x0C04}, + {0x0C3C, 0x0C3C}, {0x0C3E, 0x0C40}, {0x0C46, 0x0C48}, + {0x0C4A, 0x0C4D}, {0x0C55, 0x0C56}, {0x0C62, 0x0C63}, + {0x0C81, 0x0C81}, {0x0CBC, 0x0CBC}, {0x0CBF, 0x0CBF}, + {0x0CC6, 0x0CC6}, {0x0CCC, 0x0CCD}, {0x0CE2, 0x0CE3}, + {0x0D00, 0x0D01}, {0x0D3B, 0x0D3C}, {0x0D41, 0x0D44}, + {0x0D4D, 0x0D4D}, {0x0D62, 0x0D63}, {0x0D81, 0x0D81}, + {0x0DCA, 0x0DCA}, {0x0DD2, 0x0DD4}, {0x0DD6, 0x0DD6}, + {0x0E31, 0x0E31}, {0x0E34, 0x0E3A}, {0x0E47, 0x0E4E}, + {0x0EB1, 0x0EB1}, {0x0EB4, 0x0EBC}, {0x0EC8, 0x0ECE}, + {0x0F18, 0x0F19}, {0x0F35, 0x0F35}, {0x0F37, 0x0F37}, + {0x0F39, 0x0F39}, {0x0F71, 0x0F7E}, {0x0F80, 0x0F84}, + {0x0F86, 0x0F87}, {0x0F8D, 0x0F97}, {0x0F99, 0x0FBC}, + {0x0FC6, 0x0FC6}, {0x102D, 0x1030}, {0x1032, 0x1037}, + {0x1039, 0x103A}, {0x103D, 0x103E}, {0x1058, 0x1059}, + {0x105E, 0x1060}, {0x1071, 0x1074}, {0x1082, 0x1082}, + {0x1085, 0x1086}, {0x108D, 0x108D}, {0x109D, 0x109D}, + {0x135D, 0x135F}, {0x1712, 0x1714}, {0x1732, 0x1733}, + {0x1752, 0x1753}, {0x1772, 0x1773}, {0x17B4, 0x17B5}, + {0x17B7, 0x17BD}, {0x17C6, 0x17C6}, {0x17C9, 0x17D3}, + {0x17DD, 0x17DD}, {0x180B, 0x180D}, {0x180F, 0x180F}, + {0x1885, 0x1886}, {0x18A9, 0x18A9}, {0x1920, 0x1922}, + {0x1927, 0x1928}, {0x1932, 0x1932}, {0x1939, 0x193B}, + {0x1A17, 0x1A18}, {0x1A1B, 0x1A1B}, {0x1A56, 0x1A56}, + {0x1A58, 0x1A5E}, {0x1A60, 0x1A60}, {0x1A62, 0x1A62}, + {0x1A65, 0x1A6C}, {0x1A73, 0x1A7C}, {0x1A7F, 0x1A7F}, + {0x1AB0, 0x1ABD}, {0x1ABF, 0x1ACE}, {0x1B00, 0x1B03}, + {0x1B34, 0x1B34}, {0x1B36, 0x1B3A}, {0x1B3C, 0x1B3C}, + {0x1B42, 0x1B42}, {0x1B6B, 0x1B73}, {0x1B80, 0x1B81}, + {0x1BA2, 0x1BA5}, {0x1BA8, 0x1BA9}, {0x1BAB, 0x1BAD}, + {0x1BE6, 0x1BE6}, {0x1BE8, 0x1BE9}, {0x1BED, 0x1BED}, + {0x1BEF, 0x1BF1}, {0x1C2C, 0x1C33}, {0x1C36, 0x1C37}, + {0x1CD0, 0x1CD2}, {0x1CD4, 0x1CE0}, {0x1CE2, 0x1CE8}, + {0x1CED, 0x1CED}, {0x1CF4, 0x1CF4}, {0x1CF8, 0x1CF9}, + {0x1DC0, 0x1DFF}, {0x20D0, 0x20DC}, {0x20E1, 0x20E1}, + {0x20E5, 0x20F0}, {0x2CEF, 0x2CF1}, {0x2D7F, 0x2D7F}, + {0x2DE0, 0x2DFF}, {0x302A, 0x302D}, {0x3099, 0x309A}, + {0xA66F, 0xA66F}, {0xA674, 0xA67D}, {0xA69E, 0xA69F}, + {0xA6F0, 0xA6F1}, {0xA802, 0xA802}, {0xA806, 0xA806}, + {0xA80B, 0xA80B}, {0xA825, 0xA826}, {0xA82C, 0xA82C}, + {0xA8C4, 0xA8C5}, {0xA8E0, 0xA8F1}, {0xA8FF, 0xA8FF}, + {0xA926, 0xA92D}, {0xA947, 0xA951}, {0xA980, 0xA982}, + {0xA9B3, 0xA9B3}, {0xA9B6, 0xA9B9}, {0xA9BC, 0xA9BD}, + {0xA9E5, 0xA9E5}, {0xAA29, 0xAA2E}, {0xAA31, 0xAA32}, + {0xAA35, 0xAA36}, {0xAA43, 0xAA43}, {0xAA4C, 0xAA4C}, + {0xAA7C, 0xAA7C}, {0xAAB0, 0xAAB0}, {0xAAB2, 0xAAB4}, + {0xAAB7, 0xAAB8}, {0xAABE, 0xAABF}, {0xAAC1, 0xAAC1}, + {0xAAEC, 0xAAED}, {0xAAF6, 0xAAF6}, {0xABE5, 0xABE5}, + {0xABE8, 0xABE8}, {0xABED, 0xABED}, {0xFB1E, 0xFB1E}, + {0xFE00, 0xFE0F}, {0xFE20, 0xFE2F}, {0x101FD, 0x101FD}, + {0x102E0, 0x102E0}, {0x10376, 0x1037A}, {0x10A01, 0x10A03}, + {0x10A05, 0x10A06}, {0x10A0C, 0x10A0F}, {0x10A38, 0x10A3A}, + {0x10A3F, 0x10A3F}, {0x10AE5, 0x10AE6}, {0x10D24, 0x10D27}, + {0x10EAB, 0x10EAC}, {0x10EFD, 0x10EFF}, {0x10F46, 0x10F50}, + {0x10F82, 0x10F85}, {0x11001, 0x11001}, {0x11038, 0x11046}, + {0x11070, 0x11070}, {0x11073, 0x11074}, {0x1107F, 0x11081}, + {0x110B3, 0x110B6}, {0x110B9, 0x110BA}, {0x110C2, 0x110C2}, + {0x11100, 0x11102}, {0x11127, 0x1112B}, {0x1112D, 0x11134}, + {0x11173, 0x11173}, {0x11180, 0x11181}, {0x111B6, 0x111BE}, + {0x111C9, 0x111CC}, {0x111CF, 0x111CF}, {0x1122F, 0x11231}, + {0x11234, 0x11234}, {0x11236, 0x11237}, {0x1123E, 0x1123E}, + {0x11241, 0x11241}, {0x112DF, 0x112DF}, {0x112E3, 0x112EA}, + {0x11300, 0x11301}, {0x1133B, 0x1133C}, {0x11340, 0x11340}, + {0x11366, 0x1136C}, {0x11370, 0x11374}, {0x11438, 0x1143F}, + {0x11442, 0x11444}, {0x11446, 0x11446}, {0x1145E, 0x1145E}, + {0x114B3, 0x114B8}, {0x114BA, 0x114BA}, {0x114BF, 0x114C0}, + {0x114C2, 0x114C3}, {0x115B2, 0x115B5}, {0x115BC, 0x115BD}, + {0x115BF, 0x115C0}, {0x115DC, 0x115DD}, {0x11633, 0x1163A}, + {0x1163D, 0x1163D}, {0x1163F, 0x11640}, {0x116AB, 0x116AB}, + {0x116AD, 0x116AD}, {0x116B0, 0x116B5}, {0x116B7, 0x116B7}, + {0x1171D, 0x1171F}, {0x11722, 0x11725}, {0x11727, 0x1172B}, + {0x1182F, 0x11837}, {0x11839, 0x1183A}, {0x1193B, 0x1193C}, + {0x1193E, 0x1193E}, {0x11943, 0x11943}, {0x119D4, 0x119D7}, + {0x119DA, 0x119DB}, {0x119E0, 0x119E0}, {0x11A01, 0x11A0A}, + {0x11A33, 0x11A38}, {0x11A3B, 0x11A3E}, {0x11A47, 0x11A47}, + {0x11A51, 0x11A56}, {0x11A59, 0x11A5B}, {0x11A8A, 0x11A96}, + {0x11A98, 0x11A99}, {0x11C30, 0x11C36}, {0x11C38, 0x11C3D}, + {0x11C3F, 0x11C3F}, {0x11C92, 0x11CA7}, {0x11CAA, 0x11CB0}, + {0x11CB2, 0x11CB3}, {0x11CB5, 0x11CB6}, {0x11D31, 0x11D36}, + {0x11D3A, 0x11D3A}, {0x11D3C, 0x11D3D}, {0x11D3F, 0x11D45}, + {0x11D47, 0x11D47}, {0x11D90, 0x11D91}, {0x11D95, 0x11D95}, + {0x11D97, 0x11D97}, {0x11EF3, 0x11EF4}, {0x11F00, 0x11F01}, + {0x11F36, 0x11F3A}, {0x11F40, 0x11F40}, {0x11F42, 0x11F42}, + {0x13440, 0x13440}, {0x13447, 0x13455}, {0x16AF0, 0x16AF4}, + {0x16B30, 0x16B36}, {0x16F4F, 0x16F4F}, {0x16F8F, 0x16F92}, + {0x16FE4, 0x16FE4}, {0x1BC9D, 0x1BC9E}, {0x1CF00, 0x1CF2D}, + {0x1CF30, 0x1CF46}, {0x1D167, 0x1D169}, {0x1D17B, 0x1D182}, + {0x1D185, 0x1D18B}, {0x1D1AA, 0x1D1AD}, {0x1D242, 0x1D244}, + {0x1DA00, 0x1DA36}, {0x1DA3B, 0x1DA6C}, {0x1DA75, 0x1DA75}, + {0x1DA84, 0x1DA84}, {0x1DA9B, 0x1DA9F}, {0x1DAA1, 0x1DAAF}, + {0x1E000, 0x1E006}, {0x1E008, 0x1E018}, {0x1E01B, 0x1E021}, + {0x1E023, 0x1E024}, {0x1E026, 0x1E02A}, {0x1E08F, 0x1E08F}, + {0x1E130, 0x1E136}, {0x1E2AE, 0x1E2AE}, {0x1E2EC, 0x1E2EF}, + {0x1E4EC, 0x1E4EF}, {0x1E8D0, 0x1E8D6}, {0x1E944, 0x1E94A}, + {0xE0100, 0xE01EF}, + // General_Category: N + // General_Category: Nd + {0x0030, 0x0039}, {0x0660, 0x0669}, {0x06F0, 0x06F9}, + {0x07C0, 0x07C9}, {0x0966, 0x096F}, {0x09E6, 0x09EF}, + {0x0A66, 0x0A6F}, {0x0AE6, 0x0AEF}, {0x0B66, 0x0B6F}, + {0x0BE6, 0x0BEF}, {0x0C66, 0x0C6F}, {0x0CE6, 0x0CEF}, + {0x0D66, 0x0D6F}, {0x0DE6, 0x0DEF}, {0x0E50, 0x0E59}, + {0x0ED0, 0x0ED9}, {0x0F20, 0x0F29}, {0x1040, 0x1049}, + {0x1090, 0x1099}, {0x17E0, 0x17E9}, {0x1810, 0x1819}, + {0x1946, 0x194F}, {0x19D0, 0x19D9}, {0x1A80, 0x1A89}, + {0x1A90, 0x1A99}, {0x1B50, 0x1B59}, {0x1BB0, 0x1BB9}, + {0x1C40, 0x1C49}, {0x1C50, 0x1C59}, {0xA620, 0xA629}, + {0xA8D0, 0xA8D9}, {0xA900, 0xA909}, {0xA9D0, 0xA9D9}, + {0xA9F0, 0xA9F9}, {0xAA50, 0xAA59}, {0xABF0, 0xABF9}, + {0xFF10, 0xFF19}, {0x104A0, 0x104A9}, {0x10D30, 0x10D39}, + {0x11066, 0x1106F}, {0x110F0, 0x110F9}, {0x11136, 0x1113F}, + {0x111D0, 0x111D9}, {0x112F0, 0x112F9}, {0x11450, 0x11459}, + {0x114D0, 0x114D9}, {0x11650, 0x11659}, {0x116C0, 0x116C9}, + {0x11730, 0x11739}, {0x118E0, 0x118E9}, {0x11950, 0x11959}, + {0x11C50, 0x11C59}, {0x11D50, 0x11D59}, {0x11DA0, 0x11DA9}, + {0x11F50, 0x11F59}, {0x16A60, 0x16A69}, {0x16AC0, 0x16AC9}, + {0x16B50, 0x16B59}, {0x1D7CE, 0x1D7FF}, {0x1E140, 0x1E149}, + {0x1E2F0, 0x1E2F9}, {0x1E4F0, 0x1E4F9}, {0x1E950, 0x1E959}, + {0x1FBF0, 0x1FBF9}, + // General_Category: Nl + {0x16EE, 0x16F0}, {0x2160, 0x2182}, {0x2185, 0x2188}, + {0x3007, 0x3007}, {0x3021, 0x3029}, {0x3038, 0x303A}, + {0xA6E6, 0xA6EF}, {0x10140, 0x10174}, {0x10341, 0x10341}, + {0x1034A, 0x1034A}, {0x103D1, 0x103D5}, {0x12400, 0x1246E}, + // General_Category: No + {0x00B2, 0x00B3}, {0x00B9, 0x00B9}, {0x00BC, 0x00BE}, + {0x09F4, 0x09F9}, {0x0B72, 0x0B77}, {0x0BF0, 0x0BF2}, + {0x0C78, 0x0C7E}, {0x0D58, 0x0D5E}, {0x0D70, 0x0D78}, + {0x0F2A, 0x0F33}, {0x1369, 0x137C}, {0x17F0, 0x17F9}, + {0x19DA, 0x19DA}, {0x2070, 0x2070}, {0x2074, 0x2079}, + {0x2080, 0x2089}, {0x2150, 0x215F}, {0x2189, 0x2189}, + {0x2460, 0x249B}, {0x24EA, 0x24FF}, {0x2776, 0x2793}, + {0x2CFD, 0x2CFD}, {0x3192, 0x3195}, {0x3220, 0x3229}, + {0x3248, 0x324F}, {0x3251, 0x325F}, {0x3280, 0x3289}, + {0x32B1, 0x32BF}, {0xA830, 0xA835}, {0x10107, 0x10133}, + {0x10175, 0x10178}, {0x1018A, 0x1018B}, {0x102E1, 0x102FB}, + {0x10320, 0x10323}, {0x10858, 0x1085F}, {0x10879, 0x1087F}, + {0x108A7, 0x108AF}, {0x108FB, 0x108FF}, {0x10916, 0x1091B}, + {0x109BC, 0x109BD}, {0x109C0, 0x109CF}, {0x109D2, 0x109FF}, + {0x10A40, 0x10A48}, {0x10A7D, 0x10A7E}, {0x10A9D, 0x10A9F}, + {0x10AEB, 0x10AEF}, {0x10B58, 0x10B5F}, {0x10B78, 0x10B7F}, + {0x10BA9, 0x10BAF}, {0x10CFA, 0x10CFF}, {0x10E60, 0x10E7E}, + {0x10F1D, 0x10F26}, {0x10F51, 0x10F54}, {0x10FC5, 0x10FCB}, + {0x11052, 0x11065}, {0x111E1, 0x111F4}, {0x1173A, 0x1173B}, + {0x118EA, 0x118F2}, {0x11C5A, 0x11C6C}, {0x11FC0, 0x11FD4}, + {0x16B5B, 0x16B61}, {0x16E80, 0x16E96}, {0x1D2C0, 0x1D2D3}, + {0x1D2E0, 0x1D2F3}, {0x1D360, 0x1D378}, {0x1E8C7, 0x1E8CF}, + {0x1EC71, 0x1ECAB}, {0x1ECAD, 0x1ECAF}, {0x1ECB1, 0x1ECB4}, + {0x1ED01, 0x1ED2D}, {0x1ED2F, 0x1ED3D}, {0x1F100, 0x1F10C}, + // General_Category: P + // General_Category: Pc + {0x005F, 0x005F}, {0x203F, 0x2040}, {0x2054, 0x2054}, + {0xFE33, 0xFE34}, {0xFE4D, 0xFE4F}, {0xFF3F, 0xFF3F}, + // General_Category: Pd + {0x002D, 0x002D}, {0x058A, 0x058A}, {0x05BE, 0x05BE}, + {0x1400, 0x1400}, {0x1806, 0x1806}, {0x2010, 0x2015}, + {0x2E17, 0x2E17}, {0x2E1A, 0x2E1A}, {0x2E3A, 0x2E3B}, + {0x2E40, 0x2E40}, {0x2E5D, 0x2E5D}, {0x301C, 0x301C}, + {0x3030, 0x3030}, {0x30A0, 0x30A0}, {0xFE31, 0xFE32}, + {0xFE58, 0xFE58}, {0xFE63, 0xFE63}, {0xFF0D, 0xFF0D}, + {0x10EAD, 0x10EAD}, + // General_Category: Pe + {0x0029, 0x0029}, {0x005D, 0x005D}, {0x007D, 0x007D}, + {0x0F3B, 0x0F3B}, {0x0F3D, 0x0F3D}, {0x169C, 0x169C}, + {0x2046, 0x2046}, {0x207E, 0x207E}, {0x208E, 0x208E}, + {0x2309, 0x2309}, {0x230B, 0x230B}, {0x232A, 0x232A}, + {0x2769, 0x2769}, {0x276B, 0x276B}, {0x276D, 0x276D}, + {0x276F, 0x276F}, {0x2771, 0x2771}, {0x2773, 0x2773}, + {0x2775, 0x2775}, {0x27C6, 0x27C6}, {0x27E7, 0x27E7}, + {0x27E9, 0x27E9}, {0x27EB, 0x27EB}, {0x27ED, 0x27ED}, + {0x27EF, 0x27EF}, {0x2984, 0x2984}, {0x2986, 0x2986}, + {0x2988, 0x2988}, {0x298A, 0x298A}, {0x298C, 0x298C}, + {0x298E, 0x298E}, {0x2990, 0x2990}, {0x2992, 0x2992}, + {0x2994, 0x2994}, {0x2996, 0x2996}, {0x2998, 0x2998}, + {0x29D9, 0x29D9}, {0x29DB, 0x29DB}, {0x29FD, 0x29FD}, + {0x2E23, 0x2E23}, {0x2E25, 0x2E25}, {0x2E27, 0x2E27}, + {0x2E29, 0x2E29}, {0x2E56, 0x2E56}, {0x2E58, 0x2E58}, + {0x2E5A, 0x2E5A}, {0x2E5C, 0x2E5C}, {0x3009, 0x3009}, + {0x300B, 0x300B}, {0x300D, 0x300D}, {0x300F, 0x300F}, + {0x3011, 0x3011}, {0x3015, 0x3015}, {0x3017, 0x3017}, + {0x3019, 0x3019}, {0x301B, 0x301B}, {0x301E, 0x301F}, + {0xFD3E, 0xFD3E}, {0xFE18, 0xFE18}, {0xFE36, 0xFE36}, + {0xFE38, 0xFE38}, {0xFE3A, 0xFE3A}, {0xFE3C, 0xFE3C}, + {0xFE3E, 0xFE3E}, {0xFE40, 0xFE40}, {0xFE42, 0xFE42}, + {0xFE44, 0xFE44}, {0xFE48, 0xFE48}, {0xFE5A, 0xFE5A}, + {0xFE5C, 0xFE5C}, {0xFE5E, 0xFE5E}, {0xFF09, 0xFF09}, + {0xFF3D, 0xFF3D}, {0xFF5D, 0xFF5D}, {0xFF60, 0xFF60}, + {0xFF63, 0xFF63}, + // General_Category: Pf + {0x00BB, 0x00BB}, {0x2019, 0x2019}, {0x201D, 0x201D}, + {0x203A, 0x203A}, {0x2E03, 0x2E03}, {0x2E05, 0x2E05}, + {0x2E0A, 0x2E0A}, {0x2E0D, 0x2E0D}, {0x2E1D, 0x2E1D}, + {0x2E21, 0x2E21}, + // General_Category: Pi + {0x00AB, 0x00AB}, {0x2018, 0x2018}, {0x201B, 0x201C}, + {0x201F, 0x201F}, {0x2039, 0x2039}, {0x2E02, 0x2E02}, + {0x2E04, 0x2E04}, {0x2E09, 0x2E09}, {0x2E0C, 0x2E0C}, + {0x2E1C, 0x2E1C}, {0x2E20, 0x2E20}, + // General_Category: Po + {0x0021, 0x0023}, {0x0025, 0x0027}, {0x002A, 0x002A}, + {0x002C, 0x002C}, {0x002E, 0x002F}, {0x003A, 0x003B}, + {0x003F, 0x0040}, {0x005C, 0x005C}, {0x00A1, 0x00A1}, + {0x00A7, 0x00A7}, {0x00B6, 0x00B7}, {0x00BF, 0x00BF}, + {0x037E, 0x037E}, {0x0387, 0x0387}, {0x055A, 0x055F}, + {0x0589, 0x0589}, {0x05C0, 0x05C0}, {0x05C3, 0x05C3}, + {0x05C6, 0x05C6}, {0x05F3, 0x05F4}, {0x0609, 0x060A}, + {0x060C, 0x060D}, {0x061B, 0x061B}, {0x061D, 0x061F}, + {0x066A, 0x066D}, {0x06D4, 0x06D4}, {0x0700, 0x070D}, + {0x07F7, 0x07F9}, {0x0830, 0x083E}, {0x085E, 0x085E}, + {0x0964, 0x0965}, {0x0970, 0x0970}, {0x09FD, 0x09FD}, + {0x0A76, 0x0A76}, {0x0AF0, 0x0AF0}, {0x0C77, 0x0C77}, + {0x0C84, 0x0C84}, {0x0DF4, 0x0DF4}, {0x0E4F, 0x0E4F}, + {0x0E5A, 0x0E5B}, {0x0F04, 0x0F12}, {0x0F14, 0x0F14}, + {0x0F85, 0x0F85}, {0x0FD0, 0x0FD4}, {0x0FD9, 0x0FDA}, + {0x104A, 0x104F}, {0x10FB, 0x10FB}, {0x1360, 0x1368}, + {0x166E, 0x166E}, {0x16EB, 0x16ED}, {0x1735, 0x1736}, + {0x17D4, 0x17D6}, {0x17D8, 0x17DA}, {0x1800, 0x1805}, + {0x1807, 0x180A}, {0x1944, 0x1945}, {0x1A1E, 0x1A1F}, + {0x1AA0, 0x1AA6}, {0x1AA8, 0x1AAD}, {0x1B5A, 0x1B60}, + {0x1B7D, 0x1B7E}, {0x1BFC, 0x1BFF}, {0x1C3B, 0x1C3F}, + {0x1C7E, 0x1C7F}, {0x1CC0, 0x1CC7}, {0x1CD3, 0x1CD3}, + {0x2016, 0x2017}, {0x2020, 0x2027}, {0x2030, 0x2038}, + {0x203B, 0x203E}, {0x2041, 0x2043}, {0x2047, 0x2051}, + {0x2053, 0x2053}, {0x2055, 0x205E}, {0x2CF9, 0x2CFC}, + {0x2CFE, 0x2CFF}, {0x2D70, 0x2D70}, {0x2E00, 0x2E01}, + {0x2E06, 0x2E08}, {0x2E0B, 0x2E0B}, {0x2E0E, 0x2E16}, + {0x2E18, 0x2E19}, {0x2E1B, 0x2E1B}, {0x2E1E, 0x2E1F}, + {0x2E2A, 0x2E2E}, {0x2E30, 0x2E39}, {0x2E3C, 0x2E3F}, + {0x2E41, 0x2E41}, {0x2E43, 0x2E4F}, {0x2E52, 0x2E54}, + {0x3001, 0x3003}, {0x303D, 0x303D}, {0x30FB, 0x30FB}, + {0xA4FE, 0xA4FF}, {0xA60D, 0xA60F}, {0xA673, 0xA673}, + {0xA67E, 0xA67E}, {0xA6F2, 0xA6F7}, {0xA874, 0xA877}, + {0xA8CE, 0xA8CF}, {0xA8F8, 0xA8FA}, {0xA8FC, 0xA8FC}, + {0xA92E, 0xA92F}, {0xA95F, 0xA95F}, {0xA9C1, 0xA9CD}, + {0xA9DE, 0xA9DF}, {0xAA5C, 0xAA5F}, {0xAADE, 0xAADF}, + {0xAAF0, 0xAAF1}, {0xABEB, 0xABEB}, {0xFE10, 0xFE16}, + {0xFE19, 0xFE19}, {0xFE30, 0xFE30}, {0xFE45, 0xFE46}, + {0xFE49, 0xFE4C}, {0xFE50, 0xFE52}, {0xFE54, 0xFE57}, + {0xFE5F, 0xFE61}, {0xFE68, 0xFE68}, {0xFE6A, 0xFE6B}, + {0xFF01, 0xFF03}, {0xFF05, 0xFF07}, {0xFF0A, 0xFF0A}, + {0xFF0C, 0xFF0C}, {0xFF0E, 0xFF0F}, {0xFF1A, 0xFF1B}, + {0xFF1F, 0xFF20}, {0xFF3C, 0xFF3C}, {0xFF61, 0xFF61}, + {0xFF64, 0xFF65}, {0x10100, 0x10102}, {0x1039F, 0x1039F}, + {0x103D0, 0x103D0}, {0x1056F, 0x1056F}, {0x10857, 0x10857}, + {0x1091F, 0x1091F}, {0x1093F, 0x1093F}, {0x10A50, 0x10A58}, + {0x10A7F, 0x10A7F}, {0x10AF0, 0x10AF6}, {0x10B39, 0x10B3F}, + {0x10B99, 0x10B9C}, {0x10F55, 0x10F59}, {0x10F86, 0x10F89}, + {0x11047, 0x1104D}, {0x110BB, 0x110BC}, {0x110BE, 0x110C1}, + {0x11140, 0x11143}, {0x11174, 0x11175}, {0x111C5, 0x111C8}, + {0x111CD, 0x111CD}, {0x111DB, 0x111DB}, {0x111DD, 0x111DF}, + {0x11238, 0x1123D}, {0x112A9, 0x112A9}, {0x1144B, 0x1144F}, + {0x1145A, 0x1145B}, {0x1145D, 0x1145D}, {0x114C6, 0x114C6}, + {0x115C1, 0x115D7}, {0x11641, 0x11643}, {0x11660, 0x1166C}, + {0x116B9, 0x116B9}, {0x1173C, 0x1173E}, {0x1183B, 0x1183B}, + {0x11944, 0x11946}, {0x119E2, 0x119E2}, {0x11A3F, 0x11A46}, + {0x11A9A, 0x11A9C}, {0x11A9E, 0x11AA2}, {0x11B00, 0x11B09}, + {0x11C41, 0x11C45}, {0x11C70, 0x11C71}, {0x11EF7, 0x11EF8}, + {0x11F43, 0x11F4F}, {0x11FFF, 0x11FFF}, {0x12470, 0x12474}, + {0x12FF1, 0x12FF2}, {0x16A6E, 0x16A6F}, {0x16AF5, 0x16AF5}, + {0x16B37, 0x16B3B}, {0x16B44, 0x16B44}, {0x16E97, 0x16E9A}, + {0x16FE2, 0x16FE2}, {0x1BC9F, 0x1BC9F}, {0x1DA87, 0x1DA8B}, + {0x1E95E, 0x1E95F}, + // General_Category: Ps + {0x0028, 0x0028}, {0x005B, 0x005B}, {0x007B, 0x007B}, + {0x0F3A, 0x0F3A}, {0x0F3C, 0x0F3C}, {0x169B, 0x169B}, + {0x201A, 0x201A}, {0x201E, 0x201E}, {0x2045, 0x2045}, + {0x207D, 0x207D}, {0x208D, 0x208D}, {0x2308, 0x2308}, + {0x230A, 0x230A}, {0x2329, 0x2329}, {0x2768, 0x2768}, + {0x276A, 0x276A}, {0x276C, 0x276C}, {0x276E, 0x276E}, + {0x2770, 0x2770}, {0x2772, 0x2772}, {0x2774, 0x2774}, + {0x27C5, 0x27C5}, {0x27E6, 0x27E6}, {0x27E8, 0x27E8}, + {0x27EA, 0x27EA}, {0x27EC, 0x27EC}, {0x27EE, 0x27EE}, + {0x2983, 0x2983}, {0x2985, 0x2985}, {0x2987, 0x2987}, + {0x2989, 0x2989}, {0x298B, 0x298B}, {0x298D, 0x298D}, + {0x298F, 0x298F}, {0x2991, 0x2991}, {0x2993, 0x2993}, + {0x2995, 0x2995}, {0x2997, 0x2997}, {0x29D8, 0x29D8}, + {0x29DA, 0x29DA}, {0x29FC, 0x29FC}, {0x2E22, 0x2E22}, + {0x2E24, 0x2E24}, {0x2E26, 0x2E26}, {0x2E28, 0x2E28}, + {0x2E42, 0x2E42}, {0x2E55, 0x2E55}, {0x2E57, 0x2E57}, + {0x2E59, 0x2E59}, {0x2E5B, 0x2E5B}, {0x3008, 0x3008}, + {0x300A, 0x300A}, {0x300C, 0x300C}, {0x300E, 0x300E}, + {0x3010, 0x3010}, {0x3014, 0x3014}, {0x3016, 0x3016}, + {0x3018, 0x3018}, {0x301A, 0x301A}, {0x301D, 0x301D}, + {0xFD3F, 0xFD3F}, {0xFE17, 0xFE17}, {0xFE35, 0xFE35}, + {0xFE37, 0xFE37}, {0xFE39, 0xFE39}, {0xFE3B, 0xFE3B}, + {0xFE3D, 0xFE3D}, {0xFE3F, 0xFE3F}, {0xFE41, 0xFE41}, + {0xFE43, 0xFE43}, {0xFE47, 0xFE47}, {0xFE59, 0xFE59}, + {0xFE5B, 0xFE5B}, {0xFE5D, 0xFE5D}, {0xFF08, 0xFF08}, + {0xFF3B, 0xFF3B}, {0xFF5B, 0xFF5B}, {0xFF5F, 0xFF5F}, + {0xFF62, 0xFF62}, + // General_Category: S + // General_Category: Sc + {0x0024, 0x0024}, {0x00A2, 0x00A5}, {0x058F, 0x058F}, + {0x060B, 0x060B}, {0x07FE, 0x07FF}, {0x09F2, 0x09F3}, + {0x09FB, 0x09FB}, {0x0AF1, 0x0AF1}, {0x0BF9, 0x0BF9}, + {0x0E3F, 0x0E3F}, {0x17DB, 0x17DB}, {0x20A0, 0x20C0}, + {0xA838, 0xA838}, {0xFDFC, 0xFDFC}, {0xFE69, 0xFE69}, + {0xFF04, 0xFF04}, {0xFFE0, 0xFFE1}, {0xFFE5, 0xFFE6}, + {0x11FDD, 0x11FE0}, {0x1E2FF, 0x1E2FF}, {0x1ECB0, 0x1ECB0}, + // General_Category: Sk + {0x005E, 0x005E}, {0x0060, 0x0060}, {0x00A8, 0x00A8}, + {0x00AF, 0x00AF}, {0x00B4, 0x00B4}, {0x00B8, 0x00B8}, + {0x02C2, 0x02C5}, {0x02D2, 0x02DF}, {0x02E5, 0x02EB}, + {0x02ED, 0x02ED}, {0x02EF, 0x02FF}, {0x0375, 0x0375}, + {0x0384, 0x0385}, {0x0888, 0x0888}, {0x1FBD, 0x1FBD}, + {0x1FBF, 0x1FC1}, {0x1FCD, 0x1FCF}, {0x1FDD, 0x1FDF}, + {0x1FED, 0x1FEF}, {0x1FFD, 0x1FFE}, {0x309B, 0x309C}, + {0xA700, 0xA716}, {0xA720, 0xA721}, {0xA789, 0xA78A}, + {0xAB5B, 0xAB5B}, {0xAB6A, 0xAB6B}, {0xFBB2, 0xFBC2}, + {0xFF3E, 0xFF3E}, {0xFF40, 0xFF40}, {0xFFE3, 0xFFE3}, + {0x1F3FB, 0x1F3FF}, + // General_Category: Sm + {0x002B, 0x002B}, {0x003C, 0x003E}, {0x007C, 0x007C}, + {0x007E, 0x007E}, {0x00AC, 0x00AC}, {0x00B1, 0x00B1}, + {0x00D7, 0x00D7}, {0x00F7, 0x00F7}, {0x03F6, 0x03F6}, + {0x0606, 0x0608}, {0x2044, 0x2044}, {0x2052, 0x2052}, + {0x207A, 0x207C}, {0x208A, 0x208C}, {0x2118, 0x2118}, + {0x2140, 0x2144}, {0x214B, 0x214B}, {0x2190, 0x2194}, + {0x219A, 0x219B}, {0x21A0, 0x21A0}, {0x21A3, 0x21A3}, + {0x21A6, 0x21A6}, {0x21AE, 0x21AE}, {0x21CE, 0x21CF}, + {0x21D2, 0x21D2}, {0x21D4, 0x21D4}, {0x21F4, 0x22FF}, + {0x2320, 0x2321}, {0x237C, 0x237C}, {0x239B, 0x23B3}, + {0x23DC, 0x23E1}, {0x25B7, 0x25B7}, {0x25C1, 0x25C1}, + {0x25F8, 0x25FF}, {0x266F, 0x266F}, {0x27C0, 0x27C4}, + {0x27C7, 0x27E5}, {0x27F0, 0x27FF}, {0x2900, 0x2982}, + {0x2999, 0x29D7}, {0x29DC, 0x29FB}, {0x29FE, 0x2AFF}, + {0x2B30, 0x2B44}, {0x2B47, 0x2B4C}, {0xFB29, 0xFB29}, + {0xFE62, 0xFE62}, {0xFE64, 0xFE66}, {0xFF0B, 0xFF0B}, + {0xFF1C, 0xFF1E}, {0xFF5C, 0xFF5C}, {0xFF5E, 0xFF5E}, + {0xFFE2, 0xFFE2}, {0xFFE9, 0xFFEC}, {0x1D6C1, 0x1D6C1}, + {0x1D6DB, 0x1D6DB}, {0x1D6FB, 0x1D6FB}, {0x1D715, 0x1D715}, + {0x1D735, 0x1D735}, {0x1D74F, 0x1D74F}, {0x1D76F, 0x1D76F}, + {0x1D789, 0x1D789}, {0x1D7A9, 0x1D7A9}, {0x1D7C3, 0x1D7C3}, + {0x1EEF0, 0x1EEF1}, + // General_Category: So + {0x00A6, 0x00A6}, {0x00A9, 0x00A9}, {0x00AE, 0x00AE}, + {0x00B0, 0x00B0}, {0x0482, 0x0482}, {0x058D, 0x058E}, + {0x060E, 0x060F}, {0x06DE, 0x06DE}, {0x06E9, 0x06E9}, + {0x06FD, 0x06FE}, {0x07F6, 0x07F6}, {0x09FA, 0x09FA}, + {0x0B70, 0x0B70}, {0x0BF3, 0x0BF8}, {0x0BFA, 0x0BFA}, + {0x0C7F, 0x0C7F}, {0x0D4F, 0x0D4F}, {0x0D79, 0x0D79}, + {0x0F01, 0x0F03}, {0x0F13, 0x0F13}, {0x0F15, 0x0F17}, + {0x0F1A, 0x0F1F}, {0x0F34, 0x0F34}, {0x0F36, 0x0F36}, + {0x0F38, 0x0F38}, {0x0FBE, 0x0FC5}, {0x0FC7, 0x0FCC}, + {0x0FCE, 0x0FCF}, {0x0FD5, 0x0FD8}, {0x109E, 0x109F}, + {0x1390, 0x1399}, {0x166D, 0x166D}, {0x1940, 0x1940}, + {0x19DE, 0x19FF}, {0x1B61, 0x1B6A}, {0x1B74, 0x1B7C}, + {0x2100, 0x2101}, {0x2103, 0x2106}, {0x2108, 0x2109}, + {0x2114, 0x2114}, {0x2116, 0x2117}, {0x211E, 0x2123}, + {0x2125, 0x2125}, {0x2127, 0x2127}, {0x2129, 0x2129}, + {0x212E, 0x212E}, {0x213A, 0x213B}, {0x214A, 0x214A}, + {0x214C, 0x214D}, {0x214F, 0x214F}, {0x218A, 0x218B}, + {0x2195, 0x2199}, {0x219C, 0x219F}, {0x21A1, 0x21A2}, + {0x21A4, 0x21A5}, {0x21A7, 0x21AD}, {0x21AF, 0x21CD}, + {0x21D0, 0x21D1}, {0x21D3, 0x21D3}, {0x21D5, 0x21F3}, + {0x2300, 0x2307}, {0x230C, 0x231F}, {0x2322, 0x2328}, + {0x232B, 0x237B}, {0x237D, 0x239A}, {0x23B4, 0x23DB}, + {0x23E2, 0x2426}, {0x2440, 0x244A}, {0x249C, 0x24E9}, + {0x2500, 0x25B6}, {0x25B8, 0x25C0}, {0x25C2, 0x25F7}, + {0x2600, 0x266E}, {0x2670, 0x2767}, {0x2794, 0x27BF}, + {0x2800, 0x28FF}, {0x2B00, 0x2B2F}, {0x2B45, 0x2B46}, + {0x2B4D, 0x2B73}, {0x2B76, 0x2B95}, {0x2B97, 0x2BFF}, + {0x2CE5, 0x2CEA}, {0x2E50, 0x2E51}, {0x2E80, 0x2E99}, + {0x2E9B, 0x2EF3}, {0x2F00, 0x2FD5}, {0x2FF0, 0x2FFF}, + {0x3004, 0x3004}, {0x3012, 0x3013}, {0x3020, 0x3020}, + {0x3036, 0x3037}, {0x303E, 0x303F}, {0x3190, 0x3191}, + {0x3196, 0x319F}, {0x31C0, 0x31E3}, {0x31EF, 0x31EF}, + {0x3200, 0x321E}, {0x322A, 0x3247}, {0x3250, 0x3250}, + {0x3260, 0x327F}, {0x328A, 0x32B0}, {0x32C0, 0x33FF}, + {0x4DC0, 0x4DFF}, {0xA490, 0xA4C6}, {0xA828, 0xA82B}, + {0xA836, 0xA837}, {0xA839, 0xA839}, {0xAA77, 0xAA79}, + {0xFD40, 0xFD4F}, {0xFDCF, 0xFDCF}, {0xFDFD, 0xFDFF}, + {0xFFE4, 0xFFE4}, {0xFFE8, 0xFFE8}, {0xFFED, 0xFFEE}, + {0xFFFC, 0xFFFD}, {0x10137, 0x1013F}, {0x10179, 0x10189}, + {0x1018C, 0x1018E}, {0x10190, 0x1019C}, {0x101A0, 0x101A0}, + {0x101D0, 0x101FC}, {0x10877, 0x10878}, {0x10AC8, 0x10AC8}, + {0x1173F, 0x1173F}, {0x11FD5, 0x11FDC}, {0x11FE1, 0x11FF1}, + {0x16B3C, 0x16B3F}, {0x16B45, 0x16B45}, {0x1BC9C, 0x1BC9C}, + {0x1CF50, 0x1CFC3}, {0x1D000, 0x1D0F5}, {0x1D100, 0x1D126}, + {0x1D129, 0x1D164}, {0x1D16A, 0x1D16C}, {0x1D183, 0x1D184}, + {0x1D18C, 0x1D1A9}, {0x1D1AE, 0x1D1EA}, {0x1D200, 0x1D241}, + {0x1D245, 0x1D245}, {0x1D300, 0x1D356}, {0x1D800, 0x1D9FF}, + {0x1DA37, 0x1DA3A}, {0x1DA6D, 0x1DA74}, {0x1DA76, 0x1DA83}, + {0x1DA85, 0x1DA86}, {0x1E14F, 0x1E14F}, {0x1ECAC, 0x1ECAC}, + {0x1ED2E, 0x1ED2E}, {0x1F000, 0x1F02B}, {0x1F030, 0x1F093}, + {0x1F0A0, 0x1F0AE}, {0x1F0B1, 0x1F0BF}, {0x1F0C1, 0x1F0CF}, + {0x1F0D1, 0x1F0F5}, {0x1F10D, 0x1F1AD}, {0x1F1E6, 0x1F202}, + {0x1F210, 0x1F23B}, {0x1F240, 0x1F248}, {0x1F250, 0x1F251}, + {0x1F260, 0x1F265}, {0x1F300, 0x1F3FA}, {0x1F400, 0x1F6D7}, + {0x1F6DC, 0x1F6EC}, {0x1F6F0, 0x1F6FC}, {0x1F700, 0x1F776}, + {0x1F77B, 0x1F7D9}, {0x1F7E0, 0x1F7EB}, {0x1F7F0, 0x1F7F0}, + {0x1F800, 0x1F80B}, {0x1F810, 0x1F847}, {0x1F850, 0x1F859}, + {0x1F860, 0x1F887}, {0x1F890, 0x1F8AD}, {0x1F8B0, 0x1F8B1}, + {0x1F900, 0x1FA53}, {0x1FA60, 0x1FA6D}, {0x1FA70, 0x1FA7C}, + {0x1FA80, 0x1FA88}, {0x1FA90, 0x1FABD}, {0x1FABF, 0x1FAC5}, + {0x1FACE, 0x1FADB}, {0x1FAE0, 0x1FAE8}, {0x1FAF0, 0x1FAF8}, + {0x1FB00, 0x1FB92}, {0x1FB94, 0x1FBCA}, + // General_Category: Z + // General_Category: Zl + {0x2028, 0x2028}, + // General_Category: Zp + {0x2029, 0x2029}, + // General_Category: Zs + {0x0020, 0x0020}, {0x00A0, 0x00A0}, {0x1680, 0x1680}, + {0x2000, 0x200A}, {0x202F, 0x202F}, {0x205F, 0x205F}, + {0x3000, 0x3000}, + // Binary: White_Space + {0x0009, 0x000D}, {0x0020, 0x0020}, {0x0085, 0x0085}, + {0x00A0, 0x00A0}, {0x1680, 0x1680}, {0x2000, 0x200A}, + {0x2028, 0x2029}, {0x202F, 0x202F}, {0x205F, 0x205F}, + {0x3000, 0x3000}, + // Binary: Bidi_Control + {0x061C, 0x061C}, {0x200E, 0x200F}, {0x202A, 0x202E}, + {0x2066, 0x2069}, + // Binary: Join_Control + {0x200C, 0x200D}, + // Binary: Dash + {0x002D, 0x002D}, {0x058A, 0x058A}, {0x05BE, 0x05BE}, + {0x1400, 0x1400}, {0x1806, 0x1806}, {0x2010, 0x2015}, + {0x2053, 0x2053}, {0x207B, 0x207B}, {0x208B, 0x208B}, + {0x2212, 0x2212}, {0x2E17, 0x2E17}, {0x2E1A, 0x2E1A}, + {0x2E3A, 0x2E3B}, {0x2E40, 0x2E40}, {0x2E5D, 0x2E5D}, + {0x301C, 0x301C}, {0x3030, 0x3030}, {0x30A0, 0x30A0}, + {0xFE31, 0xFE32}, {0xFE58, 0xFE58}, {0xFE63, 0xFE63}, + {0xFF0D, 0xFF0D}, {0x10EAD, 0x10EAD}, + // Binary: Quotation_Mark + {0x0022, 0x0022}, {0x0027, 0x0027}, {0x00AB, 0x00AB}, + {0x00BB, 0x00BB}, {0x2018, 0x201F}, {0x2039, 0x203A}, + {0x2E42, 0x2E42}, {0x300C, 0x300F}, {0x301D, 0x301F}, + {0xFE41, 0xFE44}, {0xFF02, 0xFF02}, {0xFF07, 0xFF07}, + {0xFF62, 0xFF63}, + // Binary: Terminal_Punctuation + {0x0021, 0x0021}, {0x002C, 0x002C}, {0x002E, 0x002E}, + {0x003A, 0x003B}, {0x003F, 0x003F}, {0x037E, 0x037E}, + {0x0387, 0x0387}, {0x0589, 0x0589}, {0x05C3, 0x05C3}, + {0x060C, 0x060C}, {0x061B, 0x061B}, {0x061D, 0x061F}, + {0x06D4, 0x06D4}, {0x0700, 0x070A}, {0x070C, 0x070C}, + {0x07F8, 0x07F9}, {0x0830, 0x083E}, {0x085E, 0x085E}, + {0x0964, 0x0965}, {0x0E5A, 0x0E5B}, {0x0F08, 0x0F08}, + {0x0F0D, 0x0F12}, {0x104A, 0x104B}, {0x1361, 0x1368}, + {0x166E, 0x166E}, {0x16EB, 0x16ED}, {0x1735, 0x1736}, + {0x17D4, 0x17D6}, {0x17DA, 0x17DA}, {0x1802, 0x1805}, + {0x1808, 0x1809}, {0x1944, 0x1945}, {0x1AA8, 0x1AAB}, + {0x1B5A, 0x1B5B}, {0x1B5D, 0x1B5F}, {0x1B7D, 0x1B7E}, + {0x1C3B, 0x1C3F}, {0x1C7E, 0x1C7F}, {0x203C, 0x203D}, + {0x2047, 0x2049}, {0x2E2E, 0x2E2E}, {0x2E3C, 0x2E3C}, + {0x2E41, 0x2E41}, {0x2E4C, 0x2E4C}, {0x2E4E, 0x2E4F}, + {0x2E53, 0x2E54}, {0x3001, 0x3002}, {0xA4FE, 0xA4FF}, + {0xA60D, 0xA60F}, {0xA6F3, 0xA6F7}, {0xA876, 0xA877}, + {0xA8CE, 0xA8CF}, {0xA92F, 0xA92F}, {0xA9C7, 0xA9C9}, + {0xAA5D, 0xAA5F}, {0xAADF, 0xAADF}, {0xAAF0, 0xAAF1}, + {0xABEB, 0xABEB}, {0xFE50, 0xFE52}, {0xFE54, 0xFE57}, + {0xFF01, 0xFF01}, {0xFF0C, 0xFF0C}, {0xFF0E, 0xFF0E}, + {0xFF1A, 0xFF1B}, {0xFF1F, 0xFF1F}, {0xFF61, 0xFF61}, + {0xFF64, 0xFF64}, {0x1039F, 0x1039F}, {0x103D0, 0x103D0}, + {0x10857, 0x10857}, {0x1091F, 0x1091F}, {0x10A56, 0x10A57}, + {0x10AF0, 0x10AF5}, {0x10B3A, 0x10B3F}, {0x10B99, 0x10B9C}, + {0x10F55, 0x10F59}, {0x10F86, 0x10F89}, {0x11047, 0x1104D}, + {0x110BE, 0x110C1}, {0x11141, 0x11143}, {0x111C5, 0x111C6}, + {0x111CD, 0x111CD}, {0x111DE, 0x111DF}, {0x11238, 0x1123C}, + {0x112A9, 0x112A9}, {0x1144B, 0x1144D}, {0x1145A, 0x1145B}, + {0x115C2, 0x115C5}, {0x115C9, 0x115D7}, {0x11641, 0x11642}, + {0x1173C, 0x1173E}, {0x11944, 0x11944}, {0x11946, 0x11946}, + {0x11A42, 0x11A43}, {0x11A9B, 0x11A9C}, {0x11AA1, 0x11AA2}, + {0x11C41, 0x11C43}, {0x11C71, 0x11C71}, {0x11EF7, 0x11EF8}, + {0x11F43, 0x11F44}, {0x12470, 0x12474}, {0x16A6E, 0x16A6F}, + {0x16AF5, 0x16AF5}, {0x16B37, 0x16B39}, {0x16B44, 0x16B44}, + {0x16E97, 0x16E98}, {0x1BC9F, 0x1BC9F}, {0x1DA87, 0x1DA8A}, + // Binary: Hex_Digit + {0x0030, 0x0039}, {0x0041, 0x0046}, {0x0061, 0x0066}, + {0xFF10, 0xFF19}, {0xFF21, 0xFF26}, {0xFF41, 0xFF46}, + // Binary: ASCII_Hex_Digit + {0x0030, 0x0039}, {0x0041, 0x0046}, {0x0061, 0x0066}, + // Binary: Ideographic + {0x3006, 0x3007}, {0x3021, 0x3029}, {0x3038, 0x303A}, + {0x3400, 0x4DBF}, {0x4E00, 0x9FFF}, {0xF900, 0xFA6D}, + {0xFA70, 0xFAD9}, {0x16FE4, 0x16FE4}, {0x17000, 0x187F7}, + {0x18800, 0x18CD5}, {0x18D00, 0x18D08}, {0x1B170, 0x1B2FB}, + {0x20000, 0x2A6DF}, {0x2A700, 0x2B739}, {0x2B740, 0x2B81D}, + {0x2B820, 0x2CEA1}, {0x2CEB0, 0x2EBE0}, {0x2EBF0, 0x2EE5D}, + {0x2F800, 0x2FA1D}, {0x30000, 0x3134A}, {0x31350, 0x323AF}, + // Binary: Diacritic + {0x005E, 0x005E}, {0x0060, 0x0060}, {0x00A8, 0x00A8}, + {0x00AF, 0x00AF}, {0x00B4, 0x00B4}, {0x00B7, 0x00B8}, + {0x02B0, 0x034E}, {0x0350, 0x0357}, {0x035D, 0x0362}, + {0x0374, 0x0375}, {0x037A, 0x037A}, {0x0384, 0x0385}, + {0x0483, 0x0487}, {0x0559, 0x0559}, {0x0591, 0x05A1}, + {0x05A3, 0x05BD}, {0x05BF, 0x05BF}, {0x05C1, 0x05C2}, + {0x05C4, 0x05C4}, {0x064B, 0x0652}, {0x0657, 0x0658}, + {0x06DF, 0x06E0}, {0x06E5, 0x06E6}, {0x06EA, 0x06EC}, + {0x0730, 0x074A}, {0x07A6, 0x07B0}, {0x07EB, 0x07F5}, + {0x0818, 0x0819}, {0x0898, 0x089F}, {0x08C9, 0x08D2}, + {0x08E3, 0x08FE}, {0x093C, 0x093C}, {0x094D, 0x094D}, + {0x0951, 0x0954}, {0x0971, 0x0971}, {0x09BC, 0x09BC}, + {0x09CD, 0x09CD}, {0x0A3C, 0x0A3C}, {0x0A4D, 0x0A4D}, + {0x0ABC, 0x0ABC}, {0x0ACD, 0x0ACD}, {0x0AFD, 0x0AFF}, + {0x0B3C, 0x0B3C}, {0x0B4D, 0x0B4D}, {0x0B55, 0x0B55}, + {0x0BCD, 0x0BCD}, {0x0C3C, 0x0C3C}, {0x0C4D, 0x0C4D}, + {0x0CBC, 0x0CBC}, {0x0CCD, 0x0CCD}, {0x0D3B, 0x0D3C}, + {0x0D4D, 0x0D4D}, {0x0DCA, 0x0DCA}, {0x0E47, 0x0E4C}, + {0x0E4E, 0x0E4E}, {0x0EBA, 0x0EBA}, {0x0EC8, 0x0ECC}, + {0x0F18, 0x0F19}, {0x0F35, 0x0F35}, {0x0F37, 0x0F37}, + {0x0F39, 0x0F39}, {0x0F3E, 0x0F3F}, {0x0F82, 0x0F84}, + {0x0F86, 0x0F87}, {0x0FC6, 0x0FC6}, {0x1037, 0x1037}, + {0x1039, 0x103A}, {0x1063, 0x1064}, {0x1069, 0x106D}, + {0x1087, 0x108D}, {0x108F, 0x108F}, {0x109A, 0x109B}, + {0x135D, 0x135F}, {0x1714, 0x1715}, {0x17C9, 0x17D3}, + {0x17DD, 0x17DD}, {0x1939, 0x193B}, {0x1A75, 0x1A7C}, + {0x1A7F, 0x1A7F}, {0x1AB0, 0x1ABE}, {0x1AC1, 0x1ACB}, + {0x1B34, 0x1B34}, {0x1B44, 0x1B44}, {0x1B6B, 0x1B73}, + {0x1BAA, 0x1BAB}, {0x1C36, 0x1C37}, {0x1C78, 0x1C7D}, + {0x1CD0, 0x1CE8}, {0x1CED, 0x1CED}, {0x1CF4, 0x1CF4}, + {0x1CF7, 0x1CF9}, {0x1D2C, 0x1D6A}, {0x1DC4, 0x1DCF}, + {0x1DF5, 0x1DFF}, {0x1FBD, 0x1FBD}, {0x1FBF, 0x1FC1}, + {0x1FCD, 0x1FCF}, {0x1FDD, 0x1FDF}, {0x1FED, 0x1FEF}, + {0x1FFD, 0x1FFE}, {0x2CEF, 0x2CF1}, {0x2E2F, 0x2E2F}, + {0x302A, 0x302F}, {0x3099, 0x309C}, {0x30FC, 0x30FC}, + {0xA66F, 0xA66F}, {0xA67C, 0xA67D}, {0xA67F, 0xA67F}, + {0xA69C, 0xA69D}, {0xA6F0, 0xA6F1}, {0xA700, 0xA721}, + {0xA788, 0xA78A}, {0xA7F8, 0xA7F9}, {0xA8C4, 0xA8C4}, + {0xA8E0, 0xA8F1}, {0xA92B, 0xA92E}, {0xA953, 0xA953}, + {0xA9B3, 0xA9B3}, {0xA9C0, 0xA9C0}, {0xA9E5, 0xA9E5}, + {0xAA7B, 0xAA7D}, {0xAABF, 0xAAC2}, {0xAAF6, 0xAAF6}, + {0xAB5B, 0xAB5F}, {0xAB69, 0xAB6B}, {0xABEC, 0xABED}, + {0xFB1E, 0xFB1E}, {0xFE20, 0xFE2F}, {0xFF3E, 0xFF3E}, + {0xFF40, 0xFF40}, {0xFF70, 0xFF70}, {0xFF9E, 0xFF9F}, + {0xFFE3, 0xFFE3}, {0x102E0, 0x102E0}, {0x10780, 0x10785}, + {0x10787, 0x107B0}, {0x107B2, 0x107BA}, {0x10AE5, 0x10AE6}, + {0x10D22, 0x10D27}, {0x10EFD, 0x10EFF}, {0x10F46, 0x10F50}, + {0x10F82, 0x10F85}, {0x11046, 0x11046}, {0x11070, 0x11070}, + {0x110B9, 0x110BA}, {0x11133, 0x11134}, {0x11173, 0x11173}, + {0x111C0, 0x111C0}, {0x111CA, 0x111CC}, {0x11235, 0x11236}, + {0x112E9, 0x112EA}, {0x1133C, 0x1133C}, {0x1134D, 0x1134D}, + {0x11366, 0x1136C}, {0x11370, 0x11374}, {0x11442, 0x11442}, + {0x11446, 0x11446}, {0x114C2, 0x114C3}, {0x115BF, 0x115C0}, + {0x1163F, 0x1163F}, {0x116B6, 0x116B7}, {0x1172B, 0x1172B}, + {0x11839, 0x1183A}, {0x1193D, 0x1193E}, {0x11943, 0x11943}, + {0x119E0, 0x119E0}, {0x11A34, 0x11A34}, {0x11A47, 0x11A47}, + {0x11A99, 0x11A99}, {0x11C3F, 0x11C3F}, {0x11D42, 0x11D42}, + {0x11D44, 0x11D45}, {0x11D97, 0x11D97}, {0x13447, 0x13455}, + {0x16AF0, 0x16AF4}, {0x16B30, 0x16B36}, {0x16F8F, 0x16F9F}, + {0x16FF0, 0x16FF1}, {0x1AFF0, 0x1AFF3}, {0x1AFF5, 0x1AFFB}, + {0x1AFFD, 0x1AFFE}, {0x1CF00, 0x1CF2D}, {0x1CF30, 0x1CF46}, + {0x1D167, 0x1D169}, {0x1D16D, 0x1D172}, {0x1D17B, 0x1D182}, + {0x1D185, 0x1D18B}, {0x1D1AA, 0x1D1AD}, {0x1E030, 0x1E06D}, + {0x1E130, 0x1E136}, {0x1E2AE, 0x1E2AE}, {0x1E2EC, 0x1E2EF}, + {0x1E8D0, 0x1E8D6}, {0x1E944, 0x1E946}, {0x1E948, 0x1E94A}, + // Binary: Extender + {0x00B7, 0x00B7}, {0x02D0, 0x02D1}, {0x0640, 0x0640}, + {0x07FA, 0x07FA}, {0x0B55, 0x0B55}, {0x0E46, 0x0E46}, + {0x0EC6, 0x0EC6}, {0x180A, 0x180A}, {0x1843, 0x1843}, + {0x1AA7, 0x1AA7}, {0x1C36, 0x1C36}, {0x1C7B, 0x1C7B}, + {0x3005, 0x3005}, {0x3031, 0x3035}, {0x309D, 0x309E}, + {0x30FC, 0x30FE}, {0xA015, 0xA015}, {0xA60C, 0xA60C}, + {0xA9CF, 0xA9CF}, {0xA9E6, 0xA9E6}, {0xAA70, 0xAA70}, + {0xAADD, 0xAADD}, {0xAAF3, 0xAAF4}, {0xFF70, 0xFF70}, + {0x10781, 0x10782}, {0x1135D, 0x1135D}, {0x115C6, 0x115C8}, + {0x11A98, 0x11A98}, {0x16B42, 0x16B43}, {0x16FE0, 0x16FE1}, + {0x16FE3, 0x16FE3}, {0x1E13C, 0x1E13D}, {0x1E944, 0x1E946}, + // Binary: Noncharacter_Code_Point + {0xFDD0, 0xFDEF}, {0xFFFE, 0xFFFF}, {0x1FFFE, 0x1FFFF}, + {0x2FFFE, 0x2FFFF}, {0x3FFFE, 0x3FFFF}, {0x4FFFE, 0x4FFFF}, + {0x5FFFE, 0x5FFFF}, {0x6FFFE, 0x6FFFF}, {0x7FFFE, 0x7FFFF}, + {0x8FFFE, 0x8FFFF}, {0x9FFFE, 0x9FFFF}, {0xAFFFE, 0xAFFFF}, + {0xBFFFE, 0xBFFFF}, {0xCFFFE, 0xCFFFF}, {0xDFFFE, 0xDFFFF}, + {0xEFFFE, 0xEFFFF}, {0xFFFFE, 0xFFFFF}, {0x10FFFE, 0x10FFFF}, + // Binary: IDS_Binary_Operator + {0x2FF0, 0x2FF1}, {0x2FF4, 0x2FFD}, {0x31EF, 0x31EF}, + // Binary: IDS_Trinary_Operator + {0x2FF2, 0x2FF3}, + // Binary: Radical + {0x2E80, 0x2E99}, {0x2E9B, 0x2EF3}, {0x2F00, 0x2FD5}, + // Binary: Unified_Ideograph + {0x3400, 0x4DBF}, {0x4E00, 0x9FFF}, {0xFA0E, 0xFA0F}, + {0xFA11, 0xFA11}, {0xFA13, 0xFA14}, {0xFA1F, 0xFA1F}, + {0xFA21, 0xFA21}, {0xFA23, 0xFA24}, {0xFA27, 0xFA29}, + {0x20000, 0x2A6DF}, {0x2A700, 0x2B739}, {0x2B740, 0x2B81D}, + {0x2B820, 0x2CEA1}, {0x2CEB0, 0x2EBE0}, {0x2EBF0, 0x2EE5D}, + {0x30000, 0x3134A}, {0x31350, 0x323AF}, + // Binary: Deprecated + {0x0149, 0x0149}, {0x0673, 0x0673}, {0x0F77, 0x0F77}, + {0x0F79, 0x0F79}, {0x17A3, 0x17A4}, {0x206A, 0x206F}, + {0x2329, 0x232A}, {0xE0001, 0xE0001}, + // Binary: Soft_Dotted + {0x0069, 0x006A}, {0x012F, 0x012F}, {0x0249, 0x0249}, + {0x0268, 0x0268}, {0x029D, 0x029D}, {0x02B2, 0x02B2}, + {0x03F3, 0x03F3}, {0x0456, 0x0456}, {0x0458, 0x0458}, + {0x1D62, 0x1D62}, {0x1D96, 0x1D96}, {0x1DA4, 0x1DA4}, + {0x1DA8, 0x1DA8}, {0x1E2D, 0x1E2D}, {0x1ECB, 0x1ECB}, + {0x2071, 0x2071}, {0x2148, 0x2149}, {0x2C7C, 0x2C7C}, + {0x1D422, 0x1D423}, {0x1D456, 0x1D457}, {0x1D48A, 0x1D48B}, + {0x1D4BE, 0x1D4BF}, {0x1D4F2, 0x1D4F3}, {0x1D526, 0x1D527}, + {0x1D55A, 0x1D55B}, {0x1D58E, 0x1D58F}, {0x1D5C2, 0x1D5C3}, + {0x1D5F6, 0x1D5F7}, {0x1D62A, 0x1D62B}, {0x1D65E, 0x1D65F}, + {0x1D692, 0x1D693}, {0x1DF1A, 0x1DF1A}, {0x1E04C, 0x1E04D}, + {0x1E068, 0x1E068}, + // Binary: Logical_Order_Exception + {0x0E40, 0x0E44}, {0x0EC0, 0x0EC4}, {0x19B5, 0x19B7}, + {0x19BA, 0x19BA}, {0xAAB5, 0xAAB6}, {0xAAB9, 0xAAB9}, + {0xAABB, 0xAABC}, + // Binary: Sentence_Terminal + {0x0021, 0x0021}, {0x002E, 0x002E}, {0x003F, 0x003F}, + {0x0589, 0x0589}, {0x061D, 0x061F}, {0x06D4, 0x06D4}, + {0x0700, 0x0702}, {0x07F9, 0x07F9}, {0x0837, 0x0837}, + {0x0839, 0x0839}, {0x083D, 0x083E}, {0x0964, 0x0965}, + {0x104A, 0x104B}, {0x1362, 0x1362}, {0x1367, 0x1368}, + {0x166E, 0x166E}, {0x1735, 0x1736}, {0x17D4, 0x17D5}, + {0x1803, 0x1803}, {0x1809, 0x1809}, {0x1944, 0x1945}, + {0x1AA8, 0x1AAB}, {0x1B5A, 0x1B5B}, {0x1B5E, 0x1B5F}, + {0x1B7D, 0x1B7E}, {0x1C3B, 0x1C3C}, {0x1C7E, 0x1C7F}, + {0x203C, 0x203D}, {0x2047, 0x2049}, {0x2E2E, 0x2E2E}, + {0x2E3C, 0x2E3C}, {0x2E53, 0x2E54}, {0x3002, 0x3002}, + {0xA4FF, 0xA4FF}, {0xA60E, 0xA60F}, {0xA6F3, 0xA6F3}, + {0xA6F7, 0xA6F7}, {0xA876, 0xA877}, {0xA8CE, 0xA8CF}, + {0xA92F, 0xA92F}, {0xA9C8, 0xA9C9}, {0xAA5D, 0xAA5F}, + {0xAAF0, 0xAAF1}, {0xABEB, 0xABEB}, {0xFE52, 0xFE52}, + {0xFE56, 0xFE57}, {0xFF01, 0xFF01}, {0xFF0E, 0xFF0E}, + {0xFF1F, 0xFF1F}, {0xFF61, 0xFF61}, {0x10A56, 0x10A57}, + {0x10F55, 0x10F59}, {0x10F86, 0x10F89}, {0x11047, 0x11048}, + {0x110BE, 0x110C1}, {0x11141, 0x11143}, {0x111C5, 0x111C6}, + {0x111CD, 0x111CD}, {0x111DE, 0x111DF}, {0x11238, 0x11239}, + {0x1123B, 0x1123C}, {0x112A9, 0x112A9}, {0x1144B, 0x1144C}, + {0x115C2, 0x115C3}, {0x115C9, 0x115D7}, {0x11641, 0x11642}, + {0x1173C, 0x1173E}, {0x11944, 0x11944}, {0x11946, 0x11946}, + {0x11A42, 0x11A43}, {0x11A9B, 0x11A9C}, {0x11C41, 0x11C42}, + {0x11EF7, 0x11EF8}, {0x11F43, 0x11F44}, {0x16A6E, 0x16A6F}, + {0x16AF5, 0x16AF5}, {0x16B37, 0x16B38}, {0x16B44, 0x16B44}, + {0x16E98, 0x16E98}, {0x1BC9F, 0x1BC9F}, {0x1DA88, 0x1DA88}, + // Binary: Variation_Selector + {0x180B, 0x180D}, {0x180F, 0x180F}, {0xFE00, 0xFE0F}, + {0xE0100, 0xE01EF}, + // Binary: Pattern_White_Space + {0x0009, 0x000D}, {0x0020, 0x0020}, {0x0085, 0x0085}, + {0x200E, 0x200F}, {0x2028, 0x2029}, + // Binary: Pattern_Syntax + {0x0021, 0x002F}, {0x003A, 0x0040}, {0x005B, 0x005E}, + {0x0060, 0x0060}, {0x007B, 0x007E}, {0x00A1, 0x00A7}, + {0x00A9, 0x00A9}, {0x00AB, 0x00AC}, {0x00AE, 0x00AE}, + {0x00B0, 0x00B1}, {0x00B6, 0x00B6}, {0x00BB, 0x00BB}, + {0x00BF, 0x00BF}, {0x00D7, 0x00D7}, {0x00F7, 0x00F7}, + {0x2010, 0x2027}, {0x2030, 0x203E}, {0x2041, 0x2053}, + {0x2055, 0x205E}, {0x2190, 0x245F}, {0x2500, 0x2775}, + {0x2794, 0x2BFF}, {0x2E00, 0x2E7F}, {0x3001, 0x3003}, + {0x3008, 0x3020}, {0x3030, 0x3030}, {0xFD3E, 0xFD3F}, + {0xFE45, 0xFE46}, + // Binary: Regional_Indicator + {0x1F1E6, 0x1F1FF}, + // Binary: Math + {0x002B, 0x002B}, {0x003C, 0x003E}, {0x005E, 0x005E}, + {0x007C, 0x007C}, {0x007E, 0x007E}, {0x00AC, 0x00AC}, + {0x00B1, 0x00B1}, {0x00D7, 0x00D7}, {0x00F7, 0x00F7}, + {0x03D0, 0x03D2}, {0x03D5, 0x03D5}, {0x03F0, 0x03F1}, + {0x03F4, 0x03F6}, {0x0606, 0x0608}, {0x2016, 0x2016}, + {0x2032, 0x2034}, {0x2040, 0x2040}, {0x2044, 0x2044}, + {0x2052, 0x2052}, {0x2061, 0x2064}, {0x207A, 0x207E}, + {0x208A, 0x208E}, {0x20D0, 0x20DC}, {0x20E1, 0x20E1}, + {0x20E5, 0x20E6}, {0x20EB, 0x20EF}, {0x2102, 0x2102}, + {0x2107, 0x2107}, {0x210A, 0x2113}, {0x2115, 0x2115}, + {0x2118, 0x211D}, {0x2124, 0x2124}, {0x2128, 0x2129}, + {0x212C, 0x212D}, {0x212F, 0x2131}, {0x2133, 0x2138}, + {0x213C, 0x2149}, {0x214B, 0x214B}, {0x2190, 0x21A7}, + {0x21A9, 0x21AE}, {0x21B0, 0x21B1}, {0x21B6, 0x21B7}, + {0x21BC, 0x21DB}, {0x21DD, 0x21DD}, {0x21E4, 0x21E5}, + {0x21F4, 0x22FF}, {0x2308, 0x230B}, {0x2320, 0x2321}, + {0x237C, 0x237C}, {0x239B, 0x23B5}, {0x23B7, 0x23B7}, + {0x23D0, 0x23D0}, {0x23DC, 0x23E2}, {0x25A0, 0x25A1}, + {0x25AE, 0x25B7}, {0x25BC, 0x25C1}, {0x25C6, 0x25C7}, + {0x25CA, 0x25CB}, {0x25CF, 0x25D3}, {0x25E2, 0x25E2}, + {0x25E4, 0x25E4}, {0x25E7, 0x25EC}, {0x25F8, 0x25FF}, + {0x2605, 0x2606}, {0x2640, 0x2640}, {0x2642, 0x2642}, + {0x2660, 0x2663}, {0x266D, 0x266F}, {0x27C0, 0x27FF}, + {0x2900, 0x2AFF}, {0x2B30, 0x2B44}, {0x2B47, 0x2B4C}, + {0xFB29, 0xFB29}, {0xFE61, 0xFE66}, {0xFE68, 0xFE68}, + {0xFF0B, 0xFF0B}, {0xFF1C, 0xFF1E}, {0xFF3C, 0xFF3C}, + {0xFF3E, 0xFF3E}, {0xFF5C, 0xFF5C}, {0xFF5E, 0xFF5E}, + {0xFFE2, 0xFFE2}, {0xFFE9, 0xFFEC}, {0x1D400, 0x1D454}, + {0x1D456, 0x1D49C}, {0x1D49E, 0x1D49F}, {0x1D4A2, 0x1D4A2}, + {0x1D4A5, 0x1D4A6}, {0x1D4A9, 0x1D4AC}, {0x1D4AE, 0x1D4B9}, + {0x1D4BB, 0x1D4BB}, {0x1D4BD, 0x1D4C3}, {0x1D4C5, 0x1D505}, + {0x1D507, 0x1D50A}, {0x1D50D, 0x1D514}, {0x1D516, 0x1D51C}, + {0x1D51E, 0x1D539}, {0x1D53B, 0x1D53E}, {0x1D540, 0x1D544}, + {0x1D546, 0x1D546}, {0x1D54A, 0x1D550}, {0x1D552, 0x1D6A5}, + {0x1D6A8, 0x1D7CB}, {0x1D7CE, 0x1D7FF}, {0x1EE00, 0x1EE03}, + {0x1EE05, 0x1EE1F}, {0x1EE21, 0x1EE22}, {0x1EE24, 0x1EE24}, + {0x1EE27, 0x1EE27}, {0x1EE29, 0x1EE32}, {0x1EE34, 0x1EE37}, + {0x1EE39, 0x1EE39}, {0x1EE3B, 0x1EE3B}, {0x1EE42, 0x1EE42}, + {0x1EE47, 0x1EE47}, {0x1EE49, 0x1EE49}, {0x1EE4B, 0x1EE4B}, + {0x1EE4D, 0x1EE4F}, {0x1EE51, 0x1EE52}, {0x1EE54, 0x1EE54}, + {0x1EE57, 0x1EE57}, {0x1EE59, 0x1EE59}, {0x1EE5B, 0x1EE5B}, + {0x1EE5D, 0x1EE5D}, {0x1EE5F, 0x1EE5F}, {0x1EE61, 0x1EE62}, + {0x1EE64, 0x1EE64}, {0x1EE67, 0x1EE6A}, {0x1EE6C, 0x1EE72}, + {0x1EE74, 0x1EE77}, {0x1EE79, 0x1EE7C}, {0x1EE7E, 0x1EE7E}, + {0x1EE80, 0x1EE89}, {0x1EE8B, 0x1EE9B}, {0x1EEA1, 0x1EEA3}, + {0x1EEA5, 0x1EEA9}, {0x1EEAB, 0x1EEBB}, {0x1EEF0, 0x1EEF1}, + // Binary: Alphabetic + {0x0041, 0x005A}, {0x0061, 0x007A}, {0x00AA, 0x00AA}, + {0x00B5, 0x00B5}, {0x00BA, 0x00BA}, {0x00C0, 0x00D6}, + {0x00D8, 0x00F6}, {0x00F8, 0x02C1}, {0x02C6, 0x02D1}, + {0x02E0, 0x02E4}, {0x02EC, 0x02EC}, {0x02EE, 0x02EE}, + {0x0345, 0x0345}, {0x0370, 0x0374}, {0x0376, 0x0377}, + {0x037A, 0x037D}, {0x037F, 0x037F}, {0x0386, 0x0386}, + {0x0388, 0x038A}, {0x038C, 0x038C}, {0x038E, 0x03A1}, + {0x03A3, 0x03F5}, {0x03F7, 0x0481}, {0x048A, 0x052F}, + {0x0531, 0x0556}, {0x0559, 0x0559}, {0x0560, 0x0588}, + {0x05B0, 0x05BD}, {0x05BF, 0x05BF}, {0x05C1, 0x05C2}, + {0x05C4, 0x05C5}, {0x05C7, 0x05C7}, {0x05D0, 0x05EA}, + {0x05EF, 0x05F2}, {0x0610, 0x061A}, {0x0620, 0x0657}, + {0x0659, 0x065F}, {0x066E, 0x06D3}, {0x06D5, 0x06DC}, + {0x06E1, 0x06E8}, {0x06ED, 0x06EF}, {0x06FA, 0x06FC}, + {0x06FF, 0x06FF}, {0x0710, 0x073F}, {0x074D, 0x07B1}, + {0x07CA, 0x07EA}, {0x07F4, 0x07F5}, {0x07FA, 0x07FA}, + {0x0800, 0x0817}, {0x081A, 0x082C}, {0x0840, 0x0858}, + {0x0860, 0x086A}, {0x0870, 0x0887}, {0x0889, 0x088E}, + {0x08A0, 0x08C9}, {0x08D4, 0x08DF}, {0x08E3, 0x08E9}, + {0x08F0, 0x093B}, {0x093D, 0x094C}, {0x094E, 0x0950}, + {0x0955, 0x0963}, {0x0971, 0x0983}, {0x0985, 0x098C}, + {0x098F, 0x0990}, {0x0993, 0x09A8}, {0x09AA, 0x09B0}, + {0x09B2, 0x09B2}, {0x09B6, 0x09B9}, {0x09BD, 0x09C4}, + {0x09C7, 0x09C8}, {0x09CB, 0x09CC}, {0x09CE, 0x09CE}, + {0x09D7, 0x09D7}, {0x09DC, 0x09DD}, {0x09DF, 0x09E3}, + {0x09F0, 0x09F1}, {0x09FC, 0x09FC}, {0x0A01, 0x0A03}, + {0x0A05, 0x0A0A}, {0x0A0F, 0x0A10}, {0x0A13, 0x0A28}, + {0x0A2A, 0x0A30}, {0x0A32, 0x0A33}, {0x0A35, 0x0A36}, + {0x0A38, 0x0A39}, {0x0A3E, 0x0A42}, {0x0A47, 0x0A48}, + {0x0A4B, 0x0A4C}, {0x0A51, 0x0A51}, {0x0A59, 0x0A5C}, + {0x0A5E, 0x0A5E}, {0x0A70, 0x0A75}, {0x0A81, 0x0A83}, + {0x0A85, 0x0A8D}, {0x0A8F, 0x0A91}, {0x0A93, 0x0AA8}, + {0x0AAA, 0x0AB0}, {0x0AB2, 0x0AB3}, {0x0AB5, 0x0AB9}, + {0x0ABD, 0x0AC5}, {0x0AC7, 0x0AC9}, {0x0ACB, 0x0ACC}, + {0x0AD0, 0x0AD0}, {0x0AE0, 0x0AE3}, {0x0AF9, 0x0AFC}, + {0x0B01, 0x0B03}, {0x0B05, 0x0B0C}, {0x0B0F, 0x0B10}, + {0x0B13, 0x0B28}, {0x0B2A, 0x0B30}, {0x0B32, 0x0B33}, + {0x0B35, 0x0B39}, {0x0B3D, 0x0B44}, {0x0B47, 0x0B48}, + {0x0B4B, 0x0B4C}, {0x0B56, 0x0B57}, {0x0B5C, 0x0B5D}, + {0x0B5F, 0x0B63}, {0x0B71, 0x0B71}, {0x0B82, 0x0B83}, + {0x0B85, 0x0B8A}, {0x0B8E, 0x0B90}, {0x0B92, 0x0B95}, + {0x0B99, 0x0B9A}, {0x0B9C, 0x0B9C}, {0x0B9E, 0x0B9F}, + {0x0BA3, 0x0BA4}, {0x0BA8, 0x0BAA}, {0x0BAE, 0x0BB9}, + {0x0BBE, 0x0BC2}, {0x0BC6, 0x0BC8}, {0x0BCA, 0x0BCC}, + {0x0BD0, 0x0BD0}, {0x0BD7, 0x0BD7}, {0x0C00, 0x0C0C}, + {0x0C0E, 0x0C10}, {0x0C12, 0x0C28}, {0x0C2A, 0x0C39}, + {0x0C3D, 0x0C44}, {0x0C46, 0x0C48}, {0x0C4A, 0x0C4C}, + {0x0C55, 0x0C56}, {0x0C58, 0x0C5A}, {0x0C5D, 0x0C5D}, + {0x0C60, 0x0C63}, {0x0C80, 0x0C83}, {0x0C85, 0x0C8C}, + {0x0C8E, 0x0C90}, {0x0C92, 0x0CA8}, {0x0CAA, 0x0CB3}, + {0x0CB5, 0x0CB9}, {0x0CBD, 0x0CC4}, {0x0CC6, 0x0CC8}, + {0x0CCA, 0x0CCC}, {0x0CD5, 0x0CD6}, {0x0CDD, 0x0CDE}, + {0x0CE0, 0x0CE3}, {0x0CF1, 0x0CF3}, {0x0D00, 0x0D0C}, + {0x0D0E, 0x0D10}, {0x0D12, 0x0D3A}, {0x0D3D, 0x0D44}, + {0x0D46, 0x0D48}, {0x0D4A, 0x0D4C}, {0x0D4E, 0x0D4E}, + {0x0D54, 0x0D57}, {0x0D5F, 0x0D63}, {0x0D7A, 0x0D7F}, + {0x0D81, 0x0D83}, {0x0D85, 0x0D96}, {0x0D9A, 0x0DB1}, + {0x0DB3, 0x0DBB}, {0x0DBD, 0x0DBD}, {0x0DC0, 0x0DC6}, + {0x0DCF, 0x0DD4}, {0x0DD6, 0x0DD6}, {0x0DD8, 0x0DDF}, + {0x0DF2, 0x0DF3}, {0x0E01, 0x0E3A}, {0x0E40, 0x0E46}, + {0x0E4D, 0x0E4D}, {0x0E81, 0x0E82}, {0x0E84, 0x0E84}, + {0x0E86, 0x0E8A}, {0x0E8C, 0x0EA3}, {0x0EA5, 0x0EA5}, + {0x0EA7, 0x0EB9}, {0x0EBB, 0x0EBD}, {0x0EC0, 0x0EC4}, + {0x0EC6, 0x0EC6}, {0x0ECD, 0x0ECD}, {0x0EDC, 0x0EDF}, + {0x0F00, 0x0F00}, {0x0F40, 0x0F47}, {0x0F49, 0x0F6C}, + {0x0F71, 0x0F83}, {0x0F88, 0x0F97}, {0x0F99, 0x0FBC}, + {0x1000, 0x1036}, {0x1038, 0x1038}, {0x103B, 0x103F}, + {0x1050, 0x108F}, {0x109A, 0x109D}, {0x10A0, 0x10C5}, + {0x10C7, 0x10C7}, {0x10CD, 0x10CD}, {0x10D0, 0x10FA}, + {0x10FC, 0x1248}, {0x124A, 0x124D}, {0x1250, 0x1256}, + {0x1258, 0x1258}, {0x125A, 0x125D}, {0x1260, 0x1288}, + {0x128A, 0x128D}, {0x1290, 0x12B0}, {0x12B2, 0x12B5}, + {0x12B8, 0x12BE}, {0x12C0, 0x12C0}, {0x12C2, 0x12C5}, + {0x12C8, 0x12D6}, {0x12D8, 0x1310}, {0x1312, 0x1315}, + {0x1318, 0x135A}, {0x1380, 0x138F}, {0x13A0, 0x13F5}, + {0x13F8, 0x13FD}, {0x1401, 0x166C}, {0x166F, 0x167F}, + {0x1681, 0x169A}, {0x16A0, 0x16EA}, {0x16EE, 0x16F8}, + {0x1700, 0x1713}, {0x171F, 0x1733}, {0x1740, 0x1753}, + {0x1760, 0x176C}, {0x176E, 0x1770}, {0x1772, 0x1773}, + {0x1780, 0x17B3}, {0x17B6, 0x17C8}, {0x17D7, 0x17D7}, + {0x17DC, 0x17DC}, {0x1820, 0x1878}, {0x1880, 0x18AA}, + {0x18B0, 0x18F5}, {0x1900, 0x191E}, {0x1920, 0x192B}, + {0x1930, 0x1938}, {0x1950, 0x196D}, {0x1970, 0x1974}, + {0x1980, 0x19AB}, {0x19B0, 0x19C9}, {0x1A00, 0x1A1B}, + {0x1A20, 0x1A5E}, {0x1A61, 0x1A74}, {0x1AA7, 0x1AA7}, + {0x1ABF, 0x1AC0}, {0x1ACC, 0x1ACE}, {0x1B00, 0x1B33}, + {0x1B35, 0x1B43}, {0x1B45, 0x1B4C}, {0x1B80, 0x1BA9}, + {0x1BAC, 0x1BAF}, {0x1BBA, 0x1BE5}, {0x1BE7, 0x1BF1}, + {0x1C00, 0x1C36}, {0x1C4D, 0x1C4F}, {0x1C5A, 0x1C7D}, + {0x1C80, 0x1C88}, {0x1C90, 0x1CBA}, {0x1CBD, 0x1CBF}, + {0x1CE9, 0x1CEC}, {0x1CEE, 0x1CF3}, {0x1CF5, 0x1CF6}, + {0x1CFA, 0x1CFA}, {0x1D00, 0x1DBF}, {0x1DE7, 0x1DF4}, + {0x1E00, 0x1F15}, {0x1F18, 0x1F1D}, {0x1F20, 0x1F45}, + {0x1F48, 0x1F4D}, {0x1F50, 0x1F57}, {0x1F59, 0x1F59}, + {0x1F5B, 0x1F5B}, {0x1F5D, 0x1F5D}, {0x1F5F, 0x1F7D}, + {0x1F80, 0x1FB4}, {0x1FB6, 0x1FBC}, {0x1FBE, 0x1FBE}, + {0x1FC2, 0x1FC4}, {0x1FC6, 0x1FCC}, {0x1FD0, 0x1FD3}, + {0x1FD6, 0x1FDB}, {0x1FE0, 0x1FEC}, {0x1FF2, 0x1FF4}, + {0x1FF6, 0x1FFC}, {0x2071, 0x2071}, {0x207F, 0x207F}, + {0x2090, 0x209C}, {0x2102, 0x2102}, {0x2107, 0x2107}, + {0x210A, 0x2113}, {0x2115, 0x2115}, {0x2119, 0x211D}, + {0x2124, 0x2124}, {0x2126, 0x2126}, {0x2128, 0x2128}, + {0x212A, 0x212D}, {0x212F, 0x2139}, {0x213C, 0x213F}, + {0x2145, 0x2149}, {0x214E, 0x214E}, {0x2160, 0x2188}, + {0x24B6, 0x24E9}, {0x2C00, 0x2CE4}, {0x2CEB, 0x2CEE}, + {0x2CF2, 0x2CF3}, {0x2D00, 0x2D25}, {0x2D27, 0x2D27}, + {0x2D2D, 0x2D2D}, {0x2D30, 0x2D67}, {0x2D6F, 0x2D6F}, + {0x2D80, 0x2D96}, {0x2DA0, 0x2DA6}, {0x2DA8, 0x2DAE}, + {0x2DB0, 0x2DB6}, {0x2DB8, 0x2DBE}, {0x2DC0, 0x2DC6}, + {0x2DC8, 0x2DCE}, {0x2DD0, 0x2DD6}, {0x2DD8, 0x2DDE}, + {0x2DE0, 0x2DFF}, {0x2E2F, 0x2E2F}, {0x3005, 0x3007}, + {0x3021, 0x3029}, {0x3031, 0x3035}, {0x3038, 0x303C}, + {0x3041, 0x3096}, {0x309D, 0x309F}, {0x30A1, 0x30FA}, + {0x30FC, 0x30FF}, {0x3105, 0x312F}, {0x3131, 0x318E}, + {0x31A0, 0x31BF}, {0x31F0, 0x31FF}, {0x3400, 0x4DBF}, + {0x4E00, 0xA48C}, {0xA4D0, 0xA4FD}, {0xA500, 0xA60C}, + {0xA610, 0xA61F}, {0xA62A, 0xA62B}, {0xA640, 0xA66E}, + {0xA674, 0xA67B}, {0xA67F, 0xA6EF}, {0xA717, 0xA71F}, + {0xA722, 0xA788}, {0xA78B, 0xA7CA}, {0xA7D0, 0xA7D1}, + {0xA7D3, 0xA7D3}, {0xA7D5, 0xA7D9}, {0xA7F2, 0xA805}, + {0xA807, 0xA827}, {0xA840, 0xA873}, {0xA880, 0xA8C3}, + {0xA8C5, 0xA8C5}, {0xA8F2, 0xA8F7}, {0xA8FB, 0xA8FB}, + {0xA8FD, 0xA8FF}, {0xA90A, 0xA92A}, {0xA930, 0xA952}, + {0xA960, 0xA97C}, {0xA980, 0xA9B2}, {0xA9B4, 0xA9BF}, + {0xA9CF, 0xA9CF}, {0xA9E0, 0xA9EF}, {0xA9FA, 0xA9FE}, + {0xAA00, 0xAA36}, {0xAA40, 0xAA4D}, {0xAA60, 0xAA76}, + {0xAA7A, 0xAABE}, {0xAAC0, 0xAAC0}, {0xAAC2, 0xAAC2}, + {0xAADB, 0xAADD}, {0xAAE0, 0xAAEF}, {0xAAF2, 0xAAF5}, + {0xAB01, 0xAB06}, {0xAB09, 0xAB0E}, {0xAB11, 0xAB16}, + {0xAB20, 0xAB26}, {0xAB28, 0xAB2E}, {0xAB30, 0xAB5A}, + {0xAB5C, 0xAB69}, {0xAB70, 0xABEA}, {0xAC00, 0xD7A3}, + {0xD7B0, 0xD7C6}, {0xD7CB, 0xD7FB}, {0xF900, 0xFA6D}, + {0xFA70, 0xFAD9}, {0xFB00, 0xFB06}, {0xFB13, 0xFB17}, + {0xFB1D, 0xFB28}, {0xFB2A, 0xFB36}, {0xFB38, 0xFB3C}, + {0xFB3E, 0xFB3E}, {0xFB40, 0xFB41}, {0xFB43, 0xFB44}, + {0xFB46, 0xFBB1}, {0xFBD3, 0xFD3D}, {0xFD50, 0xFD8F}, + {0xFD92, 0xFDC7}, {0xFDF0, 0xFDFB}, {0xFE70, 0xFE74}, + {0xFE76, 0xFEFC}, {0xFF21, 0xFF3A}, {0xFF41, 0xFF5A}, + {0xFF66, 0xFFBE}, {0xFFC2, 0xFFC7}, {0xFFCA, 0xFFCF}, + {0xFFD2, 0xFFD7}, {0xFFDA, 0xFFDC}, {0x10000, 0x1000B}, + {0x1000D, 0x10026}, {0x10028, 0x1003A}, {0x1003C, 0x1003D}, + {0x1003F, 0x1004D}, {0x10050, 0x1005D}, {0x10080, 0x100FA}, + {0x10140, 0x10174}, {0x10280, 0x1029C}, {0x102A0, 0x102D0}, + {0x10300, 0x1031F}, {0x1032D, 0x1034A}, {0x10350, 0x1037A}, + {0x10380, 0x1039D}, {0x103A0, 0x103C3}, {0x103C8, 0x103CF}, + {0x103D1, 0x103D5}, {0x10400, 0x1049D}, {0x104B0, 0x104D3}, + {0x104D8, 0x104FB}, {0x10500, 0x10527}, {0x10530, 0x10563}, + {0x10570, 0x1057A}, {0x1057C, 0x1058A}, {0x1058C, 0x10592}, + {0x10594, 0x10595}, {0x10597, 0x105A1}, {0x105A3, 0x105B1}, + {0x105B3, 0x105B9}, {0x105BB, 0x105BC}, {0x10600, 0x10736}, + {0x10740, 0x10755}, {0x10760, 0x10767}, {0x10780, 0x10785}, + {0x10787, 0x107B0}, {0x107B2, 0x107BA}, {0x10800, 0x10805}, + {0x10808, 0x10808}, {0x1080A, 0x10835}, {0x10837, 0x10838}, + {0x1083C, 0x1083C}, {0x1083F, 0x10855}, {0x10860, 0x10876}, + {0x10880, 0x1089E}, {0x108E0, 0x108F2}, {0x108F4, 0x108F5}, + {0x10900, 0x10915}, {0x10920, 0x10939}, {0x10980, 0x109B7}, + {0x109BE, 0x109BF}, {0x10A00, 0x10A03}, {0x10A05, 0x10A06}, + {0x10A0C, 0x10A13}, {0x10A15, 0x10A17}, {0x10A19, 0x10A35}, + {0x10A60, 0x10A7C}, {0x10A80, 0x10A9C}, {0x10AC0, 0x10AC7}, + {0x10AC9, 0x10AE4}, {0x10B00, 0x10B35}, {0x10B40, 0x10B55}, + {0x10B60, 0x10B72}, {0x10B80, 0x10B91}, {0x10C00, 0x10C48}, + {0x10C80, 0x10CB2}, {0x10CC0, 0x10CF2}, {0x10D00, 0x10D27}, + {0x10E80, 0x10EA9}, {0x10EAB, 0x10EAC}, {0x10EB0, 0x10EB1}, + {0x10F00, 0x10F1C}, {0x10F27, 0x10F27}, {0x10F30, 0x10F45}, + {0x10F70, 0x10F81}, {0x10FB0, 0x10FC4}, {0x10FE0, 0x10FF6}, + {0x11000, 0x11045}, {0x11071, 0x11075}, {0x11080, 0x110B8}, + {0x110C2, 0x110C2}, {0x110D0, 0x110E8}, {0x11100, 0x11132}, + {0x11144, 0x11147}, {0x11150, 0x11172}, {0x11176, 0x11176}, + {0x11180, 0x111BF}, {0x111C1, 0x111C4}, {0x111CE, 0x111CF}, + {0x111DA, 0x111DA}, {0x111DC, 0x111DC}, {0x11200, 0x11211}, + {0x11213, 0x11234}, {0x11237, 0x11237}, {0x1123E, 0x11241}, + {0x11280, 0x11286}, {0x11288, 0x11288}, {0x1128A, 0x1128D}, + {0x1128F, 0x1129D}, {0x1129F, 0x112A8}, {0x112B0, 0x112E8}, + {0x11300, 0x11303}, {0x11305, 0x1130C}, {0x1130F, 0x11310}, + {0x11313, 0x11328}, {0x1132A, 0x11330}, {0x11332, 0x11333}, + {0x11335, 0x11339}, {0x1133D, 0x11344}, {0x11347, 0x11348}, + {0x1134B, 0x1134C}, {0x11350, 0x11350}, {0x11357, 0x11357}, + {0x1135D, 0x11363}, {0x11400, 0x11441}, {0x11443, 0x11445}, + {0x11447, 0x1144A}, {0x1145F, 0x11461}, {0x11480, 0x114C1}, + {0x114C4, 0x114C5}, {0x114C7, 0x114C7}, {0x11580, 0x115B5}, + {0x115B8, 0x115BE}, {0x115D8, 0x115DD}, {0x11600, 0x1163E}, + {0x11640, 0x11640}, {0x11644, 0x11644}, {0x11680, 0x116B5}, + {0x116B8, 0x116B8}, {0x11700, 0x1171A}, {0x1171D, 0x1172A}, + {0x11740, 0x11746}, {0x11800, 0x11838}, {0x118A0, 0x118DF}, + {0x118FF, 0x11906}, {0x11909, 0x11909}, {0x1190C, 0x11913}, + {0x11915, 0x11916}, {0x11918, 0x11935}, {0x11937, 0x11938}, + {0x1193B, 0x1193C}, {0x1193F, 0x11942}, {0x119A0, 0x119A7}, + {0x119AA, 0x119D7}, {0x119DA, 0x119DF}, {0x119E1, 0x119E1}, + {0x119E3, 0x119E4}, {0x11A00, 0x11A32}, {0x11A35, 0x11A3E}, + {0x11A50, 0x11A97}, {0x11A9D, 0x11A9D}, {0x11AB0, 0x11AF8}, + {0x11C00, 0x11C08}, {0x11C0A, 0x11C36}, {0x11C38, 0x11C3E}, + {0x11C40, 0x11C40}, {0x11C72, 0x11C8F}, {0x11C92, 0x11CA7}, + {0x11CA9, 0x11CB6}, {0x11D00, 0x11D06}, {0x11D08, 0x11D09}, + {0x11D0B, 0x11D36}, {0x11D3A, 0x11D3A}, {0x11D3C, 0x11D3D}, + {0x11D3F, 0x11D41}, {0x11D43, 0x11D43}, {0x11D46, 0x11D47}, + {0x11D60, 0x11D65}, {0x11D67, 0x11D68}, {0x11D6A, 0x11D8E}, + {0x11D90, 0x11D91}, {0x11D93, 0x11D96}, {0x11D98, 0x11D98}, + {0x11EE0, 0x11EF6}, {0x11F00, 0x11F10}, {0x11F12, 0x11F3A}, + {0x11F3E, 0x11F40}, {0x11FB0, 0x11FB0}, {0x12000, 0x12399}, + {0x12400, 0x1246E}, {0x12480, 0x12543}, {0x12F90, 0x12FF0}, + {0x13000, 0x1342F}, {0x13441, 0x13446}, {0x14400, 0x14646}, + {0x16800, 0x16A38}, {0x16A40, 0x16A5E}, {0x16A70, 0x16ABE}, + {0x16AD0, 0x16AED}, {0x16B00, 0x16B2F}, {0x16B40, 0x16B43}, + {0x16B63, 0x16B77}, {0x16B7D, 0x16B8F}, {0x16E40, 0x16E7F}, + {0x16F00, 0x16F4A}, {0x16F4F, 0x16F87}, {0x16F8F, 0x16F9F}, + {0x16FE0, 0x16FE1}, {0x16FE3, 0x16FE3}, {0x16FF0, 0x16FF1}, + {0x17000, 0x187F7}, {0x18800, 0x18CD5}, {0x18D00, 0x18D08}, + {0x1AFF0, 0x1AFF3}, {0x1AFF5, 0x1AFFB}, {0x1AFFD, 0x1AFFE}, + {0x1B000, 0x1B122}, {0x1B132, 0x1B132}, {0x1B150, 0x1B152}, + {0x1B155, 0x1B155}, {0x1B164, 0x1B167}, {0x1B170, 0x1B2FB}, + {0x1BC00, 0x1BC6A}, {0x1BC70, 0x1BC7C}, {0x1BC80, 0x1BC88}, + {0x1BC90, 0x1BC99}, {0x1BC9E, 0x1BC9E}, {0x1D400, 0x1D454}, + {0x1D456, 0x1D49C}, {0x1D49E, 0x1D49F}, {0x1D4A2, 0x1D4A2}, + {0x1D4A5, 0x1D4A6}, {0x1D4A9, 0x1D4AC}, {0x1D4AE, 0x1D4B9}, + {0x1D4BB, 0x1D4BB}, {0x1D4BD, 0x1D4C3}, {0x1D4C5, 0x1D505}, + {0x1D507, 0x1D50A}, {0x1D50D, 0x1D514}, {0x1D516, 0x1D51C}, + {0x1D51E, 0x1D539}, {0x1D53B, 0x1D53E}, {0x1D540, 0x1D544}, + {0x1D546, 0x1D546}, {0x1D54A, 0x1D550}, {0x1D552, 0x1D6A5}, + {0x1D6A8, 0x1D6C0}, {0x1D6C2, 0x1D6DA}, {0x1D6DC, 0x1D6FA}, + {0x1D6FC, 0x1D714}, {0x1D716, 0x1D734}, {0x1D736, 0x1D74E}, + {0x1D750, 0x1D76E}, {0x1D770, 0x1D788}, {0x1D78A, 0x1D7A8}, + {0x1D7AA, 0x1D7C2}, {0x1D7C4, 0x1D7CB}, {0x1DF00, 0x1DF1E}, + {0x1DF25, 0x1DF2A}, {0x1E000, 0x1E006}, {0x1E008, 0x1E018}, + {0x1E01B, 0x1E021}, {0x1E023, 0x1E024}, {0x1E026, 0x1E02A}, + {0x1E030, 0x1E06D}, {0x1E08F, 0x1E08F}, {0x1E100, 0x1E12C}, + {0x1E137, 0x1E13D}, {0x1E14E, 0x1E14E}, {0x1E290, 0x1E2AD}, + {0x1E2C0, 0x1E2EB}, {0x1E4D0, 0x1E4EB}, {0x1E7E0, 0x1E7E6}, + {0x1E7E8, 0x1E7EB}, {0x1E7ED, 0x1E7EE}, {0x1E7F0, 0x1E7FE}, + {0x1E800, 0x1E8C4}, {0x1E900, 0x1E943}, {0x1E947, 0x1E947}, + {0x1E94B, 0x1E94B}, {0x1EE00, 0x1EE03}, {0x1EE05, 0x1EE1F}, + {0x1EE21, 0x1EE22}, {0x1EE24, 0x1EE24}, {0x1EE27, 0x1EE27}, + {0x1EE29, 0x1EE32}, {0x1EE34, 0x1EE37}, {0x1EE39, 0x1EE39}, + {0x1EE3B, 0x1EE3B}, {0x1EE42, 0x1EE42}, {0x1EE47, 0x1EE47}, + {0x1EE49, 0x1EE49}, {0x1EE4B, 0x1EE4B}, {0x1EE4D, 0x1EE4F}, + {0x1EE51, 0x1EE52}, {0x1EE54, 0x1EE54}, {0x1EE57, 0x1EE57}, + {0x1EE59, 0x1EE59}, {0x1EE5B, 0x1EE5B}, {0x1EE5D, 0x1EE5D}, + {0x1EE5F, 0x1EE5F}, {0x1EE61, 0x1EE62}, {0x1EE64, 0x1EE64}, + {0x1EE67, 0x1EE6A}, {0x1EE6C, 0x1EE72}, {0x1EE74, 0x1EE77}, + {0x1EE79, 0x1EE7C}, {0x1EE7E, 0x1EE7E}, {0x1EE80, 0x1EE89}, + {0x1EE8B, 0x1EE9B}, {0x1EEA1, 0x1EEA3}, {0x1EEA5, 0x1EEA9}, + {0x1EEAB, 0x1EEBB}, {0x1F130, 0x1F149}, {0x1F150, 0x1F169}, + {0x1F170, 0x1F189}, {0x20000, 0x2A6DF}, {0x2A700, 0x2B739}, + {0x2B740, 0x2B81D}, {0x2B820, 0x2CEA1}, {0x2CEB0, 0x2EBE0}, + {0x2EBF0, 0x2EE5D}, {0x2F800, 0x2FA1D}, {0x30000, 0x3134A}, + {0x31350, 0x323AF}, + // Binary: Lowercase + {0x0061, 0x007A}, {0x00AA, 0x00AA}, {0x00B5, 0x00B5}, + {0x00BA, 0x00BA}, {0x00DF, 0x00F6}, {0x00F8, 0x00FF}, + {0x0101, 0x0101}, {0x0103, 0x0103}, {0x0105, 0x0105}, + {0x0107, 0x0107}, {0x0109, 0x0109}, {0x010B, 0x010B}, + {0x010D, 0x010D}, {0x010F, 0x010F}, {0x0111, 0x0111}, + {0x0113, 0x0113}, {0x0115, 0x0115}, {0x0117, 0x0117}, + {0x0119, 0x0119}, {0x011B, 0x011B}, {0x011D, 0x011D}, + {0x011F, 0x011F}, {0x0121, 0x0121}, {0x0123, 0x0123}, + {0x0125, 0x0125}, {0x0127, 0x0127}, {0x0129, 0x0129}, + {0x012B, 0x012B}, {0x012D, 0x012D}, {0x012F, 0x012F}, + {0x0131, 0x0131}, {0x0133, 0x0133}, {0x0135, 0x0135}, + {0x0137, 0x0138}, {0x013A, 0x013A}, {0x013C, 0x013C}, + {0x013E, 0x013E}, {0x0140, 0x0140}, {0x0142, 0x0142}, + {0x0144, 0x0144}, {0x0146, 0x0146}, {0x0148, 0x0149}, + {0x014B, 0x014B}, {0x014D, 0x014D}, {0x014F, 0x014F}, + {0x0151, 0x0151}, {0x0153, 0x0153}, {0x0155, 0x0155}, + {0x0157, 0x0157}, {0x0159, 0x0159}, {0x015B, 0x015B}, + {0x015D, 0x015D}, {0x015F, 0x015F}, {0x0161, 0x0161}, + {0x0163, 0x0163}, {0x0165, 0x0165}, {0x0167, 0x0167}, + {0x0169, 0x0169}, {0x016B, 0x016B}, {0x016D, 0x016D}, + {0x016F, 0x016F}, {0x0171, 0x0171}, {0x0173, 0x0173}, + {0x0175, 0x0175}, {0x0177, 0x0177}, {0x017A, 0x017A}, + {0x017C, 0x017C}, {0x017E, 0x0180}, {0x0183, 0x0183}, + {0x0185, 0x0185}, {0x0188, 0x0188}, {0x018C, 0x018D}, + {0x0192, 0x0192}, {0x0195, 0x0195}, {0x0199, 0x019B}, + {0x019E, 0x019E}, {0x01A1, 0x01A1}, {0x01A3, 0x01A3}, + {0x01A5, 0x01A5}, {0x01A8, 0x01A8}, {0x01AA, 0x01AB}, + {0x01AD, 0x01AD}, {0x01B0, 0x01B0}, {0x01B4, 0x01B4}, + {0x01B6, 0x01B6}, {0x01B9, 0x01BA}, {0x01BD, 0x01BF}, + {0x01C6, 0x01C6}, {0x01C9, 0x01C9}, {0x01CC, 0x01CC}, + {0x01CE, 0x01CE}, {0x01D0, 0x01D0}, {0x01D2, 0x01D2}, + {0x01D4, 0x01D4}, {0x01D6, 0x01D6}, {0x01D8, 0x01D8}, + {0x01DA, 0x01DA}, {0x01DC, 0x01DD}, {0x01DF, 0x01DF}, + {0x01E1, 0x01E1}, {0x01E3, 0x01E3}, {0x01E5, 0x01E5}, + {0x01E7, 0x01E7}, {0x01E9, 0x01E9}, {0x01EB, 0x01EB}, + {0x01ED, 0x01ED}, {0x01EF, 0x01F0}, {0x01F3, 0x01F3}, + {0x01F5, 0x01F5}, {0x01F9, 0x01F9}, {0x01FB, 0x01FB}, + {0x01FD, 0x01FD}, {0x01FF, 0x01FF}, {0x0201, 0x0201}, + {0x0203, 0x0203}, {0x0205, 0x0205}, {0x0207, 0x0207}, + {0x0209, 0x0209}, {0x020B, 0x020B}, {0x020D, 0x020D}, + {0x020F, 0x020F}, {0x0211, 0x0211}, {0x0213, 0x0213}, + {0x0215, 0x0215}, {0x0217, 0x0217}, {0x0219, 0x0219}, + {0x021B, 0x021B}, {0x021D, 0x021D}, {0x021F, 0x021F}, + {0x0221, 0x0221}, {0x0223, 0x0223}, {0x0225, 0x0225}, + {0x0227, 0x0227}, {0x0229, 0x0229}, {0x022B, 0x022B}, + {0x022D, 0x022D}, {0x022F, 0x022F}, {0x0231, 0x0231}, + {0x0233, 0x0239}, {0x023C, 0x023C}, {0x023F, 0x0240}, + {0x0242, 0x0242}, {0x0247, 0x0247}, {0x0249, 0x0249}, + {0x024B, 0x024B}, {0x024D, 0x024D}, {0x024F, 0x0293}, + {0x0295, 0x02B8}, {0x02C0, 0x02C1}, {0x02E0, 0x02E4}, + {0x0345, 0x0345}, {0x0371, 0x0371}, {0x0373, 0x0373}, + {0x0377, 0x0377}, {0x037A, 0x037D}, {0x0390, 0x0390}, + {0x03AC, 0x03CE}, {0x03D0, 0x03D1}, {0x03D5, 0x03D7}, + {0x03D9, 0x03D9}, {0x03DB, 0x03DB}, {0x03DD, 0x03DD}, + {0x03DF, 0x03DF}, {0x03E1, 0x03E1}, {0x03E3, 0x03E3}, + {0x03E5, 0x03E5}, {0x03E7, 0x03E7}, {0x03E9, 0x03E9}, + {0x03EB, 0x03EB}, {0x03ED, 0x03ED}, {0x03EF, 0x03F3}, + {0x03F5, 0x03F5}, {0x03F8, 0x03F8}, {0x03FB, 0x03FC}, + {0x0430, 0x045F}, {0x0461, 0x0461}, {0x0463, 0x0463}, + {0x0465, 0x0465}, {0x0467, 0x0467}, {0x0469, 0x0469}, + {0x046B, 0x046B}, {0x046D, 0x046D}, {0x046F, 0x046F}, + {0x0471, 0x0471}, {0x0473, 0x0473}, {0x0475, 0x0475}, + {0x0477, 0x0477}, {0x0479, 0x0479}, {0x047B, 0x047B}, + {0x047D, 0x047D}, {0x047F, 0x047F}, {0x0481, 0x0481}, + {0x048B, 0x048B}, {0x048D, 0x048D}, {0x048F, 0x048F}, + {0x0491, 0x0491}, {0x0493, 0x0493}, {0x0495, 0x0495}, + {0x0497, 0x0497}, {0x0499, 0x0499}, {0x049B, 0x049B}, + {0x049D, 0x049D}, {0x049F, 0x049F}, {0x04A1, 0x04A1}, + {0x04A3, 0x04A3}, {0x04A5, 0x04A5}, {0x04A7, 0x04A7}, + {0x04A9, 0x04A9}, {0x04AB, 0x04AB}, {0x04AD, 0x04AD}, + {0x04AF, 0x04AF}, {0x04B1, 0x04B1}, {0x04B3, 0x04B3}, + {0x04B5, 0x04B5}, {0x04B7, 0x04B7}, {0x04B9, 0x04B9}, + {0x04BB, 0x04BB}, {0x04BD, 0x04BD}, {0x04BF, 0x04BF}, + {0x04C2, 0x04C2}, {0x04C4, 0x04C4}, {0x04C6, 0x04C6}, + {0x04C8, 0x04C8}, {0x04CA, 0x04CA}, {0x04CC, 0x04CC}, + {0x04CE, 0x04CF}, {0x04D1, 0x04D1}, {0x04D3, 0x04D3}, + {0x04D5, 0x04D5}, {0x04D7, 0x04D7}, {0x04D9, 0x04D9}, + {0x04DB, 0x04DB}, {0x04DD, 0x04DD}, {0x04DF, 0x04DF}, + {0x04E1, 0x04E1}, {0x04E3, 0x04E3}, {0x04E5, 0x04E5}, + {0x04E7, 0x04E7}, {0x04E9, 0x04E9}, {0x04EB, 0x04EB}, + {0x04ED, 0x04ED}, {0x04EF, 0x04EF}, {0x04F1, 0x04F1}, + {0x04F3, 0x04F3}, {0x04F5, 0x04F5}, {0x04F7, 0x04F7}, + {0x04F9, 0x04F9}, {0x04FB, 0x04FB}, {0x04FD, 0x04FD}, + {0x04FF, 0x04FF}, {0x0501, 0x0501}, {0x0503, 0x0503}, + {0x0505, 0x0505}, {0x0507, 0x0507}, {0x0509, 0x0509}, + {0x050B, 0x050B}, {0x050D, 0x050D}, {0x050F, 0x050F}, + {0x0511, 0x0511}, {0x0513, 0x0513}, {0x0515, 0x0515}, + {0x0517, 0x0517}, {0x0519, 0x0519}, {0x051B, 0x051B}, + {0x051D, 0x051D}, {0x051F, 0x051F}, {0x0521, 0x0521}, + {0x0523, 0x0523}, {0x0525, 0x0525}, {0x0527, 0x0527}, + {0x0529, 0x0529}, {0x052B, 0x052B}, {0x052D, 0x052D}, + {0x052F, 0x052F}, {0x0560, 0x0588}, {0x10D0, 0x10FA}, + {0x10FC, 0x10FF}, {0x13F8, 0x13FD}, {0x1C80, 0x1C88}, + {0x1D00, 0x1DBF}, {0x1E01, 0x1E01}, {0x1E03, 0x1E03}, + {0x1E05, 0x1E05}, {0x1E07, 0x1E07}, {0x1E09, 0x1E09}, + {0x1E0B, 0x1E0B}, {0x1E0D, 0x1E0D}, {0x1E0F, 0x1E0F}, + {0x1E11, 0x1E11}, {0x1E13, 0x1E13}, {0x1E15, 0x1E15}, + {0x1E17, 0x1E17}, {0x1E19, 0x1E19}, {0x1E1B, 0x1E1B}, + {0x1E1D, 0x1E1D}, {0x1E1F, 0x1E1F}, {0x1E21, 0x1E21}, + {0x1E23, 0x1E23}, {0x1E25, 0x1E25}, {0x1E27, 0x1E27}, + {0x1E29, 0x1E29}, {0x1E2B, 0x1E2B}, {0x1E2D, 0x1E2D}, + {0x1E2F, 0x1E2F}, {0x1E31, 0x1E31}, {0x1E33, 0x1E33}, + {0x1E35, 0x1E35}, {0x1E37, 0x1E37}, {0x1E39, 0x1E39}, + {0x1E3B, 0x1E3B}, {0x1E3D, 0x1E3D}, {0x1E3F, 0x1E3F}, + {0x1E41, 0x1E41}, {0x1E43, 0x1E43}, {0x1E45, 0x1E45}, + {0x1E47, 0x1E47}, {0x1E49, 0x1E49}, {0x1E4B, 0x1E4B}, + {0x1E4D, 0x1E4D}, {0x1E4F, 0x1E4F}, {0x1E51, 0x1E51}, + {0x1E53, 0x1E53}, {0x1E55, 0x1E55}, {0x1E57, 0x1E57}, + {0x1E59, 0x1E59}, {0x1E5B, 0x1E5B}, {0x1E5D, 0x1E5D}, + {0x1E5F, 0x1E5F}, {0x1E61, 0x1E61}, {0x1E63, 0x1E63}, + {0x1E65, 0x1E65}, {0x1E67, 0x1E67}, {0x1E69, 0x1E69}, + {0x1E6B, 0x1E6B}, {0x1E6D, 0x1E6D}, {0x1E6F, 0x1E6F}, + {0x1E71, 0x1E71}, {0x1E73, 0x1E73}, {0x1E75, 0x1E75}, + {0x1E77, 0x1E77}, {0x1E79, 0x1E79}, {0x1E7B, 0x1E7B}, + {0x1E7D, 0x1E7D}, {0x1E7F, 0x1E7F}, {0x1E81, 0x1E81}, + {0x1E83, 0x1E83}, {0x1E85, 0x1E85}, {0x1E87, 0x1E87}, + {0x1E89, 0x1E89}, {0x1E8B, 0x1E8B}, {0x1E8D, 0x1E8D}, + {0x1E8F, 0x1E8F}, {0x1E91, 0x1E91}, {0x1E93, 0x1E93}, + {0x1E95, 0x1E9D}, {0x1E9F, 0x1E9F}, {0x1EA1, 0x1EA1}, + {0x1EA3, 0x1EA3}, {0x1EA5, 0x1EA5}, {0x1EA7, 0x1EA7}, + {0x1EA9, 0x1EA9}, {0x1EAB, 0x1EAB}, {0x1EAD, 0x1EAD}, + {0x1EAF, 0x1EAF}, {0x1EB1, 0x1EB1}, {0x1EB3, 0x1EB3}, + {0x1EB5, 0x1EB5}, {0x1EB7, 0x1EB7}, {0x1EB9, 0x1EB9}, + {0x1EBB, 0x1EBB}, {0x1EBD, 0x1EBD}, {0x1EBF, 0x1EBF}, + {0x1EC1, 0x1EC1}, {0x1EC3, 0x1EC3}, {0x1EC5, 0x1EC5}, + {0x1EC7, 0x1EC7}, {0x1EC9, 0x1EC9}, {0x1ECB, 0x1ECB}, + {0x1ECD, 0x1ECD}, {0x1ECF, 0x1ECF}, {0x1ED1, 0x1ED1}, + {0x1ED3, 0x1ED3}, {0x1ED5, 0x1ED5}, {0x1ED7, 0x1ED7}, + {0x1ED9, 0x1ED9}, {0x1EDB, 0x1EDB}, {0x1EDD, 0x1EDD}, + {0x1EDF, 0x1EDF}, {0x1EE1, 0x1EE1}, {0x1EE3, 0x1EE3}, + {0x1EE5, 0x1EE5}, {0x1EE7, 0x1EE7}, {0x1EE9, 0x1EE9}, + {0x1EEB, 0x1EEB}, {0x1EED, 0x1EED}, {0x1EEF, 0x1EEF}, + {0x1EF1, 0x1EF1}, {0x1EF3, 0x1EF3}, {0x1EF5, 0x1EF5}, + {0x1EF7, 0x1EF7}, {0x1EF9, 0x1EF9}, {0x1EFB, 0x1EFB}, + {0x1EFD, 0x1EFD}, {0x1EFF, 0x1F07}, {0x1F10, 0x1F15}, + {0x1F20, 0x1F27}, {0x1F30, 0x1F37}, {0x1F40, 0x1F45}, + {0x1F50, 0x1F57}, {0x1F60, 0x1F67}, {0x1F70, 0x1F7D}, + {0x1F80, 0x1F87}, {0x1F90, 0x1F97}, {0x1FA0, 0x1FA7}, + {0x1FB0, 0x1FB4}, {0x1FB6, 0x1FB7}, {0x1FBE, 0x1FBE}, + {0x1FC2, 0x1FC4}, {0x1FC6, 0x1FC7}, {0x1FD0, 0x1FD3}, + {0x1FD6, 0x1FD7}, {0x1FE0, 0x1FE7}, {0x1FF2, 0x1FF4}, + {0x1FF6, 0x1FF7}, {0x2071, 0x2071}, {0x207F, 0x207F}, + {0x2090, 0x209C}, {0x210A, 0x210A}, {0x210E, 0x210F}, + {0x2113, 0x2113}, {0x212F, 0x212F}, {0x2134, 0x2134}, + {0x2139, 0x2139}, {0x213C, 0x213D}, {0x2146, 0x2149}, + {0x214E, 0x214E}, {0x2170, 0x217F}, {0x2184, 0x2184}, + {0x24D0, 0x24E9}, {0x2C30, 0x2C5F}, {0x2C61, 0x2C61}, + {0x2C65, 0x2C66}, {0x2C68, 0x2C68}, {0x2C6A, 0x2C6A}, + {0x2C6C, 0x2C6C}, {0x2C71, 0x2C71}, {0x2C73, 0x2C74}, + {0x2C76, 0x2C7D}, {0x2C81, 0x2C81}, {0x2C83, 0x2C83}, + {0x2C85, 0x2C85}, {0x2C87, 0x2C87}, {0x2C89, 0x2C89}, + {0x2C8B, 0x2C8B}, {0x2C8D, 0x2C8D}, {0x2C8F, 0x2C8F}, + {0x2C91, 0x2C91}, {0x2C93, 0x2C93}, {0x2C95, 0x2C95}, + {0x2C97, 0x2C97}, {0x2C99, 0x2C99}, {0x2C9B, 0x2C9B}, + {0x2C9D, 0x2C9D}, {0x2C9F, 0x2C9F}, {0x2CA1, 0x2CA1}, + {0x2CA3, 0x2CA3}, {0x2CA5, 0x2CA5}, {0x2CA7, 0x2CA7}, + {0x2CA9, 0x2CA9}, {0x2CAB, 0x2CAB}, {0x2CAD, 0x2CAD}, + {0x2CAF, 0x2CAF}, {0x2CB1, 0x2CB1}, {0x2CB3, 0x2CB3}, + {0x2CB5, 0x2CB5}, {0x2CB7, 0x2CB7}, {0x2CB9, 0x2CB9}, + {0x2CBB, 0x2CBB}, {0x2CBD, 0x2CBD}, {0x2CBF, 0x2CBF}, + {0x2CC1, 0x2CC1}, {0x2CC3, 0x2CC3}, {0x2CC5, 0x2CC5}, + {0x2CC7, 0x2CC7}, {0x2CC9, 0x2CC9}, {0x2CCB, 0x2CCB}, + {0x2CCD, 0x2CCD}, {0x2CCF, 0x2CCF}, {0x2CD1, 0x2CD1}, + {0x2CD3, 0x2CD3}, {0x2CD5, 0x2CD5}, {0x2CD7, 0x2CD7}, + {0x2CD9, 0x2CD9}, {0x2CDB, 0x2CDB}, {0x2CDD, 0x2CDD}, + {0x2CDF, 0x2CDF}, {0x2CE1, 0x2CE1}, {0x2CE3, 0x2CE4}, + {0x2CEC, 0x2CEC}, {0x2CEE, 0x2CEE}, {0x2CF3, 0x2CF3}, + {0x2D00, 0x2D25}, {0x2D27, 0x2D27}, {0x2D2D, 0x2D2D}, + {0xA641, 0xA641}, {0xA643, 0xA643}, {0xA645, 0xA645}, + {0xA647, 0xA647}, {0xA649, 0xA649}, {0xA64B, 0xA64B}, + {0xA64D, 0xA64D}, {0xA64F, 0xA64F}, {0xA651, 0xA651}, + {0xA653, 0xA653}, {0xA655, 0xA655}, {0xA657, 0xA657}, + {0xA659, 0xA659}, {0xA65B, 0xA65B}, {0xA65D, 0xA65D}, + {0xA65F, 0xA65F}, {0xA661, 0xA661}, {0xA663, 0xA663}, + {0xA665, 0xA665}, {0xA667, 0xA667}, {0xA669, 0xA669}, + {0xA66B, 0xA66B}, {0xA66D, 0xA66D}, {0xA681, 0xA681}, + {0xA683, 0xA683}, {0xA685, 0xA685}, {0xA687, 0xA687}, + {0xA689, 0xA689}, {0xA68B, 0xA68B}, {0xA68D, 0xA68D}, + {0xA68F, 0xA68F}, {0xA691, 0xA691}, {0xA693, 0xA693}, + {0xA695, 0xA695}, {0xA697, 0xA697}, {0xA699, 0xA699}, + {0xA69B, 0xA69D}, {0xA723, 0xA723}, {0xA725, 0xA725}, + {0xA727, 0xA727}, {0xA729, 0xA729}, {0xA72B, 0xA72B}, + {0xA72D, 0xA72D}, {0xA72F, 0xA731}, {0xA733, 0xA733}, + {0xA735, 0xA735}, {0xA737, 0xA737}, {0xA739, 0xA739}, + {0xA73B, 0xA73B}, {0xA73D, 0xA73D}, {0xA73F, 0xA73F}, + {0xA741, 0xA741}, {0xA743, 0xA743}, {0xA745, 0xA745}, + {0xA747, 0xA747}, {0xA749, 0xA749}, {0xA74B, 0xA74B}, + {0xA74D, 0xA74D}, {0xA74F, 0xA74F}, {0xA751, 0xA751}, + {0xA753, 0xA753}, {0xA755, 0xA755}, {0xA757, 0xA757}, + {0xA759, 0xA759}, {0xA75B, 0xA75B}, {0xA75D, 0xA75D}, + {0xA75F, 0xA75F}, {0xA761, 0xA761}, {0xA763, 0xA763}, + {0xA765, 0xA765}, {0xA767, 0xA767}, {0xA769, 0xA769}, + {0xA76B, 0xA76B}, {0xA76D, 0xA76D}, {0xA76F, 0xA778}, + {0xA77A, 0xA77A}, {0xA77C, 0xA77C}, {0xA77F, 0xA77F}, + {0xA781, 0xA781}, {0xA783, 0xA783}, {0xA785, 0xA785}, + {0xA787, 0xA787}, {0xA78C, 0xA78C}, {0xA78E, 0xA78E}, + {0xA791, 0xA791}, {0xA793, 0xA795}, {0xA797, 0xA797}, + {0xA799, 0xA799}, {0xA79B, 0xA79B}, {0xA79D, 0xA79D}, + {0xA79F, 0xA79F}, {0xA7A1, 0xA7A1}, {0xA7A3, 0xA7A3}, + {0xA7A5, 0xA7A5}, {0xA7A7, 0xA7A7}, {0xA7A9, 0xA7A9}, + {0xA7AF, 0xA7AF}, {0xA7B5, 0xA7B5}, {0xA7B7, 0xA7B7}, + {0xA7B9, 0xA7B9}, {0xA7BB, 0xA7BB}, {0xA7BD, 0xA7BD}, + {0xA7BF, 0xA7BF}, {0xA7C1, 0xA7C1}, {0xA7C3, 0xA7C3}, + {0xA7C8, 0xA7C8}, {0xA7CA, 0xA7CA}, {0xA7D1, 0xA7D1}, + {0xA7D3, 0xA7D3}, {0xA7D5, 0xA7D5}, {0xA7D7, 0xA7D7}, + {0xA7D9, 0xA7D9}, {0xA7F2, 0xA7F4}, {0xA7F6, 0xA7F6}, + {0xA7F8, 0xA7FA}, {0xAB30, 0xAB5A}, {0xAB5C, 0xAB69}, + {0xAB70, 0xABBF}, {0xFB00, 0xFB06}, {0xFB13, 0xFB17}, + {0xFF41, 0xFF5A}, {0x10428, 0x1044F}, {0x104D8, 0x104FB}, + {0x10597, 0x105A1}, {0x105A3, 0x105B1}, {0x105B3, 0x105B9}, + {0x105BB, 0x105BC}, {0x10780, 0x10780}, {0x10783, 0x10785}, + {0x10787, 0x107B0}, {0x107B2, 0x107BA}, {0x10CC0, 0x10CF2}, + {0x118C0, 0x118DF}, {0x16E60, 0x16E7F}, {0x1D41A, 0x1D433}, + {0x1D44E, 0x1D454}, {0x1D456, 0x1D467}, {0x1D482, 0x1D49B}, + {0x1D4B6, 0x1D4B9}, {0x1D4BB, 0x1D4BB}, {0x1D4BD, 0x1D4C3}, + {0x1D4C5, 0x1D4CF}, {0x1D4EA, 0x1D503}, {0x1D51E, 0x1D537}, + {0x1D552, 0x1D56B}, {0x1D586, 0x1D59F}, {0x1D5BA, 0x1D5D3}, + {0x1D5EE, 0x1D607}, {0x1D622, 0x1D63B}, {0x1D656, 0x1D66F}, + {0x1D68A, 0x1D6A5}, {0x1D6C2, 0x1D6DA}, {0x1D6DC, 0x1D6E1}, + {0x1D6FC, 0x1D714}, {0x1D716, 0x1D71B}, {0x1D736, 0x1D74E}, + {0x1D750, 0x1D755}, {0x1D770, 0x1D788}, {0x1D78A, 0x1D78F}, + {0x1D7AA, 0x1D7C2}, {0x1D7C4, 0x1D7C9}, {0x1D7CB, 0x1D7CB}, + {0x1DF00, 0x1DF09}, {0x1DF0B, 0x1DF1E}, {0x1DF25, 0x1DF2A}, + {0x1E030, 0x1E06D}, {0x1E922, 0x1E943}, + // Binary: Uppercase + {0x0041, 0x005A}, {0x00C0, 0x00D6}, {0x00D8, 0x00DE}, + {0x0100, 0x0100}, {0x0102, 0x0102}, {0x0104, 0x0104}, + {0x0106, 0x0106}, {0x0108, 0x0108}, {0x010A, 0x010A}, + {0x010C, 0x010C}, {0x010E, 0x010E}, {0x0110, 0x0110}, + {0x0112, 0x0112}, {0x0114, 0x0114}, {0x0116, 0x0116}, + {0x0118, 0x0118}, {0x011A, 0x011A}, {0x011C, 0x011C}, + {0x011E, 0x011E}, {0x0120, 0x0120}, {0x0122, 0x0122}, + {0x0124, 0x0124}, {0x0126, 0x0126}, {0x0128, 0x0128}, + {0x012A, 0x012A}, {0x012C, 0x012C}, {0x012E, 0x012E}, + {0x0130, 0x0130}, {0x0132, 0x0132}, {0x0134, 0x0134}, + {0x0136, 0x0136}, {0x0139, 0x0139}, {0x013B, 0x013B}, + {0x013D, 0x013D}, {0x013F, 0x013F}, {0x0141, 0x0141}, + {0x0143, 0x0143}, {0x0145, 0x0145}, {0x0147, 0x0147}, + {0x014A, 0x014A}, {0x014C, 0x014C}, {0x014E, 0x014E}, + {0x0150, 0x0150}, {0x0152, 0x0152}, {0x0154, 0x0154}, + {0x0156, 0x0156}, {0x0158, 0x0158}, {0x015A, 0x015A}, + {0x015C, 0x015C}, {0x015E, 0x015E}, {0x0160, 0x0160}, + {0x0162, 0x0162}, {0x0164, 0x0164}, {0x0166, 0x0166}, + {0x0168, 0x0168}, {0x016A, 0x016A}, {0x016C, 0x016C}, + {0x016E, 0x016E}, {0x0170, 0x0170}, {0x0172, 0x0172}, + {0x0174, 0x0174}, {0x0176, 0x0176}, {0x0178, 0x0179}, + {0x017B, 0x017B}, {0x017D, 0x017D}, {0x0181, 0x0182}, + {0x0184, 0x0184}, {0x0186, 0x0187}, {0x0189, 0x018B}, + {0x018E, 0x0191}, {0x0193, 0x0194}, {0x0196, 0x0198}, + {0x019C, 0x019D}, {0x019F, 0x01A0}, {0x01A2, 0x01A2}, + {0x01A4, 0x01A4}, {0x01A6, 0x01A7}, {0x01A9, 0x01A9}, + {0x01AC, 0x01AC}, {0x01AE, 0x01AF}, {0x01B1, 0x01B3}, + {0x01B5, 0x01B5}, {0x01B7, 0x01B8}, {0x01BC, 0x01BC}, + {0x01C4, 0x01C4}, {0x01C7, 0x01C7}, {0x01CA, 0x01CA}, + {0x01CD, 0x01CD}, {0x01CF, 0x01CF}, {0x01D1, 0x01D1}, + {0x01D3, 0x01D3}, {0x01D5, 0x01D5}, {0x01D7, 0x01D7}, + {0x01D9, 0x01D9}, {0x01DB, 0x01DB}, {0x01DE, 0x01DE}, + {0x01E0, 0x01E0}, {0x01E2, 0x01E2}, {0x01E4, 0x01E4}, + {0x01E6, 0x01E6}, {0x01E8, 0x01E8}, {0x01EA, 0x01EA}, + {0x01EC, 0x01EC}, {0x01EE, 0x01EE}, {0x01F1, 0x01F1}, + {0x01F4, 0x01F4}, {0x01F6, 0x01F8}, {0x01FA, 0x01FA}, + {0x01FC, 0x01FC}, {0x01FE, 0x01FE}, {0x0200, 0x0200}, + {0x0202, 0x0202}, {0x0204, 0x0204}, {0x0206, 0x0206}, + {0x0208, 0x0208}, {0x020A, 0x020A}, {0x020C, 0x020C}, + {0x020E, 0x020E}, {0x0210, 0x0210}, {0x0212, 0x0212}, + {0x0214, 0x0214}, {0x0216, 0x0216}, {0x0218, 0x0218}, + {0x021A, 0x021A}, {0x021C, 0x021C}, {0x021E, 0x021E}, + {0x0220, 0x0220}, {0x0222, 0x0222}, {0x0224, 0x0224}, + {0x0226, 0x0226}, {0x0228, 0x0228}, {0x022A, 0x022A}, + {0x022C, 0x022C}, {0x022E, 0x022E}, {0x0230, 0x0230}, + {0x0232, 0x0232}, {0x023A, 0x023B}, {0x023D, 0x023E}, + {0x0241, 0x0241}, {0x0243, 0x0246}, {0x0248, 0x0248}, + {0x024A, 0x024A}, {0x024C, 0x024C}, {0x024E, 0x024E}, + {0x0370, 0x0370}, {0x0372, 0x0372}, {0x0376, 0x0376}, + {0x037F, 0x037F}, {0x0386, 0x0386}, {0x0388, 0x038A}, + {0x038C, 0x038C}, {0x038E, 0x038F}, {0x0391, 0x03A1}, + {0x03A3, 0x03AB}, {0x03CF, 0x03CF}, {0x03D2, 0x03D4}, + {0x03D8, 0x03D8}, {0x03DA, 0x03DA}, {0x03DC, 0x03DC}, + {0x03DE, 0x03DE}, {0x03E0, 0x03E0}, {0x03E2, 0x03E2}, + {0x03E4, 0x03E4}, {0x03E6, 0x03E6}, {0x03E8, 0x03E8}, + {0x03EA, 0x03EA}, {0x03EC, 0x03EC}, {0x03EE, 0x03EE}, + {0x03F4, 0x03F4}, {0x03F7, 0x03F7}, {0x03F9, 0x03FA}, + {0x03FD, 0x042F}, {0x0460, 0x0460}, {0x0462, 0x0462}, + {0x0464, 0x0464}, {0x0466, 0x0466}, {0x0468, 0x0468}, + {0x046A, 0x046A}, {0x046C, 0x046C}, {0x046E, 0x046E}, + {0x0470, 0x0470}, {0x0472, 0x0472}, {0x0474, 0x0474}, + {0x0476, 0x0476}, {0x0478, 0x0478}, {0x047A, 0x047A}, + {0x047C, 0x047C}, {0x047E, 0x047E}, {0x0480, 0x0480}, + {0x048A, 0x048A}, {0x048C, 0x048C}, {0x048E, 0x048E}, + {0x0490, 0x0490}, {0x0492, 0x0492}, {0x0494, 0x0494}, + {0x0496, 0x0496}, {0x0498, 0x0498}, {0x049A, 0x049A}, + {0x049C, 0x049C}, {0x049E, 0x049E}, {0x04A0, 0x04A0}, + {0x04A2, 0x04A2}, {0x04A4, 0x04A4}, {0x04A6, 0x04A6}, + {0x04A8, 0x04A8}, {0x04AA, 0x04AA}, {0x04AC, 0x04AC}, + {0x04AE, 0x04AE}, {0x04B0, 0x04B0}, {0x04B2, 0x04B2}, + {0x04B4, 0x04B4}, {0x04B6, 0x04B6}, {0x04B8, 0x04B8}, + {0x04BA, 0x04BA}, {0x04BC, 0x04BC}, {0x04BE, 0x04BE}, + {0x04C0, 0x04C1}, {0x04C3, 0x04C3}, {0x04C5, 0x04C5}, + {0x04C7, 0x04C7}, {0x04C9, 0x04C9}, {0x04CB, 0x04CB}, + {0x04CD, 0x04CD}, {0x04D0, 0x04D0}, {0x04D2, 0x04D2}, + {0x04D4, 0x04D4}, {0x04D6, 0x04D6}, {0x04D8, 0x04D8}, + {0x04DA, 0x04DA}, {0x04DC, 0x04DC}, {0x04DE, 0x04DE}, + {0x04E0, 0x04E0}, {0x04E2, 0x04E2}, {0x04E4, 0x04E4}, + {0x04E6, 0x04E6}, {0x04E8, 0x04E8}, {0x04EA, 0x04EA}, + {0x04EC, 0x04EC}, {0x04EE, 0x04EE}, {0x04F0, 0x04F0}, + {0x04F2, 0x04F2}, {0x04F4, 0x04F4}, {0x04F6, 0x04F6}, + {0x04F8, 0x04F8}, {0x04FA, 0x04FA}, {0x04FC, 0x04FC}, + {0x04FE, 0x04FE}, {0x0500, 0x0500}, {0x0502, 0x0502}, + {0x0504, 0x0504}, {0x0506, 0x0506}, {0x0508, 0x0508}, + {0x050A, 0x050A}, {0x050C, 0x050C}, {0x050E, 0x050E}, + {0x0510, 0x0510}, {0x0512, 0x0512}, {0x0514, 0x0514}, + {0x0516, 0x0516}, {0x0518, 0x0518}, {0x051A, 0x051A}, + {0x051C, 0x051C}, {0x051E, 0x051E}, {0x0520, 0x0520}, + {0x0522, 0x0522}, {0x0524, 0x0524}, {0x0526, 0x0526}, + {0x0528, 0x0528}, {0x052A, 0x052A}, {0x052C, 0x052C}, + {0x052E, 0x052E}, {0x0531, 0x0556}, {0x10A0, 0x10C5}, + {0x10C7, 0x10C7}, {0x10CD, 0x10CD}, {0x13A0, 0x13F5}, + {0x1C90, 0x1CBA}, {0x1CBD, 0x1CBF}, {0x1E00, 0x1E00}, + {0x1E02, 0x1E02}, {0x1E04, 0x1E04}, {0x1E06, 0x1E06}, + {0x1E08, 0x1E08}, {0x1E0A, 0x1E0A}, {0x1E0C, 0x1E0C}, + {0x1E0E, 0x1E0E}, {0x1E10, 0x1E10}, {0x1E12, 0x1E12}, + {0x1E14, 0x1E14}, {0x1E16, 0x1E16}, {0x1E18, 0x1E18}, + {0x1E1A, 0x1E1A}, {0x1E1C, 0x1E1C}, {0x1E1E, 0x1E1E}, + {0x1E20, 0x1E20}, {0x1E22, 0x1E22}, {0x1E24, 0x1E24}, + {0x1E26, 0x1E26}, {0x1E28, 0x1E28}, {0x1E2A, 0x1E2A}, + {0x1E2C, 0x1E2C}, {0x1E2E, 0x1E2E}, {0x1E30, 0x1E30}, + {0x1E32, 0x1E32}, {0x1E34, 0x1E34}, {0x1E36, 0x1E36}, + {0x1E38, 0x1E38}, {0x1E3A, 0x1E3A}, {0x1E3C, 0x1E3C}, + {0x1E3E, 0x1E3E}, {0x1E40, 0x1E40}, {0x1E42, 0x1E42}, + {0x1E44, 0x1E44}, {0x1E46, 0x1E46}, {0x1E48, 0x1E48}, + {0x1E4A, 0x1E4A}, {0x1E4C, 0x1E4C}, {0x1E4E, 0x1E4E}, + {0x1E50, 0x1E50}, {0x1E52, 0x1E52}, {0x1E54, 0x1E54}, + {0x1E56, 0x1E56}, {0x1E58, 0x1E58}, {0x1E5A, 0x1E5A}, + {0x1E5C, 0x1E5C}, {0x1E5E, 0x1E5E}, {0x1E60, 0x1E60}, + {0x1E62, 0x1E62}, {0x1E64, 0x1E64}, {0x1E66, 0x1E66}, + {0x1E68, 0x1E68}, {0x1E6A, 0x1E6A}, {0x1E6C, 0x1E6C}, + {0x1E6E, 0x1E6E}, {0x1E70, 0x1E70}, {0x1E72, 0x1E72}, + {0x1E74, 0x1E74}, {0x1E76, 0x1E76}, {0x1E78, 0x1E78}, + {0x1E7A, 0x1E7A}, {0x1E7C, 0x1E7C}, {0x1E7E, 0x1E7E}, + {0x1E80, 0x1E80}, {0x1E82, 0x1E82}, {0x1E84, 0x1E84}, + {0x1E86, 0x1E86}, {0x1E88, 0x1E88}, {0x1E8A, 0x1E8A}, + {0x1E8C, 0x1E8C}, {0x1E8E, 0x1E8E}, {0x1E90, 0x1E90}, + {0x1E92, 0x1E92}, {0x1E94, 0x1E94}, {0x1E9E, 0x1E9E}, + {0x1EA0, 0x1EA0}, {0x1EA2, 0x1EA2}, {0x1EA4, 0x1EA4}, + {0x1EA6, 0x1EA6}, {0x1EA8, 0x1EA8}, {0x1EAA, 0x1EAA}, + {0x1EAC, 0x1EAC}, {0x1EAE, 0x1EAE}, {0x1EB0, 0x1EB0}, + {0x1EB2, 0x1EB2}, {0x1EB4, 0x1EB4}, {0x1EB6, 0x1EB6}, + {0x1EB8, 0x1EB8}, {0x1EBA, 0x1EBA}, {0x1EBC, 0x1EBC}, + {0x1EBE, 0x1EBE}, {0x1EC0, 0x1EC0}, {0x1EC2, 0x1EC2}, + {0x1EC4, 0x1EC4}, {0x1EC6, 0x1EC6}, {0x1EC8, 0x1EC8}, + {0x1ECA, 0x1ECA}, {0x1ECC, 0x1ECC}, {0x1ECE, 0x1ECE}, + {0x1ED0, 0x1ED0}, {0x1ED2, 0x1ED2}, {0x1ED4, 0x1ED4}, + {0x1ED6, 0x1ED6}, {0x1ED8, 0x1ED8}, {0x1EDA, 0x1EDA}, + {0x1EDC, 0x1EDC}, {0x1EDE, 0x1EDE}, {0x1EE0, 0x1EE0}, + {0x1EE2, 0x1EE2}, {0x1EE4, 0x1EE4}, {0x1EE6, 0x1EE6}, + {0x1EE8, 0x1EE8}, {0x1EEA, 0x1EEA}, {0x1EEC, 0x1EEC}, + {0x1EEE, 0x1EEE}, {0x1EF0, 0x1EF0}, {0x1EF2, 0x1EF2}, + {0x1EF4, 0x1EF4}, {0x1EF6, 0x1EF6}, {0x1EF8, 0x1EF8}, + {0x1EFA, 0x1EFA}, {0x1EFC, 0x1EFC}, {0x1EFE, 0x1EFE}, + {0x1F08, 0x1F0F}, {0x1F18, 0x1F1D}, {0x1F28, 0x1F2F}, + {0x1F38, 0x1F3F}, {0x1F48, 0x1F4D}, {0x1F59, 0x1F59}, + {0x1F5B, 0x1F5B}, {0x1F5D, 0x1F5D}, {0x1F5F, 0x1F5F}, + {0x1F68, 0x1F6F}, {0x1FB8, 0x1FBB}, {0x1FC8, 0x1FCB}, + {0x1FD8, 0x1FDB}, {0x1FE8, 0x1FEC}, {0x1FF8, 0x1FFB}, + {0x2102, 0x2102}, {0x2107, 0x2107}, {0x210B, 0x210D}, + {0x2110, 0x2112}, {0x2115, 0x2115}, {0x2119, 0x211D}, + {0x2124, 0x2124}, {0x2126, 0x2126}, {0x2128, 0x2128}, + {0x212A, 0x212D}, {0x2130, 0x2133}, {0x213E, 0x213F}, + {0x2145, 0x2145}, {0x2160, 0x216F}, {0x2183, 0x2183}, + {0x24B6, 0x24CF}, {0x2C00, 0x2C2F}, {0x2C60, 0x2C60}, + {0x2C62, 0x2C64}, {0x2C67, 0x2C67}, {0x2C69, 0x2C69}, + {0x2C6B, 0x2C6B}, {0x2C6D, 0x2C70}, {0x2C72, 0x2C72}, + {0x2C75, 0x2C75}, {0x2C7E, 0x2C80}, {0x2C82, 0x2C82}, + {0x2C84, 0x2C84}, {0x2C86, 0x2C86}, {0x2C88, 0x2C88}, + {0x2C8A, 0x2C8A}, {0x2C8C, 0x2C8C}, {0x2C8E, 0x2C8E}, + {0x2C90, 0x2C90}, {0x2C92, 0x2C92}, {0x2C94, 0x2C94}, + {0x2C96, 0x2C96}, {0x2C98, 0x2C98}, {0x2C9A, 0x2C9A}, + {0x2C9C, 0x2C9C}, {0x2C9E, 0x2C9E}, {0x2CA0, 0x2CA0}, + {0x2CA2, 0x2CA2}, {0x2CA4, 0x2CA4}, {0x2CA6, 0x2CA6}, + {0x2CA8, 0x2CA8}, {0x2CAA, 0x2CAA}, {0x2CAC, 0x2CAC}, + {0x2CAE, 0x2CAE}, {0x2CB0, 0x2CB0}, {0x2CB2, 0x2CB2}, + {0x2CB4, 0x2CB4}, {0x2CB6, 0x2CB6}, {0x2CB8, 0x2CB8}, + {0x2CBA, 0x2CBA}, {0x2CBC, 0x2CBC}, {0x2CBE, 0x2CBE}, + {0x2CC0, 0x2CC0}, {0x2CC2, 0x2CC2}, {0x2CC4, 0x2CC4}, + {0x2CC6, 0x2CC6}, {0x2CC8, 0x2CC8}, {0x2CCA, 0x2CCA}, + {0x2CCC, 0x2CCC}, {0x2CCE, 0x2CCE}, {0x2CD0, 0x2CD0}, + {0x2CD2, 0x2CD2}, {0x2CD4, 0x2CD4}, {0x2CD6, 0x2CD6}, + {0x2CD8, 0x2CD8}, {0x2CDA, 0x2CDA}, {0x2CDC, 0x2CDC}, + {0x2CDE, 0x2CDE}, {0x2CE0, 0x2CE0}, {0x2CE2, 0x2CE2}, + {0x2CEB, 0x2CEB}, {0x2CED, 0x2CED}, {0x2CF2, 0x2CF2}, + {0xA640, 0xA640}, {0xA642, 0xA642}, {0xA644, 0xA644}, + {0xA646, 0xA646}, {0xA648, 0xA648}, {0xA64A, 0xA64A}, + {0xA64C, 0xA64C}, {0xA64E, 0xA64E}, {0xA650, 0xA650}, + {0xA652, 0xA652}, {0xA654, 0xA654}, {0xA656, 0xA656}, + {0xA658, 0xA658}, {0xA65A, 0xA65A}, {0xA65C, 0xA65C}, + {0xA65E, 0xA65E}, {0xA660, 0xA660}, {0xA662, 0xA662}, + {0xA664, 0xA664}, {0xA666, 0xA666}, {0xA668, 0xA668}, + {0xA66A, 0xA66A}, {0xA66C, 0xA66C}, {0xA680, 0xA680}, + {0xA682, 0xA682}, {0xA684, 0xA684}, {0xA686, 0xA686}, + {0xA688, 0xA688}, {0xA68A, 0xA68A}, {0xA68C, 0xA68C}, + {0xA68E, 0xA68E}, {0xA690, 0xA690}, {0xA692, 0xA692}, + {0xA694, 0xA694}, {0xA696, 0xA696}, {0xA698, 0xA698}, + {0xA69A, 0xA69A}, {0xA722, 0xA722}, {0xA724, 0xA724}, + {0xA726, 0xA726}, {0xA728, 0xA728}, {0xA72A, 0xA72A}, + {0xA72C, 0xA72C}, {0xA72E, 0xA72E}, {0xA732, 0xA732}, + {0xA734, 0xA734}, {0xA736, 0xA736}, {0xA738, 0xA738}, + {0xA73A, 0xA73A}, {0xA73C, 0xA73C}, {0xA73E, 0xA73E}, + {0xA740, 0xA740}, {0xA742, 0xA742}, {0xA744, 0xA744}, + {0xA746, 0xA746}, {0xA748, 0xA748}, {0xA74A, 0xA74A}, + {0xA74C, 0xA74C}, {0xA74E, 0xA74E}, {0xA750, 0xA750}, + {0xA752, 0xA752}, {0xA754, 0xA754}, {0xA756, 0xA756}, + {0xA758, 0xA758}, {0xA75A, 0xA75A}, {0xA75C, 0xA75C}, + {0xA75E, 0xA75E}, {0xA760, 0xA760}, {0xA762, 0xA762}, + {0xA764, 0xA764}, {0xA766, 0xA766}, {0xA768, 0xA768}, + {0xA76A, 0xA76A}, {0xA76C, 0xA76C}, {0xA76E, 0xA76E}, + {0xA779, 0xA779}, {0xA77B, 0xA77B}, {0xA77D, 0xA77E}, + {0xA780, 0xA780}, {0xA782, 0xA782}, {0xA784, 0xA784}, + {0xA786, 0xA786}, {0xA78B, 0xA78B}, {0xA78D, 0xA78D}, + {0xA790, 0xA790}, {0xA792, 0xA792}, {0xA796, 0xA796}, + {0xA798, 0xA798}, {0xA79A, 0xA79A}, {0xA79C, 0xA79C}, + {0xA79E, 0xA79E}, {0xA7A0, 0xA7A0}, {0xA7A2, 0xA7A2}, + {0xA7A4, 0xA7A4}, {0xA7A6, 0xA7A6}, {0xA7A8, 0xA7A8}, + {0xA7AA, 0xA7AE}, {0xA7B0, 0xA7B4}, {0xA7B6, 0xA7B6}, + {0xA7B8, 0xA7B8}, {0xA7BA, 0xA7BA}, {0xA7BC, 0xA7BC}, + {0xA7BE, 0xA7BE}, {0xA7C0, 0xA7C0}, {0xA7C2, 0xA7C2}, + {0xA7C4, 0xA7C7}, {0xA7C9, 0xA7C9}, {0xA7D0, 0xA7D0}, + {0xA7D6, 0xA7D6}, {0xA7D8, 0xA7D8}, {0xA7F5, 0xA7F5}, + {0xFF21, 0xFF3A}, {0x10400, 0x10427}, {0x104B0, 0x104D3}, + {0x10570, 0x1057A}, {0x1057C, 0x1058A}, {0x1058C, 0x10592}, + {0x10594, 0x10595}, {0x10C80, 0x10CB2}, {0x118A0, 0x118BF}, + {0x16E40, 0x16E5F}, {0x1D400, 0x1D419}, {0x1D434, 0x1D44D}, + {0x1D468, 0x1D481}, {0x1D49C, 0x1D49C}, {0x1D49E, 0x1D49F}, + {0x1D4A2, 0x1D4A2}, {0x1D4A5, 0x1D4A6}, {0x1D4A9, 0x1D4AC}, + {0x1D4AE, 0x1D4B5}, {0x1D4D0, 0x1D4E9}, {0x1D504, 0x1D505}, + {0x1D507, 0x1D50A}, {0x1D50D, 0x1D514}, {0x1D516, 0x1D51C}, + {0x1D538, 0x1D539}, {0x1D53B, 0x1D53E}, {0x1D540, 0x1D544}, + {0x1D546, 0x1D546}, {0x1D54A, 0x1D550}, {0x1D56C, 0x1D585}, + {0x1D5A0, 0x1D5B9}, {0x1D5D4, 0x1D5ED}, {0x1D608, 0x1D621}, + {0x1D63C, 0x1D655}, {0x1D670, 0x1D689}, {0x1D6A8, 0x1D6C0}, + {0x1D6E2, 0x1D6FA}, {0x1D71C, 0x1D734}, {0x1D756, 0x1D76E}, + {0x1D790, 0x1D7A8}, {0x1D7CA, 0x1D7CA}, {0x1E900, 0x1E921}, + {0x1F130, 0x1F149}, {0x1F150, 0x1F169}, {0x1F170, 0x1F189}, + // Binary: Cased + {0x0041, 0x005A}, {0x0061, 0x007A}, {0x00AA, 0x00AA}, + {0x00B5, 0x00B5}, {0x00BA, 0x00BA}, {0x00C0, 0x00D6}, + {0x00D8, 0x00F6}, {0x00F8, 0x01BA}, {0x01BC, 0x01BF}, + {0x01C4, 0x0293}, {0x0295, 0x02B8}, {0x02C0, 0x02C1}, + {0x02E0, 0x02E4}, {0x0345, 0x0345}, {0x0370, 0x0373}, + {0x0376, 0x0377}, {0x037A, 0x037D}, {0x037F, 0x037F}, + {0x0386, 0x0386}, {0x0388, 0x038A}, {0x038C, 0x038C}, + {0x038E, 0x03A1}, {0x03A3, 0x03F5}, {0x03F7, 0x0481}, + {0x048A, 0x052F}, {0x0531, 0x0556}, {0x0560, 0x0588}, + {0x10A0, 0x10C5}, {0x10C7, 0x10C7}, {0x10CD, 0x10CD}, + {0x10D0, 0x10FA}, {0x10FC, 0x10FF}, {0x13A0, 0x13F5}, + {0x13F8, 0x13FD}, {0x1C80, 0x1C88}, {0x1C90, 0x1CBA}, + {0x1CBD, 0x1CBF}, {0x1D00, 0x1DBF}, {0x1E00, 0x1F15}, + {0x1F18, 0x1F1D}, {0x1F20, 0x1F45}, {0x1F48, 0x1F4D}, + {0x1F50, 0x1F57}, {0x1F59, 0x1F59}, {0x1F5B, 0x1F5B}, + {0x1F5D, 0x1F5D}, {0x1F5F, 0x1F7D}, {0x1F80, 0x1FB4}, + {0x1FB6, 0x1FBC}, {0x1FBE, 0x1FBE}, {0x1FC2, 0x1FC4}, + {0x1FC6, 0x1FCC}, {0x1FD0, 0x1FD3}, {0x1FD6, 0x1FDB}, + {0x1FE0, 0x1FEC}, {0x1FF2, 0x1FF4}, {0x1FF6, 0x1FFC}, + {0x2071, 0x2071}, {0x207F, 0x207F}, {0x2090, 0x209C}, + {0x2102, 0x2102}, {0x2107, 0x2107}, {0x210A, 0x2113}, + {0x2115, 0x2115}, {0x2119, 0x211D}, {0x2124, 0x2124}, + {0x2126, 0x2126}, {0x2128, 0x2128}, {0x212A, 0x212D}, + {0x212F, 0x2134}, {0x2139, 0x2139}, {0x213C, 0x213F}, + {0x2145, 0x2149}, {0x214E, 0x214E}, {0x2160, 0x217F}, + {0x2183, 0x2184}, {0x24B6, 0x24E9}, {0x2C00, 0x2CE4}, + {0x2CEB, 0x2CEE}, {0x2CF2, 0x2CF3}, {0x2D00, 0x2D25}, + {0x2D27, 0x2D27}, {0x2D2D, 0x2D2D}, {0xA640, 0xA66D}, + {0xA680, 0xA69D}, {0xA722, 0xA787}, {0xA78B, 0xA78E}, + {0xA790, 0xA7CA}, {0xA7D0, 0xA7D1}, {0xA7D3, 0xA7D3}, + {0xA7D5, 0xA7D9}, {0xA7F2, 0xA7F6}, {0xA7F8, 0xA7FA}, + {0xAB30, 0xAB5A}, {0xAB5C, 0xAB69}, {0xAB70, 0xABBF}, + {0xFB00, 0xFB06}, {0xFB13, 0xFB17}, {0xFF21, 0xFF3A}, + {0xFF41, 0xFF5A}, {0x10400, 0x1044F}, {0x104B0, 0x104D3}, + {0x104D8, 0x104FB}, {0x10570, 0x1057A}, {0x1057C, 0x1058A}, + {0x1058C, 0x10592}, {0x10594, 0x10595}, {0x10597, 0x105A1}, + {0x105A3, 0x105B1}, {0x105B3, 0x105B9}, {0x105BB, 0x105BC}, + {0x10780, 0x10780}, {0x10783, 0x10785}, {0x10787, 0x107B0}, + {0x107B2, 0x107BA}, {0x10C80, 0x10CB2}, {0x10CC0, 0x10CF2}, + {0x118A0, 0x118DF}, {0x16E40, 0x16E7F}, {0x1D400, 0x1D454}, + {0x1D456, 0x1D49C}, {0x1D49E, 0x1D49F}, {0x1D4A2, 0x1D4A2}, + {0x1D4A5, 0x1D4A6}, {0x1D4A9, 0x1D4AC}, {0x1D4AE, 0x1D4B9}, + {0x1D4BB, 0x1D4BB}, {0x1D4BD, 0x1D4C3}, {0x1D4C5, 0x1D505}, + {0x1D507, 0x1D50A}, {0x1D50D, 0x1D514}, {0x1D516, 0x1D51C}, + {0x1D51E, 0x1D539}, {0x1D53B, 0x1D53E}, {0x1D540, 0x1D544}, + {0x1D546, 0x1D546}, {0x1D54A, 0x1D550}, {0x1D552, 0x1D6A5}, + {0x1D6A8, 0x1D6C0}, {0x1D6C2, 0x1D6DA}, {0x1D6DC, 0x1D6FA}, + {0x1D6FC, 0x1D714}, {0x1D716, 0x1D734}, {0x1D736, 0x1D74E}, + {0x1D750, 0x1D76E}, {0x1D770, 0x1D788}, {0x1D78A, 0x1D7A8}, + {0x1D7AA, 0x1D7C2}, {0x1D7C4, 0x1D7CB}, {0x1DF00, 0x1DF09}, + {0x1DF0B, 0x1DF1E}, {0x1DF25, 0x1DF2A}, {0x1E030, 0x1E06D}, + {0x1E900, 0x1E943}, {0x1F130, 0x1F149}, {0x1F150, 0x1F169}, + {0x1F170, 0x1F189}, + // Binary: Case_Ignorable + {0x0027, 0x0027}, {0x002E, 0x002E}, {0x003A, 0x003A}, + {0x005E, 0x005E}, {0x0060, 0x0060}, {0x00A8, 0x00A8}, + {0x00AD, 0x00AD}, {0x00AF, 0x00AF}, {0x00B4, 0x00B4}, + {0x00B7, 0x00B8}, {0x02B0, 0x036F}, {0x0374, 0x0375}, + {0x037A, 0x037A}, {0x0384, 0x0385}, {0x0387, 0x0387}, + {0x0483, 0x0489}, {0x0559, 0x0559}, {0x055F, 0x055F}, + {0x0591, 0x05BD}, {0x05BF, 0x05BF}, {0x05C1, 0x05C2}, + {0x05C4, 0x05C5}, {0x05C7, 0x05C7}, {0x05F4, 0x05F4}, + {0x0600, 0x0605}, {0x0610, 0x061A}, {0x061C, 0x061C}, + {0x0640, 0x0640}, {0x064B, 0x065F}, {0x0670, 0x0670}, + {0x06D6, 0x06DD}, {0x06DF, 0x06E8}, {0x06EA, 0x06ED}, + {0x070F, 0x070F}, {0x0711, 0x0711}, {0x0730, 0x074A}, + {0x07A6, 0x07B0}, {0x07EB, 0x07F5}, {0x07FA, 0x07FA}, + {0x07FD, 0x07FD}, {0x0816, 0x082D}, {0x0859, 0x085B}, + {0x0888, 0x0888}, {0x0890, 0x0891}, {0x0898, 0x089F}, + {0x08C9, 0x0902}, {0x093A, 0x093A}, {0x093C, 0x093C}, + {0x0941, 0x0948}, {0x094D, 0x094D}, {0x0951, 0x0957}, + {0x0962, 0x0963}, {0x0971, 0x0971}, {0x0981, 0x0981}, + {0x09BC, 0x09BC}, {0x09C1, 0x09C4}, {0x09CD, 0x09CD}, + {0x09E2, 0x09E3}, {0x09FE, 0x09FE}, {0x0A01, 0x0A02}, + {0x0A3C, 0x0A3C}, {0x0A41, 0x0A42}, {0x0A47, 0x0A48}, + {0x0A4B, 0x0A4D}, {0x0A51, 0x0A51}, {0x0A70, 0x0A71}, + {0x0A75, 0x0A75}, {0x0A81, 0x0A82}, {0x0ABC, 0x0ABC}, + {0x0AC1, 0x0AC5}, {0x0AC7, 0x0AC8}, {0x0ACD, 0x0ACD}, + {0x0AE2, 0x0AE3}, {0x0AFA, 0x0AFF}, {0x0B01, 0x0B01}, + {0x0B3C, 0x0B3C}, {0x0B3F, 0x0B3F}, {0x0B41, 0x0B44}, + {0x0B4D, 0x0B4D}, {0x0B55, 0x0B56}, {0x0B62, 0x0B63}, + {0x0B82, 0x0B82}, {0x0BC0, 0x0BC0}, {0x0BCD, 0x0BCD}, + {0x0C00, 0x0C00}, {0x0C04, 0x0C04}, {0x0C3C, 0x0C3C}, + {0x0C3E, 0x0C40}, {0x0C46, 0x0C48}, {0x0C4A, 0x0C4D}, + {0x0C55, 0x0C56}, {0x0C62, 0x0C63}, {0x0C81, 0x0C81}, + {0x0CBC, 0x0CBC}, {0x0CBF, 0x0CBF}, {0x0CC6, 0x0CC6}, + {0x0CCC, 0x0CCD}, {0x0CE2, 0x0CE3}, {0x0D00, 0x0D01}, + {0x0D3B, 0x0D3C}, {0x0D41, 0x0D44}, {0x0D4D, 0x0D4D}, + {0x0D62, 0x0D63}, {0x0D81, 0x0D81}, {0x0DCA, 0x0DCA}, + {0x0DD2, 0x0DD4}, {0x0DD6, 0x0DD6}, {0x0E31, 0x0E31}, + {0x0E34, 0x0E3A}, {0x0E46, 0x0E4E}, {0x0EB1, 0x0EB1}, + {0x0EB4, 0x0EBC}, {0x0EC6, 0x0EC6}, {0x0EC8, 0x0ECE}, + {0x0F18, 0x0F19}, {0x0F35, 0x0F35}, {0x0F37, 0x0F37}, + {0x0F39, 0x0F39}, {0x0F71, 0x0F7E}, {0x0F80, 0x0F84}, + {0x0F86, 0x0F87}, {0x0F8D, 0x0F97}, {0x0F99, 0x0FBC}, + {0x0FC6, 0x0FC6}, {0x102D, 0x1030}, {0x1032, 0x1037}, + {0x1039, 0x103A}, {0x103D, 0x103E}, {0x1058, 0x1059}, + {0x105E, 0x1060}, {0x1071, 0x1074}, {0x1082, 0x1082}, + {0x1085, 0x1086}, {0x108D, 0x108D}, {0x109D, 0x109D}, + {0x10FC, 0x10FC}, {0x135D, 0x135F}, {0x1712, 0x1714}, + {0x1732, 0x1733}, {0x1752, 0x1753}, {0x1772, 0x1773}, + {0x17B4, 0x17B5}, {0x17B7, 0x17BD}, {0x17C6, 0x17C6}, + {0x17C9, 0x17D3}, {0x17D7, 0x17D7}, {0x17DD, 0x17DD}, + {0x180B, 0x180F}, {0x1843, 0x1843}, {0x1885, 0x1886}, + {0x18A9, 0x18A9}, {0x1920, 0x1922}, {0x1927, 0x1928}, + {0x1932, 0x1932}, {0x1939, 0x193B}, {0x1A17, 0x1A18}, + {0x1A1B, 0x1A1B}, {0x1A56, 0x1A56}, {0x1A58, 0x1A5E}, + {0x1A60, 0x1A60}, {0x1A62, 0x1A62}, {0x1A65, 0x1A6C}, + {0x1A73, 0x1A7C}, {0x1A7F, 0x1A7F}, {0x1AA7, 0x1AA7}, + {0x1AB0, 0x1ACE}, {0x1B00, 0x1B03}, {0x1B34, 0x1B34}, + {0x1B36, 0x1B3A}, {0x1B3C, 0x1B3C}, {0x1B42, 0x1B42}, + {0x1B6B, 0x1B73}, {0x1B80, 0x1B81}, {0x1BA2, 0x1BA5}, + {0x1BA8, 0x1BA9}, {0x1BAB, 0x1BAD}, {0x1BE6, 0x1BE6}, + {0x1BE8, 0x1BE9}, {0x1BED, 0x1BED}, {0x1BEF, 0x1BF1}, + {0x1C2C, 0x1C33}, {0x1C36, 0x1C37}, {0x1C78, 0x1C7D}, + {0x1CD0, 0x1CD2}, {0x1CD4, 0x1CE0}, {0x1CE2, 0x1CE8}, + {0x1CED, 0x1CED}, {0x1CF4, 0x1CF4}, {0x1CF8, 0x1CF9}, + {0x1D2C, 0x1D6A}, {0x1D78, 0x1D78}, {0x1D9B, 0x1DFF}, + {0x1FBD, 0x1FBD}, {0x1FBF, 0x1FC1}, {0x1FCD, 0x1FCF}, + {0x1FDD, 0x1FDF}, {0x1FED, 0x1FEF}, {0x1FFD, 0x1FFE}, + {0x200B, 0x200F}, {0x2018, 0x2019}, {0x2024, 0x2024}, + {0x2027, 0x2027}, {0x202A, 0x202E}, {0x2060, 0x2064}, + {0x2066, 0x206F}, {0x2071, 0x2071}, {0x207F, 0x207F}, + {0x2090, 0x209C}, {0x20D0, 0x20F0}, {0x2C7C, 0x2C7D}, + {0x2CEF, 0x2CF1}, {0x2D6F, 0x2D6F}, {0x2D7F, 0x2D7F}, + {0x2DE0, 0x2DFF}, {0x2E2F, 0x2E2F}, {0x3005, 0x3005}, + {0x302A, 0x302D}, {0x3031, 0x3035}, {0x303B, 0x303B}, + {0x3099, 0x309E}, {0x30FC, 0x30FE}, {0xA015, 0xA015}, + {0xA4F8, 0xA4FD}, {0xA60C, 0xA60C}, {0xA66F, 0xA672}, + {0xA674, 0xA67D}, {0xA67F, 0xA67F}, {0xA69C, 0xA69F}, + {0xA6F0, 0xA6F1}, {0xA700, 0xA721}, {0xA770, 0xA770}, + {0xA788, 0xA78A}, {0xA7F2, 0xA7F4}, {0xA7F8, 0xA7F9}, + {0xA802, 0xA802}, {0xA806, 0xA806}, {0xA80B, 0xA80B}, + {0xA825, 0xA826}, {0xA82C, 0xA82C}, {0xA8C4, 0xA8C5}, + {0xA8E0, 0xA8F1}, {0xA8FF, 0xA8FF}, {0xA926, 0xA92D}, + {0xA947, 0xA951}, {0xA980, 0xA982}, {0xA9B3, 0xA9B3}, + {0xA9B6, 0xA9B9}, {0xA9BC, 0xA9BD}, {0xA9CF, 0xA9CF}, + {0xA9E5, 0xA9E6}, {0xAA29, 0xAA2E}, {0xAA31, 0xAA32}, + {0xAA35, 0xAA36}, {0xAA43, 0xAA43}, {0xAA4C, 0xAA4C}, + {0xAA70, 0xAA70}, {0xAA7C, 0xAA7C}, {0xAAB0, 0xAAB0}, + {0xAAB2, 0xAAB4}, {0xAAB7, 0xAAB8}, {0xAABE, 0xAABF}, + {0xAAC1, 0xAAC1}, {0xAADD, 0xAADD}, {0xAAEC, 0xAAED}, + {0xAAF3, 0xAAF4}, {0xAAF6, 0xAAF6}, {0xAB5B, 0xAB5F}, + {0xAB69, 0xAB6B}, {0xABE5, 0xABE5}, {0xABE8, 0xABE8}, + {0xABED, 0xABED}, {0xFB1E, 0xFB1E}, {0xFBB2, 0xFBC2}, + {0xFE00, 0xFE0F}, {0xFE13, 0xFE13}, {0xFE20, 0xFE2F}, + {0xFE52, 0xFE52}, {0xFE55, 0xFE55}, {0xFEFF, 0xFEFF}, + {0xFF07, 0xFF07}, {0xFF0E, 0xFF0E}, {0xFF1A, 0xFF1A}, + {0xFF3E, 0xFF3E}, {0xFF40, 0xFF40}, {0xFF70, 0xFF70}, + {0xFF9E, 0xFF9F}, {0xFFE3, 0xFFE3}, {0xFFF9, 0xFFFB}, + {0x101FD, 0x101FD}, {0x102E0, 0x102E0}, {0x10376, 0x1037A}, + {0x10780, 0x10785}, {0x10787, 0x107B0}, {0x107B2, 0x107BA}, + {0x10A01, 0x10A03}, {0x10A05, 0x10A06}, {0x10A0C, 0x10A0F}, + {0x10A38, 0x10A3A}, {0x10A3F, 0x10A3F}, {0x10AE5, 0x10AE6}, + {0x10D24, 0x10D27}, {0x10EAB, 0x10EAC}, {0x10EFD, 0x10EFF}, + {0x10F46, 0x10F50}, {0x10F82, 0x10F85}, {0x11001, 0x11001}, + {0x11038, 0x11046}, {0x11070, 0x11070}, {0x11073, 0x11074}, + {0x1107F, 0x11081}, {0x110B3, 0x110B6}, {0x110B9, 0x110BA}, + {0x110BD, 0x110BD}, {0x110C2, 0x110C2}, {0x110CD, 0x110CD}, + {0x11100, 0x11102}, {0x11127, 0x1112B}, {0x1112D, 0x11134}, + {0x11173, 0x11173}, {0x11180, 0x11181}, {0x111B6, 0x111BE}, + {0x111C9, 0x111CC}, {0x111CF, 0x111CF}, {0x1122F, 0x11231}, + {0x11234, 0x11234}, {0x11236, 0x11237}, {0x1123E, 0x1123E}, + {0x11241, 0x11241}, {0x112DF, 0x112DF}, {0x112E3, 0x112EA}, + {0x11300, 0x11301}, {0x1133B, 0x1133C}, {0x11340, 0x11340}, + {0x11366, 0x1136C}, {0x11370, 0x11374}, {0x11438, 0x1143F}, + {0x11442, 0x11444}, {0x11446, 0x11446}, {0x1145E, 0x1145E}, + {0x114B3, 0x114B8}, {0x114BA, 0x114BA}, {0x114BF, 0x114C0}, + {0x114C2, 0x114C3}, {0x115B2, 0x115B5}, {0x115BC, 0x115BD}, + {0x115BF, 0x115C0}, {0x115DC, 0x115DD}, {0x11633, 0x1163A}, + {0x1163D, 0x1163D}, {0x1163F, 0x11640}, {0x116AB, 0x116AB}, + {0x116AD, 0x116AD}, {0x116B0, 0x116B5}, {0x116B7, 0x116B7}, + {0x1171D, 0x1171F}, {0x11722, 0x11725}, {0x11727, 0x1172B}, + {0x1182F, 0x11837}, {0x11839, 0x1183A}, {0x1193B, 0x1193C}, + {0x1193E, 0x1193E}, {0x11943, 0x11943}, {0x119D4, 0x119D7}, + {0x119DA, 0x119DB}, {0x119E0, 0x119E0}, {0x11A01, 0x11A0A}, + {0x11A33, 0x11A38}, {0x11A3B, 0x11A3E}, {0x11A47, 0x11A47}, + {0x11A51, 0x11A56}, {0x11A59, 0x11A5B}, {0x11A8A, 0x11A96}, + {0x11A98, 0x11A99}, {0x11C30, 0x11C36}, {0x11C38, 0x11C3D}, + {0x11C3F, 0x11C3F}, {0x11C92, 0x11CA7}, {0x11CAA, 0x11CB0}, + {0x11CB2, 0x11CB3}, {0x11CB5, 0x11CB6}, {0x11D31, 0x11D36}, + {0x11D3A, 0x11D3A}, {0x11D3C, 0x11D3D}, {0x11D3F, 0x11D45}, + {0x11D47, 0x11D47}, {0x11D90, 0x11D91}, {0x11D95, 0x11D95}, + {0x11D97, 0x11D97}, {0x11EF3, 0x11EF4}, {0x11F00, 0x11F01}, + {0x11F36, 0x11F3A}, {0x11F40, 0x11F40}, {0x11F42, 0x11F42}, + {0x13430, 0x13440}, {0x13447, 0x13455}, {0x16AF0, 0x16AF4}, + {0x16B30, 0x16B36}, {0x16B40, 0x16B43}, {0x16F4F, 0x16F4F}, + {0x16F8F, 0x16F9F}, {0x16FE0, 0x16FE1}, {0x16FE3, 0x16FE4}, + {0x1AFF0, 0x1AFF3}, {0x1AFF5, 0x1AFFB}, {0x1AFFD, 0x1AFFE}, + {0x1BC9D, 0x1BC9E}, {0x1BCA0, 0x1BCA3}, {0x1CF00, 0x1CF2D}, + {0x1CF30, 0x1CF46}, {0x1D167, 0x1D169}, {0x1D173, 0x1D182}, + {0x1D185, 0x1D18B}, {0x1D1AA, 0x1D1AD}, {0x1D242, 0x1D244}, + {0x1DA00, 0x1DA36}, {0x1DA3B, 0x1DA6C}, {0x1DA75, 0x1DA75}, + {0x1DA84, 0x1DA84}, {0x1DA9B, 0x1DA9F}, {0x1DAA1, 0x1DAAF}, + {0x1E000, 0x1E006}, {0x1E008, 0x1E018}, {0x1E01B, 0x1E021}, + {0x1E023, 0x1E024}, {0x1E026, 0x1E02A}, {0x1E030, 0x1E06D}, + {0x1E08F, 0x1E08F}, {0x1E130, 0x1E13D}, {0x1E2AE, 0x1E2AE}, + {0x1E2EC, 0x1E2EF}, {0x1E4EB, 0x1E4EF}, {0x1E8D0, 0x1E8D6}, + {0x1E944, 0x1E94B}, {0x1F3FB, 0x1F3FF}, {0xE0001, 0xE0001}, + {0xE0020, 0xE007F}, {0xE0100, 0xE01EF}, + // Binary: Changes_When_Lowercased + {0x0041, 0x005A}, {0x00C0, 0x00D6}, {0x00D8, 0x00DE}, + {0x0100, 0x0100}, {0x0102, 0x0102}, {0x0104, 0x0104}, + {0x0106, 0x0106}, {0x0108, 0x0108}, {0x010A, 0x010A}, + {0x010C, 0x010C}, {0x010E, 0x010E}, {0x0110, 0x0110}, + {0x0112, 0x0112}, {0x0114, 0x0114}, {0x0116, 0x0116}, + {0x0118, 0x0118}, {0x011A, 0x011A}, {0x011C, 0x011C}, + {0x011E, 0x011E}, {0x0120, 0x0120}, {0x0122, 0x0122}, + {0x0124, 0x0124}, {0x0126, 0x0126}, {0x0128, 0x0128}, + {0x012A, 0x012A}, {0x012C, 0x012C}, {0x012E, 0x012E}, + {0x0130, 0x0130}, {0x0132, 0x0132}, {0x0134, 0x0134}, + {0x0136, 0x0136}, {0x0139, 0x0139}, {0x013B, 0x013B}, + {0x013D, 0x013D}, {0x013F, 0x013F}, {0x0141, 0x0141}, + {0x0143, 0x0143}, {0x0145, 0x0145}, {0x0147, 0x0147}, + {0x014A, 0x014A}, {0x014C, 0x014C}, {0x014E, 0x014E}, + {0x0150, 0x0150}, {0x0152, 0x0152}, {0x0154, 0x0154}, + {0x0156, 0x0156}, {0x0158, 0x0158}, {0x015A, 0x015A}, + {0x015C, 0x015C}, {0x015E, 0x015E}, {0x0160, 0x0160}, + {0x0162, 0x0162}, {0x0164, 0x0164}, {0x0166, 0x0166}, + {0x0168, 0x0168}, {0x016A, 0x016A}, {0x016C, 0x016C}, + {0x016E, 0x016E}, {0x0170, 0x0170}, {0x0172, 0x0172}, + {0x0174, 0x0174}, {0x0176, 0x0176}, {0x0178, 0x0179}, + {0x017B, 0x017B}, {0x017D, 0x017D}, {0x0181, 0x0182}, + {0x0184, 0x0184}, {0x0186, 0x0187}, {0x0189, 0x018B}, + {0x018E, 0x0191}, {0x0193, 0x0194}, {0x0196, 0x0198}, + {0x019C, 0x019D}, {0x019F, 0x01A0}, {0x01A2, 0x01A2}, + {0x01A4, 0x01A4}, {0x01A6, 0x01A7}, {0x01A9, 0x01A9}, + {0x01AC, 0x01AC}, {0x01AE, 0x01AF}, {0x01B1, 0x01B3}, + {0x01B5, 0x01B5}, {0x01B7, 0x01B8}, {0x01BC, 0x01BC}, + {0x01C4, 0x01C5}, {0x01C7, 0x01C8}, {0x01CA, 0x01CB}, + {0x01CD, 0x01CD}, {0x01CF, 0x01CF}, {0x01D1, 0x01D1}, + {0x01D3, 0x01D3}, {0x01D5, 0x01D5}, {0x01D7, 0x01D7}, + {0x01D9, 0x01D9}, {0x01DB, 0x01DB}, {0x01DE, 0x01DE}, + {0x01E0, 0x01E0}, {0x01E2, 0x01E2}, {0x01E4, 0x01E4}, + {0x01E6, 0x01E6}, {0x01E8, 0x01E8}, {0x01EA, 0x01EA}, + {0x01EC, 0x01EC}, {0x01EE, 0x01EE}, {0x01F1, 0x01F2}, + {0x01F4, 0x01F4}, {0x01F6, 0x01F8}, {0x01FA, 0x01FA}, + {0x01FC, 0x01FC}, {0x01FE, 0x01FE}, {0x0200, 0x0200}, + {0x0202, 0x0202}, {0x0204, 0x0204}, {0x0206, 0x0206}, + {0x0208, 0x0208}, {0x020A, 0x020A}, {0x020C, 0x020C}, + {0x020E, 0x020E}, {0x0210, 0x0210}, {0x0212, 0x0212}, + {0x0214, 0x0214}, {0x0216, 0x0216}, {0x0218, 0x0218}, + {0x021A, 0x021A}, {0x021C, 0x021C}, {0x021E, 0x021E}, + {0x0220, 0x0220}, {0x0222, 0x0222}, {0x0224, 0x0224}, + {0x0226, 0x0226}, {0x0228, 0x0228}, {0x022A, 0x022A}, + {0x022C, 0x022C}, {0x022E, 0x022E}, {0x0230, 0x0230}, + {0x0232, 0x0232}, {0x023A, 0x023B}, {0x023D, 0x023E}, + {0x0241, 0x0241}, {0x0243, 0x0246}, {0x0248, 0x0248}, + {0x024A, 0x024A}, {0x024C, 0x024C}, {0x024E, 0x024E}, + {0x0370, 0x0370}, {0x0372, 0x0372}, {0x0376, 0x0376}, + {0x037F, 0x037F}, {0x0386, 0x0386}, {0x0388, 0x038A}, + {0x038C, 0x038C}, {0x038E, 0x038F}, {0x0391, 0x03A1}, + {0x03A3, 0x03AB}, {0x03CF, 0x03CF}, {0x03D8, 0x03D8}, + {0x03DA, 0x03DA}, {0x03DC, 0x03DC}, {0x03DE, 0x03DE}, + {0x03E0, 0x03E0}, {0x03E2, 0x03E2}, {0x03E4, 0x03E4}, + {0x03E6, 0x03E6}, {0x03E8, 0x03E8}, {0x03EA, 0x03EA}, + {0x03EC, 0x03EC}, {0x03EE, 0x03EE}, {0x03F4, 0x03F4}, + {0x03F7, 0x03F7}, {0x03F9, 0x03FA}, {0x03FD, 0x042F}, + {0x0460, 0x0460}, {0x0462, 0x0462}, {0x0464, 0x0464}, + {0x0466, 0x0466}, {0x0468, 0x0468}, {0x046A, 0x046A}, + {0x046C, 0x046C}, {0x046E, 0x046E}, {0x0470, 0x0470}, + {0x0472, 0x0472}, {0x0474, 0x0474}, {0x0476, 0x0476}, + {0x0478, 0x0478}, {0x047A, 0x047A}, {0x047C, 0x047C}, + {0x047E, 0x047E}, {0x0480, 0x0480}, {0x048A, 0x048A}, + {0x048C, 0x048C}, {0x048E, 0x048E}, {0x0490, 0x0490}, + {0x0492, 0x0492}, {0x0494, 0x0494}, {0x0496, 0x0496}, + {0x0498, 0x0498}, {0x049A, 0x049A}, {0x049C, 0x049C}, + {0x049E, 0x049E}, {0x04A0, 0x04A0}, {0x04A2, 0x04A2}, + {0x04A4, 0x04A4}, {0x04A6, 0x04A6}, {0x04A8, 0x04A8}, + {0x04AA, 0x04AA}, {0x04AC, 0x04AC}, {0x04AE, 0x04AE}, + {0x04B0, 0x04B0}, {0x04B2, 0x04B2}, {0x04B4, 0x04B4}, + {0x04B6, 0x04B6}, {0x04B8, 0x04B8}, {0x04BA, 0x04BA}, + {0x04BC, 0x04BC}, {0x04BE, 0x04BE}, {0x04C0, 0x04C1}, + {0x04C3, 0x04C3}, {0x04C5, 0x04C5}, {0x04C7, 0x04C7}, + {0x04C9, 0x04C9}, {0x04CB, 0x04CB}, {0x04CD, 0x04CD}, + {0x04D0, 0x04D0}, {0x04D2, 0x04D2}, {0x04D4, 0x04D4}, + {0x04D6, 0x04D6}, {0x04D8, 0x04D8}, {0x04DA, 0x04DA}, + {0x04DC, 0x04DC}, {0x04DE, 0x04DE}, {0x04E0, 0x04E0}, + {0x04E2, 0x04E2}, {0x04E4, 0x04E4}, {0x04E6, 0x04E6}, + {0x04E8, 0x04E8}, {0x04EA, 0x04EA}, {0x04EC, 0x04EC}, + {0x04EE, 0x04EE}, {0x04F0, 0x04F0}, {0x04F2, 0x04F2}, + {0x04F4, 0x04F4}, {0x04F6, 0x04F6}, {0x04F8, 0x04F8}, + {0x04FA, 0x04FA}, {0x04FC, 0x04FC}, {0x04FE, 0x04FE}, + {0x0500, 0x0500}, {0x0502, 0x0502}, {0x0504, 0x0504}, + {0x0506, 0x0506}, {0x0508, 0x0508}, {0x050A, 0x050A}, + {0x050C, 0x050C}, {0x050E, 0x050E}, {0x0510, 0x0510}, + {0x0512, 0x0512}, {0x0514, 0x0514}, {0x0516, 0x0516}, + {0x0518, 0x0518}, {0x051A, 0x051A}, {0x051C, 0x051C}, + {0x051E, 0x051E}, {0x0520, 0x0520}, {0x0522, 0x0522}, + {0x0524, 0x0524}, {0x0526, 0x0526}, {0x0528, 0x0528}, + {0x052A, 0x052A}, {0x052C, 0x052C}, {0x052E, 0x052E}, + {0x0531, 0x0556}, {0x10A0, 0x10C5}, {0x10C7, 0x10C7}, + {0x10CD, 0x10CD}, {0x13A0, 0x13F5}, {0x1C90, 0x1CBA}, + {0x1CBD, 0x1CBF}, {0x1E00, 0x1E00}, {0x1E02, 0x1E02}, + {0x1E04, 0x1E04}, {0x1E06, 0x1E06}, {0x1E08, 0x1E08}, + {0x1E0A, 0x1E0A}, {0x1E0C, 0x1E0C}, {0x1E0E, 0x1E0E}, + {0x1E10, 0x1E10}, {0x1E12, 0x1E12}, {0x1E14, 0x1E14}, + {0x1E16, 0x1E16}, {0x1E18, 0x1E18}, {0x1E1A, 0x1E1A}, + {0x1E1C, 0x1E1C}, {0x1E1E, 0x1E1E}, {0x1E20, 0x1E20}, + {0x1E22, 0x1E22}, {0x1E24, 0x1E24}, {0x1E26, 0x1E26}, + {0x1E28, 0x1E28}, {0x1E2A, 0x1E2A}, {0x1E2C, 0x1E2C}, + {0x1E2E, 0x1E2E}, {0x1E30, 0x1E30}, {0x1E32, 0x1E32}, + {0x1E34, 0x1E34}, {0x1E36, 0x1E36}, {0x1E38, 0x1E38}, + {0x1E3A, 0x1E3A}, {0x1E3C, 0x1E3C}, {0x1E3E, 0x1E3E}, + {0x1E40, 0x1E40}, {0x1E42, 0x1E42}, {0x1E44, 0x1E44}, + {0x1E46, 0x1E46}, {0x1E48, 0x1E48}, {0x1E4A, 0x1E4A}, + {0x1E4C, 0x1E4C}, {0x1E4E, 0x1E4E}, {0x1E50, 0x1E50}, + {0x1E52, 0x1E52}, {0x1E54, 0x1E54}, {0x1E56, 0x1E56}, + {0x1E58, 0x1E58}, {0x1E5A, 0x1E5A}, {0x1E5C, 0x1E5C}, + {0x1E5E, 0x1E5E}, {0x1E60, 0x1E60}, {0x1E62, 0x1E62}, + {0x1E64, 0x1E64}, {0x1E66, 0x1E66}, {0x1E68, 0x1E68}, + {0x1E6A, 0x1E6A}, {0x1E6C, 0x1E6C}, {0x1E6E, 0x1E6E}, + {0x1E70, 0x1E70}, {0x1E72, 0x1E72}, {0x1E74, 0x1E74}, + {0x1E76, 0x1E76}, {0x1E78, 0x1E78}, {0x1E7A, 0x1E7A}, + {0x1E7C, 0x1E7C}, {0x1E7E, 0x1E7E}, {0x1E80, 0x1E80}, + {0x1E82, 0x1E82}, {0x1E84, 0x1E84}, {0x1E86, 0x1E86}, + {0x1E88, 0x1E88}, {0x1E8A, 0x1E8A}, {0x1E8C, 0x1E8C}, + {0x1E8E, 0x1E8E}, {0x1E90, 0x1E90}, {0x1E92, 0x1E92}, + {0x1E94, 0x1E94}, {0x1E9E, 0x1E9E}, {0x1EA0, 0x1EA0}, + {0x1EA2, 0x1EA2}, {0x1EA4, 0x1EA4}, {0x1EA6, 0x1EA6}, + {0x1EA8, 0x1EA8}, {0x1EAA, 0x1EAA}, {0x1EAC, 0x1EAC}, + {0x1EAE, 0x1EAE}, {0x1EB0, 0x1EB0}, {0x1EB2, 0x1EB2}, + {0x1EB4, 0x1EB4}, {0x1EB6, 0x1EB6}, {0x1EB8, 0x1EB8}, + {0x1EBA, 0x1EBA}, {0x1EBC, 0x1EBC}, {0x1EBE, 0x1EBE}, + {0x1EC0, 0x1EC0}, {0x1EC2, 0x1EC2}, {0x1EC4, 0x1EC4}, + {0x1EC6, 0x1EC6}, {0x1EC8, 0x1EC8}, {0x1ECA, 0x1ECA}, + {0x1ECC, 0x1ECC}, {0x1ECE, 0x1ECE}, {0x1ED0, 0x1ED0}, + {0x1ED2, 0x1ED2}, {0x1ED4, 0x1ED4}, {0x1ED6, 0x1ED6}, + {0x1ED8, 0x1ED8}, {0x1EDA, 0x1EDA}, {0x1EDC, 0x1EDC}, + {0x1EDE, 0x1EDE}, {0x1EE0, 0x1EE0}, {0x1EE2, 0x1EE2}, + {0x1EE4, 0x1EE4}, {0x1EE6, 0x1EE6}, {0x1EE8, 0x1EE8}, + {0x1EEA, 0x1EEA}, {0x1EEC, 0x1EEC}, {0x1EEE, 0x1EEE}, + {0x1EF0, 0x1EF0}, {0x1EF2, 0x1EF2}, {0x1EF4, 0x1EF4}, + {0x1EF6, 0x1EF6}, {0x1EF8, 0x1EF8}, {0x1EFA, 0x1EFA}, + {0x1EFC, 0x1EFC}, {0x1EFE, 0x1EFE}, {0x1F08, 0x1F0F}, + {0x1F18, 0x1F1D}, {0x1F28, 0x1F2F}, {0x1F38, 0x1F3F}, + {0x1F48, 0x1F4D}, {0x1F59, 0x1F59}, {0x1F5B, 0x1F5B}, + {0x1F5D, 0x1F5D}, {0x1F5F, 0x1F5F}, {0x1F68, 0x1F6F}, + {0x1F88, 0x1F8F}, {0x1F98, 0x1F9F}, {0x1FA8, 0x1FAF}, + {0x1FB8, 0x1FBC}, {0x1FC8, 0x1FCC}, {0x1FD8, 0x1FDB}, + {0x1FE8, 0x1FEC}, {0x1FF8, 0x1FFC}, {0x2126, 0x2126}, + {0x212A, 0x212B}, {0x2132, 0x2132}, {0x2160, 0x216F}, + {0x2183, 0x2183}, {0x24B6, 0x24CF}, {0x2C00, 0x2C2F}, + {0x2C60, 0x2C60}, {0x2C62, 0x2C64}, {0x2C67, 0x2C67}, + {0x2C69, 0x2C69}, {0x2C6B, 0x2C6B}, {0x2C6D, 0x2C70}, + {0x2C72, 0x2C72}, {0x2C75, 0x2C75}, {0x2C7E, 0x2C80}, + {0x2C82, 0x2C82}, {0x2C84, 0x2C84}, {0x2C86, 0x2C86}, + {0x2C88, 0x2C88}, {0x2C8A, 0x2C8A}, {0x2C8C, 0x2C8C}, + {0x2C8E, 0x2C8E}, {0x2C90, 0x2C90}, {0x2C92, 0x2C92}, + {0x2C94, 0x2C94}, {0x2C96, 0x2C96}, {0x2C98, 0x2C98}, + {0x2C9A, 0x2C9A}, {0x2C9C, 0x2C9C}, {0x2C9E, 0x2C9E}, + {0x2CA0, 0x2CA0}, {0x2CA2, 0x2CA2}, {0x2CA4, 0x2CA4}, + {0x2CA6, 0x2CA6}, {0x2CA8, 0x2CA8}, {0x2CAA, 0x2CAA}, + {0x2CAC, 0x2CAC}, {0x2CAE, 0x2CAE}, {0x2CB0, 0x2CB0}, + {0x2CB2, 0x2CB2}, {0x2CB4, 0x2CB4}, {0x2CB6, 0x2CB6}, + {0x2CB8, 0x2CB8}, {0x2CBA, 0x2CBA}, {0x2CBC, 0x2CBC}, + {0x2CBE, 0x2CBE}, {0x2CC0, 0x2CC0}, {0x2CC2, 0x2CC2}, + {0x2CC4, 0x2CC4}, {0x2CC6, 0x2CC6}, {0x2CC8, 0x2CC8}, + {0x2CCA, 0x2CCA}, {0x2CCC, 0x2CCC}, {0x2CCE, 0x2CCE}, + {0x2CD0, 0x2CD0}, {0x2CD2, 0x2CD2}, {0x2CD4, 0x2CD4}, + {0x2CD6, 0x2CD6}, {0x2CD8, 0x2CD8}, {0x2CDA, 0x2CDA}, + {0x2CDC, 0x2CDC}, {0x2CDE, 0x2CDE}, {0x2CE0, 0x2CE0}, + {0x2CE2, 0x2CE2}, {0x2CEB, 0x2CEB}, {0x2CED, 0x2CED}, + {0x2CF2, 0x2CF2}, {0xA640, 0xA640}, {0xA642, 0xA642}, + {0xA644, 0xA644}, {0xA646, 0xA646}, {0xA648, 0xA648}, + {0xA64A, 0xA64A}, {0xA64C, 0xA64C}, {0xA64E, 0xA64E}, + {0xA650, 0xA650}, {0xA652, 0xA652}, {0xA654, 0xA654}, + {0xA656, 0xA656}, {0xA658, 0xA658}, {0xA65A, 0xA65A}, + {0xA65C, 0xA65C}, {0xA65E, 0xA65E}, {0xA660, 0xA660}, + {0xA662, 0xA662}, {0xA664, 0xA664}, {0xA666, 0xA666}, + {0xA668, 0xA668}, {0xA66A, 0xA66A}, {0xA66C, 0xA66C}, + {0xA680, 0xA680}, {0xA682, 0xA682}, {0xA684, 0xA684}, + {0xA686, 0xA686}, {0xA688, 0xA688}, {0xA68A, 0xA68A}, + {0xA68C, 0xA68C}, {0xA68E, 0xA68E}, {0xA690, 0xA690}, + {0xA692, 0xA692}, {0xA694, 0xA694}, {0xA696, 0xA696}, + {0xA698, 0xA698}, {0xA69A, 0xA69A}, {0xA722, 0xA722}, + {0xA724, 0xA724}, {0xA726, 0xA726}, {0xA728, 0xA728}, + {0xA72A, 0xA72A}, {0xA72C, 0xA72C}, {0xA72E, 0xA72E}, + {0xA732, 0xA732}, {0xA734, 0xA734}, {0xA736, 0xA736}, + {0xA738, 0xA738}, {0xA73A, 0xA73A}, {0xA73C, 0xA73C}, + {0xA73E, 0xA73E}, {0xA740, 0xA740}, {0xA742, 0xA742}, + {0xA744, 0xA744}, {0xA746, 0xA746}, {0xA748, 0xA748}, + {0xA74A, 0xA74A}, {0xA74C, 0xA74C}, {0xA74E, 0xA74E}, + {0xA750, 0xA750}, {0xA752, 0xA752}, {0xA754, 0xA754}, + {0xA756, 0xA756}, {0xA758, 0xA758}, {0xA75A, 0xA75A}, + {0xA75C, 0xA75C}, {0xA75E, 0xA75E}, {0xA760, 0xA760}, + {0xA762, 0xA762}, {0xA764, 0xA764}, {0xA766, 0xA766}, + {0xA768, 0xA768}, {0xA76A, 0xA76A}, {0xA76C, 0xA76C}, + {0xA76E, 0xA76E}, {0xA779, 0xA779}, {0xA77B, 0xA77B}, + {0xA77D, 0xA77E}, {0xA780, 0xA780}, {0xA782, 0xA782}, + {0xA784, 0xA784}, {0xA786, 0xA786}, {0xA78B, 0xA78B}, + {0xA78D, 0xA78D}, {0xA790, 0xA790}, {0xA792, 0xA792}, + {0xA796, 0xA796}, {0xA798, 0xA798}, {0xA79A, 0xA79A}, + {0xA79C, 0xA79C}, {0xA79E, 0xA79E}, {0xA7A0, 0xA7A0}, + {0xA7A2, 0xA7A2}, {0xA7A4, 0xA7A4}, {0xA7A6, 0xA7A6}, + {0xA7A8, 0xA7A8}, {0xA7AA, 0xA7AE}, {0xA7B0, 0xA7B4}, + {0xA7B6, 0xA7B6}, {0xA7B8, 0xA7B8}, {0xA7BA, 0xA7BA}, + {0xA7BC, 0xA7BC}, {0xA7BE, 0xA7BE}, {0xA7C0, 0xA7C0}, + {0xA7C2, 0xA7C2}, {0xA7C4, 0xA7C7}, {0xA7C9, 0xA7C9}, + {0xA7D0, 0xA7D0}, {0xA7D6, 0xA7D6}, {0xA7D8, 0xA7D8}, + {0xA7F5, 0xA7F5}, {0xFF21, 0xFF3A}, {0x10400, 0x10427}, + {0x104B0, 0x104D3}, {0x10570, 0x1057A}, {0x1057C, 0x1058A}, + {0x1058C, 0x10592}, {0x10594, 0x10595}, {0x10C80, 0x10CB2}, + {0x118A0, 0x118BF}, {0x16E40, 0x16E5F}, {0x1E900, 0x1E921}, + // Binary: Changes_When_Uppercased + {0x0061, 0x007A}, {0x00B5, 0x00B5}, {0x00DF, 0x00F6}, + {0x00F8, 0x00FF}, {0x0101, 0x0101}, {0x0103, 0x0103}, + {0x0105, 0x0105}, {0x0107, 0x0107}, {0x0109, 0x0109}, + {0x010B, 0x010B}, {0x010D, 0x010D}, {0x010F, 0x010F}, + {0x0111, 0x0111}, {0x0113, 0x0113}, {0x0115, 0x0115}, + {0x0117, 0x0117}, {0x0119, 0x0119}, {0x011B, 0x011B}, + {0x011D, 0x011D}, {0x011F, 0x011F}, {0x0121, 0x0121}, + {0x0123, 0x0123}, {0x0125, 0x0125}, {0x0127, 0x0127}, + {0x0129, 0x0129}, {0x012B, 0x012B}, {0x012D, 0x012D}, + {0x012F, 0x012F}, {0x0131, 0x0131}, {0x0133, 0x0133}, + {0x0135, 0x0135}, {0x0137, 0x0137}, {0x013A, 0x013A}, + {0x013C, 0x013C}, {0x013E, 0x013E}, {0x0140, 0x0140}, + {0x0142, 0x0142}, {0x0144, 0x0144}, {0x0146, 0x0146}, + {0x0148, 0x0149}, {0x014B, 0x014B}, {0x014D, 0x014D}, + {0x014F, 0x014F}, {0x0151, 0x0151}, {0x0153, 0x0153}, + {0x0155, 0x0155}, {0x0157, 0x0157}, {0x0159, 0x0159}, + {0x015B, 0x015B}, {0x015D, 0x015D}, {0x015F, 0x015F}, + {0x0161, 0x0161}, {0x0163, 0x0163}, {0x0165, 0x0165}, + {0x0167, 0x0167}, {0x0169, 0x0169}, {0x016B, 0x016B}, + {0x016D, 0x016D}, {0x016F, 0x016F}, {0x0171, 0x0171}, + {0x0173, 0x0173}, {0x0175, 0x0175}, {0x0177, 0x0177}, + {0x017A, 0x017A}, {0x017C, 0x017C}, {0x017E, 0x0180}, + {0x0183, 0x0183}, {0x0185, 0x0185}, {0x0188, 0x0188}, + {0x018C, 0x018C}, {0x0192, 0x0192}, {0x0195, 0x0195}, + {0x0199, 0x019A}, {0x019E, 0x019E}, {0x01A1, 0x01A1}, + {0x01A3, 0x01A3}, {0x01A5, 0x01A5}, {0x01A8, 0x01A8}, + {0x01AD, 0x01AD}, {0x01B0, 0x01B0}, {0x01B4, 0x01B4}, + {0x01B6, 0x01B6}, {0x01B9, 0x01B9}, {0x01BD, 0x01BD}, + {0x01BF, 0x01BF}, {0x01C5, 0x01C6}, {0x01C8, 0x01C9}, + {0x01CB, 0x01CC}, {0x01CE, 0x01CE}, {0x01D0, 0x01D0}, + {0x01D2, 0x01D2}, {0x01D4, 0x01D4}, {0x01D6, 0x01D6}, + {0x01D8, 0x01D8}, {0x01DA, 0x01DA}, {0x01DC, 0x01DD}, + {0x01DF, 0x01DF}, {0x01E1, 0x01E1}, {0x01E3, 0x01E3}, + {0x01E5, 0x01E5}, {0x01E7, 0x01E7}, {0x01E9, 0x01E9}, + {0x01EB, 0x01EB}, {0x01ED, 0x01ED}, {0x01EF, 0x01F0}, + {0x01F2, 0x01F3}, {0x01F5, 0x01F5}, {0x01F9, 0x01F9}, + {0x01FB, 0x01FB}, {0x01FD, 0x01FD}, {0x01FF, 0x01FF}, + {0x0201, 0x0201}, {0x0203, 0x0203}, {0x0205, 0x0205}, + {0x0207, 0x0207}, {0x0209, 0x0209}, {0x020B, 0x020B}, + {0x020D, 0x020D}, {0x020F, 0x020F}, {0x0211, 0x0211}, + {0x0213, 0x0213}, {0x0215, 0x0215}, {0x0217, 0x0217}, + {0x0219, 0x0219}, {0x021B, 0x021B}, {0x021D, 0x021D}, + {0x021F, 0x021F}, {0x0223, 0x0223}, {0x0225, 0x0225}, + {0x0227, 0x0227}, {0x0229, 0x0229}, {0x022B, 0x022B}, + {0x022D, 0x022D}, {0x022F, 0x022F}, {0x0231, 0x0231}, + {0x0233, 0x0233}, {0x023C, 0x023C}, {0x023F, 0x0240}, + {0x0242, 0x0242}, {0x0247, 0x0247}, {0x0249, 0x0249}, + {0x024B, 0x024B}, {0x024D, 0x024D}, {0x024F, 0x0254}, + {0x0256, 0x0257}, {0x0259, 0x0259}, {0x025B, 0x025C}, + {0x0260, 0x0261}, {0x0263, 0x0263}, {0x0265, 0x0266}, + {0x0268, 0x026C}, {0x026F, 0x026F}, {0x0271, 0x0272}, + {0x0275, 0x0275}, {0x027D, 0x027D}, {0x0280, 0x0280}, + {0x0282, 0x0283}, {0x0287, 0x028C}, {0x0292, 0x0292}, + {0x029D, 0x029E}, {0x0345, 0x0345}, {0x0371, 0x0371}, + {0x0373, 0x0373}, {0x0377, 0x0377}, {0x037B, 0x037D}, + {0x0390, 0x0390}, {0x03AC, 0x03CE}, {0x03D0, 0x03D1}, + {0x03D5, 0x03D7}, {0x03D9, 0x03D9}, {0x03DB, 0x03DB}, + {0x03DD, 0x03DD}, {0x03DF, 0x03DF}, {0x03E1, 0x03E1}, + {0x03E3, 0x03E3}, {0x03E5, 0x03E5}, {0x03E7, 0x03E7}, + {0x03E9, 0x03E9}, {0x03EB, 0x03EB}, {0x03ED, 0x03ED}, + {0x03EF, 0x03F3}, {0x03F5, 0x03F5}, {0x03F8, 0x03F8}, + {0x03FB, 0x03FB}, {0x0430, 0x045F}, {0x0461, 0x0461}, + {0x0463, 0x0463}, {0x0465, 0x0465}, {0x0467, 0x0467}, + {0x0469, 0x0469}, {0x046B, 0x046B}, {0x046D, 0x046D}, + {0x046F, 0x046F}, {0x0471, 0x0471}, {0x0473, 0x0473}, + {0x0475, 0x0475}, {0x0477, 0x0477}, {0x0479, 0x0479}, + {0x047B, 0x047B}, {0x047D, 0x047D}, {0x047F, 0x047F}, + {0x0481, 0x0481}, {0x048B, 0x048B}, {0x048D, 0x048D}, + {0x048F, 0x048F}, {0x0491, 0x0491}, {0x0493, 0x0493}, + {0x0495, 0x0495}, {0x0497, 0x0497}, {0x0499, 0x0499}, + {0x049B, 0x049B}, {0x049D, 0x049D}, {0x049F, 0x049F}, + {0x04A1, 0x04A1}, {0x04A3, 0x04A3}, {0x04A5, 0x04A5}, + {0x04A7, 0x04A7}, {0x04A9, 0x04A9}, {0x04AB, 0x04AB}, + {0x04AD, 0x04AD}, {0x04AF, 0x04AF}, {0x04B1, 0x04B1}, + {0x04B3, 0x04B3}, {0x04B5, 0x04B5}, {0x04B7, 0x04B7}, + {0x04B9, 0x04B9}, {0x04BB, 0x04BB}, {0x04BD, 0x04BD}, + {0x04BF, 0x04BF}, {0x04C2, 0x04C2}, {0x04C4, 0x04C4}, + {0x04C6, 0x04C6}, {0x04C8, 0x04C8}, {0x04CA, 0x04CA}, + {0x04CC, 0x04CC}, {0x04CE, 0x04CF}, {0x04D1, 0x04D1}, + {0x04D3, 0x04D3}, {0x04D5, 0x04D5}, {0x04D7, 0x04D7}, + {0x04D9, 0x04D9}, {0x04DB, 0x04DB}, {0x04DD, 0x04DD}, + {0x04DF, 0x04DF}, {0x04E1, 0x04E1}, {0x04E3, 0x04E3}, + {0x04E5, 0x04E5}, {0x04E7, 0x04E7}, {0x04E9, 0x04E9}, + {0x04EB, 0x04EB}, {0x04ED, 0x04ED}, {0x04EF, 0x04EF}, + {0x04F1, 0x04F1}, {0x04F3, 0x04F3}, {0x04F5, 0x04F5}, + {0x04F7, 0x04F7}, {0x04F9, 0x04F9}, {0x04FB, 0x04FB}, + {0x04FD, 0x04FD}, {0x04FF, 0x04FF}, {0x0501, 0x0501}, + {0x0503, 0x0503}, {0x0505, 0x0505}, {0x0507, 0x0507}, + {0x0509, 0x0509}, {0x050B, 0x050B}, {0x050D, 0x050D}, + {0x050F, 0x050F}, {0x0511, 0x0511}, {0x0513, 0x0513}, + {0x0515, 0x0515}, {0x0517, 0x0517}, {0x0519, 0x0519}, + {0x051B, 0x051B}, {0x051D, 0x051D}, {0x051F, 0x051F}, + {0x0521, 0x0521}, {0x0523, 0x0523}, {0x0525, 0x0525}, + {0x0527, 0x0527}, {0x0529, 0x0529}, {0x052B, 0x052B}, + {0x052D, 0x052D}, {0x052F, 0x052F}, {0x0561, 0x0587}, + {0x10D0, 0x10FA}, {0x10FD, 0x10FF}, {0x13F8, 0x13FD}, + {0x1C80, 0x1C88}, {0x1D79, 0x1D79}, {0x1D7D, 0x1D7D}, + {0x1D8E, 0x1D8E}, {0x1E01, 0x1E01}, {0x1E03, 0x1E03}, + {0x1E05, 0x1E05}, {0x1E07, 0x1E07}, {0x1E09, 0x1E09}, + {0x1E0B, 0x1E0B}, {0x1E0D, 0x1E0D}, {0x1E0F, 0x1E0F}, + {0x1E11, 0x1E11}, {0x1E13, 0x1E13}, {0x1E15, 0x1E15}, + {0x1E17, 0x1E17}, {0x1E19, 0x1E19}, {0x1E1B, 0x1E1B}, + {0x1E1D, 0x1E1D}, {0x1E1F, 0x1E1F}, {0x1E21, 0x1E21}, + {0x1E23, 0x1E23}, {0x1E25, 0x1E25}, {0x1E27, 0x1E27}, + {0x1E29, 0x1E29}, {0x1E2B, 0x1E2B}, {0x1E2D, 0x1E2D}, + {0x1E2F, 0x1E2F}, {0x1E31, 0x1E31}, {0x1E33, 0x1E33}, + {0x1E35, 0x1E35}, {0x1E37, 0x1E37}, {0x1E39, 0x1E39}, + {0x1E3B, 0x1E3B}, {0x1E3D, 0x1E3D}, {0x1E3F, 0x1E3F}, + {0x1E41, 0x1E41}, {0x1E43, 0x1E43}, {0x1E45, 0x1E45}, + {0x1E47, 0x1E47}, {0x1E49, 0x1E49}, {0x1E4B, 0x1E4B}, + {0x1E4D, 0x1E4D}, {0x1E4F, 0x1E4F}, {0x1E51, 0x1E51}, + {0x1E53, 0x1E53}, {0x1E55, 0x1E55}, {0x1E57, 0x1E57}, + {0x1E59, 0x1E59}, {0x1E5B, 0x1E5B}, {0x1E5D, 0x1E5D}, + {0x1E5F, 0x1E5F}, {0x1E61, 0x1E61}, {0x1E63, 0x1E63}, + {0x1E65, 0x1E65}, {0x1E67, 0x1E67}, {0x1E69, 0x1E69}, + {0x1E6B, 0x1E6B}, {0x1E6D, 0x1E6D}, {0x1E6F, 0x1E6F}, + {0x1E71, 0x1E71}, {0x1E73, 0x1E73}, {0x1E75, 0x1E75}, + {0x1E77, 0x1E77}, {0x1E79, 0x1E79}, {0x1E7B, 0x1E7B}, + {0x1E7D, 0x1E7D}, {0x1E7F, 0x1E7F}, {0x1E81, 0x1E81}, + {0x1E83, 0x1E83}, {0x1E85, 0x1E85}, {0x1E87, 0x1E87}, + {0x1E89, 0x1E89}, {0x1E8B, 0x1E8B}, {0x1E8D, 0x1E8D}, + {0x1E8F, 0x1E8F}, {0x1E91, 0x1E91}, {0x1E93, 0x1E93}, + {0x1E95, 0x1E9B}, {0x1EA1, 0x1EA1}, {0x1EA3, 0x1EA3}, + {0x1EA5, 0x1EA5}, {0x1EA7, 0x1EA7}, {0x1EA9, 0x1EA9}, + {0x1EAB, 0x1EAB}, {0x1EAD, 0x1EAD}, {0x1EAF, 0x1EAF}, + {0x1EB1, 0x1EB1}, {0x1EB3, 0x1EB3}, {0x1EB5, 0x1EB5}, + {0x1EB7, 0x1EB7}, {0x1EB9, 0x1EB9}, {0x1EBB, 0x1EBB}, + {0x1EBD, 0x1EBD}, {0x1EBF, 0x1EBF}, {0x1EC1, 0x1EC1}, + {0x1EC3, 0x1EC3}, {0x1EC5, 0x1EC5}, {0x1EC7, 0x1EC7}, + {0x1EC9, 0x1EC9}, {0x1ECB, 0x1ECB}, {0x1ECD, 0x1ECD}, + {0x1ECF, 0x1ECF}, {0x1ED1, 0x1ED1}, {0x1ED3, 0x1ED3}, + {0x1ED5, 0x1ED5}, {0x1ED7, 0x1ED7}, {0x1ED9, 0x1ED9}, + {0x1EDB, 0x1EDB}, {0x1EDD, 0x1EDD}, {0x1EDF, 0x1EDF}, + {0x1EE1, 0x1EE1}, {0x1EE3, 0x1EE3}, {0x1EE5, 0x1EE5}, + {0x1EE7, 0x1EE7}, {0x1EE9, 0x1EE9}, {0x1EEB, 0x1EEB}, + {0x1EED, 0x1EED}, {0x1EEF, 0x1EEF}, {0x1EF1, 0x1EF1}, + {0x1EF3, 0x1EF3}, {0x1EF5, 0x1EF5}, {0x1EF7, 0x1EF7}, + {0x1EF9, 0x1EF9}, {0x1EFB, 0x1EFB}, {0x1EFD, 0x1EFD}, + {0x1EFF, 0x1F07}, {0x1F10, 0x1F15}, {0x1F20, 0x1F27}, + {0x1F30, 0x1F37}, {0x1F40, 0x1F45}, {0x1F50, 0x1F57}, + {0x1F60, 0x1F67}, {0x1F70, 0x1F7D}, {0x1F80, 0x1FB4}, + {0x1FB6, 0x1FB7}, {0x1FBC, 0x1FBC}, {0x1FBE, 0x1FBE}, + {0x1FC2, 0x1FC4}, {0x1FC6, 0x1FC7}, {0x1FCC, 0x1FCC}, + {0x1FD0, 0x1FD3}, {0x1FD6, 0x1FD7}, {0x1FE0, 0x1FE7}, + {0x1FF2, 0x1FF4}, {0x1FF6, 0x1FF7}, {0x1FFC, 0x1FFC}, + {0x214E, 0x214E}, {0x2170, 0x217F}, {0x2184, 0x2184}, + {0x24D0, 0x24E9}, {0x2C30, 0x2C5F}, {0x2C61, 0x2C61}, + {0x2C65, 0x2C66}, {0x2C68, 0x2C68}, {0x2C6A, 0x2C6A}, + {0x2C6C, 0x2C6C}, {0x2C73, 0x2C73}, {0x2C76, 0x2C76}, + {0x2C81, 0x2C81}, {0x2C83, 0x2C83}, {0x2C85, 0x2C85}, + {0x2C87, 0x2C87}, {0x2C89, 0x2C89}, {0x2C8B, 0x2C8B}, + {0x2C8D, 0x2C8D}, {0x2C8F, 0x2C8F}, {0x2C91, 0x2C91}, + {0x2C93, 0x2C93}, {0x2C95, 0x2C95}, {0x2C97, 0x2C97}, + {0x2C99, 0x2C99}, {0x2C9B, 0x2C9B}, {0x2C9D, 0x2C9D}, + {0x2C9F, 0x2C9F}, {0x2CA1, 0x2CA1}, {0x2CA3, 0x2CA3}, + {0x2CA5, 0x2CA5}, {0x2CA7, 0x2CA7}, {0x2CA9, 0x2CA9}, + {0x2CAB, 0x2CAB}, {0x2CAD, 0x2CAD}, {0x2CAF, 0x2CAF}, + {0x2CB1, 0x2CB1}, {0x2CB3, 0x2CB3}, {0x2CB5, 0x2CB5}, + {0x2CB7, 0x2CB7}, {0x2CB9, 0x2CB9}, {0x2CBB, 0x2CBB}, + {0x2CBD, 0x2CBD}, {0x2CBF, 0x2CBF}, {0x2CC1, 0x2CC1}, + {0x2CC3, 0x2CC3}, {0x2CC5, 0x2CC5}, {0x2CC7, 0x2CC7}, + {0x2CC9, 0x2CC9}, {0x2CCB, 0x2CCB}, {0x2CCD, 0x2CCD}, + {0x2CCF, 0x2CCF}, {0x2CD1, 0x2CD1}, {0x2CD3, 0x2CD3}, + {0x2CD5, 0x2CD5}, {0x2CD7, 0x2CD7}, {0x2CD9, 0x2CD9}, + {0x2CDB, 0x2CDB}, {0x2CDD, 0x2CDD}, {0x2CDF, 0x2CDF}, + {0x2CE1, 0x2CE1}, {0x2CE3, 0x2CE3}, {0x2CEC, 0x2CEC}, + {0x2CEE, 0x2CEE}, {0x2CF3, 0x2CF3}, {0x2D00, 0x2D25}, + {0x2D27, 0x2D27}, {0x2D2D, 0x2D2D}, {0xA641, 0xA641}, + {0xA643, 0xA643}, {0xA645, 0xA645}, {0xA647, 0xA647}, + {0xA649, 0xA649}, {0xA64B, 0xA64B}, {0xA64D, 0xA64D}, + {0xA64F, 0xA64F}, {0xA651, 0xA651}, {0xA653, 0xA653}, + {0xA655, 0xA655}, {0xA657, 0xA657}, {0xA659, 0xA659}, + {0xA65B, 0xA65B}, {0xA65D, 0xA65D}, {0xA65F, 0xA65F}, + {0xA661, 0xA661}, {0xA663, 0xA663}, {0xA665, 0xA665}, + {0xA667, 0xA667}, {0xA669, 0xA669}, {0xA66B, 0xA66B}, + {0xA66D, 0xA66D}, {0xA681, 0xA681}, {0xA683, 0xA683}, + {0xA685, 0xA685}, {0xA687, 0xA687}, {0xA689, 0xA689}, + {0xA68B, 0xA68B}, {0xA68D, 0xA68D}, {0xA68F, 0xA68F}, + {0xA691, 0xA691}, {0xA693, 0xA693}, {0xA695, 0xA695}, + {0xA697, 0xA697}, {0xA699, 0xA699}, {0xA69B, 0xA69B}, + {0xA723, 0xA723}, {0xA725, 0xA725}, {0xA727, 0xA727}, + {0xA729, 0xA729}, {0xA72B, 0xA72B}, {0xA72D, 0xA72D}, + {0xA72F, 0xA72F}, {0xA733, 0xA733}, {0xA735, 0xA735}, + {0xA737, 0xA737}, {0xA739, 0xA739}, {0xA73B, 0xA73B}, + {0xA73D, 0xA73D}, {0xA73F, 0xA73F}, {0xA741, 0xA741}, + {0xA743, 0xA743}, {0xA745, 0xA745}, {0xA747, 0xA747}, + {0xA749, 0xA749}, {0xA74B, 0xA74B}, {0xA74D, 0xA74D}, + {0xA74F, 0xA74F}, {0xA751, 0xA751}, {0xA753, 0xA753}, + {0xA755, 0xA755}, {0xA757, 0xA757}, {0xA759, 0xA759}, + {0xA75B, 0xA75B}, {0xA75D, 0xA75D}, {0xA75F, 0xA75F}, + {0xA761, 0xA761}, {0xA763, 0xA763}, {0xA765, 0xA765}, + {0xA767, 0xA767}, {0xA769, 0xA769}, {0xA76B, 0xA76B}, + {0xA76D, 0xA76D}, {0xA76F, 0xA76F}, {0xA77A, 0xA77A}, + {0xA77C, 0xA77C}, {0xA77F, 0xA77F}, {0xA781, 0xA781}, + {0xA783, 0xA783}, {0xA785, 0xA785}, {0xA787, 0xA787}, + {0xA78C, 0xA78C}, {0xA791, 0xA791}, {0xA793, 0xA794}, + {0xA797, 0xA797}, {0xA799, 0xA799}, {0xA79B, 0xA79B}, + {0xA79D, 0xA79D}, {0xA79F, 0xA79F}, {0xA7A1, 0xA7A1}, + {0xA7A3, 0xA7A3}, {0xA7A5, 0xA7A5}, {0xA7A7, 0xA7A7}, + {0xA7A9, 0xA7A9}, {0xA7B5, 0xA7B5}, {0xA7B7, 0xA7B7}, + {0xA7B9, 0xA7B9}, {0xA7BB, 0xA7BB}, {0xA7BD, 0xA7BD}, + {0xA7BF, 0xA7BF}, {0xA7C1, 0xA7C1}, {0xA7C3, 0xA7C3}, + {0xA7C8, 0xA7C8}, {0xA7CA, 0xA7CA}, {0xA7D1, 0xA7D1}, + {0xA7D7, 0xA7D7}, {0xA7D9, 0xA7D9}, {0xA7F6, 0xA7F6}, + {0xAB53, 0xAB53}, {0xAB70, 0xABBF}, {0xFB00, 0xFB06}, + {0xFB13, 0xFB17}, {0xFF41, 0xFF5A}, {0x10428, 0x1044F}, + {0x104D8, 0x104FB}, {0x10597, 0x105A1}, {0x105A3, 0x105B1}, + {0x105B3, 0x105B9}, {0x105BB, 0x105BC}, {0x10CC0, 0x10CF2}, + {0x118C0, 0x118DF}, {0x16E60, 0x16E7F}, {0x1E922, 0x1E943}, + // Binary: Changes_When_Titlecased + {0x0061, 0x007A}, {0x00B5, 0x00B5}, {0x00DF, 0x00F6}, + {0x00F8, 0x00FF}, {0x0101, 0x0101}, {0x0103, 0x0103}, + {0x0105, 0x0105}, {0x0107, 0x0107}, {0x0109, 0x0109}, + {0x010B, 0x010B}, {0x010D, 0x010D}, {0x010F, 0x010F}, + {0x0111, 0x0111}, {0x0113, 0x0113}, {0x0115, 0x0115}, + {0x0117, 0x0117}, {0x0119, 0x0119}, {0x011B, 0x011B}, + {0x011D, 0x011D}, {0x011F, 0x011F}, {0x0121, 0x0121}, + {0x0123, 0x0123}, {0x0125, 0x0125}, {0x0127, 0x0127}, + {0x0129, 0x0129}, {0x012B, 0x012B}, {0x012D, 0x012D}, + {0x012F, 0x012F}, {0x0131, 0x0131}, {0x0133, 0x0133}, + {0x0135, 0x0135}, {0x0137, 0x0137}, {0x013A, 0x013A}, + {0x013C, 0x013C}, {0x013E, 0x013E}, {0x0140, 0x0140}, + {0x0142, 0x0142}, {0x0144, 0x0144}, {0x0146, 0x0146}, + {0x0148, 0x0149}, {0x014B, 0x014B}, {0x014D, 0x014D}, + {0x014F, 0x014F}, {0x0151, 0x0151}, {0x0153, 0x0153}, + {0x0155, 0x0155}, {0x0157, 0x0157}, {0x0159, 0x0159}, + {0x015B, 0x015B}, {0x015D, 0x015D}, {0x015F, 0x015F}, + {0x0161, 0x0161}, {0x0163, 0x0163}, {0x0165, 0x0165}, + {0x0167, 0x0167}, {0x0169, 0x0169}, {0x016B, 0x016B}, + {0x016D, 0x016D}, {0x016F, 0x016F}, {0x0171, 0x0171}, + {0x0173, 0x0173}, {0x0175, 0x0175}, {0x0177, 0x0177}, + {0x017A, 0x017A}, {0x017C, 0x017C}, {0x017E, 0x0180}, + {0x0183, 0x0183}, {0x0185, 0x0185}, {0x0188, 0x0188}, + {0x018C, 0x018C}, {0x0192, 0x0192}, {0x0195, 0x0195}, + {0x0199, 0x019A}, {0x019E, 0x019E}, {0x01A1, 0x01A1}, + {0x01A3, 0x01A3}, {0x01A5, 0x01A5}, {0x01A8, 0x01A8}, + {0x01AD, 0x01AD}, {0x01B0, 0x01B0}, {0x01B4, 0x01B4}, + {0x01B6, 0x01B6}, {0x01B9, 0x01B9}, {0x01BD, 0x01BD}, + {0x01BF, 0x01BF}, {0x01C4, 0x01C4}, {0x01C6, 0x01C7}, + {0x01C9, 0x01CA}, {0x01CC, 0x01CC}, {0x01CE, 0x01CE}, + {0x01D0, 0x01D0}, {0x01D2, 0x01D2}, {0x01D4, 0x01D4}, + {0x01D6, 0x01D6}, {0x01D8, 0x01D8}, {0x01DA, 0x01DA}, + {0x01DC, 0x01DD}, {0x01DF, 0x01DF}, {0x01E1, 0x01E1}, + {0x01E3, 0x01E3}, {0x01E5, 0x01E5}, {0x01E7, 0x01E7}, + {0x01E9, 0x01E9}, {0x01EB, 0x01EB}, {0x01ED, 0x01ED}, + {0x01EF, 0x01F1}, {0x01F3, 0x01F3}, {0x01F5, 0x01F5}, + {0x01F9, 0x01F9}, {0x01FB, 0x01FB}, {0x01FD, 0x01FD}, + {0x01FF, 0x01FF}, {0x0201, 0x0201}, {0x0203, 0x0203}, + {0x0205, 0x0205}, {0x0207, 0x0207}, {0x0209, 0x0209}, + {0x020B, 0x020B}, {0x020D, 0x020D}, {0x020F, 0x020F}, + {0x0211, 0x0211}, {0x0213, 0x0213}, {0x0215, 0x0215}, + {0x0217, 0x0217}, {0x0219, 0x0219}, {0x021B, 0x021B}, + {0x021D, 0x021D}, {0x021F, 0x021F}, {0x0223, 0x0223}, + {0x0225, 0x0225}, {0x0227, 0x0227}, {0x0229, 0x0229}, + {0x022B, 0x022B}, {0x022D, 0x022D}, {0x022F, 0x022F}, + {0x0231, 0x0231}, {0x0233, 0x0233}, {0x023C, 0x023C}, + {0x023F, 0x0240}, {0x0242, 0x0242}, {0x0247, 0x0247}, + {0x0249, 0x0249}, {0x024B, 0x024B}, {0x024D, 0x024D}, + {0x024F, 0x0254}, {0x0256, 0x0257}, {0x0259, 0x0259}, + {0x025B, 0x025C}, {0x0260, 0x0261}, {0x0263, 0x0263}, + {0x0265, 0x0266}, {0x0268, 0x026C}, {0x026F, 0x026F}, + {0x0271, 0x0272}, {0x0275, 0x0275}, {0x027D, 0x027D}, + {0x0280, 0x0280}, {0x0282, 0x0283}, {0x0287, 0x028C}, + {0x0292, 0x0292}, {0x029D, 0x029E}, {0x0345, 0x0345}, + {0x0371, 0x0371}, {0x0373, 0x0373}, {0x0377, 0x0377}, + {0x037B, 0x037D}, {0x0390, 0x0390}, {0x03AC, 0x03CE}, + {0x03D0, 0x03D1}, {0x03D5, 0x03D7}, {0x03D9, 0x03D9}, + {0x03DB, 0x03DB}, {0x03DD, 0x03DD}, {0x03DF, 0x03DF}, + {0x03E1, 0x03E1}, {0x03E3, 0x03E3}, {0x03E5, 0x03E5}, + {0x03E7, 0x03E7}, {0x03E9, 0x03E9}, {0x03EB, 0x03EB}, + {0x03ED, 0x03ED}, {0x03EF, 0x03F3}, {0x03F5, 0x03F5}, + {0x03F8, 0x03F8}, {0x03FB, 0x03FB}, {0x0430, 0x045F}, + {0x0461, 0x0461}, {0x0463, 0x0463}, {0x0465, 0x0465}, + {0x0467, 0x0467}, {0x0469, 0x0469}, {0x046B, 0x046B}, + {0x046D, 0x046D}, {0x046F, 0x046F}, {0x0471, 0x0471}, + {0x0473, 0x0473}, {0x0475, 0x0475}, {0x0477, 0x0477}, + {0x0479, 0x0479}, {0x047B, 0x047B}, {0x047D, 0x047D}, + {0x047F, 0x047F}, {0x0481, 0x0481}, {0x048B, 0x048B}, + {0x048D, 0x048D}, {0x048F, 0x048F}, {0x0491, 0x0491}, + {0x0493, 0x0493}, {0x0495, 0x0495}, {0x0497, 0x0497}, + {0x0499, 0x0499}, {0x049B, 0x049B}, {0x049D, 0x049D}, + {0x049F, 0x049F}, {0x04A1, 0x04A1}, {0x04A3, 0x04A3}, + {0x04A5, 0x04A5}, {0x04A7, 0x04A7}, {0x04A9, 0x04A9}, + {0x04AB, 0x04AB}, {0x04AD, 0x04AD}, {0x04AF, 0x04AF}, + {0x04B1, 0x04B1}, {0x04B3, 0x04B3}, {0x04B5, 0x04B5}, + {0x04B7, 0x04B7}, {0x04B9, 0x04B9}, {0x04BB, 0x04BB}, + {0x04BD, 0x04BD}, {0x04BF, 0x04BF}, {0x04C2, 0x04C2}, + {0x04C4, 0x04C4}, {0x04C6, 0x04C6}, {0x04C8, 0x04C8}, + {0x04CA, 0x04CA}, {0x04CC, 0x04CC}, {0x04CE, 0x04CF}, + {0x04D1, 0x04D1}, {0x04D3, 0x04D3}, {0x04D5, 0x04D5}, + {0x04D7, 0x04D7}, {0x04D9, 0x04D9}, {0x04DB, 0x04DB}, + {0x04DD, 0x04DD}, {0x04DF, 0x04DF}, {0x04E1, 0x04E1}, + {0x04E3, 0x04E3}, {0x04E5, 0x04E5}, {0x04E7, 0x04E7}, + {0x04E9, 0x04E9}, {0x04EB, 0x04EB}, {0x04ED, 0x04ED}, + {0x04EF, 0x04EF}, {0x04F1, 0x04F1}, {0x04F3, 0x04F3}, + {0x04F5, 0x04F5}, {0x04F7, 0x04F7}, {0x04F9, 0x04F9}, + {0x04FB, 0x04FB}, {0x04FD, 0x04FD}, {0x04FF, 0x04FF}, + {0x0501, 0x0501}, {0x0503, 0x0503}, {0x0505, 0x0505}, + {0x0507, 0x0507}, {0x0509, 0x0509}, {0x050B, 0x050B}, + {0x050D, 0x050D}, {0x050F, 0x050F}, {0x0511, 0x0511}, + {0x0513, 0x0513}, {0x0515, 0x0515}, {0x0517, 0x0517}, + {0x0519, 0x0519}, {0x051B, 0x051B}, {0x051D, 0x051D}, + {0x051F, 0x051F}, {0x0521, 0x0521}, {0x0523, 0x0523}, + {0x0525, 0x0525}, {0x0527, 0x0527}, {0x0529, 0x0529}, + {0x052B, 0x052B}, {0x052D, 0x052D}, {0x052F, 0x052F}, + {0x0561, 0x0587}, {0x13F8, 0x13FD}, {0x1C80, 0x1C88}, + {0x1D79, 0x1D79}, {0x1D7D, 0x1D7D}, {0x1D8E, 0x1D8E}, + {0x1E01, 0x1E01}, {0x1E03, 0x1E03}, {0x1E05, 0x1E05}, + {0x1E07, 0x1E07}, {0x1E09, 0x1E09}, {0x1E0B, 0x1E0B}, + {0x1E0D, 0x1E0D}, {0x1E0F, 0x1E0F}, {0x1E11, 0x1E11}, + {0x1E13, 0x1E13}, {0x1E15, 0x1E15}, {0x1E17, 0x1E17}, + {0x1E19, 0x1E19}, {0x1E1B, 0x1E1B}, {0x1E1D, 0x1E1D}, + {0x1E1F, 0x1E1F}, {0x1E21, 0x1E21}, {0x1E23, 0x1E23}, + {0x1E25, 0x1E25}, {0x1E27, 0x1E27}, {0x1E29, 0x1E29}, + {0x1E2B, 0x1E2B}, {0x1E2D, 0x1E2D}, {0x1E2F, 0x1E2F}, + {0x1E31, 0x1E31}, {0x1E33, 0x1E33}, {0x1E35, 0x1E35}, + {0x1E37, 0x1E37}, {0x1E39, 0x1E39}, {0x1E3B, 0x1E3B}, + {0x1E3D, 0x1E3D}, {0x1E3F, 0x1E3F}, {0x1E41, 0x1E41}, + {0x1E43, 0x1E43}, {0x1E45, 0x1E45}, {0x1E47, 0x1E47}, + {0x1E49, 0x1E49}, {0x1E4B, 0x1E4B}, {0x1E4D, 0x1E4D}, + {0x1E4F, 0x1E4F}, {0x1E51, 0x1E51}, {0x1E53, 0x1E53}, + {0x1E55, 0x1E55}, {0x1E57, 0x1E57}, {0x1E59, 0x1E59}, + {0x1E5B, 0x1E5B}, {0x1E5D, 0x1E5D}, {0x1E5F, 0x1E5F}, + {0x1E61, 0x1E61}, {0x1E63, 0x1E63}, {0x1E65, 0x1E65}, + {0x1E67, 0x1E67}, {0x1E69, 0x1E69}, {0x1E6B, 0x1E6B}, + {0x1E6D, 0x1E6D}, {0x1E6F, 0x1E6F}, {0x1E71, 0x1E71}, + {0x1E73, 0x1E73}, {0x1E75, 0x1E75}, {0x1E77, 0x1E77}, + {0x1E79, 0x1E79}, {0x1E7B, 0x1E7B}, {0x1E7D, 0x1E7D}, + {0x1E7F, 0x1E7F}, {0x1E81, 0x1E81}, {0x1E83, 0x1E83}, + {0x1E85, 0x1E85}, {0x1E87, 0x1E87}, {0x1E89, 0x1E89}, + {0x1E8B, 0x1E8B}, {0x1E8D, 0x1E8D}, {0x1E8F, 0x1E8F}, + {0x1E91, 0x1E91}, {0x1E93, 0x1E93}, {0x1E95, 0x1E9B}, + {0x1EA1, 0x1EA1}, {0x1EA3, 0x1EA3}, {0x1EA5, 0x1EA5}, + {0x1EA7, 0x1EA7}, {0x1EA9, 0x1EA9}, {0x1EAB, 0x1EAB}, + {0x1EAD, 0x1EAD}, {0x1EAF, 0x1EAF}, {0x1EB1, 0x1EB1}, + {0x1EB3, 0x1EB3}, {0x1EB5, 0x1EB5}, {0x1EB7, 0x1EB7}, + {0x1EB9, 0x1EB9}, {0x1EBB, 0x1EBB}, {0x1EBD, 0x1EBD}, + {0x1EBF, 0x1EBF}, {0x1EC1, 0x1EC1}, {0x1EC3, 0x1EC3}, + {0x1EC5, 0x1EC5}, {0x1EC7, 0x1EC7}, {0x1EC9, 0x1EC9}, + {0x1ECB, 0x1ECB}, {0x1ECD, 0x1ECD}, {0x1ECF, 0x1ECF}, + {0x1ED1, 0x1ED1}, {0x1ED3, 0x1ED3}, {0x1ED5, 0x1ED5}, + {0x1ED7, 0x1ED7}, {0x1ED9, 0x1ED9}, {0x1EDB, 0x1EDB}, + {0x1EDD, 0x1EDD}, {0x1EDF, 0x1EDF}, {0x1EE1, 0x1EE1}, + {0x1EE3, 0x1EE3}, {0x1EE5, 0x1EE5}, {0x1EE7, 0x1EE7}, + {0x1EE9, 0x1EE9}, {0x1EEB, 0x1EEB}, {0x1EED, 0x1EED}, + {0x1EEF, 0x1EEF}, {0x1EF1, 0x1EF1}, {0x1EF3, 0x1EF3}, + {0x1EF5, 0x1EF5}, {0x1EF7, 0x1EF7}, {0x1EF9, 0x1EF9}, + {0x1EFB, 0x1EFB}, {0x1EFD, 0x1EFD}, {0x1EFF, 0x1F07}, + {0x1F10, 0x1F15}, {0x1F20, 0x1F27}, {0x1F30, 0x1F37}, + {0x1F40, 0x1F45}, {0x1F50, 0x1F57}, {0x1F60, 0x1F67}, + {0x1F70, 0x1F7D}, {0x1F80, 0x1F87}, {0x1F90, 0x1F97}, + {0x1FA0, 0x1FA7}, {0x1FB0, 0x1FB4}, {0x1FB6, 0x1FB7}, + {0x1FBE, 0x1FBE}, {0x1FC2, 0x1FC4}, {0x1FC6, 0x1FC7}, + {0x1FD0, 0x1FD3}, {0x1FD6, 0x1FD7}, {0x1FE0, 0x1FE7}, + {0x1FF2, 0x1FF4}, {0x1FF6, 0x1FF7}, {0x214E, 0x214E}, + {0x2170, 0x217F}, {0x2184, 0x2184}, {0x24D0, 0x24E9}, + {0x2C30, 0x2C5F}, {0x2C61, 0x2C61}, {0x2C65, 0x2C66}, + {0x2C68, 0x2C68}, {0x2C6A, 0x2C6A}, {0x2C6C, 0x2C6C}, + {0x2C73, 0x2C73}, {0x2C76, 0x2C76}, {0x2C81, 0x2C81}, + {0x2C83, 0x2C83}, {0x2C85, 0x2C85}, {0x2C87, 0x2C87}, + {0x2C89, 0x2C89}, {0x2C8B, 0x2C8B}, {0x2C8D, 0x2C8D}, + {0x2C8F, 0x2C8F}, {0x2C91, 0x2C91}, {0x2C93, 0x2C93}, + {0x2C95, 0x2C95}, {0x2C97, 0x2C97}, {0x2C99, 0x2C99}, + {0x2C9B, 0x2C9B}, {0x2C9D, 0x2C9D}, {0x2C9F, 0x2C9F}, + {0x2CA1, 0x2CA1}, {0x2CA3, 0x2CA3}, {0x2CA5, 0x2CA5}, + {0x2CA7, 0x2CA7}, {0x2CA9, 0x2CA9}, {0x2CAB, 0x2CAB}, + {0x2CAD, 0x2CAD}, {0x2CAF, 0x2CAF}, {0x2CB1, 0x2CB1}, + {0x2CB3, 0x2CB3}, {0x2CB5, 0x2CB5}, {0x2CB7, 0x2CB7}, + {0x2CB9, 0x2CB9}, {0x2CBB, 0x2CBB}, {0x2CBD, 0x2CBD}, + {0x2CBF, 0x2CBF}, {0x2CC1, 0x2CC1}, {0x2CC3, 0x2CC3}, + {0x2CC5, 0x2CC5}, {0x2CC7, 0x2CC7}, {0x2CC9, 0x2CC9}, + {0x2CCB, 0x2CCB}, {0x2CCD, 0x2CCD}, {0x2CCF, 0x2CCF}, + {0x2CD1, 0x2CD1}, {0x2CD3, 0x2CD3}, {0x2CD5, 0x2CD5}, + {0x2CD7, 0x2CD7}, {0x2CD9, 0x2CD9}, {0x2CDB, 0x2CDB}, + {0x2CDD, 0x2CDD}, {0x2CDF, 0x2CDF}, {0x2CE1, 0x2CE1}, + {0x2CE3, 0x2CE3}, {0x2CEC, 0x2CEC}, {0x2CEE, 0x2CEE}, + {0x2CF3, 0x2CF3}, {0x2D00, 0x2D25}, {0x2D27, 0x2D27}, + {0x2D2D, 0x2D2D}, {0xA641, 0xA641}, {0xA643, 0xA643}, + {0xA645, 0xA645}, {0xA647, 0xA647}, {0xA649, 0xA649}, + {0xA64B, 0xA64B}, {0xA64D, 0xA64D}, {0xA64F, 0xA64F}, + {0xA651, 0xA651}, {0xA653, 0xA653}, {0xA655, 0xA655}, + {0xA657, 0xA657}, {0xA659, 0xA659}, {0xA65B, 0xA65B}, + {0xA65D, 0xA65D}, {0xA65F, 0xA65F}, {0xA661, 0xA661}, + {0xA663, 0xA663}, {0xA665, 0xA665}, {0xA667, 0xA667}, + {0xA669, 0xA669}, {0xA66B, 0xA66B}, {0xA66D, 0xA66D}, + {0xA681, 0xA681}, {0xA683, 0xA683}, {0xA685, 0xA685}, + {0xA687, 0xA687}, {0xA689, 0xA689}, {0xA68B, 0xA68B}, + {0xA68D, 0xA68D}, {0xA68F, 0xA68F}, {0xA691, 0xA691}, + {0xA693, 0xA693}, {0xA695, 0xA695}, {0xA697, 0xA697}, + {0xA699, 0xA699}, {0xA69B, 0xA69B}, {0xA723, 0xA723}, + {0xA725, 0xA725}, {0xA727, 0xA727}, {0xA729, 0xA729}, + {0xA72B, 0xA72B}, {0xA72D, 0xA72D}, {0xA72F, 0xA72F}, + {0xA733, 0xA733}, {0xA735, 0xA735}, {0xA737, 0xA737}, + {0xA739, 0xA739}, {0xA73B, 0xA73B}, {0xA73D, 0xA73D}, + {0xA73F, 0xA73F}, {0xA741, 0xA741}, {0xA743, 0xA743}, + {0xA745, 0xA745}, {0xA747, 0xA747}, {0xA749, 0xA749}, + {0xA74B, 0xA74B}, {0xA74D, 0xA74D}, {0xA74F, 0xA74F}, + {0xA751, 0xA751}, {0xA753, 0xA753}, {0xA755, 0xA755}, + {0xA757, 0xA757}, {0xA759, 0xA759}, {0xA75B, 0xA75B}, + {0xA75D, 0xA75D}, {0xA75F, 0xA75F}, {0xA761, 0xA761}, + {0xA763, 0xA763}, {0xA765, 0xA765}, {0xA767, 0xA767}, + {0xA769, 0xA769}, {0xA76B, 0xA76B}, {0xA76D, 0xA76D}, + {0xA76F, 0xA76F}, {0xA77A, 0xA77A}, {0xA77C, 0xA77C}, + {0xA77F, 0xA77F}, {0xA781, 0xA781}, {0xA783, 0xA783}, + {0xA785, 0xA785}, {0xA787, 0xA787}, {0xA78C, 0xA78C}, + {0xA791, 0xA791}, {0xA793, 0xA794}, {0xA797, 0xA797}, + {0xA799, 0xA799}, {0xA79B, 0xA79B}, {0xA79D, 0xA79D}, + {0xA79F, 0xA79F}, {0xA7A1, 0xA7A1}, {0xA7A3, 0xA7A3}, + {0xA7A5, 0xA7A5}, {0xA7A7, 0xA7A7}, {0xA7A9, 0xA7A9}, + {0xA7B5, 0xA7B5}, {0xA7B7, 0xA7B7}, {0xA7B9, 0xA7B9}, + {0xA7BB, 0xA7BB}, {0xA7BD, 0xA7BD}, {0xA7BF, 0xA7BF}, + {0xA7C1, 0xA7C1}, {0xA7C3, 0xA7C3}, {0xA7C8, 0xA7C8}, + {0xA7CA, 0xA7CA}, {0xA7D1, 0xA7D1}, {0xA7D7, 0xA7D7}, + {0xA7D9, 0xA7D9}, {0xA7F6, 0xA7F6}, {0xAB53, 0xAB53}, + {0xAB70, 0xABBF}, {0xFB00, 0xFB06}, {0xFB13, 0xFB17}, + {0xFF41, 0xFF5A}, {0x10428, 0x1044F}, {0x104D8, 0x104FB}, + {0x10597, 0x105A1}, {0x105A3, 0x105B1}, {0x105B3, 0x105B9}, + {0x105BB, 0x105BC}, {0x10CC0, 0x10CF2}, {0x118C0, 0x118DF}, + {0x16E60, 0x16E7F}, {0x1E922, 0x1E943}, + // Binary: Changes_When_Casefolded + {0x0041, 0x005A}, {0x00B5, 0x00B5}, {0x00C0, 0x00D6}, + {0x00D8, 0x00DF}, {0x0100, 0x0100}, {0x0102, 0x0102}, + {0x0104, 0x0104}, {0x0106, 0x0106}, {0x0108, 0x0108}, + {0x010A, 0x010A}, {0x010C, 0x010C}, {0x010E, 0x010E}, + {0x0110, 0x0110}, {0x0112, 0x0112}, {0x0114, 0x0114}, + {0x0116, 0x0116}, {0x0118, 0x0118}, {0x011A, 0x011A}, + {0x011C, 0x011C}, {0x011E, 0x011E}, {0x0120, 0x0120}, + {0x0122, 0x0122}, {0x0124, 0x0124}, {0x0126, 0x0126}, + {0x0128, 0x0128}, {0x012A, 0x012A}, {0x012C, 0x012C}, + {0x012E, 0x012E}, {0x0130, 0x0130}, {0x0132, 0x0132}, + {0x0134, 0x0134}, {0x0136, 0x0136}, {0x0139, 0x0139}, + {0x013B, 0x013B}, {0x013D, 0x013D}, {0x013F, 0x013F}, + {0x0141, 0x0141}, {0x0143, 0x0143}, {0x0145, 0x0145}, + {0x0147, 0x0147}, {0x0149, 0x014A}, {0x014C, 0x014C}, + {0x014E, 0x014E}, {0x0150, 0x0150}, {0x0152, 0x0152}, + {0x0154, 0x0154}, {0x0156, 0x0156}, {0x0158, 0x0158}, + {0x015A, 0x015A}, {0x015C, 0x015C}, {0x015E, 0x015E}, + {0x0160, 0x0160}, {0x0162, 0x0162}, {0x0164, 0x0164}, + {0x0166, 0x0166}, {0x0168, 0x0168}, {0x016A, 0x016A}, + {0x016C, 0x016C}, {0x016E, 0x016E}, {0x0170, 0x0170}, + {0x0172, 0x0172}, {0x0174, 0x0174}, {0x0176, 0x0176}, + {0x0178, 0x0179}, {0x017B, 0x017B}, {0x017D, 0x017D}, + {0x017F, 0x017F}, {0x0181, 0x0182}, {0x0184, 0x0184}, + {0x0186, 0x0187}, {0x0189, 0x018B}, {0x018E, 0x0191}, + {0x0193, 0x0194}, {0x0196, 0x0198}, {0x019C, 0x019D}, + {0x019F, 0x01A0}, {0x01A2, 0x01A2}, {0x01A4, 0x01A4}, + {0x01A6, 0x01A7}, {0x01A9, 0x01A9}, {0x01AC, 0x01AC}, + {0x01AE, 0x01AF}, {0x01B1, 0x01B3}, {0x01B5, 0x01B5}, + {0x01B7, 0x01B8}, {0x01BC, 0x01BC}, {0x01C4, 0x01C5}, + {0x01C7, 0x01C8}, {0x01CA, 0x01CB}, {0x01CD, 0x01CD}, + {0x01CF, 0x01CF}, {0x01D1, 0x01D1}, {0x01D3, 0x01D3}, + {0x01D5, 0x01D5}, {0x01D7, 0x01D7}, {0x01D9, 0x01D9}, + {0x01DB, 0x01DB}, {0x01DE, 0x01DE}, {0x01E0, 0x01E0}, + {0x01E2, 0x01E2}, {0x01E4, 0x01E4}, {0x01E6, 0x01E6}, + {0x01E8, 0x01E8}, {0x01EA, 0x01EA}, {0x01EC, 0x01EC}, + {0x01EE, 0x01EE}, {0x01F1, 0x01F2}, {0x01F4, 0x01F4}, + {0x01F6, 0x01F8}, {0x01FA, 0x01FA}, {0x01FC, 0x01FC}, + {0x01FE, 0x01FE}, {0x0200, 0x0200}, {0x0202, 0x0202}, + {0x0204, 0x0204}, {0x0206, 0x0206}, {0x0208, 0x0208}, + {0x020A, 0x020A}, {0x020C, 0x020C}, {0x020E, 0x020E}, + {0x0210, 0x0210}, {0x0212, 0x0212}, {0x0214, 0x0214}, + {0x0216, 0x0216}, {0x0218, 0x0218}, {0x021A, 0x021A}, + {0x021C, 0x021C}, {0x021E, 0x021E}, {0x0220, 0x0220}, + {0x0222, 0x0222}, {0x0224, 0x0224}, {0x0226, 0x0226}, + {0x0228, 0x0228}, {0x022A, 0x022A}, {0x022C, 0x022C}, + {0x022E, 0x022E}, {0x0230, 0x0230}, {0x0232, 0x0232}, + {0x023A, 0x023B}, {0x023D, 0x023E}, {0x0241, 0x0241}, + {0x0243, 0x0246}, {0x0248, 0x0248}, {0x024A, 0x024A}, + {0x024C, 0x024C}, {0x024E, 0x024E}, {0x0345, 0x0345}, + {0x0370, 0x0370}, {0x0372, 0x0372}, {0x0376, 0x0376}, + {0x037F, 0x037F}, {0x0386, 0x0386}, {0x0388, 0x038A}, + {0x038C, 0x038C}, {0x038E, 0x038F}, {0x0391, 0x03A1}, + {0x03A3, 0x03AB}, {0x03C2, 0x03C2}, {0x03CF, 0x03D1}, + {0x03D5, 0x03D6}, {0x03D8, 0x03D8}, {0x03DA, 0x03DA}, + {0x03DC, 0x03DC}, {0x03DE, 0x03DE}, {0x03E0, 0x03E0}, + {0x03E2, 0x03E2}, {0x03E4, 0x03E4}, {0x03E6, 0x03E6}, + {0x03E8, 0x03E8}, {0x03EA, 0x03EA}, {0x03EC, 0x03EC}, + {0x03EE, 0x03EE}, {0x03F0, 0x03F1}, {0x03F4, 0x03F5}, + {0x03F7, 0x03F7}, {0x03F9, 0x03FA}, {0x03FD, 0x042F}, + {0x0460, 0x0460}, {0x0462, 0x0462}, {0x0464, 0x0464}, + {0x0466, 0x0466}, {0x0468, 0x0468}, {0x046A, 0x046A}, + {0x046C, 0x046C}, {0x046E, 0x046E}, {0x0470, 0x0470}, + {0x0472, 0x0472}, {0x0474, 0x0474}, {0x0476, 0x0476}, + {0x0478, 0x0478}, {0x047A, 0x047A}, {0x047C, 0x047C}, + {0x047E, 0x047E}, {0x0480, 0x0480}, {0x048A, 0x048A}, + {0x048C, 0x048C}, {0x048E, 0x048E}, {0x0490, 0x0490}, + {0x0492, 0x0492}, {0x0494, 0x0494}, {0x0496, 0x0496}, + {0x0498, 0x0498}, {0x049A, 0x049A}, {0x049C, 0x049C}, + {0x049E, 0x049E}, {0x04A0, 0x04A0}, {0x04A2, 0x04A2}, + {0x04A4, 0x04A4}, {0x04A6, 0x04A6}, {0x04A8, 0x04A8}, + {0x04AA, 0x04AA}, {0x04AC, 0x04AC}, {0x04AE, 0x04AE}, + {0x04B0, 0x04B0}, {0x04B2, 0x04B2}, {0x04B4, 0x04B4}, + {0x04B6, 0x04B6}, {0x04B8, 0x04B8}, {0x04BA, 0x04BA}, + {0x04BC, 0x04BC}, {0x04BE, 0x04BE}, {0x04C0, 0x04C1}, + {0x04C3, 0x04C3}, {0x04C5, 0x04C5}, {0x04C7, 0x04C7}, + {0x04C9, 0x04C9}, {0x04CB, 0x04CB}, {0x04CD, 0x04CD}, + {0x04D0, 0x04D0}, {0x04D2, 0x04D2}, {0x04D4, 0x04D4}, + {0x04D6, 0x04D6}, {0x04D8, 0x04D8}, {0x04DA, 0x04DA}, + {0x04DC, 0x04DC}, {0x04DE, 0x04DE}, {0x04E0, 0x04E0}, + {0x04E2, 0x04E2}, {0x04E4, 0x04E4}, {0x04E6, 0x04E6}, + {0x04E8, 0x04E8}, {0x04EA, 0x04EA}, {0x04EC, 0x04EC}, + {0x04EE, 0x04EE}, {0x04F0, 0x04F0}, {0x04F2, 0x04F2}, + {0x04F4, 0x04F4}, {0x04F6, 0x04F6}, {0x04F8, 0x04F8}, + {0x04FA, 0x04FA}, {0x04FC, 0x04FC}, {0x04FE, 0x04FE}, + {0x0500, 0x0500}, {0x0502, 0x0502}, {0x0504, 0x0504}, + {0x0506, 0x0506}, {0x0508, 0x0508}, {0x050A, 0x050A}, + {0x050C, 0x050C}, {0x050E, 0x050E}, {0x0510, 0x0510}, + {0x0512, 0x0512}, {0x0514, 0x0514}, {0x0516, 0x0516}, + {0x0518, 0x0518}, {0x051A, 0x051A}, {0x051C, 0x051C}, + {0x051E, 0x051E}, {0x0520, 0x0520}, {0x0522, 0x0522}, + {0x0524, 0x0524}, {0x0526, 0x0526}, {0x0528, 0x0528}, + {0x052A, 0x052A}, {0x052C, 0x052C}, {0x052E, 0x052E}, + {0x0531, 0x0556}, {0x0587, 0x0587}, {0x10A0, 0x10C5}, + {0x10C7, 0x10C7}, {0x10CD, 0x10CD}, {0x13F8, 0x13FD}, + {0x1C80, 0x1C88}, {0x1C90, 0x1CBA}, {0x1CBD, 0x1CBF}, + {0x1E00, 0x1E00}, {0x1E02, 0x1E02}, {0x1E04, 0x1E04}, + {0x1E06, 0x1E06}, {0x1E08, 0x1E08}, {0x1E0A, 0x1E0A}, + {0x1E0C, 0x1E0C}, {0x1E0E, 0x1E0E}, {0x1E10, 0x1E10}, + {0x1E12, 0x1E12}, {0x1E14, 0x1E14}, {0x1E16, 0x1E16}, + {0x1E18, 0x1E18}, {0x1E1A, 0x1E1A}, {0x1E1C, 0x1E1C}, + {0x1E1E, 0x1E1E}, {0x1E20, 0x1E20}, {0x1E22, 0x1E22}, + {0x1E24, 0x1E24}, {0x1E26, 0x1E26}, {0x1E28, 0x1E28}, + {0x1E2A, 0x1E2A}, {0x1E2C, 0x1E2C}, {0x1E2E, 0x1E2E}, + {0x1E30, 0x1E30}, {0x1E32, 0x1E32}, {0x1E34, 0x1E34}, + {0x1E36, 0x1E36}, {0x1E38, 0x1E38}, {0x1E3A, 0x1E3A}, + {0x1E3C, 0x1E3C}, {0x1E3E, 0x1E3E}, {0x1E40, 0x1E40}, + {0x1E42, 0x1E42}, {0x1E44, 0x1E44}, {0x1E46, 0x1E46}, + {0x1E48, 0x1E48}, {0x1E4A, 0x1E4A}, {0x1E4C, 0x1E4C}, + {0x1E4E, 0x1E4E}, {0x1E50, 0x1E50}, {0x1E52, 0x1E52}, + {0x1E54, 0x1E54}, {0x1E56, 0x1E56}, {0x1E58, 0x1E58}, + {0x1E5A, 0x1E5A}, {0x1E5C, 0x1E5C}, {0x1E5E, 0x1E5E}, + {0x1E60, 0x1E60}, {0x1E62, 0x1E62}, {0x1E64, 0x1E64}, + {0x1E66, 0x1E66}, {0x1E68, 0x1E68}, {0x1E6A, 0x1E6A}, + {0x1E6C, 0x1E6C}, {0x1E6E, 0x1E6E}, {0x1E70, 0x1E70}, + {0x1E72, 0x1E72}, {0x1E74, 0x1E74}, {0x1E76, 0x1E76}, + {0x1E78, 0x1E78}, {0x1E7A, 0x1E7A}, {0x1E7C, 0x1E7C}, + {0x1E7E, 0x1E7E}, {0x1E80, 0x1E80}, {0x1E82, 0x1E82}, + {0x1E84, 0x1E84}, {0x1E86, 0x1E86}, {0x1E88, 0x1E88}, + {0x1E8A, 0x1E8A}, {0x1E8C, 0x1E8C}, {0x1E8E, 0x1E8E}, + {0x1E90, 0x1E90}, {0x1E92, 0x1E92}, {0x1E94, 0x1E94}, + {0x1E9A, 0x1E9B}, {0x1E9E, 0x1E9E}, {0x1EA0, 0x1EA0}, + {0x1EA2, 0x1EA2}, {0x1EA4, 0x1EA4}, {0x1EA6, 0x1EA6}, + {0x1EA8, 0x1EA8}, {0x1EAA, 0x1EAA}, {0x1EAC, 0x1EAC}, + {0x1EAE, 0x1EAE}, {0x1EB0, 0x1EB0}, {0x1EB2, 0x1EB2}, + {0x1EB4, 0x1EB4}, {0x1EB6, 0x1EB6}, {0x1EB8, 0x1EB8}, + {0x1EBA, 0x1EBA}, {0x1EBC, 0x1EBC}, {0x1EBE, 0x1EBE}, + {0x1EC0, 0x1EC0}, {0x1EC2, 0x1EC2}, {0x1EC4, 0x1EC4}, + {0x1EC6, 0x1EC6}, {0x1EC8, 0x1EC8}, {0x1ECA, 0x1ECA}, + {0x1ECC, 0x1ECC}, {0x1ECE, 0x1ECE}, {0x1ED0, 0x1ED0}, + {0x1ED2, 0x1ED2}, {0x1ED4, 0x1ED4}, {0x1ED6, 0x1ED6}, + {0x1ED8, 0x1ED8}, {0x1EDA, 0x1EDA}, {0x1EDC, 0x1EDC}, + {0x1EDE, 0x1EDE}, {0x1EE0, 0x1EE0}, {0x1EE2, 0x1EE2}, + {0x1EE4, 0x1EE4}, {0x1EE6, 0x1EE6}, {0x1EE8, 0x1EE8}, + {0x1EEA, 0x1EEA}, {0x1EEC, 0x1EEC}, {0x1EEE, 0x1EEE}, + {0x1EF0, 0x1EF0}, {0x1EF2, 0x1EF2}, {0x1EF4, 0x1EF4}, + {0x1EF6, 0x1EF6}, {0x1EF8, 0x1EF8}, {0x1EFA, 0x1EFA}, + {0x1EFC, 0x1EFC}, {0x1EFE, 0x1EFE}, {0x1F08, 0x1F0F}, + {0x1F18, 0x1F1D}, {0x1F28, 0x1F2F}, {0x1F38, 0x1F3F}, + {0x1F48, 0x1F4D}, {0x1F59, 0x1F59}, {0x1F5B, 0x1F5B}, + {0x1F5D, 0x1F5D}, {0x1F5F, 0x1F5F}, {0x1F68, 0x1F6F}, + {0x1F80, 0x1FAF}, {0x1FB2, 0x1FB4}, {0x1FB7, 0x1FBC}, + {0x1FC2, 0x1FC4}, {0x1FC7, 0x1FCC}, {0x1FD8, 0x1FDB}, + {0x1FE8, 0x1FEC}, {0x1FF2, 0x1FF4}, {0x1FF7, 0x1FFC}, + {0x2126, 0x2126}, {0x212A, 0x212B}, {0x2132, 0x2132}, + {0x2160, 0x216F}, {0x2183, 0x2183}, {0x24B6, 0x24CF}, + {0x2C00, 0x2C2F}, {0x2C60, 0x2C60}, {0x2C62, 0x2C64}, + {0x2C67, 0x2C67}, {0x2C69, 0x2C69}, {0x2C6B, 0x2C6B}, + {0x2C6D, 0x2C70}, {0x2C72, 0x2C72}, {0x2C75, 0x2C75}, + {0x2C7E, 0x2C80}, {0x2C82, 0x2C82}, {0x2C84, 0x2C84}, + {0x2C86, 0x2C86}, {0x2C88, 0x2C88}, {0x2C8A, 0x2C8A}, + {0x2C8C, 0x2C8C}, {0x2C8E, 0x2C8E}, {0x2C90, 0x2C90}, + {0x2C92, 0x2C92}, {0x2C94, 0x2C94}, {0x2C96, 0x2C96}, + {0x2C98, 0x2C98}, {0x2C9A, 0x2C9A}, {0x2C9C, 0x2C9C}, + {0x2C9E, 0x2C9E}, {0x2CA0, 0x2CA0}, {0x2CA2, 0x2CA2}, + {0x2CA4, 0x2CA4}, {0x2CA6, 0x2CA6}, {0x2CA8, 0x2CA8}, + {0x2CAA, 0x2CAA}, {0x2CAC, 0x2CAC}, {0x2CAE, 0x2CAE}, + {0x2CB0, 0x2CB0}, {0x2CB2, 0x2CB2}, {0x2CB4, 0x2CB4}, + {0x2CB6, 0x2CB6}, {0x2CB8, 0x2CB8}, {0x2CBA, 0x2CBA}, + {0x2CBC, 0x2CBC}, {0x2CBE, 0x2CBE}, {0x2CC0, 0x2CC0}, + {0x2CC2, 0x2CC2}, {0x2CC4, 0x2CC4}, {0x2CC6, 0x2CC6}, + {0x2CC8, 0x2CC8}, {0x2CCA, 0x2CCA}, {0x2CCC, 0x2CCC}, + {0x2CCE, 0x2CCE}, {0x2CD0, 0x2CD0}, {0x2CD2, 0x2CD2}, + {0x2CD4, 0x2CD4}, {0x2CD6, 0x2CD6}, {0x2CD8, 0x2CD8}, + {0x2CDA, 0x2CDA}, {0x2CDC, 0x2CDC}, {0x2CDE, 0x2CDE}, + {0x2CE0, 0x2CE0}, {0x2CE2, 0x2CE2}, {0x2CEB, 0x2CEB}, + {0x2CED, 0x2CED}, {0x2CF2, 0x2CF2}, {0xA640, 0xA640}, + {0xA642, 0xA642}, {0xA644, 0xA644}, {0xA646, 0xA646}, + {0xA648, 0xA648}, {0xA64A, 0xA64A}, {0xA64C, 0xA64C}, + {0xA64E, 0xA64E}, {0xA650, 0xA650}, {0xA652, 0xA652}, + {0xA654, 0xA654}, {0xA656, 0xA656}, {0xA658, 0xA658}, + {0xA65A, 0xA65A}, {0xA65C, 0xA65C}, {0xA65E, 0xA65E}, + {0xA660, 0xA660}, {0xA662, 0xA662}, {0xA664, 0xA664}, + {0xA666, 0xA666}, {0xA668, 0xA668}, {0xA66A, 0xA66A}, + {0xA66C, 0xA66C}, {0xA680, 0xA680}, {0xA682, 0xA682}, + {0xA684, 0xA684}, {0xA686, 0xA686}, {0xA688, 0xA688}, + {0xA68A, 0xA68A}, {0xA68C, 0xA68C}, {0xA68E, 0xA68E}, + {0xA690, 0xA690}, {0xA692, 0xA692}, {0xA694, 0xA694}, + {0xA696, 0xA696}, {0xA698, 0xA698}, {0xA69A, 0xA69A}, + {0xA722, 0xA722}, {0xA724, 0xA724}, {0xA726, 0xA726}, + {0xA728, 0xA728}, {0xA72A, 0xA72A}, {0xA72C, 0xA72C}, + {0xA72E, 0xA72E}, {0xA732, 0xA732}, {0xA734, 0xA734}, + {0xA736, 0xA736}, {0xA738, 0xA738}, {0xA73A, 0xA73A}, + {0xA73C, 0xA73C}, {0xA73E, 0xA73E}, {0xA740, 0xA740}, + {0xA742, 0xA742}, {0xA744, 0xA744}, {0xA746, 0xA746}, + {0xA748, 0xA748}, {0xA74A, 0xA74A}, {0xA74C, 0xA74C}, + {0xA74E, 0xA74E}, {0xA750, 0xA750}, {0xA752, 0xA752}, + {0xA754, 0xA754}, {0xA756, 0xA756}, {0xA758, 0xA758}, + {0xA75A, 0xA75A}, {0xA75C, 0xA75C}, {0xA75E, 0xA75E}, + {0xA760, 0xA760}, {0xA762, 0xA762}, {0xA764, 0xA764}, + {0xA766, 0xA766}, {0xA768, 0xA768}, {0xA76A, 0xA76A}, + {0xA76C, 0xA76C}, {0xA76E, 0xA76E}, {0xA779, 0xA779}, + {0xA77B, 0xA77B}, {0xA77D, 0xA77E}, {0xA780, 0xA780}, + {0xA782, 0xA782}, {0xA784, 0xA784}, {0xA786, 0xA786}, + {0xA78B, 0xA78B}, {0xA78D, 0xA78D}, {0xA790, 0xA790}, + {0xA792, 0xA792}, {0xA796, 0xA796}, {0xA798, 0xA798}, + {0xA79A, 0xA79A}, {0xA79C, 0xA79C}, {0xA79E, 0xA79E}, + {0xA7A0, 0xA7A0}, {0xA7A2, 0xA7A2}, {0xA7A4, 0xA7A4}, + {0xA7A6, 0xA7A6}, {0xA7A8, 0xA7A8}, {0xA7AA, 0xA7AE}, + {0xA7B0, 0xA7B4}, {0xA7B6, 0xA7B6}, {0xA7B8, 0xA7B8}, + {0xA7BA, 0xA7BA}, {0xA7BC, 0xA7BC}, {0xA7BE, 0xA7BE}, + {0xA7C0, 0xA7C0}, {0xA7C2, 0xA7C2}, {0xA7C4, 0xA7C7}, + {0xA7C9, 0xA7C9}, {0xA7D0, 0xA7D0}, {0xA7D6, 0xA7D6}, + {0xA7D8, 0xA7D8}, {0xA7F5, 0xA7F5}, {0xAB70, 0xABBF}, + {0xFB00, 0xFB06}, {0xFB13, 0xFB17}, {0xFF21, 0xFF3A}, + {0x10400, 0x10427}, {0x104B0, 0x104D3}, {0x10570, 0x1057A}, + {0x1057C, 0x1058A}, {0x1058C, 0x10592}, {0x10594, 0x10595}, + {0x10C80, 0x10CB2}, {0x118A0, 0x118BF}, {0x16E40, 0x16E5F}, + {0x1E900, 0x1E921}, + // Binary: Changes_When_Casemapped + {0x0041, 0x005A}, {0x0061, 0x007A}, {0x00B5, 0x00B5}, + {0x00C0, 0x00D6}, {0x00D8, 0x00F6}, {0x00F8, 0x0137}, + {0x0139, 0x018C}, {0x018E, 0x019A}, {0x019C, 0x01A9}, + {0x01AC, 0x01B9}, {0x01BC, 0x01BD}, {0x01BF, 0x01BF}, + {0x01C4, 0x0220}, {0x0222, 0x0233}, {0x023A, 0x0254}, + {0x0256, 0x0257}, {0x0259, 0x0259}, {0x025B, 0x025C}, + {0x0260, 0x0261}, {0x0263, 0x0263}, {0x0265, 0x0266}, + {0x0268, 0x026C}, {0x026F, 0x026F}, {0x0271, 0x0272}, + {0x0275, 0x0275}, {0x027D, 0x027D}, {0x0280, 0x0280}, + {0x0282, 0x0283}, {0x0287, 0x028C}, {0x0292, 0x0292}, + {0x029D, 0x029E}, {0x0345, 0x0345}, {0x0370, 0x0373}, + {0x0376, 0x0377}, {0x037B, 0x037D}, {0x037F, 0x037F}, + {0x0386, 0x0386}, {0x0388, 0x038A}, {0x038C, 0x038C}, + {0x038E, 0x03A1}, {0x03A3, 0x03D1}, {0x03D5, 0x03F5}, + {0x03F7, 0x03FB}, {0x03FD, 0x0481}, {0x048A, 0x052F}, + {0x0531, 0x0556}, {0x0561, 0x0587}, {0x10A0, 0x10C5}, + {0x10C7, 0x10C7}, {0x10CD, 0x10CD}, {0x10D0, 0x10FA}, + {0x10FD, 0x10FF}, {0x13A0, 0x13F5}, {0x13F8, 0x13FD}, + {0x1C80, 0x1C88}, {0x1C90, 0x1CBA}, {0x1CBD, 0x1CBF}, + {0x1D79, 0x1D79}, {0x1D7D, 0x1D7D}, {0x1D8E, 0x1D8E}, + {0x1E00, 0x1E9B}, {0x1E9E, 0x1E9E}, {0x1EA0, 0x1F15}, + {0x1F18, 0x1F1D}, {0x1F20, 0x1F45}, {0x1F48, 0x1F4D}, + {0x1F50, 0x1F57}, {0x1F59, 0x1F59}, {0x1F5B, 0x1F5B}, + {0x1F5D, 0x1F5D}, {0x1F5F, 0x1F7D}, {0x1F80, 0x1FB4}, + {0x1FB6, 0x1FBC}, {0x1FBE, 0x1FBE}, {0x1FC2, 0x1FC4}, + {0x1FC6, 0x1FCC}, {0x1FD0, 0x1FD3}, {0x1FD6, 0x1FDB}, + {0x1FE0, 0x1FEC}, {0x1FF2, 0x1FF4}, {0x1FF6, 0x1FFC}, + {0x2126, 0x2126}, {0x212A, 0x212B}, {0x2132, 0x2132}, + {0x214E, 0x214E}, {0x2160, 0x217F}, {0x2183, 0x2184}, + {0x24B6, 0x24E9}, {0x2C00, 0x2C70}, {0x2C72, 0x2C73}, + {0x2C75, 0x2C76}, {0x2C7E, 0x2CE3}, {0x2CEB, 0x2CEE}, + {0x2CF2, 0x2CF3}, {0x2D00, 0x2D25}, {0x2D27, 0x2D27}, + {0x2D2D, 0x2D2D}, {0xA640, 0xA66D}, {0xA680, 0xA69B}, + {0xA722, 0xA72F}, {0xA732, 0xA76F}, {0xA779, 0xA787}, + {0xA78B, 0xA78D}, {0xA790, 0xA794}, {0xA796, 0xA7AE}, + {0xA7B0, 0xA7CA}, {0xA7D0, 0xA7D1}, {0xA7D6, 0xA7D9}, + {0xA7F5, 0xA7F6}, {0xAB53, 0xAB53}, {0xAB70, 0xABBF}, + {0xFB00, 0xFB06}, {0xFB13, 0xFB17}, {0xFF21, 0xFF3A}, + {0xFF41, 0xFF5A}, {0x10400, 0x1044F}, {0x104B0, 0x104D3}, + {0x104D8, 0x104FB}, {0x10570, 0x1057A}, {0x1057C, 0x1058A}, + {0x1058C, 0x10592}, {0x10594, 0x10595}, {0x10597, 0x105A1}, + {0x105A3, 0x105B1}, {0x105B3, 0x105B9}, {0x105BB, 0x105BC}, + {0x10C80, 0x10CB2}, {0x10CC0, 0x10CF2}, {0x118A0, 0x118DF}, + {0x16E40, 0x16E7F}, {0x1E900, 0x1E943}, + // Binary: ID_Start + {0x0041, 0x005A}, {0x0061, 0x007A}, {0x00AA, 0x00AA}, + {0x00B5, 0x00B5}, {0x00BA, 0x00BA}, {0x00C0, 0x00D6}, + {0x00D8, 0x00F6}, {0x00F8, 0x02C1}, {0x02C6, 0x02D1}, + {0x02E0, 0x02E4}, {0x02EC, 0x02EC}, {0x02EE, 0x02EE}, + {0x0370, 0x0374}, {0x0376, 0x0377}, {0x037A, 0x037D}, + {0x037F, 0x037F}, {0x0386, 0x0386}, {0x0388, 0x038A}, + {0x038C, 0x038C}, {0x038E, 0x03A1}, {0x03A3, 0x03F5}, + {0x03F7, 0x0481}, {0x048A, 0x052F}, {0x0531, 0x0556}, + {0x0559, 0x0559}, {0x0560, 0x0588}, {0x05D0, 0x05EA}, + {0x05EF, 0x05F2}, {0x0620, 0x064A}, {0x066E, 0x066F}, + {0x0671, 0x06D3}, {0x06D5, 0x06D5}, {0x06E5, 0x06E6}, + {0x06EE, 0x06EF}, {0x06FA, 0x06FC}, {0x06FF, 0x06FF}, + {0x0710, 0x0710}, {0x0712, 0x072F}, {0x074D, 0x07A5}, + {0x07B1, 0x07B1}, {0x07CA, 0x07EA}, {0x07F4, 0x07F5}, + {0x07FA, 0x07FA}, {0x0800, 0x0815}, {0x081A, 0x081A}, + {0x0824, 0x0824}, {0x0828, 0x0828}, {0x0840, 0x0858}, + {0x0860, 0x086A}, {0x0870, 0x0887}, {0x0889, 0x088E}, + {0x08A0, 0x08C9}, {0x0904, 0x0939}, {0x093D, 0x093D}, + {0x0950, 0x0950}, {0x0958, 0x0961}, {0x0971, 0x0980}, + {0x0985, 0x098C}, {0x098F, 0x0990}, {0x0993, 0x09A8}, + {0x09AA, 0x09B0}, {0x09B2, 0x09B2}, {0x09B6, 0x09B9}, + {0x09BD, 0x09BD}, {0x09CE, 0x09CE}, {0x09DC, 0x09DD}, + {0x09DF, 0x09E1}, {0x09F0, 0x09F1}, {0x09FC, 0x09FC}, + {0x0A05, 0x0A0A}, {0x0A0F, 0x0A10}, {0x0A13, 0x0A28}, + {0x0A2A, 0x0A30}, {0x0A32, 0x0A33}, {0x0A35, 0x0A36}, + {0x0A38, 0x0A39}, {0x0A59, 0x0A5C}, {0x0A5E, 0x0A5E}, + {0x0A72, 0x0A74}, {0x0A85, 0x0A8D}, {0x0A8F, 0x0A91}, + {0x0A93, 0x0AA8}, {0x0AAA, 0x0AB0}, {0x0AB2, 0x0AB3}, + {0x0AB5, 0x0AB9}, {0x0ABD, 0x0ABD}, {0x0AD0, 0x0AD0}, + {0x0AE0, 0x0AE1}, {0x0AF9, 0x0AF9}, {0x0B05, 0x0B0C}, + {0x0B0F, 0x0B10}, {0x0B13, 0x0B28}, {0x0B2A, 0x0B30}, + {0x0B32, 0x0B33}, {0x0B35, 0x0B39}, {0x0B3D, 0x0B3D}, + {0x0B5C, 0x0B5D}, {0x0B5F, 0x0B61}, {0x0B71, 0x0B71}, + {0x0B83, 0x0B83}, {0x0B85, 0x0B8A}, {0x0B8E, 0x0B90}, + {0x0B92, 0x0B95}, {0x0B99, 0x0B9A}, {0x0B9C, 0x0B9C}, + {0x0B9E, 0x0B9F}, {0x0BA3, 0x0BA4}, {0x0BA8, 0x0BAA}, + {0x0BAE, 0x0BB9}, {0x0BD0, 0x0BD0}, {0x0C05, 0x0C0C}, + {0x0C0E, 0x0C10}, {0x0C12, 0x0C28}, {0x0C2A, 0x0C39}, + {0x0C3D, 0x0C3D}, {0x0C58, 0x0C5A}, {0x0C5D, 0x0C5D}, + {0x0C60, 0x0C61}, {0x0C80, 0x0C80}, {0x0C85, 0x0C8C}, + {0x0C8E, 0x0C90}, {0x0C92, 0x0CA8}, {0x0CAA, 0x0CB3}, + {0x0CB5, 0x0CB9}, {0x0CBD, 0x0CBD}, {0x0CDD, 0x0CDE}, + {0x0CE0, 0x0CE1}, {0x0CF1, 0x0CF2}, {0x0D04, 0x0D0C}, + {0x0D0E, 0x0D10}, {0x0D12, 0x0D3A}, {0x0D3D, 0x0D3D}, + {0x0D4E, 0x0D4E}, {0x0D54, 0x0D56}, {0x0D5F, 0x0D61}, + {0x0D7A, 0x0D7F}, {0x0D85, 0x0D96}, {0x0D9A, 0x0DB1}, + {0x0DB3, 0x0DBB}, {0x0DBD, 0x0DBD}, {0x0DC0, 0x0DC6}, + {0x0E01, 0x0E30}, {0x0E32, 0x0E33}, {0x0E40, 0x0E46}, + {0x0E81, 0x0E82}, {0x0E84, 0x0E84}, {0x0E86, 0x0E8A}, + {0x0E8C, 0x0EA3}, {0x0EA5, 0x0EA5}, {0x0EA7, 0x0EB0}, + {0x0EB2, 0x0EB3}, {0x0EBD, 0x0EBD}, {0x0EC0, 0x0EC4}, + {0x0EC6, 0x0EC6}, {0x0EDC, 0x0EDF}, {0x0F00, 0x0F00}, + {0x0F40, 0x0F47}, {0x0F49, 0x0F6C}, {0x0F88, 0x0F8C}, + {0x1000, 0x102A}, {0x103F, 0x103F}, {0x1050, 0x1055}, + {0x105A, 0x105D}, {0x1061, 0x1061}, {0x1065, 0x1066}, + {0x106E, 0x1070}, {0x1075, 0x1081}, {0x108E, 0x108E}, + {0x10A0, 0x10C5}, {0x10C7, 0x10C7}, {0x10CD, 0x10CD}, + {0x10D0, 0x10FA}, {0x10FC, 0x1248}, {0x124A, 0x124D}, + {0x1250, 0x1256}, {0x1258, 0x1258}, {0x125A, 0x125D}, + {0x1260, 0x1288}, {0x128A, 0x128D}, {0x1290, 0x12B0}, + {0x12B2, 0x12B5}, {0x12B8, 0x12BE}, {0x12C0, 0x12C0}, + {0x12C2, 0x12C5}, {0x12C8, 0x12D6}, {0x12D8, 0x1310}, + {0x1312, 0x1315}, {0x1318, 0x135A}, {0x1380, 0x138F}, + {0x13A0, 0x13F5}, {0x13F8, 0x13FD}, {0x1401, 0x166C}, + {0x166F, 0x167F}, {0x1681, 0x169A}, {0x16A0, 0x16EA}, + {0x16EE, 0x16F8}, {0x1700, 0x1711}, {0x171F, 0x1731}, + {0x1740, 0x1751}, {0x1760, 0x176C}, {0x176E, 0x1770}, + {0x1780, 0x17B3}, {0x17D7, 0x17D7}, {0x17DC, 0x17DC}, + {0x1820, 0x1878}, {0x1880, 0x18A8}, {0x18AA, 0x18AA}, + {0x18B0, 0x18F5}, {0x1900, 0x191E}, {0x1950, 0x196D}, + {0x1970, 0x1974}, {0x1980, 0x19AB}, {0x19B0, 0x19C9}, + {0x1A00, 0x1A16}, {0x1A20, 0x1A54}, {0x1AA7, 0x1AA7}, + {0x1B05, 0x1B33}, {0x1B45, 0x1B4C}, {0x1B83, 0x1BA0}, + {0x1BAE, 0x1BAF}, {0x1BBA, 0x1BE5}, {0x1C00, 0x1C23}, + {0x1C4D, 0x1C4F}, {0x1C5A, 0x1C7D}, {0x1C80, 0x1C88}, + {0x1C90, 0x1CBA}, {0x1CBD, 0x1CBF}, {0x1CE9, 0x1CEC}, + {0x1CEE, 0x1CF3}, {0x1CF5, 0x1CF6}, {0x1CFA, 0x1CFA}, + {0x1D00, 0x1DBF}, {0x1E00, 0x1F15}, {0x1F18, 0x1F1D}, + {0x1F20, 0x1F45}, {0x1F48, 0x1F4D}, {0x1F50, 0x1F57}, + {0x1F59, 0x1F59}, {0x1F5B, 0x1F5B}, {0x1F5D, 0x1F5D}, + {0x1F5F, 0x1F7D}, {0x1F80, 0x1FB4}, {0x1FB6, 0x1FBC}, + {0x1FBE, 0x1FBE}, {0x1FC2, 0x1FC4}, {0x1FC6, 0x1FCC}, + {0x1FD0, 0x1FD3}, {0x1FD6, 0x1FDB}, {0x1FE0, 0x1FEC}, + {0x1FF2, 0x1FF4}, {0x1FF6, 0x1FFC}, {0x2071, 0x2071}, + {0x207F, 0x207F}, {0x2090, 0x209C}, {0x2102, 0x2102}, + {0x2107, 0x2107}, {0x210A, 0x2113}, {0x2115, 0x2115}, + {0x2118, 0x211D}, {0x2124, 0x2124}, {0x2126, 0x2126}, + {0x2128, 0x2128}, {0x212A, 0x2139}, {0x213C, 0x213F}, + {0x2145, 0x2149}, {0x214E, 0x214E}, {0x2160, 0x2188}, + {0x2C00, 0x2CE4}, {0x2CEB, 0x2CEE}, {0x2CF2, 0x2CF3}, + {0x2D00, 0x2D25}, {0x2D27, 0x2D27}, {0x2D2D, 0x2D2D}, + {0x2D30, 0x2D67}, {0x2D6F, 0x2D6F}, {0x2D80, 0x2D96}, + {0x2DA0, 0x2DA6}, {0x2DA8, 0x2DAE}, {0x2DB0, 0x2DB6}, + {0x2DB8, 0x2DBE}, {0x2DC0, 0x2DC6}, {0x2DC8, 0x2DCE}, + {0x2DD0, 0x2DD6}, {0x2DD8, 0x2DDE}, {0x3005, 0x3007}, + {0x3021, 0x3029}, {0x3031, 0x3035}, {0x3038, 0x303C}, + {0x3041, 0x3096}, {0x309B, 0x309F}, {0x30A1, 0x30FA}, + {0x30FC, 0x30FF}, {0x3105, 0x312F}, {0x3131, 0x318E}, + {0x31A0, 0x31BF}, {0x31F0, 0x31FF}, {0x3400, 0x4DBF}, + {0x4E00, 0xA48C}, {0xA4D0, 0xA4FD}, {0xA500, 0xA60C}, + {0xA610, 0xA61F}, {0xA62A, 0xA62B}, {0xA640, 0xA66E}, + {0xA67F, 0xA69D}, {0xA6A0, 0xA6EF}, {0xA717, 0xA71F}, + {0xA722, 0xA788}, {0xA78B, 0xA7CA}, {0xA7D0, 0xA7D1}, + {0xA7D3, 0xA7D3}, {0xA7D5, 0xA7D9}, {0xA7F2, 0xA801}, + {0xA803, 0xA805}, {0xA807, 0xA80A}, {0xA80C, 0xA822}, + {0xA840, 0xA873}, {0xA882, 0xA8B3}, {0xA8F2, 0xA8F7}, + {0xA8FB, 0xA8FB}, {0xA8FD, 0xA8FE}, {0xA90A, 0xA925}, + {0xA930, 0xA946}, {0xA960, 0xA97C}, {0xA984, 0xA9B2}, + {0xA9CF, 0xA9CF}, {0xA9E0, 0xA9E4}, {0xA9E6, 0xA9EF}, + {0xA9FA, 0xA9FE}, {0xAA00, 0xAA28}, {0xAA40, 0xAA42}, + {0xAA44, 0xAA4B}, {0xAA60, 0xAA76}, {0xAA7A, 0xAA7A}, + {0xAA7E, 0xAAAF}, {0xAAB1, 0xAAB1}, {0xAAB5, 0xAAB6}, + {0xAAB9, 0xAABD}, {0xAAC0, 0xAAC0}, {0xAAC2, 0xAAC2}, + {0xAADB, 0xAADD}, {0xAAE0, 0xAAEA}, {0xAAF2, 0xAAF4}, + {0xAB01, 0xAB06}, {0xAB09, 0xAB0E}, {0xAB11, 0xAB16}, + {0xAB20, 0xAB26}, {0xAB28, 0xAB2E}, {0xAB30, 0xAB5A}, + {0xAB5C, 0xAB69}, {0xAB70, 0xABE2}, {0xAC00, 0xD7A3}, + {0xD7B0, 0xD7C6}, {0xD7CB, 0xD7FB}, {0xF900, 0xFA6D}, + {0xFA70, 0xFAD9}, {0xFB00, 0xFB06}, {0xFB13, 0xFB17}, + {0xFB1D, 0xFB1D}, {0xFB1F, 0xFB28}, {0xFB2A, 0xFB36}, + {0xFB38, 0xFB3C}, {0xFB3E, 0xFB3E}, {0xFB40, 0xFB41}, + {0xFB43, 0xFB44}, {0xFB46, 0xFBB1}, {0xFBD3, 0xFD3D}, + {0xFD50, 0xFD8F}, {0xFD92, 0xFDC7}, {0xFDF0, 0xFDFB}, + {0xFE70, 0xFE74}, {0xFE76, 0xFEFC}, {0xFF21, 0xFF3A}, + {0xFF41, 0xFF5A}, {0xFF66, 0xFFBE}, {0xFFC2, 0xFFC7}, + {0xFFCA, 0xFFCF}, {0xFFD2, 0xFFD7}, {0xFFDA, 0xFFDC}, + {0x10000, 0x1000B}, {0x1000D, 0x10026}, {0x10028, 0x1003A}, + {0x1003C, 0x1003D}, {0x1003F, 0x1004D}, {0x10050, 0x1005D}, + {0x10080, 0x100FA}, {0x10140, 0x10174}, {0x10280, 0x1029C}, + {0x102A0, 0x102D0}, {0x10300, 0x1031F}, {0x1032D, 0x1034A}, + {0x10350, 0x10375}, {0x10380, 0x1039D}, {0x103A0, 0x103C3}, + {0x103C8, 0x103CF}, {0x103D1, 0x103D5}, {0x10400, 0x1049D}, + {0x104B0, 0x104D3}, {0x104D8, 0x104FB}, {0x10500, 0x10527}, + {0x10530, 0x10563}, {0x10570, 0x1057A}, {0x1057C, 0x1058A}, + {0x1058C, 0x10592}, {0x10594, 0x10595}, {0x10597, 0x105A1}, + {0x105A3, 0x105B1}, {0x105B3, 0x105B9}, {0x105BB, 0x105BC}, + {0x10600, 0x10736}, {0x10740, 0x10755}, {0x10760, 0x10767}, + {0x10780, 0x10785}, {0x10787, 0x107B0}, {0x107B2, 0x107BA}, + {0x10800, 0x10805}, {0x10808, 0x10808}, {0x1080A, 0x10835}, + {0x10837, 0x10838}, {0x1083C, 0x1083C}, {0x1083F, 0x10855}, + {0x10860, 0x10876}, {0x10880, 0x1089E}, {0x108E0, 0x108F2}, + {0x108F4, 0x108F5}, {0x10900, 0x10915}, {0x10920, 0x10939}, + {0x10980, 0x109B7}, {0x109BE, 0x109BF}, {0x10A00, 0x10A00}, + {0x10A10, 0x10A13}, {0x10A15, 0x10A17}, {0x10A19, 0x10A35}, + {0x10A60, 0x10A7C}, {0x10A80, 0x10A9C}, {0x10AC0, 0x10AC7}, + {0x10AC9, 0x10AE4}, {0x10B00, 0x10B35}, {0x10B40, 0x10B55}, + {0x10B60, 0x10B72}, {0x10B80, 0x10B91}, {0x10C00, 0x10C48}, + {0x10C80, 0x10CB2}, {0x10CC0, 0x10CF2}, {0x10D00, 0x10D23}, + {0x10E80, 0x10EA9}, {0x10EB0, 0x10EB1}, {0x10F00, 0x10F1C}, + {0x10F27, 0x10F27}, {0x10F30, 0x10F45}, {0x10F70, 0x10F81}, + {0x10FB0, 0x10FC4}, {0x10FE0, 0x10FF6}, {0x11003, 0x11037}, + {0x11071, 0x11072}, {0x11075, 0x11075}, {0x11083, 0x110AF}, + {0x110D0, 0x110E8}, {0x11103, 0x11126}, {0x11144, 0x11144}, + {0x11147, 0x11147}, {0x11150, 0x11172}, {0x11176, 0x11176}, + {0x11183, 0x111B2}, {0x111C1, 0x111C4}, {0x111DA, 0x111DA}, + {0x111DC, 0x111DC}, {0x11200, 0x11211}, {0x11213, 0x1122B}, + {0x1123F, 0x11240}, {0x11280, 0x11286}, {0x11288, 0x11288}, + {0x1128A, 0x1128D}, {0x1128F, 0x1129D}, {0x1129F, 0x112A8}, + {0x112B0, 0x112DE}, {0x11305, 0x1130C}, {0x1130F, 0x11310}, + {0x11313, 0x11328}, {0x1132A, 0x11330}, {0x11332, 0x11333}, + {0x11335, 0x11339}, {0x1133D, 0x1133D}, {0x11350, 0x11350}, + {0x1135D, 0x11361}, {0x11400, 0x11434}, {0x11447, 0x1144A}, + {0x1145F, 0x11461}, {0x11480, 0x114AF}, {0x114C4, 0x114C5}, + {0x114C7, 0x114C7}, {0x11580, 0x115AE}, {0x115D8, 0x115DB}, + {0x11600, 0x1162F}, {0x11644, 0x11644}, {0x11680, 0x116AA}, + {0x116B8, 0x116B8}, {0x11700, 0x1171A}, {0x11740, 0x11746}, + {0x11800, 0x1182B}, {0x118A0, 0x118DF}, {0x118FF, 0x11906}, + {0x11909, 0x11909}, {0x1190C, 0x11913}, {0x11915, 0x11916}, + {0x11918, 0x1192F}, {0x1193F, 0x1193F}, {0x11941, 0x11941}, + {0x119A0, 0x119A7}, {0x119AA, 0x119D0}, {0x119E1, 0x119E1}, + {0x119E3, 0x119E3}, {0x11A00, 0x11A00}, {0x11A0B, 0x11A32}, + {0x11A3A, 0x11A3A}, {0x11A50, 0x11A50}, {0x11A5C, 0x11A89}, + {0x11A9D, 0x11A9D}, {0x11AB0, 0x11AF8}, {0x11C00, 0x11C08}, + {0x11C0A, 0x11C2E}, {0x11C40, 0x11C40}, {0x11C72, 0x11C8F}, + {0x11D00, 0x11D06}, {0x11D08, 0x11D09}, {0x11D0B, 0x11D30}, + {0x11D46, 0x11D46}, {0x11D60, 0x11D65}, {0x11D67, 0x11D68}, + {0x11D6A, 0x11D89}, {0x11D98, 0x11D98}, {0x11EE0, 0x11EF2}, + {0x11F02, 0x11F02}, {0x11F04, 0x11F10}, {0x11F12, 0x11F33}, + {0x11FB0, 0x11FB0}, {0x12000, 0x12399}, {0x12400, 0x1246E}, + {0x12480, 0x12543}, {0x12F90, 0x12FF0}, {0x13000, 0x1342F}, + {0x13441, 0x13446}, {0x14400, 0x14646}, {0x16800, 0x16A38}, + {0x16A40, 0x16A5E}, {0x16A70, 0x16ABE}, {0x16AD0, 0x16AED}, + {0x16B00, 0x16B2F}, {0x16B40, 0x16B43}, {0x16B63, 0x16B77}, + {0x16B7D, 0x16B8F}, {0x16E40, 0x16E7F}, {0x16F00, 0x16F4A}, + {0x16F50, 0x16F50}, {0x16F93, 0x16F9F}, {0x16FE0, 0x16FE1}, + {0x16FE3, 0x16FE3}, {0x17000, 0x187F7}, {0x18800, 0x18CD5}, + {0x18D00, 0x18D08}, {0x1AFF0, 0x1AFF3}, {0x1AFF5, 0x1AFFB}, + {0x1AFFD, 0x1AFFE}, {0x1B000, 0x1B122}, {0x1B132, 0x1B132}, + {0x1B150, 0x1B152}, {0x1B155, 0x1B155}, {0x1B164, 0x1B167}, + {0x1B170, 0x1B2FB}, {0x1BC00, 0x1BC6A}, {0x1BC70, 0x1BC7C}, + {0x1BC80, 0x1BC88}, {0x1BC90, 0x1BC99}, {0x1D400, 0x1D454}, + {0x1D456, 0x1D49C}, {0x1D49E, 0x1D49F}, {0x1D4A2, 0x1D4A2}, + {0x1D4A5, 0x1D4A6}, {0x1D4A9, 0x1D4AC}, {0x1D4AE, 0x1D4B9}, + {0x1D4BB, 0x1D4BB}, {0x1D4BD, 0x1D4C3}, {0x1D4C5, 0x1D505}, + {0x1D507, 0x1D50A}, {0x1D50D, 0x1D514}, {0x1D516, 0x1D51C}, + {0x1D51E, 0x1D539}, {0x1D53B, 0x1D53E}, {0x1D540, 0x1D544}, + {0x1D546, 0x1D546}, {0x1D54A, 0x1D550}, {0x1D552, 0x1D6A5}, + {0x1D6A8, 0x1D6C0}, {0x1D6C2, 0x1D6DA}, {0x1D6DC, 0x1D6FA}, + {0x1D6FC, 0x1D714}, {0x1D716, 0x1D734}, {0x1D736, 0x1D74E}, + {0x1D750, 0x1D76E}, {0x1D770, 0x1D788}, {0x1D78A, 0x1D7A8}, + {0x1D7AA, 0x1D7C2}, {0x1D7C4, 0x1D7CB}, {0x1DF00, 0x1DF1E}, + {0x1DF25, 0x1DF2A}, {0x1E030, 0x1E06D}, {0x1E100, 0x1E12C}, + {0x1E137, 0x1E13D}, {0x1E14E, 0x1E14E}, {0x1E290, 0x1E2AD}, + {0x1E2C0, 0x1E2EB}, {0x1E4D0, 0x1E4EB}, {0x1E7E0, 0x1E7E6}, + {0x1E7E8, 0x1E7EB}, {0x1E7ED, 0x1E7EE}, {0x1E7F0, 0x1E7FE}, + {0x1E800, 0x1E8C4}, {0x1E900, 0x1E943}, {0x1E94B, 0x1E94B}, + {0x1EE00, 0x1EE03}, {0x1EE05, 0x1EE1F}, {0x1EE21, 0x1EE22}, + {0x1EE24, 0x1EE24}, {0x1EE27, 0x1EE27}, {0x1EE29, 0x1EE32}, + {0x1EE34, 0x1EE37}, {0x1EE39, 0x1EE39}, {0x1EE3B, 0x1EE3B}, + {0x1EE42, 0x1EE42}, {0x1EE47, 0x1EE47}, {0x1EE49, 0x1EE49}, + {0x1EE4B, 0x1EE4B}, {0x1EE4D, 0x1EE4F}, {0x1EE51, 0x1EE52}, + {0x1EE54, 0x1EE54}, {0x1EE57, 0x1EE57}, {0x1EE59, 0x1EE59}, + {0x1EE5B, 0x1EE5B}, {0x1EE5D, 0x1EE5D}, {0x1EE5F, 0x1EE5F}, + {0x1EE61, 0x1EE62}, {0x1EE64, 0x1EE64}, {0x1EE67, 0x1EE6A}, + {0x1EE6C, 0x1EE72}, {0x1EE74, 0x1EE77}, {0x1EE79, 0x1EE7C}, + {0x1EE7E, 0x1EE7E}, {0x1EE80, 0x1EE89}, {0x1EE8B, 0x1EE9B}, + {0x1EEA1, 0x1EEA3}, {0x1EEA5, 0x1EEA9}, {0x1EEAB, 0x1EEBB}, + {0x20000, 0x2A6DF}, {0x2A700, 0x2B739}, {0x2B740, 0x2B81D}, + {0x2B820, 0x2CEA1}, {0x2CEB0, 0x2EBE0}, {0x2EBF0, 0x2EE5D}, + {0x2F800, 0x2FA1D}, {0x30000, 0x3134A}, {0x31350, 0x323AF}, + // Binary: ID_Continue + {0x0030, 0x0039}, {0x0041, 0x005A}, {0x005F, 0x005F}, + {0x0061, 0x007A}, {0x00AA, 0x00AA}, {0x00B5, 0x00B5}, + {0x00B7, 0x00B7}, {0x00BA, 0x00BA}, {0x00C0, 0x00D6}, + {0x00D8, 0x00F6}, {0x00F8, 0x02C1}, {0x02C6, 0x02D1}, + {0x02E0, 0x02E4}, {0x02EC, 0x02EC}, {0x02EE, 0x02EE}, + {0x0300, 0x0374}, {0x0376, 0x0377}, {0x037A, 0x037D}, + {0x037F, 0x037F}, {0x0386, 0x038A}, {0x038C, 0x038C}, + {0x038E, 0x03A1}, {0x03A3, 0x03F5}, {0x03F7, 0x0481}, + {0x0483, 0x0487}, {0x048A, 0x052F}, {0x0531, 0x0556}, + {0x0559, 0x0559}, {0x0560, 0x0588}, {0x0591, 0x05BD}, + {0x05BF, 0x05BF}, {0x05C1, 0x05C2}, {0x05C4, 0x05C5}, + {0x05C7, 0x05C7}, {0x05D0, 0x05EA}, {0x05EF, 0x05F2}, + {0x0610, 0x061A}, {0x0620, 0x0669}, {0x066E, 0x06D3}, + {0x06D5, 0x06DC}, {0x06DF, 0x06E8}, {0x06EA, 0x06FC}, + {0x06FF, 0x06FF}, {0x0710, 0x074A}, {0x074D, 0x07B1}, + {0x07C0, 0x07F5}, {0x07FA, 0x07FA}, {0x07FD, 0x07FD}, + {0x0800, 0x082D}, {0x0840, 0x085B}, {0x0860, 0x086A}, + {0x0870, 0x0887}, {0x0889, 0x088E}, {0x0898, 0x08E1}, + {0x08E3, 0x0963}, {0x0966, 0x096F}, {0x0971, 0x0983}, + {0x0985, 0x098C}, {0x098F, 0x0990}, {0x0993, 0x09A8}, + {0x09AA, 0x09B0}, {0x09B2, 0x09B2}, {0x09B6, 0x09B9}, + {0x09BC, 0x09C4}, {0x09C7, 0x09C8}, {0x09CB, 0x09CE}, + {0x09D7, 0x09D7}, {0x09DC, 0x09DD}, {0x09DF, 0x09E3}, + {0x09E6, 0x09F1}, {0x09FC, 0x09FC}, {0x09FE, 0x09FE}, + {0x0A01, 0x0A03}, {0x0A05, 0x0A0A}, {0x0A0F, 0x0A10}, + {0x0A13, 0x0A28}, {0x0A2A, 0x0A30}, {0x0A32, 0x0A33}, + {0x0A35, 0x0A36}, {0x0A38, 0x0A39}, {0x0A3C, 0x0A3C}, + {0x0A3E, 0x0A42}, {0x0A47, 0x0A48}, {0x0A4B, 0x0A4D}, + {0x0A51, 0x0A51}, {0x0A59, 0x0A5C}, {0x0A5E, 0x0A5E}, + {0x0A66, 0x0A75}, {0x0A81, 0x0A83}, {0x0A85, 0x0A8D}, + {0x0A8F, 0x0A91}, {0x0A93, 0x0AA8}, {0x0AAA, 0x0AB0}, + {0x0AB2, 0x0AB3}, {0x0AB5, 0x0AB9}, {0x0ABC, 0x0AC5}, + {0x0AC7, 0x0AC9}, {0x0ACB, 0x0ACD}, {0x0AD0, 0x0AD0}, + {0x0AE0, 0x0AE3}, {0x0AE6, 0x0AEF}, {0x0AF9, 0x0AFF}, + {0x0B01, 0x0B03}, {0x0B05, 0x0B0C}, {0x0B0F, 0x0B10}, + {0x0B13, 0x0B28}, {0x0B2A, 0x0B30}, {0x0B32, 0x0B33}, + {0x0B35, 0x0B39}, {0x0B3C, 0x0B44}, {0x0B47, 0x0B48}, + {0x0B4B, 0x0B4D}, {0x0B55, 0x0B57}, {0x0B5C, 0x0B5D}, + {0x0B5F, 0x0B63}, {0x0B66, 0x0B6F}, {0x0B71, 0x0B71}, + {0x0B82, 0x0B83}, {0x0B85, 0x0B8A}, {0x0B8E, 0x0B90}, + {0x0B92, 0x0B95}, {0x0B99, 0x0B9A}, {0x0B9C, 0x0B9C}, + {0x0B9E, 0x0B9F}, {0x0BA3, 0x0BA4}, {0x0BA8, 0x0BAA}, + {0x0BAE, 0x0BB9}, {0x0BBE, 0x0BC2}, {0x0BC6, 0x0BC8}, + {0x0BCA, 0x0BCD}, {0x0BD0, 0x0BD0}, {0x0BD7, 0x0BD7}, + {0x0BE6, 0x0BEF}, {0x0C00, 0x0C0C}, {0x0C0E, 0x0C10}, + {0x0C12, 0x0C28}, {0x0C2A, 0x0C39}, {0x0C3C, 0x0C44}, + {0x0C46, 0x0C48}, {0x0C4A, 0x0C4D}, {0x0C55, 0x0C56}, + {0x0C58, 0x0C5A}, {0x0C5D, 0x0C5D}, {0x0C60, 0x0C63}, + {0x0C66, 0x0C6F}, {0x0C80, 0x0C83}, {0x0C85, 0x0C8C}, + {0x0C8E, 0x0C90}, {0x0C92, 0x0CA8}, {0x0CAA, 0x0CB3}, + {0x0CB5, 0x0CB9}, {0x0CBC, 0x0CC4}, {0x0CC6, 0x0CC8}, + {0x0CCA, 0x0CCD}, {0x0CD5, 0x0CD6}, {0x0CDD, 0x0CDE}, + {0x0CE0, 0x0CE3}, {0x0CE6, 0x0CEF}, {0x0CF1, 0x0CF3}, + {0x0D00, 0x0D0C}, {0x0D0E, 0x0D10}, {0x0D12, 0x0D44}, + {0x0D46, 0x0D48}, {0x0D4A, 0x0D4E}, {0x0D54, 0x0D57}, + {0x0D5F, 0x0D63}, {0x0D66, 0x0D6F}, {0x0D7A, 0x0D7F}, + {0x0D81, 0x0D83}, {0x0D85, 0x0D96}, {0x0D9A, 0x0DB1}, + {0x0DB3, 0x0DBB}, {0x0DBD, 0x0DBD}, {0x0DC0, 0x0DC6}, + {0x0DCA, 0x0DCA}, {0x0DCF, 0x0DD4}, {0x0DD6, 0x0DD6}, + {0x0DD8, 0x0DDF}, {0x0DE6, 0x0DEF}, {0x0DF2, 0x0DF3}, + {0x0E01, 0x0E3A}, {0x0E40, 0x0E4E}, {0x0E50, 0x0E59}, + {0x0E81, 0x0E82}, {0x0E84, 0x0E84}, {0x0E86, 0x0E8A}, + {0x0E8C, 0x0EA3}, {0x0EA5, 0x0EA5}, {0x0EA7, 0x0EBD}, + {0x0EC0, 0x0EC4}, {0x0EC6, 0x0EC6}, {0x0EC8, 0x0ECE}, + {0x0ED0, 0x0ED9}, {0x0EDC, 0x0EDF}, {0x0F00, 0x0F00}, + {0x0F18, 0x0F19}, {0x0F20, 0x0F29}, {0x0F35, 0x0F35}, + {0x0F37, 0x0F37}, {0x0F39, 0x0F39}, {0x0F3E, 0x0F47}, + {0x0F49, 0x0F6C}, {0x0F71, 0x0F84}, {0x0F86, 0x0F97}, + {0x0F99, 0x0FBC}, {0x0FC6, 0x0FC6}, {0x1000, 0x1049}, + {0x1050, 0x109D}, {0x10A0, 0x10C5}, {0x10C7, 0x10C7}, + {0x10CD, 0x10CD}, {0x10D0, 0x10FA}, {0x10FC, 0x1248}, + {0x124A, 0x124D}, {0x1250, 0x1256}, {0x1258, 0x1258}, + {0x125A, 0x125D}, {0x1260, 0x1288}, {0x128A, 0x128D}, + {0x1290, 0x12B0}, {0x12B2, 0x12B5}, {0x12B8, 0x12BE}, + {0x12C0, 0x12C0}, {0x12C2, 0x12C5}, {0x12C8, 0x12D6}, + {0x12D8, 0x1310}, {0x1312, 0x1315}, {0x1318, 0x135A}, + {0x135D, 0x135F}, {0x1369, 0x1371}, {0x1380, 0x138F}, + {0x13A0, 0x13F5}, {0x13F8, 0x13FD}, {0x1401, 0x166C}, + {0x166F, 0x167F}, {0x1681, 0x169A}, {0x16A0, 0x16EA}, + {0x16EE, 0x16F8}, {0x1700, 0x1715}, {0x171F, 0x1734}, + {0x1740, 0x1753}, {0x1760, 0x176C}, {0x176E, 0x1770}, + {0x1772, 0x1773}, {0x1780, 0x17D3}, {0x17D7, 0x17D7}, + {0x17DC, 0x17DD}, {0x17E0, 0x17E9}, {0x180B, 0x180D}, + {0x180F, 0x1819}, {0x1820, 0x1878}, {0x1880, 0x18AA}, + {0x18B0, 0x18F5}, {0x1900, 0x191E}, {0x1920, 0x192B}, + {0x1930, 0x193B}, {0x1946, 0x196D}, {0x1970, 0x1974}, + {0x1980, 0x19AB}, {0x19B0, 0x19C9}, {0x19D0, 0x19DA}, + {0x1A00, 0x1A1B}, {0x1A20, 0x1A5E}, {0x1A60, 0x1A7C}, + {0x1A7F, 0x1A89}, {0x1A90, 0x1A99}, {0x1AA7, 0x1AA7}, + {0x1AB0, 0x1ABD}, {0x1ABF, 0x1ACE}, {0x1B00, 0x1B4C}, + {0x1B50, 0x1B59}, {0x1B6B, 0x1B73}, {0x1B80, 0x1BF3}, + {0x1C00, 0x1C37}, {0x1C40, 0x1C49}, {0x1C4D, 0x1C7D}, + {0x1C80, 0x1C88}, {0x1C90, 0x1CBA}, {0x1CBD, 0x1CBF}, + {0x1CD0, 0x1CD2}, {0x1CD4, 0x1CFA}, {0x1D00, 0x1F15}, + {0x1F18, 0x1F1D}, {0x1F20, 0x1F45}, {0x1F48, 0x1F4D}, + {0x1F50, 0x1F57}, {0x1F59, 0x1F59}, {0x1F5B, 0x1F5B}, + {0x1F5D, 0x1F5D}, {0x1F5F, 0x1F7D}, {0x1F80, 0x1FB4}, + {0x1FB6, 0x1FBC}, {0x1FBE, 0x1FBE}, {0x1FC2, 0x1FC4}, + {0x1FC6, 0x1FCC}, {0x1FD0, 0x1FD3}, {0x1FD6, 0x1FDB}, + {0x1FE0, 0x1FEC}, {0x1FF2, 0x1FF4}, {0x1FF6, 0x1FFC}, + {0x200C, 0x200D}, {0x203F, 0x2040}, {0x2054, 0x2054}, + {0x2071, 0x2071}, {0x207F, 0x207F}, {0x2090, 0x209C}, + {0x20D0, 0x20DC}, {0x20E1, 0x20E1}, {0x20E5, 0x20F0}, + {0x2102, 0x2102}, {0x2107, 0x2107}, {0x210A, 0x2113}, + {0x2115, 0x2115}, {0x2118, 0x211D}, {0x2124, 0x2124}, + {0x2126, 0x2126}, {0x2128, 0x2128}, {0x212A, 0x2139}, + {0x213C, 0x213F}, {0x2145, 0x2149}, {0x214E, 0x214E}, + {0x2160, 0x2188}, {0x2C00, 0x2CE4}, {0x2CEB, 0x2CF3}, + {0x2D00, 0x2D25}, {0x2D27, 0x2D27}, {0x2D2D, 0x2D2D}, + {0x2D30, 0x2D67}, {0x2D6F, 0x2D6F}, {0x2D7F, 0x2D96}, + {0x2DA0, 0x2DA6}, {0x2DA8, 0x2DAE}, {0x2DB0, 0x2DB6}, + {0x2DB8, 0x2DBE}, {0x2DC0, 0x2DC6}, {0x2DC8, 0x2DCE}, + {0x2DD0, 0x2DD6}, {0x2DD8, 0x2DDE}, {0x2DE0, 0x2DFF}, + {0x3005, 0x3007}, {0x3021, 0x302F}, {0x3031, 0x3035}, + {0x3038, 0x303C}, {0x3041, 0x3096}, {0x3099, 0x309F}, + {0x30A1, 0x30FF}, {0x3105, 0x312F}, {0x3131, 0x318E}, + {0x31A0, 0x31BF}, {0x31F0, 0x31FF}, {0x3400, 0x4DBF}, + {0x4E00, 0xA48C}, {0xA4D0, 0xA4FD}, {0xA500, 0xA60C}, + {0xA610, 0xA62B}, {0xA640, 0xA66F}, {0xA674, 0xA67D}, + {0xA67F, 0xA6F1}, {0xA717, 0xA71F}, {0xA722, 0xA788}, + {0xA78B, 0xA7CA}, {0xA7D0, 0xA7D1}, {0xA7D3, 0xA7D3}, + {0xA7D5, 0xA7D9}, {0xA7F2, 0xA827}, {0xA82C, 0xA82C}, + {0xA840, 0xA873}, {0xA880, 0xA8C5}, {0xA8D0, 0xA8D9}, + {0xA8E0, 0xA8F7}, {0xA8FB, 0xA8FB}, {0xA8FD, 0xA92D}, + {0xA930, 0xA953}, {0xA960, 0xA97C}, {0xA980, 0xA9C0}, + {0xA9CF, 0xA9D9}, {0xA9E0, 0xA9FE}, {0xAA00, 0xAA36}, + {0xAA40, 0xAA4D}, {0xAA50, 0xAA59}, {0xAA60, 0xAA76}, + {0xAA7A, 0xAAC2}, {0xAADB, 0xAADD}, {0xAAE0, 0xAAEF}, + {0xAAF2, 0xAAF6}, {0xAB01, 0xAB06}, {0xAB09, 0xAB0E}, + {0xAB11, 0xAB16}, {0xAB20, 0xAB26}, {0xAB28, 0xAB2E}, + {0xAB30, 0xAB5A}, {0xAB5C, 0xAB69}, {0xAB70, 0xABEA}, + {0xABEC, 0xABED}, {0xABF0, 0xABF9}, {0xAC00, 0xD7A3}, + {0xD7B0, 0xD7C6}, {0xD7CB, 0xD7FB}, {0xF900, 0xFA6D}, + {0xFA70, 0xFAD9}, {0xFB00, 0xFB06}, {0xFB13, 0xFB17}, + {0xFB1D, 0xFB28}, {0xFB2A, 0xFB36}, {0xFB38, 0xFB3C}, + {0xFB3E, 0xFB3E}, {0xFB40, 0xFB41}, {0xFB43, 0xFB44}, + {0xFB46, 0xFBB1}, {0xFBD3, 0xFD3D}, {0xFD50, 0xFD8F}, + {0xFD92, 0xFDC7}, {0xFDF0, 0xFDFB}, {0xFE00, 0xFE0F}, + {0xFE20, 0xFE2F}, {0xFE33, 0xFE34}, {0xFE4D, 0xFE4F}, + {0xFE70, 0xFE74}, {0xFE76, 0xFEFC}, {0xFF10, 0xFF19}, + {0xFF21, 0xFF3A}, {0xFF3F, 0xFF3F}, {0xFF41, 0xFF5A}, + {0xFF65, 0xFFBE}, {0xFFC2, 0xFFC7}, {0xFFCA, 0xFFCF}, + {0xFFD2, 0xFFD7}, {0xFFDA, 0xFFDC}, {0x10000, 0x1000B}, + {0x1000D, 0x10026}, {0x10028, 0x1003A}, {0x1003C, 0x1003D}, + {0x1003F, 0x1004D}, {0x10050, 0x1005D}, {0x10080, 0x100FA}, + {0x10140, 0x10174}, {0x101FD, 0x101FD}, {0x10280, 0x1029C}, + {0x102A0, 0x102D0}, {0x102E0, 0x102E0}, {0x10300, 0x1031F}, + {0x1032D, 0x1034A}, {0x10350, 0x1037A}, {0x10380, 0x1039D}, + {0x103A0, 0x103C3}, {0x103C8, 0x103CF}, {0x103D1, 0x103D5}, + {0x10400, 0x1049D}, {0x104A0, 0x104A9}, {0x104B0, 0x104D3}, + {0x104D8, 0x104FB}, {0x10500, 0x10527}, {0x10530, 0x10563}, + {0x10570, 0x1057A}, {0x1057C, 0x1058A}, {0x1058C, 0x10592}, + {0x10594, 0x10595}, {0x10597, 0x105A1}, {0x105A3, 0x105B1}, + {0x105B3, 0x105B9}, {0x105BB, 0x105BC}, {0x10600, 0x10736}, + {0x10740, 0x10755}, {0x10760, 0x10767}, {0x10780, 0x10785}, + {0x10787, 0x107B0}, {0x107B2, 0x107BA}, {0x10800, 0x10805}, + {0x10808, 0x10808}, {0x1080A, 0x10835}, {0x10837, 0x10838}, + {0x1083C, 0x1083C}, {0x1083F, 0x10855}, {0x10860, 0x10876}, + {0x10880, 0x1089E}, {0x108E0, 0x108F2}, {0x108F4, 0x108F5}, + {0x10900, 0x10915}, {0x10920, 0x10939}, {0x10980, 0x109B7}, + {0x109BE, 0x109BF}, {0x10A00, 0x10A03}, {0x10A05, 0x10A06}, + {0x10A0C, 0x10A13}, {0x10A15, 0x10A17}, {0x10A19, 0x10A35}, + {0x10A38, 0x10A3A}, {0x10A3F, 0x10A3F}, {0x10A60, 0x10A7C}, + {0x10A80, 0x10A9C}, {0x10AC0, 0x10AC7}, {0x10AC9, 0x10AE6}, + {0x10B00, 0x10B35}, {0x10B40, 0x10B55}, {0x10B60, 0x10B72}, + {0x10B80, 0x10B91}, {0x10C00, 0x10C48}, {0x10C80, 0x10CB2}, + {0x10CC0, 0x10CF2}, {0x10D00, 0x10D27}, {0x10D30, 0x10D39}, + {0x10E80, 0x10EA9}, {0x10EAB, 0x10EAC}, {0x10EB0, 0x10EB1}, + {0x10EFD, 0x10F1C}, {0x10F27, 0x10F27}, {0x10F30, 0x10F50}, + {0x10F70, 0x10F85}, {0x10FB0, 0x10FC4}, {0x10FE0, 0x10FF6}, + {0x11000, 0x11046}, {0x11066, 0x11075}, {0x1107F, 0x110BA}, + {0x110C2, 0x110C2}, {0x110D0, 0x110E8}, {0x110F0, 0x110F9}, + {0x11100, 0x11134}, {0x11136, 0x1113F}, {0x11144, 0x11147}, + {0x11150, 0x11173}, {0x11176, 0x11176}, {0x11180, 0x111C4}, + {0x111C9, 0x111CC}, {0x111CE, 0x111DA}, {0x111DC, 0x111DC}, + {0x11200, 0x11211}, {0x11213, 0x11237}, {0x1123E, 0x11241}, + {0x11280, 0x11286}, {0x11288, 0x11288}, {0x1128A, 0x1128D}, + {0x1128F, 0x1129D}, {0x1129F, 0x112A8}, {0x112B0, 0x112EA}, + {0x112F0, 0x112F9}, {0x11300, 0x11303}, {0x11305, 0x1130C}, + {0x1130F, 0x11310}, {0x11313, 0x11328}, {0x1132A, 0x11330}, + {0x11332, 0x11333}, {0x11335, 0x11339}, {0x1133B, 0x11344}, + {0x11347, 0x11348}, {0x1134B, 0x1134D}, {0x11350, 0x11350}, + {0x11357, 0x11357}, {0x1135D, 0x11363}, {0x11366, 0x1136C}, + {0x11370, 0x11374}, {0x11400, 0x1144A}, {0x11450, 0x11459}, + {0x1145E, 0x11461}, {0x11480, 0x114C5}, {0x114C7, 0x114C7}, + {0x114D0, 0x114D9}, {0x11580, 0x115B5}, {0x115B8, 0x115C0}, + {0x115D8, 0x115DD}, {0x11600, 0x11640}, {0x11644, 0x11644}, + {0x11650, 0x11659}, {0x11680, 0x116B8}, {0x116C0, 0x116C9}, + {0x11700, 0x1171A}, {0x1171D, 0x1172B}, {0x11730, 0x11739}, + {0x11740, 0x11746}, {0x11800, 0x1183A}, {0x118A0, 0x118E9}, + {0x118FF, 0x11906}, {0x11909, 0x11909}, {0x1190C, 0x11913}, + {0x11915, 0x11916}, {0x11918, 0x11935}, {0x11937, 0x11938}, + {0x1193B, 0x11943}, {0x11950, 0x11959}, {0x119A0, 0x119A7}, + {0x119AA, 0x119D7}, {0x119DA, 0x119E1}, {0x119E3, 0x119E4}, + {0x11A00, 0x11A3E}, {0x11A47, 0x11A47}, {0x11A50, 0x11A99}, + {0x11A9D, 0x11A9D}, {0x11AB0, 0x11AF8}, {0x11C00, 0x11C08}, + {0x11C0A, 0x11C36}, {0x11C38, 0x11C40}, {0x11C50, 0x11C59}, + {0x11C72, 0x11C8F}, {0x11C92, 0x11CA7}, {0x11CA9, 0x11CB6}, + {0x11D00, 0x11D06}, {0x11D08, 0x11D09}, {0x11D0B, 0x11D36}, + {0x11D3A, 0x11D3A}, {0x11D3C, 0x11D3D}, {0x11D3F, 0x11D47}, + {0x11D50, 0x11D59}, {0x11D60, 0x11D65}, {0x11D67, 0x11D68}, + {0x11D6A, 0x11D8E}, {0x11D90, 0x11D91}, {0x11D93, 0x11D98}, + {0x11DA0, 0x11DA9}, {0x11EE0, 0x11EF6}, {0x11F00, 0x11F10}, + {0x11F12, 0x11F3A}, {0x11F3E, 0x11F42}, {0x11F50, 0x11F59}, + {0x11FB0, 0x11FB0}, {0x12000, 0x12399}, {0x12400, 0x1246E}, + {0x12480, 0x12543}, {0x12F90, 0x12FF0}, {0x13000, 0x1342F}, + {0x13440, 0x13455}, {0x14400, 0x14646}, {0x16800, 0x16A38}, + {0x16A40, 0x16A5E}, {0x16A60, 0x16A69}, {0x16A70, 0x16ABE}, + {0x16AC0, 0x16AC9}, {0x16AD0, 0x16AED}, {0x16AF0, 0x16AF4}, + {0x16B00, 0x16B36}, {0x16B40, 0x16B43}, {0x16B50, 0x16B59}, + {0x16B63, 0x16B77}, {0x16B7D, 0x16B8F}, {0x16E40, 0x16E7F}, + {0x16F00, 0x16F4A}, {0x16F4F, 0x16F87}, {0x16F8F, 0x16F9F}, + {0x16FE0, 0x16FE1}, {0x16FE3, 0x16FE4}, {0x16FF0, 0x16FF1}, + {0x17000, 0x187F7}, {0x18800, 0x18CD5}, {0x18D00, 0x18D08}, + {0x1AFF0, 0x1AFF3}, {0x1AFF5, 0x1AFFB}, {0x1AFFD, 0x1AFFE}, + {0x1B000, 0x1B122}, {0x1B132, 0x1B132}, {0x1B150, 0x1B152}, + {0x1B155, 0x1B155}, {0x1B164, 0x1B167}, {0x1B170, 0x1B2FB}, + {0x1BC00, 0x1BC6A}, {0x1BC70, 0x1BC7C}, {0x1BC80, 0x1BC88}, + {0x1BC90, 0x1BC99}, {0x1BC9D, 0x1BC9E}, {0x1CF00, 0x1CF2D}, + {0x1CF30, 0x1CF46}, {0x1D165, 0x1D169}, {0x1D16D, 0x1D172}, + {0x1D17B, 0x1D182}, {0x1D185, 0x1D18B}, {0x1D1AA, 0x1D1AD}, + {0x1D242, 0x1D244}, {0x1D400, 0x1D454}, {0x1D456, 0x1D49C}, + {0x1D49E, 0x1D49F}, {0x1D4A2, 0x1D4A2}, {0x1D4A5, 0x1D4A6}, + {0x1D4A9, 0x1D4AC}, {0x1D4AE, 0x1D4B9}, {0x1D4BB, 0x1D4BB}, + {0x1D4BD, 0x1D4C3}, {0x1D4C5, 0x1D505}, {0x1D507, 0x1D50A}, + {0x1D50D, 0x1D514}, {0x1D516, 0x1D51C}, {0x1D51E, 0x1D539}, + {0x1D53B, 0x1D53E}, {0x1D540, 0x1D544}, {0x1D546, 0x1D546}, + {0x1D54A, 0x1D550}, {0x1D552, 0x1D6A5}, {0x1D6A8, 0x1D6C0}, + {0x1D6C2, 0x1D6DA}, {0x1D6DC, 0x1D6FA}, {0x1D6FC, 0x1D714}, + {0x1D716, 0x1D734}, {0x1D736, 0x1D74E}, {0x1D750, 0x1D76E}, + {0x1D770, 0x1D788}, {0x1D78A, 0x1D7A8}, {0x1D7AA, 0x1D7C2}, + {0x1D7C4, 0x1D7CB}, {0x1D7CE, 0x1D7FF}, {0x1DA00, 0x1DA36}, + {0x1DA3B, 0x1DA6C}, {0x1DA75, 0x1DA75}, {0x1DA84, 0x1DA84}, + {0x1DA9B, 0x1DA9F}, {0x1DAA1, 0x1DAAF}, {0x1DF00, 0x1DF1E}, + {0x1DF25, 0x1DF2A}, {0x1E000, 0x1E006}, {0x1E008, 0x1E018}, + {0x1E01B, 0x1E021}, {0x1E023, 0x1E024}, {0x1E026, 0x1E02A}, + {0x1E030, 0x1E06D}, {0x1E08F, 0x1E08F}, {0x1E100, 0x1E12C}, + {0x1E130, 0x1E13D}, {0x1E140, 0x1E149}, {0x1E14E, 0x1E14E}, + {0x1E290, 0x1E2AE}, {0x1E2C0, 0x1E2F9}, {0x1E4D0, 0x1E4F9}, + {0x1E7E0, 0x1E7E6}, {0x1E7E8, 0x1E7EB}, {0x1E7ED, 0x1E7EE}, + {0x1E7F0, 0x1E7FE}, {0x1E800, 0x1E8C4}, {0x1E8D0, 0x1E8D6}, + {0x1E900, 0x1E94B}, {0x1E950, 0x1E959}, {0x1EE00, 0x1EE03}, + {0x1EE05, 0x1EE1F}, {0x1EE21, 0x1EE22}, {0x1EE24, 0x1EE24}, + {0x1EE27, 0x1EE27}, {0x1EE29, 0x1EE32}, {0x1EE34, 0x1EE37}, + {0x1EE39, 0x1EE39}, {0x1EE3B, 0x1EE3B}, {0x1EE42, 0x1EE42}, + {0x1EE47, 0x1EE47}, {0x1EE49, 0x1EE49}, {0x1EE4B, 0x1EE4B}, + {0x1EE4D, 0x1EE4F}, {0x1EE51, 0x1EE52}, {0x1EE54, 0x1EE54}, + {0x1EE57, 0x1EE57}, {0x1EE59, 0x1EE59}, {0x1EE5B, 0x1EE5B}, + {0x1EE5D, 0x1EE5D}, {0x1EE5F, 0x1EE5F}, {0x1EE61, 0x1EE62}, + {0x1EE64, 0x1EE64}, {0x1EE67, 0x1EE6A}, {0x1EE6C, 0x1EE72}, + {0x1EE74, 0x1EE77}, {0x1EE79, 0x1EE7C}, {0x1EE7E, 0x1EE7E}, + {0x1EE80, 0x1EE89}, {0x1EE8B, 0x1EE9B}, {0x1EEA1, 0x1EEA3}, + {0x1EEA5, 0x1EEA9}, {0x1EEAB, 0x1EEBB}, {0x1FBF0, 0x1FBF9}, + {0x20000, 0x2A6DF}, {0x2A700, 0x2B739}, {0x2B740, 0x2B81D}, + {0x2B820, 0x2CEA1}, {0x2CEB0, 0x2EBE0}, {0x2EBF0, 0x2EE5D}, + {0x2F800, 0x2FA1D}, {0x30000, 0x3134A}, {0x31350, 0x323AF}, + {0xE0100, 0xE01EF}, + // Binary: XID_Start + {0x0041, 0x005A}, {0x0061, 0x007A}, {0x00AA, 0x00AA}, + {0x00B5, 0x00B5}, {0x00BA, 0x00BA}, {0x00C0, 0x00D6}, + {0x00D8, 0x00F6}, {0x00F8, 0x02C1}, {0x02C6, 0x02D1}, + {0x02E0, 0x02E4}, {0x02EC, 0x02EC}, {0x02EE, 0x02EE}, + {0x0370, 0x0374}, {0x0376, 0x0377}, {0x037B, 0x037D}, + {0x037F, 0x037F}, {0x0386, 0x0386}, {0x0388, 0x038A}, + {0x038C, 0x038C}, {0x038E, 0x03A1}, {0x03A3, 0x03F5}, + {0x03F7, 0x0481}, {0x048A, 0x052F}, {0x0531, 0x0556}, + {0x0559, 0x0559}, {0x0560, 0x0588}, {0x05D0, 0x05EA}, + {0x05EF, 0x05F2}, {0x0620, 0x064A}, {0x066E, 0x066F}, + {0x0671, 0x06D3}, {0x06D5, 0x06D5}, {0x06E5, 0x06E6}, + {0x06EE, 0x06EF}, {0x06FA, 0x06FC}, {0x06FF, 0x06FF}, + {0x0710, 0x0710}, {0x0712, 0x072F}, {0x074D, 0x07A5}, + {0x07B1, 0x07B1}, {0x07CA, 0x07EA}, {0x07F4, 0x07F5}, + {0x07FA, 0x07FA}, {0x0800, 0x0815}, {0x081A, 0x081A}, + {0x0824, 0x0824}, {0x0828, 0x0828}, {0x0840, 0x0858}, + {0x0860, 0x086A}, {0x0870, 0x0887}, {0x0889, 0x088E}, + {0x08A0, 0x08C9}, {0x0904, 0x0939}, {0x093D, 0x093D}, + {0x0950, 0x0950}, {0x0958, 0x0961}, {0x0971, 0x0980}, + {0x0985, 0x098C}, {0x098F, 0x0990}, {0x0993, 0x09A8}, + {0x09AA, 0x09B0}, {0x09B2, 0x09B2}, {0x09B6, 0x09B9}, + {0x09BD, 0x09BD}, {0x09CE, 0x09CE}, {0x09DC, 0x09DD}, + {0x09DF, 0x09E1}, {0x09F0, 0x09F1}, {0x09FC, 0x09FC}, + {0x0A05, 0x0A0A}, {0x0A0F, 0x0A10}, {0x0A13, 0x0A28}, + {0x0A2A, 0x0A30}, {0x0A32, 0x0A33}, {0x0A35, 0x0A36}, + {0x0A38, 0x0A39}, {0x0A59, 0x0A5C}, {0x0A5E, 0x0A5E}, + {0x0A72, 0x0A74}, {0x0A85, 0x0A8D}, {0x0A8F, 0x0A91}, + {0x0A93, 0x0AA8}, {0x0AAA, 0x0AB0}, {0x0AB2, 0x0AB3}, + {0x0AB5, 0x0AB9}, {0x0ABD, 0x0ABD}, {0x0AD0, 0x0AD0}, + {0x0AE0, 0x0AE1}, {0x0AF9, 0x0AF9}, {0x0B05, 0x0B0C}, + {0x0B0F, 0x0B10}, {0x0B13, 0x0B28}, {0x0B2A, 0x0B30}, + {0x0B32, 0x0B33}, {0x0B35, 0x0B39}, {0x0B3D, 0x0B3D}, + {0x0B5C, 0x0B5D}, {0x0B5F, 0x0B61}, {0x0B71, 0x0B71}, + {0x0B83, 0x0B83}, {0x0B85, 0x0B8A}, {0x0B8E, 0x0B90}, + {0x0B92, 0x0B95}, {0x0B99, 0x0B9A}, {0x0B9C, 0x0B9C}, + {0x0B9E, 0x0B9F}, {0x0BA3, 0x0BA4}, {0x0BA8, 0x0BAA}, + {0x0BAE, 0x0BB9}, {0x0BD0, 0x0BD0}, {0x0C05, 0x0C0C}, + {0x0C0E, 0x0C10}, {0x0C12, 0x0C28}, {0x0C2A, 0x0C39}, + {0x0C3D, 0x0C3D}, {0x0C58, 0x0C5A}, {0x0C5D, 0x0C5D}, + {0x0C60, 0x0C61}, {0x0C80, 0x0C80}, {0x0C85, 0x0C8C}, + {0x0C8E, 0x0C90}, {0x0C92, 0x0CA8}, {0x0CAA, 0x0CB3}, + {0x0CB5, 0x0CB9}, {0x0CBD, 0x0CBD}, {0x0CDD, 0x0CDE}, + {0x0CE0, 0x0CE1}, {0x0CF1, 0x0CF2}, {0x0D04, 0x0D0C}, + {0x0D0E, 0x0D10}, {0x0D12, 0x0D3A}, {0x0D3D, 0x0D3D}, + {0x0D4E, 0x0D4E}, {0x0D54, 0x0D56}, {0x0D5F, 0x0D61}, + {0x0D7A, 0x0D7F}, {0x0D85, 0x0D96}, {0x0D9A, 0x0DB1}, + {0x0DB3, 0x0DBB}, {0x0DBD, 0x0DBD}, {0x0DC0, 0x0DC6}, + {0x0E01, 0x0E30}, {0x0E32, 0x0E32}, {0x0E40, 0x0E46}, + {0x0E81, 0x0E82}, {0x0E84, 0x0E84}, {0x0E86, 0x0E8A}, + {0x0E8C, 0x0EA3}, {0x0EA5, 0x0EA5}, {0x0EA7, 0x0EB0}, + {0x0EB2, 0x0EB2}, {0x0EBD, 0x0EBD}, {0x0EC0, 0x0EC4}, + {0x0EC6, 0x0EC6}, {0x0EDC, 0x0EDF}, {0x0F00, 0x0F00}, + {0x0F40, 0x0F47}, {0x0F49, 0x0F6C}, {0x0F88, 0x0F8C}, + {0x1000, 0x102A}, {0x103F, 0x103F}, {0x1050, 0x1055}, + {0x105A, 0x105D}, {0x1061, 0x1061}, {0x1065, 0x1066}, + {0x106E, 0x1070}, {0x1075, 0x1081}, {0x108E, 0x108E}, + {0x10A0, 0x10C5}, {0x10C7, 0x10C7}, {0x10CD, 0x10CD}, + {0x10D0, 0x10FA}, {0x10FC, 0x1248}, {0x124A, 0x124D}, + {0x1250, 0x1256}, {0x1258, 0x1258}, {0x125A, 0x125D}, + {0x1260, 0x1288}, {0x128A, 0x128D}, {0x1290, 0x12B0}, + {0x12B2, 0x12B5}, {0x12B8, 0x12BE}, {0x12C0, 0x12C0}, + {0x12C2, 0x12C5}, {0x12C8, 0x12D6}, {0x12D8, 0x1310}, + {0x1312, 0x1315}, {0x1318, 0x135A}, {0x1380, 0x138F}, + {0x13A0, 0x13F5}, {0x13F8, 0x13FD}, {0x1401, 0x166C}, + {0x166F, 0x167F}, {0x1681, 0x169A}, {0x16A0, 0x16EA}, + {0x16EE, 0x16F8}, {0x1700, 0x1711}, {0x171F, 0x1731}, + {0x1740, 0x1751}, {0x1760, 0x176C}, {0x176E, 0x1770}, + {0x1780, 0x17B3}, {0x17D7, 0x17D7}, {0x17DC, 0x17DC}, + {0x1820, 0x1878}, {0x1880, 0x18A8}, {0x18AA, 0x18AA}, + {0x18B0, 0x18F5}, {0x1900, 0x191E}, {0x1950, 0x196D}, + {0x1970, 0x1974}, {0x1980, 0x19AB}, {0x19B0, 0x19C9}, + {0x1A00, 0x1A16}, {0x1A20, 0x1A54}, {0x1AA7, 0x1AA7}, + {0x1B05, 0x1B33}, {0x1B45, 0x1B4C}, {0x1B83, 0x1BA0}, + {0x1BAE, 0x1BAF}, {0x1BBA, 0x1BE5}, {0x1C00, 0x1C23}, + {0x1C4D, 0x1C4F}, {0x1C5A, 0x1C7D}, {0x1C80, 0x1C88}, + {0x1C90, 0x1CBA}, {0x1CBD, 0x1CBF}, {0x1CE9, 0x1CEC}, + {0x1CEE, 0x1CF3}, {0x1CF5, 0x1CF6}, {0x1CFA, 0x1CFA}, + {0x1D00, 0x1DBF}, {0x1E00, 0x1F15}, {0x1F18, 0x1F1D}, + {0x1F20, 0x1F45}, {0x1F48, 0x1F4D}, {0x1F50, 0x1F57}, + {0x1F59, 0x1F59}, {0x1F5B, 0x1F5B}, {0x1F5D, 0x1F5D}, + {0x1F5F, 0x1F7D}, {0x1F80, 0x1FB4}, {0x1FB6, 0x1FBC}, + {0x1FBE, 0x1FBE}, {0x1FC2, 0x1FC4}, {0x1FC6, 0x1FCC}, + {0x1FD0, 0x1FD3}, {0x1FD6, 0x1FDB}, {0x1FE0, 0x1FEC}, + {0x1FF2, 0x1FF4}, {0x1FF6, 0x1FFC}, {0x2071, 0x2071}, + {0x207F, 0x207F}, {0x2090, 0x209C}, {0x2102, 0x2102}, + {0x2107, 0x2107}, {0x210A, 0x2113}, {0x2115, 0x2115}, + {0x2118, 0x211D}, {0x2124, 0x2124}, {0x2126, 0x2126}, + {0x2128, 0x2128}, {0x212A, 0x2139}, {0x213C, 0x213F}, + {0x2145, 0x2149}, {0x214E, 0x214E}, {0x2160, 0x2188}, + {0x2C00, 0x2CE4}, {0x2CEB, 0x2CEE}, {0x2CF2, 0x2CF3}, + {0x2D00, 0x2D25}, {0x2D27, 0x2D27}, {0x2D2D, 0x2D2D}, + {0x2D30, 0x2D67}, {0x2D6F, 0x2D6F}, {0x2D80, 0x2D96}, + {0x2DA0, 0x2DA6}, {0x2DA8, 0x2DAE}, {0x2DB0, 0x2DB6}, + {0x2DB8, 0x2DBE}, {0x2DC0, 0x2DC6}, {0x2DC8, 0x2DCE}, + {0x2DD0, 0x2DD6}, {0x2DD8, 0x2DDE}, {0x3005, 0x3007}, + {0x3021, 0x3029}, {0x3031, 0x3035}, {0x3038, 0x303C}, + {0x3041, 0x3096}, {0x309D, 0x309F}, {0x30A1, 0x30FA}, + {0x30FC, 0x30FF}, {0x3105, 0x312F}, {0x3131, 0x318E}, + {0x31A0, 0x31BF}, {0x31F0, 0x31FF}, {0x3400, 0x4DBF}, + {0x4E00, 0xA48C}, {0xA4D0, 0xA4FD}, {0xA500, 0xA60C}, + {0xA610, 0xA61F}, {0xA62A, 0xA62B}, {0xA640, 0xA66E}, + {0xA67F, 0xA69D}, {0xA6A0, 0xA6EF}, {0xA717, 0xA71F}, + {0xA722, 0xA788}, {0xA78B, 0xA7CA}, {0xA7D0, 0xA7D1}, + {0xA7D3, 0xA7D3}, {0xA7D5, 0xA7D9}, {0xA7F2, 0xA801}, + {0xA803, 0xA805}, {0xA807, 0xA80A}, {0xA80C, 0xA822}, + {0xA840, 0xA873}, {0xA882, 0xA8B3}, {0xA8F2, 0xA8F7}, + {0xA8FB, 0xA8FB}, {0xA8FD, 0xA8FE}, {0xA90A, 0xA925}, + {0xA930, 0xA946}, {0xA960, 0xA97C}, {0xA984, 0xA9B2}, + {0xA9CF, 0xA9CF}, {0xA9E0, 0xA9E4}, {0xA9E6, 0xA9EF}, + {0xA9FA, 0xA9FE}, {0xAA00, 0xAA28}, {0xAA40, 0xAA42}, + {0xAA44, 0xAA4B}, {0xAA60, 0xAA76}, {0xAA7A, 0xAA7A}, + {0xAA7E, 0xAAAF}, {0xAAB1, 0xAAB1}, {0xAAB5, 0xAAB6}, + {0xAAB9, 0xAABD}, {0xAAC0, 0xAAC0}, {0xAAC2, 0xAAC2}, + {0xAADB, 0xAADD}, {0xAAE0, 0xAAEA}, {0xAAF2, 0xAAF4}, + {0xAB01, 0xAB06}, {0xAB09, 0xAB0E}, {0xAB11, 0xAB16}, + {0xAB20, 0xAB26}, {0xAB28, 0xAB2E}, {0xAB30, 0xAB5A}, + {0xAB5C, 0xAB69}, {0xAB70, 0xABE2}, {0xAC00, 0xD7A3}, + {0xD7B0, 0xD7C6}, {0xD7CB, 0xD7FB}, {0xF900, 0xFA6D}, + {0xFA70, 0xFAD9}, {0xFB00, 0xFB06}, {0xFB13, 0xFB17}, + {0xFB1D, 0xFB1D}, {0xFB1F, 0xFB28}, {0xFB2A, 0xFB36}, + {0xFB38, 0xFB3C}, {0xFB3E, 0xFB3E}, {0xFB40, 0xFB41}, + {0xFB43, 0xFB44}, {0xFB46, 0xFBB1}, {0xFBD3, 0xFC5D}, + {0xFC64, 0xFD3D}, {0xFD50, 0xFD8F}, {0xFD92, 0xFDC7}, + {0xFDF0, 0xFDF9}, {0xFE71, 0xFE71}, {0xFE73, 0xFE73}, + {0xFE77, 0xFE77}, {0xFE79, 0xFE79}, {0xFE7B, 0xFE7B}, + {0xFE7D, 0xFE7D}, {0xFE7F, 0xFEFC}, {0xFF21, 0xFF3A}, + {0xFF41, 0xFF5A}, {0xFF66, 0xFF9D}, {0xFFA0, 0xFFBE}, + {0xFFC2, 0xFFC7}, {0xFFCA, 0xFFCF}, {0xFFD2, 0xFFD7}, + {0xFFDA, 0xFFDC}, {0x10000, 0x1000B}, {0x1000D, 0x10026}, + {0x10028, 0x1003A}, {0x1003C, 0x1003D}, {0x1003F, 0x1004D}, + {0x10050, 0x1005D}, {0x10080, 0x100FA}, {0x10140, 0x10174}, + {0x10280, 0x1029C}, {0x102A0, 0x102D0}, {0x10300, 0x1031F}, + {0x1032D, 0x1034A}, {0x10350, 0x10375}, {0x10380, 0x1039D}, + {0x103A0, 0x103C3}, {0x103C8, 0x103CF}, {0x103D1, 0x103D5}, + {0x10400, 0x1049D}, {0x104B0, 0x104D3}, {0x104D8, 0x104FB}, + {0x10500, 0x10527}, {0x10530, 0x10563}, {0x10570, 0x1057A}, + {0x1057C, 0x1058A}, {0x1058C, 0x10592}, {0x10594, 0x10595}, + {0x10597, 0x105A1}, {0x105A3, 0x105B1}, {0x105B3, 0x105B9}, + {0x105BB, 0x105BC}, {0x10600, 0x10736}, {0x10740, 0x10755}, + {0x10760, 0x10767}, {0x10780, 0x10785}, {0x10787, 0x107B0}, + {0x107B2, 0x107BA}, {0x10800, 0x10805}, {0x10808, 0x10808}, + {0x1080A, 0x10835}, {0x10837, 0x10838}, {0x1083C, 0x1083C}, + {0x1083F, 0x10855}, {0x10860, 0x10876}, {0x10880, 0x1089E}, + {0x108E0, 0x108F2}, {0x108F4, 0x108F5}, {0x10900, 0x10915}, + {0x10920, 0x10939}, {0x10980, 0x109B7}, {0x109BE, 0x109BF}, + {0x10A00, 0x10A00}, {0x10A10, 0x10A13}, {0x10A15, 0x10A17}, + {0x10A19, 0x10A35}, {0x10A60, 0x10A7C}, {0x10A80, 0x10A9C}, + {0x10AC0, 0x10AC7}, {0x10AC9, 0x10AE4}, {0x10B00, 0x10B35}, + {0x10B40, 0x10B55}, {0x10B60, 0x10B72}, {0x10B80, 0x10B91}, + {0x10C00, 0x10C48}, {0x10C80, 0x10CB2}, {0x10CC0, 0x10CF2}, + {0x10D00, 0x10D23}, {0x10E80, 0x10EA9}, {0x10EB0, 0x10EB1}, + {0x10F00, 0x10F1C}, {0x10F27, 0x10F27}, {0x10F30, 0x10F45}, + {0x10F70, 0x10F81}, {0x10FB0, 0x10FC4}, {0x10FE0, 0x10FF6}, + {0x11003, 0x11037}, {0x11071, 0x11072}, {0x11075, 0x11075}, + {0x11083, 0x110AF}, {0x110D0, 0x110E8}, {0x11103, 0x11126}, + {0x11144, 0x11144}, {0x11147, 0x11147}, {0x11150, 0x11172}, + {0x11176, 0x11176}, {0x11183, 0x111B2}, {0x111C1, 0x111C4}, + {0x111DA, 0x111DA}, {0x111DC, 0x111DC}, {0x11200, 0x11211}, + {0x11213, 0x1122B}, {0x1123F, 0x11240}, {0x11280, 0x11286}, + {0x11288, 0x11288}, {0x1128A, 0x1128D}, {0x1128F, 0x1129D}, + {0x1129F, 0x112A8}, {0x112B0, 0x112DE}, {0x11305, 0x1130C}, + {0x1130F, 0x11310}, {0x11313, 0x11328}, {0x1132A, 0x11330}, + {0x11332, 0x11333}, {0x11335, 0x11339}, {0x1133D, 0x1133D}, + {0x11350, 0x11350}, {0x1135D, 0x11361}, {0x11400, 0x11434}, + {0x11447, 0x1144A}, {0x1145F, 0x11461}, {0x11480, 0x114AF}, + {0x114C4, 0x114C5}, {0x114C7, 0x114C7}, {0x11580, 0x115AE}, + {0x115D8, 0x115DB}, {0x11600, 0x1162F}, {0x11644, 0x11644}, + {0x11680, 0x116AA}, {0x116B8, 0x116B8}, {0x11700, 0x1171A}, + {0x11740, 0x11746}, {0x11800, 0x1182B}, {0x118A0, 0x118DF}, + {0x118FF, 0x11906}, {0x11909, 0x11909}, {0x1190C, 0x11913}, + {0x11915, 0x11916}, {0x11918, 0x1192F}, {0x1193F, 0x1193F}, + {0x11941, 0x11941}, {0x119A0, 0x119A7}, {0x119AA, 0x119D0}, + {0x119E1, 0x119E1}, {0x119E3, 0x119E3}, {0x11A00, 0x11A00}, + {0x11A0B, 0x11A32}, {0x11A3A, 0x11A3A}, {0x11A50, 0x11A50}, + {0x11A5C, 0x11A89}, {0x11A9D, 0x11A9D}, {0x11AB0, 0x11AF8}, + {0x11C00, 0x11C08}, {0x11C0A, 0x11C2E}, {0x11C40, 0x11C40}, + {0x11C72, 0x11C8F}, {0x11D00, 0x11D06}, {0x11D08, 0x11D09}, + {0x11D0B, 0x11D30}, {0x11D46, 0x11D46}, {0x11D60, 0x11D65}, + {0x11D67, 0x11D68}, {0x11D6A, 0x11D89}, {0x11D98, 0x11D98}, + {0x11EE0, 0x11EF2}, {0x11F02, 0x11F02}, {0x11F04, 0x11F10}, + {0x11F12, 0x11F33}, {0x11FB0, 0x11FB0}, {0x12000, 0x12399}, + {0x12400, 0x1246E}, {0x12480, 0x12543}, {0x12F90, 0x12FF0}, + {0x13000, 0x1342F}, {0x13441, 0x13446}, {0x14400, 0x14646}, + {0x16800, 0x16A38}, {0x16A40, 0x16A5E}, {0x16A70, 0x16ABE}, + {0x16AD0, 0x16AED}, {0x16B00, 0x16B2F}, {0x16B40, 0x16B43}, + {0x16B63, 0x16B77}, {0x16B7D, 0x16B8F}, {0x16E40, 0x16E7F}, + {0x16F00, 0x16F4A}, {0x16F50, 0x16F50}, {0x16F93, 0x16F9F}, + {0x16FE0, 0x16FE1}, {0x16FE3, 0x16FE3}, {0x17000, 0x187F7}, + {0x18800, 0x18CD5}, {0x18D00, 0x18D08}, {0x1AFF0, 0x1AFF3}, + {0x1AFF5, 0x1AFFB}, {0x1AFFD, 0x1AFFE}, {0x1B000, 0x1B122}, + {0x1B132, 0x1B132}, {0x1B150, 0x1B152}, {0x1B155, 0x1B155}, + {0x1B164, 0x1B167}, {0x1B170, 0x1B2FB}, {0x1BC00, 0x1BC6A}, + {0x1BC70, 0x1BC7C}, {0x1BC80, 0x1BC88}, {0x1BC90, 0x1BC99}, + {0x1D400, 0x1D454}, {0x1D456, 0x1D49C}, {0x1D49E, 0x1D49F}, + {0x1D4A2, 0x1D4A2}, {0x1D4A5, 0x1D4A6}, {0x1D4A9, 0x1D4AC}, + {0x1D4AE, 0x1D4B9}, {0x1D4BB, 0x1D4BB}, {0x1D4BD, 0x1D4C3}, + {0x1D4C5, 0x1D505}, {0x1D507, 0x1D50A}, {0x1D50D, 0x1D514}, + {0x1D516, 0x1D51C}, {0x1D51E, 0x1D539}, {0x1D53B, 0x1D53E}, + {0x1D540, 0x1D544}, {0x1D546, 0x1D546}, {0x1D54A, 0x1D550}, + {0x1D552, 0x1D6A5}, {0x1D6A8, 0x1D6C0}, {0x1D6C2, 0x1D6DA}, + {0x1D6DC, 0x1D6FA}, {0x1D6FC, 0x1D714}, {0x1D716, 0x1D734}, + {0x1D736, 0x1D74E}, {0x1D750, 0x1D76E}, {0x1D770, 0x1D788}, + {0x1D78A, 0x1D7A8}, {0x1D7AA, 0x1D7C2}, {0x1D7C4, 0x1D7CB}, + {0x1DF00, 0x1DF1E}, {0x1DF25, 0x1DF2A}, {0x1E030, 0x1E06D}, + {0x1E100, 0x1E12C}, {0x1E137, 0x1E13D}, {0x1E14E, 0x1E14E}, + {0x1E290, 0x1E2AD}, {0x1E2C0, 0x1E2EB}, {0x1E4D0, 0x1E4EB}, + {0x1E7E0, 0x1E7E6}, {0x1E7E8, 0x1E7EB}, {0x1E7ED, 0x1E7EE}, + {0x1E7F0, 0x1E7FE}, {0x1E800, 0x1E8C4}, {0x1E900, 0x1E943}, + {0x1E94B, 0x1E94B}, {0x1EE00, 0x1EE03}, {0x1EE05, 0x1EE1F}, + {0x1EE21, 0x1EE22}, {0x1EE24, 0x1EE24}, {0x1EE27, 0x1EE27}, + {0x1EE29, 0x1EE32}, {0x1EE34, 0x1EE37}, {0x1EE39, 0x1EE39}, + {0x1EE3B, 0x1EE3B}, {0x1EE42, 0x1EE42}, {0x1EE47, 0x1EE47}, + {0x1EE49, 0x1EE49}, {0x1EE4B, 0x1EE4B}, {0x1EE4D, 0x1EE4F}, + {0x1EE51, 0x1EE52}, {0x1EE54, 0x1EE54}, {0x1EE57, 0x1EE57}, + {0x1EE59, 0x1EE59}, {0x1EE5B, 0x1EE5B}, {0x1EE5D, 0x1EE5D}, + {0x1EE5F, 0x1EE5F}, {0x1EE61, 0x1EE62}, {0x1EE64, 0x1EE64}, + {0x1EE67, 0x1EE6A}, {0x1EE6C, 0x1EE72}, {0x1EE74, 0x1EE77}, + {0x1EE79, 0x1EE7C}, {0x1EE7E, 0x1EE7E}, {0x1EE80, 0x1EE89}, + {0x1EE8B, 0x1EE9B}, {0x1EEA1, 0x1EEA3}, {0x1EEA5, 0x1EEA9}, + {0x1EEAB, 0x1EEBB}, {0x20000, 0x2A6DF}, {0x2A700, 0x2B739}, + {0x2B740, 0x2B81D}, {0x2B820, 0x2CEA1}, {0x2CEB0, 0x2EBE0}, + {0x2EBF0, 0x2EE5D}, {0x2F800, 0x2FA1D}, {0x30000, 0x3134A}, + {0x31350, 0x323AF}, + // Binary: XID_Continue + {0x0030, 0x0039}, {0x0041, 0x005A}, {0x005F, 0x005F}, + {0x0061, 0x007A}, {0x00AA, 0x00AA}, {0x00B5, 0x00B5}, + {0x00B7, 0x00B7}, {0x00BA, 0x00BA}, {0x00C0, 0x00D6}, + {0x00D8, 0x00F6}, {0x00F8, 0x02C1}, {0x02C6, 0x02D1}, + {0x02E0, 0x02E4}, {0x02EC, 0x02EC}, {0x02EE, 0x02EE}, + {0x0300, 0x0374}, {0x0376, 0x0377}, {0x037B, 0x037D}, + {0x037F, 0x037F}, {0x0386, 0x038A}, {0x038C, 0x038C}, + {0x038E, 0x03A1}, {0x03A3, 0x03F5}, {0x03F7, 0x0481}, + {0x0483, 0x0487}, {0x048A, 0x052F}, {0x0531, 0x0556}, + {0x0559, 0x0559}, {0x0560, 0x0588}, {0x0591, 0x05BD}, + {0x05BF, 0x05BF}, {0x05C1, 0x05C2}, {0x05C4, 0x05C5}, + {0x05C7, 0x05C7}, {0x05D0, 0x05EA}, {0x05EF, 0x05F2}, + {0x0610, 0x061A}, {0x0620, 0x0669}, {0x066E, 0x06D3}, + {0x06D5, 0x06DC}, {0x06DF, 0x06E8}, {0x06EA, 0x06FC}, + {0x06FF, 0x06FF}, {0x0710, 0x074A}, {0x074D, 0x07B1}, + {0x07C0, 0x07F5}, {0x07FA, 0x07FA}, {0x07FD, 0x07FD}, + {0x0800, 0x082D}, {0x0840, 0x085B}, {0x0860, 0x086A}, + {0x0870, 0x0887}, {0x0889, 0x088E}, {0x0898, 0x08E1}, + {0x08E3, 0x0963}, {0x0966, 0x096F}, {0x0971, 0x0983}, + {0x0985, 0x098C}, {0x098F, 0x0990}, {0x0993, 0x09A8}, + {0x09AA, 0x09B0}, {0x09B2, 0x09B2}, {0x09B6, 0x09B9}, + {0x09BC, 0x09C4}, {0x09C7, 0x09C8}, {0x09CB, 0x09CE}, + {0x09D7, 0x09D7}, {0x09DC, 0x09DD}, {0x09DF, 0x09E3}, + {0x09E6, 0x09F1}, {0x09FC, 0x09FC}, {0x09FE, 0x09FE}, + {0x0A01, 0x0A03}, {0x0A05, 0x0A0A}, {0x0A0F, 0x0A10}, + {0x0A13, 0x0A28}, {0x0A2A, 0x0A30}, {0x0A32, 0x0A33}, + {0x0A35, 0x0A36}, {0x0A38, 0x0A39}, {0x0A3C, 0x0A3C}, + {0x0A3E, 0x0A42}, {0x0A47, 0x0A48}, {0x0A4B, 0x0A4D}, + {0x0A51, 0x0A51}, {0x0A59, 0x0A5C}, {0x0A5E, 0x0A5E}, + {0x0A66, 0x0A75}, {0x0A81, 0x0A83}, {0x0A85, 0x0A8D}, + {0x0A8F, 0x0A91}, {0x0A93, 0x0AA8}, {0x0AAA, 0x0AB0}, + {0x0AB2, 0x0AB3}, {0x0AB5, 0x0AB9}, {0x0ABC, 0x0AC5}, + {0x0AC7, 0x0AC9}, {0x0ACB, 0x0ACD}, {0x0AD0, 0x0AD0}, + {0x0AE0, 0x0AE3}, {0x0AE6, 0x0AEF}, {0x0AF9, 0x0AFF}, + {0x0B01, 0x0B03}, {0x0B05, 0x0B0C}, {0x0B0F, 0x0B10}, + {0x0B13, 0x0B28}, {0x0B2A, 0x0B30}, {0x0B32, 0x0B33}, + {0x0B35, 0x0B39}, {0x0B3C, 0x0B44}, {0x0B47, 0x0B48}, + {0x0B4B, 0x0B4D}, {0x0B55, 0x0B57}, {0x0B5C, 0x0B5D}, + {0x0B5F, 0x0B63}, {0x0B66, 0x0B6F}, {0x0B71, 0x0B71}, + {0x0B82, 0x0B83}, {0x0B85, 0x0B8A}, {0x0B8E, 0x0B90}, + {0x0B92, 0x0B95}, {0x0B99, 0x0B9A}, {0x0B9C, 0x0B9C}, + {0x0B9E, 0x0B9F}, {0x0BA3, 0x0BA4}, {0x0BA8, 0x0BAA}, + {0x0BAE, 0x0BB9}, {0x0BBE, 0x0BC2}, {0x0BC6, 0x0BC8}, + {0x0BCA, 0x0BCD}, {0x0BD0, 0x0BD0}, {0x0BD7, 0x0BD7}, + {0x0BE6, 0x0BEF}, {0x0C00, 0x0C0C}, {0x0C0E, 0x0C10}, + {0x0C12, 0x0C28}, {0x0C2A, 0x0C39}, {0x0C3C, 0x0C44}, + {0x0C46, 0x0C48}, {0x0C4A, 0x0C4D}, {0x0C55, 0x0C56}, + {0x0C58, 0x0C5A}, {0x0C5D, 0x0C5D}, {0x0C60, 0x0C63}, + {0x0C66, 0x0C6F}, {0x0C80, 0x0C83}, {0x0C85, 0x0C8C}, + {0x0C8E, 0x0C90}, {0x0C92, 0x0CA8}, {0x0CAA, 0x0CB3}, + {0x0CB5, 0x0CB9}, {0x0CBC, 0x0CC4}, {0x0CC6, 0x0CC8}, + {0x0CCA, 0x0CCD}, {0x0CD5, 0x0CD6}, {0x0CDD, 0x0CDE}, + {0x0CE0, 0x0CE3}, {0x0CE6, 0x0CEF}, {0x0CF1, 0x0CF3}, + {0x0D00, 0x0D0C}, {0x0D0E, 0x0D10}, {0x0D12, 0x0D44}, + {0x0D46, 0x0D48}, {0x0D4A, 0x0D4E}, {0x0D54, 0x0D57}, + {0x0D5F, 0x0D63}, {0x0D66, 0x0D6F}, {0x0D7A, 0x0D7F}, + {0x0D81, 0x0D83}, {0x0D85, 0x0D96}, {0x0D9A, 0x0DB1}, + {0x0DB3, 0x0DBB}, {0x0DBD, 0x0DBD}, {0x0DC0, 0x0DC6}, + {0x0DCA, 0x0DCA}, {0x0DCF, 0x0DD4}, {0x0DD6, 0x0DD6}, + {0x0DD8, 0x0DDF}, {0x0DE6, 0x0DEF}, {0x0DF2, 0x0DF3}, + {0x0E01, 0x0E3A}, {0x0E40, 0x0E4E}, {0x0E50, 0x0E59}, + {0x0E81, 0x0E82}, {0x0E84, 0x0E84}, {0x0E86, 0x0E8A}, + {0x0E8C, 0x0EA3}, {0x0EA5, 0x0EA5}, {0x0EA7, 0x0EBD}, + {0x0EC0, 0x0EC4}, {0x0EC6, 0x0EC6}, {0x0EC8, 0x0ECE}, + {0x0ED0, 0x0ED9}, {0x0EDC, 0x0EDF}, {0x0F00, 0x0F00}, + {0x0F18, 0x0F19}, {0x0F20, 0x0F29}, {0x0F35, 0x0F35}, + {0x0F37, 0x0F37}, {0x0F39, 0x0F39}, {0x0F3E, 0x0F47}, + {0x0F49, 0x0F6C}, {0x0F71, 0x0F84}, {0x0F86, 0x0F97}, + {0x0F99, 0x0FBC}, {0x0FC6, 0x0FC6}, {0x1000, 0x1049}, + {0x1050, 0x109D}, {0x10A0, 0x10C5}, {0x10C7, 0x10C7}, + {0x10CD, 0x10CD}, {0x10D0, 0x10FA}, {0x10FC, 0x1248}, + {0x124A, 0x124D}, {0x1250, 0x1256}, {0x1258, 0x1258}, + {0x125A, 0x125D}, {0x1260, 0x1288}, {0x128A, 0x128D}, + {0x1290, 0x12B0}, {0x12B2, 0x12B5}, {0x12B8, 0x12BE}, + {0x12C0, 0x12C0}, {0x12C2, 0x12C5}, {0x12C8, 0x12D6}, + {0x12D8, 0x1310}, {0x1312, 0x1315}, {0x1318, 0x135A}, + {0x135D, 0x135F}, {0x1369, 0x1371}, {0x1380, 0x138F}, + {0x13A0, 0x13F5}, {0x13F8, 0x13FD}, {0x1401, 0x166C}, + {0x166F, 0x167F}, {0x1681, 0x169A}, {0x16A0, 0x16EA}, + {0x16EE, 0x16F8}, {0x1700, 0x1715}, {0x171F, 0x1734}, + {0x1740, 0x1753}, {0x1760, 0x176C}, {0x176E, 0x1770}, + {0x1772, 0x1773}, {0x1780, 0x17D3}, {0x17D7, 0x17D7}, + {0x17DC, 0x17DD}, {0x17E0, 0x17E9}, {0x180B, 0x180D}, + {0x180F, 0x1819}, {0x1820, 0x1878}, {0x1880, 0x18AA}, + {0x18B0, 0x18F5}, {0x1900, 0x191E}, {0x1920, 0x192B}, + {0x1930, 0x193B}, {0x1946, 0x196D}, {0x1970, 0x1974}, + {0x1980, 0x19AB}, {0x19B0, 0x19C9}, {0x19D0, 0x19DA}, + {0x1A00, 0x1A1B}, {0x1A20, 0x1A5E}, {0x1A60, 0x1A7C}, + {0x1A7F, 0x1A89}, {0x1A90, 0x1A99}, {0x1AA7, 0x1AA7}, + {0x1AB0, 0x1ABD}, {0x1ABF, 0x1ACE}, {0x1B00, 0x1B4C}, + {0x1B50, 0x1B59}, {0x1B6B, 0x1B73}, {0x1B80, 0x1BF3}, + {0x1C00, 0x1C37}, {0x1C40, 0x1C49}, {0x1C4D, 0x1C7D}, + {0x1C80, 0x1C88}, {0x1C90, 0x1CBA}, {0x1CBD, 0x1CBF}, + {0x1CD0, 0x1CD2}, {0x1CD4, 0x1CFA}, {0x1D00, 0x1F15}, + {0x1F18, 0x1F1D}, {0x1F20, 0x1F45}, {0x1F48, 0x1F4D}, + {0x1F50, 0x1F57}, {0x1F59, 0x1F59}, {0x1F5B, 0x1F5B}, + {0x1F5D, 0x1F5D}, {0x1F5F, 0x1F7D}, {0x1F80, 0x1FB4}, + {0x1FB6, 0x1FBC}, {0x1FBE, 0x1FBE}, {0x1FC2, 0x1FC4}, + {0x1FC6, 0x1FCC}, {0x1FD0, 0x1FD3}, {0x1FD6, 0x1FDB}, + {0x1FE0, 0x1FEC}, {0x1FF2, 0x1FF4}, {0x1FF6, 0x1FFC}, + {0x200C, 0x200D}, {0x203F, 0x2040}, {0x2054, 0x2054}, + {0x2071, 0x2071}, {0x207F, 0x207F}, {0x2090, 0x209C}, + {0x20D0, 0x20DC}, {0x20E1, 0x20E1}, {0x20E5, 0x20F0}, + {0x2102, 0x2102}, {0x2107, 0x2107}, {0x210A, 0x2113}, + {0x2115, 0x2115}, {0x2118, 0x211D}, {0x2124, 0x2124}, + {0x2126, 0x2126}, {0x2128, 0x2128}, {0x212A, 0x2139}, + {0x213C, 0x213F}, {0x2145, 0x2149}, {0x214E, 0x214E}, + {0x2160, 0x2188}, {0x2C00, 0x2CE4}, {0x2CEB, 0x2CF3}, + {0x2D00, 0x2D25}, {0x2D27, 0x2D27}, {0x2D2D, 0x2D2D}, + {0x2D30, 0x2D67}, {0x2D6F, 0x2D6F}, {0x2D7F, 0x2D96}, + {0x2DA0, 0x2DA6}, {0x2DA8, 0x2DAE}, {0x2DB0, 0x2DB6}, + {0x2DB8, 0x2DBE}, {0x2DC0, 0x2DC6}, {0x2DC8, 0x2DCE}, + {0x2DD0, 0x2DD6}, {0x2DD8, 0x2DDE}, {0x2DE0, 0x2DFF}, + {0x3005, 0x3007}, {0x3021, 0x302F}, {0x3031, 0x3035}, + {0x3038, 0x303C}, {0x3041, 0x3096}, {0x3099, 0x309A}, + {0x309D, 0x309F}, {0x30A1, 0x30FF}, {0x3105, 0x312F}, + {0x3131, 0x318E}, {0x31A0, 0x31BF}, {0x31F0, 0x31FF}, + {0x3400, 0x4DBF}, {0x4E00, 0xA48C}, {0xA4D0, 0xA4FD}, + {0xA500, 0xA60C}, {0xA610, 0xA62B}, {0xA640, 0xA66F}, + {0xA674, 0xA67D}, {0xA67F, 0xA6F1}, {0xA717, 0xA71F}, + {0xA722, 0xA788}, {0xA78B, 0xA7CA}, {0xA7D0, 0xA7D1}, + {0xA7D3, 0xA7D3}, {0xA7D5, 0xA7D9}, {0xA7F2, 0xA827}, + {0xA82C, 0xA82C}, {0xA840, 0xA873}, {0xA880, 0xA8C5}, + {0xA8D0, 0xA8D9}, {0xA8E0, 0xA8F7}, {0xA8FB, 0xA8FB}, + {0xA8FD, 0xA92D}, {0xA930, 0xA953}, {0xA960, 0xA97C}, + {0xA980, 0xA9C0}, {0xA9CF, 0xA9D9}, {0xA9E0, 0xA9FE}, + {0xAA00, 0xAA36}, {0xAA40, 0xAA4D}, {0xAA50, 0xAA59}, + {0xAA60, 0xAA76}, {0xAA7A, 0xAAC2}, {0xAADB, 0xAADD}, + {0xAAE0, 0xAAEF}, {0xAAF2, 0xAAF6}, {0xAB01, 0xAB06}, + {0xAB09, 0xAB0E}, {0xAB11, 0xAB16}, {0xAB20, 0xAB26}, + {0xAB28, 0xAB2E}, {0xAB30, 0xAB5A}, {0xAB5C, 0xAB69}, + {0xAB70, 0xABEA}, {0xABEC, 0xABED}, {0xABF0, 0xABF9}, + {0xAC00, 0xD7A3}, {0xD7B0, 0xD7C6}, {0xD7CB, 0xD7FB}, + {0xF900, 0xFA6D}, {0xFA70, 0xFAD9}, {0xFB00, 0xFB06}, + {0xFB13, 0xFB17}, {0xFB1D, 0xFB28}, {0xFB2A, 0xFB36}, + {0xFB38, 0xFB3C}, {0xFB3E, 0xFB3E}, {0xFB40, 0xFB41}, + {0xFB43, 0xFB44}, {0xFB46, 0xFBB1}, {0xFBD3, 0xFC5D}, + {0xFC64, 0xFD3D}, {0xFD50, 0xFD8F}, {0xFD92, 0xFDC7}, + {0xFDF0, 0xFDF9}, {0xFE00, 0xFE0F}, {0xFE20, 0xFE2F}, + {0xFE33, 0xFE34}, {0xFE4D, 0xFE4F}, {0xFE71, 0xFE71}, + {0xFE73, 0xFE73}, {0xFE77, 0xFE77}, {0xFE79, 0xFE79}, + {0xFE7B, 0xFE7B}, {0xFE7D, 0xFE7D}, {0xFE7F, 0xFEFC}, + {0xFF10, 0xFF19}, {0xFF21, 0xFF3A}, {0xFF3F, 0xFF3F}, + {0xFF41, 0xFF5A}, {0xFF65, 0xFFBE}, {0xFFC2, 0xFFC7}, + {0xFFCA, 0xFFCF}, {0xFFD2, 0xFFD7}, {0xFFDA, 0xFFDC}, + {0x10000, 0x1000B}, {0x1000D, 0x10026}, {0x10028, 0x1003A}, + {0x1003C, 0x1003D}, {0x1003F, 0x1004D}, {0x10050, 0x1005D}, + {0x10080, 0x100FA}, {0x10140, 0x10174}, {0x101FD, 0x101FD}, + {0x10280, 0x1029C}, {0x102A0, 0x102D0}, {0x102E0, 0x102E0}, + {0x10300, 0x1031F}, {0x1032D, 0x1034A}, {0x10350, 0x1037A}, + {0x10380, 0x1039D}, {0x103A0, 0x103C3}, {0x103C8, 0x103CF}, + {0x103D1, 0x103D5}, {0x10400, 0x1049D}, {0x104A0, 0x104A9}, + {0x104B0, 0x104D3}, {0x104D8, 0x104FB}, {0x10500, 0x10527}, + {0x10530, 0x10563}, {0x10570, 0x1057A}, {0x1057C, 0x1058A}, + {0x1058C, 0x10592}, {0x10594, 0x10595}, {0x10597, 0x105A1}, + {0x105A3, 0x105B1}, {0x105B3, 0x105B9}, {0x105BB, 0x105BC}, + {0x10600, 0x10736}, {0x10740, 0x10755}, {0x10760, 0x10767}, + {0x10780, 0x10785}, {0x10787, 0x107B0}, {0x107B2, 0x107BA}, + {0x10800, 0x10805}, {0x10808, 0x10808}, {0x1080A, 0x10835}, + {0x10837, 0x10838}, {0x1083C, 0x1083C}, {0x1083F, 0x10855}, + {0x10860, 0x10876}, {0x10880, 0x1089E}, {0x108E0, 0x108F2}, + {0x108F4, 0x108F5}, {0x10900, 0x10915}, {0x10920, 0x10939}, + {0x10980, 0x109B7}, {0x109BE, 0x109BF}, {0x10A00, 0x10A03}, + {0x10A05, 0x10A06}, {0x10A0C, 0x10A13}, {0x10A15, 0x10A17}, + {0x10A19, 0x10A35}, {0x10A38, 0x10A3A}, {0x10A3F, 0x10A3F}, + {0x10A60, 0x10A7C}, {0x10A80, 0x10A9C}, {0x10AC0, 0x10AC7}, + {0x10AC9, 0x10AE6}, {0x10B00, 0x10B35}, {0x10B40, 0x10B55}, + {0x10B60, 0x10B72}, {0x10B80, 0x10B91}, {0x10C00, 0x10C48}, + {0x10C80, 0x10CB2}, {0x10CC0, 0x10CF2}, {0x10D00, 0x10D27}, + {0x10D30, 0x10D39}, {0x10E80, 0x10EA9}, {0x10EAB, 0x10EAC}, + {0x10EB0, 0x10EB1}, {0x10EFD, 0x10F1C}, {0x10F27, 0x10F27}, + {0x10F30, 0x10F50}, {0x10F70, 0x10F85}, {0x10FB0, 0x10FC4}, + {0x10FE0, 0x10FF6}, {0x11000, 0x11046}, {0x11066, 0x11075}, + {0x1107F, 0x110BA}, {0x110C2, 0x110C2}, {0x110D0, 0x110E8}, + {0x110F0, 0x110F9}, {0x11100, 0x11134}, {0x11136, 0x1113F}, + {0x11144, 0x11147}, {0x11150, 0x11173}, {0x11176, 0x11176}, + {0x11180, 0x111C4}, {0x111C9, 0x111CC}, {0x111CE, 0x111DA}, + {0x111DC, 0x111DC}, {0x11200, 0x11211}, {0x11213, 0x11237}, + {0x1123E, 0x11241}, {0x11280, 0x11286}, {0x11288, 0x11288}, + {0x1128A, 0x1128D}, {0x1128F, 0x1129D}, {0x1129F, 0x112A8}, + {0x112B0, 0x112EA}, {0x112F0, 0x112F9}, {0x11300, 0x11303}, + {0x11305, 0x1130C}, {0x1130F, 0x11310}, {0x11313, 0x11328}, + {0x1132A, 0x11330}, {0x11332, 0x11333}, {0x11335, 0x11339}, + {0x1133B, 0x11344}, {0x11347, 0x11348}, {0x1134B, 0x1134D}, + {0x11350, 0x11350}, {0x11357, 0x11357}, {0x1135D, 0x11363}, + {0x11366, 0x1136C}, {0x11370, 0x11374}, {0x11400, 0x1144A}, + {0x11450, 0x11459}, {0x1145E, 0x11461}, {0x11480, 0x114C5}, + {0x114C7, 0x114C7}, {0x114D0, 0x114D9}, {0x11580, 0x115B5}, + {0x115B8, 0x115C0}, {0x115D8, 0x115DD}, {0x11600, 0x11640}, + {0x11644, 0x11644}, {0x11650, 0x11659}, {0x11680, 0x116B8}, + {0x116C0, 0x116C9}, {0x11700, 0x1171A}, {0x1171D, 0x1172B}, + {0x11730, 0x11739}, {0x11740, 0x11746}, {0x11800, 0x1183A}, + {0x118A0, 0x118E9}, {0x118FF, 0x11906}, {0x11909, 0x11909}, + {0x1190C, 0x11913}, {0x11915, 0x11916}, {0x11918, 0x11935}, + {0x11937, 0x11938}, {0x1193B, 0x11943}, {0x11950, 0x11959}, + {0x119A0, 0x119A7}, {0x119AA, 0x119D7}, {0x119DA, 0x119E1}, + {0x119E3, 0x119E4}, {0x11A00, 0x11A3E}, {0x11A47, 0x11A47}, + {0x11A50, 0x11A99}, {0x11A9D, 0x11A9D}, {0x11AB0, 0x11AF8}, + {0x11C00, 0x11C08}, {0x11C0A, 0x11C36}, {0x11C38, 0x11C40}, + {0x11C50, 0x11C59}, {0x11C72, 0x11C8F}, {0x11C92, 0x11CA7}, + {0x11CA9, 0x11CB6}, {0x11D00, 0x11D06}, {0x11D08, 0x11D09}, + {0x11D0B, 0x11D36}, {0x11D3A, 0x11D3A}, {0x11D3C, 0x11D3D}, + {0x11D3F, 0x11D47}, {0x11D50, 0x11D59}, {0x11D60, 0x11D65}, + {0x11D67, 0x11D68}, {0x11D6A, 0x11D8E}, {0x11D90, 0x11D91}, + {0x11D93, 0x11D98}, {0x11DA0, 0x11DA9}, {0x11EE0, 0x11EF6}, + {0x11F00, 0x11F10}, {0x11F12, 0x11F3A}, {0x11F3E, 0x11F42}, + {0x11F50, 0x11F59}, {0x11FB0, 0x11FB0}, {0x12000, 0x12399}, + {0x12400, 0x1246E}, {0x12480, 0x12543}, {0x12F90, 0x12FF0}, + {0x13000, 0x1342F}, {0x13440, 0x13455}, {0x14400, 0x14646}, + {0x16800, 0x16A38}, {0x16A40, 0x16A5E}, {0x16A60, 0x16A69}, + {0x16A70, 0x16ABE}, {0x16AC0, 0x16AC9}, {0x16AD0, 0x16AED}, + {0x16AF0, 0x16AF4}, {0x16B00, 0x16B36}, {0x16B40, 0x16B43}, + {0x16B50, 0x16B59}, {0x16B63, 0x16B77}, {0x16B7D, 0x16B8F}, + {0x16E40, 0x16E7F}, {0x16F00, 0x16F4A}, {0x16F4F, 0x16F87}, + {0x16F8F, 0x16F9F}, {0x16FE0, 0x16FE1}, {0x16FE3, 0x16FE4}, + {0x16FF0, 0x16FF1}, {0x17000, 0x187F7}, {0x18800, 0x18CD5}, + {0x18D00, 0x18D08}, {0x1AFF0, 0x1AFF3}, {0x1AFF5, 0x1AFFB}, + {0x1AFFD, 0x1AFFE}, {0x1B000, 0x1B122}, {0x1B132, 0x1B132}, + {0x1B150, 0x1B152}, {0x1B155, 0x1B155}, {0x1B164, 0x1B167}, + {0x1B170, 0x1B2FB}, {0x1BC00, 0x1BC6A}, {0x1BC70, 0x1BC7C}, + {0x1BC80, 0x1BC88}, {0x1BC90, 0x1BC99}, {0x1BC9D, 0x1BC9E}, + {0x1CF00, 0x1CF2D}, {0x1CF30, 0x1CF46}, {0x1D165, 0x1D169}, + {0x1D16D, 0x1D172}, {0x1D17B, 0x1D182}, {0x1D185, 0x1D18B}, + {0x1D1AA, 0x1D1AD}, {0x1D242, 0x1D244}, {0x1D400, 0x1D454}, + {0x1D456, 0x1D49C}, {0x1D49E, 0x1D49F}, {0x1D4A2, 0x1D4A2}, + {0x1D4A5, 0x1D4A6}, {0x1D4A9, 0x1D4AC}, {0x1D4AE, 0x1D4B9}, + {0x1D4BB, 0x1D4BB}, {0x1D4BD, 0x1D4C3}, {0x1D4C5, 0x1D505}, + {0x1D507, 0x1D50A}, {0x1D50D, 0x1D514}, {0x1D516, 0x1D51C}, + {0x1D51E, 0x1D539}, {0x1D53B, 0x1D53E}, {0x1D540, 0x1D544}, + {0x1D546, 0x1D546}, {0x1D54A, 0x1D550}, {0x1D552, 0x1D6A5}, + {0x1D6A8, 0x1D6C0}, {0x1D6C2, 0x1D6DA}, {0x1D6DC, 0x1D6FA}, + {0x1D6FC, 0x1D714}, {0x1D716, 0x1D734}, {0x1D736, 0x1D74E}, + {0x1D750, 0x1D76E}, {0x1D770, 0x1D788}, {0x1D78A, 0x1D7A8}, + {0x1D7AA, 0x1D7C2}, {0x1D7C4, 0x1D7CB}, {0x1D7CE, 0x1D7FF}, + {0x1DA00, 0x1DA36}, {0x1DA3B, 0x1DA6C}, {0x1DA75, 0x1DA75}, + {0x1DA84, 0x1DA84}, {0x1DA9B, 0x1DA9F}, {0x1DAA1, 0x1DAAF}, + {0x1DF00, 0x1DF1E}, {0x1DF25, 0x1DF2A}, {0x1E000, 0x1E006}, + {0x1E008, 0x1E018}, {0x1E01B, 0x1E021}, {0x1E023, 0x1E024}, + {0x1E026, 0x1E02A}, {0x1E030, 0x1E06D}, {0x1E08F, 0x1E08F}, + {0x1E100, 0x1E12C}, {0x1E130, 0x1E13D}, {0x1E140, 0x1E149}, + {0x1E14E, 0x1E14E}, {0x1E290, 0x1E2AE}, {0x1E2C0, 0x1E2F9}, + {0x1E4D0, 0x1E4F9}, {0x1E7E0, 0x1E7E6}, {0x1E7E8, 0x1E7EB}, + {0x1E7ED, 0x1E7EE}, {0x1E7F0, 0x1E7FE}, {0x1E800, 0x1E8C4}, + {0x1E8D0, 0x1E8D6}, {0x1E900, 0x1E94B}, {0x1E950, 0x1E959}, + {0x1EE00, 0x1EE03}, {0x1EE05, 0x1EE1F}, {0x1EE21, 0x1EE22}, + {0x1EE24, 0x1EE24}, {0x1EE27, 0x1EE27}, {0x1EE29, 0x1EE32}, + {0x1EE34, 0x1EE37}, {0x1EE39, 0x1EE39}, {0x1EE3B, 0x1EE3B}, + {0x1EE42, 0x1EE42}, {0x1EE47, 0x1EE47}, {0x1EE49, 0x1EE49}, + {0x1EE4B, 0x1EE4B}, {0x1EE4D, 0x1EE4F}, {0x1EE51, 0x1EE52}, + {0x1EE54, 0x1EE54}, {0x1EE57, 0x1EE57}, {0x1EE59, 0x1EE59}, + {0x1EE5B, 0x1EE5B}, {0x1EE5D, 0x1EE5D}, {0x1EE5F, 0x1EE5F}, + {0x1EE61, 0x1EE62}, {0x1EE64, 0x1EE64}, {0x1EE67, 0x1EE6A}, + {0x1EE6C, 0x1EE72}, {0x1EE74, 0x1EE77}, {0x1EE79, 0x1EE7C}, + {0x1EE7E, 0x1EE7E}, {0x1EE80, 0x1EE89}, {0x1EE8B, 0x1EE9B}, + {0x1EEA1, 0x1EEA3}, {0x1EEA5, 0x1EEA9}, {0x1EEAB, 0x1EEBB}, + {0x1FBF0, 0x1FBF9}, {0x20000, 0x2A6DF}, {0x2A700, 0x2B739}, + {0x2B740, 0x2B81D}, {0x2B820, 0x2CEA1}, {0x2CEB0, 0x2EBE0}, + {0x2EBF0, 0x2EE5D}, {0x2F800, 0x2FA1D}, {0x30000, 0x3134A}, + {0x31350, 0x323AF}, {0xE0100, 0xE01EF}, + // Binary: Default_Ignorable_Code_Point + {0x00AD, 0x00AD}, {0x034F, 0x034F}, {0x061C, 0x061C}, + {0x115F, 0x1160}, {0x17B4, 0x17B5}, {0x180B, 0x180F}, + {0x200B, 0x200F}, {0x202A, 0x202E}, {0x2060, 0x206F}, + {0x3164, 0x3164}, {0xFE00, 0xFE0F}, {0xFEFF, 0xFEFF}, + {0xFFA0, 0xFFA0}, {0xFFF0, 0xFFF8}, {0x1BCA0, 0x1BCA3}, + {0x1D173, 0x1D17A}, {0xE0000, 0xE0FFF}, + // Binary: Grapheme_Extend + {0x0300, 0x036F}, {0x0483, 0x0489}, {0x0591, 0x05BD}, + {0x05BF, 0x05BF}, {0x05C1, 0x05C2}, {0x05C4, 0x05C5}, + {0x05C7, 0x05C7}, {0x0610, 0x061A}, {0x064B, 0x065F}, + {0x0670, 0x0670}, {0x06D6, 0x06DC}, {0x06DF, 0x06E4}, + {0x06E7, 0x06E8}, {0x06EA, 0x06ED}, {0x0711, 0x0711}, + {0x0730, 0x074A}, {0x07A6, 0x07B0}, {0x07EB, 0x07F3}, + {0x07FD, 0x07FD}, {0x0816, 0x0819}, {0x081B, 0x0823}, + {0x0825, 0x0827}, {0x0829, 0x082D}, {0x0859, 0x085B}, + {0x0898, 0x089F}, {0x08CA, 0x08E1}, {0x08E3, 0x0902}, + {0x093A, 0x093A}, {0x093C, 0x093C}, {0x0941, 0x0948}, + {0x094D, 0x094D}, {0x0951, 0x0957}, {0x0962, 0x0963}, + {0x0981, 0x0981}, {0x09BC, 0x09BC}, {0x09BE, 0x09BE}, + {0x09C1, 0x09C4}, {0x09CD, 0x09CD}, {0x09D7, 0x09D7}, + {0x09E2, 0x09E3}, {0x09FE, 0x09FE}, {0x0A01, 0x0A02}, + {0x0A3C, 0x0A3C}, {0x0A41, 0x0A42}, {0x0A47, 0x0A48}, + {0x0A4B, 0x0A4D}, {0x0A51, 0x0A51}, {0x0A70, 0x0A71}, + {0x0A75, 0x0A75}, {0x0A81, 0x0A82}, {0x0ABC, 0x0ABC}, + {0x0AC1, 0x0AC5}, {0x0AC7, 0x0AC8}, {0x0ACD, 0x0ACD}, + {0x0AE2, 0x0AE3}, {0x0AFA, 0x0AFF}, {0x0B01, 0x0B01}, + {0x0B3C, 0x0B3C}, {0x0B3E, 0x0B3F}, {0x0B41, 0x0B44}, + {0x0B4D, 0x0B4D}, {0x0B55, 0x0B57}, {0x0B62, 0x0B63}, + {0x0B82, 0x0B82}, {0x0BBE, 0x0BBE}, {0x0BC0, 0x0BC0}, + {0x0BCD, 0x0BCD}, {0x0BD7, 0x0BD7}, {0x0C00, 0x0C00}, + {0x0C04, 0x0C04}, {0x0C3C, 0x0C3C}, {0x0C3E, 0x0C40}, + {0x0C46, 0x0C48}, {0x0C4A, 0x0C4D}, {0x0C55, 0x0C56}, + {0x0C62, 0x0C63}, {0x0C81, 0x0C81}, {0x0CBC, 0x0CBC}, + {0x0CBF, 0x0CBF}, {0x0CC2, 0x0CC2}, {0x0CC6, 0x0CC6}, + {0x0CCC, 0x0CCD}, {0x0CD5, 0x0CD6}, {0x0CE2, 0x0CE3}, + {0x0D00, 0x0D01}, {0x0D3B, 0x0D3C}, {0x0D3E, 0x0D3E}, + {0x0D41, 0x0D44}, {0x0D4D, 0x0D4D}, {0x0D57, 0x0D57}, + {0x0D62, 0x0D63}, {0x0D81, 0x0D81}, {0x0DCA, 0x0DCA}, + {0x0DCF, 0x0DCF}, {0x0DD2, 0x0DD4}, {0x0DD6, 0x0DD6}, + {0x0DDF, 0x0DDF}, {0x0E31, 0x0E31}, {0x0E34, 0x0E3A}, + {0x0E47, 0x0E4E}, {0x0EB1, 0x0EB1}, {0x0EB4, 0x0EBC}, + {0x0EC8, 0x0ECE}, {0x0F18, 0x0F19}, {0x0F35, 0x0F35}, + {0x0F37, 0x0F37}, {0x0F39, 0x0F39}, {0x0F71, 0x0F7E}, + {0x0F80, 0x0F84}, {0x0F86, 0x0F87}, {0x0F8D, 0x0F97}, + {0x0F99, 0x0FBC}, {0x0FC6, 0x0FC6}, {0x102D, 0x1030}, + {0x1032, 0x1037}, {0x1039, 0x103A}, {0x103D, 0x103E}, + {0x1058, 0x1059}, {0x105E, 0x1060}, {0x1071, 0x1074}, + {0x1082, 0x1082}, {0x1085, 0x1086}, {0x108D, 0x108D}, + {0x109D, 0x109D}, {0x135D, 0x135F}, {0x1712, 0x1714}, + {0x1732, 0x1733}, {0x1752, 0x1753}, {0x1772, 0x1773}, + {0x17B4, 0x17B5}, {0x17B7, 0x17BD}, {0x17C6, 0x17C6}, + {0x17C9, 0x17D3}, {0x17DD, 0x17DD}, {0x180B, 0x180D}, + {0x180F, 0x180F}, {0x1885, 0x1886}, {0x18A9, 0x18A9}, + {0x1920, 0x1922}, {0x1927, 0x1928}, {0x1932, 0x1932}, + {0x1939, 0x193B}, {0x1A17, 0x1A18}, {0x1A1B, 0x1A1B}, + {0x1A56, 0x1A56}, {0x1A58, 0x1A5E}, {0x1A60, 0x1A60}, + {0x1A62, 0x1A62}, {0x1A65, 0x1A6C}, {0x1A73, 0x1A7C}, + {0x1A7F, 0x1A7F}, {0x1AB0, 0x1ACE}, {0x1B00, 0x1B03}, + {0x1B34, 0x1B3A}, {0x1B3C, 0x1B3C}, {0x1B42, 0x1B42}, + {0x1B6B, 0x1B73}, {0x1B80, 0x1B81}, {0x1BA2, 0x1BA5}, + {0x1BA8, 0x1BA9}, {0x1BAB, 0x1BAD}, {0x1BE6, 0x1BE6}, + {0x1BE8, 0x1BE9}, {0x1BED, 0x1BED}, {0x1BEF, 0x1BF1}, + {0x1C2C, 0x1C33}, {0x1C36, 0x1C37}, {0x1CD0, 0x1CD2}, + {0x1CD4, 0x1CE0}, {0x1CE2, 0x1CE8}, {0x1CED, 0x1CED}, + {0x1CF4, 0x1CF4}, {0x1CF8, 0x1CF9}, {0x1DC0, 0x1DFF}, + {0x200C, 0x200C}, {0x20D0, 0x20F0}, {0x2CEF, 0x2CF1}, + {0x2D7F, 0x2D7F}, {0x2DE0, 0x2DFF}, {0x302A, 0x302F}, + {0x3099, 0x309A}, {0xA66F, 0xA672}, {0xA674, 0xA67D}, + {0xA69E, 0xA69F}, {0xA6F0, 0xA6F1}, {0xA802, 0xA802}, + {0xA806, 0xA806}, {0xA80B, 0xA80B}, {0xA825, 0xA826}, + {0xA82C, 0xA82C}, {0xA8C4, 0xA8C5}, {0xA8E0, 0xA8F1}, + {0xA8FF, 0xA8FF}, {0xA926, 0xA92D}, {0xA947, 0xA951}, + {0xA980, 0xA982}, {0xA9B3, 0xA9B3}, {0xA9B6, 0xA9B9}, + {0xA9BC, 0xA9BD}, {0xA9E5, 0xA9E5}, {0xAA29, 0xAA2E}, + {0xAA31, 0xAA32}, {0xAA35, 0xAA36}, {0xAA43, 0xAA43}, + {0xAA4C, 0xAA4C}, {0xAA7C, 0xAA7C}, {0xAAB0, 0xAAB0}, + {0xAAB2, 0xAAB4}, {0xAAB7, 0xAAB8}, {0xAABE, 0xAABF}, + {0xAAC1, 0xAAC1}, {0xAAEC, 0xAAED}, {0xAAF6, 0xAAF6}, + {0xABE5, 0xABE5}, {0xABE8, 0xABE8}, {0xABED, 0xABED}, + {0xFB1E, 0xFB1E}, {0xFE00, 0xFE0F}, {0xFE20, 0xFE2F}, + {0xFF9E, 0xFF9F}, {0x101FD, 0x101FD}, {0x102E0, 0x102E0}, + {0x10376, 0x1037A}, {0x10A01, 0x10A03}, {0x10A05, 0x10A06}, + {0x10A0C, 0x10A0F}, {0x10A38, 0x10A3A}, {0x10A3F, 0x10A3F}, + {0x10AE5, 0x10AE6}, {0x10D24, 0x10D27}, {0x10EAB, 0x10EAC}, + {0x10EFD, 0x10EFF}, {0x10F46, 0x10F50}, {0x10F82, 0x10F85}, + {0x11001, 0x11001}, {0x11038, 0x11046}, {0x11070, 0x11070}, + {0x11073, 0x11074}, {0x1107F, 0x11081}, {0x110B3, 0x110B6}, + {0x110B9, 0x110BA}, {0x110C2, 0x110C2}, {0x11100, 0x11102}, + {0x11127, 0x1112B}, {0x1112D, 0x11134}, {0x11173, 0x11173}, + {0x11180, 0x11181}, {0x111B6, 0x111BE}, {0x111C9, 0x111CC}, + {0x111CF, 0x111CF}, {0x1122F, 0x11231}, {0x11234, 0x11234}, + {0x11236, 0x11237}, {0x1123E, 0x1123E}, {0x11241, 0x11241}, + {0x112DF, 0x112DF}, {0x112E3, 0x112EA}, {0x11300, 0x11301}, + {0x1133B, 0x1133C}, {0x1133E, 0x1133E}, {0x11340, 0x11340}, + {0x11357, 0x11357}, {0x11366, 0x1136C}, {0x11370, 0x11374}, + {0x11438, 0x1143F}, {0x11442, 0x11444}, {0x11446, 0x11446}, + {0x1145E, 0x1145E}, {0x114B0, 0x114B0}, {0x114B3, 0x114B8}, + {0x114BA, 0x114BA}, {0x114BD, 0x114BD}, {0x114BF, 0x114C0}, + {0x114C2, 0x114C3}, {0x115AF, 0x115AF}, {0x115B2, 0x115B5}, + {0x115BC, 0x115BD}, {0x115BF, 0x115C0}, {0x115DC, 0x115DD}, + {0x11633, 0x1163A}, {0x1163D, 0x1163D}, {0x1163F, 0x11640}, + {0x116AB, 0x116AB}, {0x116AD, 0x116AD}, {0x116B0, 0x116B5}, + {0x116B7, 0x116B7}, {0x1171D, 0x1171F}, {0x11722, 0x11725}, + {0x11727, 0x1172B}, {0x1182F, 0x11837}, {0x11839, 0x1183A}, + {0x11930, 0x11930}, {0x1193B, 0x1193C}, {0x1193E, 0x1193E}, + {0x11943, 0x11943}, {0x119D4, 0x119D7}, {0x119DA, 0x119DB}, + {0x119E0, 0x119E0}, {0x11A01, 0x11A0A}, {0x11A33, 0x11A38}, + {0x11A3B, 0x11A3E}, {0x11A47, 0x11A47}, {0x11A51, 0x11A56}, + {0x11A59, 0x11A5B}, {0x11A8A, 0x11A96}, {0x11A98, 0x11A99}, + {0x11C30, 0x11C36}, {0x11C38, 0x11C3D}, {0x11C3F, 0x11C3F}, + {0x11C92, 0x11CA7}, {0x11CAA, 0x11CB0}, {0x11CB2, 0x11CB3}, + {0x11CB5, 0x11CB6}, {0x11D31, 0x11D36}, {0x11D3A, 0x11D3A}, + {0x11D3C, 0x11D3D}, {0x11D3F, 0x11D45}, {0x11D47, 0x11D47}, + {0x11D90, 0x11D91}, {0x11D95, 0x11D95}, {0x11D97, 0x11D97}, + {0x11EF3, 0x11EF4}, {0x11F00, 0x11F01}, {0x11F36, 0x11F3A}, + {0x11F40, 0x11F40}, {0x11F42, 0x11F42}, {0x13440, 0x13440}, + {0x13447, 0x13455}, {0x16AF0, 0x16AF4}, {0x16B30, 0x16B36}, + {0x16F4F, 0x16F4F}, {0x16F8F, 0x16F92}, {0x16FE4, 0x16FE4}, + {0x1BC9D, 0x1BC9E}, {0x1CF00, 0x1CF2D}, {0x1CF30, 0x1CF46}, + {0x1D165, 0x1D165}, {0x1D167, 0x1D169}, {0x1D16E, 0x1D172}, + {0x1D17B, 0x1D182}, {0x1D185, 0x1D18B}, {0x1D1AA, 0x1D1AD}, + {0x1D242, 0x1D244}, {0x1DA00, 0x1DA36}, {0x1DA3B, 0x1DA6C}, + {0x1DA75, 0x1DA75}, {0x1DA84, 0x1DA84}, {0x1DA9B, 0x1DA9F}, + {0x1DAA1, 0x1DAAF}, {0x1E000, 0x1E006}, {0x1E008, 0x1E018}, + {0x1E01B, 0x1E021}, {0x1E023, 0x1E024}, {0x1E026, 0x1E02A}, + {0x1E08F, 0x1E08F}, {0x1E130, 0x1E136}, {0x1E2AE, 0x1E2AE}, + {0x1E2EC, 0x1E2EF}, {0x1E4EC, 0x1E4EF}, {0x1E8D0, 0x1E8D6}, + {0x1E944, 0x1E94A}, {0xE0020, 0xE007F}, {0xE0100, 0xE01EF}, + // Binary: Grapheme_Base + {0x0020, 0x007E}, {0x00A0, 0x00AC}, {0x00AE, 0x02FF}, + {0x0370, 0x0377}, {0x037A, 0x037F}, {0x0384, 0x038A}, + {0x038C, 0x038C}, {0x038E, 0x03A1}, {0x03A3, 0x0482}, + {0x048A, 0x052F}, {0x0531, 0x0556}, {0x0559, 0x058A}, + {0x058D, 0x058F}, {0x05BE, 0x05BE}, {0x05C0, 0x05C0}, + {0x05C3, 0x05C3}, {0x05C6, 0x05C6}, {0x05D0, 0x05EA}, + {0x05EF, 0x05F4}, {0x0606, 0x060F}, {0x061B, 0x061B}, + {0x061D, 0x064A}, {0x0660, 0x066F}, {0x0671, 0x06D5}, + {0x06DE, 0x06DE}, {0x06E5, 0x06E6}, {0x06E9, 0x06E9}, + {0x06EE, 0x070D}, {0x0710, 0x0710}, {0x0712, 0x072F}, + {0x074D, 0x07A5}, {0x07B1, 0x07B1}, {0x07C0, 0x07EA}, + {0x07F4, 0x07FA}, {0x07FE, 0x0815}, {0x081A, 0x081A}, + {0x0824, 0x0824}, {0x0828, 0x0828}, {0x0830, 0x083E}, + {0x0840, 0x0858}, {0x085E, 0x085E}, {0x0860, 0x086A}, + {0x0870, 0x088E}, {0x08A0, 0x08C9}, {0x0903, 0x0939}, + {0x093B, 0x093B}, {0x093D, 0x0940}, {0x0949, 0x094C}, + {0x094E, 0x0950}, {0x0958, 0x0961}, {0x0964, 0x0980}, + {0x0982, 0x0983}, {0x0985, 0x098C}, {0x098F, 0x0990}, + {0x0993, 0x09A8}, {0x09AA, 0x09B0}, {0x09B2, 0x09B2}, + {0x09B6, 0x09B9}, {0x09BD, 0x09BD}, {0x09BF, 0x09C0}, + {0x09C7, 0x09C8}, {0x09CB, 0x09CC}, {0x09CE, 0x09CE}, + {0x09DC, 0x09DD}, {0x09DF, 0x09E1}, {0x09E6, 0x09FD}, + {0x0A03, 0x0A03}, {0x0A05, 0x0A0A}, {0x0A0F, 0x0A10}, + {0x0A13, 0x0A28}, {0x0A2A, 0x0A30}, {0x0A32, 0x0A33}, + {0x0A35, 0x0A36}, {0x0A38, 0x0A39}, {0x0A3E, 0x0A40}, + {0x0A59, 0x0A5C}, {0x0A5E, 0x0A5E}, {0x0A66, 0x0A6F}, + {0x0A72, 0x0A74}, {0x0A76, 0x0A76}, {0x0A83, 0x0A83}, + {0x0A85, 0x0A8D}, {0x0A8F, 0x0A91}, {0x0A93, 0x0AA8}, + {0x0AAA, 0x0AB0}, {0x0AB2, 0x0AB3}, {0x0AB5, 0x0AB9}, + {0x0ABD, 0x0AC0}, {0x0AC9, 0x0AC9}, {0x0ACB, 0x0ACC}, + {0x0AD0, 0x0AD0}, {0x0AE0, 0x0AE1}, {0x0AE6, 0x0AF1}, + {0x0AF9, 0x0AF9}, {0x0B02, 0x0B03}, {0x0B05, 0x0B0C}, + {0x0B0F, 0x0B10}, {0x0B13, 0x0B28}, {0x0B2A, 0x0B30}, + {0x0B32, 0x0B33}, {0x0B35, 0x0B39}, {0x0B3D, 0x0B3D}, + {0x0B40, 0x0B40}, {0x0B47, 0x0B48}, {0x0B4B, 0x0B4C}, + {0x0B5C, 0x0B5D}, {0x0B5F, 0x0B61}, {0x0B66, 0x0B77}, + {0x0B83, 0x0B83}, {0x0B85, 0x0B8A}, {0x0B8E, 0x0B90}, + {0x0B92, 0x0B95}, {0x0B99, 0x0B9A}, {0x0B9C, 0x0B9C}, + {0x0B9E, 0x0B9F}, {0x0BA3, 0x0BA4}, {0x0BA8, 0x0BAA}, + {0x0BAE, 0x0BB9}, {0x0BBF, 0x0BBF}, {0x0BC1, 0x0BC2}, + {0x0BC6, 0x0BC8}, {0x0BCA, 0x0BCC}, {0x0BD0, 0x0BD0}, + {0x0BE6, 0x0BFA}, {0x0C01, 0x0C03}, {0x0C05, 0x0C0C}, + {0x0C0E, 0x0C10}, {0x0C12, 0x0C28}, {0x0C2A, 0x0C39}, + {0x0C3D, 0x0C3D}, {0x0C41, 0x0C44}, {0x0C58, 0x0C5A}, + {0x0C5D, 0x0C5D}, {0x0C60, 0x0C61}, {0x0C66, 0x0C6F}, + {0x0C77, 0x0C80}, {0x0C82, 0x0C8C}, {0x0C8E, 0x0C90}, + {0x0C92, 0x0CA8}, {0x0CAA, 0x0CB3}, {0x0CB5, 0x0CB9}, + {0x0CBD, 0x0CBE}, {0x0CC0, 0x0CC1}, {0x0CC3, 0x0CC4}, + {0x0CC7, 0x0CC8}, {0x0CCA, 0x0CCB}, {0x0CDD, 0x0CDE}, + {0x0CE0, 0x0CE1}, {0x0CE6, 0x0CEF}, {0x0CF1, 0x0CF3}, + {0x0D02, 0x0D0C}, {0x0D0E, 0x0D10}, {0x0D12, 0x0D3A}, + {0x0D3D, 0x0D3D}, {0x0D3F, 0x0D40}, {0x0D46, 0x0D48}, + {0x0D4A, 0x0D4C}, {0x0D4E, 0x0D4F}, {0x0D54, 0x0D56}, + {0x0D58, 0x0D61}, {0x0D66, 0x0D7F}, {0x0D82, 0x0D83}, + {0x0D85, 0x0D96}, {0x0D9A, 0x0DB1}, {0x0DB3, 0x0DBB}, + {0x0DBD, 0x0DBD}, {0x0DC0, 0x0DC6}, {0x0DD0, 0x0DD1}, + {0x0DD8, 0x0DDE}, {0x0DE6, 0x0DEF}, {0x0DF2, 0x0DF4}, + {0x0E01, 0x0E30}, {0x0E32, 0x0E33}, {0x0E3F, 0x0E46}, + {0x0E4F, 0x0E5B}, {0x0E81, 0x0E82}, {0x0E84, 0x0E84}, + {0x0E86, 0x0E8A}, {0x0E8C, 0x0EA3}, {0x0EA5, 0x0EA5}, + {0x0EA7, 0x0EB0}, {0x0EB2, 0x0EB3}, {0x0EBD, 0x0EBD}, + {0x0EC0, 0x0EC4}, {0x0EC6, 0x0EC6}, {0x0ED0, 0x0ED9}, + {0x0EDC, 0x0EDF}, {0x0F00, 0x0F17}, {0x0F1A, 0x0F34}, + {0x0F36, 0x0F36}, {0x0F38, 0x0F38}, {0x0F3A, 0x0F47}, + {0x0F49, 0x0F6C}, {0x0F7F, 0x0F7F}, {0x0F85, 0x0F85}, + {0x0F88, 0x0F8C}, {0x0FBE, 0x0FC5}, {0x0FC7, 0x0FCC}, + {0x0FCE, 0x0FDA}, {0x1000, 0x102C}, {0x1031, 0x1031}, + {0x1038, 0x1038}, {0x103B, 0x103C}, {0x103F, 0x1057}, + {0x105A, 0x105D}, {0x1061, 0x1070}, {0x1075, 0x1081}, + {0x1083, 0x1084}, {0x1087, 0x108C}, {0x108E, 0x109C}, + {0x109E, 0x10C5}, {0x10C7, 0x10C7}, {0x10CD, 0x10CD}, + {0x10D0, 0x1248}, {0x124A, 0x124D}, {0x1250, 0x1256}, + {0x1258, 0x1258}, {0x125A, 0x125D}, {0x1260, 0x1288}, + {0x128A, 0x128D}, {0x1290, 0x12B0}, {0x12B2, 0x12B5}, + {0x12B8, 0x12BE}, {0x12C0, 0x12C0}, {0x12C2, 0x12C5}, + {0x12C8, 0x12D6}, {0x12D8, 0x1310}, {0x1312, 0x1315}, + {0x1318, 0x135A}, {0x1360, 0x137C}, {0x1380, 0x1399}, + {0x13A0, 0x13F5}, {0x13F8, 0x13FD}, {0x1400, 0x169C}, + {0x16A0, 0x16F8}, {0x1700, 0x1711}, {0x1715, 0x1715}, + {0x171F, 0x1731}, {0x1734, 0x1736}, {0x1740, 0x1751}, + {0x1760, 0x176C}, {0x176E, 0x1770}, {0x1780, 0x17B3}, + {0x17B6, 0x17B6}, {0x17BE, 0x17C5}, {0x17C7, 0x17C8}, + {0x17D4, 0x17DC}, {0x17E0, 0x17E9}, {0x17F0, 0x17F9}, + {0x1800, 0x180A}, {0x1810, 0x1819}, {0x1820, 0x1878}, + {0x1880, 0x1884}, {0x1887, 0x18A8}, {0x18AA, 0x18AA}, + {0x18B0, 0x18F5}, {0x1900, 0x191E}, {0x1923, 0x1926}, + {0x1929, 0x192B}, {0x1930, 0x1931}, {0x1933, 0x1938}, + {0x1940, 0x1940}, {0x1944, 0x196D}, {0x1970, 0x1974}, + {0x1980, 0x19AB}, {0x19B0, 0x19C9}, {0x19D0, 0x19DA}, + {0x19DE, 0x1A16}, {0x1A19, 0x1A1A}, {0x1A1E, 0x1A55}, + {0x1A57, 0x1A57}, {0x1A61, 0x1A61}, {0x1A63, 0x1A64}, + {0x1A6D, 0x1A72}, {0x1A80, 0x1A89}, {0x1A90, 0x1A99}, + {0x1AA0, 0x1AAD}, {0x1B04, 0x1B33}, {0x1B3B, 0x1B3B}, + {0x1B3D, 0x1B41}, {0x1B43, 0x1B4C}, {0x1B50, 0x1B6A}, + {0x1B74, 0x1B7E}, {0x1B82, 0x1BA1}, {0x1BA6, 0x1BA7}, + {0x1BAA, 0x1BAA}, {0x1BAE, 0x1BE5}, {0x1BE7, 0x1BE7}, + {0x1BEA, 0x1BEC}, {0x1BEE, 0x1BEE}, {0x1BF2, 0x1BF3}, + {0x1BFC, 0x1C2B}, {0x1C34, 0x1C35}, {0x1C3B, 0x1C49}, + {0x1C4D, 0x1C88}, {0x1C90, 0x1CBA}, {0x1CBD, 0x1CC7}, + {0x1CD3, 0x1CD3}, {0x1CE1, 0x1CE1}, {0x1CE9, 0x1CEC}, + {0x1CEE, 0x1CF3}, {0x1CF5, 0x1CF7}, {0x1CFA, 0x1CFA}, + {0x1D00, 0x1DBF}, {0x1E00, 0x1F15}, {0x1F18, 0x1F1D}, + {0x1F20, 0x1F45}, {0x1F48, 0x1F4D}, {0x1F50, 0x1F57}, + {0x1F59, 0x1F59}, {0x1F5B, 0x1F5B}, {0x1F5D, 0x1F5D}, + {0x1F5F, 0x1F7D}, {0x1F80, 0x1FB4}, {0x1FB6, 0x1FC4}, + {0x1FC6, 0x1FD3}, {0x1FD6, 0x1FDB}, {0x1FDD, 0x1FEF}, + {0x1FF2, 0x1FF4}, {0x1FF6, 0x1FFE}, {0x2000, 0x200A}, + {0x2010, 0x2027}, {0x202F, 0x205F}, {0x2070, 0x2071}, + {0x2074, 0x208E}, {0x2090, 0x209C}, {0x20A0, 0x20C0}, + {0x2100, 0x218B}, {0x2190, 0x2426}, {0x2440, 0x244A}, + {0x2460, 0x2B73}, {0x2B76, 0x2B95}, {0x2B97, 0x2CEE}, + {0x2CF2, 0x2CF3}, {0x2CF9, 0x2D25}, {0x2D27, 0x2D27}, + {0x2D2D, 0x2D2D}, {0x2D30, 0x2D67}, {0x2D6F, 0x2D70}, + {0x2D80, 0x2D96}, {0x2DA0, 0x2DA6}, {0x2DA8, 0x2DAE}, + {0x2DB0, 0x2DB6}, {0x2DB8, 0x2DBE}, {0x2DC0, 0x2DC6}, + {0x2DC8, 0x2DCE}, {0x2DD0, 0x2DD6}, {0x2DD8, 0x2DDE}, + {0x2E00, 0x2E5D}, {0x2E80, 0x2E99}, {0x2E9B, 0x2EF3}, + {0x2F00, 0x2FD5}, {0x2FF0, 0x3029}, {0x3030, 0x303F}, + {0x3041, 0x3096}, {0x309B, 0x30FF}, {0x3105, 0x312F}, + {0x3131, 0x318E}, {0x3190, 0x31E3}, {0x31EF, 0x321E}, + {0x3220, 0xA48C}, {0xA490, 0xA4C6}, {0xA4D0, 0xA62B}, + {0xA640, 0xA66E}, {0xA673, 0xA673}, {0xA67E, 0xA69D}, + {0xA6A0, 0xA6EF}, {0xA6F2, 0xA6F7}, {0xA700, 0xA7CA}, + {0xA7D0, 0xA7D1}, {0xA7D3, 0xA7D3}, {0xA7D5, 0xA7D9}, + {0xA7F2, 0xA801}, {0xA803, 0xA805}, {0xA807, 0xA80A}, + {0xA80C, 0xA824}, {0xA827, 0xA82B}, {0xA830, 0xA839}, + {0xA840, 0xA877}, {0xA880, 0xA8C3}, {0xA8CE, 0xA8D9}, + {0xA8F2, 0xA8FE}, {0xA900, 0xA925}, {0xA92E, 0xA946}, + {0xA952, 0xA953}, {0xA95F, 0xA97C}, {0xA983, 0xA9B2}, + {0xA9B4, 0xA9B5}, {0xA9BA, 0xA9BB}, {0xA9BE, 0xA9CD}, + {0xA9CF, 0xA9D9}, {0xA9DE, 0xA9E4}, {0xA9E6, 0xA9FE}, + {0xAA00, 0xAA28}, {0xAA2F, 0xAA30}, {0xAA33, 0xAA34}, + {0xAA40, 0xAA42}, {0xAA44, 0xAA4B}, {0xAA4D, 0xAA4D}, + {0xAA50, 0xAA59}, {0xAA5C, 0xAA7B}, {0xAA7D, 0xAAAF}, + {0xAAB1, 0xAAB1}, {0xAAB5, 0xAAB6}, {0xAAB9, 0xAABD}, + {0xAAC0, 0xAAC0}, {0xAAC2, 0xAAC2}, {0xAADB, 0xAAEB}, + {0xAAEE, 0xAAF5}, {0xAB01, 0xAB06}, {0xAB09, 0xAB0E}, + {0xAB11, 0xAB16}, {0xAB20, 0xAB26}, {0xAB28, 0xAB2E}, + {0xAB30, 0xAB6B}, {0xAB70, 0xABE4}, {0xABE6, 0xABE7}, + {0xABE9, 0xABEC}, {0xABF0, 0xABF9}, {0xAC00, 0xD7A3}, + {0xD7B0, 0xD7C6}, {0xD7CB, 0xD7FB}, {0xF900, 0xFA6D}, + {0xFA70, 0xFAD9}, {0xFB00, 0xFB06}, {0xFB13, 0xFB17}, + {0xFB1D, 0xFB1D}, {0xFB1F, 0xFB36}, {0xFB38, 0xFB3C}, + {0xFB3E, 0xFB3E}, {0xFB40, 0xFB41}, {0xFB43, 0xFB44}, + {0xFB46, 0xFBC2}, {0xFBD3, 0xFD8F}, {0xFD92, 0xFDC7}, + {0xFDCF, 0xFDCF}, {0xFDF0, 0xFDFF}, {0xFE10, 0xFE19}, + {0xFE30, 0xFE52}, {0xFE54, 0xFE66}, {0xFE68, 0xFE6B}, + {0xFE70, 0xFE74}, {0xFE76, 0xFEFC}, {0xFF01, 0xFF9D}, + {0xFFA0, 0xFFBE}, {0xFFC2, 0xFFC7}, {0xFFCA, 0xFFCF}, + {0xFFD2, 0xFFD7}, {0xFFDA, 0xFFDC}, {0xFFE0, 0xFFE6}, + {0xFFE8, 0xFFEE}, {0xFFFC, 0xFFFD}, {0x10000, 0x1000B}, + {0x1000D, 0x10026}, {0x10028, 0x1003A}, {0x1003C, 0x1003D}, + {0x1003F, 0x1004D}, {0x10050, 0x1005D}, {0x10080, 0x100FA}, + {0x10100, 0x10102}, {0x10107, 0x10133}, {0x10137, 0x1018E}, + {0x10190, 0x1019C}, {0x101A0, 0x101A0}, {0x101D0, 0x101FC}, + {0x10280, 0x1029C}, {0x102A0, 0x102D0}, {0x102E1, 0x102FB}, + {0x10300, 0x10323}, {0x1032D, 0x1034A}, {0x10350, 0x10375}, + {0x10380, 0x1039D}, {0x1039F, 0x103C3}, {0x103C8, 0x103D5}, + {0x10400, 0x1049D}, {0x104A0, 0x104A9}, {0x104B0, 0x104D3}, + {0x104D8, 0x104FB}, {0x10500, 0x10527}, {0x10530, 0x10563}, + {0x1056F, 0x1057A}, {0x1057C, 0x1058A}, {0x1058C, 0x10592}, + {0x10594, 0x10595}, {0x10597, 0x105A1}, {0x105A3, 0x105B1}, + {0x105B3, 0x105B9}, {0x105BB, 0x105BC}, {0x10600, 0x10736}, + {0x10740, 0x10755}, {0x10760, 0x10767}, {0x10780, 0x10785}, + {0x10787, 0x107B0}, {0x107B2, 0x107BA}, {0x10800, 0x10805}, + {0x10808, 0x10808}, {0x1080A, 0x10835}, {0x10837, 0x10838}, + {0x1083C, 0x1083C}, {0x1083F, 0x10855}, {0x10857, 0x1089E}, + {0x108A7, 0x108AF}, {0x108E0, 0x108F2}, {0x108F4, 0x108F5}, + {0x108FB, 0x1091B}, {0x1091F, 0x10939}, {0x1093F, 0x1093F}, + {0x10980, 0x109B7}, {0x109BC, 0x109CF}, {0x109D2, 0x10A00}, + {0x10A10, 0x10A13}, {0x10A15, 0x10A17}, {0x10A19, 0x10A35}, + {0x10A40, 0x10A48}, {0x10A50, 0x10A58}, {0x10A60, 0x10A9F}, + {0x10AC0, 0x10AE4}, {0x10AEB, 0x10AF6}, {0x10B00, 0x10B35}, + {0x10B39, 0x10B55}, {0x10B58, 0x10B72}, {0x10B78, 0x10B91}, + {0x10B99, 0x10B9C}, {0x10BA9, 0x10BAF}, {0x10C00, 0x10C48}, + {0x10C80, 0x10CB2}, {0x10CC0, 0x10CF2}, {0x10CFA, 0x10D23}, + {0x10D30, 0x10D39}, {0x10E60, 0x10E7E}, {0x10E80, 0x10EA9}, + {0x10EAD, 0x10EAD}, {0x10EB0, 0x10EB1}, {0x10F00, 0x10F27}, + {0x10F30, 0x10F45}, {0x10F51, 0x10F59}, {0x10F70, 0x10F81}, + {0x10F86, 0x10F89}, {0x10FB0, 0x10FCB}, {0x10FE0, 0x10FF6}, + {0x11000, 0x11000}, {0x11002, 0x11037}, {0x11047, 0x1104D}, + {0x11052, 0x1106F}, {0x11071, 0x11072}, {0x11075, 0x11075}, + {0x11082, 0x110B2}, {0x110B7, 0x110B8}, {0x110BB, 0x110BC}, + {0x110BE, 0x110C1}, {0x110D0, 0x110E8}, {0x110F0, 0x110F9}, + {0x11103, 0x11126}, {0x1112C, 0x1112C}, {0x11136, 0x11147}, + {0x11150, 0x11172}, {0x11174, 0x11176}, {0x11182, 0x111B5}, + {0x111BF, 0x111C8}, {0x111CD, 0x111CE}, {0x111D0, 0x111DF}, + {0x111E1, 0x111F4}, {0x11200, 0x11211}, {0x11213, 0x1122E}, + {0x11232, 0x11233}, {0x11235, 0x11235}, {0x11238, 0x1123D}, + {0x1123F, 0x11240}, {0x11280, 0x11286}, {0x11288, 0x11288}, + {0x1128A, 0x1128D}, {0x1128F, 0x1129D}, {0x1129F, 0x112A9}, + {0x112B0, 0x112DE}, {0x112E0, 0x112E2}, {0x112F0, 0x112F9}, + {0x11302, 0x11303}, {0x11305, 0x1130C}, {0x1130F, 0x11310}, + {0x11313, 0x11328}, {0x1132A, 0x11330}, {0x11332, 0x11333}, + {0x11335, 0x11339}, {0x1133D, 0x1133D}, {0x1133F, 0x1133F}, + {0x11341, 0x11344}, {0x11347, 0x11348}, {0x1134B, 0x1134D}, + {0x11350, 0x11350}, {0x1135D, 0x11363}, {0x11400, 0x11437}, + {0x11440, 0x11441}, {0x11445, 0x11445}, {0x11447, 0x1145B}, + {0x1145D, 0x1145D}, {0x1145F, 0x11461}, {0x11480, 0x114AF}, + {0x114B1, 0x114B2}, {0x114B9, 0x114B9}, {0x114BB, 0x114BC}, + {0x114BE, 0x114BE}, {0x114C1, 0x114C1}, {0x114C4, 0x114C7}, + {0x114D0, 0x114D9}, {0x11580, 0x115AE}, {0x115B0, 0x115B1}, + {0x115B8, 0x115BB}, {0x115BE, 0x115BE}, {0x115C1, 0x115DB}, + {0x11600, 0x11632}, {0x1163B, 0x1163C}, {0x1163E, 0x1163E}, + {0x11641, 0x11644}, {0x11650, 0x11659}, {0x11660, 0x1166C}, + {0x11680, 0x116AA}, {0x116AC, 0x116AC}, {0x116AE, 0x116AF}, + {0x116B6, 0x116B6}, {0x116B8, 0x116B9}, {0x116C0, 0x116C9}, + {0x11700, 0x1171A}, {0x11720, 0x11721}, {0x11726, 0x11726}, + {0x11730, 0x11746}, {0x11800, 0x1182E}, {0x11838, 0x11838}, + {0x1183B, 0x1183B}, {0x118A0, 0x118F2}, {0x118FF, 0x11906}, + {0x11909, 0x11909}, {0x1190C, 0x11913}, {0x11915, 0x11916}, + {0x11918, 0x1192F}, {0x11931, 0x11935}, {0x11937, 0x11938}, + {0x1193D, 0x1193D}, {0x1193F, 0x11942}, {0x11944, 0x11946}, + {0x11950, 0x11959}, {0x119A0, 0x119A7}, {0x119AA, 0x119D3}, + {0x119DC, 0x119DF}, {0x119E1, 0x119E4}, {0x11A00, 0x11A00}, + {0x11A0B, 0x11A32}, {0x11A39, 0x11A3A}, {0x11A3F, 0x11A46}, + {0x11A50, 0x11A50}, {0x11A57, 0x11A58}, {0x11A5C, 0x11A89}, + {0x11A97, 0x11A97}, {0x11A9A, 0x11AA2}, {0x11AB0, 0x11AF8}, + {0x11B00, 0x11B09}, {0x11C00, 0x11C08}, {0x11C0A, 0x11C2F}, + {0x11C3E, 0x11C3E}, {0x11C40, 0x11C45}, {0x11C50, 0x11C6C}, + {0x11C70, 0x11C8F}, {0x11CA9, 0x11CA9}, {0x11CB1, 0x11CB1}, + {0x11CB4, 0x11CB4}, {0x11D00, 0x11D06}, {0x11D08, 0x11D09}, + {0x11D0B, 0x11D30}, {0x11D46, 0x11D46}, {0x11D50, 0x11D59}, + {0x11D60, 0x11D65}, {0x11D67, 0x11D68}, {0x11D6A, 0x11D8E}, + {0x11D93, 0x11D94}, {0x11D96, 0x11D96}, {0x11D98, 0x11D98}, + {0x11DA0, 0x11DA9}, {0x11EE0, 0x11EF2}, {0x11EF5, 0x11EF8}, + {0x11F02, 0x11F10}, {0x11F12, 0x11F35}, {0x11F3E, 0x11F3F}, + {0x11F41, 0x11F41}, {0x11F43, 0x11F59}, {0x11FB0, 0x11FB0}, + {0x11FC0, 0x11FF1}, {0x11FFF, 0x12399}, {0x12400, 0x1246E}, + {0x12470, 0x12474}, {0x12480, 0x12543}, {0x12F90, 0x12FF2}, + {0x13000, 0x1342F}, {0x13441, 0x13446}, {0x14400, 0x14646}, + {0x16800, 0x16A38}, {0x16A40, 0x16A5E}, {0x16A60, 0x16A69}, + {0x16A6E, 0x16ABE}, {0x16AC0, 0x16AC9}, {0x16AD0, 0x16AED}, + {0x16AF5, 0x16AF5}, {0x16B00, 0x16B2F}, {0x16B37, 0x16B45}, + {0x16B50, 0x16B59}, {0x16B5B, 0x16B61}, {0x16B63, 0x16B77}, + {0x16B7D, 0x16B8F}, {0x16E40, 0x16E9A}, {0x16F00, 0x16F4A}, + {0x16F50, 0x16F87}, {0x16F93, 0x16F9F}, {0x16FE0, 0x16FE3}, + {0x16FF0, 0x16FF1}, {0x17000, 0x187F7}, {0x18800, 0x18CD5}, + {0x18D00, 0x18D08}, {0x1AFF0, 0x1AFF3}, {0x1AFF5, 0x1AFFB}, + {0x1AFFD, 0x1AFFE}, {0x1B000, 0x1B122}, {0x1B132, 0x1B132}, + {0x1B150, 0x1B152}, {0x1B155, 0x1B155}, {0x1B164, 0x1B167}, + {0x1B170, 0x1B2FB}, {0x1BC00, 0x1BC6A}, {0x1BC70, 0x1BC7C}, + {0x1BC80, 0x1BC88}, {0x1BC90, 0x1BC99}, {0x1BC9C, 0x1BC9C}, + {0x1BC9F, 0x1BC9F}, {0x1CF50, 0x1CFC3}, {0x1D000, 0x1D0F5}, + {0x1D100, 0x1D126}, {0x1D129, 0x1D164}, {0x1D166, 0x1D166}, + {0x1D16A, 0x1D16D}, {0x1D183, 0x1D184}, {0x1D18C, 0x1D1A9}, + {0x1D1AE, 0x1D1EA}, {0x1D200, 0x1D241}, {0x1D245, 0x1D245}, + {0x1D2C0, 0x1D2D3}, {0x1D2E0, 0x1D2F3}, {0x1D300, 0x1D356}, + {0x1D360, 0x1D378}, {0x1D400, 0x1D454}, {0x1D456, 0x1D49C}, + {0x1D49E, 0x1D49F}, {0x1D4A2, 0x1D4A2}, {0x1D4A5, 0x1D4A6}, + {0x1D4A9, 0x1D4AC}, {0x1D4AE, 0x1D4B9}, {0x1D4BB, 0x1D4BB}, + {0x1D4BD, 0x1D4C3}, {0x1D4C5, 0x1D505}, {0x1D507, 0x1D50A}, + {0x1D50D, 0x1D514}, {0x1D516, 0x1D51C}, {0x1D51E, 0x1D539}, + {0x1D53B, 0x1D53E}, {0x1D540, 0x1D544}, {0x1D546, 0x1D546}, + {0x1D54A, 0x1D550}, {0x1D552, 0x1D6A5}, {0x1D6A8, 0x1D7CB}, + {0x1D7CE, 0x1D9FF}, {0x1DA37, 0x1DA3A}, {0x1DA6D, 0x1DA74}, + {0x1DA76, 0x1DA83}, {0x1DA85, 0x1DA8B}, {0x1DF00, 0x1DF1E}, + {0x1DF25, 0x1DF2A}, {0x1E030, 0x1E06D}, {0x1E100, 0x1E12C}, + {0x1E137, 0x1E13D}, {0x1E140, 0x1E149}, {0x1E14E, 0x1E14F}, + {0x1E290, 0x1E2AD}, {0x1E2C0, 0x1E2EB}, {0x1E2F0, 0x1E2F9}, + {0x1E2FF, 0x1E2FF}, {0x1E4D0, 0x1E4EB}, {0x1E4F0, 0x1E4F9}, + {0x1E7E0, 0x1E7E6}, {0x1E7E8, 0x1E7EB}, {0x1E7ED, 0x1E7EE}, + {0x1E7F0, 0x1E7FE}, {0x1E800, 0x1E8C4}, {0x1E8C7, 0x1E8CF}, + {0x1E900, 0x1E943}, {0x1E94B, 0x1E94B}, {0x1E950, 0x1E959}, + {0x1E95E, 0x1E95F}, {0x1EC71, 0x1ECB4}, {0x1ED01, 0x1ED3D}, + {0x1EE00, 0x1EE03}, {0x1EE05, 0x1EE1F}, {0x1EE21, 0x1EE22}, + {0x1EE24, 0x1EE24}, {0x1EE27, 0x1EE27}, {0x1EE29, 0x1EE32}, + {0x1EE34, 0x1EE37}, {0x1EE39, 0x1EE39}, {0x1EE3B, 0x1EE3B}, + {0x1EE42, 0x1EE42}, {0x1EE47, 0x1EE47}, {0x1EE49, 0x1EE49}, + {0x1EE4B, 0x1EE4B}, {0x1EE4D, 0x1EE4F}, {0x1EE51, 0x1EE52}, + {0x1EE54, 0x1EE54}, {0x1EE57, 0x1EE57}, {0x1EE59, 0x1EE59}, + {0x1EE5B, 0x1EE5B}, {0x1EE5D, 0x1EE5D}, {0x1EE5F, 0x1EE5F}, + {0x1EE61, 0x1EE62}, {0x1EE64, 0x1EE64}, {0x1EE67, 0x1EE6A}, + {0x1EE6C, 0x1EE72}, {0x1EE74, 0x1EE77}, {0x1EE79, 0x1EE7C}, + {0x1EE7E, 0x1EE7E}, {0x1EE80, 0x1EE89}, {0x1EE8B, 0x1EE9B}, + {0x1EEA1, 0x1EEA3}, {0x1EEA5, 0x1EEA9}, {0x1EEAB, 0x1EEBB}, + {0x1EEF0, 0x1EEF1}, {0x1F000, 0x1F02B}, {0x1F030, 0x1F093}, + {0x1F0A0, 0x1F0AE}, {0x1F0B1, 0x1F0BF}, {0x1F0C1, 0x1F0CF}, + {0x1F0D1, 0x1F0F5}, {0x1F100, 0x1F1AD}, {0x1F1E6, 0x1F202}, + {0x1F210, 0x1F23B}, {0x1F240, 0x1F248}, {0x1F250, 0x1F251}, + {0x1F260, 0x1F265}, {0x1F300, 0x1F6D7}, {0x1F6DC, 0x1F6EC}, + {0x1F6F0, 0x1F6FC}, {0x1F700, 0x1F776}, {0x1F77B, 0x1F7D9}, + {0x1F7E0, 0x1F7EB}, {0x1F7F0, 0x1F7F0}, {0x1F800, 0x1F80B}, + {0x1F810, 0x1F847}, {0x1F850, 0x1F859}, {0x1F860, 0x1F887}, + {0x1F890, 0x1F8AD}, {0x1F8B0, 0x1F8B1}, {0x1F900, 0x1FA53}, + {0x1FA60, 0x1FA6D}, {0x1FA70, 0x1FA7C}, {0x1FA80, 0x1FA88}, + {0x1FA90, 0x1FABD}, {0x1FABF, 0x1FAC5}, {0x1FACE, 0x1FADB}, + {0x1FAE0, 0x1FAE8}, {0x1FAF0, 0x1FAF8}, {0x1FB00, 0x1FB92}, + {0x1FB94, 0x1FBCA}, {0x1FBF0, 0x1FBF9}, {0x20000, 0x2A6DF}, + {0x2A700, 0x2B739}, {0x2B740, 0x2B81D}, {0x2B820, 0x2CEA1}, + {0x2CEB0, 0x2EBE0}, {0x2EBF0, 0x2EE5D}, {0x2F800, 0x2FA1D}, + {0x30000, 0x3134A}, {0x31350, 0x323AF}, + // Binary: Changes_When_NFKC_Casefolded + {0x0041, 0x005A}, {0x00A0, 0x00A0}, {0x00A8, 0x00A8}, + {0x00AA, 0x00AA}, {0x00AD, 0x00AD}, {0x00AF, 0x00AF}, + {0x00B2, 0x00B5}, {0x00B8, 0x00BA}, {0x00BC, 0x00BE}, + {0x00C0, 0x00D6}, {0x00D8, 0x00DF}, {0x0100, 0x0100}, + {0x0102, 0x0102}, {0x0104, 0x0104}, {0x0106, 0x0106}, + {0x0108, 0x0108}, {0x010A, 0x010A}, {0x010C, 0x010C}, + {0x010E, 0x010E}, {0x0110, 0x0110}, {0x0112, 0x0112}, + {0x0114, 0x0114}, {0x0116, 0x0116}, {0x0118, 0x0118}, + {0x011A, 0x011A}, {0x011C, 0x011C}, {0x011E, 0x011E}, + {0x0120, 0x0120}, {0x0122, 0x0122}, {0x0124, 0x0124}, + {0x0126, 0x0126}, {0x0128, 0x0128}, {0x012A, 0x012A}, + {0x012C, 0x012C}, {0x012E, 0x012E}, {0x0130, 0x0130}, + {0x0132, 0x0134}, {0x0136, 0x0136}, {0x0139, 0x0139}, + {0x013B, 0x013B}, {0x013D, 0x013D}, {0x013F, 0x0141}, + {0x0143, 0x0143}, {0x0145, 0x0145}, {0x0147, 0x0147}, + {0x0149, 0x014A}, {0x014C, 0x014C}, {0x014E, 0x014E}, + {0x0150, 0x0150}, {0x0152, 0x0152}, {0x0154, 0x0154}, + {0x0156, 0x0156}, {0x0158, 0x0158}, {0x015A, 0x015A}, + {0x015C, 0x015C}, {0x015E, 0x015E}, {0x0160, 0x0160}, + {0x0162, 0x0162}, {0x0164, 0x0164}, {0x0166, 0x0166}, + {0x0168, 0x0168}, {0x016A, 0x016A}, {0x016C, 0x016C}, + {0x016E, 0x016E}, {0x0170, 0x0170}, {0x0172, 0x0172}, + {0x0174, 0x0174}, {0x0176, 0x0176}, {0x0178, 0x0179}, + {0x017B, 0x017B}, {0x017D, 0x017D}, {0x017F, 0x017F}, + {0x0181, 0x0182}, {0x0184, 0x0184}, {0x0186, 0x0187}, + {0x0189, 0x018B}, {0x018E, 0x0191}, {0x0193, 0x0194}, + {0x0196, 0x0198}, {0x019C, 0x019D}, {0x019F, 0x01A0}, + {0x01A2, 0x01A2}, {0x01A4, 0x01A4}, {0x01A6, 0x01A7}, + {0x01A9, 0x01A9}, {0x01AC, 0x01AC}, {0x01AE, 0x01AF}, + {0x01B1, 0x01B3}, {0x01B5, 0x01B5}, {0x01B7, 0x01B8}, + {0x01BC, 0x01BC}, {0x01C4, 0x01CD}, {0x01CF, 0x01CF}, + {0x01D1, 0x01D1}, {0x01D3, 0x01D3}, {0x01D5, 0x01D5}, + {0x01D7, 0x01D7}, {0x01D9, 0x01D9}, {0x01DB, 0x01DB}, + {0x01DE, 0x01DE}, {0x01E0, 0x01E0}, {0x01E2, 0x01E2}, + {0x01E4, 0x01E4}, {0x01E6, 0x01E6}, {0x01E8, 0x01E8}, + {0x01EA, 0x01EA}, {0x01EC, 0x01EC}, {0x01EE, 0x01EE}, + {0x01F1, 0x01F4}, {0x01F6, 0x01F8}, {0x01FA, 0x01FA}, + {0x01FC, 0x01FC}, {0x01FE, 0x01FE}, {0x0200, 0x0200}, + {0x0202, 0x0202}, {0x0204, 0x0204}, {0x0206, 0x0206}, + {0x0208, 0x0208}, {0x020A, 0x020A}, {0x020C, 0x020C}, + {0x020E, 0x020E}, {0x0210, 0x0210}, {0x0212, 0x0212}, + {0x0214, 0x0214}, {0x0216, 0x0216}, {0x0218, 0x0218}, + {0x021A, 0x021A}, {0x021C, 0x021C}, {0x021E, 0x021E}, + {0x0220, 0x0220}, {0x0222, 0x0222}, {0x0224, 0x0224}, + {0x0226, 0x0226}, {0x0228, 0x0228}, {0x022A, 0x022A}, + {0x022C, 0x022C}, {0x022E, 0x022E}, {0x0230, 0x0230}, + {0x0232, 0x0232}, {0x023A, 0x023B}, {0x023D, 0x023E}, + {0x0241, 0x0241}, {0x0243, 0x0246}, {0x0248, 0x0248}, + {0x024A, 0x024A}, {0x024C, 0x024C}, {0x024E, 0x024E}, + {0x02B0, 0x02B8}, {0x02D8, 0x02DD}, {0x02E0, 0x02E4}, + {0x0340, 0x0341}, {0x0343, 0x0345}, {0x034F, 0x034F}, + {0x0370, 0x0370}, {0x0372, 0x0372}, {0x0374, 0x0374}, + {0x0376, 0x0376}, {0x037A, 0x037A}, {0x037E, 0x037F}, + {0x0384, 0x038A}, {0x038C, 0x038C}, {0x038E, 0x038F}, + {0x0391, 0x03A1}, {0x03A3, 0x03AB}, {0x03C2, 0x03C2}, + {0x03CF, 0x03D6}, {0x03D8, 0x03D8}, {0x03DA, 0x03DA}, + {0x03DC, 0x03DC}, {0x03DE, 0x03DE}, {0x03E0, 0x03E0}, + {0x03E2, 0x03E2}, {0x03E4, 0x03E4}, {0x03E6, 0x03E6}, + {0x03E8, 0x03E8}, {0x03EA, 0x03EA}, {0x03EC, 0x03EC}, + {0x03EE, 0x03EE}, {0x03F0, 0x03F2}, {0x03F4, 0x03F5}, + {0x03F7, 0x03F7}, {0x03F9, 0x03FA}, {0x03FD, 0x042F}, + {0x0460, 0x0460}, {0x0462, 0x0462}, {0x0464, 0x0464}, + {0x0466, 0x0466}, {0x0468, 0x0468}, {0x046A, 0x046A}, + {0x046C, 0x046C}, {0x046E, 0x046E}, {0x0470, 0x0470}, + {0x0472, 0x0472}, {0x0474, 0x0474}, {0x0476, 0x0476}, + {0x0478, 0x0478}, {0x047A, 0x047A}, {0x047C, 0x047C}, + {0x047E, 0x047E}, {0x0480, 0x0480}, {0x048A, 0x048A}, + {0x048C, 0x048C}, {0x048E, 0x048E}, {0x0490, 0x0490}, + {0x0492, 0x0492}, {0x0494, 0x0494}, {0x0496, 0x0496}, + {0x0498, 0x0498}, {0x049A, 0x049A}, {0x049C, 0x049C}, + {0x049E, 0x049E}, {0x04A0, 0x04A0}, {0x04A2, 0x04A2}, + {0x04A4, 0x04A4}, {0x04A6, 0x04A6}, {0x04A8, 0x04A8}, + {0x04AA, 0x04AA}, {0x04AC, 0x04AC}, {0x04AE, 0x04AE}, + {0x04B0, 0x04B0}, {0x04B2, 0x04B2}, {0x04B4, 0x04B4}, + {0x04B6, 0x04B6}, {0x04B8, 0x04B8}, {0x04BA, 0x04BA}, + {0x04BC, 0x04BC}, {0x04BE, 0x04BE}, {0x04C0, 0x04C1}, + {0x04C3, 0x04C3}, {0x04C5, 0x04C5}, {0x04C7, 0x04C7}, + {0x04C9, 0x04C9}, {0x04CB, 0x04CB}, {0x04CD, 0x04CD}, + {0x04D0, 0x04D0}, {0x04D2, 0x04D2}, {0x04D4, 0x04D4}, + {0x04D6, 0x04D6}, {0x04D8, 0x04D8}, {0x04DA, 0x04DA}, + {0x04DC, 0x04DC}, {0x04DE, 0x04DE}, {0x04E0, 0x04E0}, + {0x04E2, 0x04E2}, {0x04E4, 0x04E4}, {0x04E6, 0x04E6}, + {0x04E8, 0x04E8}, {0x04EA, 0x04EA}, {0x04EC, 0x04EC}, + {0x04EE, 0x04EE}, {0x04F0, 0x04F0}, {0x04F2, 0x04F2}, + {0x04F4, 0x04F4}, {0x04F6, 0x04F6}, {0x04F8, 0x04F8}, + {0x04FA, 0x04FA}, {0x04FC, 0x04FC}, {0x04FE, 0x04FE}, + {0x0500, 0x0500}, {0x0502, 0x0502}, {0x0504, 0x0504}, + {0x0506, 0x0506}, {0x0508, 0x0508}, {0x050A, 0x050A}, + {0x050C, 0x050C}, {0x050E, 0x050E}, {0x0510, 0x0510}, + {0x0512, 0x0512}, {0x0514, 0x0514}, {0x0516, 0x0516}, + {0x0518, 0x0518}, {0x051A, 0x051A}, {0x051C, 0x051C}, + {0x051E, 0x051E}, {0x0520, 0x0520}, {0x0522, 0x0522}, + {0x0524, 0x0524}, {0x0526, 0x0526}, {0x0528, 0x0528}, + {0x052A, 0x052A}, {0x052C, 0x052C}, {0x052E, 0x052E}, + {0x0531, 0x0556}, {0x0587, 0x0587}, {0x061C, 0x061C}, + {0x0675, 0x0678}, {0x0958, 0x095F}, {0x09DC, 0x09DD}, + {0x09DF, 0x09DF}, {0x0A33, 0x0A33}, {0x0A36, 0x0A36}, + {0x0A59, 0x0A5B}, {0x0A5E, 0x0A5E}, {0x0B5C, 0x0B5D}, + {0x0E33, 0x0E33}, {0x0EB3, 0x0EB3}, {0x0EDC, 0x0EDD}, + {0x0F0C, 0x0F0C}, {0x0F43, 0x0F43}, {0x0F4D, 0x0F4D}, + {0x0F52, 0x0F52}, {0x0F57, 0x0F57}, {0x0F5C, 0x0F5C}, + {0x0F69, 0x0F69}, {0x0F73, 0x0F73}, {0x0F75, 0x0F79}, + {0x0F81, 0x0F81}, {0x0F93, 0x0F93}, {0x0F9D, 0x0F9D}, + {0x0FA2, 0x0FA2}, {0x0FA7, 0x0FA7}, {0x0FAC, 0x0FAC}, + {0x0FB9, 0x0FB9}, {0x10A0, 0x10C5}, {0x10C7, 0x10C7}, + {0x10CD, 0x10CD}, {0x10FC, 0x10FC}, {0x115F, 0x1160}, + {0x13F8, 0x13FD}, {0x17B4, 0x17B5}, {0x180B, 0x180F}, + {0x1C80, 0x1C88}, {0x1C90, 0x1CBA}, {0x1CBD, 0x1CBF}, + {0x1D2C, 0x1D2E}, {0x1D30, 0x1D3A}, {0x1D3C, 0x1D4D}, + {0x1D4F, 0x1D6A}, {0x1D78, 0x1D78}, {0x1D9B, 0x1DBF}, + {0x1E00, 0x1E00}, {0x1E02, 0x1E02}, {0x1E04, 0x1E04}, + {0x1E06, 0x1E06}, {0x1E08, 0x1E08}, {0x1E0A, 0x1E0A}, + {0x1E0C, 0x1E0C}, {0x1E0E, 0x1E0E}, {0x1E10, 0x1E10}, + {0x1E12, 0x1E12}, {0x1E14, 0x1E14}, {0x1E16, 0x1E16}, + {0x1E18, 0x1E18}, {0x1E1A, 0x1E1A}, {0x1E1C, 0x1E1C}, + {0x1E1E, 0x1E1E}, {0x1E20, 0x1E20}, {0x1E22, 0x1E22}, + {0x1E24, 0x1E24}, {0x1E26, 0x1E26}, {0x1E28, 0x1E28}, + {0x1E2A, 0x1E2A}, {0x1E2C, 0x1E2C}, {0x1E2E, 0x1E2E}, + {0x1E30, 0x1E30}, {0x1E32, 0x1E32}, {0x1E34, 0x1E34}, + {0x1E36, 0x1E36}, {0x1E38, 0x1E38}, {0x1E3A, 0x1E3A}, + {0x1E3C, 0x1E3C}, {0x1E3E, 0x1E3E}, {0x1E40, 0x1E40}, + {0x1E42, 0x1E42}, {0x1E44, 0x1E44}, {0x1E46, 0x1E46}, + {0x1E48, 0x1E48}, {0x1E4A, 0x1E4A}, {0x1E4C, 0x1E4C}, + {0x1E4E, 0x1E4E}, {0x1E50, 0x1E50}, {0x1E52, 0x1E52}, + {0x1E54, 0x1E54}, {0x1E56, 0x1E56}, {0x1E58, 0x1E58}, + {0x1E5A, 0x1E5A}, {0x1E5C, 0x1E5C}, {0x1E5E, 0x1E5E}, + {0x1E60, 0x1E60}, {0x1E62, 0x1E62}, {0x1E64, 0x1E64}, + {0x1E66, 0x1E66}, {0x1E68, 0x1E68}, {0x1E6A, 0x1E6A}, + {0x1E6C, 0x1E6C}, {0x1E6E, 0x1E6E}, {0x1E70, 0x1E70}, + {0x1E72, 0x1E72}, {0x1E74, 0x1E74}, {0x1E76, 0x1E76}, + {0x1E78, 0x1E78}, {0x1E7A, 0x1E7A}, {0x1E7C, 0x1E7C}, + {0x1E7E, 0x1E7E}, {0x1E80, 0x1E80}, {0x1E82, 0x1E82}, + {0x1E84, 0x1E84}, {0x1E86, 0x1E86}, {0x1E88, 0x1E88}, + {0x1E8A, 0x1E8A}, {0x1E8C, 0x1E8C}, {0x1E8E, 0x1E8E}, + {0x1E90, 0x1E90}, {0x1E92, 0x1E92}, {0x1E94, 0x1E94}, + {0x1E9A, 0x1E9B}, {0x1E9E, 0x1E9E}, {0x1EA0, 0x1EA0}, + {0x1EA2, 0x1EA2}, {0x1EA4, 0x1EA4}, {0x1EA6, 0x1EA6}, + {0x1EA8, 0x1EA8}, {0x1EAA, 0x1EAA}, {0x1EAC, 0x1EAC}, + {0x1EAE, 0x1EAE}, {0x1EB0, 0x1EB0}, {0x1EB2, 0x1EB2}, + {0x1EB4, 0x1EB4}, {0x1EB6, 0x1EB6}, {0x1EB8, 0x1EB8}, + {0x1EBA, 0x1EBA}, {0x1EBC, 0x1EBC}, {0x1EBE, 0x1EBE}, + {0x1EC0, 0x1EC0}, {0x1EC2, 0x1EC2}, {0x1EC4, 0x1EC4}, + {0x1EC6, 0x1EC6}, {0x1EC8, 0x1EC8}, {0x1ECA, 0x1ECA}, + {0x1ECC, 0x1ECC}, {0x1ECE, 0x1ECE}, {0x1ED0, 0x1ED0}, + {0x1ED2, 0x1ED2}, {0x1ED4, 0x1ED4}, {0x1ED6, 0x1ED6}, + {0x1ED8, 0x1ED8}, {0x1EDA, 0x1EDA}, {0x1EDC, 0x1EDC}, + {0x1EDE, 0x1EDE}, {0x1EE0, 0x1EE0}, {0x1EE2, 0x1EE2}, + {0x1EE4, 0x1EE4}, {0x1EE6, 0x1EE6}, {0x1EE8, 0x1EE8}, + {0x1EEA, 0x1EEA}, {0x1EEC, 0x1EEC}, {0x1EEE, 0x1EEE}, + {0x1EF0, 0x1EF0}, {0x1EF2, 0x1EF2}, {0x1EF4, 0x1EF4}, + {0x1EF6, 0x1EF6}, {0x1EF8, 0x1EF8}, {0x1EFA, 0x1EFA}, + {0x1EFC, 0x1EFC}, {0x1EFE, 0x1EFE}, {0x1F08, 0x1F0F}, + {0x1F18, 0x1F1D}, {0x1F28, 0x1F2F}, {0x1F38, 0x1F3F}, + {0x1F48, 0x1F4D}, {0x1F59, 0x1F59}, {0x1F5B, 0x1F5B}, + {0x1F5D, 0x1F5D}, {0x1F5F, 0x1F5F}, {0x1F68, 0x1F6F}, + {0x1F71, 0x1F71}, {0x1F73, 0x1F73}, {0x1F75, 0x1F75}, + {0x1F77, 0x1F77}, {0x1F79, 0x1F79}, {0x1F7B, 0x1F7B}, + {0x1F7D, 0x1F7D}, {0x1F80, 0x1FAF}, {0x1FB2, 0x1FB4}, + {0x1FB7, 0x1FC4}, {0x1FC7, 0x1FCF}, {0x1FD3, 0x1FD3}, + {0x1FD8, 0x1FDB}, {0x1FDD, 0x1FDF}, {0x1FE3, 0x1FE3}, + {0x1FE8, 0x1FEF}, {0x1FF2, 0x1FF4}, {0x1FF7, 0x1FFE}, + {0x2000, 0x200F}, {0x2011, 0x2011}, {0x2017, 0x2017}, + {0x2024, 0x2026}, {0x202A, 0x202F}, {0x2033, 0x2034}, + {0x2036, 0x2037}, {0x203C, 0x203C}, {0x203E, 0x203E}, + {0x2047, 0x2049}, {0x2057, 0x2057}, {0x205F, 0x2071}, + {0x2074, 0x208E}, {0x2090, 0x209C}, {0x20A8, 0x20A8}, + {0x2100, 0x2103}, {0x2105, 0x2107}, {0x2109, 0x2113}, + {0x2115, 0x2116}, {0x2119, 0x211D}, {0x2120, 0x2122}, + {0x2124, 0x2124}, {0x2126, 0x2126}, {0x2128, 0x2128}, + {0x212A, 0x212D}, {0x212F, 0x2139}, {0x213B, 0x2140}, + {0x2145, 0x2149}, {0x2150, 0x217F}, {0x2183, 0x2183}, + {0x2189, 0x2189}, {0x222C, 0x222D}, {0x222F, 0x2230}, + {0x2329, 0x232A}, {0x2460, 0x24EA}, {0x2A0C, 0x2A0C}, + {0x2A74, 0x2A76}, {0x2ADC, 0x2ADC}, {0x2C00, 0x2C2F}, + {0x2C60, 0x2C60}, {0x2C62, 0x2C64}, {0x2C67, 0x2C67}, + {0x2C69, 0x2C69}, {0x2C6B, 0x2C6B}, {0x2C6D, 0x2C70}, + {0x2C72, 0x2C72}, {0x2C75, 0x2C75}, {0x2C7C, 0x2C80}, + {0x2C82, 0x2C82}, {0x2C84, 0x2C84}, {0x2C86, 0x2C86}, + {0x2C88, 0x2C88}, {0x2C8A, 0x2C8A}, {0x2C8C, 0x2C8C}, + {0x2C8E, 0x2C8E}, {0x2C90, 0x2C90}, {0x2C92, 0x2C92}, + {0x2C94, 0x2C94}, {0x2C96, 0x2C96}, {0x2C98, 0x2C98}, + {0x2C9A, 0x2C9A}, {0x2C9C, 0x2C9C}, {0x2C9E, 0x2C9E}, + {0x2CA0, 0x2CA0}, {0x2CA2, 0x2CA2}, {0x2CA4, 0x2CA4}, + {0x2CA6, 0x2CA6}, {0x2CA8, 0x2CA8}, {0x2CAA, 0x2CAA}, + {0x2CAC, 0x2CAC}, {0x2CAE, 0x2CAE}, {0x2CB0, 0x2CB0}, + {0x2CB2, 0x2CB2}, {0x2CB4, 0x2CB4}, {0x2CB6, 0x2CB6}, + {0x2CB8, 0x2CB8}, {0x2CBA, 0x2CBA}, {0x2CBC, 0x2CBC}, + {0x2CBE, 0x2CBE}, {0x2CC0, 0x2CC0}, {0x2CC2, 0x2CC2}, + {0x2CC4, 0x2CC4}, {0x2CC6, 0x2CC6}, {0x2CC8, 0x2CC8}, + {0x2CCA, 0x2CCA}, {0x2CCC, 0x2CCC}, {0x2CCE, 0x2CCE}, + {0x2CD0, 0x2CD0}, {0x2CD2, 0x2CD2}, {0x2CD4, 0x2CD4}, + {0x2CD6, 0x2CD6}, {0x2CD8, 0x2CD8}, {0x2CDA, 0x2CDA}, + {0x2CDC, 0x2CDC}, {0x2CDE, 0x2CDE}, {0x2CE0, 0x2CE0}, + {0x2CE2, 0x2CE2}, {0x2CEB, 0x2CEB}, {0x2CED, 0x2CED}, + {0x2CF2, 0x2CF2}, {0x2D6F, 0x2D6F}, {0x2E9F, 0x2E9F}, + {0x2EF3, 0x2EF3}, {0x2F00, 0x2FD5}, {0x3000, 0x3000}, + {0x3036, 0x3036}, {0x3038, 0x303A}, {0x309B, 0x309C}, + {0x309F, 0x309F}, {0x30FF, 0x30FF}, {0x3131, 0x318E}, + {0x3192, 0x319F}, {0x3200, 0x321E}, {0x3220, 0x3247}, + {0x3250, 0x327E}, {0x3280, 0x33FF}, {0xA640, 0xA640}, + {0xA642, 0xA642}, {0xA644, 0xA644}, {0xA646, 0xA646}, + {0xA648, 0xA648}, {0xA64A, 0xA64A}, {0xA64C, 0xA64C}, + {0xA64E, 0xA64E}, {0xA650, 0xA650}, {0xA652, 0xA652}, + {0xA654, 0xA654}, {0xA656, 0xA656}, {0xA658, 0xA658}, + {0xA65A, 0xA65A}, {0xA65C, 0xA65C}, {0xA65E, 0xA65E}, + {0xA660, 0xA660}, {0xA662, 0xA662}, {0xA664, 0xA664}, + {0xA666, 0xA666}, {0xA668, 0xA668}, {0xA66A, 0xA66A}, + {0xA66C, 0xA66C}, {0xA680, 0xA680}, {0xA682, 0xA682}, + {0xA684, 0xA684}, {0xA686, 0xA686}, {0xA688, 0xA688}, + {0xA68A, 0xA68A}, {0xA68C, 0xA68C}, {0xA68E, 0xA68E}, + {0xA690, 0xA690}, {0xA692, 0xA692}, {0xA694, 0xA694}, + {0xA696, 0xA696}, {0xA698, 0xA698}, {0xA69A, 0xA69A}, + {0xA69C, 0xA69D}, {0xA722, 0xA722}, {0xA724, 0xA724}, + {0xA726, 0xA726}, {0xA728, 0xA728}, {0xA72A, 0xA72A}, + {0xA72C, 0xA72C}, {0xA72E, 0xA72E}, {0xA732, 0xA732}, + {0xA734, 0xA734}, {0xA736, 0xA736}, {0xA738, 0xA738}, + {0xA73A, 0xA73A}, {0xA73C, 0xA73C}, {0xA73E, 0xA73E}, + {0xA740, 0xA740}, {0xA742, 0xA742}, {0xA744, 0xA744}, + {0xA746, 0xA746}, {0xA748, 0xA748}, {0xA74A, 0xA74A}, + {0xA74C, 0xA74C}, {0xA74E, 0xA74E}, {0xA750, 0xA750}, + {0xA752, 0xA752}, {0xA754, 0xA754}, {0xA756, 0xA756}, + {0xA758, 0xA758}, {0xA75A, 0xA75A}, {0xA75C, 0xA75C}, + {0xA75E, 0xA75E}, {0xA760, 0xA760}, {0xA762, 0xA762}, + {0xA764, 0xA764}, {0xA766, 0xA766}, {0xA768, 0xA768}, + {0xA76A, 0xA76A}, {0xA76C, 0xA76C}, {0xA76E, 0xA76E}, + {0xA770, 0xA770}, {0xA779, 0xA779}, {0xA77B, 0xA77B}, + {0xA77D, 0xA77E}, {0xA780, 0xA780}, {0xA782, 0xA782}, + {0xA784, 0xA784}, {0xA786, 0xA786}, {0xA78B, 0xA78B}, + {0xA78D, 0xA78D}, {0xA790, 0xA790}, {0xA792, 0xA792}, + {0xA796, 0xA796}, {0xA798, 0xA798}, {0xA79A, 0xA79A}, + {0xA79C, 0xA79C}, {0xA79E, 0xA79E}, {0xA7A0, 0xA7A0}, + {0xA7A2, 0xA7A2}, {0xA7A4, 0xA7A4}, {0xA7A6, 0xA7A6}, + {0xA7A8, 0xA7A8}, {0xA7AA, 0xA7AE}, {0xA7B0, 0xA7B4}, + {0xA7B6, 0xA7B6}, {0xA7B8, 0xA7B8}, {0xA7BA, 0xA7BA}, + {0xA7BC, 0xA7BC}, {0xA7BE, 0xA7BE}, {0xA7C0, 0xA7C0}, + {0xA7C2, 0xA7C2}, {0xA7C4, 0xA7C7}, {0xA7C9, 0xA7C9}, + {0xA7D0, 0xA7D0}, {0xA7D6, 0xA7D6}, {0xA7D8, 0xA7D8}, + {0xA7F2, 0xA7F5}, {0xA7F8, 0xA7F9}, {0xAB5C, 0xAB5F}, + {0xAB69, 0xAB69}, {0xAB70, 0xABBF}, {0xF900, 0xFA0D}, + {0xFA10, 0xFA10}, {0xFA12, 0xFA12}, {0xFA15, 0xFA1E}, + {0xFA20, 0xFA20}, {0xFA22, 0xFA22}, {0xFA25, 0xFA26}, + {0xFA2A, 0xFA6D}, {0xFA70, 0xFAD9}, {0xFB00, 0xFB06}, + {0xFB13, 0xFB17}, {0xFB1D, 0xFB1D}, {0xFB1F, 0xFB36}, + {0xFB38, 0xFB3C}, {0xFB3E, 0xFB3E}, {0xFB40, 0xFB41}, + {0xFB43, 0xFB44}, {0xFB46, 0xFBB1}, {0xFBD3, 0xFD3D}, + {0xFD50, 0xFD8F}, {0xFD92, 0xFDC7}, {0xFDF0, 0xFDFC}, + {0xFE00, 0xFE19}, {0xFE30, 0xFE44}, {0xFE47, 0xFE52}, + {0xFE54, 0xFE66}, {0xFE68, 0xFE6B}, {0xFE70, 0xFE72}, + {0xFE74, 0xFE74}, {0xFE76, 0xFEFC}, {0xFEFF, 0xFEFF}, + {0xFF01, 0xFFBE}, {0xFFC2, 0xFFC7}, {0xFFCA, 0xFFCF}, + {0xFFD2, 0xFFD7}, {0xFFDA, 0xFFDC}, {0xFFE0, 0xFFE6}, + {0xFFE8, 0xFFEE}, {0xFFF0, 0xFFF8}, {0x10400, 0x10427}, + {0x104B0, 0x104D3}, {0x10570, 0x1057A}, {0x1057C, 0x1058A}, + {0x1058C, 0x10592}, {0x10594, 0x10595}, {0x10781, 0x10785}, + {0x10787, 0x107B0}, {0x107B2, 0x107BA}, {0x10C80, 0x10CB2}, + {0x118A0, 0x118BF}, {0x16E40, 0x16E5F}, {0x1BCA0, 0x1BCA3}, + {0x1D15E, 0x1D164}, {0x1D173, 0x1D17A}, {0x1D1BB, 0x1D1C0}, + {0x1D400, 0x1D454}, {0x1D456, 0x1D49C}, {0x1D49E, 0x1D49F}, + {0x1D4A2, 0x1D4A2}, {0x1D4A5, 0x1D4A6}, {0x1D4A9, 0x1D4AC}, + {0x1D4AE, 0x1D4B9}, {0x1D4BB, 0x1D4BB}, {0x1D4BD, 0x1D4C3}, + {0x1D4C5, 0x1D505}, {0x1D507, 0x1D50A}, {0x1D50D, 0x1D514}, + {0x1D516, 0x1D51C}, {0x1D51E, 0x1D539}, {0x1D53B, 0x1D53E}, + {0x1D540, 0x1D544}, {0x1D546, 0x1D546}, {0x1D54A, 0x1D550}, + {0x1D552, 0x1D6A5}, {0x1D6A8, 0x1D7CB}, {0x1D7CE, 0x1D7FF}, + {0x1E030, 0x1E06D}, {0x1E900, 0x1E921}, {0x1EE00, 0x1EE03}, + {0x1EE05, 0x1EE1F}, {0x1EE21, 0x1EE22}, {0x1EE24, 0x1EE24}, + {0x1EE27, 0x1EE27}, {0x1EE29, 0x1EE32}, {0x1EE34, 0x1EE37}, + {0x1EE39, 0x1EE39}, {0x1EE3B, 0x1EE3B}, {0x1EE42, 0x1EE42}, + {0x1EE47, 0x1EE47}, {0x1EE49, 0x1EE49}, {0x1EE4B, 0x1EE4B}, + {0x1EE4D, 0x1EE4F}, {0x1EE51, 0x1EE52}, {0x1EE54, 0x1EE54}, + {0x1EE57, 0x1EE57}, {0x1EE59, 0x1EE59}, {0x1EE5B, 0x1EE5B}, + {0x1EE5D, 0x1EE5D}, {0x1EE5F, 0x1EE5F}, {0x1EE61, 0x1EE62}, + {0x1EE64, 0x1EE64}, {0x1EE67, 0x1EE6A}, {0x1EE6C, 0x1EE72}, + {0x1EE74, 0x1EE77}, {0x1EE79, 0x1EE7C}, {0x1EE7E, 0x1EE7E}, + {0x1EE80, 0x1EE89}, {0x1EE8B, 0x1EE9B}, {0x1EEA1, 0x1EEA3}, + {0x1EEA5, 0x1EEA9}, {0x1EEAB, 0x1EEBB}, {0x1F100, 0x1F10A}, + {0x1F110, 0x1F12E}, {0x1F130, 0x1F14F}, {0x1F16A, 0x1F16C}, + {0x1F190, 0x1F190}, {0x1F200, 0x1F202}, {0x1F210, 0x1F23B}, + {0x1F240, 0x1F248}, {0x1F250, 0x1F251}, {0x1FBF0, 0x1FBF9}, + {0x2F800, 0x2FA1D}, {0xE0000, 0xE0FFF}, + // Binary: Bidi_Mirrored + {0x0028, 0x0029}, {0x003C, 0x003C}, {0x003E, 0x003E}, + {0x005B, 0x005B}, {0x005D, 0x005D}, {0x007B, 0x007B}, + {0x007D, 0x007D}, {0x00AB, 0x00AB}, {0x00BB, 0x00BB}, + {0x0F3A, 0x0F3D}, {0x169B, 0x169C}, {0x2039, 0x203A}, + {0x2045, 0x2046}, {0x207D, 0x207E}, {0x208D, 0x208E}, + {0x2140, 0x2140}, {0x2201, 0x2204}, {0x2208, 0x220D}, + {0x2211, 0x2211}, {0x2215, 0x2216}, {0x221A, 0x221D}, + {0x221F, 0x2222}, {0x2224, 0x2224}, {0x2226, 0x2226}, + {0x222B, 0x2233}, {0x2239, 0x2239}, {0x223B, 0x224C}, + {0x2252, 0x2255}, {0x225F, 0x2260}, {0x2262, 0x2262}, + {0x2264, 0x226B}, {0x226E, 0x228C}, {0x228F, 0x2292}, + {0x2298, 0x2298}, {0x22A2, 0x22A3}, {0x22A6, 0x22B8}, + {0x22BE, 0x22BF}, {0x22C9, 0x22CD}, {0x22D0, 0x22D1}, + {0x22D6, 0x22ED}, {0x22F0, 0x22FF}, {0x2308, 0x230B}, + {0x2320, 0x2321}, {0x2329, 0x232A}, {0x2768, 0x2775}, + {0x27C0, 0x27C0}, {0x27C3, 0x27C6}, {0x27C8, 0x27C9}, + {0x27CB, 0x27CD}, {0x27D3, 0x27D6}, {0x27DC, 0x27DE}, + {0x27E2, 0x27EF}, {0x2983, 0x2998}, {0x299B, 0x29A0}, + {0x29A2, 0x29AF}, {0x29B8, 0x29B8}, {0x29C0, 0x29C5}, + {0x29C9, 0x29C9}, {0x29CE, 0x29D2}, {0x29D4, 0x29D5}, + {0x29D8, 0x29DC}, {0x29E1, 0x29E1}, {0x29E3, 0x29E5}, + {0x29E8, 0x29E9}, {0x29F4, 0x29F9}, {0x29FC, 0x29FD}, + {0x2A0A, 0x2A1C}, {0x2A1E, 0x2A21}, {0x2A24, 0x2A24}, + {0x2A26, 0x2A26}, {0x2A29, 0x2A29}, {0x2A2B, 0x2A2E}, + {0x2A34, 0x2A35}, {0x2A3C, 0x2A3E}, {0x2A57, 0x2A58}, + {0x2A64, 0x2A65}, {0x2A6A, 0x2A6D}, {0x2A6F, 0x2A70}, + {0x2A73, 0x2A74}, {0x2A79, 0x2AA3}, {0x2AA6, 0x2AAD}, + {0x2AAF, 0x2AD6}, {0x2ADC, 0x2ADC}, {0x2ADE, 0x2ADE}, + {0x2AE2, 0x2AE6}, {0x2AEC, 0x2AEE}, {0x2AF3, 0x2AF3}, + {0x2AF7, 0x2AFB}, {0x2AFD, 0x2AFD}, {0x2BFE, 0x2BFE}, + {0x2E02, 0x2E05}, {0x2E09, 0x2E0A}, {0x2E0C, 0x2E0D}, + {0x2E1C, 0x2E1D}, {0x2E20, 0x2E29}, {0x2E55, 0x2E5C}, + {0x3008, 0x3011}, {0x3014, 0x301B}, {0xFE59, 0xFE5E}, + {0xFE64, 0xFE65}, {0xFF08, 0xFF09}, {0xFF1C, 0xFF1C}, + {0xFF1E, 0xFF1E}, {0xFF3B, 0xFF3B}, {0xFF3D, 0xFF3D}, + {0xFF5B, 0xFF5B}, {0xFF5D, 0xFF5D}, {0xFF5F, 0xFF60}, + {0xFF62, 0xFF63}, {0x1D6DB, 0x1D6DB}, {0x1D715, 0x1D715}, + {0x1D74F, 0x1D74F}, {0x1D789, 0x1D789}, {0x1D7C3, 0x1D7C3}, + // Binary: Emoji + {0x0023, 0x0023}, {0x002A, 0x002A}, {0x0030, 0x0039}, + {0x00A9, 0x00A9}, {0x00AE, 0x00AE}, {0x203C, 0x203C}, + {0x2049, 0x2049}, {0x2122, 0x2122}, {0x2139, 0x2139}, + {0x2194, 0x2199}, {0x21A9, 0x21AA}, {0x231A, 0x231B}, + {0x2328, 0x2328}, {0x23CF, 0x23CF}, {0x23E9, 0x23F3}, + {0x23F8, 0x23FA}, {0x24C2, 0x24C2}, {0x25AA, 0x25AB}, + {0x25B6, 0x25B6}, {0x25C0, 0x25C0}, {0x25FB, 0x25FE}, + {0x2600, 0x2604}, {0x260E, 0x260E}, {0x2611, 0x2611}, + {0x2614, 0x2615}, {0x2618, 0x2618}, {0x261D, 0x261D}, + {0x2620, 0x2620}, {0x2622, 0x2623}, {0x2626, 0x2626}, + {0x262A, 0x262A}, {0x262E, 0x262F}, {0x2638, 0x263A}, + {0x2640, 0x2640}, {0x2642, 0x2642}, {0x2648, 0x2653}, + {0x265F, 0x2660}, {0x2663, 0x2663}, {0x2665, 0x2666}, + {0x2668, 0x2668}, {0x267B, 0x267B}, {0x267E, 0x267F}, + {0x2692, 0x2697}, {0x2699, 0x2699}, {0x269B, 0x269C}, + {0x26A0, 0x26A1}, {0x26A7, 0x26A7}, {0x26AA, 0x26AB}, + {0x26B0, 0x26B1}, {0x26BD, 0x26BE}, {0x26C4, 0x26C5}, + {0x26C8, 0x26C8}, {0x26CE, 0x26CF}, {0x26D1, 0x26D1}, + {0x26D3, 0x26D4}, {0x26E9, 0x26EA}, {0x26F0, 0x26F5}, + {0x26F7, 0x26FA}, {0x26FD, 0x26FD}, {0x2702, 0x2702}, + {0x2705, 0x2705}, {0x2708, 0x270D}, {0x270F, 0x270F}, + {0x2712, 0x2712}, {0x2714, 0x2714}, {0x2716, 0x2716}, + {0x271D, 0x271D}, {0x2721, 0x2721}, {0x2728, 0x2728}, + {0x2733, 0x2734}, {0x2744, 0x2744}, {0x2747, 0x2747}, + {0x274C, 0x274C}, {0x274E, 0x274E}, {0x2753, 0x2755}, + {0x2757, 0x2757}, {0x2763, 0x2764}, {0x2795, 0x2797}, + {0x27A1, 0x27A1}, {0x27B0, 0x27B0}, {0x27BF, 0x27BF}, + {0x2934, 0x2935}, {0x2B05, 0x2B07}, {0x2B1B, 0x2B1C}, + {0x2B50, 0x2B50}, {0x2B55, 0x2B55}, {0x3030, 0x3030}, + {0x303D, 0x303D}, {0x3297, 0x3297}, {0x3299, 0x3299}, + {0x1F004, 0x1F004}, {0x1F0CF, 0x1F0CF}, {0x1F170, 0x1F171}, + {0x1F17E, 0x1F17F}, {0x1F18E, 0x1F18E}, {0x1F191, 0x1F19A}, + {0x1F1E6, 0x1F1FF}, {0x1F201, 0x1F202}, {0x1F21A, 0x1F21A}, + {0x1F22F, 0x1F22F}, {0x1F232, 0x1F23A}, {0x1F250, 0x1F251}, + {0x1F300, 0x1F321}, {0x1F324, 0x1F393}, {0x1F396, 0x1F397}, + {0x1F399, 0x1F39B}, {0x1F39E, 0x1F3F0}, {0x1F3F3, 0x1F3F5}, + {0x1F3F7, 0x1F4FD}, {0x1F4FF, 0x1F53D}, {0x1F549, 0x1F54E}, + {0x1F550, 0x1F567}, {0x1F56F, 0x1F570}, {0x1F573, 0x1F57A}, + {0x1F587, 0x1F587}, {0x1F58A, 0x1F58D}, {0x1F590, 0x1F590}, + {0x1F595, 0x1F596}, {0x1F5A4, 0x1F5A5}, {0x1F5A8, 0x1F5A8}, + {0x1F5B1, 0x1F5B2}, {0x1F5BC, 0x1F5BC}, {0x1F5C2, 0x1F5C4}, + {0x1F5D1, 0x1F5D3}, {0x1F5DC, 0x1F5DE}, {0x1F5E1, 0x1F5E1}, + {0x1F5E3, 0x1F5E3}, {0x1F5E8, 0x1F5E8}, {0x1F5EF, 0x1F5EF}, + {0x1F5F3, 0x1F5F3}, {0x1F5FA, 0x1F64F}, {0x1F680, 0x1F6C5}, + {0x1F6CB, 0x1F6D2}, {0x1F6D5, 0x1F6D7}, {0x1F6DC, 0x1F6E5}, + {0x1F6E9, 0x1F6E9}, {0x1F6EB, 0x1F6EC}, {0x1F6F0, 0x1F6F0}, + {0x1F6F3, 0x1F6FC}, {0x1F7E0, 0x1F7EB}, {0x1F7F0, 0x1F7F0}, + {0x1F90C, 0x1F93A}, {0x1F93C, 0x1F945}, {0x1F947, 0x1F9FF}, + {0x1FA70, 0x1FA7C}, {0x1FA80, 0x1FA88}, {0x1FA90, 0x1FABD}, + {0x1FABF, 0x1FAC5}, {0x1FACE, 0x1FADB}, {0x1FAE0, 0x1FAE8}, + {0x1FAF0, 0x1FAF8}, + // Binary: Emoji_Presentation + {0x231A, 0x231B}, {0x23E9, 0x23EC}, {0x23F0, 0x23F0}, + {0x23F3, 0x23F3}, {0x25FD, 0x25FE}, {0x2614, 0x2615}, + {0x2648, 0x2653}, {0x267F, 0x267F}, {0x2693, 0x2693}, + {0x26A1, 0x26A1}, {0x26AA, 0x26AB}, {0x26BD, 0x26BE}, + {0x26C4, 0x26C5}, {0x26CE, 0x26CE}, {0x26D4, 0x26D4}, + {0x26EA, 0x26EA}, {0x26F2, 0x26F3}, {0x26F5, 0x26F5}, + {0x26FA, 0x26FA}, {0x26FD, 0x26FD}, {0x2705, 0x2705}, + {0x270A, 0x270B}, {0x2728, 0x2728}, {0x274C, 0x274C}, + {0x274E, 0x274E}, {0x2753, 0x2755}, {0x2757, 0x2757}, + {0x2795, 0x2797}, {0x27B0, 0x27B0}, {0x27BF, 0x27BF}, + {0x2B1B, 0x2B1C}, {0x2B50, 0x2B50}, {0x2B55, 0x2B55}, + {0x1F004, 0x1F004}, {0x1F0CF, 0x1F0CF}, {0x1F18E, 0x1F18E}, + {0x1F191, 0x1F19A}, {0x1F1E6, 0x1F1FF}, {0x1F201, 0x1F201}, + {0x1F21A, 0x1F21A}, {0x1F22F, 0x1F22F}, {0x1F232, 0x1F236}, + {0x1F238, 0x1F23A}, {0x1F250, 0x1F251}, {0x1F300, 0x1F320}, + {0x1F32D, 0x1F335}, {0x1F337, 0x1F37C}, {0x1F37E, 0x1F393}, + {0x1F3A0, 0x1F3CA}, {0x1F3CF, 0x1F3D3}, {0x1F3E0, 0x1F3F0}, + {0x1F3F4, 0x1F3F4}, {0x1F3F8, 0x1F43E}, {0x1F440, 0x1F440}, + {0x1F442, 0x1F4FC}, {0x1F4FF, 0x1F53D}, {0x1F54B, 0x1F54E}, + {0x1F550, 0x1F567}, {0x1F57A, 0x1F57A}, {0x1F595, 0x1F596}, + {0x1F5A4, 0x1F5A4}, {0x1F5FB, 0x1F64F}, {0x1F680, 0x1F6C5}, + {0x1F6CC, 0x1F6CC}, {0x1F6D0, 0x1F6D2}, {0x1F6D5, 0x1F6D7}, + {0x1F6DC, 0x1F6DF}, {0x1F6EB, 0x1F6EC}, {0x1F6F4, 0x1F6FC}, + {0x1F7E0, 0x1F7EB}, {0x1F7F0, 0x1F7F0}, {0x1F90C, 0x1F93A}, + {0x1F93C, 0x1F945}, {0x1F947, 0x1F9FF}, {0x1FA70, 0x1FA7C}, + {0x1FA80, 0x1FA88}, {0x1FA90, 0x1FABD}, {0x1FABF, 0x1FAC5}, + {0x1FACE, 0x1FADB}, {0x1FAE0, 0x1FAE8}, {0x1FAF0, 0x1FAF8}, + // Binary: Emoji_Modifier + {0x1F3FB, 0x1F3FF}, + // Binary: Emoji_Modifier_Base + {0x261D, 0x261D}, {0x26F9, 0x26F9}, {0x270A, 0x270D}, + {0x1F385, 0x1F385}, {0x1F3C2, 0x1F3C4}, {0x1F3C7, 0x1F3C7}, + {0x1F3CA, 0x1F3CC}, {0x1F442, 0x1F443}, {0x1F446, 0x1F450}, + {0x1F466, 0x1F478}, {0x1F47C, 0x1F47C}, {0x1F481, 0x1F483}, + {0x1F485, 0x1F487}, {0x1F48F, 0x1F48F}, {0x1F491, 0x1F491}, + {0x1F4AA, 0x1F4AA}, {0x1F574, 0x1F575}, {0x1F57A, 0x1F57A}, + {0x1F590, 0x1F590}, {0x1F595, 0x1F596}, {0x1F645, 0x1F647}, + {0x1F64B, 0x1F64F}, {0x1F6A3, 0x1F6A3}, {0x1F6B4, 0x1F6B6}, + {0x1F6C0, 0x1F6C0}, {0x1F6CC, 0x1F6CC}, {0x1F90C, 0x1F90C}, + {0x1F90F, 0x1F90F}, {0x1F918, 0x1F91F}, {0x1F926, 0x1F926}, + {0x1F930, 0x1F939}, {0x1F93C, 0x1F93E}, {0x1F977, 0x1F977}, + {0x1F9B5, 0x1F9B6}, {0x1F9B8, 0x1F9B9}, {0x1F9BB, 0x1F9BB}, + {0x1F9CD, 0x1F9CF}, {0x1F9D1, 0x1F9DD}, {0x1FAC3, 0x1FAC5}, + {0x1FAF0, 0x1FAF8}, + // Binary: Emoji_Component + {0x0023, 0x0023}, {0x002A, 0x002A}, {0x0030, 0x0039}, + {0x200D, 0x200D}, {0x20E3, 0x20E3}, {0xFE0F, 0xFE0F}, + {0x1F1E6, 0x1F1FF}, {0x1F3FB, 0x1F3FF}, {0x1F9B0, 0x1F9B3}, + {0xE0020, 0xE007F}, + // Binary: Extended_Pictographic + {0x00A9, 0x00A9}, {0x00AE, 0x00AE}, {0x203C, 0x203C}, + {0x2049, 0x2049}, {0x2122, 0x2122}, {0x2139, 0x2139}, + {0x2194, 0x2199}, {0x21A9, 0x21AA}, {0x231A, 0x231B}, + {0x2328, 0x2328}, {0x2388, 0x2388}, {0x23CF, 0x23CF}, + {0x23E9, 0x23F3}, {0x23F8, 0x23FA}, {0x24C2, 0x24C2}, + {0x25AA, 0x25AB}, {0x25B6, 0x25B6}, {0x25C0, 0x25C0}, + {0x25FB, 0x25FE}, {0x2600, 0x2605}, {0x2607, 0x2612}, + {0x2614, 0x2685}, {0x2690, 0x2705}, {0x2708, 0x2712}, + {0x2714, 0x2714}, {0x2716, 0x2716}, {0x271D, 0x271D}, + {0x2721, 0x2721}, {0x2728, 0x2728}, {0x2733, 0x2734}, + {0x2744, 0x2744}, {0x2747, 0x2747}, {0x274C, 0x274C}, + {0x274E, 0x274E}, {0x2753, 0x2755}, {0x2757, 0x2757}, + {0x2763, 0x2767}, {0x2795, 0x2797}, {0x27A1, 0x27A1}, + {0x27B0, 0x27B0}, {0x27BF, 0x27BF}, {0x2934, 0x2935}, + {0x2B05, 0x2B07}, {0x2B1B, 0x2B1C}, {0x2B50, 0x2B50}, + {0x2B55, 0x2B55}, {0x3030, 0x3030}, {0x303D, 0x303D}, + {0x3297, 0x3297}, {0x3299, 0x3299}, {0x1F000, 0x1F0FF}, + {0x1F10D, 0x1F10F}, {0x1F12F, 0x1F12F}, {0x1F16C, 0x1F171}, + {0x1F17E, 0x1F17F}, {0x1F18E, 0x1F18E}, {0x1F191, 0x1F19A}, + {0x1F1AD, 0x1F1E5}, {0x1F201, 0x1F20F}, {0x1F21A, 0x1F21A}, + {0x1F22F, 0x1F22F}, {0x1F232, 0x1F23A}, {0x1F23C, 0x1F23F}, + {0x1F249, 0x1F3FA}, {0x1F400, 0x1F53D}, {0x1F546, 0x1F64F}, + {0x1F680, 0x1F6FF}, {0x1F774, 0x1F77F}, {0x1F7D5, 0x1F7FF}, + {0x1F80C, 0x1F80F}, {0x1F848, 0x1F84F}, {0x1F85A, 0x1F85F}, + {0x1F888, 0x1F88F}, {0x1F8AE, 0x1F8FF}, {0x1F90C, 0x1F93A}, + {0x1F93C, 0x1F945}, {0x1F947, 0x1FAFF}, {0x1FC00, 0x1FFFD}, + // Binary: ASCII + {0x0000, 0x007F}, + // Binary: Any + {0x0000, 0x10FFFF}, + // Binary: Assigned + {0x0000, 0x0000}, {0x0000, 0x0377}, {0x037A, 0x037F}, + {0x0384, 0x038A}, {0x038C, 0x038C}, {0x038E, 0x03A1}, + {0x03A3, 0x052F}, {0x0531, 0x0556}, {0x0559, 0x058A}, + {0x058D, 0x058F}, {0x0591, 0x05C7}, {0x05D0, 0x05EA}, + {0x05EF, 0x05F4}, {0x0600, 0x070D}, {0x070F, 0x074A}, + {0x074D, 0x07B1}, {0x07C0, 0x07FA}, {0x07FD, 0x082D}, + {0x0830, 0x083E}, {0x0840, 0x085B}, {0x085E, 0x085E}, + {0x0860, 0x086A}, {0x0870, 0x088E}, {0x0890, 0x0891}, + {0x0898, 0x0983}, {0x0985, 0x098C}, {0x098F, 0x0990}, + {0x0993, 0x09A8}, {0x09AA, 0x09B0}, {0x09B2, 0x09B2}, + {0x09B6, 0x09B9}, {0x09BC, 0x09C4}, {0x09C7, 0x09C8}, + {0x09CB, 0x09CE}, {0x09D7, 0x09D7}, {0x09DC, 0x09DD}, + {0x09DF, 0x09E3}, {0x09E6, 0x09FE}, {0x0A01, 0x0A03}, + {0x0A05, 0x0A0A}, {0x0A0F, 0x0A10}, {0x0A13, 0x0A28}, + {0x0A2A, 0x0A30}, {0x0A32, 0x0A33}, {0x0A35, 0x0A36}, + {0x0A38, 0x0A39}, {0x0A3C, 0x0A3C}, {0x0A3E, 0x0A42}, + {0x0A47, 0x0A48}, {0x0A4B, 0x0A4D}, {0x0A51, 0x0A51}, + {0x0A59, 0x0A5C}, {0x0A5E, 0x0A5E}, {0x0A66, 0x0A76}, + {0x0A81, 0x0A83}, {0x0A85, 0x0A8D}, {0x0A8F, 0x0A91}, + {0x0A93, 0x0AA8}, {0x0AAA, 0x0AB0}, {0x0AB2, 0x0AB3}, + {0x0AB5, 0x0AB9}, {0x0ABC, 0x0AC5}, {0x0AC7, 0x0AC9}, + {0x0ACB, 0x0ACD}, {0x0AD0, 0x0AD0}, {0x0AE0, 0x0AE3}, + {0x0AE6, 0x0AF1}, {0x0AF9, 0x0AFF}, {0x0B01, 0x0B03}, + {0x0B05, 0x0B0C}, {0x0B0F, 0x0B10}, {0x0B13, 0x0B28}, + {0x0B2A, 0x0B30}, {0x0B32, 0x0B33}, {0x0B35, 0x0B39}, + {0x0B3C, 0x0B44}, {0x0B47, 0x0B48}, {0x0B4B, 0x0B4D}, + {0x0B55, 0x0B57}, {0x0B5C, 0x0B5D}, {0x0B5F, 0x0B63}, + {0x0B66, 0x0B77}, {0x0B82, 0x0B83}, {0x0B85, 0x0B8A}, + {0x0B8E, 0x0B90}, {0x0B92, 0x0B95}, {0x0B99, 0x0B9A}, + {0x0B9C, 0x0B9C}, {0x0B9E, 0x0B9F}, {0x0BA3, 0x0BA4}, + {0x0BA8, 0x0BAA}, {0x0BAE, 0x0BB9}, {0x0BBE, 0x0BC2}, + {0x0BC6, 0x0BC8}, {0x0BCA, 0x0BCD}, {0x0BD0, 0x0BD0}, + {0x0BD7, 0x0BD7}, {0x0BE6, 0x0BFA}, {0x0C00, 0x0C0C}, + {0x0C0E, 0x0C10}, {0x0C12, 0x0C28}, {0x0C2A, 0x0C39}, + {0x0C3C, 0x0C44}, {0x0C46, 0x0C48}, {0x0C4A, 0x0C4D}, + {0x0C55, 0x0C56}, {0x0C58, 0x0C5A}, {0x0C5D, 0x0C5D}, + {0x0C60, 0x0C63}, {0x0C66, 0x0C6F}, {0x0C77, 0x0C8C}, + {0x0C8E, 0x0C90}, {0x0C92, 0x0CA8}, {0x0CAA, 0x0CB3}, + {0x0CB5, 0x0CB9}, {0x0CBC, 0x0CC4}, {0x0CC6, 0x0CC8}, + {0x0CCA, 0x0CCD}, {0x0CD5, 0x0CD6}, {0x0CDD, 0x0CDE}, + {0x0CE0, 0x0CE3}, {0x0CE6, 0x0CEF}, {0x0CF1, 0x0CF3}, + {0x0D00, 0x0D0C}, {0x0D0E, 0x0D10}, {0x0D12, 0x0D44}, + {0x0D46, 0x0D48}, {0x0D4A, 0x0D4F}, {0x0D54, 0x0D63}, + {0x0D66, 0x0D7F}, {0x0D81, 0x0D83}, {0x0D85, 0x0D96}, + {0x0D9A, 0x0DB1}, {0x0DB3, 0x0DBB}, {0x0DBD, 0x0DBD}, + {0x0DC0, 0x0DC6}, {0x0DCA, 0x0DCA}, {0x0DCF, 0x0DD4}, + {0x0DD6, 0x0DD6}, {0x0DD8, 0x0DDF}, {0x0DE6, 0x0DEF}, + {0x0DF2, 0x0DF4}, {0x0E01, 0x0E3A}, {0x0E3F, 0x0E5B}, + {0x0E81, 0x0E82}, {0x0E84, 0x0E84}, {0x0E86, 0x0E8A}, + {0x0E8C, 0x0EA3}, {0x0EA5, 0x0EA5}, {0x0EA7, 0x0EBD}, + {0x0EC0, 0x0EC4}, {0x0EC6, 0x0EC6}, {0x0EC8, 0x0ECE}, + {0x0ED0, 0x0ED9}, {0x0EDC, 0x0EDF}, {0x0F00, 0x0F47}, + {0x0F49, 0x0F6C}, {0x0F71, 0x0F97}, {0x0F99, 0x0FBC}, + {0x0FBE, 0x0FCC}, {0x0FCE, 0x0FDA}, {0x1000, 0x10C5}, + {0x10C7, 0x10C7}, {0x10CD, 0x10CD}, {0x10D0, 0x1248}, + {0x124A, 0x124D}, {0x1250, 0x1256}, {0x1258, 0x1258}, + {0x125A, 0x125D}, {0x1260, 0x1288}, {0x128A, 0x128D}, + {0x1290, 0x12B0}, {0x12B2, 0x12B5}, {0x12B8, 0x12BE}, + {0x12C0, 0x12C0}, {0x12C2, 0x12C5}, {0x12C8, 0x12D6}, + {0x12D8, 0x1310}, {0x1312, 0x1315}, {0x1318, 0x135A}, + {0x135D, 0x137C}, {0x1380, 0x1399}, {0x13A0, 0x13F5}, + {0x13F8, 0x13FD}, {0x1400, 0x169C}, {0x16A0, 0x16F8}, + {0x1700, 0x1715}, {0x171F, 0x1736}, {0x1740, 0x1753}, + {0x1760, 0x176C}, {0x176E, 0x1770}, {0x1772, 0x1773}, + {0x1780, 0x17DD}, {0x17E0, 0x17E9}, {0x17F0, 0x17F9}, + {0x1800, 0x1819}, {0x1820, 0x1878}, {0x1880, 0x18AA}, + {0x18B0, 0x18F5}, {0x1900, 0x191E}, {0x1920, 0x192B}, + {0x1930, 0x193B}, {0x1940, 0x1940}, {0x1944, 0x196D}, + {0x1970, 0x1974}, {0x1980, 0x19AB}, {0x19B0, 0x19C9}, + {0x19D0, 0x19DA}, {0x19DE, 0x1A1B}, {0x1A1E, 0x1A5E}, + {0x1A60, 0x1A7C}, {0x1A7F, 0x1A89}, {0x1A90, 0x1A99}, + {0x1AA0, 0x1AAD}, {0x1AB0, 0x1ACE}, {0x1B00, 0x1B4C}, + {0x1B50, 0x1B7E}, {0x1B80, 0x1BF3}, {0x1BFC, 0x1C37}, + {0x1C3B, 0x1C49}, {0x1C4D, 0x1C88}, {0x1C90, 0x1CBA}, + {0x1CBD, 0x1CC7}, {0x1CD0, 0x1CFA}, {0x1D00, 0x1F15}, + {0x1F18, 0x1F1D}, {0x1F20, 0x1F45}, {0x1F48, 0x1F4D}, + {0x1F50, 0x1F57}, {0x1F59, 0x1F59}, {0x1F5B, 0x1F5B}, + {0x1F5D, 0x1F5D}, {0x1F5F, 0x1F7D}, {0x1F80, 0x1FB4}, + {0x1FB6, 0x1FC4}, {0x1FC6, 0x1FD3}, {0x1FD6, 0x1FDB}, + {0x1FDD, 0x1FEF}, {0x1FF2, 0x1FF4}, {0x1FF6, 0x1FFE}, + {0x2000, 0x2064}, {0x2066, 0x2071}, {0x2074, 0x208E}, + {0x2090, 0x209C}, {0x20A0, 0x20C0}, {0x20D0, 0x20F0}, + {0x2100, 0x218B}, {0x2190, 0x2426}, {0x2440, 0x244A}, + {0x2460, 0x2B73}, {0x2B76, 0x2B95}, {0x2B97, 0x2CF3}, + {0x2CF9, 0x2D25}, {0x2D27, 0x2D27}, {0x2D2D, 0x2D2D}, + {0x2D30, 0x2D67}, {0x2D6F, 0x2D70}, {0x2D7F, 0x2D96}, + {0x2DA0, 0x2DA6}, {0x2DA8, 0x2DAE}, {0x2DB0, 0x2DB6}, + {0x2DB8, 0x2DBE}, {0x2DC0, 0x2DC6}, {0x2DC8, 0x2DCE}, + {0x2DD0, 0x2DD6}, {0x2DD8, 0x2DDE}, {0x2DE0, 0x2E5D}, + {0x2E80, 0x2E99}, {0x2E9B, 0x2EF3}, {0x2F00, 0x2FD5}, + {0x2FF0, 0x303F}, {0x3041, 0x3096}, {0x3099, 0x30FF}, + {0x3105, 0x312F}, {0x3131, 0x318E}, {0x3190, 0x31E3}, + {0x31EF, 0x321E}, {0x3220, 0x33FF}, {0x3400, 0x4DBF}, + {0x4DC0, 0x4DFF}, {0x4E00, 0x9FFF}, {0xA000, 0xA48C}, + {0xA490, 0xA4C6}, {0xA4D0, 0xA62B}, {0xA640, 0xA6F7}, + {0xA700, 0xA7CA}, {0xA7D0, 0xA7D1}, {0xA7D3, 0xA7D3}, + {0xA7D5, 0xA7D9}, {0xA7F2, 0xA82C}, {0xA830, 0xA839}, + {0xA840, 0xA877}, {0xA880, 0xA8C5}, {0xA8CE, 0xA8D9}, + {0xA8E0, 0xA953}, {0xA95F, 0xA97C}, {0xA980, 0xA9CD}, + {0xA9CF, 0xA9D9}, {0xA9DE, 0xA9FE}, {0xAA00, 0xAA36}, + {0xAA40, 0xAA4D}, {0xAA50, 0xAA59}, {0xAA5C, 0xAAC2}, + {0xAADB, 0xAAF6}, {0xAB01, 0xAB06}, {0xAB09, 0xAB0E}, + {0xAB11, 0xAB16}, {0xAB20, 0xAB26}, {0xAB28, 0xAB2E}, + {0xAB30, 0xAB6B}, {0xAB70, 0xABED}, {0xABF0, 0xABF9}, + {0xAC00, 0xD7A3}, {0xD7B0, 0xD7C6}, {0xD7CB, 0xD7FB}, + {0xD800, 0xDB7F}, {0xDB80, 0xDBFF}, {0xDC00, 0xDFFF}, + {0xE000, 0xF8FF}, {0xF900, 0xFA6D}, {0xFA70, 0xFAD9}, + {0xFB00, 0xFB06}, {0xFB13, 0xFB17}, {0xFB1D, 0xFB36}, + {0xFB38, 0xFB3C}, {0xFB3E, 0xFB3E}, {0xFB40, 0xFB41}, + {0xFB43, 0xFB44}, {0xFB46, 0xFBC2}, {0xFBD3, 0xFD8F}, + {0xFD92, 0xFDC7}, {0xFDCF, 0xFDCF}, {0xFDF0, 0xFE19}, + {0xFE20, 0xFE52}, {0xFE54, 0xFE66}, {0xFE68, 0xFE6B}, + {0xFE70, 0xFE74}, {0xFE76, 0xFEFC}, {0xFEFF, 0xFEFF}, + {0xFF01, 0xFFBE}, {0xFFC2, 0xFFC7}, {0xFFCA, 0xFFCF}, + {0xFFD2, 0xFFD7}, {0xFFDA, 0xFFDC}, {0xFFE0, 0xFFE6}, + {0xFFE8, 0xFFEE}, {0xFFF9, 0xFFFD}, {0x10000, 0x1000B}, + {0x1000D, 0x10026}, {0x10028, 0x1003A}, {0x1003C, 0x1003D}, + {0x1003F, 0x1004D}, {0x10050, 0x1005D}, {0x10080, 0x100FA}, + {0x10100, 0x10102}, {0x10107, 0x10133}, {0x10137, 0x1018E}, + {0x10190, 0x1019C}, {0x101A0, 0x101A0}, {0x101D0, 0x101FD}, + {0x10280, 0x1029C}, {0x102A0, 0x102D0}, {0x102E0, 0x102FB}, + {0x10300, 0x10323}, {0x1032D, 0x1034A}, {0x10350, 0x1037A}, + {0x10380, 0x1039D}, {0x1039F, 0x103C3}, {0x103C8, 0x103D5}, + {0x10400, 0x1049D}, {0x104A0, 0x104A9}, {0x104B0, 0x104D3}, + {0x104D8, 0x104FB}, {0x10500, 0x10527}, {0x10530, 0x10563}, + {0x1056F, 0x1057A}, {0x1057C, 0x1058A}, {0x1058C, 0x10592}, + {0x10594, 0x10595}, {0x10597, 0x105A1}, {0x105A3, 0x105B1}, + {0x105B3, 0x105B9}, {0x105BB, 0x105BC}, {0x10600, 0x10736}, + {0x10740, 0x10755}, {0x10760, 0x10767}, {0x10780, 0x10785}, + {0x10787, 0x107B0}, {0x107B2, 0x107BA}, {0x10800, 0x10805}, + {0x10808, 0x10808}, {0x1080A, 0x10835}, {0x10837, 0x10838}, + {0x1083C, 0x1083C}, {0x1083F, 0x10855}, {0x10857, 0x1089E}, + {0x108A7, 0x108AF}, {0x108E0, 0x108F2}, {0x108F4, 0x108F5}, + {0x108FB, 0x1091B}, {0x1091F, 0x10939}, {0x1093F, 0x1093F}, + {0x10980, 0x109B7}, {0x109BC, 0x109CF}, {0x109D2, 0x10A03}, + {0x10A05, 0x10A06}, {0x10A0C, 0x10A13}, {0x10A15, 0x10A17}, + {0x10A19, 0x10A35}, {0x10A38, 0x10A3A}, {0x10A3F, 0x10A48}, + {0x10A50, 0x10A58}, {0x10A60, 0x10A9F}, {0x10AC0, 0x10AE6}, + {0x10AEB, 0x10AF6}, {0x10B00, 0x10B35}, {0x10B39, 0x10B55}, + {0x10B58, 0x10B72}, {0x10B78, 0x10B91}, {0x10B99, 0x10B9C}, + {0x10BA9, 0x10BAF}, {0x10C00, 0x10C48}, {0x10C80, 0x10CB2}, + {0x10CC0, 0x10CF2}, {0x10CFA, 0x10D27}, {0x10D30, 0x10D39}, + {0x10E60, 0x10E7E}, {0x10E80, 0x10EA9}, {0x10EAB, 0x10EAD}, + {0x10EB0, 0x10EB1}, {0x10EFD, 0x10F27}, {0x10F30, 0x10F59}, + {0x10F70, 0x10F89}, {0x10FB0, 0x10FCB}, {0x10FE0, 0x10FF6}, + {0x11000, 0x1104D}, {0x11052, 0x11075}, {0x1107F, 0x110C2}, + {0x110CD, 0x110CD}, {0x110D0, 0x110E8}, {0x110F0, 0x110F9}, + {0x11100, 0x11134}, {0x11136, 0x11147}, {0x11150, 0x11176}, + {0x11180, 0x111DF}, {0x111E1, 0x111F4}, {0x11200, 0x11211}, + {0x11213, 0x11241}, {0x11280, 0x11286}, {0x11288, 0x11288}, + {0x1128A, 0x1128D}, {0x1128F, 0x1129D}, {0x1129F, 0x112A9}, + {0x112B0, 0x112EA}, {0x112F0, 0x112F9}, {0x11300, 0x11303}, + {0x11305, 0x1130C}, {0x1130F, 0x11310}, {0x11313, 0x11328}, + {0x1132A, 0x11330}, {0x11332, 0x11333}, {0x11335, 0x11339}, + {0x1133B, 0x11344}, {0x11347, 0x11348}, {0x1134B, 0x1134D}, + {0x11350, 0x11350}, {0x11357, 0x11357}, {0x1135D, 0x11363}, + {0x11366, 0x1136C}, {0x11370, 0x11374}, {0x11400, 0x1145B}, + {0x1145D, 0x11461}, {0x11480, 0x114C7}, {0x114D0, 0x114D9}, + {0x11580, 0x115B5}, {0x115B8, 0x115DD}, {0x11600, 0x11644}, + {0x11650, 0x11659}, {0x11660, 0x1166C}, {0x11680, 0x116B9}, + {0x116C0, 0x116C9}, {0x11700, 0x1171A}, {0x1171D, 0x1172B}, + {0x11730, 0x11746}, {0x11800, 0x1183B}, {0x118A0, 0x118F2}, + {0x118FF, 0x11906}, {0x11909, 0x11909}, {0x1190C, 0x11913}, + {0x11915, 0x11916}, {0x11918, 0x11935}, {0x11937, 0x11938}, + {0x1193B, 0x11946}, {0x11950, 0x11959}, {0x119A0, 0x119A7}, + {0x119AA, 0x119D7}, {0x119DA, 0x119E4}, {0x11A00, 0x11A47}, + {0x11A50, 0x11AA2}, {0x11AB0, 0x11AF8}, {0x11B00, 0x11B09}, + {0x11C00, 0x11C08}, {0x11C0A, 0x11C36}, {0x11C38, 0x11C45}, + {0x11C50, 0x11C6C}, {0x11C70, 0x11C8F}, {0x11C92, 0x11CA7}, + {0x11CA9, 0x11CB6}, {0x11D00, 0x11D06}, {0x11D08, 0x11D09}, + {0x11D0B, 0x11D36}, {0x11D3A, 0x11D3A}, {0x11D3C, 0x11D3D}, + {0x11D3F, 0x11D47}, {0x11D50, 0x11D59}, {0x11D60, 0x11D65}, + {0x11D67, 0x11D68}, {0x11D6A, 0x11D8E}, {0x11D90, 0x11D91}, + {0x11D93, 0x11D98}, {0x11DA0, 0x11DA9}, {0x11EE0, 0x11EF8}, + {0x11F00, 0x11F10}, {0x11F12, 0x11F3A}, {0x11F3E, 0x11F59}, + {0x11FB0, 0x11FB0}, {0x11FC0, 0x11FF1}, {0x11FFF, 0x12399}, + {0x12400, 0x1246E}, {0x12470, 0x12474}, {0x12480, 0x12543}, + {0x12F90, 0x12FF2}, {0x13000, 0x13455}, {0x14400, 0x14646}, + {0x16800, 0x16A38}, {0x16A40, 0x16A5E}, {0x16A60, 0x16A69}, + {0x16A6E, 0x16ABE}, {0x16AC0, 0x16AC9}, {0x16AD0, 0x16AED}, + {0x16AF0, 0x16AF5}, {0x16B00, 0x16B45}, {0x16B50, 0x16B59}, + {0x16B5B, 0x16B61}, {0x16B63, 0x16B77}, {0x16B7D, 0x16B8F}, + {0x16E40, 0x16E9A}, {0x16F00, 0x16F4A}, {0x16F4F, 0x16F87}, + {0x16F8F, 0x16F9F}, {0x16FE0, 0x16FE4}, {0x16FF0, 0x16FF1}, + {0x17000, 0x187F7}, {0x18800, 0x18CD5}, {0x18D00, 0x18D08}, + {0x1AFF0, 0x1AFF3}, {0x1AFF5, 0x1AFFB}, {0x1AFFD, 0x1AFFE}, + {0x1B000, 0x1B122}, {0x1B132, 0x1B132}, {0x1B150, 0x1B152}, + {0x1B155, 0x1B155}, {0x1B164, 0x1B167}, {0x1B170, 0x1B2FB}, + {0x1BC00, 0x1BC6A}, {0x1BC70, 0x1BC7C}, {0x1BC80, 0x1BC88}, + {0x1BC90, 0x1BC99}, {0x1BC9C, 0x1BCA3}, {0x1CF00, 0x1CF2D}, + {0x1CF30, 0x1CF46}, {0x1CF50, 0x1CFC3}, {0x1D000, 0x1D0F5}, + {0x1D100, 0x1D126}, {0x1D129, 0x1D1EA}, {0x1D200, 0x1D245}, + {0x1D2C0, 0x1D2D3}, {0x1D2E0, 0x1D2F3}, {0x1D300, 0x1D356}, + {0x1D360, 0x1D378}, {0x1D400, 0x1D454}, {0x1D456, 0x1D49C}, + {0x1D49E, 0x1D49F}, {0x1D4A2, 0x1D4A2}, {0x1D4A5, 0x1D4A6}, + {0x1D4A9, 0x1D4AC}, {0x1D4AE, 0x1D4B9}, {0x1D4BB, 0x1D4BB}, + {0x1D4BD, 0x1D4C3}, {0x1D4C5, 0x1D505}, {0x1D507, 0x1D50A}, + {0x1D50D, 0x1D514}, {0x1D516, 0x1D51C}, {0x1D51E, 0x1D539}, + {0x1D53B, 0x1D53E}, {0x1D540, 0x1D544}, {0x1D546, 0x1D546}, + {0x1D54A, 0x1D550}, {0x1D552, 0x1D6A5}, {0x1D6A8, 0x1D7CB}, + {0x1D7CE, 0x1DA8B}, {0x1DA9B, 0x1DA9F}, {0x1DAA1, 0x1DAAF}, + {0x1DF00, 0x1DF1E}, {0x1DF25, 0x1DF2A}, {0x1E000, 0x1E006}, + {0x1E008, 0x1E018}, {0x1E01B, 0x1E021}, {0x1E023, 0x1E024}, + {0x1E026, 0x1E02A}, {0x1E030, 0x1E06D}, {0x1E08F, 0x1E08F}, + {0x1E100, 0x1E12C}, {0x1E130, 0x1E13D}, {0x1E140, 0x1E149}, + {0x1E14E, 0x1E14F}, {0x1E290, 0x1E2AE}, {0x1E2C0, 0x1E2F9}, + {0x1E2FF, 0x1E2FF}, {0x1E4D0, 0x1E4F9}, {0x1E7E0, 0x1E7E6}, + {0x1E7E8, 0x1E7EB}, {0x1E7ED, 0x1E7EE}, {0x1E7F0, 0x1E7FE}, + {0x1E800, 0x1E8C4}, {0x1E8C7, 0x1E8D6}, {0x1E900, 0x1E94B}, + {0x1E950, 0x1E959}, {0x1E95E, 0x1E95F}, {0x1EC71, 0x1ECB4}, + {0x1ED01, 0x1ED3D}, {0x1EE00, 0x1EE03}, {0x1EE05, 0x1EE1F}, + {0x1EE21, 0x1EE22}, {0x1EE24, 0x1EE24}, {0x1EE27, 0x1EE27}, + {0x1EE29, 0x1EE32}, {0x1EE34, 0x1EE37}, {0x1EE39, 0x1EE39}, + {0x1EE3B, 0x1EE3B}, {0x1EE42, 0x1EE42}, {0x1EE47, 0x1EE47}, + {0x1EE49, 0x1EE49}, {0x1EE4B, 0x1EE4B}, {0x1EE4D, 0x1EE4F}, + {0x1EE51, 0x1EE52}, {0x1EE54, 0x1EE54}, {0x1EE57, 0x1EE57}, + {0x1EE59, 0x1EE59}, {0x1EE5B, 0x1EE5B}, {0x1EE5D, 0x1EE5D}, + {0x1EE5F, 0x1EE5F}, {0x1EE61, 0x1EE62}, {0x1EE64, 0x1EE64}, + {0x1EE67, 0x1EE6A}, {0x1EE6C, 0x1EE72}, {0x1EE74, 0x1EE77}, + {0x1EE79, 0x1EE7C}, {0x1EE7E, 0x1EE7E}, {0x1EE80, 0x1EE89}, + {0x1EE8B, 0x1EE9B}, {0x1EEA1, 0x1EEA3}, {0x1EEA5, 0x1EEA9}, + {0x1EEAB, 0x1EEBB}, {0x1EEF0, 0x1EEF1}, {0x1F000, 0x1F02B}, + {0x1F030, 0x1F093}, {0x1F0A0, 0x1F0AE}, {0x1F0B1, 0x1F0BF}, + {0x1F0C1, 0x1F0CF}, {0x1F0D1, 0x1F0F5}, {0x1F100, 0x1F1AD}, + {0x1F1E6, 0x1F202}, {0x1F210, 0x1F23B}, {0x1F240, 0x1F248}, + {0x1F250, 0x1F251}, {0x1F260, 0x1F265}, {0x1F300, 0x1F6D7}, + {0x1F6DC, 0x1F6EC}, {0x1F6F0, 0x1F6FC}, {0x1F700, 0x1F776}, + {0x1F77B, 0x1F7D9}, {0x1F7E0, 0x1F7EB}, {0x1F7F0, 0x1F7F0}, + {0x1F800, 0x1F80B}, {0x1F810, 0x1F847}, {0x1F850, 0x1F859}, + {0x1F860, 0x1F887}, {0x1F890, 0x1F8AD}, {0x1F8B0, 0x1F8B1}, + {0x1F900, 0x1FA53}, {0x1FA60, 0x1FA6D}, {0x1FA70, 0x1FA7C}, + {0x1FA80, 0x1FA88}, {0x1FA90, 0x1FABD}, {0x1FABF, 0x1FAC5}, + {0x1FACE, 0x1FADB}, {0x1FAE0, 0x1FAE8}, {0x1FAF0, 0x1FAF8}, + {0x1FB00, 0x1FB92}, {0x1FB94, 0x1FBCA}, {0x1FBF0, 0x1FBF9}, + {0x20000, 0x2A6DF}, {0x2A700, 0x2B739}, {0x2B740, 0x2B81D}, + {0x2B820, 0x2CEA1}, {0x2CEB0, 0x2EBE0}, {0x2EBF0, 0x2EE5D}, + {0x2F800, 0x2FA1D}, {0x30000, 0x3134A}, {0x31350, 0x323AF}, + {0xE0001, 0xE0001}, {0xE0020, 0xE007F}, {0xE0100, 0xE01EF}, + {0xF0000, 0xFFFFD}, {0x100000, 0x10FFFD}, + // Script: Common + {0x0000, 0x0040}, {0x005B, 0x0060}, {0x007B, 0x00A9}, + {0x00AB, 0x00B9}, {0x00BB, 0x00BF}, {0x00D7, 0x00D7}, + {0x00F7, 0x00F7}, {0x02B9, 0x02DF}, {0x02E5, 0x02E9}, + {0x02EC, 0x02FF}, {0x0374, 0x0374}, {0x037E, 0x037E}, + {0x0385, 0x0385}, {0x0387, 0x0387}, {0x0605, 0x0605}, + {0x060C, 0x060C}, {0x061B, 0x061B}, {0x061F, 0x061F}, + {0x0640, 0x0640}, {0x06DD, 0x06DD}, {0x08E2, 0x08E2}, + {0x0964, 0x0965}, {0x0E3F, 0x0E3F}, {0x0FD5, 0x0FD8}, + {0x10FB, 0x10FB}, {0x16EB, 0x16ED}, {0x1735, 0x1736}, + {0x1802, 0x1803}, {0x1805, 0x1805}, {0x1CD3, 0x1CD3}, + {0x1CE1, 0x1CE1}, {0x1CE9, 0x1CEC}, {0x1CEE, 0x1CF3}, + {0x1CF5, 0x1CF7}, {0x1CFA, 0x1CFA}, {0x2000, 0x200B}, + {0x200E, 0x2064}, {0x2066, 0x2070}, {0x2074, 0x207E}, + {0x2080, 0x208E}, {0x20A0, 0x20C0}, {0x2100, 0x2125}, + {0x2127, 0x2129}, {0x212C, 0x2131}, {0x2133, 0x214D}, + {0x214F, 0x215F}, {0x2189, 0x218B}, {0x2190, 0x2426}, + {0x2440, 0x244A}, {0x2460, 0x27FF}, {0x2900, 0x2B73}, + {0x2B76, 0x2B95}, {0x2B97, 0x2BFF}, {0x2E00, 0x2E5D}, + {0x2FF0, 0x3004}, {0x3006, 0x3006}, {0x3008, 0x3020}, + {0x3030, 0x3037}, {0x303C, 0x303F}, {0x309B, 0x309C}, + {0x30A0, 0x30A0}, {0x30FB, 0x30FC}, {0x3190, 0x319F}, + {0x31C0, 0x31E3}, {0x31EF, 0x31EF}, {0x3220, 0x325F}, + {0x327F, 0x32CF}, {0x32FF, 0x32FF}, {0x3358, 0x33FF}, + {0x4DC0, 0x4DFF}, {0xA700, 0xA721}, {0xA788, 0xA78A}, + {0xA830, 0xA839}, {0xA92E, 0xA92E}, {0xA9CF, 0xA9CF}, + {0xAB5B, 0xAB5B}, {0xAB6A, 0xAB6B}, {0xFD3E, 0xFD3F}, + {0xFE10, 0xFE19}, {0xFE30, 0xFE52}, {0xFE54, 0xFE66}, + {0xFE68, 0xFE6B}, {0xFEFF, 0xFEFF}, {0xFF01, 0xFF20}, + {0xFF3B, 0xFF40}, {0xFF5B, 0xFF65}, {0xFF70, 0xFF70}, + {0xFF9E, 0xFF9F}, {0xFFE0, 0xFFE6}, {0xFFE8, 0xFFEE}, + {0xFFF9, 0xFFFD}, {0x10100, 0x10102}, {0x10107, 0x10133}, + {0x10137, 0x1013F}, {0x10190, 0x1019C}, {0x101D0, 0x101FC}, + {0x102E1, 0x102FB}, {0x1BCA0, 0x1BCA3}, {0x1CF50, 0x1CFC3}, + {0x1D000, 0x1D0F5}, {0x1D100, 0x1D126}, {0x1D129, 0x1D166}, + {0x1D16A, 0x1D17A}, {0x1D183, 0x1D184}, {0x1D18C, 0x1D1A9}, + {0x1D1AE, 0x1D1EA}, {0x1D2C0, 0x1D2D3}, {0x1D2E0, 0x1D2F3}, + {0x1D300, 0x1D356}, {0x1D360, 0x1D378}, {0x1D400, 0x1D454}, + {0x1D456, 0x1D49C}, {0x1D49E, 0x1D49F}, {0x1D4A2, 0x1D4A2}, + {0x1D4A5, 0x1D4A6}, {0x1D4A9, 0x1D4AC}, {0x1D4AE, 0x1D4B9}, + {0x1D4BB, 0x1D4BB}, {0x1D4BD, 0x1D4C3}, {0x1D4C5, 0x1D505}, + {0x1D507, 0x1D50A}, {0x1D50D, 0x1D514}, {0x1D516, 0x1D51C}, + {0x1D51E, 0x1D539}, {0x1D53B, 0x1D53E}, {0x1D540, 0x1D544}, + {0x1D546, 0x1D546}, {0x1D54A, 0x1D550}, {0x1D552, 0x1D6A5}, + {0x1D6A8, 0x1D7CB}, {0x1D7CE, 0x1D7FF}, {0x1EC71, 0x1ECB4}, + {0x1ED01, 0x1ED3D}, {0x1F000, 0x1F02B}, {0x1F030, 0x1F093}, + {0x1F0A0, 0x1F0AE}, {0x1F0B1, 0x1F0BF}, {0x1F0C1, 0x1F0CF}, + {0x1F0D1, 0x1F0F5}, {0x1F100, 0x1F1AD}, {0x1F1E6, 0x1F1FF}, + {0x1F201, 0x1F202}, {0x1F210, 0x1F23B}, {0x1F240, 0x1F248}, + {0x1F250, 0x1F251}, {0x1F260, 0x1F265}, {0x1F300, 0x1F6D7}, + {0x1F6DC, 0x1F6EC}, {0x1F6F0, 0x1F6FC}, {0x1F700, 0x1F776}, + {0x1F77B, 0x1F7D9}, {0x1F7E0, 0x1F7EB}, {0x1F7F0, 0x1F7F0}, + {0x1F800, 0x1F80B}, {0x1F810, 0x1F847}, {0x1F850, 0x1F859}, + {0x1F860, 0x1F887}, {0x1F890, 0x1F8AD}, {0x1F8B0, 0x1F8B1}, + {0x1F900, 0x1FA53}, {0x1FA60, 0x1FA6D}, {0x1FA70, 0x1FA7C}, + {0x1FA80, 0x1FA88}, {0x1FA90, 0x1FABD}, {0x1FABF, 0x1FAC5}, + {0x1FACE, 0x1FADB}, {0x1FAE0, 0x1FAE8}, {0x1FAF0, 0x1FAF8}, + {0x1FB00, 0x1FB92}, {0x1FB94, 0x1FBCA}, {0x1FBF0, 0x1FBF9}, + {0xE0001, 0xE0001}, {0xE0020, 0xE007F}, + // Script: Latin + {0x0041, 0x005A}, {0x0061, 0x007A}, {0x00AA, 0x00AA}, + {0x00BA, 0x00BA}, {0x00C0, 0x00D6}, {0x00D8, 0x00F6}, + {0x00F8, 0x02B8}, {0x02E0, 0x02E4}, {0x1D00, 0x1D25}, + {0x1D2C, 0x1D5C}, {0x1D62, 0x1D65}, {0x1D6B, 0x1D77}, + {0x1D79, 0x1DBE}, {0x1E00, 0x1EFF}, {0x2071, 0x2071}, + {0x207F, 0x207F}, {0x2090, 0x209C}, {0x212A, 0x212B}, + {0x2132, 0x2132}, {0x214E, 0x214E}, {0x2160, 0x2188}, + {0x2C60, 0x2C7F}, {0xA722, 0xA787}, {0xA78B, 0xA7CA}, + {0xA7D0, 0xA7D1}, {0xA7D3, 0xA7D3}, {0xA7D5, 0xA7D9}, + {0xA7F2, 0xA7FF}, {0xAB30, 0xAB5A}, {0xAB5C, 0xAB64}, + {0xAB66, 0xAB69}, {0xFB00, 0xFB06}, {0xFF21, 0xFF3A}, + {0xFF41, 0xFF5A}, {0x10780, 0x10785}, {0x10787, 0x107B0}, + {0x107B2, 0x107BA}, {0x1DF00, 0x1DF1E}, {0x1DF25, 0x1DF2A}, + // Script_Extensions: Latin + {0x0363, 0x036F}, {0x0485, 0x0486}, {0x10FB, 0x10FB}, + {0xA700, 0xA707}, {0x202F, 0x202F}, {0x20F0, 0x20F0}, + {0xA92E, 0xA92E}, {0x0952, 0x0952}, {0x0951, 0x0951}, + // Script: Greek + {0x0370, 0x0373}, {0x0375, 0x0377}, {0x037A, 0x037D}, + {0x037F, 0x037F}, {0x0384, 0x0384}, {0x0386, 0x0386}, + {0x0388, 0x038A}, {0x038C, 0x038C}, {0x038E, 0x03A1}, + {0x03A3, 0x03E1}, {0x03F0, 0x03FF}, {0x1D26, 0x1D2A}, + {0x1D5D, 0x1D61}, {0x1D66, 0x1D6A}, {0x1DBF, 0x1DBF}, + {0x1F00, 0x1F15}, {0x1F18, 0x1F1D}, {0x1F20, 0x1F45}, + {0x1F48, 0x1F4D}, {0x1F50, 0x1F57}, {0x1F59, 0x1F59}, + {0x1F5B, 0x1F5B}, {0x1F5D, 0x1F5D}, {0x1F5F, 0x1F7D}, + {0x1F80, 0x1FB4}, {0x1FB6, 0x1FC4}, {0x1FC6, 0x1FD3}, + {0x1FD6, 0x1FDB}, {0x1FDD, 0x1FEF}, {0x1FF2, 0x1FF4}, + {0x1FF6, 0x1FFE}, {0x2126, 0x2126}, {0xAB65, 0xAB65}, + {0x10140, 0x1018E}, {0x101A0, 0x101A0}, {0x1D200, 0x1D245}, + // Script_Extensions: Greek + {0x0342, 0x0342}, {0x0345, 0x0345}, {0x1DC0, 0x1DC1}, + // Script: Cyrillic + {0x0400, 0x0484}, {0x0487, 0x052F}, {0x1C80, 0x1C88}, + {0x1D2B, 0x1D2B}, {0x1D78, 0x1D78}, {0x2DE0, 0x2DFF}, + {0xA640, 0xA69F}, {0xFE2E, 0xFE2F}, {0x1E030, 0x1E06D}, + {0x1E08F, 0x1E08F}, + // Script_Extensions: Cyrillic + {0x0484, 0x0484}, {0x0487, 0x0487}, {0x2E43, 0x2E43}, + {0xA66F, 0xA66F}, {0x0485, 0x0486}, {0x0483, 0x0483}, + {0x1DF8, 0x1DF8}, + // Script: Armenian + {0x0531, 0x0556}, {0x0559, 0x058A}, {0x058D, 0x058F}, + {0xFB13, 0xFB17}, + // Script: Hebrew + {0x0591, 0x05C7}, {0x05D0, 0x05EA}, {0x05EF, 0x05F4}, + {0xFB1D, 0xFB36}, {0xFB38, 0xFB3C}, {0xFB3E, 0xFB3E}, + {0xFB40, 0xFB41}, {0xFB43, 0xFB44}, {0xFB46, 0xFB4F}, + // Script: Arabic + {0x0600, 0x0604}, {0x0606, 0x060B}, {0x060D, 0x061A}, + {0x061C, 0x061E}, {0x0620, 0x063F}, {0x0641, 0x064A}, + {0x0656, 0x066F}, {0x0671, 0x06DC}, {0x06DE, 0x06FF}, + {0x0750, 0x077F}, {0x0870, 0x088E}, {0x0890, 0x0891}, + {0x0898, 0x08E1}, {0x08E3, 0x08FF}, {0xFB50, 0xFBC2}, + {0xFBD3, 0xFD3D}, {0xFD40, 0xFD8F}, {0xFD92, 0xFDC7}, + {0xFDCF, 0xFDCF}, {0xFDF0, 0xFDFF}, {0xFE70, 0xFE74}, + {0xFE76, 0xFEFC}, {0x10E60, 0x10E7E}, {0x10EFD, 0x10EFF}, + {0x1EE00, 0x1EE03}, {0x1EE05, 0x1EE1F}, {0x1EE21, 0x1EE22}, + {0x1EE24, 0x1EE24}, {0x1EE27, 0x1EE27}, {0x1EE29, 0x1EE32}, + {0x1EE34, 0x1EE37}, {0x1EE39, 0x1EE39}, {0x1EE3B, 0x1EE3B}, + {0x1EE42, 0x1EE42}, {0x1EE47, 0x1EE47}, {0x1EE49, 0x1EE49}, + {0x1EE4B, 0x1EE4B}, {0x1EE4D, 0x1EE4F}, {0x1EE51, 0x1EE52}, + {0x1EE54, 0x1EE54}, {0x1EE57, 0x1EE57}, {0x1EE59, 0x1EE59}, + {0x1EE5B, 0x1EE5B}, {0x1EE5D, 0x1EE5D}, {0x1EE5F, 0x1EE5F}, + {0x1EE61, 0x1EE62}, {0x1EE64, 0x1EE64}, {0x1EE67, 0x1EE6A}, + {0x1EE6C, 0x1EE72}, {0x1EE74, 0x1EE77}, {0x1EE79, 0x1EE7C}, + {0x1EE7E, 0x1EE7E}, {0x1EE80, 0x1EE89}, {0x1EE8B, 0x1EE9B}, + {0x1EEA1, 0x1EEA3}, {0x1EEA5, 0x1EEA9}, {0x1EEAB, 0x1EEBB}, + {0x1EEF0, 0x1EEF1}, + // Script_Extensions: Arabic + {0x102E0, 0x102FB}, {0xFD3E, 0xFD3F}, {0x06D4, 0x06D4}, + {0x064B, 0x0655}, {0x0670, 0x0670}, {0xFDF2, 0xFDF2}, + {0xFDFD, 0xFDFD}, {0x061C, 0x061C}, {0x0660, 0x0669}, + {0x060C, 0x060C}, {0x061B, 0x061B}, {0x061F, 0x061F}, + {0x0640, 0x0640}, + // Script: Syriac + {0x0700, 0x070D}, {0x070F, 0x074A}, {0x074D, 0x074F}, + {0x0860, 0x086A}, + // Script_Extensions: Syriac + {0x1DFA, 0x1DFA}, {0x064B, 0x0655}, {0x0670, 0x0670}, + {0x1DF8, 0x1DF8}, {0x061C, 0x061C}, {0x060C, 0x060C}, + {0x061B, 0x061B}, {0x061F, 0x061F}, {0x0640, 0x0640}, + // Script: Thaana + {0x0780, 0x07B1}, + // Script_Extensions: Thaana + {0xFDF2, 0xFDF2}, {0xFDFD, 0xFDFD}, {0x061C, 0x061C}, + {0x0660, 0x0669}, {0x060C, 0x060C}, {0x061B, 0x061B}, + {0x061F, 0x061F}, + // Script: Devanagari + {0x0900, 0x0950}, {0x0955, 0x0963}, {0x0966, 0x097F}, + {0xA8E0, 0xA8FF}, {0x11B00, 0x11B09}, + // Script_Extensions: Devanagari + {0x1CD1, 0x1CD1}, {0x1CD4, 0x1CD4}, {0x1CDB, 0x1CDB}, + {0x1CDE, 0x1CDF}, {0x1CE2, 0x1CE8}, {0x1CEB, 0x1CEC}, + {0x1CEE, 0x1CF1}, {0x1CD5, 0x1CD6}, {0x1CD8, 0x1CD8}, + {0x1CE1, 0x1CE1}, {0x1CEA, 0x1CEA}, {0x1CED, 0x1CED}, + {0x1CF5, 0x1CF6}, {0xA8F1, 0xA8F1}, {0x1CD3, 0x1CD3}, + {0x1CF3, 0x1CF3}, {0x1CF8, 0x1CF9}, {0x1CE9, 0x1CE9}, + {0x1CD7, 0x1CD7}, {0x1CD9, 0x1CD9}, {0x1CDC, 0x1CDD}, + {0x1CE0, 0x1CE0}, {0xA8F3, 0xA8F3}, {0x1CF4, 0x1CF4}, + {0x20F0, 0x20F0}, {0x1CD0, 0x1CD0}, {0x1CD2, 0x1CD2}, + {0x0966, 0x096F}, {0x1CDA, 0x1CDA}, {0x1CF2, 0x1CF2}, + {0xA836, 0xA837}, {0xA839, 0xA839}, {0x0952, 0x0952}, + {0xA838, 0xA838}, {0x0951, 0x0951}, {0xA833, 0xA835}, + {0xA830, 0xA832}, {0x0964, 0x0964}, {0x0965, 0x0965}, + // Script: Bengali + {0x0980, 0x0983}, {0x0985, 0x098C}, {0x098F, 0x0990}, + {0x0993, 0x09A8}, {0x09AA, 0x09B0}, {0x09B2, 0x09B2}, + {0x09B6, 0x09B9}, {0x09BC, 0x09C4}, {0x09C7, 0x09C8}, + {0x09CB, 0x09CE}, {0x09D7, 0x09D7}, {0x09DC, 0x09DD}, + {0x09DF, 0x09E3}, {0x09E6, 0x09FE}, + // Script_Extensions: Bengali + {0x1CF7, 0x1CF7}, {0x1CD5, 0x1CD6}, {0x1CD8, 0x1CD8}, + {0x1CE1, 0x1CE1}, {0x1CEA, 0x1CEA}, {0x1CED, 0x1CED}, + {0x1CF5, 0x1CF6}, {0xA8F1, 0xA8F1}, {0x09E6, 0x09EF}, + {0x1CD0, 0x1CD0}, {0x1CD2, 0x1CD2}, {0x1CF2, 0x1CF2}, + {0x0952, 0x0952}, {0x0951, 0x0951}, {0x0964, 0x0964}, + {0x0965, 0x0965}, + // Script: Gurmukhi + {0x0A01, 0x0A03}, {0x0A05, 0x0A0A}, {0x0A0F, 0x0A10}, + {0x0A13, 0x0A28}, {0x0A2A, 0x0A30}, {0x0A32, 0x0A33}, + {0x0A35, 0x0A36}, {0x0A38, 0x0A39}, {0x0A3C, 0x0A3C}, + {0x0A3E, 0x0A42}, {0x0A47, 0x0A48}, {0x0A4B, 0x0A4D}, + {0x0A51, 0x0A51}, {0x0A59, 0x0A5C}, {0x0A5E, 0x0A5E}, + {0x0A66, 0x0A76}, + // Script_Extensions: Gurmukhi + {0x0A66, 0x0A6F}, {0xA836, 0xA837}, {0xA839, 0xA839}, + {0x0952, 0x0952}, {0xA838, 0xA838}, {0x0951, 0x0951}, + {0xA833, 0xA835}, {0xA830, 0xA832}, {0x0964, 0x0964}, + {0x0965, 0x0965}, + // Script: Gujarati + {0x0A81, 0x0A83}, {0x0A85, 0x0A8D}, {0x0A8F, 0x0A91}, + {0x0A93, 0x0AA8}, {0x0AAA, 0x0AB0}, {0x0AB2, 0x0AB3}, + {0x0AB5, 0x0AB9}, {0x0ABC, 0x0AC5}, {0x0AC7, 0x0AC9}, + {0x0ACB, 0x0ACD}, {0x0AD0, 0x0AD0}, {0x0AE0, 0x0AE3}, + {0x0AE6, 0x0AF1}, {0x0AF9, 0x0AFF}, + // Script_Extensions: Gujarati + {0x0AE6, 0x0AEF}, {0xA836, 0xA837}, {0xA839, 0xA839}, + {0x0952, 0x0952}, {0xA838, 0xA838}, {0x0951, 0x0951}, + {0xA833, 0xA835}, {0xA830, 0xA832}, {0x0964, 0x0964}, + {0x0965, 0x0965}, + // Script: Oriya + {0x0B01, 0x0B03}, {0x0B05, 0x0B0C}, {0x0B0F, 0x0B10}, + {0x0B13, 0x0B28}, {0x0B2A, 0x0B30}, {0x0B32, 0x0B33}, + {0x0B35, 0x0B39}, {0x0B3C, 0x0B44}, {0x0B47, 0x0B48}, + {0x0B4B, 0x0B4D}, {0x0B55, 0x0B57}, {0x0B5C, 0x0B5D}, + {0x0B5F, 0x0B63}, {0x0B66, 0x0B77}, + // Script_Extensions: Oriya + {0x1CDA, 0x1CDA}, {0x1CF2, 0x1CF2}, {0x0952, 0x0952}, + {0x0951, 0x0951}, {0x0964, 0x0964}, {0x0965, 0x0965}, + // Script: Tamil + {0x0B82, 0x0B83}, {0x0B85, 0x0B8A}, {0x0B8E, 0x0B90}, + {0x0B92, 0x0B95}, {0x0B99, 0x0B9A}, {0x0B9C, 0x0B9C}, + {0x0B9E, 0x0B9F}, {0x0BA3, 0x0BA4}, {0x0BA8, 0x0BAA}, + {0x0BAE, 0x0BB9}, {0x0BBE, 0x0BC2}, {0x0BC6, 0x0BC8}, + {0x0BCA, 0x0BCD}, {0x0BD0, 0x0BD0}, {0x0BD7, 0x0BD7}, + {0x0BE6, 0x0BFA}, {0x11FC0, 0x11FF1}, {0x11FFF, 0x11FFF}, + // Script_Extensions: Tamil + {0xA8F3, 0xA8F3}, {0x0BE6, 0x0BF3}, {0x11301, 0x11301}, + {0x11303, 0x11303}, {0x1133B, 0x1133C}, {0x11FD0, 0x11FD1}, + {0x11FD3, 0x11FD3}, {0x1CDA, 0x1CDA}, {0x0952, 0x0952}, + {0x0951, 0x0951}, {0x0964, 0x0964}, {0x0965, 0x0965}, + // Script: Telugu + {0x0C00, 0x0C0C}, {0x0C0E, 0x0C10}, {0x0C12, 0x0C28}, + {0x0C2A, 0x0C39}, {0x0C3C, 0x0C44}, {0x0C46, 0x0C48}, + {0x0C4A, 0x0C4D}, {0x0C55, 0x0C56}, {0x0C58, 0x0C5A}, + {0x0C5D, 0x0C5D}, {0x0C60, 0x0C63}, {0x0C66, 0x0C6F}, + {0x0C77, 0x0C7F}, + // Script_Extensions: Telugu + {0x1CDA, 0x1CDA}, {0x1CF2, 0x1CF2}, {0x0952, 0x0952}, + {0x0951, 0x0951}, {0x0964, 0x0964}, {0x0965, 0x0965}, + // Script: Kannada + {0x0C80, 0x0C8C}, {0x0C8E, 0x0C90}, {0x0C92, 0x0CA8}, + {0x0CAA, 0x0CB3}, {0x0CB5, 0x0CB9}, {0x0CBC, 0x0CC4}, + {0x0CC6, 0x0CC8}, {0x0CCA, 0x0CCD}, {0x0CD5, 0x0CD6}, + {0x0CDD, 0x0CDE}, {0x0CE0, 0x0CE3}, {0x0CE6, 0x0CEF}, + {0x0CF1, 0x0CF3}, + // Script_Extensions: Kannada + {0x0CE6, 0x0CEF}, {0x1CF4, 0x1CF4}, {0x1CD0, 0x1CD0}, + {0x1CD2, 0x1CD2}, {0x1CDA, 0x1CDA}, {0x1CF2, 0x1CF2}, + {0x0952, 0x0952}, {0x0951, 0x0951}, {0xA833, 0xA835}, + {0xA830, 0xA832}, {0x0964, 0x0964}, {0x0965, 0x0965}, + // Script: Malayalam + {0x0D00, 0x0D0C}, {0x0D0E, 0x0D10}, {0x0D12, 0x0D44}, + {0x0D46, 0x0D48}, {0x0D4A, 0x0D4F}, {0x0D54, 0x0D63}, + {0x0D66, 0x0D7F}, + // Script_Extensions: Malayalam + {0x1CDA, 0x1CDA}, {0x1CF2, 0x1CF2}, {0x0952, 0x0952}, + {0x0951, 0x0951}, {0xA830, 0xA832}, {0x0964, 0x0964}, + {0x0965, 0x0965}, + // Script: Sinhala + {0x0D81, 0x0D83}, {0x0D85, 0x0D96}, {0x0D9A, 0x0DB1}, + {0x0DB3, 0x0DBB}, {0x0DBD, 0x0DBD}, {0x0DC0, 0x0DC6}, + {0x0DCA, 0x0DCA}, {0x0DCF, 0x0DD4}, {0x0DD6, 0x0DD6}, + {0x0DD8, 0x0DDF}, {0x0DE6, 0x0DEF}, {0x0DF2, 0x0DF4}, + {0x111E1, 0x111F4}, + // Script_Extensions: Sinhala + {0x1CF2, 0x1CF2}, {0x0964, 0x0964}, {0x0965, 0x0965}, + // Script: Thai + {0x0E01, 0x0E3A}, {0x0E40, 0x0E5B}, + // Script: Lao + {0x0E81, 0x0E82}, {0x0E84, 0x0E84}, {0x0E86, 0x0E8A}, + {0x0E8C, 0x0EA3}, {0x0EA5, 0x0EA5}, {0x0EA7, 0x0EBD}, + {0x0EC0, 0x0EC4}, {0x0EC6, 0x0EC6}, {0x0EC8, 0x0ECE}, + {0x0ED0, 0x0ED9}, {0x0EDC, 0x0EDF}, + // Script: Tibetan + {0x0F00, 0x0F47}, {0x0F49, 0x0F6C}, {0x0F71, 0x0F97}, + {0x0F99, 0x0FBC}, {0x0FBE, 0x0FCC}, {0x0FCE, 0x0FD4}, + {0x0FD9, 0x0FDA}, + // Script: Myanmar + {0x1000, 0x109F}, {0xA9E0, 0xA9FE}, {0xAA60, 0xAA7F}, + // Script_Extensions: Myanmar + {0x1040, 0x1049}, {0xA92E, 0xA92E}, + // Script: Georgian + {0x10A0, 0x10C5}, {0x10C7, 0x10C7}, {0x10CD, 0x10CD}, + {0x10D0, 0x10FA}, {0x10FC, 0x10FF}, {0x1C90, 0x1CBA}, + {0x1CBD, 0x1CBF}, {0x2D00, 0x2D25}, {0x2D27, 0x2D27}, + {0x2D2D, 0x2D2D}, + // Script_Extensions: Georgian + {0x10FB, 0x10FB}, + // Script: Hangul + {0x1100, 0x11FF}, {0x302E, 0x302F}, {0x3131, 0x318E}, + {0x3200, 0x321E}, {0x3260, 0x327E}, {0xA960, 0xA97C}, + {0xAC00, 0xD7A3}, {0xD7B0, 0xD7C6}, {0xD7CB, 0xD7FB}, + {0xFFA0, 0xFFBE}, {0xFFC2, 0xFFC7}, {0xFFCA, 0xFFCF}, + {0xFFD2, 0xFFD7}, {0xFFDA, 0xFFDC}, + // Script_Extensions: Hangul + {0x3003, 0x3003}, {0x3013, 0x3013}, {0x301C, 0x301F}, + {0x3030, 0x3030}, {0x3037, 0x3037}, {0xFE45, 0xFE46}, + {0x3001, 0x3002}, {0x3008, 0x3011}, {0x3014, 0x301B}, + {0x30FB, 0x30FB}, {0xFF61, 0xFF65}, + // Script: Ethiopic + {0x1200, 0x1248}, {0x124A, 0x124D}, {0x1250, 0x1256}, + {0x1258, 0x1258}, {0x125A, 0x125D}, {0x1260, 0x1288}, + {0x128A, 0x128D}, {0x1290, 0x12B0}, {0x12B2, 0x12B5}, + {0x12B8, 0x12BE}, {0x12C0, 0x12C0}, {0x12C2, 0x12C5}, + {0x12C8, 0x12D6}, {0x12D8, 0x1310}, {0x1312, 0x1315}, + {0x1318, 0x135A}, {0x135D, 0x137C}, {0x1380, 0x1399}, + {0x2D80, 0x2D96}, {0x2DA0, 0x2DA6}, {0x2DA8, 0x2DAE}, + {0x2DB0, 0x2DB6}, {0x2DB8, 0x2DBE}, {0x2DC0, 0x2DC6}, + {0x2DC8, 0x2DCE}, {0x2DD0, 0x2DD6}, {0x2DD8, 0x2DDE}, + {0xAB01, 0xAB06}, {0xAB09, 0xAB0E}, {0xAB11, 0xAB16}, + {0xAB20, 0xAB26}, {0xAB28, 0xAB2E}, {0x1E7E0, 0x1E7E6}, + {0x1E7E8, 0x1E7EB}, {0x1E7ED, 0x1E7EE}, {0x1E7F0, 0x1E7FE}, + // Script: Cherokee + {0x13A0, 0x13F5}, {0x13F8, 0x13FD}, {0xAB70, 0xABBF}, + // Script: Canadian_Aboriginal + {0x1400, 0x167F}, {0x18B0, 0x18F5}, {0x11AB0, 0x11ABF}, + // Script: Ogham + {0x1680, 0x169C}, + // Script: Runic + {0x16A0, 0x16EA}, {0x16EE, 0x16F8}, + // Script: Khmer + {0x1780, 0x17DD}, {0x17E0, 0x17E9}, {0x17F0, 0x17F9}, + {0x19E0, 0x19FF}, + // Script: Mongolian + {0x1800, 0x1801}, {0x1804, 0x1804}, {0x1806, 0x1819}, + {0x1820, 0x1878}, {0x1880, 0x18AA}, {0x11660, 0x1166C}, + // Script_Extensions: Mongolian + {0x202F, 0x202F}, {0x1802, 0x1803}, {0x1805, 0x1805}, + // Script: Hiragana + {0x3041, 0x3096}, {0x309D, 0x309F}, {0x1B001, 0x1B11F}, + {0x1B132, 0x1B132}, {0x1B150, 0x1B152}, {0x1F200, 0x1F200}, + // Script_Extensions: Hiragana + {0x3031, 0x3035}, {0x3099, 0x309C}, {0x30A0, 0x30A0}, + {0x30FC, 0x30FC}, {0xFF70, 0xFF70}, {0xFF9E, 0xFF9F}, + {0x303C, 0x303D}, {0x3003, 0x3003}, {0x3013, 0x3013}, + {0x301C, 0x301F}, {0x3030, 0x3030}, {0x3037, 0x3037}, + {0xFE45, 0xFE46}, {0x3001, 0x3002}, {0x3008, 0x3011}, + {0x3014, 0x301B}, {0x30FB, 0x30FB}, {0xFF61, 0xFF65}, + // Script: Katakana + {0x30A1, 0x30FA}, {0x30FD, 0x30FF}, {0x31F0, 0x31FF}, + {0x32D0, 0x32FE}, {0x3300, 0x3357}, {0xFF66, 0xFF6F}, + {0xFF71, 0xFF9D}, {0x1AFF0, 0x1AFF3}, {0x1AFF5, 0x1AFFB}, + {0x1AFFD, 0x1AFFE}, {0x1B000, 0x1B000}, {0x1B120, 0x1B122}, + {0x1B155, 0x1B155}, {0x1B164, 0x1B167}, + // Script_Extensions: Katakana + {0x3031, 0x3035}, {0x3099, 0x309C}, {0x30A0, 0x30A0}, + {0x30FC, 0x30FC}, {0xFF70, 0xFF70}, {0xFF9E, 0xFF9F}, + {0x303C, 0x303D}, {0x3003, 0x3003}, {0x3013, 0x3013}, + {0x301C, 0x301F}, {0x3030, 0x3030}, {0x3037, 0x3037}, + {0xFE45, 0xFE46}, {0x3001, 0x3002}, {0x3008, 0x3011}, + {0x3014, 0x301B}, {0x30FB, 0x30FB}, {0xFF61, 0xFF65}, + // Script: Bopomofo + {0x02EA, 0x02EB}, {0x3105, 0x312F}, {0x31A0, 0x31BF}, + // Script_Extensions: Bopomofo + {0x302A, 0x302D}, {0x3003, 0x3003}, {0x3013, 0x3013}, + {0x301C, 0x301F}, {0x3030, 0x3030}, {0x3037, 0x3037}, + {0xFE45, 0xFE46}, {0x3001, 0x3002}, {0x3008, 0x3011}, + {0x3014, 0x301B}, {0x30FB, 0x30FB}, {0xFF61, 0xFF65}, + // Script: Han + {0x2E80, 0x2E99}, {0x2E9B, 0x2EF3}, {0x2F00, 0x2FD5}, + {0x3005, 0x3005}, {0x3007, 0x3007}, {0x3021, 0x3029}, + {0x3038, 0x303B}, {0x3400, 0x4DBF}, {0x4E00, 0x9FFF}, + {0xF900, 0xFA6D}, {0xFA70, 0xFAD9}, {0x16FE2, 0x16FE3}, + {0x16FF0, 0x16FF1}, {0x20000, 0x2A6DF}, {0x2A700, 0x2B739}, + {0x2B740, 0x2B81D}, {0x2B820, 0x2CEA1}, {0x2CEB0, 0x2EBE0}, + {0x2EBF0, 0x2EE5D}, {0x2F800, 0x2FA1D}, {0x30000, 0x3134A}, + {0x31350, 0x323AF}, + // Script_Extensions: Han + {0x3006, 0x3006}, {0x303E, 0x303F}, {0x3190, 0x319F}, + {0x31C0, 0x31E3}, {0x3220, 0x3247}, {0x3280, 0x32B0}, + {0x32C0, 0x32CB}, {0x32FF, 0x32FF}, {0x3358, 0x3370}, + {0x337B, 0x337F}, {0x33E0, 0x33FE}, {0x1D360, 0x1D371}, + {0x1F250, 0x1F251}, {0x302A, 0x302D}, {0xA700, 0xA707}, + {0x303C, 0x303D}, {0x3003, 0x3003}, {0x3013, 0x3013}, + {0x301C, 0x301F}, {0x3030, 0x3030}, {0x3037, 0x3037}, + {0xFE45, 0xFE46}, {0x3001, 0x3002}, {0x3008, 0x3011}, + {0x3014, 0x301B}, {0x30FB, 0x30FB}, {0xFF61, 0xFF65}, + // Script: Yi + {0xA000, 0xA48C}, {0xA490, 0xA4C6}, + // Script_Extensions: Yi + {0x3001, 0x3002}, {0x3008, 0x3011}, {0x3014, 0x301B}, + {0x30FB, 0x30FB}, {0xFF61, 0xFF65}, + // Script: Old_Italic + {0x10300, 0x10323}, {0x1032D, 0x1032F}, + // Script: Gothic + {0x10330, 0x1034A}, + // Script: Deseret + {0x10400, 0x1044F}, + // Script: Inherited + {0x0300, 0x036F}, {0x0485, 0x0486}, {0x064B, 0x0655}, + {0x0670, 0x0670}, {0x0951, 0x0954}, {0x1AB0, 0x1ACE}, + {0x1CD0, 0x1CD2}, {0x1CD4, 0x1CE0}, {0x1CE2, 0x1CE8}, + {0x1CED, 0x1CED}, {0x1CF4, 0x1CF4}, {0x1CF8, 0x1CF9}, + {0x1DC0, 0x1DFF}, {0x200C, 0x200D}, {0x20D0, 0x20F0}, + {0x302A, 0x302D}, {0x3099, 0x309A}, {0xFE00, 0xFE0F}, + {0xFE20, 0xFE2D}, {0x101FD, 0x101FD}, {0x102E0, 0x102E0}, + {0x1133B, 0x1133B}, {0x1CF00, 0x1CF2D}, {0x1CF30, 0x1CF46}, + {0x1D167, 0x1D169}, {0x1D17B, 0x1D182}, {0x1D185, 0x1D18B}, + {0x1D1AA, 0x1D1AD}, {0xE0100, 0xE01EF}, + // Script: Tagalog + {0x1700, 0x1715}, {0x171F, 0x171F}, + // Script_Extensions: Tagalog + {0x1735, 0x1736}, + // Script: Hanunoo + {0x1720, 0x1734}, + // Script_Extensions: Hanunoo + {0x1735, 0x1736}, + // Script: Buhid + {0x1740, 0x1753}, + // Script_Extensions: Buhid + {0x1735, 0x1736}, + // Script: Tagbanwa + {0x1760, 0x176C}, {0x176E, 0x1770}, {0x1772, 0x1773}, + // Script_Extensions: Tagbanwa + {0x1735, 0x1736}, + // Script: Limbu + {0x1900, 0x191E}, {0x1920, 0x192B}, {0x1930, 0x193B}, + {0x1940, 0x1940}, {0x1944, 0x194F}, + // Script_Extensions: Limbu + {0x0965, 0x0965}, + // Script: Tai_Le + {0x1950, 0x196D}, {0x1970, 0x1974}, + // Script_Extensions: Tai_Le + {0x1040, 0x1049}, + // Script: Linear_B + {0x10000, 0x1000B}, {0x1000D, 0x10026}, {0x10028, 0x1003A}, + {0x1003C, 0x1003D}, {0x1003F, 0x1004D}, {0x10050, 0x1005D}, + {0x10080, 0x100FA}, + // Script_Extensions: Linear_B + {0x10102, 0x10102}, {0x10137, 0x1013F}, {0x10100, 0x10101}, + {0x10107, 0x10133}, + // Script: Ugaritic + {0x10380, 0x1039D}, {0x1039F, 0x1039F}, + // Script: Shavian + {0x10450, 0x1047F}, + // Script: Osmanya + {0x10480, 0x1049D}, {0x104A0, 0x104A9}, + // Script: Cypriot + {0x10800, 0x10805}, {0x10808, 0x10808}, {0x1080A, 0x10835}, + {0x10837, 0x10838}, {0x1083C, 0x1083C}, {0x1083F, 0x1083F}, + // Script_Extensions: Cypriot + {0x10102, 0x10102}, {0x10137, 0x1013F}, {0x10100, 0x10101}, + {0x10107, 0x10133}, + // Script: Braille + {0x2800, 0x28FF}, + // Script: Buginese + {0x1A00, 0x1A1B}, {0x1A1E, 0x1A1F}, + // Script_Extensions: Buginese + {0xA9CF, 0xA9CF}, + // Script: Coptic + {0x03E2, 0x03EF}, {0x2C80, 0x2CF3}, {0x2CF9, 0x2CFF}, + // Script_Extensions: Coptic + {0x102E0, 0x102FB}, + // Script: New_Tai_Lue + {0x1980, 0x19AB}, {0x19B0, 0x19C9}, {0x19D0, 0x19DA}, + {0x19DE, 0x19DF}, + // Script: Glagolitic + {0x2C00, 0x2C5F}, {0x1E000, 0x1E006}, {0x1E008, 0x1E018}, + {0x1E01B, 0x1E021}, {0x1E023, 0x1E024}, {0x1E026, 0x1E02A}, + // Script_Extensions: Glagolitic + {0x0484, 0x0484}, {0x0487, 0x0487}, {0x2E43, 0x2E43}, + {0xA66F, 0xA66F}, + // Script: Tifinagh + {0x2D30, 0x2D67}, {0x2D6F, 0x2D70}, {0x2D7F, 0x2D7F}, + // Script: Syloti_Nagri + {0xA800, 0xA82C}, + // Script_Extensions: Syloti_Nagri + {0x09E6, 0x09EF}, {0x0964, 0x0964}, {0x0965, 0x0965}, + // Script: Old_Persian + {0x103A0, 0x103C3}, {0x103C8, 0x103D5}, + // Script: Kharoshthi + {0x10A00, 0x10A03}, {0x10A05, 0x10A06}, {0x10A0C, 0x10A13}, + {0x10A15, 0x10A17}, {0x10A19, 0x10A35}, {0x10A38, 0x10A3A}, + {0x10A3F, 0x10A48}, {0x10A50, 0x10A58}, + // Script: Balinese + {0x1B00, 0x1B4C}, {0x1B50, 0x1B7E}, + // Script: Cuneiform + {0x12000, 0x12399}, {0x12400, 0x1246E}, {0x12470, 0x12474}, + {0x12480, 0x12543}, + // Script: Phoenician + {0x10900, 0x1091B}, {0x1091F, 0x1091F}, + // Script: Phags_Pa + {0xA840, 0xA877}, + // Script_Extensions: Phags_Pa + {0x1802, 0x1803}, {0x1805, 0x1805}, + // Script: Nko + {0x07C0, 0x07FA}, {0x07FD, 0x07FF}, + // Script_Extensions: Nko + {0xFD3E, 0xFD3F}, {0x060C, 0x060C}, {0x061B, 0x061B}, + {0x061F, 0x061F}, + // Script: Sundanese + {0x1B80, 0x1BBF}, {0x1CC0, 0x1CC7}, + // Script: Lepcha + {0x1C00, 0x1C37}, {0x1C3B, 0x1C49}, {0x1C4D, 0x1C4F}, + // Script: Ol_Chiki + {0x1C50, 0x1C7F}, + // Script: Vai + {0xA500, 0xA62B}, + // Script: Saurashtra + {0xA880, 0xA8C5}, {0xA8CE, 0xA8D9}, + // Script: Kayah_Li + {0xA900, 0xA92D}, {0xA92F, 0xA92F}, + // Script_Extensions: Kayah_Li + {0xA92E, 0xA92E}, + // Script: Rejang + {0xA930, 0xA953}, {0xA95F, 0xA95F}, + // Script: Lycian + {0x10280, 0x1029C}, + // Script: Carian + {0x102A0, 0x102D0}, + // Script: Lydian + {0x10920, 0x10939}, {0x1093F, 0x1093F}, + // Script: Cham + {0xAA00, 0xAA36}, {0xAA40, 0xAA4D}, {0xAA50, 0xAA59}, + {0xAA5C, 0xAA5F}, + // Script: Tai_Tham + {0x1A20, 0x1A5E}, {0x1A60, 0x1A7C}, {0x1A7F, 0x1A89}, + {0x1A90, 0x1A99}, {0x1AA0, 0x1AAD}, + // Script: Tai_Viet + {0xAA80, 0xAAC2}, {0xAADB, 0xAADF}, + // Script: Avestan + {0x10B00, 0x10B35}, {0x10B39, 0x10B3F}, + // Script: Egyptian_Hieroglyphs + {0x13000, 0x13455}, + // Script: Samaritan + {0x0800, 0x082D}, {0x0830, 0x083E}, + // Script: Lisu + {0xA4D0, 0xA4FF}, {0x11FB0, 0x11FB0}, + // Script: Bamum + {0xA6A0, 0xA6F7}, {0x16800, 0x16A38}, + // Script: Javanese + {0xA980, 0xA9CD}, {0xA9D0, 0xA9D9}, {0xA9DE, 0xA9DF}, + // Script_Extensions: Javanese + {0xA9CF, 0xA9CF}, + // Script: Meetei_Mayek + {0xAAE0, 0xAAF6}, {0xABC0, 0xABED}, {0xABF0, 0xABF9}, + // Script: Imperial_Aramaic + {0x10840, 0x10855}, {0x10857, 0x1085F}, + // Script: Old_South_Arabian + {0x10A60, 0x10A7F}, + // Script: Inscriptional_Parthian + {0x10B40, 0x10B55}, {0x10B58, 0x10B5F}, + // Script: Inscriptional_Pahlavi + {0x10B60, 0x10B72}, {0x10B78, 0x10B7F}, + // Script: Old_Turkic + {0x10C00, 0x10C48}, + // Script: Kaithi + {0x11080, 0x110C2}, {0x110CD, 0x110CD}, + // Script_Extensions: Kaithi + {0x0966, 0x096F}, {0xA836, 0xA837}, {0xA839, 0xA839}, + {0xA838, 0xA838}, {0xA833, 0xA835}, {0xA830, 0xA832}, + // Script: Batak + {0x1BC0, 0x1BF3}, {0x1BFC, 0x1BFF}, + // Script: Brahmi + {0x11000, 0x1104D}, {0x11052, 0x11075}, {0x1107F, 0x1107F}, + // Script: Mandaic + {0x0840, 0x085B}, {0x085E, 0x085E}, + // Script_Extensions: Mandaic + {0x0640, 0x0640}, + // Script: Chakma + {0x11100, 0x11134}, {0x11136, 0x11147}, + // Script_Extensions: Chakma + {0x09E6, 0x09EF}, {0x1040, 0x1049}, + // Script: Meroitic_Cursive + {0x109A0, 0x109B7}, {0x109BC, 0x109CF}, {0x109D2, 0x109FF}, + // Script: Meroitic_Hieroglyphs + {0x10980, 0x1099F}, + // Script: Miao + {0x16F00, 0x16F4A}, {0x16F4F, 0x16F87}, {0x16F8F, 0x16F9F}, + // Script: Sharada + {0x11180, 0x111DF}, + // Script_Extensions: Sharada + {0x1CD7, 0x1CD7}, {0x1CD9, 0x1CD9}, {0x1CDC, 0x1CDD}, + {0x1CE0, 0x1CE0}, {0xA838, 0xA838}, {0x0951, 0x0951}, + {0xA833, 0xA835}, {0xA830, 0xA832}, + // Script: Sora_Sompeng + {0x110D0, 0x110E8}, {0x110F0, 0x110F9}, + // Script: Takri + {0x11680, 0x116B9}, {0x116C0, 0x116C9}, + // Script_Extensions: Takri + {0xA836, 0xA837}, {0xA839, 0xA839}, {0xA838, 0xA838}, + {0xA833, 0xA835}, {0xA830, 0xA832}, {0x0964, 0x0964}, + {0x0965, 0x0965}, + // Script: Caucasian_Albanian + {0x10530, 0x10563}, {0x1056F, 0x1056F}, + // Script: Bassa_Vah + {0x16AD0, 0x16AED}, {0x16AF0, 0x16AF5}, + // Script: Duployan + {0x1BC00, 0x1BC6A}, {0x1BC70, 0x1BC7C}, {0x1BC80, 0x1BC88}, + {0x1BC90, 0x1BC99}, {0x1BC9C, 0x1BC9F}, + // Script_Extensions: Duployan + {0x1BCA0, 0x1BCA3}, + // Script: Elbasan + {0x10500, 0x10527}, + // Script: Grantha + {0x11300, 0x11303}, {0x11305, 0x1130C}, {0x1130F, 0x11310}, + {0x11313, 0x11328}, {0x1132A, 0x11330}, {0x11332, 0x11333}, + {0x11335, 0x11339}, {0x1133C, 0x11344}, {0x11347, 0x11348}, + {0x1134B, 0x1134D}, {0x11350, 0x11350}, {0x11357, 0x11357}, + {0x1135D, 0x11363}, {0x11366, 0x1136C}, {0x11370, 0x11374}, + // Script_Extensions: Grantha + {0x1CD3, 0x1CD3}, {0x1CF3, 0x1CF3}, {0x1CF8, 0x1CF9}, + {0x0BE6, 0x0BF3}, {0x11301, 0x11301}, {0x11303, 0x11303}, + {0x1133B, 0x1133C}, {0x11FD0, 0x11FD1}, {0x11FD3, 0x11FD3}, + {0x1CF4, 0x1CF4}, {0x20F0, 0x20F0}, {0x1CD0, 0x1CD0}, + {0x1CD2, 0x1CD2}, {0x1CF2, 0x1CF2}, {0x0952, 0x0952}, + {0x0951, 0x0951}, {0x0964, 0x0964}, {0x0965, 0x0965}, + // Script: Pahawh_Hmong + {0x16B00, 0x16B45}, {0x16B50, 0x16B59}, {0x16B5B, 0x16B61}, + {0x16B63, 0x16B77}, {0x16B7D, 0x16B8F}, + // Script: Khojki + {0x11200, 0x11211}, {0x11213, 0x11241}, + // Script_Extensions: Khojki + {0x0AE6, 0x0AEF}, {0xA836, 0xA837}, {0xA839, 0xA839}, + {0xA838, 0xA838}, {0xA833, 0xA835}, {0xA830, 0xA832}, + // Script: Linear_A + {0x10600, 0x10736}, {0x10740, 0x10755}, {0x10760, 0x10767}, + // Script_Extensions: Linear_A + {0x10107, 0x10133}, + // Script: Mahajani + {0x11150, 0x11176}, + // Script_Extensions: Mahajani + {0x0966, 0x096F}, {0xA836, 0xA837}, {0xA839, 0xA839}, + {0xA838, 0xA838}, {0xA833, 0xA835}, {0xA830, 0xA832}, + {0x0964, 0x0964}, {0x0965, 0x0965}, + // Script: Manichaean + {0x10AC0, 0x10AE6}, {0x10AEB, 0x10AF6}, + // Script_Extensions: Manichaean + {0x10AF2, 0x10AF2}, {0x0640, 0x0640}, + // Script: Mende_Kikakui + {0x1E800, 0x1E8C4}, {0x1E8C7, 0x1E8D6}, + // Script: Modi + {0x11600, 0x11644}, {0x11650, 0x11659}, + // Script_Extensions: Modi + {0xA836, 0xA837}, {0xA839, 0xA839}, {0xA838, 0xA838}, + {0xA833, 0xA835}, {0xA830, 0xA832}, + // Script: Mro + {0x16A40, 0x16A5E}, {0x16A60, 0x16A69}, {0x16A6E, 0x16A6F}, + // Script: Old_North_Arabian + {0x10A80, 0x10A9F}, + // Script: Nabataean + {0x10880, 0x1089E}, {0x108A7, 0x108AF}, + // Script: Palmyrene + {0x10860, 0x1087F}, + // Script: Pau_Cin_Hau + {0x11AC0, 0x11AF8}, + // Script: Old_Permic + {0x10350, 0x1037A}, + // Script_Extensions: Old_Permic + {0x0483, 0x0483}, + // Script: Psalter_Pahlavi + {0x10B80, 0x10B91}, {0x10B99, 0x10B9C}, {0x10BA9, 0x10BAF}, + // Script_Extensions: Psalter_Pahlavi + {0x0640, 0x0640}, + // Script: Siddham + {0x11580, 0x115B5}, {0x115B8, 0x115DD}, + // Script: Khudawadi + {0x112B0, 0x112EA}, {0x112F0, 0x112F9}, + // Script_Extensions: Khudawadi + {0xA836, 0xA837}, {0xA839, 0xA839}, {0xA838, 0xA838}, + {0xA833, 0xA835}, {0xA830, 0xA832}, {0x0964, 0x0964}, + {0x0965, 0x0965}, + // Script: Tirhuta + {0x11480, 0x114C7}, {0x114D0, 0x114D9}, + // Script_Extensions: Tirhuta + {0x1CF2, 0x1CF2}, {0xA836, 0xA837}, {0xA839, 0xA839}, + {0x0952, 0x0952}, {0xA838, 0xA838}, {0x0951, 0x0951}, + {0xA833, 0xA835}, {0xA830, 0xA832}, {0x0964, 0x0964}, + {0x0965, 0x0965}, + // Script: Warang_Citi + {0x118A0, 0x118F2}, {0x118FF, 0x118FF}, + // Script: Ahom + {0x11700, 0x1171A}, {0x1171D, 0x1172B}, {0x11730, 0x11746}, + // Script: Anatolian_Hieroglyphs + {0x14400, 0x14646}, + // Script: Hatran + {0x108E0, 0x108F2}, {0x108F4, 0x108F5}, {0x108FB, 0x108FF}, + // Script: Multani + {0x11280, 0x11286}, {0x11288, 0x11288}, {0x1128A, 0x1128D}, + {0x1128F, 0x1129D}, {0x1129F, 0x112A9}, + // Script_Extensions: Multani + {0x0A66, 0x0A6F}, + // Script: Old_Hungarian + {0x10C80, 0x10CB2}, {0x10CC0, 0x10CF2}, {0x10CFA, 0x10CFF}, + // Script: SignWriting + {0x1D800, 0x1DA8B}, {0x1DA9B, 0x1DA9F}, {0x1DAA1, 0x1DAAF}, + // Script: Adlam + {0x1E900, 0x1E94B}, {0x1E950, 0x1E959}, {0x1E95E, 0x1E95F}, + // Script_Extensions: Adlam + {0x061F, 0x061F}, {0x0640, 0x0640}, + // Script: Bhaiksuki + {0x11C00, 0x11C08}, {0x11C0A, 0x11C36}, {0x11C38, 0x11C45}, + {0x11C50, 0x11C6C}, + // Script: Marchen + {0x11C70, 0x11C8F}, {0x11C92, 0x11CA7}, {0x11CA9, 0x11CB6}, + // Script: Newa + {0x11400, 0x1145B}, {0x1145D, 0x11461}, + // Script: Osage + {0x104B0, 0x104D3}, {0x104D8, 0x104FB}, + // Script: Tangut + {0x16FE0, 0x16FE0}, {0x17000, 0x187F7}, {0x18800, 0x18AFF}, + {0x18D00, 0x18D08}, + // Script: Masaram_Gondi + {0x11D00, 0x11D06}, {0x11D08, 0x11D09}, {0x11D0B, 0x11D36}, + {0x11D3A, 0x11D3A}, {0x11D3C, 0x11D3D}, {0x11D3F, 0x11D47}, + {0x11D50, 0x11D59}, + // Script_Extensions: Masaram_Gondi + {0x0964, 0x0964}, {0x0965, 0x0965}, + // Script: Nushu + {0x16FE1, 0x16FE1}, {0x1B170, 0x1B2FB}, + // Script: Soyombo + {0x11A50, 0x11AA2}, + // Script: Zanabazar_Square + {0x11A00, 0x11A47}, + // Script: Dogra + {0x11800, 0x1183B}, + // Script_Extensions: Dogra + {0x0966, 0x096F}, {0xA836, 0xA837}, {0xA839, 0xA839}, + {0xA838, 0xA838}, {0xA833, 0xA835}, {0xA830, 0xA832}, + {0x0964, 0x0964}, {0x0965, 0x0965}, + // Script: Gunjala_Gondi + {0x11D60, 0x11D65}, {0x11D67, 0x11D68}, {0x11D6A, 0x11D8E}, + {0x11D90, 0x11D91}, {0x11D93, 0x11D98}, {0x11DA0, 0x11DA9}, + // Script_Extensions: Gunjala_Gondi + {0x0964, 0x0964}, {0x0965, 0x0965}, + // Script: Makasar + {0x11EE0, 0x11EF8}, + // Script: Medefaidrin + {0x16E40, 0x16E9A}, + // Script: Hanifi_Rohingya + {0x10D00, 0x10D27}, {0x10D30, 0x10D39}, + // Script_Extensions: Hanifi_Rohingya + {0x06D4, 0x06D4}, {0x060C, 0x060C}, {0x061B, 0x061B}, + {0x061F, 0x061F}, {0x0640, 0x0640}, + // Script: Sogdian + {0x10F30, 0x10F59}, + // Script_Extensions: Sogdian + {0x0640, 0x0640}, + // Script: Old_Sogdian + {0x10F00, 0x10F27}, + // Script: Elymaic + {0x10FE0, 0x10FF6}, + // Script: Nandinagari + {0x119A0, 0x119A7}, {0x119AA, 0x119D7}, {0x119DA, 0x119E4}, + // Script_Extensions: Nandinagari + {0x1CFA, 0x1CFA}, {0x1CE9, 0x1CE9}, {0x0CE6, 0x0CEF}, + {0x1CF2, 0x1CF2}, {0xA833, 0xA835}, {0xA830, 0xA832}, + {0x0964, 0x0964}, {0x0965, 0x0965}, + // Script: Nyiakeng_Puachue_Hmong + {0x1E100, 0x1E12C}, {0x1E130, 0x1E13D}, {0x1E140, 0x1E149}, + {0x1E14E, 0x1E14F}, + // Script: Wancho + {0x1E2C0, 0x1E2F9}, {0x1E2FF, 0x1E2FF}, + // Script: Chorasmian + {0x10FB0, 0x10FCB}, + // Script: Dives_Akuru + {0x11900, 0x11906}, {0x11909, 0x11909}, {0x1190C, 0x11913}, + {0x11915, 0x11916}, {0x11918, 0x11935}, {0x11937, 0x11938}, + {0x1193B, 0x11946}, {0x11950, 0x11959}, + // Script: Khitan_Small_Script + {0x16FE4, 0x16FE4}, {0x18B00, 0x18CD5}, + // Script: Yezidi + {0x10E80, 0x10EA9}, {0x10EAB, 0x10EAD}, {0x10EB0, 0x10EB1}, + // Script_Extensions: Yezidi + {0x0660, 0x0669}, {0x060C, 0x060C}, {0x061B, 0x061B}, + {0x061F, 0x061F}, + // Script: Cypro_Minoan + {0x12F90, 0x12FF2}, + // Script_Extensions: Cypro_Minoan + {0x10100, 0x10101}, + // Script: Old_Uyghur + {0x10F70, 0x10F89}, + // Script_Extensions: Old_Uyghur + {0x10AF2, 0x10AF2}, {0x0640, 0x0640}, + // Script: Tangsa + {0x16A70, 0x16ABE}, {0x16AC0, 0x16AC9}, + // Script: Toto + {0x1E290, 0x1E2AE}, + // Script: Vithkuqi + {0x10570, 0x1057A}, {0x1057C, 0x1058A}, {0x1058C, 0x10592}, + {0x10594, 0x10595}, {0x10597, 0x105A1}, {0x105A3, 0x105B1}, + {0x105B3, 0x105B9}, {0x105BB, 0x105BC}, + // Script: Kawi + {0x11F00, 0x11F10}, {0x11F12, 0x11F3A}, {0x11F3E, 0x11F59}, + // Script: Nag_Mundari + {0x1E4D0, 0x1E4F9}, +}; +// clang-format on + +static constexpr UnicodeRangePoolRef UNICODE_RANGE_ARRAY_POOL[]{ + // General_Category: C + // General_Category: Cc + {0, 2}, + // General_Category: Cf + {2, 21}, + // General_Category: Cn + {23, 707}, + // General_Category: Co + {730, 3}, + // General_Category: Cs + {733, 1}, + // General_Category: L + // General_Category: Ll + {734, 658}, + // General_Category: Lt + {1392, 10}, + // General_Category: Lu + {1402, 646}, + // General_Category: Lm + {2048, 71}, + // General_Category: Lo + {2119, 511}, + // General_Category: LC + // General_Category: M + // General_Category: Mc + {2630, 182}, + // General_Category: Me + {2812, 5}, + // General_Category: Mn + {2817, 346}, + // General_Category: N + // General_Category: Nd + {3163, 64}, + // General_Category: Nl + {3227, 12}, + // General_Category: No + {3239, 72}, + // General_Category: P + // General_Category: Pc + {3311, 6}, + // General_Category: Pd + {3317, 19}, + // General_Category: Pe + {3336, 76}, + // General_Category: Pf + {3412, 10}, + // General_Category: Pi + {3422, 11}, + // General_Category: Po + {3433, 187}, + // General_Category: Ps + {3620, 79}, + // General_Category: S + // General_Category: Sc + {3699, 21}, + // General_Category: Sk + {3720, 31}, + // General_Category: Sm + {3751, 64}, + // General_Category: So + {3815, 185}, + // General_Category: Z + // General_Category: Zl + {4000, 1}, + // General_Category: Zp + {4001, 1}, + // General_Category: Zs + {4002, 7}, + // Binary: White_Space + {4009, 10}, + // Binary: Bidi_Control + {4019, 4}, + // Binary: Join_Control + {4023, 1}, + // Binary: Dash + {4024, 23}, + // Binary: Quotation_Mark + {4047, 13}, + // Binary: Terminal_Punctuation + {4060, 108}, + // Binary: Hex_Digit + {4168, 6}, + // Binary: ASCII_Hex_Digit + {4174, 3}, + // Binary: Ideographic + {4177, 21}, + // Binary: Diacritic + {4198, 195}, + // Binary: Extender + {4393, 33}, + // Binary: Noncharacter_Code_Point + {4426, 18}, + // Binary: IDS_Binary_Operator + {4444, 3}, + // Binary: IDS_Trinary_Operator + {4447, 1}, + // Binary: Radical + {4448, 3}, + // Binary: Unified_Ideograph + {4451, 17}, + // Binary: Deprecated + {4468, 8}, + // Binary: Soft_Dotted + {4476, 34}, + // Binary: Logical_Order_Exception + {4510, 7}, + // Binary: Sentence_Terminal + {4517, 81}, + // Binary: Variation_Selector + {4598, 4}, + // Binary: Pattern_White_Space + {4602, 5}, + // Binary: Pattern_Syntax + {4607, 28}, + // Binary: Regional_Indicator + {4635, 1}, + // Binary: Math + {4636, 138}, + // Binary: Alphabetic + {4774, 733}, + // Binary: Lowercase + {5507, 671}, + // Binary: Uppercase + {6178, 651}, + // Binary: Cased + {6829, 157}, + // Binary: Case_Ignorable + {6986, 437}, + // Binary: Changes_When_Lowercased + {7423, 609}, + // Binary: Changes_When_Uppercased + {8032, 627}, + // Binary: Changes_When_Titlecased + {8659, 626}, + // Binary: Changes_When_Casefolded + {9285, 622}, + // Binary: Changes_When_Casemapped + {9907, 131}, + // Binary: ID_Start + {10038, 660}, + // Binary: ID_Continue + {10698, 769}, + // Binary: XID_Start + {11467, 667}, + // Binary: XID_Continue + {12134, 776}, + // Binary: Default_Ignorable_Code_Point + {12910, 17}, + // Binary: Grapheme_Extend + {12927, 363}, + // Binary: Grapheme_Base + {13290, 875}, + // Binary: Changes_When_NFKC_Casefolded + {14165, 839}, + // Binary: Bidi_Mirrored + {15004, 114}, + // Binary: Emoji + {15118, 151}, + // Binary: Emoji_Presentation + {15269, 81}, + // Binary: Emoji_Modifier + {15350, 1}, + // Binary: Emoji_Modifier_Base + {15351, 40}, + // Binary: Emoji_Component + {15391, 10}, + // Binary: Extended_Pictographic + {15401, 78}, + // Binary: ASCII + {15479, 1}, + // Binary: Any + {15480, 1}, + // Binary: Assigned + {15481, 716}, + // Script: Common + {16197, 173}, + // Script: Latin + {16370, 39}, + // Script_Extensions: Latin + {16370, 48}, + // Script: Greek + {16418, 36}, + // Script_Extensions: Greek + {16418, 39}, + // Script: Cyrillic + {16457, 10}, + // Script_Extensions: Cyrillic + {16457, 17}, + // Script: Armenian + {16474, 4}, + // Script: Hebrew + {16478, 9}, + // Script: Arabic + {16487, 58}, + // Script_Extensions: Arabic + {16487, 71}, + // Script: Syriac + {16558, 4}, + // Script_Extensions: Syriac + {16558, 13}, + // Script: Thaana + {16571, 1}, + // Script_Extensions: Thaana + {16571, 8}, + // Script: Devanagari + {16579, 5}, + // Script_Extensions: Devanagari + {16579, 44}, + // Script: Bengali + {16623, 14}, + // Script_Extensions: Bengali + {16623, 30}, + // Script: Gurmukhi + {16653, 16}, + // Script_Extensions: Gurmukhi + {16653, 26}, + // Script: Gujarati + {16679, 14}, + // Script_Extensions: Gujarati + {16679, 24}, + // Script: Oriya + {16703, 14}, + // Script_Extensions: Oriya + {16703, 20}, + // Script: Tamil + {16723, 18}, + // Script_Extensions: Tamil + {16723, 30}, + // Script: Telugu + {16753, 13}, + // Script_Extensions: Telugu + {16753, 19}, + // Script: Kannada + {16772, 13}, + // Script_Extensions: Kannada + {16772, 25}, + // Script: Malayalam + {16797, 7}, + // Script_Extensions: Malayalam + {16797, 14}, + // Script: Sinhala + {16811, 13}, + // Script_Extensions: Sinhala + {16811, 16}, + // Script: Thai + {16827, 2}, + // Script: Lao + {16829, 11}, + // Script: Tibetan + {16840, 7}, + // Script: Myanmar + {16847, 3}, + // Script_Extensions: Myanmar + {16847, 5}, + // Script: Georgian + {16852, 10}, + // Script_Extensions: Georgian + {16852, 11}, + // Script: Hangul + {16863, 14}, + // Script_Extensions: Hangul + {16863, 25}, + // Script: Ethiopic + {16888, 36}, + // Script: Cherokee + {16924, 3}, + // Script: Canadian_Aboriginal + {16927, 3}, + // Script: Ogham + {16930, 1}, + // Script: Runic + {16931, 2}, + // Script: Khmer + {16933, 4}, + // Script: Mongolian + {16937, 6}, + // Script_Extensions: Mongolian + {16937, 9}, + // Script: Hiragana + {16946, 6}, + // Script_Extensions: Hiragana + {16946, 24}, + // Script: Katakana + {16970, 14}, + // Script_Extensions: Katakana + {16970, 32}, + // Script: Bopomofo + {17002, 3}, + // Script_Extensions: Bopomofo + {17002, 15}, + // Script: Han + {17017, 22}, + // Script_Extensions: Han + {17017, 49}, + // Script: Yi + {17066, 2}, + // Script_Extensions: Yi + {17066, 7}, + // Script: Old_Italic + {17073, 2}, + // Script: Gothic + {17075, 1}, + // Script: Deseret + {17076, 1}, + // Script: Inherited + {17077, 29}, + // Script: Tagalog + {17106, 2}, + // Script_Extensions: Tagalog + {17106, 3}, + // Script: Hanunoo + {17109, 1}, + // Script_Extensions: Hanunoo + {17109, 2}, + // Script: Buhid + {17111, 1}, + // Script_Extensions: Buhid + {17111, 2}, + // Script: Tagbanwa + {17113, 3}, + // Script_Extensions: Tagbanwa + {17113, 4}, + // Script: Limbu + {17117, 5}, + // Script_Extensions: Limbu + {17117, 6}, + // Script: Tai_Le + {17123, 2}, + // Script_Extensions: Tai_Le + {17123, 3}, + // Script: Linear_B + {17126, 7}, + // Script_Extensions: Linear_B + {17126, 11}, + // Script: Ugaritic + {17137, 2}, + // Script: Shavian + {17139, 1}, + // Script: Osmanya + {17140, 2}, + // Script: Cypriot + {17142, 6}, + // Script_Extensions: Cypriot + {17142, 10}, + // Script: Braille + {17152, 1}, + // Script: Buginese + {17153, 2}, + // Script_Extensions: Buginese + {17153, 3}, + // Script: Coptic + {17156, 3}, + // Script_Extensions: Coptic + {17156, 4}, + // Script: New_Tai_Lue + {17160, 4}, + // Script: Glagolitic + {17164, 6}, + // Script_Extensions: Glagolitic + {17164, 10}, + // Script: Tifinagh + {17174, 3}, + // Script: Syloti_Nagri + {17177, 1}, + // Script_Extensions: Syloti_Nagri + {17177, 4}, + // Script: Old_Persian + {17181, 2}, + // Script: Kharoshthi + {17183, 8}, + // Script: Balinese + {17191, 2}, + // Script: Cuneiform + {17193, 4}, + // Script: Phoenician + {17197, 2}, + // Script: Phags_Pa + {17199, 1}, + // Script_Extensions: Phags_Pa + {17199, 3}, + // Script: Nko + {17202, 2}, + // Script_Extensions: Nko + {17202, 6}, + // Script: Sundanese + {17208, 2}, + // Script: Lepcha + {17210, 3}, + // Script: Ol_Chiki + {17213, 1}, + // Script: Vai + {17214, 1}, + // Script: Saurashtra + {17215, 2}, + // Script: Kayah_Li + {17217, 2}, + // Script_Extensions: Kayah_Li + {17217, 3}, + // Script: Rejang + {17220, 2}, + // Script: Lycian + {17222, 1}, + // Script: Carian + {17223, 1}, + // Script: Lydian + {17224, 2}, + // Script: Cham + {17226, 4}, + // Script: Tai_Tham + {17230, 5}, + // Script: Tai_Viet + {17235, 2}, + // Script: Avestan + {17237, 2}, + // Script: Egyptian_Hieroglyphs + {17239, 1}, + // Script: Samaritan + {17240, 2}, + // Script: Lisu + {17242, 2}, + // Script: Bamum + {17244, 2}, + // Script: Javanese + {17246, 3}, + // Script_Extensions: Javanese + {17246, 4}, + // Script: Meetei_Mayek + {17250, 3}, + // Script: Imperial_Aramaic + {17253, 2}, + // Script: Old_South_Arabian + {17255, 1}, + // Script: Inscriptional_Parthian + {17256, 2}, + // Script: Inscriptional_Pahlavi + {17258, 2}, + // Script: Old_Turkic + {17260, 1}, + // Script: Kaithi + {17261, 2}, + // Script_Extensions: Kaithi + {17261, 8}, + // Script: Batak + {17269, 2}, + // Script: Brahmi + {17271, 3}, + // Script: Mandaic + {17274, 2}, + // Script_Extensions: Mandaic + {17274, 3}, + // Script: Chakma + {17277, 2}, + // Script_Extensions: Chakma + {17277, 4}, + // Script: Meroitic_Cursive + {17281, 3}, + // Script: Meroitic_Hieroglyphs + {17284, 1}, + // Script: Miao + {17285, 3}, + // Script: Sharada + {17288, 1}, + // Script_Extensions: Sharada + {17288, 9}, + // Script: Sora_Sompeng + {17297, 2}, + // Script: Takri + {17299, 2}, + // Script_Extensions: Takri + {17299, 9}, + // Script: Caucasian_Albanian + {17308, 2}, + // Script: Bassa_Vah + {17310, 2}, + // Script: Duployan + {17312, 5}, + // Script_Extensions: Duployan + {17312, 6}, + // Script: Elbasan + {17318, 1}, + // Script: Grantha + {17319, 15}, + // Script_Extensions: Grantha + {17319, 33}, + // Script: Pahawh_Hmong + {17352, 5}, + // Script: Khojki + {17357, 2}, + // Script_Extensions: Khojki + {17357, 8}, + // Script: Linear_A + {17365, 3}, + // Script_Extensions: Linear_A + {17365, 4}, + // Script: Mahajani + {17369, 1}, + // Script_Extensions: Mahajani + {17369, 9}, + // Script: Manichaean + {17378, 2}, + // Script_Extensions: Manichaean + {17378, 4}, + // Script: Mende_Kikakui + {17382, 2}, + // Script: Modi + {17384, 2}, + // Script_Extensions: Modi + {17384, 7}, + // Script: Mro + {17391, 3}, + // Script: Old_North_Arabian + {17394, 1}, + // Script: Nabataean + {17395, 2}, + // Script: Palmyrene + {17397, 1}, + // Script: Pau_Cin_Hau + {17398, 1}, + // Script: Old_Permic + {17399, 1}, + // Script_Extensions: Old_Permic + {17399, 2}, + // Script: Psalter_Pahlavi + {17401, 3}, + // Script_Extensions: Psalter_Pahlavi + {17401, 4}, + // Script: Siddham + {17405, 2}, + // Script: Khudawadi + {17407, 2}, + // Script_Extensions: Khudawadi + {17407, 9}, + // Script: Tirhuta + {17416, 2}, + // Script_Extensions: Tirhuta + {17416, 12}, + // Script: Warang_Citi + {17428, 2}, + // Script: Ahom + {17430, 3}, + // Script: Anatolian_Hieroglyphs + {17433, 1}, + // Script: Hatran + {17434, 3}, + // Script: Multani + {17437, 5}, + // Script_Extensions: Multani + {17437, 6}, + // Script: Old_Hungarian + {17443, 3}, + // Script: SignWriting + {17446, 3}, + // Script: Adlam + {17449, 3}, + // Script_Extensions: Adlam + {17449, 5}, + // Script: Bhaiksuki + {17454, 4}, + // Script: Marchen + {17458, 3}, + // Script: Newa + {17461, 2}, + // Script: Osage + {17463, 2}, + // Script: Tangut + {17465, 4}, + // Script: Masaram_Gondi + {17469, 7}, + // Script_Extensions: Masaram_Gondi + {17469, 9}, + // Script: Nushu + {17478, 2}, + // Script: Soyombo + {17480, 1}, + // Script: Zanabazar_Square + {17481, 1}, + // Script: Dogra + {17482, 1}, + // Script_Extensions: Dogra + {17482, 9}, + // Script: Gunjala_Gondi + {17491, 6}, + // Script_Extensions: Gunjala_Gondi + {17491, 8}, + // Script: Makasar + {17499, 1}, + // Script: Medefaidrin + {17500, 1}, + // Script: Hanifi_Rohingya + {17501, 2}, + // Script_Extensions: Hanifi_Rohingya + {17501, 7}, + // Script: Sogdian + {17508, 1}, + // Script_Extensions: Sogdian + {17508, 2}, + // Script: Old_Sogdian + {17510, 1}, + // Script: Elymaic + {17511, 1}, + // Script: Nandinagari + {17512, 3}, + // Script_Extensions: Nandinagari + {17512, 11}, + // Script: Nyiakeng_Puachue_Hmong + {17523, 4}, + // Script: Wancho + {17527, 2}, + // Script: Chorasmian + {17529, 1}, + // Script: Dives_Akuru + {17530, 8}, + // Script: Khitan_Small_Script + {17538, 2}, + // Script: Yezidi + {17540, 3}, + // Script_Extensions: Yezidi + {17540, 7}, + // Script: Cypro_Minoan + {17547, 1}, + // Script_Extensions: Cypro_Minoan + {17547, 2}, + // Script: Old_Uyghur + {17549, 1}, + // Script_Extensions: Old_Uyghur + {17549, 3}, + // Script: Tangsa + {17552, 2}, + // Script: Toto + {17554, 1}, + // Script: Vithkuqi + {17555, 8}, + // Script: Kawi + {17563, 3}, + // Script: Nag_Mundari + {17566, 1}, +}; + +static constexpr NameMapEntry canonicalPropertyNameMap_GeneralCategory[] = { + // "C", "C" + {{18, 1}, {18, 1}}, + // "Cased_Letter", "LC" + {{1348, 12}, {3000, 2}}, + // "Cc", "Cc" + {{3010, 2}, {3010, 2}}, + // "Cf", "Cf" + {{3008, 2}, {3008, 2}}, + // "Close_Punctuation", "Pe" + {{732, 17}, {1442, 2}}, + // "Cn", "Cn" + {{3006, 2}, {3006, 2}}, + // "Co", "Co" + {{18, 2}, {18, 2}}, + // "Combining_Mark", "M" + {{1097, 14}, {365, 1}}, + // "Connector_Punctuation", "Pc" + {{303, 21}, {2984, 2}}, + // "Control", "Cc" + {{1329, 7}, {3010, 2}}, + // "Cs", "Cs" + {{3004, 2}, {3004, 2}}, + // "Currency_Symbol", "Sc" + {{997, 15}, {476, 2}}, + // "Dash_Punctuation", "Pd" + {{861, 16}, {2982, 2}}, + // "Decimal_Number", "Nd" + {{1083, 14}, {2988, 2}}, + // "Enclosing_Mark", "Me" + {{1069, 14}, {365, 2}}, + // "Final_Punctuation", "Pf" + {{715, 17}, {2980, 2}}, + // "Format", "Cf" + {{2345, 6}, {3008, 2}}, + // "Initial_Punctuation", "Pi" + {{482, 19}, {291, 2}}, + // "L", "L" + {{79, 1}, {79, 1}}, + // "LC", "LC" + {{3000, 2}, {3000, 2}}, + // "Letter", "L" + {{775, 6}, {79, 1}}, + // "Letter_Number", "Nl" + {{1164, 13}, {2986, 2}}, + // "Line_Separator", "Zl" + {{1055, 14}, {2970, 2}}, + // "Ll", "Ll" + {{2998, 2}, {2998, 2}}, + // "Lm", "Lm" + {{2996, 2}, {2996, 2}}, + // "Lo", "Lo" + {{79, 2}, {79, 2}}, + // "Lowercase_Letter", "Ll" + {{829, 16}, {2998, 2}}, + // "Lt", "Lt" + {{2994, 2}, {2994, 2}}, + // "Lu", "Lu" + {{1457, 2}, {1457, 2}}, + // "M", "M" + {{365, 1}, {365, 1}}, + // "Mark", "M" + {{918, 4}, {365, 1}}, + // "Math_Symbol", "Sm" + {{1493, 11}, {470, 2}}, + // "Mc", "Mc" + {{2992, 2}, {2992, 2}}, + // "Me", "Me" + {{365, 2}, {365, 2}}, + // "Mn", "Mn" + {{2990, 2}, {2990, 2}}, + // "Modifier_Letter", "Lm" + {{937, 15}, {2996, 2}}, + // "Modifier_Symbol", "Sk" + {{922, 15}, {2974, 2}}, + // "N", "N" + {{41, 1}, {41, 1}}, + // "Nd", "Nd" + {{2988, 2}, {2988, 2}}, + // "Nl", "Nl" + {{2986, 2}, {2986, 2}}, + // "No", "No" + {{56, 2}, {56, 2}}, + // "Nonspacing_Mark", "Mn" + {{907, 15}, {2990, 2}}, + // "Number", "N" + {{1091, 6}, {41, 1}}, + // "Open_Punctuation", "Ps" + {{797, 16}, {892, 2}}, + // "Other", "C" + {{664, 5}, {18, 1}}, + // "Other_Letter", "Lo" + {{1300, 12}, {79, 2}}, + // "Other_Number", "No" + {{1288, 12}, {56, 2}}, + // "Other_Punctuation", "Po" + {{664, 17}, {23, 2}}, + // "Other_Symbol", "So" + {{1276, 12}, {685, 2}}, + // "P", "P" + {{23, 1}, {23, 1}}, + // "Paragraph_Separator", "Zp" + {{444, 19}, {2968, 2}}, + // "Pc", "Pc" + {{2984, 2}, {2984, 2}}, + // "Pd", "Pd" + {{2982, 2}, {2982, 2}}, + // "Pe", "Pe" + {{1442, 2}, {1442, 2}}, + // "Pf", "Pf" + {{2980, 2}, {2980, 2}}, + // "Pi", "Pi" + {{291, 2}, {291, 2}}, + // "Po", "Po" + {{23, 2}, {23, 2}}, + // "Private_Use", "Co" + {{1405, 11}, {18, 2}}, + // "Ps", "Ps" + {{892, 2}, {892, 2}}, + // "Punctuation", "P" + {{313, 11}, {23, 1}}, + // "S", "S" + {{387, 1}, {387, 1}}, + // "Sc", "Sc" + {{476, 2}, {476, 2}}, + // "Separator", "Z" + {{454, 9}, {749, 1}}, + // "Sk", "Sk" + {{2974, 2}, {2974, 2}}, + // "Sm", "Sm" + {{470, 2}, {470, 2}}, + // "So", "So" + {{685, 2}, {685, 2}}, + // "Space_Separator", "Zs" + {{877, 15}, {2966, 2}}, + // "Spacing_Mark", "Mc" + {{1240, 12}, {2992, 2}}, + // "Surrogate", "Cs" + {{1675, 9}, {3004, 2}}, + // "Symbol", "S" + {{931, 6}, {387, 1}}, + // "Titlecase_Letter", "Lt" + {{781, 16}, {2994, 2}}, + // "Unassigned", "Cn" + {{1526, 10}, {3006, 2}}, + // "Uppercase_Letter", "Lu" + {{765, 16}, {1457, 2}}, + // "Z", "Z" + {{749, 1}, {749, 1}}, + // "Zl", "Zl" + {{2970, 2}, {2970, 2}}, + // "Zp", "Zp" + {{2968, 2}, {2968, 2}}, + // "Zs", "Zs" + {{2966, 2}, {2966, 2}}, + // "cntrl", "Cc" + {{2402, 5}, {3010, 2}}, + // "digit", "Nd" + {{2397, 5}, {2988, 2}}, + // "punct", "P" + {{2392, 5}, {23, 1}}, +}; + +static constexpr RangeMapEntry unicodePropertyRangeMap_GeneralCategory[] = { + // "C" + {{18, 1}, 0, 5}, + // "Cc" + {{3010, 2}, 0, 1}, + // "Cf" + {{3008, 2}, 1, 1}, + // "Cn" + {{3006, 2}, 2, 1}, + // "Co" + {{18, 2}, 3, 1}, + // "Cs" + {{3004, 2}, 4, 1}, + // "L" + {{79, 1}, 5, 5}, + // "LC" + {{3000, 2}, 5, 3}, + // "Ll" + {{2998, 2}, 5, 1}, + // "Lm" + {{2996, 2}, 8, 1}, + // "Lo" + {{79, 2}, 9, 1}, + // "Lt" + {{2994, 2}, 6, 1}, + // "Lu" + {{1457, 2}, 7, 1}, + // "M" + {{365, 1}, 10, 3}, + // "Mc" + {{2992, 2}, 10, 1}, + // "Me" + {{365, 2}, 11, 1}, + // "Mn" + {{2990, 2}, 12, 1}, + // "N" + {{41, 1}, 13, 3}, + // "Nd" + {{2988, 2}, 13, 1}, + // "Nl" + {{2986, 2}, 14, 1}, + // "No" + {{56, 2}, 15, 1}, + // "P" + {{23, 1}, 16, 7}, + // "Pc" + {{2984, 2}, 16, 1}, + // "Pd" + {{2982, 2}, 17, 1}, + // "Pe" + {{1442, 2}, 18, 1}, + // "Pf" + {{2980, 2}, 19, 1}, + // "Pi" + {{291, 2}, 20, 1}, + // "Po" + {{23, 2}, 21, 1}, + // "Ps" + {{892, 2}, 22, 1}, + // "S" + {{387, 1}, 23, 4}, + // "Sc" + {{476, 2}, 23, 1}, + // "Sk" + {{2974, 2}, 24, 1}, + // "Sm" + {{470, 2}, 25, 1}, + // "So" + {{685, 2}, 26, 1}, + // "Z" + {{749, 1}, 27, 3}, + // "Zl" + {{2970, 2}, 27, 1}, + // "Zp" + {{2968, 2}, 28, 1}, + // "Zs" + {{2966, 2}, 29, 1}, +}; + +static constexpr NameMapEntry canonicalPropertyNameMap_BinaryProperty[] = { + // "AHex", "ASCII_Hex_Digit" + {{2947, 4}, {1012, 15}}, + // "ASCII", "ASCII" + {{1012, 5}, {1012, 5}}, + // "ASCII_Hex_Digit", "ASCII_Hex_Digit" + {{1012, 15}, {1012, 15}}, + // "Alpha", "Alphabetic" + {{1656, 5}, {1656, 10}}, + // "Alphabetic", "Alphabetic" + {{1656, 10}, {1656, 10}}, + // "Any", "Any" + {{2963, 3}, {2963, 3}}, + // "Assigned", "Assigned" + {{2000, 8}, {2000, 8}}, + // "Bidi_C", "Bidi_Control" + {{1360, 6}, {1360, 12}}, + // "Bidi_Control", "Bidi_Control" + {{1360, 12}, {1360, 12}}, + // "Bidi_M", "Bidi_Mirrored" + {{1203, 6}, {1203, 13}}, + // "Bidi_Mirrored", "Bidi_Mirrored" + {{1203, 13}, {1203, 13}}, + // "CI", "Case_Ignorable" + {{1014, 2}, {1111, 14}}, + // "CWCF", "Changes_When_Casefolded" + {{2907, 4}, {194, 23}}, + // "CWCM", "Changes_When_Casemapped" + {{2903, 4}, {171, 23}}, + // "CWKCF", "Changes_When_NFKC_Casefolded" + {{2502, 5}, {28, 28}}, + // "CWL", "Changes_When_Lowercased" + {{2960, 3}, {148, 23}}, + // "CWT", "Changes_When_Titlecased" + {{2957, 3}, {125, 23}}, + // "CWU", "Changes_When_Uppercased" + {{2954, 3}, {102, 23}}, + // "Case_Ignorable", "Case_Ignorable" + {{1111, 14}, {1111, 14}}, + // "Cased", "Cased" + {{1348, 5}, {1348, 5}}, + // "Changes_When_Casefolded", "Changes_When_Casefolded" + {{194, 23}, {194, 23}}, + // "Changes_When_Casemapped", "Changes_When_Casemapped" + {{171, 23}, {171, 23}}, + // "Changes_When_Lowercased", "Changes_When_Lowercased" + {{148, 23}, {148, 23}}, + // "Changes_When_NFKC_Casefolded", "Changes_When_NFKC_Casefolded" + {{28, 28}, {28, 28}}, + // "Changes_When_Titlecased", "Changes_When_Titlecased" + {{125, 23}, {125, 23}}, + // "Changes_When_Uppercased", "Changes_When_Uppercased" + {{102, 23}, {102, 23}}, + // "DI", "Default_Ignorable_Code_Point" + {{3002, 2}, {0, 28}}, + // "Dash", "Dash" + {{861, 4}, {861, 4}}, + // "Default_Ignorable_Code_Point", "Default_Ignorable_Code_Point" + {{0, 28}, {0, 28}}, + // "Dep", "Deprecated" + {{1636, 3}, {1636, 10}}, + // "Deprecated", "Deprecated" + {{1636, 10}, {1636, 10}}, + // "Dia", "Diacritic" + {{1756, 3}, {1756, 9}}, + // "Diacritic", "Diacritic" + {{1756, 9}, {1756, 9}}, + // "EBase", "Emoji_Modifier_Base" + {{2492, 5}, {520, 19}}, + // "EComp", "Emoji_Component" + {{2487, 5}, {982, 15}}, + // "EMod", "Emoji_Modifier" + {{2863, 4}, {520, 14}}, + // "EPres", "Emoji_Presentation" + {{2482, 5}, {594, 18}}, + // "Emoji", "Emoji" + {{520, 5}, {520, 5}}, + // "Emoji_Component", "Emoji_Component" + {{982, 15}, {982, 15}}, + // "Emoji_Modifier", "Emoji_Modifier" + {{520, 14}, {520, 14}}, + // "Emoji_Modifier_Base", "Emoji_Modifier_Base" + {{520, 19}, {520, 19}}, + // "Emoji_Presentation", "Emoji_Presentation" + {{594, 18}, {594, 18}}, + // "Ext", "Extender" + {{282, 3}, {1936, 8}}, + // "ExtPict", "Extended_Pictographic" + {{2163, 7}, {282, 21}}, + // "Extended_Pictographic", "Extended_Pictographic" + {{282, 21}, {282, 21}}, + // "Extender", "Extender" + {{1936, 8}, {1936, 8}}, + // "Gr_Base", "Grapheme_Base" + {{2156, 7}, {1190, 13}}, + // "Gr_Ext", "Grapheme_Extend" + {{2333, 6}, {967, 15}}, + // "Grapheme_Base", "Grapheme_Base" + {{1190, 13}, {1190, 13}}, + // "Grapheme_Extend", "Grapheme_Extend" + {{967, 15}, {967, 15}}, + // "Hex", "Hex_Digit" + {{1018, 3}, {1018, 9}}, + // "Hex_Digit", "Hex_Digit" + {{1018, 9}, {1018, 9}}, + // "IDC", "ID_Continue" + {{2560, 3}, {1217, 11}}, + // "IDS", "ID_Start" + {{385, 3}, {1667, 8}}, + // "IDSB", "IDS_Binary_Operator" + {{2823, 4}, {501, 19}}, + // "IDST", "IDS_Trinary_Operator" + {{2819, 4}, {385, 20}}, + // "IDS_Binary_Operator", "IDS_Binary_Operator" + {{501, 19}, {501, 19}}, + // "IDS_Trinary_Operator", "IDS_Trinary_Operator" + {{385, 20}, {385, 20}}, + // "ID_Continue", "ID_Continue" + {{1217, 11}, {1217, 11}}, + // "ID_Start", "ID_Start" + {{1667, 8}, {1667, 8}}, + // "Ideo", "Ideographic" + {{638, 4}, {1504, 11}}, + // "Ideographic", "Ideographic" + {{1504, 11}, {1504, 11}}, + // "Join_C", "Join_Control" + {{1324, 6}, {1324, 12}}, + // "Join_Control", "Join_Control" + {{1324, 12}, {1324, 12}}, + // "LOE", "Logical_Order_Exception" + {{2951, 3}, {79, 23}}, + // "Logical_Order_Exception", "Logical_Order_Exception" + {{79, 23}, {79, 23}}, + // "Lower", "Lowercase" + {{161, 5}, {161, 9}}, + // "Lowercase", "Lowercase" + {{161, 9}, {161, 9}}, + // "Math", "Math" + {{1493, 4}, {1493, 4}}, + // "NChar", "Noncharacter_Code_Point" + {{2457, 5}, {56, 23}}, + // "Noncharacter_Code_Point", "Noncharacter_Code_Point" + {{56, 23}, {56, 23}}, + // "Pat_Syn", "Pattern_Syntax" + {{2086, 7}, {1041, 14}}, + // "Pat_WS", "Pattern_White_Space" + {{2279, 6}, {425, 19}}, + // "Pattern_Syntax", "Pattern_Syntax" + {{1041, 14}, {1041, 14}}, + // "Pattern_White_Space", "Pattern_White_Space" + {{425, 19}, {425, 19}}, + // "QMark", "Quotation_Mark" + {{2432, 5}, {1027, 14}}, + // "Quotation_Mark", "Quotation_Mark" + {{1027, 14}, {1027, 14}}, + // "RI", "Regional_Indicator" + {{2978, 2}, {576, 18}}, + // "Radical", "Radical" + {{2079, 7}, {2079, 7}}, + // "Regional_Indicator", "Regional_Indicator" + {{576, 18}, {576, 18}}, + // "SD", "Soft_Dotted" + {{2976, 2}, {1383, 11}}, + // "STerm", "Sentence_Terminal" + {{2422, 5}, {647, 17}}, + // "Sentence_Terminal", "Sentence_Terminal" + {{647, 17}, {647, 17}}, + // "Soft_Dotted", "Soft_Dotted" + {{1383, 11}, {1383, 11}}, + // "Term", "Terminal_Punctuation" + {{345, 4}, {345, 20}}, + // "Terminal_Punctuation", "Terminal_Punctuation" + {{345, 20}, {345, 20}}, + // "UIdeo", "Unified_Ideograph" + {{2407, 5}, {630, 17}}, + // "Unified_Ideograph", "Unified_Ideograph" + {{630, 17}, {630, 17}}, + // "Upper", "Uppercase" + {{115, 5}, {115, 9}}, + // "Uppercase", "Uppercase" + {{115, 9}, {115, 9}}, + // "VS", "Variation_Selector" + {{2972, 2}, {558, 18}}, + // "Variation_Selector", "Variation_Selector" + {{558, 18}, {558, 18}}, + // "WSpace", "White_Space" + {{2231, 6}, {433, 11}}, + // "White_Space", "White_Space" + {{433, 11}, {433, 11}}, + // "XIDC", "XID_Continue" + {{2559, 4}, {1216, 12}}, + // "XIDS", "XID_Start" + {{2555, 4}, {1666, 9}}, + // "XID_Continue", "XID_Continue" + {{1216, 12}, {1216, 12}}, + // "XID_Start", "XID_Start" + {{1666, 9}, {1666, 9}}, + // "space", "White_Space" + {{2387, 5}, {433, 11}}, +}; + +static constexpr RangeMapEntry unicodePropertyRangeMap_BinaryProperty[] = { + // "ASCII" + {{1012, 5}, 80, 1}, + // "ASCII_Hex_Digit" + {{1012, 15}, 37, 1}, + // "Alphabetic" + {{1656, 10}, 55, 1}, + // "Any" + {{2963, 3}, 81, 1}, + // "Assigned" + {{2000, 8}, 82, 1}, + // "Bidi_Control" + {{1360, 12}, 31, 1}, + // "Bidi_Mirrored" + {{1203, 13}, 73, 1}, + // "Case_Ignorable" + {{1111, 14}, 59, 1}, + // "Cased" + {{1348, 5}, 58, 1}, + // "Changes_When_Casefolded" + {{194, 23}, 63, 1}, + // "Changes_When_Casemapped" + {{171, 23}, 64, 1}, + // "Changes_When_Lowercased" + {{148, 23}, 60, 1}, + // "Changes_When_NFKC_Casefolded" + {{28, 28}, 72, 1}, + // "Changes_When_Titlecased" + {{125, 23}, 62, 1}, + // "Changes_When_Uppercased" + {{102, 23}, 61, 1}, + // "Dash" + {{861, 4}, 33, 1}, + // "Default_Ignorable_Code_Point" + {{0, 28}, 69, 1}, + // "Deprecated" + {{1636, 10}, 46, 1}, + // "Diacritic" + {{1756, 9}, 39, 1}, + // "Emoji" + {{520, 5}, 74, 1}, + // "Emoji_Component" + {{982, 15}, 78, 1}, + // "Emoji_Modifier" + {{520, 14}, 76, 1}, + // "Emoji_Modifier_Base" + {{520, 19}, 77, 1}, + // "Emoji_Presentation" + {{594, 18}, 75, 1}, + // "Extended_Pictographic" + {{282, 21}, 79, 1}, + // "Extender" + {{1936, 8}, 40, 1}, + // "Grapheme_Base" + {{1190, 13}, 71, 1}, + // "Grapheme_Extend" + {{967, 15}, 70, 1}, + // "Hex_Digit" + {{1018, 9}, 36, 1}, + // "IDS_Binary_Operator" + {{501, 19}, 42, 1}, + // "IDS_Trinary_Operator" + {{385, 20}, 43, 1}, + // "ID_Continue" + {{1217, 11}, 66, 1}, + // "ID_Start" + {{1667, 8}, 65, 1}, + // "Ideographic" + {{1504, 11}, 38, 1}, + // "Join_Control" + {{1324, 12}, 32, 1}, + // "Logical_Order_Exception" + {{79, 23}, 48, 1}, + // "Lowercase" + {{161, 9}, 56, 1}, + // "Math" + {{1493, 4}, 54, 1}, + // "Noncharacter_Code_Point" + {{56, 23}, 41, 1}, + // "Pattern_Syntax" + {{1041, 14}, 52, 1}, + // "Pattern_White_Space" + {{425, 19}, 51, 1}, + // "Quotation_Mark" + {{1027, 14}, 34, 1}, + // "Radical" + {{2079, 7}, 44, 1}, + // "Regional_Indicator" + {{576, 18}, 53, 1}, + // "Sentence_Terminal" + {{647, 17}, 49, 1}, + // "Soft_Dotted" + {{1383, 11}, 47, 1}, + // "Terminal_Punctuation" + {{345, 20}, 35, 1}, + // "Unified_Ideograph" + {{630, 17}, 45, 1}, + // "Uppercase" + {{115, 9}, 57, 1}, + // "Variation_Selector" + {{558, 18}, 50, 1}, + // "White_Space" + {{433, 11}, 30, 1}, + // "XID_Continue" + {{1216, 12}, 68, 1}, + // "XID_Start" + {{1666, 9}, 67, 1}, +}; + +static constexpr NameMapEntry canonicalPropertyNameMap_Script[] = { + // "Adlam", "Adlam" + {{2522, 5}, {2522, 5}}, + // "Adlm", "Adlam" + {{2943, 4}, {2522, 5}}, + // "Aghb", "Caucasian_Albanian" + {{2939, 4}, {612, 18}}, + // "Ahom", "Ahom" + {{2935, 4}, {2935, 4}}, + // "Anatolian_Hieroglyphs", "Anatolian_Hieroglyphs" + {{324, 21}, {324, 21}}, + // "Arab", "Arabic" + {{691, 4}, {2381, 6}}, + // "Arabic", "Arabic" + {{2381, 6}, {2381, 6}}, + // "Armenian", "Armenian" + {{2008, 8}, {2008, 8}}, + // "Armi", "Imperial_Aramaic" + {{2931, 4}, {845, 16}}, + // "Armn", "Armenian" + {{2927, 4}, {2008, 8}}, + // "Avestan", "Avestan" + {{2212, 7}, {2212, 7}}, + // "Avst", "Avestan" + {{2923, 4}, {2212, 7}}, + // "Bali", "Balinese" + {{1992, 4}, {1992, 8}}, + // "Balinese", "Balinese" + {{1992, 8}, {1992, 8}}, + // "Bamu", "Bamum" + {{2517, 4}, {2517, 5}}, + // "Bamum", "Bamum" + {{2517, 5}, {2517, 5}}, + // "Bass", "Bassa_Vah" + {{1783, 4}, {1783, 9}}, + // "Bassa_Vah", "Bassa_Vah" + {{1783, 9}, {1783, 9}}, + // "Batak", "Batak" + {{2512, 5}, {2512, 5}}, + // "Batk", "Batak" + {{2919, 4}, {2512, 5}}, + // "Beng", "Bengali" + {{2205, 4}, {2205, 7}}, + // "Bengali", "Bengali" + {{2205, 7}, {2205, 7}}, + // "Bhaiksuki", "Bhaiksuki" + {{1774, 9}, {1774, 9}}, + // "Bhks", "Bhaiksuki" + {{2915, 4}, {1774, 9}}, + // "Bopo", "Bopomofo" + {{1984, 4}, {1984, 8}}, + // "Bopomofo", "Bopomofo" + {{1984, 8}, {1984, 8}}, + // "Brah", "Brahmi" + {{2375, 4}, {2375, 6}}, + // "Brahmi", "Brahmi" + {{2375, 6}, {2375, 6}}, + // "Brai", "Braille" + {{2198, 4}, {2198, 7}}, + // "Braille", "Braille" + {{2198, 7}, {2198, 7}}, + // "Bugi", "Buginese" + {{1976, 4}, {1976, 8}}, + // "Buginese", "Buginese" + {{1976, 8}, {1976, 8}}, + // "Buhd", "Buhid" + {{2911, 4}, {2507, 5}}, + // "Buhid", "Buhid" + {{2507, 5}, {2507, 5}}, + // "Cakm", "Chakma" + {{2899, 4}, {2363, 6}}, + // "Canadian_Aboriginal", "Canadian_Aboriginal" + {{539, 19}, {539, 19}}, + // "Cans", "Canadian_Aboriginal" + {{2895, 4}, {539, 19}}, + // "Cari", "Carian" + {{2369, 4}, {2369, 6}}, + // "Carian", "Carian" + {{2369, 6}, {2369, 6}}, + // "Caucasian_Albanian", "Caucasian_Albanian" + {{612, 18}, {612, 18}}, + // "Chakma", "Chakma" + {{2363, 6}, {2363, 6}}, + // "Cham", "Cham" + {{2891, 4}, {2891, 4}}, + // "Cher", "Cherokee" + {{1968, 4}, {1968, 8}}, + // "Cherokee", "Cherokee" + {{1968, 8}, {1968, 8}}, + // "Chorasmian", "Chorasmian" + {{1646, 10}, {1646, 10}}, + // "Chrs", "Chorasmian" + {{2887, 4}, {1646, 10}}, + // "Common", "Common" + {{2357, 6}, {2357, 6}}, + // "Copt", "Coptic" + {{2351, 4}, {2351, 6}}, + // "Coptic", "Coptic" + {{2351, 6}, {2351, 6}}, + // "Cpmn", "Cypro_Minoan" + {{2883, 4}, {1336, 12}}, + // "Cprt", "Cypriot" + {{2879, 4}, {2191, 7}}, + // "Cuneiform", "Cuneiform" + {{1765, 9}, {1765, 9}}, + // "Cypriot", "Cypriot" + {{2191, 7}, {2191, 7}}, + // "Cypro_Minoan", "Cypro_Minoan" + {{1336, 12}, {1336, 12}}, + // "Cyrillic", "Cyrillic" + {{1960, 8}, {1960, 8}}, + // "Cyrl", "Cyrillic" + {{2875, 4}, {1960, 8}}, + // "Deseret", "Deseret" + {{2184, 7}, {2184, 7}}, + // "Deva", "Devanagari" + {{1626, 4}, {1626, 10}}, + // "Devanagari", "Devanagari" + {{1626, 10}, {1626, 10}}, + // "Diak", "Dives_Akuru" + {{2871, 4}, {1515, 11}}, + // "Dives_Akuru", "Dives_Akuru" + {{1515, 11}, {1515, 11}}, + // "Dogr", "Dogra" + {{2497, 4}, {2497, 5}}, + // "Dogra", "Dogra" + {{2497, 5}, {2497, 5}}, + // "Dsrt", "Deseret" + {{2867, 4}, {2184, 7}}, + // "Dupl", "Duployan" + {{1952, 4}, {1952, 8}}, + // "Duployan", "Duployan" + {{1952, 8}, {1952, 8}}, + // "Egyp", "Egyptian_Hieroglyphs" + {{405, 4}, {405, 20}}, + // "Egyptian_Hieroglyphs", "Egyptian_Hieroglyphs" + {{405, 20}, {405, 20}}, + // "Elba", "Elbasan" + {{2177, 4}, {2177, 7}}, + // "Elbasan", "Elbasan" + {{2177, 7}, {2177, 7}}, + // "Elym", "Elymaic" + {{2170, 4}, {2170, 7}}, + // "Elymaic", "Elymaic" + {{2170, 7}, {2170, 7}}, + // "Ethi", "Ethiopic" + {{1944, 4}, {1944, 8}}, + // "Ethiopic", "Ethiopic" + {{1944, 8}, {1944, 8}}, + // "Geor", "Georgian" + {{1928, 4}, {1928, 8}}, + // "Georgian", "Georgian" + {{1928, 8}, {1928, 8}}, + // "Glag", "Glagolitic" + {{1616, 4}, {1616, 10}}, + // "Glagolitic", "Glagolitic" + {{1616, 10}, {1616, 10}}, + // "Gong", "Gunjala_Gondi" + {{2859, 4}, {1177, 13}}, + // "Gonm", "Masaram_Gondi" + {{2855, 4}, {1151, 13}}, + // "Goth", "Gothic" + {{2339, 4}, {2339, 6}}, + // "Gothic", "Gothic" + {{2339, 6}, {2339, 6}}, + // "Gran", "Grantha" + {{2149, 4}, {2149, 7}}, + // "Grantha", "Grantha" + {{2149, 7}, {2149, 7}}, + // "Greek", "Greek" + {{2477, 5}, {2477, 5}}, + // "Grek", "Greek" + {{2851, 4}, {2477, 5}}, + // "Gujarati", "Gujarati" + {{1920, 8}, {1920, 8}}, + // "Gujr", "Gujarati" + {{2847, 4}, {1920, 8}}, + // "Gunjala_Gondi", "Gunjala_Gondi" + {{1177, 13}, {1177, 13}}, + // "Gurmukhi", "Gurmukhi" + {{1912, 8}, {1912, 8}}, + // "Guru", "Gurmukhi" + {{2843, 4}, {1912, 8}}, + // "Han", "Han" + {{952, 3}, {952, 3}}, + // "Hang", "Hangul" + {{2327, 4}, {2327, 6}}, + // "Hangul", "Hangul" + {{2327, 6}, {2327, 6}}, + // "Hani", "Han" + {{952, 4}, {952, 3}}, + // "Hanifi_Rohingya", "Hanifi_Rohingya" + {{952, 15}, {952, 15}}, + // "Hano", "Hanunoo" + {{2839, 4}, {2142, 7}}, + // "Hanunoo", "Hanunoo" + {{2142, 7}, {2142, 7}}, + // "Hatr", "Hatran" + {{2321, 4}, {2321, 6}}, + // "Hatran", "Hatran" + {{2321, 6}, {2321, 6}}, + // "Hebr", "Hebrew" + {{2315, 4}, {2315, 6}}, + // "Hebrew", "Hebrew" + {{2315, 6}, {2315, 6}}, + // "Hira", "Hiragana" + {{1904, 4}, {1904, 8}}, + // "Hiragana", "Hiragana" + {{1904, 8}, {1904, 8}}, + // "Hluw", "Anatolian_Hieroglyphs" + {{2835, 4}, {324, 21}}, + // "Hmng", "Pahawh_Hmong" + {{2831, 4}, {1264, 12}}, + // "Hmnp", "Nyiakeng_Puachue_Hmong" + {{2827, 4}, {217, 22}}, + // "Hung", "Old_Hungarian" + {{1129, 4}, {1125, 13}}, + // "Imperial_Aramaic", "Imperial_Aramaic" + {{845, 16}, {845, 16}}, + // "Inherited", "Inherited" + {{1747, 9}, {1747, 9}}, + // "Inscriptional_Pahlavi", "Inscriptional_Pahlavi" + {{261, 21}, {261, 21}}, + // "Inscriptional_Parthian", "Inscriptional_Parthian" + {{239, 22}, {239, 22}}, + // "Ital", "Old_Italic" + {{1590, 4}, {1586, 10}}, + // "Java", "Javanese" + {{1896, 4}, {1896, 8}}, + // "Javanese", "Javanese" + {{1896, 8}, {1896, 8}}, + // "Kaithi", "Kaithi" + {{2309, 6}, {2309, 6}}, + // "Kali", "Kayah_Li" + {{2815, 4}, {1880, 8}}, + // "Kana", "Katakana" + {{2811, 4}, {1888, 8}}, + // "Kannada", "Kannada" + {{2135, 7}, {2135, 7}}, + // "Katakana", "Katakana" + {{1888, 8}, {1888, 8}}, + // "Kawi", "Kawi" + {{2807, 4}, {2807, 4}}, + // "Kayah_Li", "Kayah_Li" + {{1880, 8}, {1880, 8}}, + // "Khar", "Kharoshthi" + {{1606, 4}, {1606, 10}}, + // "Kharoshthi", "Kharoshthi" + {{1606, 10}, {1606, 10}}, + // "Khitan_Small_Script", "Khitan_Small_Script" + {{463, 19}, {463, 19}}, + // "Khmer", "Khmer" + {{2472, 5}, {2472, 5}}, + // "Khmr", "Khmer" + {{2803, 4}, {2472, 5}}, + // "Khoj", "Khojki" + {{2303, 4}, {2303, 6}}, + // "Khojki", "Khojki" + {{2303, 6}, {2303, 6}}, + // "Khudawadi", "Khudawadi" + {{1738, 9}, {1738, 9}}, + // "Kits", "Khitan_Small_Script" + {{2799, 4}, {463, 19}}, + // "Knda", "Kannada" + {{2795, 4}, {2135, 7}}, + // "Kthi", "Kaithi" + {{2791, 4}, {2309, 6}}, + // "Lana", "Tai_Tham" + {{2787, 4}, {1824, 8}}, + // "Lao", "Lao" + {{2783, 3}, {2783, 3}}, + // "Laoo", "Lao" + {{2783, 4}, {2783, 3}}, + // "Latin", "Latin" + {{2467, 5}, {2467, 5}}, + // "Latn", "Latin" + {{2779, 4}, {2467, 5}}, + // "Lepc", "Lepcha" + {{2297, 4}, {2297, 6}}, + // "Lepcha", "Lepcha" + {{2297, 6}, {2297, 6}}, + // "Limb", "Limbu" + {{2462, 4}, {2462, 5}}, + // "Limbu", "Limbu" + {{2462, 5}, {2462, 5}}, + // "Lina", "Linear_A" + {{2775, 4}, {1872, 8}}, + // "Linb", "Linear_B" + {{2771, 4}, {1864, 8}}, + // "Linear_A", "Linear_A" + {{1872, 8}, {1872, 8}}, + // "Linear_B", "Linear_B" + {{1864, 8}, {1864, 8}}, + // "Lisu", "Lisu" + {{2767, 4}, {2767, 4}}, + // "Lyci", "Lycian" + {{2291, 4}, {2291, 6}}, + // "Lycian", "Lycian" + {{2291, 6}, {2291, 6}}, + // "Lydi", "Lydian" + {{2285, 4}, {2285, 6}}, + // "Lydian", "Lydian" + {{2285, 6}, {2285, 6}}, + // "Mahajani", "Mahajani" + {{1856, 8}, {1856, 8}}, + // "Mahj", "Mahajani" + {{2763, 4}, {1856, 8}}, + // "Maka", "Makasar" + {{2128, 4}, {2128, 7}}, + // "Makasar", "Makasar" + {{2128, 7}, {2128, 7}}, + // "Malayalam", "Malayalam" + {{1729, 9}, {1729, 9}}, + // "Mand", "Mandaic" + {{2121, 4}, {2121, 7}}, + // "Mandaic", "Mandaic" + {{2121, 7}, {2121, 7}}, + // "Mani", "Manichaean" + {{1596, 4}, {1596, 10}}, + // "Manichaean", "Manichaean" + {{1596, 10}, {1596, 10}}, + // "Marc", "Marchen" + {{2114, 4}, {2114, 7}}, + // "Marchen", "Marchen" + {{2114, 7}, {2114, 7}}, + // "Masaram_Gondi", "Masaram_Gondi" + {{1151, 13}, {1151, 13}}, + // "Medefaidrin", "Medefaidrin" + {{1482, 11}, {1482, 11}}, + // "Medf", "Medefaidrin" + {{2759, 4}, {1482, 11}}, + // "Meetei_Mayek", "Meetei_Mayek" + {{1312, 12}, {1312, 12}}, + // "Mend", "Mende_Kikakui" + {{1138, 4}, {1138, 13}}, + // "Mende_Kikakui", "Mende_Kikakui" + {{1138, 13}, {1138, 13}}, + // "Merc", "Meroitic_Cursive" + {{2755, 4}, {813, 16}}, + // "Mero", "Meroitic_Hieroglyphs" + {{365, 4}, {365, 20}}, + // "Meroitic_Cursive", "Meroitic_Cursive" + {{813, 16}, {813, 16}}, + // "Meroitic_Hieroglyphs", "Meroitic_Hieroglyphs" + {{365, 20}, {365, 20}}, + // "Miao", "Miao" + {{2751, 4}, {2751, 4}}, + // "Mlym", "Malayalam" + {{2747, 4}, {1729, 9}}, + // "Modi", "Modi" + {{526, 4}, {526, 4}}, + // "Mong", "Mongolian" + {{1720, 4}, {1720, 9}}, + // "Mongolian", "Mongolian" + {{1720, 9}, {1720, 9}}, + // "Mro", "Mro" + {{2743, 3}, {2743, 3}}, + // "Mroo", "Mro" + {{2743, 4}, {2743, 3}}, + // "Mtei", "Meetei_Mayek" + {{2739, 4}, {1312, 12}}, + // "Mult", "Multani" + {{2107, 4}, {2107, 7}}, + // "Multani", "Multani" + {{2107, 7}, {2107, 7}}, + // "Myanmar", "Myanmar" + {{2100, 7}, {2100, 7}}, + // "Mymr", "Myanmar" + {{2735, 4}, {2100, 7}}, + // "Nabataean", "Nabataean" + {{1711, 9}, {1711, 9}}, + // "Nag_Mundari", "Nag_Mundari" + {{1471, 11}, {1471, 11}}, + // "Nagm", "Nag_Mundari" + {{2731, 4}, {1471, 11}}, + // "Nand", "Nandinagari" + {{1460, 4}, {1460, 11}}, + // "Nandinagari", "Nandinagari" + {{1460, 11}, {1460, 11}}, + // "Narb", "Old_North_Arabian" + {{2727, 4}, {698, 17}}, + // "Nbat", "Nabataean" + {{2723, 4}, {1711, 9}}, + // "New_Tai_Lue", "New_Tai_Lue" + {{1449, 11}, {1449, 11}}, + // "Newa", "Newa" + {{2719, 4}, {2719, 4}}, + // "Nko", "Nko" + {{2715, 3}, {2715, 3}}, + // "Nkoo", "Nko" + {{2715, 4}, {2715, 3}}, + // "Nshu", "Nushu" + {{2711, 4}, {2452, 5}}, + // "Nushu", "Nushu" + {{2452, 5}, {2452, 5}}, + // "Nyiakeng_Puachue_Hmong", "Nyiakeng_Puachue_Hmong" + {{217, 22}, {217, 22}}, + // "Ogam", "Ogham" + {{2707, 4}, {2447, 5}}, + // "Ogham", "Ogham" + {{2447, 5}, {2447, 5}}, + // "Ol_Chiki", "Ol_Chiki" + {{1848, 8}, {1848, 8}}, + // "Olck", "Ol_Chiki" + {{2703, 4}, {1848, 8}}, + // "Old_Hungarian", "Old_Hungarian" + {{1125, 13}, {1125, 13}}, + // "Old_Italic", "Old_Italic" + {{1586, 10}, {1586, 10}}, + // "Old_North_Arabian", "Old_North_Arabian" + {{698, 17}, {698, 17}}, + // "Old_Permic", "Old_Permic" + {{1576, 10}, {1576, 10}}, + // "Old_Persian", "Old_Persian" + {{1438, 11}, {1438, 11}}, + // "Old_Sogdian", "Old_Sogdian" + {{1427, 11}, {1427, 11}}, + // "Old_South_Arabian", "Old_South_Arabian" + {{681, 17}, {681, 17}}, + // "Old_Turkic", "Old_Turkic" + {{1566, 10}, {1566, 10}}, + // "Old_Uyghur", "Old_Uyghur" + {{1556, 10}, {1556, 10}}, + // "Oriya", "Oriya" + {{2442, 5}, {2442, 5}}, + // "Orkh", "Old_Turkic" + {{2699, 4}, {1566, 10}}, + // "Orya", "Oriya" + {{2695, 4}, {2442, 5}}, + // "Osage", "Osage" + {{2437, 5}, {2437, 5}}, + // "Osge", "Osage" + {{2691, 4}, {2437, 5}}, + // "Osma", "Osmanya" + {{2093, 4}, {2093, 7}}, + // "Osmanya", "Osmanya" + {{2093, 7}, {2093, 7}}, + // "Ougr", "Old_Uyghur" + {{2687, 4}, {1556, 10}}, + // "Pahawh_Hmong", "Pahawh_Hmong" + {{1264, 12}, {1264, 12}}, + // "Palm", "Palmyrene" + {{1702, 4}, {1702, 9}}, + // "Palmyrene", "Palmyrene" + {{1702, 9}, {1702, 9}}, + // "Pau_Cin_Hau", "Pau_Cin_Hau" + {{1416, 11}, {1416, 11}}, + // "Pauc", "Pau_Cin_Hau" + {{2683, 4}, {1416, 11}}, + // "Perm", "Old_Permic" + {{1580, 4}, {1576, 10}}, + // "Phag", "Phags_Pa" + {{1840, 4}, {1840, 8}}, + // "Phags_Pa", "Phags_Pa" + {{1840, 8}, {1840, 8}}, + // "Phli", "Inscriptional_Pahlavi" + {{2679, 4}, {261, 21}}, + // "Phlp", "Psalter_Pahlavi" + {{2675, 4}, {892, 15}}, + // "Phnx", "Phoenician" + {{2671, 4}, {1546, 10}}, + // "Phoenician", "Phoenician" + {{1546, 10}, {1546, 10}}, + // "Plrd", "Miao" + {{2667, 4}, {2751, 4}}, + // "Prti", "Inscriptional_Parthian" + {{2663, 4}, {239, 22}}, + // "Psalter_Pahlavi", "Psalter_Pahlavi" + {{892, 15}, {892, 15}}, + // "Qaac", "Coptic" + {{2659, 4}, {2351, 6}}, + // "Qaai", "Inherited" + {{2655, 4}, {1747, 9}}, + // "Rejang", "Rejang" + {{2273, 6}, {2273, 6}}, + // "Rjng", "Rejang" + {{2651, 4}, {2273, 6}}, + // "Rohg", "Hanifi_Rohingya" + {{2647, 4}, {952, 15}}, + // "Runic", "Runic" + {{2427, 5}, {2427, 5}}, + // "Runr", "Runic" + {{2643, 4}, {2427, 5}}, + // "Samaritan", "Samaritan" + {{1693, 9}, {1693, 9}}, + // "Samr", "Samaritan" + {{2639, 4}, {1693, 9}}, + // "Sarb", "Old_South_Arabian" + {{2635, 4}, {681, 17}}, + // "Saur", "Saurashtra" + {{1536, 4}, {1536, 10}}, + // "Saurashtra", "Saurashtra" + {{1536, 10}, {1536, 10}}, + // "Sgnw", "SignWriting" + {{2631, 4}, {1394, 11}}, + // "Sharada", "Sharada" + {{2072, 7}, {2072, 7}}, + // "Shavian", "Shavian" + {{2065, 7}, {2065, 7}}, + // "Shaw", "Shavian" + {{2627, 4}, {2065, 7}}, + // "Shrd", "Sharada" + {{2623, 4}, {2072, 7}}, + // "Sidd", "Siddham" + {{2058, 4}, {2058, 7}}, + // "Siddham", "Siddham" + {{2058, 7}, {2058, 7}}, + // "SignWriting", "SignWriting" + {{1394, 11}, {1394, 11}}, + // "Sind", "Khudawadi" + {{2619, 4}, {1738, 9}}, + // "Sinh", "Sinhala" + {{2051, 4}, {2051, 7}}, + // "Sinhala", "Sinhala" + {{2051, 7}, {2051, 7}}, + // "Sogd", "Sogdian" + {{1431, 4}, {1431, 7}}, + // "Sogdian", "Sogdian" + {{1431, 7}, {1431, 7}}, + // "Sogo", "Old_Sogdian" + {{2615, 4}, {1427, 11}}, + // "Sora", "Sora_Sompeng" + {{1252, 4}, {1252, 12}}, + // "Sora_Sompeng", "Sora_Sompeng" + {{1252, 12}, {1252, 12}}, + // "Soyo", "Soyombo" + {{2044, 4}, {2044, 7}}, + // "Soyombo", "Soyombo" + {{2044, 7}, {2044, 7}}, + // "Sund", "Sundanese" + {{1684, 4}, {1684, 9}}, + // "Sundanese", "Sundanese" + {{1684, 9}, {1684, 9}}, + // "Sylo", "Syloti_Nagri" + {{1228, 4}, {1228, 12}}, + // "Syloti_Nagri", "Syloti_Nagri" + {{1228, 12}, {1228, 12}}, + // "Syrc", "Syriac" + {{2611, 4}, {2267, 6}}, + // "Syriac", "Syriac" + {{2267, 6}, {2267, 6}}, + // "Tagalog", "Tagalog" + {{2037, 7}, {2037, 7}}, + // "Tagb", "Tagbanwa" + {{1832, 4}, {1832, 8}}, + // "Tagbanwa", "Tagbanwa" + {{1832, 8}, {1832, 8}}, + // "Tai_Le", "Tai_Le" + {{2261, 6}, {2261, 6}}, + // "Tai_Tham", "Tai_Tham" + {{1824, 8}, {1824, 8}}, + // "Tai_Viet", "Tai_Viet" + {{1816, 8}, {1816, 8}}, + // "Takr", "Takri" + {{2417, 4}, {2417, 5}}, + // "Takri", "Takri" + {{2417, 5}, {2417, 5}}, + // "Tale", "Tai_Le" + {{2607, 4}, {2261, 6}}, + // "Talu", "New_Tai_Lue" + {{2603, 4}, {1449, 11}}, + // "Tamil", "Tamil" + {{2412, 5}, {2412, 5}}, + // "Taml", "Tamil" + {{2599, 4}, {2412, 5}}, + // "Tang", "Tangut" + {{2249, 4}, {2249, 6}}, + // "Tangsa", "Tangsa" + {{2255, 6}, {2255, 6}}, + // "Tangut", "Tangut" + {{2249, 6}, {2249, 6}}, + // "Tavt", "Tai_Viet" + {{2595, 4}, {1816, 8}}, + // "Telu", "Telugu" + {{2243, 4}, {2243, 6}}, + // "Telugu", "Telugu" + {{2243, 6}, {2243, 6}}, + // "Tfng", "Tifinagh" + {{2591, 4}, {1808, 8}}, + // "Tglg", "Tagalog" + {{2587, 4}, {2037, 7}}, + // "Thaa", "Thaana" + {{2237, 4}, {2237, 6}}, + // "Thaana", "Thaana" + {{2237, 6}, {2237, 6}}, + // "Thai", "Thai" + {{2583, 4}, {2583, 4}}, + // "Tibetan", "Tibetan" + {{2030, 7}, {2030, 7}}, + // "Tibt", "Tibetan" + {{2579, 4}, {2030, 7}}, + // "Tifinagh", "Tifinagh" + {{1808, 8}, {1808, 8}}, + // "Tirh", "Tirhuta" + {{2023, 4}, {2023, 7}}, + // "Tirhuta", "Tirhuta" + {{2023, 7}, {2023, 7}}, + // "Tnsa", "Tangsa" + {{2575, 4}, {2255, 6}}, + // "Toto", "Toto" + {{2571, 4}, {2571, 4}}, + // "Ugar", "Ugaritic" + {{1800, 4}, {1800, 8}}, + // "Ugaritic", "Ugaritic" + {{1800, 8}, {1800, 8}}, + // "Unknown", "Unknown" + {{2016, 7}, {2016, 7}}, + // "Vai", "Vai" + {{2567, 3}, {2567, 3}}, + // "Vaii", "Vai" + {{2567, 4}, {2567, 3}}, + // "Vith", "Vithkuqi" + {{1792, 4}, {1792, 8}}, + // "Vithkuqi", "Vithkuqi" + {{1792, 8}, {1792, 8}}, + // "Wancho", "Wancho" + {{2225, 6}, {2225, 6}}, + // "Wara", "Warang_Citi" + {{1372, 4}, {1372, 11}}, + // "Warang_Citi", "Warang_Citi" + {{1372, 11}, {1372, 11}}, + // "Wcho", "Wancho" + {{2563, 4}, {2225, 6}}, + // "Xpeo", "Old_Persian" + {{2551, 4}, {1438, 11}}, + // "Xsux", "Cuneiform" + {{2547, 4}, {1765, 9}}, + // "Yezi", "Yezidi" + {{2219, 4}, {2219, 6}}, + // "Yezidi", "Yezidi" + {{2219, 6}, {2219, 6}}, + // "Yi", "Yi" + {{2543, 2}, {2543, 2}}, + // "Yiii", "Yi" + {{2543, 4}, {2543, 2}}, + // "Zanabazar_Square", "Zanabazar_Square" + {{749, 16}, {749, 16}}, + // "Zanb", "Zanabazar_Square" + {{2539, 4}, {749, 16}}, + // "Zinh", "Inherited" + {{2535, 4}, {1747, 9}}, + // "Zyyy", "Common" + {{2531, 4}, {2357, 6}}, + // "Zzzz", "Unknown" + {{2527, 4}, {2016, 7}}, +}; + +static constexpr RangeMapEntry unicodePropertyRangeMap_Script[] = { + // "Adlam" + {{2522, 5}, 272, 1}, + // "Ahom" + {{2935, 4}, 265, 1}, + // "Anatolian_Hieroglyphs" + {{324, 21}, 266, 1}, + // "Arabic" + {{2381, 6}, 92, 1}, + // "Armenian" + {{2008, 8}, 90, 1}, + // "Avestan" + {{2212, 7}, 202, 1}, + // "Balinese" + {{1992, 8}, 181, 1}, + // "Bamum" + {{2517, 5}, 206, 1}, + // "Bassa_Vah" + {{1783, 9}, 232, 1}, + // "Batak" + {{2512, 5}, 217, 1}, + // "Bengali" + {{2205, 7}, 100, 1}, + // "Bhaiksuki" + {{1774, 9}, 274, 1}, + // "Bopomofo" + {{1984, 8}, 139, 1}, + // "Brahmi" + {{2375, 6}, 218, 1}, + // "Braille" + {{2198, 7}, 168, 1}, + // "Buginese" + {{1976, 8}, 169, 1}, + // "Buhid" + {{2507, 5}, 153, 1}, + // "Canadian_Aboriginal" + {{539, 19}, 129, 1}, + // "Carian" + {{2369, 6}, 197, 1}, + // "Caucasian_Albanian" + {{612, 18}, 231, 1}, + // "Chakma" + {{2363, 6}, 221, 1}, + // "Cham" + {{2891, 4}, 199, 1}, + // "Cherokee" + {{1968, 8}, 128, 1}, + // "Chorasmian" + {{1646, 10}, 300, 1}, + // "Common" + {{2357, 6}, 83, 1}, + // "Coptic" + {{2351, 6}, 171, 1}, + // "Cuneiform" + {{1765, 9}, 182, 1}, + // "Cypriot" + {{2191, 7}, 166, 1}, + // "Cypro_Minoan" + {{1336, 12}, 305, 1}, + // "Cyrillic" + {{1960, 8}, 88, 1}, + // "Deseret" + {{2184, 7}, 147, 1}, + // "Devanagari" + {{1626, 10}, 98, 1}, + // "Dives_Akuru" + {{1515, 11}, 301, 1}, + // "Dogra" + {{2497, 5}, 284, 1}, + // "Duployan" + {{1952, 8}, 233, 1}, + // "Egyptian_Hieroglyphs" + {{405, 20}, 203, 1}, + // "Elbasan" + {{2177, 7}, 235, 1}, + // "Elymaic" + {{2170, 7}, 295, 1}, + // "Ethiopic" + {{1944, 8}, 127, 1}, + // "Georgian" + {{1928, 8}, 123, 1}, + // "Glagolitic" + {{1616, 10}, 174, 1}, + // "Gothic" + {{2339, 6}, 146, 1}, + // "Grantha" + {{2149, 7}, 236, 1}, + // "Greek" + {{2477, 5}, 86, 1}, + // "Gujarati" + {{1920, 8}, 104, 1}, + // "Gunjala_Gondi" + {{1177, 13}, 286, 1}, + // "Gurmukhi" + {{1912, 8}, 102, 1}, + // "Han" + {{952, 3}, 141, 1}, + // "Hangul" + {{2327, 6}, 125, 1}, + // "Hanifi_Rohingya" + {{952, 15}, 290, 1}, + // "Hanunoo" + {{2142, 7}, 151, 1}, + // "Hatran" + {{2321, 6}, 267, 1}, + // "Hebrew" + {{2315, 6}, 91, 1}, + // "Hiragana" + {{1904, 8}, 135, 1}, + // "Imperial_Aramaic" + {{845, 16}, 210, 1}, + // "Inherited" + {{1747, 9}, 148, 1}, + // "Inscriptional_Pahlavi" + {{261, 21}, 213, 1}, + // "Inscriptional_Parthian" + {{239, 22}, 212, 1}, + // "Javanese" + {{1896, 8}, 207, 1}, + // "Kaithi" + {{2309, 6}, 215, 1}, + // "Kannada" + {{2135, 7}, 112, 1}, + // "Katakana" + {{1888, 8}, 137, 1}, + // "Kawi" + {{2807, 4}, 312, 1}, + // "Kayah_Li" + {{1880, 8}, 193, 1}, + // "Kharoshthi" + {{1606, 10}, 180, 1}, + // "Khitan_Small_Script" + {{463, 19}, 302, 1}, + // "Khmer" + {{2472, 5}, 132, 1}, + // "Khojki" + {{2303, 6}, 239, 1}, + // "Khudawadi" + {{1738, 9}, 260, 1}, + // "Lao" + {{2783, 3}, 119, 1}, + // "Latin" + {{2467, 5}, 84, 1}, + // "Lepcha" + {{2297, 6}, 189, 1}, + // "Limbu" + {{2462, 5}, 157, 1}, + // "Linear_A" + {{1872, 8}, 241, 1}, + // "Linear_B" + {{1864, 8}, 161, 1}, + // "Lisu" + {{2767, 4}, 205, 1}, + // "Lycian" + {{2291, 6}, 196, 1}, + // "Lydian" + {{2285, 6}, 198, 1}, + // "Mahajani" + {{1856, 8}, 243, 1}, + // "Makasar" + {{2128, 7}, 288, 1}, + // "Malayalam" + {{1729, 9}, 114, 1}, + // "Mandaic" + {{2121, 7}, 219, 1}, + // "Manichaean" + {{1596, 10}, 245, 1}, + // "Marchen" + {{2114, 7}, 275, 1}, + // "Masaram_Gondi" + {{1151, 13}, 279, 1}, + // "Medefaidrin" + {{1482, 11}, 289, 1}, + // "Meetei_Mayek" + {{1312, 12}, 209, 1}, + // "Mende_Kikakui" + {{1138, 13}, 247, 1}, + // "Meroitic_Cursive" + {{813, 16}, 223, 1}, + // "Meroitic_Hieroglyphs" + {{365, 20}, 224, 1}, + // "Miao" + {{2751, 4}, 225, 1}, + // "Modi" + {{526, 4}, 248, 1}, + // "Mongolian" + {{1720, 9}, 133, 1}, + // "Mro" + {{2743, 3}, 250, 1}, + // "Multani" + {{2107, 7}, 268, 1}, + // "Myanmar" + {{2100, 7}, 121, 1}, + // "Nabataean" + {{1711, 9}, 252, 1}, + // "Nag_Mundari" + {{1471, 11}, 313, 1}, + // "Nandinagari" + {{1460, 11}, 296, 1}, + // "New_Tai_Lue" + {{1449, 11}, 173, 1}, + // "Newa" + {{2719, 4}, 276, 1}, + // "Nko" + {{2715, 3}, 186, 1}, + // "Nushu" + {{2452, 5}, 281, 1}, + // "Nyiakeng_Puachue_Hmong" + {{217, 22}, 298, 1}, + // "Ogham" + {{2447, 5}, 130, 1}, + // "Ol_Chiki" + {{1848, 8}, 190, 1}, + // "Old_Hungarian" + {{1125, 13}, 270, 1}, + // "Old_Italic" + {{1586, 10}, 145, 1}, + // "Old_North_Arabian" + {{698, 17}, 251, 1}, + // "Old_Permic" + {{1576, 10}, 255, 1}, + // "Old_Persian" + {{1438, 11}, 179, 1}, + // "Old_Sogdian" + {{1427, 11}, 294, 1}, + // "Old_South_Arabian" + {{681, 17}, 211, 1}, + // "Old_Turkic" + {{1566, 10}, 214, 1}, + // "Old_Uyghur" + {{1556, 10}, 307, 1}, + // "Oriya" + {{2442, 5}, 106, 1}, + // "Osage" + {{2437, 5}, 277, 1}, + // "Osmanya" + {{2093, 7}, 165, 1}, + // "Pahawh_Hmong" + {{1264, 12}, 238, 1}, + // "Palmyrene" + {{1702, 9}, 253, 1}, + // "Pau_Cin_Hau" + {{1416, 11}, 254, 1}, + // "Phags_Pa" + {{1840, 8}, 184, 1}, + // "Phoenician" + {{1546, 10}, 183, 1}, + // "Psalter_Pahlavi" + {{892, 15}, 257, 1}, + // "Rejang" + {{2273, 6}, 195, 1}, + // "Runic" + {{2427, 5}, 131, 1}, + // "Samaritan" + {{1693, 9}, 204, 1}, + // "Saurashtra" + {{1536, 10}, 192, 1}, + // "Sharada" + {{2072, 7}, 226, 1}, + // "Shavian" + {{2065, 7}, 164, 1}, + // "Siddham" + {{2058, 7}, 259, 1}, + // "SignWriting" + {{1394, 11}, 271, 1}, + // "Sinhala" + {{2051, 7}, 116, 1}, + // "Sogdian" + {{1431, 7}, 292, 1}, + // "Sora_Sompeng" + {{1252, 12}, 228, 1}, + // "Soyombo" + {{2044, 7}, 282, 1}, + // "Sundanese" + {{1684, 9}, 188, 1}, + // "Syloti_Nagri" + {{1228, 12}, 177, 1}, + // "Syriac" + {{2267, 6}, 94, 1}, + // "Tagalog" + {{2037, 7}, 149, 1}, + // "Tagbanwa" + {{1832, 8}, 155, 1}, + // "Tai_Le" + {{2261, 6}, 159, 1}, + // "Tai_Tham" + {{1824, 8}, 200, 1}, + // "Tai_Viet" + {{1816, 8}, 201, 1}, + // "Takri" + {{2417, 5}, 229, 1}, + // "Tamil" + {{2412, 5}, 108, 1}, + // "Tangsa" + {{2255, 6}, 309, 1}, + // "Tangut" + {{2249, 6}, 278, 1}, + // "Telugu" + {{2243, 6}, 110, 1}, + // "Thaana" + {{2237, 6}, 96, 1}, + // "Thai" + {{2583, 4}, 118, 1}, + // "Tibetan" + {{2030, 7}, 120, 1}, + // "Tifinagh" + {{1808, 8}, 176, 1}, + // "Tirhuta" + {{2023, 7}, 262, 1}, + // "Toto" + {{2571, 4}, 310, 1}, + // "Ugaritic" + {{1800, 8}, 163, 1}, + // "Unknown" + {{2016, 7}, 2, 1}, + // "Vai" + {{2567, 3}, 191, 1}, + // "Vithkuqi" + {{1792, 8}, 311, 1}, + // "Wancho" + {{2225, 6}, 299, 1}, + // "Warang_Citi" + {{1372, 11}, 264, 1}, + // "Yezidi" + {{2219, 6}, 303, 1}, + // "Yi" + {{2543, 2}, 143, 1}, + // "Zanabazar_Square" + {{749, 16}, 283, 1}, +}; + +static constexpr RangeMapEntry unicodePropertyRangeMap_ScriptExtensions[] = { + // "Adlam" + {{2522, 5}, 272, 2}, + // "Arabic" + {{2381, 6}, 92, 2}, + // "Bengali" + {{2205, 7}, 100, 2}, + // "Bopomofo" + {{1984, 8}, 139, 2}, + // "Buginese" + {{1976, 8}, 169, 2}, + // "Buhid" + {{2507, 5}, 153, 2}, + // "Chakma" + {{2363, 6}, 221, 2}, + // "Coptic" + {{2351, 6}, 171, 2}, + // "Cypriot" + {{2191, 7}, 166, 2}, + // "Cypro_Minoan" + {{1336, 12}, 305, 2}, + // "Cyrillic" + {{1960, 8}, 88, 2}, + // "Devanagari" + {{1626, 10}, 98, 2}, + // "Dogra" + {{2497, 5}, 284, 2}, + // "Duployan" + {{1952, 8}, 233, 2}, + // "Georgian" + {{1928, 8}, 123, 2}, + // "Glagolitic" + {{1616, 10}, 174, 2}, + // "Grantha" + {{2149, 7}, 236, 2}, + // "Greek" + {{2477, 5}, 86, 2}, + // "Gujarati" + {{1920, 8}, 104, 2}, + // "Gunjala_Gondi" + {{1177, 13}, 286, 2}, + // "Gurmukhi" + {{1912, 8}, 102, 2}, + // "Han" + {{952, 3}, 141, 2}, + // "Hangul" + {{2327, 6}, 125, 2}, + // "Hanifi_Rohingya" + {{952, 15}, 290, 2}, + // "Hanunoo" + {{2142, 7}, 151, 2}, + // "Hiragana" + {{1904, 8}, 135, 2}, + // "Javanese" + {{1896, 8}, 207, 2}, + // "Kaithi" + {{2309, 6}, 215, 2}, + // "Kannada" + {{2135, 7}, 112, 2}, + // "Katakana" + {{1888, 8}, 137, 2}, + // "Kayah_Li" + {{1880, 8}, 193, 2}, + // "Khojki" + {{2303, 6}, 239, 2}, + // "Khudawadi" + {{1738, 9}, 260, 2}, + // "Latin" + {{2467, 5}, 84, 2}, + // "Limbu" + {{2462, 5}, 157, 2}, + // "Linear_A" + {{1872, 8}, 241, 2}, + // "Linear_B" + {{1864, 8}, 161, 2}, + // "Mahajani" + {{1856, 8}, 243, 2}, + // "Malayalam" + {{1729, 9}, 114, 2}, + // "Mandaic" + {{2121, 7}, 219, 2}, + // "Manichaean" + {{1596, 10}, 245, 2}, + // "Masaram_Gondi" + {{1151, 13}, 279, 2}, + // "Modi" + {{526, 4}, 248, 2}, + // "Mongolian" + {{1720, 9}, 133, 2}, + // "Multani" + {{2107, 7}, 268, 2}, + // "Myanmar" + {{2100, 7}, 121, 2}, + // "Nandinagari" + {{1460, 11}, 296, 2}, + // "Nko" + {{2715, 3}, 186, 2}, + // "Old_Permic" + {{1576, 10}, 255, 2}, + // "Old_Uyghur" + {{1556, 10}, 307, 2}, + // "Oriya" + {{2442, 5}, 106, 2}, + // "Phags_Pa" + {{1840, 8}, 184, 2}, + // "Psalter_Pahlavi" + {{892, 15}, 257, 2}, + // "Sharada" + {{2072, 7}, 226, 2}, + // "Sinhala" + {{2051, 7}, 116, 2}, + // "Sogdian" + {{1431, 7}, 292, 2}, + // "Syloti_Nagri" + {{1228, 12}, 177, 2}, + // "Syriac" + {{2267, 6}, 94, 2}, + // "Tagalog" + {{2037, 7}, 149, 2}, + // "Tagbanwa" + {{1832, 8}, 155, 2}, + // "Tai_Le" + {{2261, 6}, 159, 2}, + // "Takri" + {{2417, 5}, 229, 2}, + // "Tamil" + {{2412, 5}, 108, 2}, + // "Telugu" + {{2243, 6}, 110, 2}, + // "Thaana" + {{2237, 6}, 96, 2}, + // "Tirhuta" + {{2023, 7}, 262, 2}, + // "Yezidi" + {{2219, 6}, 303, 2}, + // "Yi" + {{2543, 2}, 143, 2}, +}; + +#endif + +// static constexpr uint32_t UNICODE_FOLDS_SIZE = 201; static constexpr UnicodeTransformRange UNICODE_FOLDS[] = { - {0x0041, 26, 32, 1}, {0x00B5, 1, 775, 1}, {0x00C0, 23, 32, 1}, - {0x00D8, 7, 32, 1}, {0x0100, 47, 1, 2}, {0x0132, 5, 1, 2}, - {0x0139, 15, 1, 2}, {0x014A, 45, 1, 2}, {0x0178, 1, -121, 1}, - {0x0179, 5, 1, 2}, {0x017F, 1, -268, 1}, {0x0181, 1, 210, 1}, - {0x0182, 3, 1, 2}, {0x0186, 1, 206, 1}, {0x0187, 1, 1, 1}, - {0x0189, 2, 205, 1}, {0x018B, 1, 1, 1}, {0x018E, 1, 79, 1}, - {0x018F, 1, 202, 1}, {0x0190, 1, 203, 1}, {0x0191, 1, 1, 1}, - {0x0193, 1, 205, 1}, {0x0194, 1, 207, 1}, {0x0196, 1, 211, 1}, - {0x0197, 1, 209, 1}, {0x0198, 1, 1, 1}, {0x019C, 1, 211, 1}, - {0x019D, 1, 213, 1}, {0x019F, 1, 214, 1}, {0x01A0, 5, 1, 2}, - {0x01A6, 1, 218, 1}, {0x01A7, 1, 1, 1}, {0x01A9, 1, 218, 1}, - {0x01AC, 1, 1, 1}, {0x01AE, 1, 218, 1}, {0x01AF, 1, 1, 1}, - {0x01B1, 2, 217, 1}, {0x01B3, 3, 1, 2}, {0x01B7, 1, 219, 1}, - {0x01B8, 5, 1, 4}, {0x01C4, 1, 2, 1}, {0x01C5, 1, 1, 1}, - {0x01C7, 1, 2, 1}, {0x01C8, 1, 1, 1}, {0x01CA, 1, 2, 1}, - {0x01CB, 17, 1, 2}, {0x01DE, 17, 1, 2}, {0x01F1, 1, 2, 1}, - {0x01F2, 3, 1, 2}, {0x01F6, 1, -97, 1}, {0x01F7, 1, -56, 1}, - {0x01F8, 39, 1, 2}, {0x0220, 1, -130, 1}, {0x0222, 17, 1, 2}, - {0x023A, 1, 10795, 1}, {0x023B, 1, 1, 1}, {0x023D, 1, -163, 1}, - {0x023E, 1, 10792, 1}, {0x0241, 1, 1, 1}, {0x0243, 1, -195, 1}, - {0x0244, 1, 69, 1}, {0x0245, 1, 71, 1}, {0x0246, 9, 1, 2}, - {0x0345, 1, 116, 1}, {0x0370, 3, 1, 2}, {0x0376, 1, 1, 1}, - {0x037F, 1, 116, 1}, {0x0386, 1, 38, 1}, {0x0388, 3, 37, 1}, - {0x038C, 1, 64, 1}, {0x038E, 2, 63, 1}, {0x0391, 17, 32, 1}, - {0x03A3, 9, 32, 1}, {0x03C2, 1, 1, 1}, {0x03CF, 1, 8, 1}, - {0x03D0, 1, -30, 1}, {0x03D1, 1, -25, 1}, {0x03D5, 1, -15, 1}, - {0x03D6, 1, -22, 1}, {0x03D8, 23, 1, 2}, {0x03F0, 1, -54, 1}, - {0x03F1, 1, -48, 1}, {0x03F4, 1, -60, 1}, {0x03F5, 1, -64, 1}, - {0x03F7, 1, 1, 1}, {0x03F9, 1, -7, 1}, {0x03FA, 1, 1, 1}, - {0x03FD, 3, -130, 1}, {0x0400, 16, 80, 1}, {0x0410, 32, 32, 1}, - {0x0460, 33, 1, 2}, {0x048A, 53, 1, 2}, {0x04C0, 1, 15, 1}, - {0x04C1, 13, 1, 2}, {0x04D0, 95, 1, 2}, {0x0531, 38, 48, 1}, - {0x10A0, 38, 7264, 1}, {0x10C7, 7, 7264, 6}, {0x13F8, 6, -8, 1}, - {0x1C80, 1, -6222, 1}, {0x1C81, 1, -6221, 1}, {0x1C82, 1, -6212, 1}, - {0x1C83, 2, -6210, 1}, {0x1C85, 1, -6211, 1}, {0x1C86, 1, -6204, 1}, - {0x1C87, 1, -6180, 1}, {0x1C88, 1, 35267, 1}, {0x1C90, 43, -3008, 1}, - {0x1CBD, 3, -3008, 1}, {0x1E00, 149, 1, 2}, {0x1E9B, 1, -58, 1}, - {0x1E9E, 1, -7615, 1}, {0x1EA0, 95, 1, 2}, {0x1F08, 8, -8, 1}, - {0x1F18, 6, -8, 1}, {0x1F28, 8, -8, 1}, {0x1F38, 8, -8, 1}, - {0x1F48, 6, -8, 1}, {0x1F59, 7, -8, 2}, {0x1F68, 8, -8, 1}, - {0x1F88, 8, -8, 1}, {0x1F98, 8, -8, 1}, {0x1FA8, 8, -8, 1}, - {0x1FB8, 2, -8, 1}, {0x1FBA, 2, -74, 1}, {0x1FBC, 1, -9, 1}, - {0x1FBE, 1, -7173, 1}, {0x1FC8, 4, -86, 1}, {0x1FCC, 1, -9, 1}, - {0x1FD8, 2, -8, 1}, {0x1FDA, 2, -100, 1}, {0x1FE8, 2, -8, 1}, - {0x1FEA, 2, -112, 1}, {0x1FEC, 1, -7, 1}, {0x1FF8, 2, -128, 1}, - {0x1FFA, 2, -126, 1}, {0x1FFC, 1, -9, 1}, {0x2126, 1, -7517, 1}, - {0x212A, 1, -8383, 1}, {0x212B, 1, -8262, 1}, {0x2132, 1, 28, 1}, - {0x2160, 16, 16, 1}, {0x2183, 1, 1, 1}, {0x24B6, 26, 26, 1}, - {0x2C00, 48, 48, 1}, {0x2C60, 1, 1, 1}, {0x2C62, 1, -10743, 1}, - {0x2C63, 1, -3814, 1}, {0x2C64, 1, -10727, 1}, {0x2C67, 5, 1, 2}, - {0x2C6D, 1, -10780, 1}, {0x2C6E, 1, -10749, 1}, {0x2C6F, 1, -10783, 1}, - {0x2C70, 1, -10782, 1}, {0x2C72, 4, 1, 3}, {0x2C7E, 2, -10815, 1}, - {0x2C80, 99, 1, 2}, {0x2CEB, 3, 1, 2}, {0x2CF2, 1, 1, 1}, - {0xA640, 45, 1, 2}, {0xA680, 27, 1, 2}, {0xA722, 13, 1, 2}, - {0xA732, 61, 1, 2}, {0xA779, 3, 1, 2}, {0xA77D, 1, -35332, 1}, - {0xA77E, 9, 1, 2}, {0xA78B, 1, 1, 1}, {0xA78D, 1, -42280, 1}, - {0xA790, 3, 1, 2}, {0xA796, 19, 1, 2}, {0xA7AA, 1, -42308, 1}, - {0xA7AB, 1, -42319, 1}, {0xA7AC, 1, -42315, 1}, {0xA7AD, 1, -42305, 1}, - {0xA7AE, 1, -42308, 1}, {0xA7B0, 1, -42258, 1}, {0xA7B1, 1, -42282, 1}, - {0xA7B2, 1, -42261, 1}, {0xA7B3, 1, 928, 1}, {0xA7B4, 15, 1, 2}, - {0xA7C4, 1, -48, 1}, {0xA7C5, 1, -42307, 1}, {0xA7C6, 1, -35384, 1}, - {0xA7C7, 3, 1, 2}, {0xA7D0, 7, 1, 6}, {0xA7D8, 30, 1, 29}, - {0xAB70, 80, -38864, 1}, {0xFF21, 26, 32, 1}, {0x10400, 40, 40, 1}, - {0x104B0, 36, 40, 1}, {0x10570, 11, 39, 1}, {0x1057C, 15, 39, 1}, - {0x1058C, 7, 39, 1}, {0x10594, 2, 39, 1}, {0x10C80, 51, 64, 1}, - {0x118A0, 32, 32, 1}, {0x16E40, 32, 32, 1}, {0x1E900, 34, 34, 1}}; + {0x0041, 26, 32, 1}, {0x00B5, 1, 775, 1}, {0x00C0, 23, 32, 1}, + {0x00D8, 7, 32, 1}, {0x0100, 47, 1, 2}, {0x0132, 5, 1, 2}, + {0x0139, 15, 1, 2}, {0x014A, 45, 1, 2}, {0x0178, 1, -121, 1}, + {0x0179, 5, 1, 2}, {0x017F, 1, -268, 1}, {0x0181, 1, 210, 1}, + {0x0182, 3, 1, 2}, {0x0186, 1, 206, 1}, {0x0187, 1, 1, 1}, + {0x0189, 2, 205, 1}, {0x018B, 1, 1, 1}, {0x018E, 1, 79, 1}, + {0x018F, 1, 202, 1}, {0x0190, 1, 203, 1}, {0x0191, 1, 1, 1}, + {0x0193, 1, 205, 1}, {0x0194, 1, 207, 1}, {0x0196, 1, 211, 1}, + {0x0197, 1, 209, 1}, {0x0198, 1, 1, 1}, {0x019C, 1, 211, 1}, + {0x019D, 1, 213, 1}, {0x019F, 1, 214, 1}, {0x01A0, 5, 1, 2}, + {0x01A6, 1, 218, 1}, {0x01A7, 1, 1, 1}, {0x01A9, 1, 218, 1}, + {0x01AC, 1, 1, 1}, {0x01AE, 1, 218, 1}, {0x01AF, 1, 1, 1}, + {0x01B1, 2, 217, 1}, {0x01B3, 3, 1, 2}, {0x01B7, 1, 219, 1}, + {0x01B8, 5, 1, 4}, {0x01C4, 1, 2, 1}, {0x01C5, 1, 1, 1}, + {0x01C7, 1, 2, 1}, {0x01C8, 1, 1, 1}, {0x01CA, 1, 2, 1}, + {0x01CB, 17, 1, 2}, {0x01DE, 17, 1, 2}, {0x01F1, 1, 2, 1}, + {0x01F2, 3, 1, 2}, {0x01F6, 1, -97, 1}, {0x01F7, 1, -56, 1}, + {0x01F8, 39, 1, 2}, {0x0220, 1, -130, 1}, {0x0222, 17, 1, 2}, + {0x023A, 1, 10795, 1}, {0x023B, 1, 1, 1}, {0x023D, 1, -163, 1}, + {0x023E, 1, 10792, 1}, {0x0241, 1, 1, 1}, {0x0243, 1, -195, 1}, + {0x0244, 1, 69, 1}, {0x0245, 1, 71, 1}, {0x0246, 9, 1, 2}, + {0x0345, 1, 116, 1}, {0x0370, 3, 1, 2}, {0x0376, 1, 1, 1}, + {0x037F, 1, 116, 1}, {0x0386, 1, 38, 1}, {0x0388, 3, 37, 1}, + {0x038C, 1, 64, 1}, {0x038E, 2, 63, 1}, {0x0391, 17, 32, 1}, + {0x03A3, 9, 32, 1}, {0x03C2, 1, 1, 1}, {0x03CF, 1, 8, 1}, + {0x03D0, 1, -30, 1}, {0x03D1, 1, -25, 1}, {0x03D5, 1, -15, 1}, + {0x03D6, 1, -22, 1}, {0x03D8, 23, 1, 2}, {0x03F0, 1, -54, 1}, + {0x03F1, 1, -48, 1}, {0x03F4, 1, -60, 1}, {0x03F5, 1, -64, 1}, + {0x03F7, 1, 1, 1}, {0x03F9, 1, -7, 1}, {0x03FA, 1, 1, 1}, + {0x03FD, 3, -130, 1}, {0x0400, 16, 80, 1}, {0x0410, 32, 32, 1}, + {0x0460, 33, 1, 2}, {0x048A, 53, 1, 2}, {0x04C0, 1, 15, 1}, + {0x04C1, 13, 1, 2}, {0x04D0, 95, 1, 2}, {0x0531, 38, 48, 1}, + {0x10A0, 38, 7264, 1}, {0x10C7, 7, 7264, 6}, {0x13F8, 6, -8, 1}, + {0x1C80, 1, -6222, 1}, {0x1C81, 1, -6221, 1}, {0x1C82, 1, -6212, 1}, + {0x1C83, 2, -6210, 1}, {0x1C85, 1, -6211, 1}, {0x1C86, 1, -6204, 1}, + {0x1C87, 1, -6180, 1}, {0x1C88, 1, 35267, 1}, {0x1C90, 43, -3008, 1}, + {0x1CBD, 3, -3008, 1}, {0x1E00, 149, 1, 2}, {0x1E9B, 1, -58, 1}, + {0x1E9E, 1, -7615, 1}, {0x1EA0, 95, 1, 2}, {0x1F08, 8, -8, 1}, + {0x1F18, 6, -8, 1}, {0x1F28, 8, -8, 1}, {0x1F38, 8, -8, 1}, + {0x1F48, 6, -8, 1}, {0x1F59, 7, -8, 2}, {0x1F68, 8, -8, 1}, + {0x1F88, 8, -8, 1}, {0x1F98, 8, -8, 1}, {0x1FA8, 8, -8, 1}, + {0x1FB8, 2, -8, 1}, {0x1FBA, 2, -74, 1}, {0x1FBC, 1, -9, 1}, + {0x1FBE, 1, -7173, 1}, {0x1FC8, 4, -86, 1}, {0x1FCC, 1, -9, 1}, + {0x1FD3, 1, -7235, 1}, {0x1FD8, 2, -8, 1}, {0x1FDA, 2, -100, 1}, + {0x1FE3, 1, -7219, 1}, {0x1FE8, 2, -8, 1}, {0x1FEA, 2, -112, 1}, + {0x1FEC, 1, -7, 1}, {0x1FF8, 2, -128, 1}, {0x1FFA, 2, -126, 1}, + {0x1FFC, 1, -9, 1}, {0x2126, 1, -7517, 1}, {0x212A, 1, -8383, 1}, + {0x212B, 1, -8262, 1}, {0x2132, 1, 28, 1}, {0x2160, 16, 16, 1}, + {0x2183, 1, 1, 1}, {0x24B6, 26, 26, 1}, {0x2C00, 48, 48, 1}, + {0x2C60, 1, 1, 1}, {0x2C62, 1, -10743, 1}, {0x2C63, 1, -3814, 1}, + {0x2C64, 1, -10727, 1}, {0x2C67, 5, 1, 2}, {0x2C6D, 1, -10780, 1}, + {0x2C6E, 1, -10749, 1}, {0x2C6F, 1, -10783, 1}, {0x2C70, 1, -10782, 1}, + {0x2C72, 4, 1, 3}, {0x2C7E, 2, -10815, 1}, {0x2C80, 99, 1, 2}, + {0x2CEB, 3, 1, 2}, {0x2CF2, 1, 1, 1}, {0xA640, 45, 1, 2}, + {0xA680, 27, 1, 2}, {0xA722, 13, 1, 2}, {0xA732, 61, 1, 2}, + {0xA779, 3, 1, 2}, {0xA77D, 1, -35332, 1}, {0xA77E, 9, 1, 2}, + {0xA78B, 1, 1, 1}, {0xA78D, 1, -42280, 1}, {0xA790, 3, 1, 2}, + {0xA796, 19, 1, 2}, {0xA7AA, 1, -42308, 1}, {0xA7AB, 1, -42319, 1}, + {0xA7AC, 1, -42315, 1}, {0xA7AD, 1, -42305, 1}, {0xA7AE, 1, -42308, 1}, + {0xA7B0, 1, -42258, 1}, {0xA7B1, 1, -42282, 1}, {0xA7B2, 1, -42261, 1}, + {0xA7B3, 1, 928, 1}, {0xA7B4, 15, 1, 2}, {0xA7C4, 1, -48, 1}, + {0xA7C5, 1, -42307, 1}, {0xA7C6, 1, -35384, 1}, {0xA7C7, 3, 1, 2}, + {0xA7D0, 7, 1, 6}, {0xA7D8, 30, 1, 29}, {0xAB70, 80, -38864, 1}, + {0xFB05, 1, 1, 1}, {0xFF21, 26, 32, 1}, {0x10400, 40, 40, 1}, + {0x104B0, 36, 40, 1}, {0x10570, 11, 39, 1}, {0x1057C, 15, 39, 1}, + {0x1058C, 7, 39, 1}, {0x10594, 2, 39, 1}, {0x10C80, 51, 64, 1}, + {0x118A0, 32, 32, 1}, {0x16E40, 32, 32, 1}, {0x1E900, 34, 34, 1}}; // static constexpr uint32_t LEGACY_CANONS_SIZE = 175; static constexpr UnicodeTransformRange LEGACY_CANONS[] = { diff --git a/lib/Regex/RegexParser.cpp b/lib/Regex/RegexParser.cpp index 8f091c46cb0..960472454d9 100644 --- a/lib/Regex/RegexParser.cpp +++ b/lib/Regex/RegexParser.cpp @@ -33,10 +33,13 @@ class Parser { struct ClassAtom { CodePoint codePoint = -1; llvh::Optional charClass{}; + llvh::Optional codePointRanges{}; explicit ClassAtom(CodePoint cp) : codePoint(cp) {} ClassAtom(CharacterClass::Type cc, bool invert) : charClass(CharacterClass(cc, invert)) {} + ClassAtom(llvh::ArrayRef ranges, bool invert) + : codePointRanges(CharacterClassCodepointRanges(ranges, invert)) {} }; // The regexp that we are building. This receives the results of our @@ -722,9 +725,13 @@ class Parser { auto addClassAtom = [&bracket](const ClassAtom &atom) { if (atom.charClass) { bracket->addClass(*atom.charClass); + } else if (atom.codePointRanges) { + bracket->addCodePointRanges( + atom.codePointRanges->rangeArray, atom.codePointRanges->inverted_); } else { bracket->addChar(atom.codePoint); } + return true; }; for (;;) { @@ -745,7 +752,9 @@ class Parser { // See if we have a dash. if (!tryConsume('-')) { - addClassAtom(*first); + if (!addClassAtom(*first)) { + return; + } continue; } @@ -759,24 +768,26 @@ class Parser { } // We have a range like [a-z]. - // Ranges can't contain character classes: [\d-z] is invalid. + if (unicode && + (first->codePointRanges || second->codePointRanges || + first->charClass || second->charClass)) { + // Unicode mode does not allow ranges with properties or character + // classes: [\d-z] is invalid, so is [\p{Number}-z] + setError(constants::ErrorType::CharacterRange); + return; + } + if (first->charClass || second->charClass) { - if (unicode) { - // The unicode path is an error. - setError(constants::ErrorType::CharacterRange); - return; - } else { - // The non-unicode path just pretends the range doesn't exist. - // /[\d-A]/ is the same as /[\dA-]/. - // Note we still have to process all three characters. For - // example: - // [\d-a-z] contains the atoms \d, -, a, -, z. - // It does NOT contain the range a-z. - addClassAtom(*first); - addClassAtom(ClassAtom('-')); - addClassAtom(*second); - continue; - } + // The non-unicode path just pretends the range doesn't exist. + // /[\d-A]/ is the same as /[\dA-]/. + // Note we still have to process all three characters. For + // example: + // [\d-a-z] contains the atoms \d, -, a, -, z. + // It does NOT contain the range a-z. + addClassAtom(*first); + addClassAtom(ClassAtom('-')); + addClassAtom(*second); + continue; } // Here we know it's a real range: [a-z] and not [\d-f]. @@ -828,6 +839,35 @@ class Parser { return ClassAtom(CharacterClass::Words, ec == 'W' /* invert */); } +#ifdef HERMES_ENABLE_UNICODE_REGEXP_PROPERTY_ESCAPES + case 'p': + case 'P': { + if (flags_.unicode) { + consume(ec); + std::string propertyName; + std::string propertyValue; + if (!tryConsume('{') || + !tryConsumeUnicodePropertyValueExpression( + propertyName, propertyValue)) { + setError(constants::ErrorType::InvalidPropertyName); + return llvh::None; + } + + auto codePointRanges = + unicodePropertyRanges(propertyName, propertyValue); + if (codePointRanges.empty()) { + setError(constants::ErrorType::InvalidPropertyName); + return llvh::None; + } + return ClassAtom(codePointRanges, ec == 'P' /* invert */); + } else { + // When not in Unicode mode, this is just a regular `p` or `P` + // (unnecessary) escape. + return ClassAtom(consumeCharacterEscape()); + } + } +#endif + case 'b': { // "Return the CharSet containing the single character // U+0008 (BACKSPACE)" @@ -1114,6 +1154,51 @@ class Parser { return 0; } + bool tryConsumeUnicodeProperty( + std::string &propertyName, + std::string &propertyValue) { + if (current_ == end_) { + return false; + } + + while (auto ch = consumeCharIf(isUnicodePropertyName)) { + propertyName.push_back(*ch); + } + if (tryConsume('=')) { + while (auto ch = consumeCharIf(isUnicodePropertyValue)) { + propertyValue.push_back(*ch); + } + return !propertyValue.empty(); + } + + return true; + } + + /// ES2018 22.2.1 UnicodePropertyValueExpression + /// Here the `\p{` or `\P{` has been consumed. + /// \return true if the expression was successfully parsed, \p propertyName + /// and \p propertyValue will contain the parsed values. + bool tryConsumeUnicodePropertyValueExpression( + std::string &propertyName, + std::string &propertyValue) { + assert( + flags_.unicode && + "Non-unicode regexps do not support property escapes"); + + // Unicode path. + // Note that all \p and \P in Unicode regexps must result in a valid escape. + if (!tryConsumeUnicodeProperty(propertyName, propertyValue)) { + setError(constants::ErrorType::InvalidPropertyName); + return false; + } + + if (!tryConsume('}')) { + setError(constants::ErrorType::InvalidPropertyName); + return false; + } + return true; + } + /// 21.2.2.9 AtomEscape. /// Here the backslash has been consumed. void consumeAtomEscape() { @@ -1142,6 +1227,37 @@ class Parser { re_->pushCharClass({CharacterClass::Words, c == 'W' /* invert */}); break; +#ifdef HERMES_ENABLE_UNICODE_REGEXP_PROPERTY_ESCAPES + case 'p': + case 'P': { + if (flags_.unicode) { + consume(c); + std::string propertyName; + std::string propertyValue; + if (!tryConsume('{') || + !tryConsumeUnicodePropertyValueExpression( + propertyName, propertyValue)) { + setError(constants::ErrorType::InvalidPropertyName); + return; + } + auto bracket = re_->startBracketList(c == 'P' /* invert */); + auto codePointRanges = + unicodePropertyRanges(propertyName, propertyValue); + if (codePointRanges.empty()) { + setError(constants::ErrorType::InvalidPropertyName); + return; + } + bracket->addCodePointRanges(codePointRanges); + break; + } else { + // When not in Unicode mode, this is just a regular `p` or `P` + // (unnecessary) escape. + re_->pushChar(consumeCharacterEscape()); + } + break; + } +#endif + // Note backreferences may NOT begin with 0. case '1': case '2': diff --git a/test/hermes/regexp_unicode_properties.js b/test/hermes/regexp_unicode_properties.js new file mode 100644 index 00000000000..4a67b6661af --- /dev/null +++ b/test/hermes/regexp_unicode_properties.js @@ -0,0 +1,174 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +// RUN: LC_ALL=en_US.UTF-8 %hermes -non-strict -O -target=HBC %s | %FileCheck --match-full-lines %s +// REQUIRES: regexp_unicode_properties + +print('RegExp Unicode Properties'); +// CHECK-LABEL: RegExp Unicode Properties + +function hexCodePointAt(s, idx) { + return s.codePointAt(idx).toString(16).toUpperCase(); +} + +try { new RegExp("\\p{PropertyThatDoesNotExist}", "u"); } catch (e) { print(e.message); } +// CHECK-NEXT: Invalid RegExp: Invalid property name +try { new RegExp("[\\p{PropertyThatDoesNotExist}]", "u"); } catch (e) { print(e.message); } +// CHECK-NEXT: Invalid RegExp: Invalid property name +try { new RegExp("\\p{Script=}", "u"); } catch (e) { print(e.message); } +// CHECK-NEXT: Invalid RegExp: Invalid property name +try { new RegExp("[\\p{Script=}]", "u"); } catch (e) { print(e.message); } +// CHECK-NEXT: Invalid RegExp: Invalid property name + +print(/\p{Lu}\p{Ll}/ui.exec("aB")); +// CHECK-NEXT: aB + +print(/\p{Lowercase_Letter}/u.exec("a")); +// CHECK-NEXT: a + +try { new RegExp("\\p{lowercase_letter}", "u"); } catch (e) { print(e.message); } +// CHECK-NEXT: Invalid RegExp: Invalid property name + +print(/\p{Decimal_Number}/u.exec("1")); +// CHECK-NEXT: 1 +print(/[\p{Decimal_Number}]+/u.exec("123")); +// CHECK-NEXT: 123 + +// Not a Unicode regex, so `\p` is just a literal. +print(/\p{Nd}/.exec("p{Nd}")); +// CHECK-NEXT: p{Nd} +print(/\P{Nd}/.exec("P{Nd}")); +// CHECK-NEXT: P{Nd} + +// Compound categories +print(/\p{N}/u.exec("1")); +// CHECK-NEXT: 1 +print(/\p{N}/u.exec("a")); +// CHECK-NEXT: null +print(/\p{L}/u.exec("a")); +// CHECK-NEXT: a +print(/\p{L}/u.exec("1")); +// CHECK-NEXT: null + +// U+FFFF is unassigned (as of Unicode 15.1.0). +print(hexCodePointAt(/\p{Unassigned}/u.exec("\u{FFFF}")[0])); +// CHECK-NEXT: FFFF +print(/\p{Assigned}/u.exec("\u{FFFF}")); +// CHECK-NEXT: null +// Script=Zzzz behaves like Unassigned / Cn. +print(hexCodePointAt(/\p{Script=Zzzz}/u.exec("\u{FFFF}")[0])); +// CHECK-NEXT: FFFF + +// U+FFFD is the replacement character, which is assigned. +print(hexCodePointAt(/\P{Unassigned}/u.exec("\u{FFFD}")[0])); +// CHECK-NEXT: FFFD +print(/\P{Assigned}/u.exec("\u{FFFD}")); +// CHECK-NEXT: null +// Script=Zzzz behaves like Unassigned / Cn. +print(/\p{Script=Zzzz}/u.exec("\u{FFFD}")); +// CHECK-NEXT: null + +print(/\p{Script=Latin}+/u.exec("Ave")); +// CHECK-NEXT: Ave + +print(/\p{Script_Extensions=Latin}+/u.exec("Ave")); +// CHECK-NEXT: Ave + +// U+202F only exists in script extensions for Latin. +print(/\p{Script=Latin}/u.exec("\u{202F}")); +// CHECK-NEXT: null +print(hexCodePointAt(/\p{Script_Extensions=Latin}/u.exec("\u{202F}")[0])); +// CHECK-NEXT: 202F + +// U+30A0 only exists in script extensions for Hira / Kana. +print(/\p{Script=Hira}/u.exec("\u{30A0}")); +// CHECK-NEXT: null +print(/\p{Script=Kana}/u.exec("\u{30A0}")); +// CHECK-NEXT: null +print(hexCodePointAt(/\p{Script_Extensions=Hira}/u.exec("\u{30A0}")[0])); +// CHECK-NEXT: 30A0 +print(hexCodePointAt(/\p{Script_Extensions=Kana}/u.exec("\u{30A0}")[0])); +// CHECK-NEXT: 30A0 + +// CJK ideographs are not in the Latin script. +print(/\p{Script=Latin}+/u.exec("\u{4f60}\u{597d}")); +// CHECK-NEXT: null +print(/\p{Script_Extensions=Latin}+/u.exec("\u{4f60}\u{597d}")); +// CHECK-NEXT: null + +try { new RegExp("\\P{}", "u"); } catch (e) { print(e.message); } +// CHECK-NEXT: Invalid RegExp: Invalid property name +try { new RegExp("[\\P{}]", "u"); } catch (e) { print(e.message); } +// CHECK-NEXT: Invalid RegExp: Invalid property name + +try { new RegExp("\\p{}", "u"); } catch (e) { print(e.message); } +// CHECK-NEXT: Invalid RegExp: Invalid property name +try { new RegExp("[\\p{}]", "u"); } catch (e) { print(e.message); } +// CHECK-NEXT: Invalid RegExp: Invalid property name + +try { new RegExp("\\P{Ll", "u"); } catch (e) { print(e.message); } +// CHECK-NEXT: Invalid RegExp: Invalid property name +try { new RegExp("[\\P{Ll]", "u"); } catch (e) { print(e.message); } +// CHECK-NEXT: Invalid RegExp: Invalid property name + +try { new RegExp("\\P}", "u"); } catch (e) { print(e.message); } +// CHECK-NEXT: Invalid RegExp: Invalid property name +try { new RegExp("[\\P}]", "u"); } catch (e) { print(e.message); } +// CHECK-NEXT: Invalid RegExp: Invalid property name + +try { new RegExp("\\p}", "u"); } catch (e) { print(e.message); } +// CHECK-NEXT: Invalid RegExp: Invalid property name +try { new RegExp("[\\p}]", "u"); } catch (e) { print(e.message); } +// CHECK-NEXT: Invalid RegExp: Invalid property name + +try { new RegExp("\\p", "u"); } catch (e) { print(e.message); } +// CHECK-NEXT: Invalid RegExp: Invalid property name +try { new RegExp("[\\p]", "u"); } catch (e) { print(e.message); } +// CHECK-NEXT: Invalid RegExp: Invalid property name + +try { new RegExp("\\P", "u"); } catch (e) { print(e.message); } +// CHECK-NEXT: Invalid RegExp: Invalid property name +try { new RegExp("[\\P]", "u"); } catch (e) { print(e.message); } +// CHECK-NEXT: Invalid RegExp: Invalid property name + +try { new RegExp("{", "u"); } catch (e) { print(e.message); } +// CHECK-NEXT: Invalid RegExp: Invalid quantifier bracket + +try { new RegExp("}", "u"); } catch (e) { print(e.message); } +// CHECK-NEXT: Invalid RegExp: Invalid quantifier bracket + +print((new RegExp("{", "")).source); +// CHECK-NEXT: { + +print((new RegExp("}", "")).source); +// CHECK-NEXT: } + +// Here the match has length 2, because this emoji must be encoded via +// a surrogate pair. +print(/\p{Emoji}/u.exec("\u{1F600}")[0].length); +// CHECK-NEXT: 2 + +// Hex or non-hex codepoints, i.e. all codepoints. +print(/[\p{Hex}\P{Hex}]/u.exec('\u{1D306}')); +// CHECK-NEXT: 𝌆 + +// Not uppercase letters. +print(/[\P{Lu}]+/u.exec('abc')); +// CHECK-NEXT: abc +print(/[\P{Lu}]+/u.exec('ABC')); +// CHECK-NEXT: null + +// Not not uppercase letters. +print(/[^\P{Lu}]+/u.exec('ABC')); +// CHECK-NEXT: ABC +print(/[^\P{Lu}]+/u.exec('abc')); +// CHECK-NEXT: null + +print(/\p{Lu}+/ui.exec("aBc")); +// CHECK-NEXT: aBc +print(/[\p{Lu}]+/ui.exec("aBc")); +// CHECK-NEXT: aBc diff --git a/test/lit.cfg b/test/lit.cfg index 0b15dae0c47..8d3a70be9a2 100644 --- a/test/lit.cfg +++ b/test/lit.cfg @@ -62,6 +62,8 @@ if isTrue(lit_config.params.get("check_native_stack")): config.available_features.add("check_native_stack") if isTrue(lit_config.params.get("intl_enabled")): config.available_features.add("intl") +if isTrue(lit_config.params.get("regexp_unicode_properties_enabled")): + config.available_features.add("regexp_unicode_properties") if isTrue(lit_config.params.get("node_hermes_enabled_flag")): config.available_features.add("node-hermes") diff --git a/utils/genUnicodeTable.py b/utils/genUnicodeTable.py index 7b416128303..db9e49cc4c8 100755 --- a/utils/genUnicodeTable.py +++ b/utils/genUnicodeTable.py @@ -6,19 +6,94 @@ # -*- coding: utf-8 -*- -# Generates list of unicode ranges belonging to a set of categories +# Generates list of unicode ranges belonging to a set of categories, downloading +# Unicode data files as needed. +# # Usage: genUnicodeTable.py +# +# To generate a new UnicodeData.inc file, the output of this script should be +# passed through clang-format, and then redirected: +# +# hermes/utils/genUnicodeTable.py | clang-format > hermes/lib/Platform/Unicode/UnicodeData.inc import datetime import hashlib import sys import urllib.request +from collections import defaultdict, OrderedDict +from functools import reduce +from itertools import islice from string import Template +from textwrap import indent +from typing import Iterable, Optional + + +class UnicodeDataFiles: + # VERSION = "UCD/latest" # The bleeding edge version of Unicode. + VERSION = "15.1.0" + URLS = { + "UnicodeData.txt": f"http://unicode.org/Public/{VERSION}/ucd/UnicodeData.txt", + "SpecialCasing.txt": f"http://unicode.org/Public/{VERSION}/ucd/SpecialCasing.txt", + "CaseFolding.txt": f"http://unicode.org/Public/{VERSION}/ucd/CaseFolding.txt", + "DerivedGeneralCategory.txt": f"http://unicode.org/Public/{VERSION}/ucd/extracted/DerivedGeneralCategory.txt", + "Scripts.txt": f"http://unicode.org/Public/{VERSION}/ucd/Scripts.txt", + "ScriptExtensions.txt": f"http://unicode.org/Public/{VERSION}/ucd/ScriptExtensions.txt", + "DerivedCoreProperties.txt": f"http://unicode.org/Public/{VERSION}/ucd/DerivedCoreProperties.txt", + "DerivedNormalizationProps.txt": f"http://unicode.org/Public/{VERSION}/ucd/DerivedNormalizationProps.txt", + "DerivedBinaryProperties.txt": f"http://unicode.org/Public/{VERSION}/ucd/extracted/DerivedBinaryProperties.txt", + "PropertyValueAliases.txt": f"http://unicode.org/Public/{VERSION}/ucd/PropertyValueAliases.txt", + "PropertyAliases.txt": f"http://unicode.org/Public/{VERSION}/ucd/PropertyAliases.txt", + "PropList.txt": f"http://unicode.org/Public/{VERSION}/ucd/PropList.txt", + "emoji-data.txt": f"http://unicode.org/Public/{VERSION}/ucd/emoji/emoji-data.txt", + } + # Set to True to keep the downloaded files in the local directory. + KEEP_LOCAL_CACHE = False + + __cache = {} + + @classmethod + def get(cls, filename): + """Retrieve a Unicode data file, fetching it if necessary.""" + if filename not in cls.__cache: + data = cls.__local_or_fetch(cls.URLS[filename], filename) + cls.__cache[filename] = { + "sha1": hashlib.sha1(data).hexdigest(), + "lines": cls.__data_to_lines(data), + } + return cls.__cache[filename] + + @classmethod + def __local_or_fetch(cls, url, filename) -> bytes: + """Read a local file's contents or fetch them from a URL.""" + try: + with open(filename, "rb") as f: + print(f"Found {filename} locally!", file=sys.stderr) + return f.read() + except IOError: + print(f"Fetching {url}...", file=sys.stderr) + with urllib.request.urlopen(url) as f: + data = f.read() + if cls.KEEP_LOCAL_CACHE: + print(f"Caching {filename} locally...", file=sys.stderr) + with open(filename, "wb") as f: + f.write(data) + return data + @classmethod + def __data_to_lines(cls, data) -> Iterable[str]: + return [ + line + for line in data.decode("utf-8").splitlines() + if line and not line.startswith("#") + ] -UNICODE_DATA_URL = "ftp://ftp.unicode.org/Public/UNIDATA/UnicodeData.txt" -UNICODE_SPECIAL_CASING_URL = "ftp://ftp.unicode.org/Public/UNIDATA/SpecialCasing.txt" -UNICODE_CASE_FOLDING_URL = "ftp://ftp.unicode.org/Public/UNIDATA/CaseFolding.txt" + @classmethod + def get_lines(cls, filename) -> Iterable[str]: + return cls.get(filename)["lines"] + + @classmethod + def get_sha1(cls, filename) -> str: + return cls.get(filename)["sha1"] # Unicode data field indexes. See UnicodeData.txt. @@ -38,15 +113,14 @@ def print_template(s, **kwargs): print("") -def print_header(unicodedata_sha1, specialcasing_sha1, casefolding_sha1): +def print_header(): print_template( """ // // File generated by genUnicodeTable.py // using Unicode data files downloaded on ${today} -// UnicodeData.txt SHA1: ${unicodedata_sha1} -// SpecialCasing.txt SHA1: ${specialcasing_sha1} -// CaseFolding.txt SHA1: ${casefolding_sha1} +// for Unicode version ${version} +${sha1s} // *** DO NOT EDIT BY HAND *** /// An inclusive range of Unicode characters. @@ -67,11 +141,39 @@ def print_header(unicodedata_sha1, specialcasing_sha1, casefolding_sha1): /// The modulo amount. unsigned modulo:8; }; + +/// A reference to a string pool entry. +struct StringPoolRef { + uint16_t offset; + uint16_t size; +}; + +/// A reference to a UnicodeRange pool entry. +struct UnicodeRangePoolRef { + uint16_t offset; + uint16_t size; +}; + +/// A reference to a string pool name that maps to a string pool canonical name. +struct NameMapEntry { + StringPoolRef name; + StringPoolRef canonical; +}; + +/// A reference to a string pool name that maps to a range array pool offset +/// and size. +struct RangeMapEntry { + StringPoolRef name; + uint16_t rangeArrayPoolOffset; + uint16_t rangeArraySize; +}; """, today=str(datetime.date.today()), - unicodedata_sha1=unicodedata_sha1, - specialcasing_sha1=specialcasing_sha1, - casefolding_sha1=casefolding_sha1, + sha1s="\n".join( + f"// {filename:<30} SHA1: {UnicodeDataFiles.get_sha1(filename)}" + for filename in UnicodeDataFiles.URLS.keys() + ), + version=UnicodeDataFiles.VERSION, ) @@ -132,6 +234,887 @@ def print_categories(unicode_data_lines): run_interval(unicode_data_lines, cat.split()) +def get_assigned_codepoints(unicode_data_lines): + """Gather intervals for all assigned Unicode codepoints.""" + cp_begin = 0 + cp_end = None + + def empty_buf(): + if cp_begin is not None: + intervals.append((cp_begin, cp_begin if cp_end is None else cp_end)) + + intervals = [] + lines = iter(unicode_data_lines) + last_cp = 0 + + while lines: + line = next(lines, None) + if line is None: + break + + fields = split_fields(line) + cp = int(fields[0], 16) + # Handle UnicodeData.txt legacy codepoint ranges. + # + if fields[1].startswith("<") and fields[1].endswith("First>"): + empty_buf() + rng_begin = cp + rng_end = int(split_fields(next(lines))[0], 16) + intervals.append((rng_begin, rng_end)) + cp_begin = cp_end = None + else: + if cp - last_cp == 1: + cp_end = cp + else: + if cp_begin is not None: + empty_buf() + cp_end = None + cp_begin = cp + + last_cp = cp + + return intervals + + +def split_fields(line) -> list[str]: + """ + Split a semicolon-separated line into fields, ignoring comments. + """ + return [f.strip() for f in line.split("#")[0].split(";")] + + +# A Unicode codepoint range, represented as a tuple of (start, end). +range_tuple = tuple[int, int] + + +def parse_range(range_str) -> range_tuple: + """ + Parse the alternative codepoint range format, e.g. "1..10", or "1" into a + tuple of `(range_start, range_end)`. + """ + start, end = range_str.split("..") if ".." in range_str else (range_str, range_str) + return (int(start, 16), int(end, 16)) + + +def parse_codepoint_ranges(lines: Iterable[str], pred) -> dict[str, list[range_tuple]]: + """ + Create a mapping of canonical property names to lists of Unicode codepoint + ranges (start, end) for those properties, from the lines of a Unicode + Database data file. + + Codepoint ranges will be merged if they are adjacent. + + Example input: + + 0000..001F ; Cc # Cc [32] - + 0020 ; Zs # Zs [1] SPACE + """ + ranges = defaultdict(list) + last_name = None + begin = 0 + last_cp = 0 + openi = False + for line in lines: + # Ignore empty lines and comment lines. + if not line or line.startswith("#"): + continue + + fields = split_fields(line) + codepoint_range = fields[0] + canonical_name = fields[1] + if not pred(canonical_name): + continue + + if last_name is None: + last_name = canonical_name + + cp_start, cp_end = parse_range(codepoint_range) + if last_name != canonical_name: + # We have crossed over a property name boundary. + if openi: + ranges[last_name].append((begin, last_cp)) + openi = True + last_name = canonical_name + begin = cp_start + else: + if openi: + if cp_start != last_cp + 1: + # We have crossed over an interval boundary. + ranges[last_name].append((begin, last_cp)) + begin = cp_start + else: + begin = cp_start + openi = True + + last_cp = cp_end + + if openi: + ranges[last_name].append((begin, last_cp)) + + return ranges + + +def parse_property_aliases( + lines: Iterable[str], get_canonical_name +) -> dict[str, list[str]]: + """ + Create a mapping of canonical property names to lists of aliases, from the + lines of a Unicode Database data file. + + Example input: + + gc ; Cc ; Control ; cntrl + gc ; Cf ; Format + + Example output: + + { + "Cc": ["Control", "cntrl"], + "Cf": ["Format"], + } + """ + property_aliases = {} + for line in lines: + fields = split_fields(line) + canonical_name = get_canonical_name(fields) + if canonical_name is not None: + property_aliases[canonical_name] = fields[1:] + return property_aliases + + +# A range pool entry, represented as a tuple of `(offset, size)`. +range_array_pool_entry = tuple[int, int] + + +class UnicodePropertyCategory: + """ + A pool of property names and aliases, and codepoint range arrays, that exist + with `UnicodeProperties` as the parent, and represent a specific category of + Unicode properties, such as "General_Category" or "Script". + """ + + def __init__(self, parent=None): + self.parent: UnicodeProperties = parent + self._aliases: dict[str, list[str]] = {} + self._range_array_pool: dict[str, range_array_pool_entry] = OrderedDict() + + def all_names(self) -> list[tuple[str, str]]: + """ + Sorted list of `(alias, canonical_name)` tuples for all know property + names in this pool. + """ + # This is sorted so the C++ code can use a binary search. + return sorted( + { + (alias, name) + for name, aliases in self._aliases.items() + for alias in aliases + } + ) + + def range_array_pool(self): + """ + Sorted list of `(name, (offset, size))` tuples for the range array pool + data. + """ + # This is sorted so the C++ code can use a binary search. + return sorted(self._range_array_pool.items()) + + def add_aliases(self, name, aliases): + """ + See `UnicodeProperties.add_aliases`. + """ + if name in self._aliases: + raise ValueError(f"Duplicate name {name}") + elif name not in aliases: + raise ValueError(f"Canonical name {name} not in aliases") + self._aliases[name] = aliases + + if self.parent is not None: + self.parent.add_aliases(name, aliases) + + def mark_range_pool( + self, category: str, name: str, ranges=None, offset=None, size=None + ): + """ + See `UnicodeProperties.mark_range_pool`. + """ + if self.parent is not None: + self.parent.mark_range_pool(category, name, ranges, offset, size) + + def mark_range_array_pool(self, name: str, canonical_names: list[str]): + """ + For a compound property, mark the index and size of the compound + property's ranges. + + For example: "C" is a compound property that refers to the ranges of the + "Cc", "Cf", "Cn", "Co", and "Cs" properties. + + If all the canonical names are already in the range array pool, then + this is an overlapping compound property, and the marked entry instead + refers back to the existing pool entry, instead of adding a new one. + """ + if name in self._range_array_pool: + raise ValueError(f"Duplicate name {name}") + + size = len(canonical_names) + + if all( + canonical_name in self._range_array_pool + for canonical_name in canonical_names + ): + # This is an overlapping compound property, refer back to the first + # existing pool entry, and do not increment the tracking index. + offset = self._range_array_pool[canonical_names[0]][0] + self._range_array_pool[name] = ( + offset, + size, + ) + return offset + else: + offset = self.parent._range_array_pool_index + self._range_array_pool[name] = (offset, size) + for canonical_name in canonical_names: + self._range_array_pool[canonical_name] = ( + self.parent._range_array_pool_index, + 1, + ) + self.parent._range_array_pool_index += 1 + return offset + + def mark_range_array_pool_manual(self, name: str, offset: int, size: int): + """ + Like `mark_range_array_pool` but use manually provided offset and size. + """ + if name in self._range_array_pool: + raise ValueError(f"Duplicate name {name}") + + self._range_array_pool[name] = (offset, size) + self.parent._range_array_pool_index += 1 + + def get_range(self, category: str, name: str) -> Optional[range_array_pool_entry]: + return self.parent._range_pool.get((category, name)) + + +# Tuple of `(offset, (range_pool_index, ranges, size))` for a range pool entry. +range_pool_entry = tuple[int, tuple[int, Optional[list[range_tuple]], Optional[int]]] + + +class UnicodeProperties: + """ + The parent pool for all Unicode property categories, which share common + string, range, and range array pools. The point of the pools is to + generate code that is able to efficiently reference the large amount of + Unicode property data, by using indexes into shared pools. + + The string pool is a shared pool of all property names and aliases, which + contains all canonical names and aliases. + + The range pool is a shared pool of all codepoint ranges, which is referenced + by a canonical name. + + The range array pool is a shared pool of codepoint range arrays, which is + referenced by a conical name, and refers to one or more ranges in the range + pool. + """ + + INCLUDE_COMMENTS = True + + def __init__(self): + self.general_category_pool = UnicodePropertyCategory(parent=self) + self.binary_property_pool = UnicodePropertyCategory(parent=self) + self.script_property_pool = UnicodePropertyCategory(parent=self) + self.script_extensions_property_pool = UnicodePropertyCategory(parent=self) + + # All seen names, that comprise the shared string pool. + self._names = set() + + # Mapping of `(category, name)` to `(offset, ranges)` for the range + # pool, which is shared across the other property pools. + # + # The offset is used by the individual range array pools, to refer back + # to the shared range pool, and the individual ranges are used to build + # the shared range pool data. + self._range_pool: dict[str, range_pool_entry] = OrderedDict() + + # Track the offset into the range pool, every time a new range is marked + # the index is incremented by the size of the new range. + self._range_pool_index = 0 + + # Track the offset into the shared range array pool, every time a new + # range array is added to one of the property pools, this is incremented + # by 1. + self._range_array_pool_index = 0 + self._metrics = defaultdict(lambda: 0) + + def log_metrics(self): + print( + f""" +string_offset_bits: {self._metrics['string_offset'].bit_length()} +string_size_bits: {self._metrics['string_size'].bit_length()} +range_pool_offset_bits: {self._metrics['range_pool_offset'].bit_length()} +range_pool_size_bits: {self._metrics['range_pool_size'].bit_length()} +range_array_pool_offset_bits: {self._metrics['range_array_pool_offset'].bit_length()} +range_array_pool_size_bits: {self._metrics['range_array_pool_size'].bit_length()} + """, + file=sys.stderr, + ) + + def add_aliases(self, name: str, aliases: list[str]): + """ + Add a name and aliases to the shared string pool. + """ + self._names.add(name) + self._names.update(aliases) + + def mark_range_pool( + self, + category: str, + name: str, + ranges: list[int] = None, + offset: int = None, + size: int = None, + ): + """ + Mark a range pool entry, with optional codepoint ranges. + + The category is necessary to disambiguate in cases where the name itself + may not be unique across properties, such as `Scripts` and + `Script_Extensions` where they share names. + """ + key = (category, name) + if key in self._range_pool: + raise ValueError(f"Duplicate key {key}") + + pool_offset = self._range_pool_index if offset is None else offset + self._range_pool[key] = (pool_offset, ranges, size) + if ranges: + self._range_pool_index += len(ranges) + + def gather_general_category_properties(self): + """ + Gather the aliases and codepoint ranges for General_Category properties, + into the shared string and range pools. + + Example aliases input: + + gc ; Cc ; Control ; cntrl + gc ; Cf ; Format + + Example codepoint input: + + 00D8..00DE ; Lu # [7] LATIN CAPITAL LETTER O WITH STROKE..LATIN CAPITAL LETTER THORN + 0100 ; Lu # LATIN CAPITAL LETTER A WITH MACRON + """ + gc_property_aliases = parse_property_aliases( + UnicodeDataFiles.get_lines("PropertyValueAliases.txt"), + get_canonical_name=lambda fields: fields[1] if fields[0] == "gc" else None, + ) + gc_property_ranges = parse_codepoint_ranges( + UnicodeDataFiles.get_lines("DerivedGeneralCategory.txt"), + lambda canonical_name: canonical_name in gc_property_aliases.keys(), + ) + + pool = self.general_category_pool + + # Update the string pool with the General_Category property names and + # aliases. + for name, aliases in gc_property_aliases.items(): + pool.add_aliases(name, aliases) + + # These General_Category properties are never directly associated with + # codepoints, but exist conceptually as unions of other properties. + # + # NOTE: It's important that any ranges shared by compound groups overlap, + # so that the offset+size can be contiguous for each of them. + # + # + COMPOUND_GC_PROPERTIES = { + "C": ["Cc", "Cf", "Cn", "Co", "Cs"], + "L": ["Ll", "Lt", "Lu", "Lm", "Lo"], + "LC": ["Ll", "Lt", "Lu"], + "M": ["Mc", "Me", "Mn"], + "N": ["Nd", "Nl", "No"], + "P": ["Pc", "Pd", "Pe", "Pf", "Pi", "Po", "Ps"], + "S": ["Sc", "Sk", "Sm", "So"], + "Z": ["Zl", "Zp", "Zs"], + } + + cat = "General_Category" + for compound_name, canonical_names in COMPOUND_GC_PROPERTIES.items(): + pool.mark_range_pool(cat, compound_name) + + for canonical_name in canonical_names: + ranges = gc_property_ranges[canonical_name] + if pool.get_range(cat, canonical_name) is None: + pool.mark_range_pool(cat, canonical_name, ranges) + + pool.mark_range_array_pool(compound_name, canonical_names) + + # Add any extra ranges that are not part of the compound groups. + for canonical_name, ranges in gc_property_ranges.items(): + if pool.get_range(cat, canonical_name) is None: + pool.mark_range_pool(cat, canonical_name, ranges) + pool.mark_range_array_pool(canonical_name, [canonical_name]) + + def gather_binary_properties(self): + """ + Gather allowed binary (in the true/false sense) property aliases and + codepoint ranges, explicitly given by ECMA262, into the shared string + and range pools. + + + + Example property aliases input: + + # Alias ; Canonical name ; Additional alias + + AHex ; ASCII_Hex_Digit + Alpha ; Alphabetic + WSpace ; White_Space ; space + """ + BINARY_PROPERTY_NAMES = [ + "ASCII", + "ASCII_Hex_Digit", + "Alphabetic", + "Bidi_Control", + "Bidi_Mirrored", + "Case_Ignorable", + "Cased", + "Changes_When_Casefolded", + "Changes_When_Casemapped", + "Changes_When_Lowercased", + "Changes_When_NFKC_Casefolded", + "Changes_When_Titlecased", + "Changes_When_Uppercased", + "Dash", + "Default_Ignorable_Code_Point", + "Deprecated", + "Diacritic", + "Emoji", + "Emoji_Component", + "Emoji_Modifier", + "Emoji_Modifier_Base", + "Emoji_Presentation", + "Extended_Pictographic", + "Extender", + "Grapheme_Base", + "Grapheme_Extend", + "Hex_Digit", + "IDS_Binary_Operator", + "IDS_Trinary_Operator", + "ID_Continue", + "ID_Start", + "Ideographic", + "Join_Control", + "Logical_Order_Exception", + "Lowercase", + "Math", + "Noncharacter_Code_Point", + "Pattern_Syntax", + "Pattern_White_Space", + "Quotation_Mark", + "Radical", + "Regional_Indicator", + "Sentence_Terminal", + "Soft_Dotted", + "Terminal_Punctuation", + "Unified_Ideograph", + "Uppercase", + "Variation_Selector", + "White_Space", + "XID_Continue", + "XID_Start", + ] + + binary_property_aliases = { + canonical_name: [] for canonical_name in BINARY_PROPERTY_NAMES + } + + for line in UnicodeDataFiles.get_lines("PropertyAliases.txt"): + fields = split_fields(line) + canonical_name = fields[1] + if canonical_name in binary_property_aliases: + assert ( + len(binary_property_aliases[canonical_name]) == 0 + ), "Duplicate canonical name" + binary_property_aliases[canonical_name] = list(set(fields)) + + is_known_name_or_alias = ( + lambda canonical_name: canonical_name in binary_property_aliases.keys() + ) + binary_property_ranges = { + # Used for binary properties such as `ASCII_Hex_Digit`. + **parse_codepoint_ranges( + UnicodeDataFiles.get_lines("PropList.txt"), is_known_name_or_alias + ), + # Used for general category properties such as `Cased_Letter`. + **parse_codepoint_ranges( + UnicodeDataFiles.get_lines("DerivedCoreProperties.txt"), + is_known_name_or_alias, + ), + # Used for case folding properties such as `Changes_When_Casefolded`. + **parse_codepoint_ranges( + UnicodeDataFiles.get_lines("DerivedNormalizationProps.txt"), + is_known_name_or_alias, + ), + # Used for binary properties such as `Bidi_Mirrored`. + **parse_codepoint_ranges( + UnicodeDataFiles.get_lines("DerivedBinaryProperties.txt"), + is_known_name_or_alias, + ), + # Used for emoji-related binary properties such as + # `Emoji_Presentation`. + **parse_codepoint_ranges( + UnicodeDataFiles.get_lines("emoji-data.txt"), is_known_name_or_alias + ), + } + + # Manually add cases that are not part of the enumerations. + # + binary_property_aliases["ASCII"] = ["ASCII"] + binary_property_ranges["ASCII"] = [(0x0, 0x7F)] + + binary_property_aliases["Any"] = ["Any"] + binary_property_ranges["Any"] = [(0x0, 0x10FFFF)] + + binary_property_aliases["Assigned"] = ["Assigned"] + binary_property_ranges["Assigned"] = get_assigned_codepoints( + UnicodeDataFiles.get_lines("UnicodeData.txt") + ) + + pool = self.binary_property_pool + + # Update the string pool with the binary property names and aliases + for name, aliases in binary_property_aliases.items(): + pool.add_aliases(name, aliases) + + cat = "Binary" + for canonical_name, ranges in binary_property_ranges.items(): + if pool.get_range(cat, canonical_name) is None: + pool.mark_range_pool(cat, canonical_name, ranges) + pool.mark_range_array_pool(canonical_name, [canonical_name]) + + def gather_script_properties(self): + """ + Gather script and script extensions property aliases and codepoint + ranges, as they exist in the Unicode Database, into the string and range + pools. + + Script and script extensions are interleaved so that the ranges are + contiguous. + + NOTE: Script extensions don't have their own names, instead they re-use + the Script property names. However, the ranges are referenced by the + alias, not the canonical name, which differs from how scripts are + handled. + + Example property values aliases input: + + # Category ; Alias ; Canonical name + + sc ; Arab ; Arabic + sc ; Latn ; Latin + + Example scripts input: + + 0041..005A ; Latin # L& [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z + 0600..0604 ; Arabic # Cf [5] ARABIC NUMBER SIGN..ARABIC SIGN SAMVAT + """ + script_property_aliases = parse_property_aliases( + UnicodeDataFiles.get_lines("PropertyValueAliases.txt"), + get_canonical_name=lambda fields: fields[2] if fields[0] == "sc" else None, + ) + + # This property is fictional, and is never directly referenced in the + # codepoint data. Instead, Katakana (Kana) and Hiragana (Hira) are used + # separately. + # + # + del script_property_aliases["Katakana_Or_Hiragana"] + + script_property_ranges = parse_codepoint_ranges( + UnicodeDataFiles.get_lines("Scripts.txt"), + lambda canonical_name: canonical_name in script_property_aliases, + ) + + script_property_aliases_by_alias = parse_property_aliases( + UnicodeDataFiles.get_lines("PropertyValueAliases.txt"), + get_canonical_name=lambda fields: fields[1] if fields[0] == "sc" else None, + ) + raw_property_ranges = parse_codepoint_ranges( + UnicodeDataFiles.get_lines("ScriptExtensions.txt"), lambda _: True + ) + # Because script extension codepoints are referenced by the script + # property alias, not the canonical name, the ranges need to be manually + # remapped. + script_extensions_property_ranges = defaultdict(list) + for key, ranges in raw_property_ranges.items(): + for short_key in key.split(): + # Script extension codepoints use the script property alias, not + # the canonical name. + canonical_name = script_property_aliases_by_alias[short_key][1] + script_extensions_property_ranges[canonical_name].extend(ranges) + + pool = self.script_property_pool + ext_pool = self.script_extensions_property_pool + # Update the string pool with the script property names and aliases + for name, aliases in script_property_aliases.items(): + pool.add_aliases(name, aliases) + + cat = "Script" + ext_cat = "Script_Extensions" + for canonical_name, ranges in script_property_ranges.items(): + if pool.get_range(cat, canonical_name) is None: + pool.mark_range_pool(cat, canonical_name, ranges) + script_range_array_offset = pool.mark_range_array_pool( + canonical_name, [canonical_name] + ) + + # Script extensions are a superset of the script property ranges, + # they are added immediately after the corresponding script so that + # the ranges are contiguous. + ext_ranges = script_extensions_property_ranges[canonical_name] + if ext_ranges and ext_pool.get_range(ext_cat, canonical_name) is None: + script_range_offset = pool.get_range(cat, canonical_name)[0] + ext_pool.mark_range_pool( + ext_cat, + canonical_name, + ext_ranges, + # Start the range pool offset at the same offset as the + # corresponding script, and extend the size to include both + # the script and script extension ranges. + offset=script_range_offset, + size=len(ranges) + len(ext_ranges), + ) + # Manually mark the range array pool entry for the script + # extension. This is necessary because the script extension + # needs to refer to offset for the script, and cover a range of + # 2, but still only increment the range array pool index by 1. + ext_pool.mark_range_array_pool_manual( + canonical_name, + script_range_array_offset, + # This is size 2 because it is the script range (1) script + # and the extension range (1). + 2, + ) + + # Manually map the "Zzzz" / "Unknown" script property to the "Cn" / + # "Unassigned" range. + pool._range_array_pool["Unknown"] = ( + self.general_category_pool._range_array_pool["Cn"] + ) + + def print_template(self): + """ + Produce the generated C++ code for the gathered Unicode properties data. + + This includes the string pool, range pool, and range array pool data. + """ + all_strings = sorted( + self._names, + key=lambda name: (len(name), name), + reverse=True, + ) + string_pool = reduce( + lambda acc, item: acc if item in acc else acc + item, + all_strings, + "", + ) + + def string_coord(name): + """ + Build a string pool lookup reference for a given name. + + Example output: + + { offset, size } + """ + offset = string_pool.index(name) + size = len(name) + self._metrics["string_offset"] = max(self._metrics["string_offset"], offset) + self._metrics["string_size"] = max(self._metrics["string_size"], size) + assert offset + size < 0xFFFF, "String pool offset+size exceeds uint16_t" + return f"{{ {offset}, {size} }}" + + def _range_pool(): + """ + Using the range pool, generate the UnicodeRange entries for the C++ + code, that reference the shared range pool. + + Example output: + + static constexpr UnicodeRange UNICODE_RANGE_POOL[] = { + // General_Category: Cc + {0x0000, 0x001F}, + {0x007F, 0x009F}, + }; + """ + for (cat, name), (offset, ranges, range_size) in self._range_pool.items(): + if self.INCLUDE_COMMENTS: + yield f"// {cat}: {name}" + if ranges: + # Manually batch the ranges into 3 per line, because + # clang-format wants to format them to a single item per + # line. + for batch in batched(ranges, 3): + yield "".join( + f"{{{as_hex(start)}, {as_hex(end)}}},".ljust(20) + for start, end in batch + ).strip() + + def _range_array_pool(): + """ + Using the range array pool, generate the UnicodeRangePoolRef entries + for the C++ code, that reference the shared range pool. + + Example output: + + static constexpr UnicodeRangePoolRef UNICODE_RANGE_ARRAY_POOL[] { + // General_Category: Cc + {0, 2}, + // General_Category: Cf + {2, 21}, + }; + """ + for (cat, name), (offset, ranges, range_size) in self._range_pool.items(): + if self.INCLUDE_COMMENTS: + yield f"// {cat}: {name}" + if ranges is not None: + size = len(ranges) if range_size is None else range_size + assert ( + offset + size < 0xFFFF + ), "Range array offset+size exceeds uint16_t" + self._metrics["range_pool_offset"] = max( + self._metrics["range_pool_offset"], offset + ) + self._metrics["range_pool_size"] = max( + self._metrics["range_pool_size"], size + ) + yield f"{{ {offset}, {size} }}," + + def _build_name_map(pool: UnicodePropertyCategory): + """ + For a given pool, build the NameMapEntry entries for the C++ code, + that reference the shared string pool. + + Example output: + + static constexpr NameMapEntry canonicalPropertyNameMap_GeneralCategory[] = { + // "C", "C" + {{18, 1}, {18, 1}}, + // "Cased_Letter", "LC" + {{1368, 12}, {3008, 2}}, + }; + """ + for alias, name in pool.all_names(): + if self.INCLUDE_COMMENTS: + yield f'// "{alias}", "{name}"' + yield f"{{ {string_coord(alias)}, {string_coord(name)} }}," + + def _build_range_map(pool: UnicodePropertyCategory): + """ + For a given pool, build the RangeMapEntry entries for the C++ code, + that reference the shared range array pool. + + Example output: + + static constexpr RangeMapEntry unicodePropertyRangeMap_GeneralCategory[] = { + // "C" + {{18, 1}, 0, 5}, + // "Cc" + {{3018, 2}, 0, 1}, + }; + """ + for name, (offset, size) in pool.range_array_pool(): + if self.INCLUDE_COMMENTS: + yield f'// "{name}"' + assert ( + offset + size < 0xFFFF + ), "Range array map offset+size exceeds uint16_t" + self._metrics["range_array_pool_offset"] = max( + self._metrics["range_array_pool_offset"], offset + ) + self._metrics["range_array_pool_size"] = max( + self._metrics["range_array_pool_size"], size + ) + yield f"{{ {string_coord(name)}, {offset}, {size} }}," + + print_template( + """ +#ifdef HERMES_ENABLE_UNICODE_REGEXP_PROPERTY_ESCAPES + +static constexpr std::string_view UNICODE_DATA_STRING_POOL = "${string_pool}"; + +// clang-format off +static constexpr UnicodeRange UNICODE_RANGE_POOL[] = { +${range_pool} +}; +// clang-format on + +static constexpr UnicodeRangePoolRef UNICODE_RANGE_ARRAY_POOL[] { +${range_array_pool} +}; + +static constexpr NameMapEntry canonicalPropertyNameMap_GeneralCategory[] = { +${name_map_general_category} +}; + +static constexpr RangeMapEntry unicodePropertyRangeMap_GeneralCategory[] = { +${range_map_general_category} +}; + +static constexpr NameMapEntry canonicalPropertyNameMap_BinaryProperty[] = { +${name_map_binary_property} +}; + +static constexpr RangeMapEntry unicodePropertyRangeMap_BinaryProperty[] = { +${range_map_binary_property} +}; + +static constexpr NameMapEntry canonicalPropertyNameMap_Script[] = { +${name_map_script_property} +}; + +static constexpr RangeMapEntry unicodePropertyRangeMap_Script[] = { +${range_map_script_property} +}; + +static constexpr RangeMapEntry unicodePropertyRangeMap_ScriptExtensions[] = { +${range_map_script_extensions_property} +}; + +#endif + """, + string_pool=string_pool, + range_pool=indent("\n".join(_range_pool()), " "), + range_array_pool="\n".join(_range_array_pool()), + name_map_general_category="\n".join( + _build_name_map(self.general_category_pool) + ), + range_map_general_category="\n".join( + _build_range_map(self.general_category_pool) + ), + name_map_binary_property="\n".join( + _build_name_map(self.binary_property_pool) + ), + range_map_binary_property="\n".join( + _build_range_map(self.binary_property_pool) + ), + name_map_script_property="\n".join( + _build_name_map(self.script_property_pool) + ), + range_map_script_property="\n".join( + _build_range_map(self.script_property_pool) + ), + # NOTE: There is no canonical name mapping for Script_Extensions, + # instead the one for Script is reused. + range_map_script_extensions_property="\n".join( + _build_range_map(self.script_extensions_property_pool) + ), + ) + + def stride_from(p1, p2): return p2[0] - p1[0] @@ -144,7 +1127,23 @@ def as_hex(cp): return "0x%.4X" % cp -class DeltaMapBlock(object): +def batched(iterable, n): + """ + Roughly equivalent to `itertools.batched` from Python 3.12, according to the + Python3 documentation for batched. + + + + >>> batched('ABCDEFG', 3) # ['ABC', 'DEF', 'G'] + """ + if n < 1: + raise ValueError("n must be at least one") + it = iter(iterable) + while batch := tuple(islice(it, n)): + yield batch + + +class DeltaMapBlock: def __init__(self): self.pairs = [] @@ -184,7 +1183,7 @@ def output(self): return code.strip() -class CaseMap(object): +class CaseMap: """Unicode case mapping helper. This class holds the list of codepoints, and their uppercase and @@ -297,31 +1296,22 @@ def print_canonicalizations(casemap, unicode): if __name__ == "__main__": - print("Fetching %s..." % UNICODE_DATA_URL, file=sys.stderr) - with urllib.request.urlopen(UNICODE_DATA_URL) as f: - unicode_data = f.read() - - print("Fetching %s..." % UNICODE_SPECIAL_CASING_URL, file=sys.stderr) - with urllib.request.urlopen(UNICODE_SPECIAL_CASING_URL) as f: - special_casing = f.read() - - print("Fetching %s..." % UNICODE_CASE_FOLDING_URL, file=sys.stderr) - with urllib.request.urlopen(UNICODE_CASE_FOLDING_URL) as f: - case_folding = f.read() - - print_header( - hashlib.sha1(unicode_data).hexdigest(), - hashlib.sha1(special_casing).hexdigest(), - hashlib.sha1(case_folding).hexdigest(), - ) - udata_lines = unicode_data.decode("utf-8").splitlines() - special_lines = special_casing.decode("utf-8").splitlines() - casefolding_lines = case_folding.decode("utf-8").splitlines() + print_header() + + print_categories(UnicodeDataFiles.get_lines("UnicodeData.txt")) + + unicode_properties = UnicodeProperties() + unicode_properties.gather_general_category_properties() + unicode_properties.gather_binary_properties() + unicode_properties.gather_script_properties() + unicode_properties.print_template() + # Show information about bit sizes for the string and range pools. + # unicode_properties.log_metrics() + casemap = CaseMap( - unicode_data_lines=udata_lines, - special_casing_lines=special_lines, - casefolding_lines=casefolding_lines, + unicode_data_lines=UnicodeDataFiles.get_lines("UnicodeData.txt"), + special_casing_lines=UnicodeDataFiles.get_lines("SpecialCasing.txt"), + casefolding_lines=UnicodeDataFiles.get_lines("CaseFolding.txt"), ) - print_categories(udata_lines) print_canonicalizations(casemap, unicode=True) print_canonicalizations(casemap, unicode=False) diff --git a/utils/testsuite/skiplist.json b/utils/testsuite/skiplist.json index 354c08c0179..f6a9d8aed21 100644 --- a/utils/testsuite/skiplist.json +++ b/utils/testsuite/skiplist.json @@ -78,6 +78,129 @@ } ], "skip_list": [ + { + "paths": [ + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Ahom.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Anatolian_Hieroglyphs.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Armenian.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Avestan.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Balinese.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Bamum.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Bassa_Vah.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Batak.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Bhaiksuki.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Brahmi.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Braille.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Canadian_Aboriginal.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Carian.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Caucasian_Albanian.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Cham.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Cherokee.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Chorasmian.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Common.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Cuneiform.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Deseret.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Dives_Akuru.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Egyptian_Hieroglyphs.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Elbasan.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Elymaic.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Ethiopic.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Gothic.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Hatran.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Hebrew.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Imperial_Aramaic.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Inherited.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Inscriptional_Pahlavi.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Inscriptional_Parthian.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Kawi.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Kharoshthi.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Khitan_Small_Script.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Khmer.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Lao.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Lepcha.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Lisu.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Lycian.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Lydian.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Makasar.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Marchen.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Medefaidrin.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Meetei_Mayek.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Mende_Kikakui.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Meroitic_Cursive.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Meroitic_Hieroglyphs.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Miao.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Mro.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nabataean.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_New_Tai_Lue.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nag_Mundari.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Newa.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nushu.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Nyiakeng_Puachue_Hmong.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Ogham.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Ol_Chiki.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Hungarian.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Italic.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_North_Arabian.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Persian.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Sogdian.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_South_Arabian.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Old_Turkic.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Osage.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Osmanya.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Pahawh_Hmong.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Palmyrene.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Pau_Cin_Hau.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Phoenician.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Rejang.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Runic.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Samaritan.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Saurashtra.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Shavian.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Siddham.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_SignWriting.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Sora_Sompeng.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Soyombo.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Sundanese.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tai_Tham.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tai_Viet.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tangsa.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tangut.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Thai.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tibetan.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Tifinagh.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Toto.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Ugaritic.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Vai.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Vithkuqi.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Wancho.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Warang_Citi.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Zanabazar_Square.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_-_Common.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_-_Han.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Han.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Malayalam.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Sharada.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Script_Extensions_-_Sinhala.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Sentence_Terminal.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Unified_Ideograph.js", + "test262/test/built-ins/RegExp/property-escapes/generated/XID_Continue.js", + "test262/test/built-ins/RegExp/property-escapes/generated/XID_Start.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Assigned.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Alphabetic.js", + "test262/test/built-ins/RegExp/property-escapes/generated/General_Category_-_Letter.js", + "test262/test/built-ins/RegExp/property-escapes/generated/General_Category_-_Other.js", + "test262/test/built-ins/RegExp/property-escapes/generated/General_Category_-_Other_Symbol.js", + "test262/test/built-ins/RegExp/property-escapes/generated/General_Category_-_Other_Letter.js", + "test262/test/built-ins/RegExp/property-escapes/generated/General_Category_-_Symbol.js", + "test262/test/built-ins/RegExp/property-escapes/generated/General_Category_-_Unassigned.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Grapheme_Base.js", + "test262/test/built-ins/RegExp/property-escapes/generated/ID_Continue.js", + "test262/test/built-ins/RegExp/property-escapes/generated/ID_Start.js", + "test262/test/built-ins/RegExp/property-escapes/generated/Ideographic.js", + "test262/test/built-ins/RegExp/property-escapes/generated/IDS_Binary_Operator.js" + ], + "comment": "Failed tests when HERMES_ENABLE_UNICODE_REGEXP_PROPERTY_ESCAPES=ON." + }, { "paths": [ "test262/test/language/expressions/arrow-function/scope-paramsbody-var-open.js", @@ -3793,7 +3916,8 @@ "test262/test/built-ins/encodeURIComponent/S15.1.3.4_A2.3_T1.js", "test262/test/built-ins/parseInt/S15.1.2.2_A8.js", "test262/test/built-ins/parseFloat/S15.1.2.3_A6.js", - "test262/test/built-ins/String/prototype/repeat/repeat-string-n-times.js" + "test262/test/built-ins/String/prototype/repeat/repeat-string-n-times.js", + "test262/test/built-ins/RegExp/property-escapes/generated/" ], "unsupported_features": [ "Promise.prototype.finally", @@ -3820,6 +3944,7 @@ "import-assertions", "json-superset", "new.target", + "regexp-v-flag", "regexp-unicode-property-escapes", "resizable-arraybuffer", "string-trimming", diff --git a/utils/testsuite/test_run_defs.py b/utils/testsuite/test_run_defs.py index c093158cdf7..f9a59482959 100644 --- a/utils/testsuite/test_run_defs.py +++ b/utils/testsuite/test_run_defs.py @@ -17,7 +17,7 @@ from .preprocess import generate_source, StrictMode from .skiplist import SkipCategory, SkippedPathsOrFeatures from .typing_defs import PathT -from .utils import TestCaseResult, TestResultCode +from .utils import get_hermes_supported_test262_features, TestCaseResult, TestResultCode @dataclass @@ -174,6 +174,14 @@ async def run_test(self, args: TestRunArgs) -> TestCaseResult: ) # Check if we need to skip this test due to unsupported features. for f in test_case.features: + # If it's not running shermes test and this feature is specifically + # supported by the built hermes binary, we don't need to test if it + # is in the skiplist. We may still skip it due to the rest features + # of this test case though. + if not args.shermes and f in get_hermes_supported_test262_features( + args.binary_directory + ): + continue if skip_result := args.skipped_paths_features.try_skip( f, [ diff --git a/utils/testsuite/utils.py b/utils/testsuite/utils.py index cefe4bbb800..b25e028e317 100644 --- a/utils/testsuite/utils.py +++ b/utils/testsuite/utils.py @@ -6,11 +6,13 @@ from __future__ import annotations import os +import re import sys from dataclasses import dataclass from enum import auto, Enum, unique +from functools import cache from pathlib import Path -from typing import List +from typing import List, Set from .typing_defs import PathT @@ -148,3 +150,54 @@ def check_hermes_exe(binary_dir: PathT, shermes: bool) -> None: if not os.path.isfile(exe): print(f"Error: {exe} not found.") sys.exit(1) + + +HERMES_FEATURES_MATCHER = re.compile( + r"\s*Features:\s*\n(.*\n)", re.MULTILINE | re.DOTALL +) +"""Match the "Features" output of `hermes --version`.""" + + +CONFIGURABLE_HERMES_FEATURES = { + "Unicode RegExp Property Escapes": "regexp-unicode-property-escapes", +} +"""Mapping of Hermes features to test262 features, for use in dynamic feature +skipping.""" + + +@cache +def get_hermes_features(binary_dir: PathT) -> List[str]: + """ + Run `hermes --version` and extract the features from the output. + """ + + import subprocess + + exe = os.path.join(binary_dir, "hermes") + try: + output = subprocess.check_output([exe, "--version"], stderr=subprocess.STDOUT) + features = HERMES_FEATURES_MATCHER.search(output.decode("utf-8")) + if features is not None: + return [feature.strip() for feature in features.group(1).splitlines()] + else: + return [] + except subprocess.CalledProcessError as e: + print( + "Failed to run hermes --version: " + e.output.decode("utf-8"), + file=sys.stderr, + ) + return [] + + +@cache +def get_hermes_supported_test262_features(binary_dir: PathT) -> List[str]: + """ + Get hermes supported test262 feature from the feature list of the built + hermes binary. + """ + hermes_features = get_hermes_features(binary_dir) + return [ + CONFIGURABLE_HERMES_FEATURES[hermes_feature] + for hermes_feature in hermes_features + if hermes_feature in CONFIGURABLE_HERMES_FEATURES + ]